net: wireless: rockchip_wlan: add rtl8188eu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188eu / include / rtw_wapi.h
1 #ifndef __INC_WAPI_H\r
2 #define __INC_WAPI_H\r
3 \r
4 \r
5 #define CONFIG_WAPI_SW_SMS4\r
6 #define WAPI_DEBUG\r
7 \r
8 #define SMS4_MIC_LEN                16\r
9 #define WAPI_EXT_LEN                18\r
10 #define MAX_WAPI_IE_LEN             256\r
11 #define sMacHdrLng                              24              // octets in data header, no WEP\r
12 \r
13 #ifdef WAPI_DEBUG\r
14 \r
15 /* WAPI trace debug */\r
16 extern u32 wapi_debug_component;\r
17 \r
18 static inline void dump_buf(u8 *buf, u32 len)\r
19 {\r
20         u32 i;\r
21         printk("-----------------Len %d----------------\n", len);\r
22         for(i=0; i<len; i++)\r
23                 printk("%2.2x-", *(buf+i));\r
24         printk("\n");\r
25 }\r
26 \r
27 #define WAPI_TRACE(component, x, args...) \\r
28 do { if(wapi_debug_component & (component)) \\r
29         printk(KERN_DEBUG "WAPI" ":" x "" , \\r
30                ##args);\\r
31 }while(0);\r
32 \r
33 #define WAPI_DATA(component, x, buf, len) \\r
34 do { if(wapi_debug_component & (component)){ \\r
35         printk("%s:\n", x);\\r
36         dump_buf((buf), (len));}\\r
37 }while(0);\r
38 \r
39 #define RT_ASSERT_RET(_Exp)                                                             \\r
40                 if(!(_Exp))                                                                     \\r
41                 {                                                                                       \\r
42                         printk("RTWLAN: ");                                     \\r
43                         printk( "Assertion failed! %s,%s,line=%d\n", \\r
44                         #_Exp,__FUNCTION__,__LINE__);          \\r
45                         return;                                         \\r
46                 }\r
47 #define RT_ASSERT_RET_VALUE(_Exp,Ret)                                                           \\r
48                 if(!(_Exp))                                                                     \\r
49                 {                                                                                       \\r
50                         printk("RTWLAN: ");                                     \\r
51                         printk( "Assertion failed! %s,%s,line=%d\n", \\r
52                         #_Exp,__FUNCTION__,__LINE__);          \\r
53                         return (Ret);                                           \\r
54                 }\r
55 \r
56 #else\r
57 #define RT_ASSERT_RET(_Exp) do {} while(0)\r
58 #define RT_ASSERT_RET_VALUE(_Exp,Ret) do {} while(0)\r
59 #define WAPI_TRACE(component, x, args...) do {} while(0)\r
60 #define WAPI_DATA(component, x, buf, len) do {} while(0)\r
61 #endif\r
62 \r
63 \r
64 enum WAPI_DEBUG {\r
65         WAPI_INIT                               = 1,\r
66         WAPI_API                                = 1<<1,\r
67         WAPI_TX                         = 1<<2,\r
68         WAPI_RX                         = 1<<3,\r
69         WAPI_MLME                               = 1<<4,\r
70         WAPI_IOCTL                              = 1<<5,\r
71         WAPI_ERR                                = 1<<31\r
72 };\r
73 \r
74 #define                 WAPI_MAX_BKID_NUM                               4\r
75 #define                 WAPI_MAX_STAINFO_NUM                    4\r
76 #define                 WAPI_CAM_ENTRY_NUM                      14      // 28/2=14\r
77 \r
78 typedef struct  _RT_WAPI_BKID\r
79 {\r
80         struct list_head        list;\r
81         u8                              bkid[16];\r
82 }RT_WAPI_BKID,*PRT_WAPI_BKID;\r
83 \r
84 typedef struct  _RT_WAPI_KEY\r
85 {\r
86         u8                      dataKey[16];\r
87         u8                      micKey[16];\r
88         u8                      keyId;\r
89         bool                    bSet;\r
90         bool             bTxEnable;\r
91 }RT_WAPI_KEY,*PRT_WAPI_KEY;\r
92 \r
93 typedef enum _RT_WAPI_PACKET_TYPE\r
94 {\r
95         WAPI_NONE = 0,\r
96         WAPI_PREAUTHENTICATE=1,\r
97         WAPI_STAKEY_REQUEST=2,\r
98         WAPI_AUTHENTICATE_ACTIVE=3,\r
99         WAPI_ACCESS_AUTHENTICATE_REQUEST=4,\r
100         WAPI_ACCESS_AUTHENTICATE_RESPONSE=5,\r
101         WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6,\r
102         WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7,\r
103         WAPI_USK_REQUEST=8,\r
104         WAPI_USK_RESPONSE=9,\r
105         WAPI_USK_CONFIRM=10,\r
106         WAPI_MSK_NOTIFICATION=11,\r
107         WAPI_MSK_RESPONSE=12\r
108 }RT_WAPI_PACKET_TYPE;\r
109 \r
110 typedef struct  _RT_WAPI_STA_INFO\r
111 {\r
112         struct list_head                list;\r
113         u8                                      PeerMacAddr[6];\r
114         RT_WAPI_KEY                   wapiUsk;\r
115         RT_WAPI_KEY                   wapiUskUpdate;\r
116         RT_WAPI_KEY                   wapiMsk;\r
117         RT_WAPI_KEY                   wapiMskUpdate;\r
118         u8                                      lastRxUnicastPN[16];\r
119         u8                                      lastTxUnicastPN[16];\r
120         u8                                      lastRxMulticastPN[16];\r
121         u8                                      lastRxUnicastPNBEQueue[16];\r
122         u8                                      lastRxUnicastPNBKQueue[16];\r
123         u8                                      lastRxUnicastPNVIQueue[16];\r
124         u8                                      lastRxUnicastPNVOQueue[16];\r
125         bool                                    bSetkeyOk;\r
126         bool                                    bAuthenticateInProgress;\r
127         bool                                    bAuthenticatorInUpdata;\r
128 }RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO;\r
129 \r
130 //Added for HW wapi en/decryption\r
131 typedef struct _RT_WAPI_CAM_ENTRY{\r
132         //RT_LIST_ENTRY         list;\r
133         u8                      IsUsed;\r
134         u8                      entry_idx;//for cam entry\r
135         u8                      keyidx; // 0 or 1,new or old key\r
136         u8                      PeerMacAddr[6];\r
137         u8                      type;   //should be 110,wapi\r
138 }RT_WAPI_CAM_ENTRY,*PRT_WAPI_CAM_ENTRY;\r
139 \r
140 typedef struct _RT_WAPI_T\r
141 {\r
142 //BKID\r
143         RT_WAPI_BKID            wapiBKID[WAPI_MAX_BKID_NUM];\r
144         struct list_head                wapiBKIDIdleList;\r
145         struct list_head                wapiBKIDStoreList;\r
146 //Key for Tx Multicast/Broadcast\r
147         RT_WAPI_KEY                   wapiTxMsk;\r
148 \r
149 //sec related\r
150         u8                              lastTxMulticastPN[16];\r
151 //STA list\r
152         RT_WAPI_STA_INFO        wapiSta[WAPI_MAX_STAINFO_NUM];\r
153         struct list_head                wapiSTAIdleList;\r
154         struct list_head                wapiSTAUsedList;\r
155 //\r
156         bool                            bWapiEnable;\r
157 \r
158 //store WAPI IE\r
159         u8                              wapiIE[256];\r
160         u8                              wapiIELength;\r
161         bool                            bWapiPSK;\r
162 //last sequece number for wai packet\r
163         u16                             wapiSeqnumAndFragNum;\r
164         int extra_prefix_len;\r
165         int extra_postfix_len;\r
166 \r
167         RT_WAPI_CAM_ENTRY       wapiCamEntry[WAPI_CAM_ENTRY_NUM];\r
168 }RT_WAPI_T,*PRT_WAPI_T;\r
169 \r
170 typedef struct _WLAN_HEADER_WAPI_EXTENSION\r
171 {\r
172     u8      KeyIdx;\r
173     u8      Reserved;\r
174     u8      PN[16];\r
175 } WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;\r
176 \r
177 u32 WapiComparePN(u8 *PN1, u8 *PN2);\r
178 \r
179 \r
180 void rtw_wapi_init(_adapter *padapter);\r
181 \r
182 void rtw_wapi_free(_adapter *padapter);\r
183 \r
184 void rtw_wapi_disable_tx(_adapter *padapter);\r
185 \r
186 u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data);\r
187 \r
188 void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);\r
189 \r
190 u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame);\r
191 \r
192 void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);\r
193 \r
194 void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);\r
195 \r
196 void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);\r
197 \r
198 void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);\r
199 \r
200 void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);\r
201 \r
202 void rtw_wapi_return_all_sta_info(_adapter *padapter);\r
203 \r
204 void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);\r
205 \r
206 void rtw_wapi_clear_all_cam_entry(_adapter *padapter);\r
207 \r
208 void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);\r
209 \r
210 int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);\r
211 \r
212 u32     rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);\r
213 \r
214 u32     rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);\r
215 \r
216 void rtw_wapi_get_iv(_adapter *padapter, u8*pRA, u8*IV);\r
217 \r
218 u8 WapiIncreasePN(u8 *PN, u8 AddCount);\r
219 \r
220 bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA);\r
221 \r
222 #endif\r