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