brintos

brintos / linux-shallow public Read only

0
0
Text · 5.3 KiB · 498e6de Raw
197 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/******************************************************************************3 *4 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.5 *6 * Modifications for inclusion into the Linux staging tree are7 * Copyright(c) 2010 Larry Finger. All rights reserved.8 *9 * Contact information:10 * WLAN FAE <wlanfae@realtek.com>11 * Larry Finger <Larry.Finger@lwfinger.net>12 *13 ******************************************************************************/14#ifndef _WIFI_H_15#define _WIFI_H_16 17#include <linux/compiler.h>18#include <linux/ieee80211.h>19 20#define WLAN_HDR_A3_LEN		2421#define WLAN_HDR_A3_QOS_LEN	2622 23enum WIFI_FRAME_TYPE {24	WIFI_QOS_DATA_TYPE	= (BIT(7) | BIT(3)),	/*!< QoS Data */25};26 27#define SetToDs(pbuf) ({ \28	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS); \29})30 31#define GetToDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_TODS)) != 0)32 33#define ClearToDs(pbuf)	({ \34	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_TODS)); \35})36 37#define SetFrDs(pbuf) ({ \38	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS); \39})40 41#define GetFrDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0)42 43#define ClearFrDs(pbuf)	({ \44	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_FROMDS)); \45})46 47static inline unsigned char get_tofr_ds(unsigned char *pframe)48{49	return ((GetToDs(pframe) << 1) | GetFrDs(pframe));50}51 52#define SetMFrag(pbuf) ({ \53	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); \54})55 56#define GetMFrag(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0)57 58#define ClearMFrag(pbuf) ({ \59	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)); \60})61 62#define SetRetry(pbuf) ({ \63	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY); \64})65 66#define GetRetry(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0)67 68#define ClearRetry(pbuf) ({ \69	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_RETRY)); \70})71 72#define SetPwrMgt(pbuf) ({ \73	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM); \74})75 76#define GetPwrMgt(pbuf)	(((*(__le16 *)(pbuf)) & \77			cpu_to_le16(IEEE80211_FCTL_PM)) != 0)78 79#define ClearPwrMgt(pbuf) ({ \80	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_PM)); \81})82 83#define SetMData(pbuf) ({ \84	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA); \85})86 87#define GetMData(pbuf)	(((*(__le16 *)(pbuf)) & \88			cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0)89 90#define ClearMData(pbuf) ({ \91	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREDATA)); \92})93 94#define SetPrivacy(pbuf) ({ \95	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); \96})97 98#define GetPrivacy(pbuf)	(((*(__le16 *)(pbuf)) & \99				cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0)100 101#define GetOrder(pbuf)	(((*(__le16 *)(pbuf)) & \102			cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0)103 104#define GetFrameType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & \105				(BIT(3) | BIT(2)))106 107#define SetFrameType(pbuf, type)	\108	do {	\109		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(3) | \110		BIT(2))); \111		*(__le16 *)(pbuf) |= cpu_to_le16(type); \112	} while (0)113 114#define GetFrameSubType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & \115				(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | \116				BIT(2)))117 118#define SetFrameSubType(pbuf, type) \119	do {    \120		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | \121		BIT(5) | BIT(4) | BIT(3) | BIT(2))); \122		*(__le16 *)(pbuf) |= cpu_to_le16(type); \123	} while (0)124 125#define GetSequence(pbuf)	(le16_to_cpu(*(__le16 *)\126				((addr_t)(pbuf) + 22)) >> 4)127 128#define GetFragNum(pbuf)	(le16_to_cpu(*(__le16 *)((addr_t)\129				(pbuf) + 22)) & 0x0f)130 131#define SetSeqNum(pbuf, num) ({ \132	*(__le16 *)((addr_t)(pbuf) + 22) = \133	cpu_to_le16((le16_to_cpu(*(__le16 *)((addr_t)(pbuf) + 22)) & \134	0x000f) | (0xfff0 & (num << 4))); \135})136 137#define SetPriority(pbuf, tid) ({ \138	*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf); \139})140 141#define GetPriority(pbuf)	((le16_to_cpu(*(__le16 *)(pbuf))) & 0xf)142 143#define SetAckpolicy(pbuf, ack) ({ \144	*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5); \145})146 147#define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)148 149#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)150 151#define GetAddr1Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 4))152 153#define GetAddr2Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 10))154 155#define GetAddr3Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 16))156 157#define GetAddr4Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 24))158 159static inline unsigned char *get_hdr_bssid(unsigned char *pframe)160{161	unsigned char	*sa;162	unsigned int	to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);163 164	switch (to_fr_ds) {165	case 0x00:	/* ToDs=0, FromDs=0 */166		sa = GetAddr3Ptr(pframe);167		break;168	case 0x01:	/* ToDs=0, FromDs=1 */169		sa = GetAddr2Ptr(pframe);170		break;171	case 0x02:	/* ToDs=1, FromDs=0 */172		sa = GetAddr1Ptr(pframe);173		break;174	default:	/* ToDs=1, FromDs=1 */175		sa = NULL;176		break;177	}178	return sa;179}180 181/* ---------------------------------------------------------------------------182 *			Below is the fixed elements...183 * ---------------------------------------------------------------------------184 */185#define _BEACON_ITERVAL_		2186#define _CAPABILITY_			2187#define _TIMESTAMP_				8188 189/*-----------------------------------------------------------------------------190 *			Below is the definition for WMM191 *------------------------------------------------------------------------------192 */193#define _WMM_IE_Length_				7  /* for WMM STA */194 195#endif /* _WIFI_H_ */196 197