Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
[pandora-kernel.git] / drivers / staging / ath6kl / include / common / wmix.h
1 //------------------------------------------------------------------------------
2 // <copyright file="wmix.h" company="Atheros">
3 //    Copyright (c) 2004-2010 Atheros Corporation.  All rights reserved.
4 // 
5 //
6 // Permission to use, copy, modify, and/or distribute this software for any
7 // purpose with or without fee is hereby granted, provided that the above
8 // copyright notice and this permission notice appear in all copies.
9 //
10 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 //
18 //
19 //------------------------------------------------------------------------------
20 //==============================================================================
21 // Author(s): ="Atheros"
22 //==============================================================================
23
24 /*
25  * This file contains extensions of the WMI protocol specified in the
26  * Wireless Module Interface (WMI).  It includes definitions of all
27  * extended commands and events.  Extensions include useful commands
28  * that are not directly related to wireless activities.  They may
29  * be hardware-specific, and they might not be supported on all
30  * implementations.
31  *
32  * Extended WMIX commands are encapsulated in a WMI message with
33  * cmd=WMI_EXTENSION_CMD.
34  */
35
36 #ifndef _WMIX_H_
37 #define _WMIX_H_
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 #ifndef ATH_TARGET
44 #include "athstartpack.h"
45 #endif
46
47 #include "dbglog.h"
48
49 /*
50  * Extended WMI commands are those that are needed during wireless
51  * operation, but which are not really wireless commands.  This allows,
52  * for instance, platform-specific commands.  Extended WMI commands are
53  * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
54  * Extended WMI events are similarly embedded in a WMI event message with
55  * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
56  */
57 typedef PREPACK struct {
58     A_UINT32    commandId;
59 } POSTPACK WMIX_CMD_HDR;
60
61 typedef enum {
62     WMIX_DSETOPEN_REPLY_CMDID           = 0x2001,
63     WMIX_DSETDATA_REPLY_CMDID,
64     WMIX_GPIO_OUTPUT_SET_CMDID,
65     WMIX_GPIO_INPUT_GET_CMDID,
66     WMIX_GPIO_REGISTER_SET_CMDID,
67     WMIX_GPIO_REGISTER_GET_CMDID,
68     WMIX_GPIO_INTR_ACK_CMDID,
69     WMIX_HB_CHALLENGE_RESP_CMDID,
70     WMIX_DBGLOG_CFG_MODULE_CMDID,
71     WMIX_PROF_CFG_CMDID,                 /* 0x200a */
72     WMIX_PROF_ADDR_SET_CMDID,
73     WMIX_PROF_START_CMDID,
74     WMIX_PROF_STOP_CMDID,
75     WMIX_PROF_COUNT_GET_CMDID,
76 } WMIX_COMMAND_ID;
77
78 typedef enum {
79     WMIX_DSETOPENREQ_EVENTID            = 0x3001,
80     WMIX_DSETCLOSE_EVENTID,
81     WMIX_DSETDATAREQ_EVENTID,
82     WMIX_GPIO_INTR_EVENTID,
83     WMIX_GPIO_DATA_EVENTID,
84     WMIX_GPIO_ACK_EVENTID,
85     WMIX_HB_CHALLENGE_RESP_EVENTID,
86     WMIX_DBGLOG_EVENTID,
87     WMIX_PROF_COUNT_EVENTID,
88 } WMIX_EVENT_ID;
89
90 /*
91  * =============DataSet support=================
92  */
93
94 /*
95  * WMIX_DSETOPENREQ_EVENTID
96  * DataSet Open Request Event
97  */
98 typedef PREPACK struct {
99     A_UINT32 dset_id;
100     A_UINT32 targ_dset_handle;  /* echo'ed, not used by Host, */
101     A_UINT32 targ_reply_fn;     /* echo'ed, not used by Host, */
102     A_UINT32 targ_reply_arg;    /* echo'ed, not used by Host, */
103 } POSTPACK WMIX_DSETOPENREQ_EVENT;
104
105 /*
106  * WMIX_DSETCLOSE_EVENTID
107  * DataSet Close Event
108  */
109 typedef PREPACK struct {
110     A_UINT32 access_cookie;
111 } POSTPACK WMIX_DSETCLOSE_EVENT;
112
113 /*
114  * WMIX_DSETDATAREQ_EVENTID
115  * DataSet Data Request Event
116  */
117 typedef PREPACK struct {
118     A_UINT32 access_cookie;
119     A_UINT32 offset;
120     A_UINT32 length;
121     A_UINT32 targ_buf;         /* echo'ed, not used by Host, */
122     A_UINT32 targ_reply_fn;    /* echo'ed, not used by Host, */
123     A_UINT32 targ_reply_arg;   /* echo'ed, not used by Host, */
124 } POSTPACK WMIX_DSETDATAREQ_EVENT;
125
126 typedef PREPACK struct {
127     A_UINT32              status;
128     A_UINT32              targ_dset_handle;
129     A_UINT32              targ_reply_fn;
130     A_UINT32              targ_reply_arg;
131     A_UINT32              access_cookie;
132     A_UINT32              size;
133     A_UINT32              version;
134 } POSTPACK WMIX_DSETOPEN_REPLY_CMD;
135
136 typedef PREPACK struct {
137     A_UINT32              status;
138     A_UINT32              targ_buf;
139     A_UINT32              targ_reply_fn;
140     A_UINT32              targ_reply_arg;
141     A_UINT32              length;
142     A_UINT8               buf[1];
143 } POSTPACK WMIX_DSETDATA_REPLY_CMD;
144
145
146 /* 
147  * =============GPIO support=================
148  * All masks are 18-bit masks with bit N operating on GPIO pin N.
149  */
150
151 #include "gpio.h"
152
153 /*
154  * Set GPIO pin output state.
155  * In order for output to be driven, a pin must be enabled for output.
156  * This can be done during initialization through the GPIO Configuration
157  * DataSet, or during operation with the enable_mask.
158  *
159  * If a request is made to simultaneously set/clear or set/disable or
160  * clear/disable or disable/enable, results are undefined.
161  */
162 typedef PREPACK struct {
163     A_UINT32              set_mask;             /* pins to set */
164     A_UINT32              clear_mask;           /* pins to clear */
165     A_UINT32              enable_mask;          /* pins to enable for output */
166     A_UINT32              disable_mask;         /* pins to disable/tristate */
167 } POSTPACK WMIX_GPIO_OUTPUT_SET_CMD;
168
169 /* 
170  * Set a GPIO register.  For debug/exceptional cases.
171  * Values for gpioreg_id are GPIO_REGISTER_IDs, defined in a
172  * platform-dependent header.
173  */
174 typedef PREPACK struct {
175     A_UINT32              gpioreg_id;           /* GPIO register ID */
176     A_UINT32              value;                /* value to write */
177 } POSTPACK WMIX_GPIO_REGISTER_SET_CMD;
178
179 /* Get a GPIO register.  For debug/exceptional cases. */
180 typedef PREPACK struct {
181     A_UINT32              gpioreg_id;           /* GPIO register to read */
182 } POSTPACK WMIX_GPIO_REGISTER_GET_CMD;
183
184 /*
185  * Host acknowledges and re-arms GPIO interrupts.  A single
186  * message should be used to acknowledge all interrupts that
187  * were delivered in an earlier WMIX_GPIO_INTR_EVENT message.
188  */
189 typedef PREPACK struct {
190     A_UINT32              ack_mask;             /* interrupts to acknowledge */
191 } POSTPACK WMIX_GPIO_INTR_ACK_CMD;
192
193 /*
194  * Target informs Host of GPIO interrupts that have ocurred since the
195  * last WMIX_GIPO_INTR_ACK_CMD was received.  Additional information --
196  * the current GPIO input values is provided -- in order to support
197  * use of a GPIO interrupt as a Data Valid signal for other GPIO pins.
198  */
199 typedef PREPACK struct {
200     A_UINT32              intr_mask;            /* pending GPIO interrupts */
201     A_UINT32              input_values;         /* recent GPIO input values */
202 } POSTPACK WMIX_GPIO_INTR_EVENT;
203
204 /*
205  * Target responds to Host's earlier WMIX_GPIO_INPUT_GET_CMDID request
206  * using a GPIO_DATA_EVENT with
207  *   value set to the mask of GPIO pin inputs and
208  *   reg_id set to GPIO_ID_NONE
209  * 
210  *
211  * Target responds to Hosts's earlier WMIX_GPIO_REGISTER_GET_CMDID request
212  * using a GPIO_DATA_EVENT with
213  *   value set to the value of the requested register and
214  *   reg_id identifying the register (reflects the original request)
215  * NB: reg_id supports the future possibility of unsolicited
216  * WMIX_GPIO_DATA_EVENTs (for polling GPIO input), and it may
217  * simplify Host GPIO support.
218  */
219 typedef PREPACK struct {
220     A_UINT32              value;
221     A_UINT32              reg_id;
222 } POSTPACK WMIX_GPIO_DATA_EVENT;
223
224 /*
225  * =============Error Detection support=================
226  */
227
228 /*
229  * WMIX_HB_CHALLENGE_RESP_CMDID
230  * Heartbeat Challenge Response command
231  */
232 typedef PREPACK struct {
233     A_UINT32              cookie;
234     A_UINT32              source;
235 } POSTPACK WMIX_HB_CHALLENGE_RESP_CMD;
236
237 /*
238  * WMIX_HB_CHALLENGE_RESP_EVENTID
239  * Heartbeat Challenge Response Event
240  */
241 #define WMIX_HB_CHALLENGE_RESP_EVENT WMIX_HB_CHALLENGE_RESP_CMD
242
243 typedef PREPACK struct {
244     struct dbglog_config_s config;
245 } POSTPACK WMIX_DBGLOG_CFG_MODULE_CMD;
246
247 /*
248  * =============Target Profiling support=================
249  */
250
251 typedef PREPACK struct {
252     A_UINT32 period; /* Time (in 30.5us ticks) between samples */
253     A_UINT32 nbins;
254 } POSTPACK WMIX_PROF_CFG_CMD;
255
256 typedef PREPACK struct {
257     A_UINT32 addr;
258 } POSTPACK WMIX_PROF_ADDR_SET_CMD;
259
260 /*
261  * Target responds to Hosts's earlier WMIX_PROF_COUNT_GET_CMDID request
262  * using a WMIX_PROF_COUNT_EVENT with
263  *   addr set to the next address
264  *   count set to the corresponding count
265  */
266 typedef PREPACK struct {
267     A_UINT32              addr;
268     A_UINT32              count;
269 } POSTPACK WMIX_PROF_COUNT_EVENT;
270
271 #ifndef ATH_TARGET
272 #include "athendpack.h"
273 #endif
274
275 #ifdef __cplusplus
276 }
277 #endif
278
279 #endif /* _WMIX_H_ */