asmcvar.h revision 173426
1193323Sed/*-
2193323Sed * Copyright (c) 2007 Rui Paulo <rpaulo@FreeBSD.org>
3193323Sed * All rights reserved.
4193323Sed *
5193323Sed * Redistribution and use in source and binary forms, with or without
6193323Sed * modification, are permitted provided that the following conditions
7193323Sed * are met:
8193323Sed * 1. Redistributions of source code must retain the above copyright
9193323Sed *    notice, this list of conditions and the following disclaimer.
10193323Sed * 2. Redistributions in binary form must reproduce the above copyright
11193323Sed *    notice, this list of conditions and the following disclaimer in the
12193323Sed *    documentation and/or other materials provided with the distribution.
13193323Sed *
14193323Sed * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15193323Sed * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16193323Sed * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17193323Sed * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
18234353Sdim * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19234353Sdim * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20263508Sdim * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21243830Sdim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22193323Sed * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
23249423Sdim * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24193323Sed * POSSIBILITY OF SUCH DAMAGE.
25249423Sdim *
26249423Sdim * $FreeBSD: head/sys/dev/asmc/asmcvar.h 173426 2007-11-07 20:05:13Z rpaulo $
27193323Sed *
28193323Sed */
29193323Sed
30193323Sed#define ASMC_MAXFANS	2
31193323Sed
32193323Sedstruct asmc_softc {
33193323Sed	device_t 		sc_dev;
34193323Sed	struct mtx 		sc_mtx;
35193323Sed	int 			sc_nfan;
36193323Sed	int16_t			sms_rest_x;
37243830Sdim	int16_t			sms_rest_y;
38243830Sdim	int16_t			sms_rest_z;
39243830Sdim	struct sysctl_oid 	*sc_fan_tree[ASMC_MAXFANS+1];
40193323Sed	struct sysctl_oid 	*sc_temp_tree;
41193323Sed	struct sysctl_oid 	*sc_sms_tree;
42221345Sdim	struct sysctl_oid 	*sc_light_tree;
43193323Sed	struct asmc_model 	*sc_model;
44193323Sed	int 			sc_rid;
45193323Sed	struct resource 	*sc_res;
46221345Sdim	void 			*sc_cookie;
47193323Sed	int 			sc_sms_intrtype;
48193323Sed	struct taskqueue 	*sc_sms_tq;
49193323Sed	struct task 		sc_sms_task;
50193323Sed};
51223017Sdim
52223017Sdim/*
53223017Sdim * The Sudden Motion Sensor is able to generate an interrupt when
54193323Sed * there are certain critical conditions (free fall, high acceleration and
55193323Sed * shocks).
56193323Sed * The following IRQ is used.
57193323Sed */
58193323Sed#define ASMC_IRQ		6
59193323Sed
60221345Sdim/*
61221345Sdim * Data port.
62221345Sdim */
63221345Sdim#define ASMC_DATAPORT		0x300
64263508Sdim#define ASMC_STATUS_MASK 	0x0f
65263508Sdim
66193323Sed/*
67221345Sdim * Command port.
68218893Sdim */
69218893Sdim#define ASMC_CMDPORT		0x304
70249423Sdim#define ASMC_CMDREAD		0x10
71249423Sdim#define ASMC_CMDWRITE		0x11
72249423Sdim
73263508Sdim/*
74263508Sdim * Interrupt port.
75249423Sdim */
76249423Sdim#define ASMC_INTPORT		0x31f
77263508Sdim
78249423Sdim
79249423Sdim/* Number of keys */
80249423Sdim#define ASMC_NKEYS		"#KEY"	/* RO; 4 bytes */
81249423Sdim
82249423Sdim/*
83218893Sdim * Fan control via SMC.
84218893Sdim */
85218893Sdim#define ASMC_KEY_FANCOUNT	"FNum"	/* RO; 1 byte */
86218893Sdim#define ASMC_KEY_FANMANUAL	"FS! "	/* RW; 2 bytes */
87221345Sdim#define ASMC_KEY_FANSPEED	"F%dAc"	/* RO; 2 bytes */
88221345Sdim#define ASMC_KEY_FANMINSPEED	"F%dMn"	/* RO; 2 bytes */
89221345Sdim#define ASMC_KEY_FANMAXSPEED	"F%dMx"	/* RO; 2 bytes */
90221345Sdim#define ASMC_KEY_FANSAFESPEED	"F%dSf"	/* RO; 2 bytes */
91221345Sdim#define ASMC_KEY_FANTARGETSPEED	"F%dTg"	/* RW; 2 bytes */
92249423Sdim
93249423Sdim/*
94221345Sdim * Sudden Motion Sensor (SMS).
95221345Sdim */
96223017Sdim#define ASMC_SMS_INIT1		0xe0
97223017Sdim#define ASMC_SMS_INIT2		0xf8
98234353Sdim#define ASMC_KEY_SMS		"MOCN"	/* RW; 2 bytes */
99224145Sdim#define ASMC_KEY_SMS_X		"MO_X"	/* RO; 2 bytes */
100226633Sdim#define ASMC_KEY_SMS_Y		"MO_Y"	/* RO; 2 bytes */
101226633Sdim#define ASMC_KEY_SMS_Z		"MO_Z"	/* RO; 2 bytes */
102226633Sdim#define ASMC_KEY_SMS_LOW	"MOLT"	/* RW; 2 bytes */
103226633Sdim#define ASMC_KEY_SMS_HIGH	"MOHT"	/* RW; 2 bytes */
104226633Sdim#define ASMC_KEY_SMS_LOW_INT	"MOLD"	/* RW; 1 byte */
105239462Sdim#define ASMC_KEY_SMS_HIGH_INT	"MOHD"	/* RW; 1 byte */
106239462Sdim#define ASMC_KEY_SMS_FLAG	"MSDW"	/* RW; 1 byte */
107243830Sdim#define ASMC_SMS_INTFF		0x60	/* Free fall Interrupt */
108243830Sdim#define ASMC_SMS_INTHA		0x6f	/* High Acceleration Interrupt */
109243830Sdim#define ASMC_SMS_INTSH		0x80	/* Shock Interrupt */
110243830Sdim
111243830Sdim/*
112243830Sdim * Keyboard backlight.
113243830Sdim */
114243830Sdim#define ASMC_KEY_LIGHTLEFT	"ALV0"	/* RO; 6 bytes */
115243830Sdim#define ASMC_KEY_LIGHTRIGHT	"ALV1"	/* RO; 6 bytes */
116243830Sdim#define ASMC_KEY_LIGHTVALUE	"LKSB"	/* WO; 2 bytes */
117243830Sdim
118243830Sdim/*
119243830Sdim * Clamshell.
120243830Sdim */
121243830Sdim#define ASMC_KEY_CLAMSHELL	"MSLD"	/* RO; 1 byte */
122243830Sdim
123243830Sdim/*
124243830Sdim * Interrupt keys.
125243830Sdim */
126243830Sdim#define ASMC_KEY_INTOK		"NTOK"	/* WO; 1 byte */
127243830Sdim
128243830Sdim/*
129243830Sdim * Temperatures.
130243830Sdim *
131243830Sdim * First for MacBook, second for MacBook Pro, then for Intel Mac Mini.
132243830Sdim *
133243830Sdim */
134243830Sdim#define ASMC_MB_TEMPS		{ "TB0T", "TN0P", "TN1P", "Th0H", "Th1H", \
135243830Sdim				  "TM0P", NULL }
136243830Sdim#define ASMC_MB_TEMPNAMES	{ "enclosure", "northbridge1", \
137243830Sdim				  "northbridge2", "heatsink1", \
138243830Sdim				  "heatsink2", "memory", }
139243830Sdim#define ASMC_MB_TEMPDESCS	{ "Enclosure Bottomside", \
140243830Sdim				  "Northbridge Point 1", \
141243830Sdim				  "Northbridge Point 2", "Heatsink 1", \
142243830Sdim				  "Heatsink 2", "Memory Bank A", }
143243830Sdim
144243830Sdim#define ASMC_MBP_TEMPS		{ "TB0T", "Th0H", "Th1H", "Tm0P", \
145243830Sdim				  "TG0H", "TG0P", "TG0T", NULL }
146243830Sdim
147243830Sdim#define ASMC_MBP_TEMPNAMES	{ "enclosure", "heatsink1", \
148251662Sdim				  "heatsink2", "memory", "graphics", \
149251662Sdim				  "graphicssink", "unknown", }
150251662Sdim
151251662Sdim#define ASMC_MBP_TEMPDESCS	{ "Enclosure Bottomside", \
152251662Sdim				  "Heatsink 1", "Heatsink 2", \
153251662Sdim				  "Memory Controller", \
154251662Sdim				  "Graphics Chip", "Graphics Heatsink", \
155251662Sdim				  "Unknown", }
156251662Sdim
157263508Sdim#define ASMC_MM_TEMPS		{ "TN0P", "TN1P", NULL }
158263508Sdim#define ASMC_MM_TEMPNAMES	{ "northbridge1", "northbridge2" }
159263508Sdim#define ASMC_MM_TEMPDESCS	{ "Northbridge Point 1", \
160263508Sdim				  "Northbridge Point 2" }
161263508Sdim