linux/drivers/staging/rtl8723bs/include/rtw_mp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/******************************************************************************
   3 *
   4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   5 *
   6 ******************************************************************************/
   7#ifndef _RTW_MP_H_
   8#define _RTW_MP_H_
   9
  10#define MAX_MP_XMITBUF_SZ       2048
  11#define NR_MP_XMITFRAME         8
  12
  13struct mp_xmit_frame {
  14        struct list_head        list;
  15
  16        struct pkt_attrib attrib;
  17
  18        struct sk_buff *pkt;
  19
  20        int frame_tag;
  21
  22        struct adapter *padapter;
  23
  24        uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
  25};
  26
  27struct mp_wiparam {
  28        u32 bcompleted;
  29        u32 act_type;
  30        u32 io_offset;
  31        u32 io_value;
  32};
  33
  34struct mp_tx {
  35        u8 stop;
  36        u32 count, sended;
  37        u8 payload;
  38        struct pkt_attrib attrib;
  39        /* struct tx_desc desc; */
  40        /* u8 resvdtx[7]; */
  41        u8 desc[TXDESC_SIZE];
  42        u8 *pallocated_buf;
  43        u8 *buf;
  44        u32 buf_size, write_size;
  45        void *PktTxThread;
  46};
  47
  48#define MP_MAX_LINES            1000
  49#define MP_MAX_LINES_BYTES      256
  50
  51typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
  52struct mpt_context {
  53        /*  Indicate if we have started Mass Production Test. */
  54        bool                    bMassProdTest;
  55
  56        /*  Indicate if the driver is unloading or unloaded. */
  57        bool                    bMptDrvUnload;
  58
  59        struct timer_list                       MPh2c_timeout_timer;
  60/*  Event used to sync H2c for BT control */
  61
  62        bool            MptH2cRspEvent;
  63        bool            MptBtC2hEvent;
  64        bool            bMPh2c_timeout;
  65
  66        /* 8190 PCI does not support NDIS_WORK_ITEM. */
  67        /*  Work Item for Mass Production Test. */
  68        /* NDIS_WORK_ITEM       MptWorkItem; */
  69/*      RT_WORK_ITEM            MptWorkItem; */
  70        /*  Event used to sync the case unloading driver and MptWorkItem is still in progress. */
  71/*      NDIS_EVENT              MptWorkItemEvent; */
  72        /*  To protect the following variables. */
  73/*      NDIS_SPIN_LOCK          MptWorkItemSpinLock; */
  74        /*  Indicate a MptWorkItem is scheduled and not yet finished. */
  75        bool                    bMptWorkItemInProgress;
  76        /*  An instance which implements function and context of MptWorkItem. */
  77        MPT_WORK_ITEM_HANDLER   CurrMptAct;
  78
  79        /*  1 =Start, 0 =Stop from UI. */
  80        u32             MptTestStart;
  81        /*  _TEST_MODE, defined in MPT_Req2.h */
  82        u32             MptTestItem;
  83        /*  Variable needed in each implementation of CurrMptAct. */
  84        u32             MptActType;     /*  Type of action performed in CurrMptAct. */
  85        /*  The Offset of IO operation is depend of MptActType. */
  86        u32             MptIoOffset;
  87        /*  The Value of IO operation is depend of MptActType. */
  88        u32             MptIoValue;
  89        /*  The RfPath of IO operation is depend of MptActType. */
  90        u32             MptRfPath;
  91
  92        enum wireless_mode              MptWirelessModeToSw;    /*  Wireless mode to switch. */
  93        u8      MptChannelToSw;         /*  Channel to switch. */
  94        u8      MptInitGainToSet;       /*  Initial gain to set. */
  95        u32             MptBandWidth;           /*  bandwidth to switch. */
  96        u32             MptRateIndex;           /*  rate index. */
  97        /*  Register value kept for Single Carrier Tx test. */
  98        u8      btMpCckTxPower;
  99        /*  Register value kept for Single Carrier Tx test. */
 100        u8      btMpOfdmTxPower;
 101        /*  For MP Tx Power index */
 102        u8      TxPwrLevel[2];  /*  rf-A, rf-B */
 103        u32             RegTxPwrLimit;
 104        /*  Content of RCR Register for Mass Production Test. */
 105        u32             MptRCR;
 106        /*  true if we only receive packets with specific pattern. */
 107        bool                    bMptFilterPattern;
 108        /*  Rx OK count, statistics used in Mass Production Test. */
 109        u32             MptRxOkCnt;
 110        /*  Rx CRC32 error count, statistics used in Mass Production Test. */
 111        u32             MptRxCrcErrCnt;
 112
 113        bool                    bCckContTx;     /*  true if we are in CCK Continuous Tx test. */
 114        bool                    bOfdmContTx;    /*  true if we are in OFDM Continuous Tx test. */
 115        bool                    bStartContTx;   /*  true if we have start Continuous Tx test. */
 116        /*  true if we are in Single Carrier Tx test. */
 117        bool                    bSingleCarrier;
 118        /*  true if we are in Carrier Suppression Tx Test. */
 119        bool                    bCarrierSuppression;
 120        /* true if we are in Single Tone Tx test. */
 121        bool                    bSingleTone;
 122
 123        /*  ACK counter asked by K.Y.. */
 124        bool                    bMptEnableAckCounter;
 125        u32             MptAckCounter;
 126
 127        /*  SD3 Willis For 8192S to save 1T/2T RF table for ACUT        Only fro ACUT delete later ~~~! */
 128        /* s8           BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */
 129        /* s8                   BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */
 130        /* s32                  RfReadLine[2]; */
 131
 132        u8 APK_bound[2];        /* for APK      path A/path B */
 133        bool            bMptIndexEven;
 134
 135        u8 backup0xc50;
 136        u8 backup0xc58;
 137        u8 backup0xc30;
 138        u8 backup0x52_RF_A;
 139        u8 backup0x52_RF_B;
 140
 141        u32             backup0x58_RF_A;
 142        u32             backup0x58_RF_B;
 143
 144        u8      h2cReqNum;
 145        u8      c2hBuf[32];
 146
 147    u8          btInBuf[100];
 148        u32             mptOutLen;
 149    u8          mptOutBuf[100];
 150
 151};
 152/* endif */
 153
 154/* E-Fuse */
 155#define EFUSE_MAP_SIZE          512
 156
 157#define EFUSE_MAX_SIZE          512
 158/* end of E-Fuse */
 159
 160/* define RTPRIV_IOCTL_MP                                       (SIOCIWFIRSTPRIV + 0x17) */
 161enum {
 162        WRITE_REG = 1,
 163        READ_REG,
 164        WRITE_RF,
 165        READ_RF,
 166        MP_START,
 167        MP_STOP,
 168        MP_RATE,
 169        MP_CHANNEL,
 170        MP_BANDWIDTH,
 171        MP_TXPOWER,
 172        MP_ANT_TX,
 173        MP_ANT_RX,
 174        MP_CTX,
 175        MP_QUERY,
 176        MP_ARX,
 177        MP_PSD,
 178        MP_PWRTRK,
 179        MP_THER,
 180        MP_IOCTL,
 181        EFUSE_GET,
 182        EFUSE_SET,
 183        MP_RESET_STATS,
 184        MP_DUMP,
 185        MP_PHYPARA,
 186        MP_SetRFPathSwh,
 187        MP_QueryDrvStats,
 188        MP_SetBT,
 189        CTA_TEST,
 190        MP_DISABLE_BT_COEXIST,
 191        MP_PwrCtlDM,
 192        MP_NULL,
 193        MP_GET_TXPOWER_INX,
 194};
 195
 196struct mp_priv {
 197        struct adapter *papdater;
 198
 199        /* Testing Flag */
 200        u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
 201
 202        u32 prev_fw_state;
 203
 204        /* OID cmd handler */
 205        struct mp_wiparam workparam;
 206/*      u8 act_in_progress; */
 207
 208        /* Tx Section */
 209        u8 TID;
 210        u32 tx_pktcount;
 211        u32 pktInterval;
 212        struct mp_tx tx;
 213
 214        /* Rx Section */
 215        u32 rx_bssidpktcount;
 216        u32 rx_pktcount;
 217        u32 rx_pktcount_filter_out;
 218        u32 rx_crcerrpktcount;
 219        u32 rx_pktloss;
 220        bool  rx_bindicatePkt;
 221        struct recv_stat rxstat;
 222
 223        /* RF/BB relative */
 224        u8 channel;
 225        u8 bandwidth;
 226        u8 prime_channel_offset;
 227        u8 txpoweridx;
 228        u8 txpoweridx_b;
 229        u8 rateidx;
 230        u32 preamble;
 231/*      u8 modem; */
 232        u32 CrystalCap;
 233/*      u32 curr_crystalcap; */
 234
 235        u16 antenna_tx;
 236        u16 antenna_rx;
 237/*      u8 curr_rfpath; */
 238
 239        u8 check_mp_pkt;
 240
 241        u8 bSetTxPower;
 242/*      uint ForcedDataRate; */
 243        u8 mp_dm;
 244        u8 mac_filter[ETH_ALEN];
 245        u8 bmac_filter;
 246
 247        struct wlan_network mp_network;
 248        NDIS_802_11_MAC_ADDRESS network_macaddr;
 249
 250        u8 *pallocated_mp_xmitframe_buf;
 251        u8 *pmp_xmtframe_buf;
 252        struct __queue free_mp_xmitqueue;
 253        u32 free_mp_xmitframe_cnt;
 254        bool bSetRxBssid;
 255        bool bTxBufCkFail;
 256
 257        struct mpt_context MptCtx;
 258
 259        u8 *TXradomBuffer;
 260};
 261
 262#define LOWER   true
 263#define RAISE   false
 264
 265/* Hardware Registers */
 266#define BB_REG_BASE_ADDR                0x800
 267
 268#define MAX_RF_PATH_NUMS        RF_PATH_MAX
 269
 270extern u8 mpdatarate[NumRates];
 271
 272#define MAX_TX_PWR_INDEX_N_MODE 64      /*  0x3F */
 273
 274#define RX_PKT_BROADCAST        1
 275#define RX_PKT_DEST_ADDR        2
 276#define RX_PKT_PHY_MATCH        3
 277
 278#define Mac_OFDM_OK                     0x00000000
 279#define Mac_OFDM_Fail                   0x10000000
 280#define Mac_OFDM_FasleAlarm     0x20000000
 281#define Mac_CCK_OK                              0x30000000
 282#define Mac_CCK_Fail                    0x40000000
 283#define Mac_CCK_FasleAlarm              0x50000000
 284#define Mac_HT_OK                               0x60000000
 285#define Mac_HT_Fail                     0x70000000
 286#define Mac_HT_FasleAlarm               0x90000000
 287#define Mac_DropPacket                  0xA0000000
 288
 289#define         REG_RF_BB_GAIN_OFFSET   0x7f
 290#define         RF_GAIN_OFFSET_MASK     0xfffff
 291
 292/*  */
 293/* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */
 294/* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */
 295
 296s32 init_mp_priv(struct adapter *padapter);
 297void free_mp_priv(struct mp_priv *pmp_priv);
 298s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
 299void MPT_DeInitAdapter(struct adapter *padapter);
 300s32 mp_start_test(struct adapter *padapter);
 301void mp_stop_test(struct adapter *padapter);
 302
 303u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
 304void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
 305
 306u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
 307void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
 308u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
 309void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
 310u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
 311void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
 312
 313void SetChannel(struct adapter *padapter);
 314void SetBandwidth(struct adapter *padapter);
 315int SetTxPower(struct adapter *padapter);
 316void SetAntennaPathPower(struct adapter *padapter);
 317void SetDataRate(struct adapter *padapter);
 318
 319void SetAntenna(struct adapter *padapter);
 320
 321s32 SetThermalMeter(struct adapter *padapter, u8 target_ther);
 322void GetThermalMeter(struct adapter *padapter, u8 *value);
 323
 324void SetContinuousTx(struct adapter *padapter, u8 bStart);
 325void SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
 326void SetSingleToneTx(struct adapter *padapter, u8 bStart);
 327void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
 328void PhySetTxPowerLevel(struct adapter *padapter);
 329
 330void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc);
 331void SetPacketTx(struct adapter *padapter);
 332void SetPacketRx(struct adapter *padapter, u8 bStartRx);
 333
 334void ResetPhyRxPktCount(struct adapter *padapter);
 335u32 GetPhyRxPktReceived(struct adapter *padapter);
 336u32 GetPhyRxPktCRC32Error(struct adapter *padapter);
 337
 338s32     SetPowerTracking(struct adapter *padapter, u8 enable);
 339void GetPowerTracking(struct adapter *padapter, u8 *enable);
 340
 341u32 mp_query_psd(struct adapter *padapter, u8 *data);
 342
 343void Hal_SetAntenna(struct adapter *padapter);
 344void Hal_SetBandwidth(struct adapter *padapter);
 345
 346void Hal_SetTxPower(struct adapter *padapter);
 347void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
 348void Hal_SetSingleToneTx(struct adapter *padapter, u8 bStart);
 349void Hal_SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
 350void Hal_SetContinuousTx(struct adapter *padapter, u8 bStart);
 351
 352void Hal_SetDataRate(struct adapter *padapter);
 353void Hal_SetChannel(struct adapter *padapter);
 354void Hal_SetAntennaPathPower(struct adapter *padapter);
 355s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther);
 356s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
 357void Hal_GetPowerTracking(struct adapter *padapter, u8 *enable);
 358void Hal_GetThermalMeter(struct adapter *padapter, u8 *value);
 359void Hal_mpt_SwitchRfSetting(struct adapter *padapter);
 360void Hal_MPT_CCKTxPowerAdjust(struct adapter *Adapter, bool bInCH14);
 361void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven);
 362void Hal_SetCCKTxPower(struct adapter *padapter, u8 *TxPower);
 363void Hal_SetOFDMTxPower(struct adapter *padapter, u8 *TxPower);
 364void Hal_TriggerRFThermalMeter(struct adapter *padapter);
 365u8 Hal_ReadRFThermalMeter(struct adapter *padapter);
 366void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart);
 367void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart);
 368void Hal_ProSetCrystalCap(struct adapter *padapter, u32 CrystalCapVal);
 369void MP_PHY_SetRFPathSwitch(struct adapter *padapter, bool bMain);
 370u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath);
 371void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart);
 372u8 MptToMgntRate(u32 MptRateIdx);
 373
 374#endif /* _RTW_MP_H_ */
 375