Merge branch 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal...
[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 #include "dbglog.h"
44
45 /*
46  * Extended WMI commands are those that are needed during wireless
47  * operation, but which are not really wireless commands.  This allows,
48  * for instance, platform-specific commands.  Extended WMI commands are
49  * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
50  * Extended WMI events are similarly embedded in a WMI event message with
51  * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
52  */
53 typedef PREPACK struct {
54     u32 commandId;
55 } POSTPACK WMIX_CMD_HDR;
56
57 typedef enum {
58     WMIX_DSETOPEN_REPLY_CMDID           = 0x2001,
59     WMIX_DSETDATA_REPLY_CMDID,
60     WMIX_GPIO_OUTPUT_SET_CMDID,
61     WMIX_GPIO_INPUT_GET_CMDID,
62     WMIX_GPIO_REGISTER_SET_CMDID,
63     WMIX_GPIO_REGISTER_GET_CMDID,
64     WMIX_GPIO_INTR_ACK_CMDID,
65     WMIX_HB_CHALLENGE_RESP_CMDID,
66     WMIX_DBGLOG_CFG_MODULE_CMDID,
67     WMIX_PROF_CFG_CMDID,                 /* 0x200a */
68     WMIX_PROF_ADDR_SET_CMDID,
69     WMIX_PROF_START_CMDID,
70     WMIX_PROF_STOP_CMDID,
71     WMIX_PROF_COUNT_GET_CMDID,
72 } WMIX_COMMAND_ID;
73
74 typedef enum {
75     WMIX_DSETOPENREQ_EVENTID            = 0x3001,
76     WMIX_DSETCLOSE_EVENTID,
77     WMIX_DSETDATAREQ_EVENTID,
78     WMIX_GPIO_INTR_EVENTID,
79     WMIX_GPIO_DATA_EVENTID,
80     WMIX_GPIO_ACK_EVENTID,
81     WMIX_HB_CHALLENGE_RESP_EVENTID,
82     WMIX_DBGLOG_EVENTID,
83     WMIX_PROF_COUNT_EVENTID,
84 } WMIX_EVENT_ID;
85
86 /*
87  * =============DataSet support=================
88  */
89
90 /*
91  * WMIX_DSETOPENREQ_EVENTID
92  * DataSet Open Request Event
93  */
94 typedef PREPACK struct {
95     u32 dset_id;
96     u32 targ_dset_handle;  /* echo'ed, not used by Host, */
97     u32 targ_reply_fn;     /* echo'ed, not used by Host, */
98     u32 targ_reply_arg;    /* echo'ed, not used by Host, */
99 } POSTPACK WMIX_DSETOPENREQ_EVENT;
100
101 /*
102  * WMIX_DSETCLOSE_EVENTID
103  * DataSet Close Event
104  */
105 typedef PREPACK struct {
106     u32 access_cookie;
107 } POSTPACK WMIX_DSETCLOSE_EVENT;
108
109 /*
110  * WMIX_DSETDATAREQ_EVENTID
111  * DataSet Data Request Event
112  */
113 typedef PREPACK struct {
114     u32 access_cookie;
115     u32 offset;
116     u32 length;
117     u32 targ_buf;         /* echo'ed, not used by Host, */
118     u32 targ_reply_fn;    /* echo'ed, not used by Host, */
119     u32 targ_reply_arg;   /* echo'ed, not used by Host, */
120 } POSTPACK WMIX_DSETDATAREQ_EVENT;
121
122 typedef PREPACK struct {
123     u32 status;
124     u32 targ_dset_handle;
125     u32 targ_reply_fn;
126     u32 targ_reply_arg;
127     u32 access_cookie;
128     u32 size;
129     u32 version;
130 } POSTPACK WMIX_DSETOPEN_REPLY_CMD;
131
132 typedef PREPACK struct {
133     u32 status;
134     u32 targ_buf;
135     u32 targ_reply_fn;
136     u32 targ_reply_arg;
137     u32 length;
138     u8 buf[1];
139 } POSTPACK WMIX_DSETDATA_REPLY_CMD;
140
141
142 /* 
143  * =============GPIO support=================
144  * All masks are 18-bit masks with bit N operating on GPIO pin N.
145  */
146
147
148 /*
149  * Set GPIO pin output state.
150  * In order for output to be driven, a pin must be enabled for output.
151  * This can be done during initialization through the GPIO Configuration
152  * DataSet, or during operation with the enable_mask.
153  *
154  * If a request is made to simultaneously set/clear or set/disable or
155  * clear/disable or disable/enable, results are undefined.
156  */
157 typedef PREPACK struct {
158     u32 set_mask;             /* pins to set */
159     u32 clear_mask;           /* pins to clear */
160     u32 enable_mask;          /* pins to enable for output */
161     u32 disable_mask;         /* pins to disable/tristate */
162 } POSTPACK WMIX_GPIO_OUTPUT_SET_CMD;
163
164 /* 
165  * Set a GPIO register.  For debug/exceptional cases.
166  * Values for gpioreg_id are GPIO_REGISTER_IDs, defined in a
167  * platform-dependent header.
168  */
169 typedef PREPACK struct {
170     u32 gpioreg_id;           /* GPIO register ID */
171     u32 value;                /* value to write */
172 } POSTPACK WMIX_GPIO_REGISTER_SET_CMD;
173
174 /* Get a GPIO register.  For debug/exceptional cases. */
175 typedef PREPACK struct {
176     u32 gpioreg_id;           /* GPIO register to read */
177 } POSTPACK WMIX_GPIO_REGISTER_GET_CMD;
178
179 /*
180  * Host acknowledges and re-arms GPIO interrupts.  A single
181  * message should be used to acknowledge all interrupts that
182  * were delivered in an earlier WMIX_GPIO_INTR_EVENT message.
183  */
184 typedef PREPACK struct {
185     u32 ack_mask;             /* interrupts to acknowledge */
186 } POSTPACK WMIX_GPIO_INTR_ACK_CMD;
187
188 /*
189  * Target informs Host of GPIO interrupts that have occurred since the
190  * last WMIX_GIPO_INTR_ACK_CMD was received.  Additional information --
191  * the current GPIO input values is provided -- in order to support
192  * use of a GPIO interrupt as a Data Valid signal for other GPIO pins.
193  */
194 typedef PREPACK struct {
195     u32 intr_mask;            /* pending GPIO interrupts */
196     u32 input_values;         /* recent GPIO input values */
197 } POSTPACK WMIX_GPIO_INTR_EVENT;
198
199 /*
200  * Target responds to Host's earlier WMIX_GPIO_INPUT_GET_CMDID request
201  * using a GPIO_DATA_EVENT with
202  *   value set to the mask of GPIO pin inputs and
203  *   reg_id set to GPIO_ID_NONE
204  * 
205  *
206  * Target responds to Hosts's earlier WMIX_GPIO_REGISTER_GET_CMDID request
207  * using a GPIO_DATA_EVENT with
208  *   value set to the value of the requested register and
209  *   reg_id identifying the register (reflects the original request)
210  * NB: reg_id supports the future possibility of unsolicited
211  * WMIX_GPIO_DATA_EVENTs (for polling GPIO input), and it may
212  * simplify Host GPIO support.
213  */
214 typedef PREPACK struct {
215     u32 value;
216     u32 reg_id;
217 } POSTPACK WMIX_GPIO_DATA_EVENT;
218
219 /*
220  * =============Error Detection support=================
221  */
222
223 /*
224  * WMIX_HB_CHALLENGE_RESP_CMDID
225  * Heartbeat Challenge Response command
226  */
227 typedef PREPACK struct {
228     u32 cookie;
229     u32 source;
230 } POSTPACK WMIX_HB_CHALLENGE_RESP_CMD;
231
232 /*
233  * WMIX_HB_CHALLENGE_RESP_EVENTID
234  * Heartbeat Challenge Response Event
235  */
236 #define WMIX_HB_CHALLENGE_RESP_EVENT WMIX_HB_CHALLENGE_RESP_CMD
237
238 typedef PREPACK struct {
239     struct dbglog_config_s config;
240 } POSTPACK WMIX_DBGLOG_CFG_MODULE_CMD;
241
242 /*
243  * =============Target Profiling support=================
244  */
245
246 typedef PREPACK struct {
247     u32 period; /* Time (in 30.5us ticks) between samples */
248     u32 nbins;
249 } POSTPACK WMIX_PROF_CFG_CMD;
250
251 typedef PREPACK struct {
252     u32 addr;
253 } POSTPACK WMIX_PROF_ADDR_SET_CMD;
254
255 /*
256  * Target responds to Hosts's earlier WMIX_PROF_COUNT_GET_CMDID request
257  * using a WMIX_PROF_COUNT_EVENT with
258  *   addr set to the next address
259  *   count set to the corresponding count
260  */
261 typedef PREPACK struct {
262     u32 addr;
263     u32 count;
264 } POSTPACK WMIX_PROF_COUNT_EVENT;
265
266
267 #ifdef __cplusplus
268 }
269 #endif
270
271 #endif /* _WMIX_H_ */