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        _pkt *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
  34typedef void(*wi_act_func)(void* padapter);
  35
  36struct mp_tx {
  37        u8 stop;
  38        u32 count, sended;
  39        u8 payload;
  40        struct pkt_attrib attrib;
  41        /* struct tx_desc desc; */
  42        /* u8 resvdtx[7]; */
  43        u8 desc[TXDESC_SIZE];
  44        u8 *pallocated_buf;
  45        u8 *buf;
  46        u32 buf_size, write_size;
  47        void *PktTxThread;
  48};
  49
  50#define MP_MAX_LINES            1000
  51#define MP_MAX_LINES_BYTES      256
  52
  53typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
  54typedef struct _MPT_CONTEXT {
  55        /*  Indicate if we have started Mass Production Test. */
  56        bool                    bMassProdTest;
  57
  58        /*  Indicate if the driver is unloading or unloaded. */
  59        bool                    bMptDrvUnload;
  60
  61        _timer                  MPh2c_timeout_timer;
  62/*  Event used to sync H2c for BT control */
  63
  64        bool            MptH2cRspEvent;
  65        bool            MptBtC2hEvent;
  66        bool            bMPh2c_timeout;
  67
  68        /* 8190 PCI does not support NDIS_WORK_ITEM. */
  69        /*  Work Item for Mass Production Test. */
  70        /* NDIS_WORK_ITEM       MptWorkItem; */
  71/*      RT_WORK_ITEM            MptWorkItem; */
  72        /*  Event used to sync the case unloading driver and MptWorkItem is still in progress. */
  73/*      NDIS_EVENT              MptWorkItemEvent; */
  74        /*  To protect the following variables. */
  75/*      NDIS_SPIN_LOCK          MptWorkItemSpinLock; */
  76        /*  Indicate a MptWorkItem is scheduled and not yet finished. */
  77        bool                    bMptWorkItemInProgress;
  78        /*  An instance which implements function and context of MptWorkItem. */
  79        MPT_WORK_ITEM_HANDLER   CurrMptAct;
  80
  81        /*  1 =Start, 0 =Stop from UI. */
  82        u32             MptTestStart;
  83        /*  _TEST_MODE, defined in MPT_Req2.h */
  84        u32             MptTestItem;
  85        /*  Variable needed in each implementation of CurrMptAct. */
  86        u32             MptActType;     /*  Type of action performed in CurrMptAct. */
  87        /*  The Offset of IO operation is depend of MptActType. */
  88        u32             MptIoOffset;
  89        /*  The Value of IO operation is depend of MptActType. */
  90        u32             MptIoValue;
  91        /*  The RfPath of IO operation is depend of MptActType. */
  92        u32             MptRfPath;
  93
  94        enum WIRELESS_MODE              MptWirelessModeToSw;    /*  Wireless mode to switch. */
  95        u8      MptChannelToSw;         /*  Channel to switch. */
  96        u8      MptInitGainToSet;       /*  Initial gain to set. */
  97        u32             MptBandWidth;           /*  bandwidth to switch. */
  98        u32             MptRateIndex;           /*  rate index. */
  99        /*  Register value kept for Single Carrier Tx test. */
 100        u8      btMpCckTxPower;
 101        /*  Register value kept for Single Carrier Tx test. */
 102        u8      btMpOfdmTxPower;
 103        /*  For MP Tx Power index */
 104        u8      TxPwrLevel[2];  /*  rf-A, rf-B */
 105        u32             RegTxPwrLimit;
 106        /*  Content of RCR Regsiter for Mass Production Test. */
 107        u32             MptRCR;
 108        /*  true if we only receive packets with specific pattern. */
 109        bool                    bMptFilterPattern;
 110        /*  Rx OK count, statistics used in Mass Production Test. */
 111        u32             MptRxOkCnt;
 112        /*  Rx CRC32 error count, statistics used in Mass Production Test. */
 113        u32             MptRxCrcErrCnt;
 114
 115        bool                    bCckContTx;     /*  true if we are in CCK Continuous Tx test. */
 116        bool                    bOfdmContTx;    /*  true if we are in OFDM Continuous Tx test. */
 117        bool                    bStartContTx;   /*  true if we have start Continuous Tx test. */
 118        /*  true if we are in Single Carrier Tx test. */
 119        bool                    bSingleCarrier;
 120        /*  true if we are in Carrier Suppression Tx Test. */
 121        bool                    bCarrierSuppression;
 122        /* true if we are in Single Tone Tx test. */
 123        bool                    bSingleTone;
 124
 125        /*  ACK counter asked by K.Y.. */
 126        bool                    bMptEnableAckCounter;
 127        u32             MptAckCounter;
 128
 129        /*  SD3 Willis For 8192S to save 1T/2T RF table for ACUT        Only fro ACUT delete later ~~~! */
 130        /* s8           BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */
 131        /* s8                   BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */
 132        /* s32                  RfReadLine[2]; */
 133
 134        u8 APK_bound[2];        /* for APK      path A/path B */
 135        bool            bMptIndexEven;
 136
 137        u8 backup0xc50;
 138        u8 backup0xc58;
 139        u8 backup0xc30;
 140        u8 backup0x52_RF_A;
 141        u8 backup0x52_RF_B;
 142
 143        u32             backup0x58_RF_A;
 144        u32             backup0x58_RF_B;
 145
 146        u8      h2cReqNum;
 147        u8      c2hBuf[32];
 148
 149    u8          btInBuf[100];
 150        u32             mptOutLen;
 151    u8          mptOutBuf[100];
 152
 153} MPT_CONTEXT, *PMPT_CONTEXT;
 154/* endif */
 155
 156/* E-Fuse */
 157#define EFUSE_MAP_SIZE          512
 158
 159#define EFUSE_MAX_SIZE          512
 160/* end of E-Fuse */
 161
 162/* define RTPRIV_IOCTL_MP                                       (SIOCIWFIRSTPRIV + 0x17) */
 163enum {
 164        WRITE_REG = 1,
 165        READ_REG,
 166        WRITE_RF,
 167        READ_RF,
 168        MP_START,
 169        MP_STOP,
 170        MP_RATE,
 171        MP_CHANNEL,
 172        MP_BANDWIDTH,
 173        MP_TXPOWER,
 174        MP_ANT_TX,
 175        MP_ANT_RX,
 176        MP_CTX,
 177        MP_QUERY,
 178        MP_ARX,
 179        MP_PSD,
 180        MP_PWRTRK,
 181        MP_THER,
 182        MP_IOCTL,
 183        EFUSE_GET,
 184        EFUSE_SET,
 185        MP_RESET_STATS,
 186        MP_DUMP,
 187        MP_PHYPARA,
 188        MP_SetRFPathSwh,
 189        MP_QueryDrvStats,
 190        MP_SetBT,
 191        CTA_TEST,
 192        MP_DISABLE_BT_COEXIST,
 193        MP_PwrCtlDM,
 194#ifdef CONFIG_WOWLAN
 195        MP_WOW_ENABLE,
 196#endif
 197#ifdef CONFIG_AP_WOWLAN
 198        MP_AP_WOW_ENABLE,
 199#endif
 200        MP_NULL,
 201        MP_GET_TXPOWER_INX,
 202};
 203
 204struct mp_priv {
 205        struct adapter *papdater;
 206
 207        /* Testing Flag */
 208        u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
 209
 210        u32 prev_fw_state;
 211
 212        /* OID cmd handler */
 213        struct mp_wiparam workparam;
 214/*      u8 act_in_progress; */
 215
 216        /* Tx Section */
 217        u8 TID;
 218        u32 tx_pktcount;
 219        u32 pktInterval;
 220        struct mp_tx tx;
 221
 222        /* Rx Section */
 223        u32 rx_bssidpktcount;
 224        u32 rx_pktcount;
 225        u32 rx_pktcount_filter_out;
 226        u32 rx_crcerrpktcount;
 227        u32 rx_pktloss;
 228        bool  rx_bindicatePkt;
 229        struct recv_stat rxstat;
 230
 231        /* RF/BB relative */
 232        u8 channel;
 233        u8 bandwidth;
 234        u8 prime_channel_offset;
 235        u8 txpoweridx;
 236        u8 txpoweridx_b;
 237        u8 rateidx;
 238        u32 preamble;
 239/*      u8 modem; */
 240        u32 CrystalCap;
 241/*      u32 curr_crystalcap; */
 242
 243        u16 antenna_tx;
 244        u16 antenna_rx;
 245/*      u8 curr_rfpath; */
 246
 247        u8 check_mp_pkt;
 248
 249        u8 bSetTxPower;
 250/*      uint ForcedDataRate; */
 251        u8 mp_dm;
 252        u8 mac_filter[ETH_ALEN];
 253        u8 bmac_filter;
 254
 255        struct wlan_network mp_network;
 256        NDIS_802_11_MAC_ADDRESS network_macaddr;
 257
 258        u8 *pallocated_mp_xmitframe_buf;
 259        u8 *pmp_xmtframe_buf;
 260        struct __queue free_mp_xmitqueue;
 261        u32 free_mp_xmitframe_cnt;
 262        bool bSetRxBssid;
 263        bool bTxBufCkFail;
 264
 265        MPT_CONTEXT MptCtx;
 266
 267        u8 *TXradomBuffer;
 268};
 269
 270typedef struct _IOCMD_STRUCT_ {
 271        u8 cmdclass;
 272        u16 value;
 273        u8 index;
 274} IOCMD_STRUCT;
 275
 276struct rf_reg_param {
 277        u32 path;
 278        u32 offset;
 279        u32 value;
 280};
 281
 282struct bb_reg_param {
 283        u32 offset;
 284        u32 value;
 285};
 286
 287#define LOWER   true
 288#define RAISE   false
 289
 290/* Hardware Registers */
 291#define BB_REG_BASE_ADDR                0x800
 292
 293/* MP variables */
 294enum MP_MODE {
 295        MP_OFF,
 296        MP_ON,
 297        MP_ERR,
 298        MP_CONTINUOUS_TX,
 299        MP_SINGLE_CARRIER_TX,
 300        MP_CARRIER_SUPPRISSION_TX,
 301        MP_SINGLE_TONE_TX,
 302        MP_PACKET_TX,
 303        MP_PACKET_RX
 304};
 305
 306#define MAX_RF_PATH_NUMS        RF_PATH_MAX
 307
 308extern u8 mpdatarate[NumRates];
 309
 310/* MP set force data rate base on the definition. */
 311enum MPT_RATE_INDEX {
 312        /* CCK rate. */
 313        MPT_RATE_1M = 0,        /* 0 */
 314        MPT_RATE_2M,
 315        MPT_RATE_55M,
 316        MPT_RATE_11M,   /* 3 */
 317
 318        /* OFDM rate. */
 319        MPT_RATE_6M,    /* 4 */
 320        MPT_RATE_9M,
 321        MPT_RATE_12M,
 322        MPT_RATE_18M,
 323        MPT_RATE_24M,
 324        MPT_RATE_36M,
 325        MPT_RATE_48M,
 326        MPT_RATE_54M,   /* 11 */
 327
 328        /* HT rate. */
 329        MPT_RATE_MCS0,  /* 12 */
 330        MPT_RATE_MCS1,
 331        MPT_RATE_MCS2,
 332        MPT_RATE_MCS3,
 333        MPT_RATE_MCS4,
 334        MPT_RATE_MCS5,
 335        MPT_RATE_MCS6,
 336        MPT_RATE_MCS7,  /* 19 */
 337        MPT_RATE_MCS8,
 338        MPT_RATE_MCS9,
 339        MPT_RATE_MCS10,
 340        MPT_RATE_MCS11,
 341        MPT_RATE_MCS12,
 342        MPT_RATE_MCS13,
 343        MPT_RATE_MCS14,
 344        MPT_RATE_MCS15, /* 27 */
 345        /* VHT rate. Total: 20*/
 346        MPT_RATE_VHT1SS_MCS0 = 100,/*  To reserve MCS16~MCS31, the index starts from #100. */
 347        MPT_RATE_VHT1SS_MCS1, /*  #101 */
 348        MPT_RATE_VHT1SS_MCS2,
 349        MPT_RATE_VHT1SS_MCS3,
 350        MPT_RATE_VHT1SS_MCS4,
 351        MPT_RATE_VHT1SS_MCS5,
 352        MPT_RATE_VHT1SS_MCS6, /*  #106 */
 353        MPT_RATE_VHT1SS_MCS7,
 354        MPT_RATE_VHT1SS_MCS8,
 355        MPT_RATE_VHT1SS_MCS9,
 356        MPT_RATE_VHT2SS_MCS0,
 357        MPT_RATE_VHT2SS_MCS1, /*  #111 */
 358        MPT_RATE_VHT2SS_MCS2,
 359        MPT_RATE_VHT2SS_MCS3,
 360        MPT_RATE_VHT2SS_MCS4,
 361        MPT_RATE_VHT2SS_MCS5,
 362        MPT_RATE_VHT2SS_MCS6, /*  #116 */
 363        MPT_RATE_VHT2SS_MCS7,
 364        MPT_RATE_VHT2SS_MCS8,
 365        MPT_RATE_VHT2SS_MCS9,
 366        MPT_RATE_LAST
 367};
 368
 369#define MAX_TX_PWR_INDEX_N_MODE 64      /*  0x3F */
 370
 371enum POWER_MODE {
 372        POWER_LOW = 0,
 373        POWER_NORMAL
 374};
 375
 376/*  The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */
 377enum OFDM_TX_MODE {
 378        OFDM_ALL_OFF            = 0,
 379        OFDM_ContinuousTx       = 1,
 380        OFDM_SingleCarrier      = 2,
 381        OFDM_SingleTone         = 4,
 382};
 383
 384#define RX_PKT_BROADCAST        1
 385#define RX_PKT_DEST_ADDR        2
 386#define RX_PKT_PHY_MATCH        3
 387
 388#define Mac_OFDM_OK                     0x00000000
 389#define Mac_OFDM_Fail                   0x10000000
 390#define Mac_OFDM_FasleAlarm     0x20000000
 391#define Mac_CCK_OK                              0x30000000
 392#define Mac_CCK_Fail                    0x40000000
 393#define Mac_CCK_FasleAlarm              0x50000000
 394#define Mac_HT_OK                               0x60000000
 395#define Mac_HT_Fail                     0x70000000
 396#define Mac_HT_FasleAlarm               0x90000000
 397#define Mac_DropPacket                  0xA0000000
 398
 399enum ENCRY_CTRL_STATE {
 400        HW_CONTROL,             /* hw encryption& decryption */
 401        SW_CONTROL,             /* sw encryption& decryption */
 402        HW_ENCRY_SW_DECRY,      /* hw encryption & sw decryption */
 403        SW_ENCRY_HW_DECRY       /* sw encryption & hw decryption */
 404};
 405
 406enum MPT_TXPWR_DEF {
 407        MPT_CCK,
 408        MPT_OFDM, /*  L and HT OFDM */
 409        MPT_VHT_OFDM
 410};
 411
 412#define         REG_RF_BB_GAIN_OFFSET   0x7f
 413#define         RF_GAIN_OFFSET_MASK     0xfffff
 414
 415/*  */
 416/* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */
 417/* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */
 418
 419s32 init_mp_priv(struct adapter *padapter);
 420void free_mp_priv(struct mp_priv *pmp_priv);
 421s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
 422void MPT_DeInitAdapter(struct adapter *padapter);
 423s32 mp_start_test(struct adapter *padapter);
 424void mp_stop_test(struct adapter *padapter);
 425
 426u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
 427void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
 428
 429u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
 430void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
 431u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
 432void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
 433u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
 434void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
 435
 436void SetChannel(struct adapter *padapter);
 437void SetBandwidth(struct adapter *padapter);
 438int SetTxPower(struct adapter *padapter);
 439void SetAntennaPathPower(struct adapter *padapter);
 440void SetDataRate(struct adapter *padapter);
 441
 442void SetAntenna(struct adapter *padapter);
 443
 444s32 SetThermalMeter(struct adapter *padapter, u8 target_ther);
 445void GetThermalMeter(struct adapter *padapter, u8 *value);
 446
 447void SetContinuousTx(struct adapter *padapter, u8 bStart);
 448void SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
 449void SetSingleToneTx(struct adapter *padapter, u8 bStart);
 450void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
 451void PhySetTxPowerLevel(struct adapter *padapter);
 452
 453void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc);
 454void SetPacketTx(struct adapter *padapter);
 455void SetPacketRx(struct adapter *padapter, u8 bStartRx);
 456
 457void ResetPhyRxPktCount(struct adapter *padapter);
 458u32 GetPhyRxPktReceived(struct adapter *padapter);
 459u32 GetPhyRxPktCRC32Error(struct adapter *padapter);
 460
 461s32     SetPowerTracking(struct adapter *padapter, u8 enable);
 462void GetPowerTracking(struct adapter *padapter, u8 *enable);
 463
 464u32 mp_query_psd(struct adapter *padapter, u8 *data);
 465
 466void Hal_SetAntenna(struct adapter *padapter);
 467void Hal_SetBandwidth(struct adapter *padapter);
 468
 469void Hal_SetTxPower(struct adapter *padapter);
 470void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
 471void Hal_SetSingleToneTx(struct adapter *padapter, u8 bStart);
 472void Hal_SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
 473void Hal_SetContinuousTx(struct adapter *padapter, u8 bStart);
 474void Hal_SetBandwidth(struct adapter *padapter);
 475
 476void Hal_SetDataRate(struct adapter *padapter);
 477void Hal_SetChannel(struct adapter *padapter);
 478void Hal_SetAntennaPathPower(struct adapter *padapter);
 479s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther);
 480s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
 481void Hal_GetPowerTracking(struct adapter *padapter, u8 * enable);
 482void Hal_GetThermalMeter(struct adapter *padapter, u8 *value);
 483void Hal_mpt_SwitchRfSetting(struct adapter *padapter);
 484void Hal_MPT_CCKTxPowerAdjust(struct adapter * Adapter, bool bInCH14);
 485void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven);
 486void Hal_SetCCKTxPower(struct adapter *padapter, u8 * TxPower);
 487void Hal_SetOFDMTxPower(struct adapter *padapter, u8 * TxPower);
 488void Hal_TriggerRFThermalMeter(struct adapter *padapter);
 489u8 Hal_ReadRFThermalMeter(struct adapter *padapter);
 490void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart);
 491void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart);
 492void Hal_ProSetCrystalCap(struct adapter *padapter, u32 CrystalCapVal);
 493void MP_PHY_SetRFPathSwitch(struct adapter *padapter, bool bMain);
 494u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath);
 495void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart);
 496u8 MptToMgntRate(u32 MptRateIdx);
 497
 498#endif /* _RTW_MP_H_ */
 499