162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef HOSTAP_80211_H
362306a36Sopenharmony_ci#define HOSTAP_80211_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/types.h>
662306a36Sopenharmony_ci#include <linux/skbuff.h>
762306a36Sopenharmony_ci#include <linux/netdevice.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistruct hostap_ieee80211_mgmt {
1062306a36Sopenharmony_ci	__le16 frame_control;
1162306a36Sopenharmony_ci	__le16 duration;
1262306a36Sopenharmony_ci	u8 da[6];
1362306a36Sopenharmony_ci	u8 sa[6];
1462306a36Sopenharmony_ci	u8 bssid[6];
1562306a36Sopenharmony_ci	__le16 seq_ctrl;
1662306a36Sopenharmony_ci	union {
1762306a36Sopenharmony_ci		struct {
1862306a36Sopenharmony_ci			__le16 auth_alg;
1962306a36Sopenharmony_ci			__le16 auth_transaction;
2062306a36Sopenharmony_ci			__le16 status_code;
2162306a36Sopenharmony_ci			/* possibly followed by Challenge text */
2262306a36Sopenharmony_ci			u8 variable[0];
2362306a36Sopenharmony_ci		} __packed auth;
2462306a36Sopenharmony_ci		struct {
2562306a36Sopenharmony_ci			__le16 reason_code;
2662306a36Sopenharmony_ci		} __packed deauth;
2762306a36Sopenharmony_ci		struct {
2862306a36Sopenharmony_ci			__le16 capab_info;
2962306a36Sopenharmony_ci			__le16 listen_interval;
3062306a36Sopenharmony_ci			/* followed by SSID and Supported rates */
3162306a36Sopenharmony_ci			u8 variable[0];
3262306a36Sopenharmony_ci		} __packed assoc_req;
3362306a36Sopenharmony_ci		struct {
3462306a36Sopenharmony_ci			__le16 capab_info;
3562306a36Sopenharmony_ci			__le16 status_code;
3662306a36Sopenharmony_ci			__le16 aid;
3762306a36Sopenharmony_ci			/* followed by Supported rates */
3862306a36Sopenharmony_ci			u8 variable[0];
3962306a36Sopenharmony_ci		} __packed assoc_resp, reassoc_resp;
4062306a36Sopenharmony_ci		struct {
4162306a36Sopenharmony_ci			__le16 capab_info;
4262306a36Sopenharmony_ci			__le16 listen_interval;
4362306a36Sopenharmony_ci			u8 current_ap[6];
4462306a36Sopenharmony_ci			/* followed by SSID and Supported rates */
4562306a36Sopenharmony_ci			u8 variable[0];
4662306a36Sopenharmony_ci		} __packed reassoc_req;
4762306a36Sopenharmony_ci		struct {
4862306a36Sopenharmony_ci			__le16 reason_code;
4962306a36Sopenharmony_ci		} __packed disassoc;
5062306a36Sopenharmony_ci		struct {
5162306a36Sopenharmony_ci		} __packed probe_req;
5262306a36Sopenharmony_ci		struct {
5362306a36Sopenharmony_ci			u8 timestamp[8];
5462306a36Sopenharmony_ci			__le16 beacon_int;
5562306a36Sopenharmony_ci			__le16 capab_info;
5662306a36Sopenharmony_ci			/* followed by some of SSID, Supported rates,
5762306a36Sopenharmony_ci			 * FH Params, DS Params, CF Params, IBSS Params, TIM */
5862306a36Sopenharmony_ci			u8 variable[0];
5962306a36Sopenharmony_ci		} __packed beacon, probe_resp;
6062306a36Sopenharmony_ci	} u;
6162306a36Sopenharmony_ci} __packed;
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define IEEE80211_MGMT_HDR_LEN 24
6562306a36Sopenharmony_ci#define IEEE80211_DATA_HDR3_LEN 24
6662306a36Sopenharmony_ci#define IEEE80211_DATA_HDR4_LEN 30
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistruct hostap_80211_rx_status {
7062306a36Sopenharmony_ci	u32 mac_time;
7162306a36Sopenharmony_ci	u8 signal;
7262306a36Sopenharmony_ci	u8 noise;
7362306a36Sopenharmony_ci	u16 rate; /* in 100 kbps */
7462306a36Sopenharmony_ci};
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci/* prism2_rx_80211 'type' argument */
7762306a36Sopenharmony_cienum {
7862306a36Sopenharmony_ci	PRISM2_RX_MONITOR, PRISM2_RX_MGMT, PRISM2_RX_NON_ASSOC,
7962306a36Sopenharmony_ci	PRISM2_RX_NULLFUNC_ACK
8062306a36Sopenharmony_ci};
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciint prism2_rx_80211(struct net_device *dev, struct sk_buff *skb,
8362306a36Sopenharmony_ci		    struct hostap_80211_rx_status *rx_stats, int type);
8462306a36Sopenharmony_civoid hostap_80211_rx(struct net_device *dev, struct sk_buff *skb,
8562306a36Sopenharmony_ci		     struct hostap_80211_rx_status *rx_stats);
8662306a36Sopenharmony_civoid hostap_dump_rx_80211(const char *name, struct sk_buff *skb,
8762306a36Sopenharmony_ci			  struct hostap_80211_rx_status *rx_stats);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_civoid hostap_dump_tx_80211(const char *name, struct sk_buff *skb);
9062306a36Sopenharmony_cinetdev_tx_t hostap_data_start_xmit(struct sk_buff *skb,
9162306a36Sopenharmony_ci				   struct net_device *dev);
9262306a36Sopenharmony_cinetdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb,
9362306a36Sopenharmony_ci				   struct net_device *dev);
9462306a36Sopenharmony_cinetdev_tx_t hostap_master_start_xmit(struct sk_buff *skb,
9562306a36Sopenharmony_ci				     struct net_device *dev);
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci#endif /* HOSTAP_80211_H */
98