162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  PS3 gelic network driver.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2007 Sony Computer Entertainment Inc.
662306a36Sopenharmony_ci * Copyright 2007 Sony Corporation
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#ifndef _GELIC_WIRELESS_H
962306a36Sopenharmony_ci#define _GELIC_WIRELESS_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/wireless.h>
1262306a36Sopenharmony_ci#include <net/iw_handler.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/* return value from  GELIC_LV1_GET_WLAN_EVENT netcontrol */
1662306a36Sopenharmony_cienum gelic_lv1_wl_event {
1762306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_DEVICE_READY   = 0x01, /* Eurus ready */
1862306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_SCAN_COMPLETED = 0x02, /* Scan has completed */
1962306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_DEAUTH         = 0x04, /* Deauthed by the AP */
2062306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_BEACON_LOST    = 0x08, /* Beacon lost detected */
2162306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_CONNECTED      = 0x10, /* Connected to AP */
2262306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_WPA_CONNECTED  = 0x20, /* WPA connection */
2362306a36Sopenharmony_ci	GELIC_LV1_WL_EVENT_WPA_ERROR      = 0x40, /* MIC error */
2462306a36Sopenharmony_ci};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/* arguments for GELIC_LV1_POST_WLAN_COMMAND netcontrol */
2762306a36Sopenharmony_cienum gelic_eurus_command {
2862306a36Sopenharmony_ci	GELIC_EURUS_CMD_ASSOC		=  1, /* association start */
2962306a36Sopenharmony_ci	GELIC_EURUS_CMD_DISASSOC	=  2, /* disassociate      */
3062306a36Sopenharmony_ci	GELIC_EURUS_CMD_START_SCAN	=  3, /* scan start        */
3162306a36Sopenharmony_ci	GELIC_EURUS_CMD_GET_SCAN	=  4, /* get scan result   */
3262306a36Sopenharmony_ci	GELIC_EURUS_CMD_SET_COMMON_CFG	=  5, /* set common config */
3362306a36Sopenharmony_ci	GELIC_EURUS_CMD_GET_COMMON_CFG	=  6, /* set common config */
3462306a36Sopenharmony_ci	GELIC_EURUS_CMD_SET_WEP_CFG	=  7, /* set WEP config    */
3562306a36Sopenharmony_ci	GELIC_EURUS_CMD_GET_WEP_CFG	=  8, /* get WEP config    */
3662306a36Sopenharmony_ci	GELIC_EURUS_CMD_SET_WPA_CFG	=  9, /* set WPA config    */
3762306a36Sopenharmony_ci	GELIC_EURUS_CMD_GET_WPA_CFG	= 10, /* get WPA config    */
3862306a36Sopenharmony_ci	GELIC_EURUS_CMD_GET_RSSI_CFG	= 11, /* get RSSI info.    */
3962306a36Sopenharmony_ci	GELIC_EURUS_CMD_MAX_INDEX
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/* for GELIC_EURUS_CMD_COMMON_CFG */
4362306a36Sopenharmony_cienum gelic_eurus_bss_type {
4462306a36Sopenharmony_ci	GELIC_EURUS_BSS_INFRA = 0,
4562306a36Sopenharmony_ci	GELIC_EURUS_BSS_ADHOC = 1, /* not supported */
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cienum gelic_eurus_auth_method {
4962306a36Sopenharmony_ci	GELIC_EURUS_AUTH_OPEN = 0, /* FIXME: WLAN_AUTH_OPEN */
5062306a36Sopenharmony_ci	GELIC_EURUS_AUTH_SHARED = 1, /* not supported */
5162306a36Sopenharmony_ci};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cienum gelic_eurus_opmode {
5462306a36Sopenharmony_ci	GELIC_EURUS_OPMODE_11BG = 0, /* 802.11b/g */
5562306a36Sopenharmony_ci	GELIC_EURUS_OPMODE_11B = 1, /* 802.11b only */
5662306a36Sopenharmony_ci	GELIC_EURUS_OPMODE_11G = 2, /* 802.11g only */
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistruct gelic_eurus_common_cfg {
6062306a36Sopenharmony_ci	/* all fields are big endian */
6162306a36Sopenharmony_ci	u16 scan_index;
6262306a36Sopenharmony_ci	u16 bss_type;    /* infra or adhoc */
6362306a36Sopenharmony_ci	u16 auth_method; /* shared key or open */
6462306a36Sopenharmony_ci	u16 op_mode; /* B/G */
6562306a36Sopenharmony_ci} __packed;
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci/* for GELIC_EURUS_CMD_WEP_CFG */
6962306a36Sopenharmony_cienum gelic_eurus_wep_security {
7062306a36Sopenharmony_ci	GELIC_EURUS_WEP_SEC_NONE	= 0,
7162306a36Sopenharmony_ci	GELIC_EURUS_WEP_SEC_40BIT	= 1,
7262306a36Sopenharmony_ci	GELIC_EURUS_WEP_SEC_104BIT	= 2,
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cistruct gelic_eurus_wep_cfg {
7662306a36Sopenharmony_ci	/* all fields are big endian */
7762306a36Sopenharmony_ci	u16 security;
7862306a36Sopenharmony_ci	u8 key[4][16];
7962306a36Sopenharmony_ci} __packed;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci/* for GELIC_EURUS_CMD_WPA_CFG */
8262306a36Sopenharmony_cienum gelic_eurus_wpa_security {
8362306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_NONE		= 0x0000,
8462306a36Sopenharmony_ci	/* group=TKIP, pairwise=TKIP */
8562306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA_TKIP_TKIP	= 0x0001,
8662306a36Sopenharmony_ci	/* group=AES, pairwise=AES */
8762306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA_AES_AES		= 0x0002,
8862306a36Sopenharmony_ci	/* group=TKIP, pairwise=TKIP */
8962306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA2_TKIP_TKIP	= 0x0004,
9062306a36Sopenharmony_ci	/* group=AES, pairwise=AES */
9162306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA2_AES_AES	= 0x0008,
9262306a36Sopenharmony_ci	/* group=TKIP, pairwise=AES */
9362306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA_TKIP_AES	= 0x0010,
9462306a36Sopenharmony_ci	/* group=TKIP, pairwise=AES */
9562306a36Sopenharmony_ci	GELIC_EURUS_WPA_SEC_WPA2_TKIP_AES	= 0x0020,
9662306a36Sopenharmony_ci};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cienum gelic_eurus_wpa_psk_type {
9962306a36Sopenharmony_ci	GELIC_EURUS_WPA_PSK_PASSPHRASE	= 0, /* passphrase string   */
10062306a36Sopenharmony_ci	GELIC_EURUS_WPA_PSK_BIN		= 1, /* 32 bytes binary key */
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci#define GELIC_WL_EURUS_PSK_MAX_LEN	64
10462306a36Sopenharmony_ci#define WPA_PSK_LEN			32 /* WPA spec says 256bit */
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_cistruct gelic_eurus_wpa_cfg {
10762306a36Sopenharmony_ci	/* all fields are big endian */
10862306a36Sopenharmony_ci	u16 security;
10962306a36Sopenharmony_ci	u16 psk_type; /* psk key encoding type */
11062306a36Sopenharmony_ci	u8 psk[GELIC_WL_EURUS_PSK_MAX_LEN]; /* psk key; hex or passphrase */
11162306a36Sopenharmony_ci} __packed;
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/* for GELIC_EURUS_CMD_{START,GET}_SCAN */
11462306a36Sopenharmony_cienum gelic_eurus_scan_capability {
11562306a36Sopenharmony_ci	GELIC_EURUS_SCAN_CAP_ADHOC	= 0x0000,
11662306a36Sopenharmony_ci	GELIC_EURUS_SCAN_CAP_INFRA	= 0x0001,
11762306a36Sopenharmony_ci	GELIC_EURUS_SCAN_CAP_MASK	= 0x0001,
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cienum gelic_eurus_scan_sec_type {
12162306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_NONE	= 0x0000,
12262306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WEP	= 0x0100,
12362306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA	= 0x0200,
12462306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA2	= 0x0400,
12562306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_MASK	= 0x0f00,
12662306a36Sopenharmony_ci};
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_cienum gelic_eurus_scan_sec_wep_type {
12962306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WEP_UNKNOWN	= 0x0000,
13062306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WEP_40		= 0x0001,
13162306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WEP_104		= 0x0002,
13262306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WEP_MASK		= 0x0003,
13362306a36Sopenharmony_ci};
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cienum gelic_eurus_scan_sec_wpa_type {
13662306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA_UNKNOWN	= 0x0000,
13762306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA_TKIP		= 0x0001,
13862306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA_AES		= 0x0002,
13962306a36Sopenharmony_ci	GELIC_EURUS_SCAN_SEC_WPA_MASK		= 0x0003,
14062306a36Sopenharmony_ci};
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci/*
14362306a36Sopenharmony_ci * hw BSS information structure returned from GELIC_EURUS_CMD_GET_SCAN
14462306a36Sopenharmony_ci */
14562306a36Sopenharmony_cistruct gelic_eurus_scan_info {
14662306a36Sopenharmony_ci	/* all fields are big endian */
14762306a36Sopenharmony_ci	__be16 size;
14862306a36Sopenharmony_ci	__be16 rssi; /* percentage */
14962306a36Sopenharmony_ci	__be16 channel; /* channel number */
15062306a36Sopenharmony_ci	__be16 beacon_period; /* FIXME: in msec unit */
15162306a36Sopenharmony_ci	__be16 capability;
15262306a36Sopenharmony_ci	__be16 security;
15362306a36Sopenharmony_ci	u8  bssid[8]; /* last ETH_ALEN are valid. bssid[0],[1] are unused */
15462306a36Sopenharmony_ci	u8  essid[32]; /* IW_ESSID_MAX_SIZE */
15562306a36Sopenharmony_ci	u8  rate[16]; /* first 12 are valid */
15662306a36Sopenharmony_ci	u8  ext_rate[16]; /* first 16 are valid */
15762306a36Sopenharmony_ci	__be32 reserved1;
15862306a36Sopenharmony_ci	__be32 reserved2;
15962306a36Sopenharmony_ci	__be32 reserved3;
16062306a36Sopenharmony_ci	__be32 reserved4;
16162306a36Sopenharmony_ci	u8 elements[]; /* ie */
16262306a36Sopenharmony_ci} __packed;
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci/* the hypervisor returns bbs up to 16 */
16562306a36Sopenharmony_ci#define GELIC_EURUS_MAX_SCAN  (16)
16662306a36Sopenharmony_cistruct gelic_wl_scan_info {
16762306a36Sopenharmony_ci	struct list_head list;
16862306a36Sopenharmony_ci	struct gelic_eurus_scan_info *hwinfo;
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci	int valid; /* set 1 if this entry was in latest scanned list
17162306a36Sopenharmony_ci		     * from Eurus */
17262306a36Sopenharmony_ci	unsigned int eurus_index; /* index in the Eurus list */
17362306a36Sopenharmony_ci	unsigned long last_scanned; /* acquired time */
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci	unsigned int rate_len;
17662306a36Sopenharmony_ci	unsigned int rate_ext_len;
17762306a36Sopenharmony_ci	unsigned int essid_len;
17862306a36Sopenharmony_ci};
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci/* for GELIC_EURUS_CMD_GET_RSSI */
18162306a36Sopenharmony_cistruct gelic_eurus_rssi_info {
18262306a36Sopenharmony_ci	/* big endian */
18362306a36Sopenharmony_ci	__be16 rssi;
18462306a36Sopenharmony_ci} __packed;
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci/* for 'stat' member of gelic_wl_info */
18862306a36Sopenharmony_cienum gelic_wl_info_status_bit {
18962306a36Sopenharmony_ci	GELIC_WL_STAT_CONFIGURED,
19062306a36Sopenharmony_ci	GELIC_WL_STAT_CH_INFO,   /* ch info acquired */
19162306a36Sopenharmony_ci	GELIC_WL_STAT_ESSID_SET, /* ESSID specified by userspace */
19262306a36Sopenharmony_ci	GELIC_WL_STAT_BSSID_SET, /* BSSID specified by userspace */
19362306a36Sopenharmony_ci	GELIC_WL_STAT_WPA_PSK_SET, /* PMK specified by userspace */
19462306a36Sopenharmony_ci	GELIC_WL_STAT_WPA_LEVEL_SET, /* WEP or WPA[2] selected */
19562306a36Sopenharmony_ci};
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci/* for 'scan_stat' member of gelic_wl_info */
19862306a36Sopenharmony_cienum gelic_wl_scan_state {
19962306a36Sopenharmony_ci	/* just initialized or get last scan result failed */
20062306a36Sopenharmony_ci	GELIC_WL_SCAN_STAT_INIT,
20162306a36Sopenharmony_ci	/* scan request issued, accepted or chip is scanning */
20262306a36Sopenharmony_ci	GELIC_WL_SCAN_STAT_SCANNING,
20362306a36Sopenharmony_ci	/* scan results retrieved */
20462306a36Sopenharmony_ci	GELIC_WL_SCAN_STAT_GOT_LIST,
20562306a36Sopenharmony_ci};
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci/* for 'cipher_method' */
20862306a36Sopenharmony_cienum gelic_wl_cipher_method {
20962306a36Sopenharmony_ci	GELIC_WL_CIPHER_NONE,
21062306a36Sopenharmony_ci	GELIC_WL_CIPHER_WEP,
21162306a36Sopenharmony_ci	GELIC_WL_CIPHER_TKIP,
21262306a36Sopenharmony_ci	GELIC_WL_CIPHER_AES,
21362306a36Sopenharmony_ci};
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci/* for 'wpa_level' */
21662306a36Sopenharmony_cienum gelic_wl_wpa_level {
21762306a36Sopenharmony_ci	GELIC_WL_WPA_LEVEL_NONE,
21862306a36Sopenharmony_ci	GELIC_WL_WPA_LEVEL_WPA,
21962306a36Sopenharmony_ci	GELIC_WL_WPA_LEVEL_WPA2,
22062306a36Sopenharmony_ci};
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci/* for 'assoc_stat' */
22362306a36Sopenharmony_cienum gelic_wl_assoc_state {
22462306a36Sopenharmony_ci	GELIC_WL_ASSOC_STAT_DISCONN,
22562306a36Sopenharmony_ci	GELIC_WL_ASSOC_STAT_ASSOCIATING,
22662306a36Sopenharmony_ci	GELIC_WL_ASSOC_STAT_ASSOCIATED,
22762306a36Sopenharmony_ci};
22862306a36Sopenharmony_ci/* part of private data alloc_etherdev() allocated */
22962306a36Sopenharmony_ci#define GELIC_WEP_KEYS 4
23062306a36Sopenharmony_cistruct gelic_wl_info {
23162306a36Sopenharmony_ci	/* bss list */
23262306a36Sopenharmony_ci	struct mutex scan_lock;
23362306a36Sopenharmony_ci	struct list_head network_list;
23462306a36Sopenharmony_ci	struct list_head network_free_list;
23562306a36Sopenharmony_ci	struct gelic_wl_scan_info *networks;
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci	unsigned long scan_age; /* last scanned time */
23862306a36Sopenharmony_ci	enum gelic_wl_scan_state scan_stat;
23962306a36Sopenharmony_ci	struct completion scan_done;
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci	/* eurus command queue */
24262306a36Sopenharmony_ci	struct workqueue_struct *eurus_cmd_queue;
24362306a36Sopenharmony_ci	struct completion cmd_done_intr;
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci	/* eurus event handling */
24662306a36Sopenharmony_ci	struct workqueue_struct *event_queue;
24762306a36Sopenharmony_ci	struct delayed_work event_work;
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci	/* wl status bits */
25062306a36Sopenharmony_ci	unsigned long stat;
25162306a36Sopenharmony_ci	enum gelic_eurus_auth_method auth_method; /* open/shared */
25262306a36Sopenharmony_ci	enum gelic_wl_cipher_method group_cipher_method;
25362306a36Sopenharmony_ci	enum gelic_wl_cipher_method pairwise_cipher_method;
25462306a36Sopenharmony_ci	enum gelic_wl_wpa_level wpa_level; /* wpa/wpa2 */
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci	/* association handling */
25762306a36Sopenharmony_ci	struct mutex assoc_stat_lock;
25862306a36Sopenharmony_ci	struct delayed_work assoc_work;
25962306a36Sopenharmony_ci	enum gelic_wl_assoc_state assoc_stat;
26062306a36Sopenharmony_ci	struct completion assoc_done;
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci	spinlock_t lock;
26362306a36Sopenharmony_ci	u16 ch_info; /* available channels. bit0 = ch1 */
26462306a36Sopenharmony_ci	/* WEP keys */
26562306a36Sopenharmony_ci	u8 key[GELIC_WEP_KEYS][IW_ENCODING_TOKEN_MAX];
26662306a36Sopenharmony_ci	unsigned long key_enabled;
26762306a36Sopenharmony_ci	unsigned int key_len[GELIC_WEP_KEYS];
26862306a36Sopenharmony_ci	unsigned int current_key;
26962306a36Sopenharmony_ci	/* WWPA PSK */
27062306a36Sopenharmony_ci	u8 psk[GELIC_WL_EURUS_PSK_MAX_LEN];
27162306a36Sopenharmony_ci	enum gelic_eurus_wpa_psk_type psk_type;
27262306a36Sopenharmony_ci	unsigned int psk_len;
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci	u8 essid[IW_ESSID_MAX_SIZE];
27562306a36Sopenharmony_ci	u8 bssid[ETH_ALEN]; /* userland requested */
27662306a36Sopenharmony_ci	u8 active_bssid[ETH_ALEN]; /* associated bssid */
27762306a36Sopenharmony_ci	unsigned int essid_len;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci	struct iw_public_data wireless_data;
28062306a36Sopenharmony_ci	struct iw_statistics iwstat;
28162306a36Sopenharmony_ci};
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci#define GELIC_WL_BSS_MAX_ENT 32
28462306a36Sopenharmony_ci#define GELIC_WL_ASSOC_RETRY 50
28562306a36Sopenharmony_cistatic inline struct gelic_port *wl_port(struct gelic_wl_info *wl)
28662306a36Sopenharmony_ci{
28762306a36Sopenharmony_ci	return container_of((void *)wl, struct gelic_port, priv);
28862306a36Sopenharmony_ci}
28962306a36Sopenharmony_cistatic inline struct gelic_wl_info *port_wl(struct gelic_port *port)
29062306a36Sopenharmony_ci{
29162306a36Sopenharmony_ci	return port_priv(port);
29262306a36Sopenharmony_ci}
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_cistruct gelic_eurus_cmd {
29562306a36Sopenharmony_ci	struct work_struct work;
29662306a36Sopenharmony_ci	struct gelic_wl_info *wl;
29762306a36Sopenharmony_ci	unsigned int cmd; /* command code */
29862306a36Sopenharmony_ci	u64 tag;
29962306a36Sopenharmony_ci	u64 size;
30062306a36Sopenharmony_ci	void *buffer;
30162306a36Sopenharmony_ci	unsigned int buf_size;
30262306a36Sopenharmony_ci	struct completion done;
30362306a36Sopenharmony_ci	int status;
30462306a36Sopenharmony_ci	u64 cmd_status;
30562306a36Sopenharmony_ci};
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci/* private ioctls to pass PSK */
30862306a36Sopenharmony_ci#define GELIC_WL_PRIV_SET_PSK		(SIOCIWFIRSTPRIV + 0)
30962306a36Sopenharmony_ci#define GELIC_WL_PRIV_GET_PSK		(SIOCIWFIRSTPRIV + 1)
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ciint gelic_wl_driver_probe(struct gelic_card *card);
31262306a36Sopenharmony_ciint gelic_wl_driver_remove(struct gelic_card *card);
31362306a36Sopenharmony_civoid gelic_wl_interrupt(struct net_device *netdev, u64 status);
31462306a36Sopenharmony_ci#endif /* _GELIC_WIRELESS_H */
315