Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / drivers / staging / ath6kl / include / common / a_hci.h
1 //-
2 // Copyright (c) 2009-2010 Atheros Communications Inc.
3 // 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
22
23 #ifndef __A_HCI_H__
24 #define __A_HCI_H__
25
26 #define HCI_CMD_OGF_MASK            0x3F
27 #define HCI_CMD_OGF_SHIFT           10
28 #define HCI_CMD_GET_OGF(opcode)     ((opcode >> HCI_CMD_OGF_SHIFT) & HCI_CMD_OGF_MASK)
29
30 #define HCI_CMD_OCF_MASK            0x3FF
31 #define HCI_CMD_OCF_SHIFT           0 
32 #define HCI_CMD_GET_OCF(opcode)     (((opcode) >> HCI_CMD_OCF_SHIFT) & HCI_CMD_OCF_MASK)
33
34 #define HCI_FORM_OPCODE(ocf, ogf)    ((ocf & HCI_CMD_OCF_MASK) << HCI_CMD_OCF_SHIFT | \
35                                           (ogf & HCI_CMD_OGF_MASK) << HCI_CMD_OGF_SHIFT)
36
37
38 /*======== HCI Opcode groups ===============*/
39 #define OGF_NOP                         0x00
40 #define OGF_LINK_CONTROL                0x01
41 #define OGF_LINK_POLICY                 0x03
42 #define OGF_INFO_PARAMS                 0x04
43 #define OGF_STATUS                      0x05
44 #define OGF_TESTING                     0x06
45 #define OGF_BLUETOOTH                   0x3E
46 #define OGF_VENDOR_DEBUG                0x3F
47
48
49
50 #define OCF_NOP                         0x00
51
52
53 /*===== Link Control Commands Opcode===================*/
54 #define OCF_HCI_Create_Physical_Link                0x35
55 #define OCF_HCI_Accept_Physical_Link_Req            0x36
56 #define OCF_HCI_Disconnect_Physical_Link            0x37
57 #define OCF_HCI_Create_Logical_Link                 0x38
58 #define OCF_HCI_Accept_Logical_Link                 0x39
59 #define OCF_HCI_Disconnect_Logical_Link             0x3A
60 #define OCF_HCI_Logical_Link_Cancel                 0x3B
61 #define OCF_HCI_Flow_Spec_Modify                    0x3C
62
63
64
65 /*===== Link Policy Commands Opcode====================*/
66 #define OCF_HCI_Set_Event_Mask                      0x01
67 #define OCF_HCI_Reset                               0x03
68 #define OCF_HCI_Read_Conn_Accept_Timeout            0x15
69 #define OCF_HCI_Write_Conn_Accept_Timeout           0x16
70 #define OCF_HCI_Read_Link_Supervision_Timeout       0x36
71 #define OCF_HCI_Write_Link_Supervision_Timeout      0x37
72 #define OCF_HCI_Enhanced_Flush                      0x5F
73 #define OCF_HCI_Read_Logical_Link_Accept_Timeout    0x61
74 #define OCF_HCI_Write_Logical_Link_Accept_Timeout   0x62
75 #define OCF_HCI_Set_Event_Mask_Page_2               0x63
76 #define OCF_HCI_Read_Location_Data                  0x64
77 #define OCF_HCI_Write_Location_Data                 0x65
78 #define OCF_HCI_Read_Flow_Control_Mode              0x66
79 #define OCF_HCI_Write_Flow_Control_Mode             0x67
80 #define OCF_HCI_Read_BE_Flush_Timeout               0x69
81 #define OCF_HCI_Write_BE_Flush_Timeout              0x6A
82 #define OCF_HCI_Short_Range_Mode                    0x6B
83
84
85 /*======== Info Commands Opcode========================*/
86 #define OCF_HCI_Read_Local_Ver_Info                 0x01
87 #define OCF_HCI_Read_Local_Supported_Cmds           0x02
88 #define OCF_HCI_Read_Data_Block_Size                0x0A
89 /*======== Status Commands Opcode======================*/
90 #define OCF_HCI_Read_Failed_Contact_Counter         0x01
91 #define OCF_HCI_Reset_Failed_Contact_Counter        0x02
92 #define OCF_HCI_Read_Link_Quality                   0x03
93 #define OCF_HCI_Read_RSSI                           0x05
94 #define OCF_HCI_Read_Local_AMP_Info                 0x09    
95 #define OCF_HCI_Read_Local_AMP_ASSOC                0x0A
96 #define OCF_HCI_Write_Remote_AMP_ASSOC              0x0B
97
98
99 /*======= AMP_ASSOC Specific TLV tags =================*/
100 #define AMP_ASSOC_MAC_ADDRESS_INFO_TYPE             0x1
101 #define AMP_ASSOC_PREF_CHAN_LIST                    0x2
102 #define AMP_ASSOC_CONNECTED_CHAN                    0x3
103 #define AMP_ASSOC_PAL_CAPABILITIES                  0x4
104 #define AMP_ASSOC_PAL_VERSION                       0x5
105
106
107 /*========= PAL Events =================================*/
108 #define PAL_COMMAND_COMPLETE_EVENT                  0x0E
109 #define PAL_COMMAND_STATUS_EVENT                    0x0F
110 #define PAL_HARDWARE_ERROR_EVENT                    0x10
111 #define PAL_FLUSH_OCCURRED_EVENT                    0x11
112 #define PAL_LOOPBACK_EVENT                          0x19
113 #define PAL_BUFFER_OVERFLOW_EVENT                   0x1A
114 #define PAL_QOS_VIOLATION_EVENT                     0x1E
115 #define PAL_ENHANCED_FLUSH_COMPLT_EVENT             0x39
116 #define PAL_PHYSICAL_LINK_COMPL_EVENT               0x40
117 #define PAL_CHANNEL_SELECT_EVENT                    0x41
118 #define PAL_DISCONNECT_PHYSICAL_LINK_EVENT          0x42
119 #define PAL_PHY_LINK_EARLY_LOSS_WARNING_EVENT       0x43
120 #define PAL_PHY_LINK_RECOVERY_EVENT                 0x44
121 #define PAL_LOGICAL_LINK_COMPL_EVENT                0x45
122 #define PAL_DISCONNECT_LOGICAL_LINK_COMPL_EVENT     0x46
123 #define PAL_FLOW_SPEC_MODIFY_COMPL_EVENT            0x47
124 #define PAL_NUM_COMPL_DATA_BLOCK_EVENT              0x48
125 #define PAL_SHORT_RANGE_MODE_CHANGE_COMPL_EVENT     0x4C
126 #define PAL_AMP_STATUS_CHANGE_EVENT                 0x4D
127 /*======== End of PAL events definiton =================*/
128
129
130 /*======== Timeouts (not part of HCI cmd, but input to PAL engine) =========*/
131 #define Timer_Conn_Accept_TO                        0x01
132 #define Timer_Link_Supervision_TO                   0x02
133
134 #define NUM_HCI_COMMAND_PKTS                0x1
135
136
137 /*====== NOP Cmd ============================*/
138 #define HCI_CMD_NOP                     HCI_FORM_OPCODE(OCF_NOP, OGF_NOP)
139
140
141 /*===== Link Control Commands================*/
142 #define HCI_Create_Physical_Link        HCI_FORM_OPCODE(OCF_HCI_Create_Physical_Link, OGF_LINK_CONTROL)
143 #define HCI_Accept_Physical_Link_Req    HCI_FORM_OPCODE(OCF_HCI_Accept_Physical_Link_Req, OGF_LINK_CONTROL)
144 #define HCI_Disconnect_Physical_Link    HCI_FORM_OPCODE(OCF_HCI_Disconnect_Physical_Link, OGF_LINK_CONTROL)
145 #define HCI_Create_Logical_Link         HCI_FORM_OPCODE(OCF_HCI_Create_Logical_Link, OGF_LINK_CONTROL)
146 #define HCI_Accept_Logical_Link         HCI_FORM_OPCODE(OCF_HCI_Accept_Logical_Link, OGF_LINK_CONTROL)
147 #define HCI_Disconnect_Logical_Link     HCI_FORM_OPCODE(OCF_HCI_Disconnect_Logical_Link, OGF_LINK_CONTROL)
148 #define HCI_Logical_Link_Cancel         HCI_FORM_OPCODE(OCF_HCI_Logical_Link_Cancel, OGF_LINK_CONTROL)
149 #define HCI_Flow_Spec_Modify            HCI_FORM_OPCODE(OCF_HCI_Flow_Spec_Modify, OGF_LINK_CONTROL)
150
151
152 /*===== Link Policy Commands ================*/
153 #define HCI_Set_Event_Mask              HCI_FORM_OPCODE(OCF_HCI_Set_Event_Mask, OGF_LINK_POLICY)
154 #define HCI_Reset                       HCI_FORM_OPCODE(OCF_HCI_Reset, OGF_LINK_POLICY)
155 #define HCI_Enhanced_Flush              HCI_FORM_OPCODE(OCF_HCI_Enhanced_Flush, OGF_LINK_POLICY)
156 #define HCI_Read_Conn_Accept_Timeout    HCI_FORM_OPCODE(OCF_HCI_Read_Conn_Accept_Timeout, OGF_LINK_POLICY)
157 #define HCI_Write_Conn_Accept_Timeout   HCI_FORM_OPCODE(OCF_HCI_Write_Conn_Accept_Timeout, OGF_LINK_POLICY)
158 #define HCI_Read_Logical_Link_Accept_Timeout    HCI_FORM_OPCODE(OCF_HCI_Read_Logical_Link_Accept_Timeout, OGF_LINK_POLICY)
159 #define HCI_Write_Logical_Link_Accept_Timeout   HCI_FORM_OPCODE(OCF_HCI_Write_Logical_Link_Accept_Timeout, OGF_LINK_POLICY)
160 #define HCI_Read_Link_Supervision_Timeout       HCI_FORM_OPCODE(OCF_HCI_Read_Link_Supervision_Timeout, OGF_LINK_POLICY)
161 #define HCI_Write_Link_Supervision_Timeout      HCI_FORM_OPCODE(OCF_HCI_Write_Link_Supervision_Timeout, OGF_LINK_POLICY)
162 #define HCI_Read_Location_Data          HCI_FORM_OPCODE(OCF_HCI_Read_Location_Data, OGF_LINK_POLICY)
163 #define HCI_Write_Location_Data         HCI_FORM_OPCODE(OCF_HCI_Write_Location_Data, OGF_LINK_POLICY)
164 #define HCI_Set_Event_Mask_Page_2       HCI_FORM_OPCODE(OCF_HCI_Set_Event_Mask_Page_2, OGF_LINK_POLICY)
165 #define HCI_Read_Flow_Control_Mode      HCI_FORM_OPCODE(OCF_HCI_Read_Flow_Control_Mode, OGF_LINK_POLICY)
166 #define HCI_Write_Flow_Control_Mode     HCI_FORM_OPCODE(OCF_HCI_Write_Flow_Control_Mode, OGF_LINK_POLICY)
167 #define HCI_Write_BE_Flush_Timeout      HCI_FORM_OPCODE(OCF_HCI_Write_BE_Flush_Timeout, OGF_LINK_POLICY)
168 #define HCI_Read_BE_Flush_Timeout       HCI_FORM_OPCODE(OCF_HCI_Read_BE_Flush_Timeout, OGF_LINK_POLICY)
169 #define HCI_Short_Range_Mode            HCI_FORM_OPCODE(OCF_HCI_Short_Range_Mode, OGF_LINK_POLICY)            
170
171
172 /*===== Info Commands =====================*/
173 #define HCI_Read_Local_Ver_Info         HCI_FORM_OPCODE(OCF_HCI_Read_Local_Ver_Info,  OGF_INFO_PARAMS)
174 #define HCI_Read_Local_Supported_Cmds   HCI_FORM_OPCODE(OCF_HCI_Read_Local_Supported_Cmds, OGF_INFO_PARAMS)
175 #define HCI_Read_Data_Block_Size        HCI_FORM_OPCODE(OCF_HCI_Read_Data_Block_Size, OGF_INFO_PARAMS)
176
177 /*===== Status Commands =====================*/
178 #define HCI_Read_Link_Quality           HCI_FORM_OPCODE(OCF_HCI_Read_Link_Quality, OGF_STATUS)
179 #define HCI_Read_RSSI                   HCI_FORM_OPCODE(OCF_HCI_Read_RSSI, OGF_STATUS)
180 #define HCI_Read_Local_AMP_Info         HCI_FORM_OPCODE(OCF_HCI_Read_Local_AMP_Info, OGF_STATUS)
181 #define HCI_Read_Local_AMP_ASSOC        HCI_FORM_OPCODE(OCF_HCI_Read_Local_AMP_ASSOC, OGF_STATUS)
182 #define HCI_Write_Remote_AMP_ASSOC      HCI_FORM_OPCODE(OCF_HCI_Write_Remote_AMP_ASSOC, OGF_STATUS)
183
184 /*====== End of cmd definitions =============*/
185
186
187
188 /*===== Timeouts(private - can't come from HCI)=================*/
189 #define Conn_Accept_TO                  HCI_FORM_OPCODE(Timer_Conn_Accept_TO, OGF_VENDOR_DEBUG)
190 #define Link_Supervision_TO             HCI_FORM_OPCODE(Timer_Link_Supervision_TO, OGF_VENDOR_DEBUG)
191
192 /*----- PAL Constants (Sec 6 of Doc)------------------------*/
193 #define Max80211_PAL_PDU_Size      1492
194 #define Max80211_AMP_ASSOC_Len      672
195 #define MinGUserPrio                4
196 #define MaxGUserPrio                7
197 #define BEUserPrio0                 0
198 #define BEUserPrio1                 3
199 #define Max80211BeaconPeriod        2000    /* in millisec */
200 #define ShortRangeModePowerMax      4       /* dBm */
201
202 /*------ PAL Protocol Identifiers (Sec5.1) ------------------*/
203 typedef enum {
204     ACL_DATA = 0x01,
205     ACTIVITY_REPORT,
206     SECURED_FRAMES,
207     LINK_SUPERVISION_REQ,
208     LINK_SUPERVISION_RESP,
209 }PAL_PROTOCOL_IDENTIFIERS;
210
211 #define HCI_CMD_HDR_SZ          3
212 #define HCI_EVENT_HDR_SIZE      2
213 #define MAX_EVT_PKT_SZ          255
214 #define AMP_ASSOC_MAX_FRAG_SZ   248
215 #define AMP_MAX_GUARANTEED_BW   20000
216
217 #define DEFAULT_CONN_ACCPT_TO   5000
218 #define DEFAULT_LL_ACCPT_TO     5000
219 #define DEFAULT_LSTO            10000
220
221 #define PACKET_BASED_FLOW_CONTROL_MODE      0x00
222 #define DATA_BLK_BASED_FLOW_CONTROL_MODE    0x01
223
224 #define SERVICE_TYPE_BEST_EFFORT    0x01
225 #define SERVICE_TYPE_GUARANTEED     0x02
226
227 #define MAC_ADDR_LEN            6
228 #define LINK_KEY_LEN            32
229
230 typedef enum  {
231     ACL_DATA_PB_1ST_NON_AUTOMATICALLY_FLUSHABLE = 0x00,
232     ACL_DATA_PB_CONTINUING_FRAGMENT = 0x01,
233     ACL_DATA_PB_1ST_AUTOMATICALLY_FLUSHABLE = 0x02,
234     ACL_DATA_PB_COMPLETE_PDU = 0x03,
235 } ACL_DATA_PB_FLAGS;
236 #define ACL_DATA_PB_FLAGS_SHIFT     12
237
238 typedef enum {
239     ACL_DATA_BC_POINT_TO_POINT = 0x00,
240 } ACL_DATA_BC_FLAGS;
241 #define ACL_DATA_BC_FLAGS_SHIFT     14
242
243 /* Command pkt */
244 typedef struct  hci_cmd_pkt_t {
245     A_UINT16    opcode;
246     A_UINT8     param_length;
247     A_UINT8     params[255];
248 } POSTPACK HCI_CMD_PKT;
249
250 #define ACL_DATA_HDR_SIZE   4   /* hdl_and flags + data_len */
251 /* Data pkt */
252 typedef struct  hci_acl_data_pkt_t {
253     A_UINT16    hdl_and_flags;
254     A_UINT16    data_len;
255     A_UINT8     data[Max80211_PAL_PDU_Size];
256 } POSTPACK HCI_ACL_DATA_PKT;
257
258 /* Event pkt */
259 typedef struct  hci_event_pkt_t {
260     A_UINT8     event_code;
261     A_UINT8     param_len;
262     A_UINT8     params[256];
263 } POSTPACK HCI_EVENT_PKT;
264
265
266 /*============== HCI Command definitions ======================= */
267 typedef struct hci_cmd_phy_link_t {
268     A_UINT16    opcode;
269     A_UINT8     param_length;
270     A_UINT8     phy_link_hdl;
271     A_UINT8     link_key_len;
272     A_UINT8     link_key_type;
273     A_UINT8     link_key[LINK_KEY_LEN];
274 } POSTPACK HCI_CMD_PHY_LINK;
275
276 typedef struct  hci_cmd_write_rem_amp_assoc_t {
277     A_UINT16    opcode;
278     A_UINT8     param_length;
279     A_UINT8     phy_link_hdl;
280     A_UINT16    len_so_far;
281     A_UINT16    amp_assoc_remaining_len;
282     A_UINT8     amp_assoc_frag[AMP_ASSOC_MAX_FRAG_SZ];
283 } POSTPACK HCI_CMD_WRITE_REM_AMP_ASSOC;
284
285
286 typedef struct  hci_cmd_opcode_hdl_t {
287     A_UINT16    opcode;
288     A_UINT8     param_length;
289     A_UINT16    hdl;
290 } POSTPACK HCI_CMD_READ_LINK_QUAL,
291            HCI_CMD_FLUSH,
292            HCI_CMD_READ_LINK_SUPERVISION_TIMEOUT;
293
294 typedef struct  hci_cmd_read_local_amp_assoc_t {
295     A_UINT16    opcode;
296     A_UINT8     param_length;
297     A_UINT8     phy_link_hdl;
298     A_UINT16    len_so_far;
299     A_UINT16    max_rem_amp_assoc_len;
300 } POSTPACK HCI_CMD_READ_LOCAL_AMP_ASSOC;
301
302
303 typedef struct hci_cmd_set_event_mask_t {
304     A_UINT16    opcode;
305     A_UINT8     param_length;
306     A_UINT64    mask;
307 }POSTPACK HCI_CMD_SET_EVT_MASK, HCI_CMD_SET_EVT_MASK_PG_2;
308
309
310 typedef struct  hci_cmd_enhanced_flush_t{
311     A_UINT16    opcode;
312     A_UINT8     param_length;
313     A_UINT16    hdl;
314     A_UINT8     type;
315 } POSTPACK HCI_CMD_ENHANCED_FLUSH;
316
317
318 typedef struct  hci_cmd_write_timeout_t {
319     A_UINT16    opcode;
320     A_UINT8     param_length;
321     A_UINT16    timeout;
322 } POSTPACK  HCI_CMD_WRITE_TIMEOUT;
323
324 typedef struct  hci_cmd_write_link_supervision_timeout_t {
325     A_UINT16    opcode;
326     A_UINT8     param_length;
327     A_UINT16    hdl;
328     A_UINT16    timeout;
329 } POSTPACK HCI_CMD_WRITE_LINK_SUPERVISION_TIMEOUT;
330
331 typedef struct  hci_cmd_write_flow_control_t {
332     A_UINT16    opcode;
333     A_UINT8     param_length;
334     A_UINT8     mode;
335 } POSTPACK  HCI_CMD_WRITE_FLOW_CONTROL;
336
337 typedef struct  location_data_cfg_t {
338     A_UINT8     reg_domain_aware;
339     A_UINT8     reg_domain[3];
340     A_UINT8     reg_options;
341 } POSTPACK LOCATION_DATA_CFG;
342
343 typedef struct  hci_cmd_write_location_data_t {
344     A_UINT16    opcode;
345     A_UINT8     param_length;
346     LOCATION_DATA_CFG   cfg;
347 } POSTPACK  HCI_CMD_WRITE_LOCATION_DATA;
348
349
350 typedef struct  flow_spec_t {
351     A_UINT8     id;
352     A_UINT8     service_type;
353     A_UINT16    max_sdu;
354     A_UINT32    sdu_inter_arrival_time;
355     A_UINT32    access_latency;
356     A_UINT32    flush_timeout;
357 } POSTPACK FLOW_SPEC;
358
359
360 typedef struct  hci_cmd_create_logical_link_t {
361     A_UINT16    opcode;
362     A_UINT8     param_length;
363     A_UINT8     phy_link_hdl;
364     FLOW_SPEC   tx_flow_spec;
365     FLOW_SPEC   rx_flow_spec;
366 } POSTPACK HCI_CMD_CREATE_LOGICAL_LINK;
367
368 typedef struct  hci_cmd_flow_spec_modify_t {
369     A_UINT16    opcode;
370     A_UINT8     param_length;
371     A_UINT16    hdl;
372     FLOW_SPEC   tx_flow_spec;
373     FLOW_SPEC   rx_flow_spec;
374 } POSTPACK HCI_CMD_FLOW_SPEC_MODIFY;
375
376 typedef struct hci_cmd_logical_link_cancel_t {
377     A_UINT16    opcode;
378     A_UINT8     param_length;
379     A_UINT8     phy_link_hdl;
380     A_UINT8     tx_flow_spec_id;
381 } POSTPACK HCI_CMD_LOGICAL_LINK_CANCEL;
382
383 typedef struct  hci_cmd_disconnect_logical_link_t {
384     A_UINT16    opcode;
385     A_UINT8     param_length;
386     A_UINT16    logical_link_hdl;
387 } POSTPACK HCI_CMD_DISCONNECT_LOGICAL_LINK;
388
389 typedef struct  hci_cmd_disconnect_phy_link_t {
390     A_UINT16    opcode;
391     A_UINT8     param_length;
392     A_UINT8     phy_link_hdl;
393 } POSTPACK HCI_CMD_DISCONNECT_PHY_LINK;
394
395 typedef struct  hci_cmd_srm_t {
396     A_UINT16    opcode;
397     A_UINT8     param_length;
398     A_UINT8     phy_link_hdl;
399     A_UINT8     mode;
400 } POSTPACK HCI_CMD_SHORT_RANGE_MODE;
401 /*============== HCI Command definitions end ======================= */
402
403
404
405 /*============== HCI Event definitions ============================= */
406
407 /* Command complete event */
408 typedef struct  hci_event_cmd_complete_t {
409     A_UINT8     event_code;
410     A_UINT8     param_len;
411     A_UINT8     num_hci_cmd_pkts;
412     A_UINT16    opcode;
413     A_UINT8     params[255];
414 } POSTPACK HCI_EVENT_CMD_COMPLETE;
415
416
417 /* Command status event */
418 typedef struct  hci_event_cmd_status_t {
419     A_UINT8     event_code;
420     A_UINT8     param_len;
421     A_UINT8     status;
422     A_UINT8     num_hci_cmd_pkts;
423     A_UINT16    opcode;
424 } POSTPACK HCI_EVENT_CMD_STATUS;
425
426 /* Hardware Error event */
427 typedef struct  hci_event_hw_err_t {
428     A_UINT8     event_code;
429     A_UINT8     param_len;
430     A_UINT8     hw_err_code;
431 } POSTPACK HCI_EVENT_HW_ERR;
432
433 /* Flush occured event */
434 /* Qos Violation event */
435 typedef struct  hci_event_handle_t {
436     A_UINT8     event_code;
437     A_UINT8     param_len;
438     A_UINT16    handle;
439 } POSTPACK HCI_EVENT_FLUSH_OCCRD,
440            HCI_EVENT_QOS_VIOLATION;
441
442 /* Loopback command event */
443 typedef struct hci_loopback_cmd_t {
444     A_UINT8     event_code;
445     A_UINT8     param_len;
446     A_UINT8     params[252];
447 } POSTPACK HCI_EVENT_LOOPBACK_CMD;
448
449 /* Data buffer overflow event */
450 typedef struct  hci_data_buf_overflow_t {
451     A_UINT8     event_code;
452     A_UINT8     param_len;
453     A_UINT8     link_type;
454 } POSTPACK  HCI_EVENT_DATA_BUF_OVERFLOW;
455
456 /* Enhanced Flush complete event */
457 typedef struct hci_enhanced_flush_complt_t{
458     A_UINT8     event_code;
459     A_UINT8     param_len;
460     A_UINT16    hdl;
461 } POSTPACK  HCI_EVENT_ENHANCED_FLUSH_COMPLT;
462
463 /* Channel select event */
464 typedef struct  hci_event_chan_select_t {
465     A_UINT8     event_code;
466     A_UINT8     param_len;
467     A_UINT8     phy_link_hdl;
468 } POSTPACK HCI_EVENT_CHAN_SELECT;
469
470 /* Physical Link Complete event */
471 typedef struct  hci_event_phy_link_complete_event_t {
472     A_UINT8     event_code;
473     A_UINT8     param_len;
474     A_UINT8     status;
475     A_UINT8     phy_link_hdl;
476 } POSTPACK HCI_EVENT_PHY_LINK_COMPLETE;
477
478 /* Logical Link complete event */
479 typedef struct hci_event_logical_link_complete_event_t {
480     A_UINT8     event_code;
481     A_UINT8     param_len;
482     A_UINT8     status;
483     A_UINT16    logical_link_hdl;
484     A_UINT8     phy_hdl;
485     A_UINT8     tx_flow_id;
486 } POSTPACK HCI_EVENT_LOGICAL_LINK_COMPLETE_EVENT;
487
488 /* Disconnect Logical Link complete event */
489 typedef struct hci_event_disconnect_logical_link_event_t {
490     A_UINT8     event_code;
491     A_UINT8     param_len;
492     A_UINT8     status;
493     A_UINT16    logical_link_hdl;
494     A_UINT8     reason;
495 } POSTPACK HCI_EVENT_DISCONNECT_LOGICAL_LINK_EVENT;
496
497 /* Disconnect Physical Link complete event */
498 typedef struct hci_event_disconnect_phy_link_complete_t {
499     A_UINT8     event_code;
500     A_UINT8     param_len;
501     A_UINT8     status;
502     A_UINT8     phy_link_hdl;
503     A_UINT8     reason;
504 } POSTPACK HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE;
505
506 typedef struct hci_event_physical_link_loss_early_warning_t{
507     A_UINT8     event_code;
508     A_UINT8     param_len;
509     A_UINT8     phy_hdl;
510     A_UINT8     reason;
511 } POSTPACK HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING;
512
513 typedef struct hci_event_physical_link_recovery_t{
514     A_UINT8     event_code;
515     A_UINT8     param_len;
516     A_UINT8     phy_hdl;
517 } POSTPACK HCI_EVENT_PHY_LINK_RECOVERY;
518
519
520 /* Flow spec modify complete event */
521 /* Flush event */
522 typedef struct hci_event_status_handle_t {
523     A_UINT8     event_code;
524     A_UINT8     param_len;
525     A_UINT8     status;
526     A_UINT16    handle;
527 } POSTPACK HCI_EVENT_FLOW_SPEC_MODIFY,
528            HCI_EVENT_FLUSH;
529
530
531 /* Num of completed data blocks event */
532 typedef struct hci_event_num_of_compl_data_blks_t {
533     A_UINT8     event_code;
534     A_UINT8     param_len;
535     A_UINT16    num_data_blks;
536     A_UINT8     num_handles;
537     A_UINT8     params[255];
538 } POSTPACK HCI_EVENT_NUM_COMPL_DATA_BLKS;
539
540 /* Short range mode change complete event */
541 typedef struct  hci_srm_cmpl_t {
542     A_UINT8     event_code;
543     A_UINT8     param_len;
544     A_UINT8     status;
545     A_UINT8     phy_link;
546     A_UINT8     state;
547 } POSTPACK HCI_EVENT_SRM_COMPL;
548
549 typedef struct hci_event_amp_status_change_t{
550     A_UINT8     event_code;
551     A_UINT8     param_len;
552     A_UINT8     status;
553     A_UINT8     amp_status;
554 } POSTPACK HCI_EVENT_AMP_STATUS_CHANGE;
555
556 /*============== Event definitions end =========================== */
557
558
559 typedef struct  local_amp_info_resp_t {
560     A_UINT8     status;
561     A_UINT8     amp_status;
562     A_UINT32    total_bw;           /* kbps */
563     A_UINT32    max_guranteed_bw;   /* kbps */
564     A_UINT32    min_latency;
565     A_UINT32    max_pdu_size;
566     A_UINT8     amp_type;
567     A_UINT16    pal_capabilities;
568     A_UINT16    amp_assoc_len;
569     A_UINT32    max_flush_timeout;  /* in ms */
570     A_UINT32    be_flush_timeout;   /* in ms */
571 } POSTPACK  LOCAL_AMP_INFO;
572
573 typedef struct  amp_assoc_cmd_resp_t{
574     A_UINT8     status;
575     A_UINT8     phy_hdl;
576     A_UINT16    amp_assoc_len;
577     A_UINT8     amp_assoc_frag[AMP_ASSOC_MAX_FRAG_SZ];
578 }POSTPACK AMP_ASSOC_CMD_RESP;
579
580
581 enum PAL_HCI_CMD_STATUS {
582     PAL_HCI_CMD_PROCESSED,
583     PAL_HCI_CMD_IGNORED
584 }; 
585
586
587 /*============= HCI Error Codes =======================*/
588 #define HCI_SUCCESS                             0x00
589 #define HCI_ERR_UNKNOW_CMD                      0x01
590 #define HCI_ERR_UNKNOWN_CONN_ID                 0x02
591 #define HCI_ERR_HW_FAILURE                      0x03
592 #define HCI_ERR_PAGE_TIMEOUT                    0x04
593 #define HCI_ERR_AUTH_FAILURE                    0x05
594 #define HCI_ERR_KEY_MISSING                     0x06
595 #define HCI_ERR_MEM_CAP_EXECED                  0x07
596 #define HCI_ERR_CON_TIMEOUT                     0x08
597 #define HCI_ERR_CON_LIMIT_EXECED                0x09
598 #define HCI_ERR_ACL_CONN_ALRDY_EXISTS           0x0B
599 #define HCI_ERR_COMMAND_DISALLOWED                      0x0C
600 #define HCI_ERR_CONN_REJ_BY_LIMIT_RES           0x0D
601 #define HCI_ERR_CONN_REJ_BY_SEC                 0x0E
602 #define HCI_ERR_CONN_REJ_BY_BAD_ADDR            0x0F
603 #define HCI_ERR_CONN_ACCPT_TIMEOUT              0x10
604 #define HCI_ERR_UNSUPPORT_FEATURE               0x11
605 #define HCI_ERR_INVALID_HCI_CMD_PARAMS          0x12
606 #define HCI_ERR_REMOTE_USER_TERMINATE_CONN      0x13
607 #define HCI_ERR_CON_TERM_BY_HOST                0x16
608 #define HCI_ERR_UNSPECIFIED_ERROR               0x1F
609 #define HCI_ERR_ENCRYPTION_MODE_NOT_SUPPORT     0x25
610 #define HCI_ERR_REQUESTED_QOS_NOT_SUPPORT       0x27
611 #define HCI_ERR_QOS_UNACCEPTABLE_PARM           0x2C
612 #define HCI_ERR_QOS_REJECTED                    0x2D
613 #define HCI_ERR_CONN_REJ_NO_SUITABLE_CHAN       0x39
614
615 /*============= HCI Error Codes End =======================*/
616
617
618 /* Following are event return parameters.. part of HCI events 
619  */
620 typedef struct  timeout_read_t {
621     A_UINT8     status;
622     A_UINT16    timeout;
623 }POSTPACK TIMEOUT_INFO;
624
625 typedef struct  link_supervision_timeout_read_t {
626     A_UINT8     status;
627     A_UINT16    hdl;
628     A_UINT16    timeout;
629 }POSTPACK LINK_SUPERVISION_TIMEOUT_INFO;
630
631 typedef struct  status_hdl_t {
632     A_UINT8     status;
633     A_UINT16    hdl;
634 }POSTPACK INFO_STATUS_HDL;
635
636 typedef struct write_remote_amp_assoc_t{
637     A_UINT8     status;
638     A_UINT8     hdl;
639 }POSTPACK WRITE_REMOTE_AMP_ASSOC_INFO;
640
641 typedef struct  read_loc_info_t {
642     A_UINT8             status;
643     LOCATION_DATA_CFG   loc;
644 }POSTPACK READ_LOC_INFO;
645
646 typedef struct  read_flow_ctrl_mode_t {
647     A_UINT8     status;
648     A_UINT8     mode;
649 }POSTPACK READ_FLWCTRL_INFO;
650
651 typedef struct  read_data_blk_size_t {
652     A_UINT8     status;
653     A_UINT16    max_acl_data_pkt_len;
654     A_UINT16    data_block_len;
655     A_UINT16    total_num_data_blks;
656 }POSTPACK READ_DATA_BLK_SIZE_INFO;
657
658 /* Read Link quality info */
659 typedef struct link_qual_t {
660     A_UINT8     status;
661     A_UINT16    hdl;
662     A_UINT8     link_qual;
663 } POSTPACK READ_LINK_QUAL_INFO,
664             READ_RSSI_INFO;
665
666 typedef struct ll_cancel_resp_t {
667     A_UINT8 status;
668     A_UINT8 phy_link_hdl;
669     A_UINT8 tx_flow_spec_id;
670 } POSTPACK LL_CANCEL_RESP;
671
672 typedef struct read_local_ver_info_t {
673     A_UINT8     status;
674     A_UINT8     hci_version;
675     A_UINT16    hci_revision;
676     A_UINT8     pal_version;
677     A_UINT16    manf_name;
678     A_UINT16    pal_sub_ver;
679 } POSTPACK READ_LOCAL_VER_INFO;
680
681
682 #endif  /* __A_HCI_H__ */