linux/drivers/staging/rtl8712/wifi.h
<<
>>
Prefs
   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 are
   7 * 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         24
  21#define WLAN_HDR_A3_QOS_LEN     26
  22
  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_                2
 186#define _CAPABILITY_                    2
 187#define _TIMESTAMP_                             8
 188
 189
 190/*-----------------------------------------------------------------------------
 191 *                      Below is the definition for WMM
 192 *------------------------------------------------------------------------------
 193 */
 194#define _WMM_IE_Length_                         7  /* for WMM STA */
 195
 196#endif /* _WIFI_H_ */
 197
 198