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