1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 *   Driver for KeyStream wireless LAN
4 *
5 *   Copyright (c) 2005-2008 KeyStream Corp.
6 *   Copyright (C) 2009 Renesas Technology Corp.
7 */
8
9#ifndef _KS_HOSTIF_H_
10#define _KS_HOSTIF_H_
11
12#include <linux/compiler.h>
13#include <linux/ieee80211.h>
14
15/*
16 * HOST-MAC I/F events
17 */
18#define HIF_DATA_REQ		0xE001
19#define HIF_DATA_IND		0xE801
20#define HIF_MIB_GET_REQ		0xE002
21#define HIF_MIB_GET_CONF	0xE802
22#define HIF_MIB_SET_REQ		0xE003
23#define HIF_MIB_SET_CONF	0xE803
24#define HIF_POWER_MGMT_REQ	0xE004
25#define HIF_POWER_MGMT_CONF	0xE804
26#define HIF_START_REQ		0xE005
27#define HIF_START_CONF		0xE805
28#define HIF_CONNECT_IND		0xE806
29#define HIF_STOP_REQ		0xE006
30#define HIF_STOP_CONF		0xE807
31#define HIF_PS_ADH_SET_REQ	0xE007
32#define HIF_PS_ADH_SET_CONF	0xE808
33#define HIF_INFRA_SET_REQ	0xE008
34#define HIF_INFRA_SET_CONF	0xE809
35#define HIF_ADH_SET_REQ		0xE009
36#define HIF_ADH_SET_CONF	0xE80A
37#define HIF_AP_SET_REQ		0xE00A
38#define HIF_AP_SET_CONF		0xE80B
39#define HIF_ASSOC_INFO_IND	0xE80C
40#define HIF_MIC_FAILURE_REQ	0xE00B
41#define HIF_MIC_FAILURE_CONF	0xE80D
42#define HIF_SCAN_REQ		0xE00C
43#define HIF_SCAN_CONF		0xE80E
44#define HIF_PHY_INFO_REQ	0xE00D
45#define HIF_PHY_INFO_CONF	0xE80F
46#define HIF_SLEEP_REQ		0xE00E
47#define HIF_SLEEP_CONF		0xE810
48#define HIF_PHY_INFO_IND	0xE811
49#define HIF_SCAN_IND		0xE812
50#define HIF_INFRA_SET2_REQ	0xE00F
51#define HIF_INFRA_SET2_CONF	0xE813
52#define HIF_ADH_SET2_REQ	0xE010
53#define HIF_ADH_SET2_CONF	0xE814
54
55#define HIF_REQ_MAX		0xE010
56
57/*
58 * HOST-MAC I/F data structure
59 * Byte alignment Little Endian
60 */
61
62struct hostif_hdr {
63	__le16 size;
64	__le16 event;
65} __packed;
66
67struct hostif_data_request {
68	struct hostif_hdr header;
69	__le16 auth_type;
70#define TYPE_DATA 0x0000
71#define TYPE_AUTH 0x0001
72	__le16 reserved;
73	u8 data[];
74} __packed;
75
76#define TYPE_PMK1 0x0001
77#define TYPE_GMK1 0x0002
78#define TYPE_GMK2 0x0003
79
80#define CHANNEL_LIST_MAX_SIZE 14
81struct channel_list {
82	u8 size;
83	u8 body[CHANNEL_LIST_MAX_SIZE];
84	u8 pad;
85} __packed;
86
87/**
88 * enum mib_attribute - Management Information Base attribute
89 * Attribute value used for accessing and updating MIB
90 *
91 * @DOT11_MAC_ADDRESS: MAC Address (R)
92 * @DOT11_PRODUCT_VERSION: FirmWare Version (R)
93 * @DOT11_RTS_THRESHOLD: RTS Threshold (R/W)
94 * @DOT11_FRAGMENTATION_THRESHOLD: Fragment Threshold (R/W)
95 * @DOT11_PRIVACY_INVOKED: WEP ON/OFF (W)
96 * @DOT11_WEP_DEFAULT_KEY_ID: WEP Index (W)
97 * @DOT11_WEP_DEFAULT_KEY_VALUE1: WEP Key#1(TKIP AES: PairwiseTemporalKey) (W)
98 * @DOT11_WEP_DEFAULT_KEY_VALUE2: WEP Key#2(TKIP AES: GroupKey1) (W)
99 * @DOT11_WEP_DEFAULT_KEY_VALUE3: WEP Key#3(TKIP AES: GroupKey2) (W)
100 * @DOT11_WEP_DEFAULT_KEY_VALUE4: WEP Key#4 (W)
101 * @DOT11_WEP_LIST: WEP LIST
102 * @DOT11_DESIRED_SSID: SSID
103 * @DOT11_CURRENT_CHANNEL: channel set
104 * @DOT11_OPERATION_RATE_SET: rate set
105 * @LOCAL_AP_SEARCH_INTERVAL: AP search interval (R/W)
106 * @LOCAL_CURRENTADDRESS: MAC Address change (W)
107 * @LOCAL_MULTICAST_ADDRESS: Multicast Address (W)
108 * @LOCAL_MULTICAST_FILTER: Multicast Address Filter enable/disable (W)
109 * @LOCAL_SEARCHED_AP_LIST: AP list (R)
110 * @LOCAL_LINK_AP_STATUS: Link AP status (R)
111 * @LOCAL_PACKET_STATISTICS: tx,rx packets statistics
112 * @LOCAL_AP_SCAN_LIST_TYPE_SET: AP_SCAN_LIST_TYPE
113 * @DOT11_RSN_ENABLED: WPA enable/disable (W)
114 * @LOCAL_RSN_MODE: RSN mode WPA/WPA2 (W)
115 * @DOT11_RSN_CONFIG_MULTICAST_CIPHER: GroupKeyCipherSuite (W)
116 * @DOT11_RSN_CONFIG_UNICAST_CIPHER: PairwiseKeyCipherSuite (W)
117 * @DOT11_RSN_CONFIG_AUTH_SUITE: AuthenticationKeyManagementSuite (W)
118 * @DOT11_RSN_CONFIG_VERSION: RSN version (W)
119 * @LOCAL_RSN_CONFIG_ALL: RSN CONFIG ALL (W)
120 * @DOT11_PMK_TSC: PMK_TSC (W)
121 * @DOT11_GMK1_TSC: GMK1_TSC (W)
122 * @DOT11_GMK2_TSC: GMK2_TSC (W)
123 * @DOT11_GMK3_TSC: GMK3_TSC
124 * @LOCAL_PMK: Pairwise Master Key cache (W)
125 * @LOCAL_REGION: Region setting
126 * @LOCAL_WPS_ENABLE: WiFi Protected Setup
127 * @LOCAL_WPS_PROBE_REQ: WPS Probe Request
128 * @LOCAL_GAIN: Carrer sense threshold for demo ato show
129 * @LOCAL_EEPROM_SUM: EEPROM checksum information
130 */
131enum mib_attribute {
132	DOT11_MAC_ADDRESS                 = 0x21010100,
133	DOT11_PRODUCT_VERSION             = 0x31024100,
134	DOT11_RTS_THRESHOLD               = 0x21020100,
135	DOT11_FRAGMENTATION_THRESHOLD     = 0x21050100,
136	DOT11_PRIVACY_INVOKED             = 0x15010100,
137	DOT11_WEP_DEFAULT_KEY_ID          = 0x15020100,
138	DOT11_WEP_DEFAULT_KEY_VALUE1      = 0x13020101,
139	DOT11_WEP_DEFAULT_KEY_VALUE2      = 0x13020102,
140	DOT11_WEP_DEFAULT_KEY_VALUE3      = 0x13020103,
141	DOT11_WEP_DEFAULT_KEY_VALUE4      = 0x13020104,
142	DOT11_WEP_LIST                    = 0x13020100,
143	DOT11_DESIRED_SSID		  = 0x11090100,
144	DOT11_CURRENT_CHANNEL		  = 0x45010100,
145	DOT11_OPERATION_RATE_SET	  = 0x11110100,
146	LOCAL_AP_SEARCH_INTERVAL          = 0xF1010100,
147	LOCAL_CURRENTADDRESS              = 0xF1050100,
148	LOCAL_MULTICAST_ADDRESS           = 0xF1060100,
149	LOCAL_MULTICAST_FILTER            = 0xF1060200,
150	LOCAL_SEARCHED_AP_LIST            = 0xF1030100,
151	LOCAL_LINK_AP_STATUS              = 0xF1040100,
152	LOCAL_PACKET_STATISTICS		  = 0xF1020100,
153	LOCAL_AP_SCAN_LIST_TYPE_SET	  = 0xF1030200,
154	DOT11_RSN_ENABLED                 = 0x15070100,
155	LOCAL_RSN_MODE                    = 0x56010100,
156	DOT11_RSN_CONFIG_MULTICAST_CIPHER = 0x51040100,
157	DOT11_RSN_CONFIG_UNICAST_CIPHER   = 0x52020100,
158	DOT11_RSN_CONFIG_AUTH_SUITE       = 0x53020100,
159	DOT11_RSN_CONFIG_VERSION          = 0x51020100,
160	LOCAL_RSN_CONFIG_ALL              = 0x5F010100,
161	DOT11_PMK_TSC                     = 0x55010100,
162	DOT11_GMK1_TSC                    = 0x55010101,
163	DOT11_GMK2_TSC                    = 0x55010102,
164	DOT11_GMK3_TSC                    = 0x55010103,
165	LOCAL_PMK                         = 0x58010100,
166	LOCAL_REGION                      = 0xF10A0100,
167	LOCAL_WPS_ENABLE                  = 0xF10B0100,
168	LOCAL_WPS_PROBE_REQ               = 0xF10C0100,
169	LOCAL_GAIN                        = 0xF10D0100,
170	LOCAL_EEPROM_SUM                  = 0xF10E0100
171};
172
173struct hostif_mib_get_request {
174	struct hostif_hdr header;
175	__le32 mib_attribute;
176} __packed;
177
178/**
179 * enum mib_data_type - Message Information Base data type.
180 * @MIB_VALUE_TYPE_NULL: NULL type
181 * @MIB_VALUE_TYPE_INT: INTEGER type
182 * @MIB_VALUE_TYPE_BOOL: BOOL type
183 * @MIB_VALUE_TYPE_COUNT32: unused
184 * @MIB_VALUE_TYPE_OSTRING: Chunk of memory
185 */
186enum mib_data_type {
187	MIB_VALUE_TYPE_NULL = 0,
188	MIB_VALUE_TYPE_INT,
189	MIB_VALUE_TYPE_BOOL,
190	MIB_VALUE_TYPE_COUNT32,
191	MIB_VALUE_TYPE_OSTRING
192};
193
194struct hostif_mib_value {
195	__le16 size;
196	__le16 type;
197	u8 body[];
198} __packed;
199
200struct hostif_mib_get_confirm_t {
201	struct hostif_hdr header;
202	__le32 mib_status;
203#define MIB_SUCCESS    0
204#define MIB_INVALID    1
205#define MIB_READ_ONLY  2
206#define MIB_WRITE_ONLY 3
207	__le32 mib_attribute;
208	struct hostif_mib_value mib_value;
209} __packed;
210
211struct hostif_mib_set_request_t {
212	struct hostif_hdr header;
213	__le32 mib_attribute;
214	struct hostif_mib_value mib_value;
215} __packed;
216
217struct hostif_power_mgmt_request {
218	struct hostif_hdr header;
219	__le32 mode;
220#define POWER_ACTIVE  1
221#define POWER_SAVE    2
222	__le32 wake_up;
223#define SLEEP_FALSE 0
224#define SLEEP_TRUE  1	/* not used */
225	__le32 receive_dtims;
226#define DTIM_FALSE 0
227#define DTIM_TRUE  1
228} __packed;
229
230enum power_mgmt_mode_type {
231	POWER_MGMT_ACTIVE,
232	POWER_MGMT_SAVE1,
233	POWER_MGMT_SAVE2
234};
235
236#define	RESULT_SUCCESS            0
237#define	RESULT_INVALID_PARAMETERS 1
238#define	RESULT_NOT_SUPPORTED      2
239/* #define	RESULT_ALREADY_RUNNING    3 */
240#define	RESULT_ALREADY_RUNNING    7
241
242struct hostif_start_request {
243	struct hostif_hdr header;
244	__le16 mode;
245#define MODE_PSEUDO_ADHOC   0
246#define MODE_INFRASTRUCTURE 1
247#define MODE_AP             2	/* not used */
248#define MODE_ADHOC          3
249} __packed;
250
251struct ssid {
252	u8 size;
253	u8 body[IEEE80211_MAX_SSID_LEN];
254	u8 ssid_pad;
255} __packed;
256
257#define RATE_SET_MAX_SIZE 16
258struct rate_set8 {
259	u8 size;
260	u8 body[8];
261	u8 rate_pad;
262} __packed;
263
264struct fh_parms {
265	__le16 dwell_time;
266	u8 hop_set;
267	u8 hop_pattern;
268	u8 hop_index;
269} __packed;
270
271struct ds_parms {
272	u8 channel;
273} __packed;
274
275struct cf_parms {
276	u8 count;
277	u8 period;
278	__le16 max_duration;
279	__le16 dur_remaining;
280} __packed;
281
282struct ibss_parms {
283	__le16 atim_window;
284} __packed;
285
286struct rsn_t {
287	u8 size;
288#define RSN_BODY_SIZE 64
289	u8 body[RSN_BODY_SIZE];
290} __packed;
291
292struct erp_params_t {
293	u8 erp_info;
294} __packed;
295
296struct rate_set16 {
297	u8 size;
298	u8 body[16];
299	u8 rate_pad;
300} __packed;
301
302struct ap_info {
303	u8 bssid[6];	/* +00 */
304	u8 rssi;	/* +06 */
305	u8 sq;	/* +07 */
306	u8 noise;	/* +08 */
307	u8 pad0;	/* +09 */
308	__le16 beacon_period;	/* +10 */
309	__le16 capability;	/* +12 */
310	u8 frame_type;	/* +14 */
311	u8 ch_info;	/* +15 */
312	__le16 body_size;	/* +16 */
313	u8 body[1024];	/* +18 */
314	/* +1032 */
315} __packed;
316
317struct link_ap_info {
318	u8 bssid[6];	/* +00 */
319	u8 rssi;	/* +06 */
320	u8 sq;	/* +07 */
321	u8 noise;	/* +08 */
322	u8 pad0;	/* +09 */
323	__le16 beacon_period;	/* +10 */
324	__le16 capability;	/* +12 */
325	struct rate_set8 rate_set;	/* +14 */
326	struct fh_parms fh_parameter;	/* +24 */
327	struct ds_parms ds_parameter;	/* +29 */
328	struct cf_parms cf_parameter;	/* +30 */
329	struct ibss_parms ibss_parameter;	/* +36 */
330	struct erp_params_t erp_parameter;	/* +38 */
331	u8 pad1;	/* +39 */
332	struct rate_set8 ext_rate_set;	/* +40 */
333	u8 DTIM_period;	/* +50 */
334	u8 rsn_mode;	/* +51 */
335#define RSN_MODE_NONE	0
336#define RSN_MODE_WPA	1
337#define RSN_MODE_WPA2	2
338	struct {
339		u8 size;	/* +52 */
340		u8 body[128];	/* +53 */
341	} __packed rsn;
342} __packed;
343
344#define RESULT_CONNECT    0
345#define RESULT_DISCONNECT 1
346
347struct hostif_stop_request {
348	struct hostif_hdr header;
349} __packed;
350
351#define D_11B_ONLY_MODE		0
352#define D_11G_ONLY_MODE		1
353#define D_11BG_COMPATIBLE_MODE	2
354#define D_11A_ONLY_MODE		3
355
356#define CTS_MODE_FALSE	0
357#define CTS_MODE_TRUE	1
358
359struct hostif_request {
360	__le16 phy_type;
361	__le16 cts_mode;
362	__le16 scan_type;
363	__le16 capability;
364	struct rate_set16 rate_set;
365} __packed;
366
367/**
368 * struct hostif_ps_adhoc_set_request - pseudo adhoc mode
369 * @capability: bit5  : preamble
370 *              bit6  : pbcc - Not supported always 0
371 *              bit10 : ShortSlotTime
372 *              bit13 : DSSS-OFDM - Not supported always 0
373 */
374struct hostif_ps_adhoc_set_request {
375	struct hostif_hdr header;
376	struct hostif_request request;
377	__le16 channel;
378} __packed;
379
380#define AUTH_TYPE_OPEN_SYSTEM 0
381#define AUTH_TYPE_SHARED_KEY  1
382
383/**
384 * struct hostif_infrastructure_set_request
385 * @capability: bit5  : preamble
386 *              bit6  : pbcc - Not supported always 0
387 *              bit10 : ShortSlotTime
388 *              bit13 : DSSS-OFDM - Not supported always 0
389 */
390struct hostif_infrastructure_set_request {
391	struct hostif_hdr header;
392	struct hostif_request request;
393	struct ssid ssid;
394	__le16 beacon_lost_count;
395	__le16 auth_type;
396	struct channel_list channel_list;
397	u8 bssid[ETH_ALEN];
398} __packed;
399
400/**
401 * struct hostif_adhoc_set_request
402 * @capability: bit5  : preamble
403 *              bit6  : pbcc - Not supported always 0
404 *              bit10 : ShortSlotTime
405 *              bit13 : DSSS-OFDM - Not supported always 0
406 */
407struct hostif_adhoc_set_request {
408	struct hostif_hdr header;
409	struct hostif_request request;
410	struct ssid ssid;
411	__le16 channel;
412} __packed;
413
414/**
415 * struct hostif_adhoc_set2_request
416 * @capability: bit5  : preamble
417 *              bit6  : pbcc - Not supported always 0
418 *              bit10 : ShortSlotTime
419 *              bit13 : DSSS-OFDM - Not supported always 0
420 */
421struct hostif_adhoc_set2_request {
422	struct hostif_hdr header;
423	struct hostif_request request;
424	__le16 reserved;
425	struct ssid ssid;
426	struct channel_list channel_list;
427	u8 bssid[ETH_ALEN];
428} __packed;
429
430struct association_request {
431	u8 type;
432	u8 pad;
433	__le16 capability;
434	__le16 listen_interval;
435	u8 ap_address[6];
436	__le16 req_ies_size;
437} __packed;
438
439struct association_response {
440	u8 type;
441	u8 pad;
442	__le16 capability;
443	__le16 status;
444	__le16 association_id;
445	__le16 resp_ies_size;
446} __packed;
447
448struct hostif_bss_scan_request {
449	struct hostif_hdr header;
450	u8 scan_type;
451#define ACTIVE_SCAN  0
452#define PASSIVE_SCAN 1
453	u8 pad[3];
454	__le32 ch_time_min;
455	__le32 ch_time_max;
456	struct channel_list channel_list;
457	struct ssid ssid;
458} __packed;
459
460struct hostif_phy_information_request {
461	struct hostif_hdr header;
462	__le16 type;
463#define NORMAL_TYPE	0
464#define TIME_TYPE	1
465	__le16 time;	/* unit 100ms */
466} __packed;
467
468enum sleep_mode_type {
469	SLP_ACTIVE,
470	SLP_SLEEP
471};
472
473struct hostif_sleep_request {
474	struct hostif_hdr header;
475} __packed;
476
477struct hostif_mic_failure_request {
478	struct hostif_hdr header;
479	__le16 failure_count;
480	__le16 timer;
481} __packed;
482
483#define BASIC_RATE	0x80
484#define RATE_MASK	0x7F
485
486#define TX_RATE_AUTO      0xff
487#define TX_RATE_1M_FIXED  0
488#define TX_RATE_2M_FIXED  1
489#define TX_RATE_1_2M_AUTO 2
490#define TX_RATE_5M_FIXED  3
491#define TX_RATE_11M_FIXED 4
492
493#define TX_RATE_FULL_AUTO	0
494#define TX_RATE_11_AUTO		1
495#define TX_RATE_11B_AUTO	2
496#define TX_RATE_11BG_AUTO	3
497#define TX_RATE_MANUAL_AUTO	4
498#define TX_RATE_FIXED		5
499
500/* 11b rate */
501#define TX_RATE_1M	((u8)(10 / 5))	/* 11b 11g basic rate */
502#define TX_RATE_2M	((u8)(20 / 5))	/* 11b 11g basic rate */
503#define TX_RATE_5M	((u8)(55 / 5))	/* 11g basic rate */
504#define TX_RATE_11M	((u8)(110 / 5))	/* 11g basic rate */
505
506/* 11g rate */
507#define TX_RATE_6M	((u8)(60 / 5))	/* 11g basic rate */
508#define TX_RATE_12M	((u8)(120 / 5))	/* 11g basic rate */
509#define TX_RATE_24M	((u8)(240 / 5))	/* 11g basic rate */
510#define TX_RATE_9M	((u8)(90 / 5))
511#define TX_RATE_18M	((u8)(180 / 5))
512#define TX_RATE_36M	((u8)(360 / 5))
513#define TX_RATE_48M	((u8)(480 / 5))
514#define TX_RATE_54M	((u8)(540 / 5))
515
516static inline bool is_11b_rate(u8 rate)
517{
518	return (((rate & RATE_MASK) == TX_RATE_1M) ||
519		((rate & RATE_MASK) == TX_RATE_2M) ||
520		((rate & RATE_MASK) == TX_RATE_5M) ||
521		((rate & RATE_MASK) == TX_RATE_11M));
522}
523
524static inline bool is_ofdm_rate(u8 rate)
525{
526	return (((rate & RATE_MASK) == TX_RATE_6M)  ||
527		((rate & RATE_MASK) == TX_RATE_12M) ||
528		((rate & RATE_MASK) == TX_RATE_24M) ||
529		((rate & RATE_MASK) == TX_RATE_9M)  ||
530		((rate & RATE_MASK) == TX_RATE_18M) ||
531		((rate & RATE_MASK) == TX_RATE_36M) ||
532		((rate & RATE_MASK) == TX_RATE_48M) ||
533		((rate & RATE_MASK) == TX_RATE_54M));
534}
535
536static inline bool is_11bg_rate(u8 rate)
537{
538	return (is_11b_rate(rate) || is_ofdm_rate(rate));
539}
540
541static inline bool is_ofdm_ext_rate(u8 rate)
542{
543	return (((rate & RATE_MASK) == TX_RATE_9M)  ||
544		((rate & RATE_MASK) == TX_RATE_18M) ||
545		((rate & RATE_MASK) == TX_RATE_36M) ||
546		((rate & RATE_MASK) == TX_RATE_48M) ||
547		((rate & RATE_MASK) == TX_RATE_54M));
548}
549
550enum connect_status_type {
551	CONNECT_STATUS,
552	DISCONNECT_STATUS
553};
554
555enum preamble_type {
556	LONG_PREAMBLE,
557	SHORT_PREAMBLE
558};
559
560enum multicast_filter_type {
561	MCAST_FILTER_MCAST,
562	MCAST_FILTER_MCASTALL,
563	MCAST_FILTER_PROMISC,
564};
565
566#define NIC_MAX_MCAST_LIST 32
567
568#define HIF_EVENT_MASK 0xE800
569
570static inline bool is_hif_ind(unsigned short event)
571{
572	return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) &&
573		(((event & ~HIF_EVENT_MASK) == 0x0001) ||
574		 ((event & ~HIF_EVENT_MASK) == 0x0006) ||
575		 ((event & ~HIF_EVENT_MASK) == 0x000C) ||
576		 ((event & ~HIF_EVENT_MASK) == 0x0011) ||
577		 ((event & ~HIF_EVENT_MASK) == 0x0012)));
578}
579
580static inline bool is_hif_conf(unsigned short event)
581{
582	return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) &&
583		((event & ~HIF_EVENT_MASK) > 0x0000) &&
584		((event & ~HIF_EVENT_MASK) < 0x0012) &&
585		!is_hif_ind(event));
586}
587
588#ifdef __KERNEL__
589
590#include "ks_wlan.h"
591
592/* function prototype */
593int hostif_data_request(struct ks_wlan_private *priv, struct sk_buff *skb);
594void hostif_receive(struct ks_wlan_private *priv, unsigned char *p,
595		    unsigned int size);
596void hostif_sme_enqueue(struct ks_wlan_private *priv, u16 event);
597int hostif_init(struct ks_wlan_private *priv);
598void hostif_exit(struct ks_wlan_private *priv);
599int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long size,
600		  void (*complete_handler)(struct ks_wlan_private *priv,
601					   struct sk_buff *skb),
602		  struct sk_buff *skb);
603void send_packet_complete(struct ks_wlan_private *priv, struct sk_buff *skb);
604
605void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv);
606int ks_wlan_hw_power_save(struct ks_wlan_private *priv);
607
608#define KS7010_SIZE_ALIGNMENT	32
609
610static inline size_t hif_align_size(size_t size)
611{
612	return ALIGN(size, KS7010_SIZE_ALIGNMENT);
613}
614
615#endif /* __KERNEL__ */
616
617#endif /* _KS_HOSTIF_H_ */
618