device.h

来自「VIA VT6655 x86下的Linux Source Code」· C头文件 代码 · 共 932 行 · 第 1/2 页

H
932
字号
#define     DEVICE_SPEED_100             0x00000004UL
#define     DEVICE_SPEED_1000            0x00000008UL
#define     DEVICE_DUPLEX_FULL           0x00000010UL
#define     DEVICE_AUTONEG_ENABLE        0x00000020UL
#define     DEVICE_FORCED_BY_EEPROM      0x00000040UL
//for device_set_media_duplex
#define     DEVICE_LINK_CHANGE           0x00000001UL


typedef struct __device_opt {
    int         nRxDescs0;      //Number of RX descriptors0
    int         nRxDescs1;      //Number of RX descriptors1
    int         nTxDescs[2];    //Number of TX descriptors 0, 1
    int         int_works;      //interrupt limits
    int         rts_thresh;     //rts threshold
    int         frag_thresh;
    int         data_rate;
    int         channel_num;
    int         short_retry;
    int         long_retry;
    int         bbp_type;
    U32         flags;
} OPTIONS, *POPTIONS;


typedef struct __device_info {
    struct __device_info*        next;
    struct __device_info*        prev;

    struct pci_dev*             pcid;
    
#if CONFIG_PM   
    u32                         pci_state[16];
#endif

// netdev 
    struct net_device*          dev;
    struct net_device*          next_module;    
    struct net_device_stats     stats;

//dma addr, rx/tx pool    
    dma_addr_t                  pool_dma;
    dma_addr_t                  rd0_pool_dma;
    dma_addr_t                  rd1_pool_dma;    
    
    dma_addr_t                  td0_pool_dma;
    dma_addr_t                  td1_pool_dma;

    dma_addr_t                  tx_bufs_dma0;
    dma_addr_t                  tx_bufs_dma1;
    dma_addr_t                  tx_beacon_dma;    
    
    PBYTE                       tx0_bufs;
    PBYTE                       tx1_bufs;
    PBYTE                       tx_beacon_bufs;
    
    CHIP_TYPE                   chip_id;
    
    U32                         PortOffset;
    DWORD                       dwIsr;
    U32                         memaddr;
    U32                         ioaddr;
    U32                         io_size;
    
    BYTE                        byRevId;
    WORD                        SubSystemID;
    WORD                        SubVendorID;

    int                         nTxQueues;
    volatile int                iTDUsed[TYPE_MAXTD];
    
    volatile PSTxDesc           apCurrTD[TYPE_MAXTD];
    volatile PSTxDesc           apTailTD[TYPE_MAXTD];
    
    volatile PSTxDesc           apTD0Rings;
    volatile PSTxDesc           apTD1Rings;

    volatile PSRxDesc           aRD0Ring;
    volatile PSRxDesc           aRD1Ring;
    volatile PSRxDesc           pCurrRD[TYPE_MAXRD];    
    SCache                      sDupRxCache;
    
    SDeFragControlBlock         sRxDFCB[CB_MAX_RX_FRAG];
    UINT                        cbDFCB;
    UINT                        cbFreeDFCB;
    UINT                        uCurrentDFCBIdx;        

    OPTIONS                     sOpts;
        
    U32                         flags; 
        
    U32                         rx_buf_sz;
    int                         multicast_limit;
    BYTE                        byRxMode;
    
    spinlock_t                  lock;
    
    U32                         rx_bytes;
    
    // Version control
    BYTE                        byLocalID;
    BYTE                        byRFType; 
    
    BYTE                        byMaxPwrLevel;
    BYTE                        byZoneType;
    BOOL                        bZoneRegExist;       

    BYTE                        abyMacContext[MAC_MAX_CONTEXT_REG];
    BOOL                        bLinkPass;          // link status: OK or fail    
    BYTE                        abyCurrentNetAddr[U_ETHER_ADDR_LEN];    

    // Adapter statistics
    SStatCounter                scStatistic;    
    // 802.11 counter
    SDot11Counters              s802_11Counter;
    
   
    // 802.11 management 
    PSMgmtObject                pMgmt;
    SMgmtObject                 sMgmtObj;    
    
    // 802.11 MAC specific    
    UINT                        uCurrRSSI;
    BYTE                        byCurrSQ;    
    
    DWORD                       dwTxAntennaSel;
    DWORD                       dwRxAntennaSel;
    BYTE                        byAntennaCount;
    BYTE                        byRxAntennaMode;
    BYTE                        byTxAntennaMode;
    BOOL                        bTxRxAntInv;

    PBYTE                       pbyTmpBuff;
    UINT                        uSIFS;    //Current SIFS
    UINT                        uDIFS;    //Current DIFS
    UINT                        uEIFS;    //Current EIFS
    UINT                        uSlot;    //Current SlotTime
    UINT                        uCwMin;   //Current CwMin
    UINT                        uCwMax;   //CwMax is fixed on 1023.
    // PHY parameter
    BYTE                        bySIFS;
    BYTE                        byDIFS;
    BYTE                        byEIFS;
    BYTE                        bySlot;
    BYTE                        byCWMaxMin;
    CARD_PHY_TYPE               eCurrentPHYType;


    VIA_BB_TYPE                 byBBType; //0: 11A, 1:11B, 2:11G
    VIA_PKT_TYPE                byPacketType; //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
    WORD                        wBasicRate;
    BYTE                        byACKRate;    
    BYTE                        byTopOFDMBasicRate;
    BYTE                        byTopCCKBasicRate;

    BYTE                        byMinChannel;
    BYTE                        byMaxChannel;
    UINT                        uConnectionRate;

    BYTE                        byPreambleType;
    BYTE                        byShortPreamble;
    
    WORD                        wCurrentRate;
    WORD                        wRTSThreshold;
    WORD                        wFragmentationThreshold;
    BYTE                        byShortRetryLimit;
    BYTE                        byLongRetryLimit;
    CARD_OP_MODE                eOPMode;    
    BYTE                        byOpMode;
    BOOL                        bBSSIDFilter;    
    WORD                        wMaxTransmitMSDULifetime;
    BYTE                        abyBSSID[U_ETHER_ADDR_LEN];
    BYTE                        abyDesireBSSID[U_ETHER_ADDR_LEN];    
    WORD                        wCTSDuration;       // update while speed change
    WORD                        wACKDuration;       // update while speed change
    WORD                        wRTSTransmitLen;    // update while speed change
    BYTE                        byRTSServiceField;  // update while speed change
    BYTE                        byRTSSignalField;   // update while speed change

    DWORD                       dwMaxReceiveLifetime;       // dot11MaxReceiveLifetime

    BOOL                        bCCK;
    BOOL                        bEncryptionEnable;
    BOOL                        bLongHeader;
    BOOL                        bShortSlotTime;
    BOOL                        bProtectMode;
    BOOL                        bNonERPPresent;
    BOOL                        bBarkerPreambleMd;
    
    BYTE                        byERPFlag;
    WORD                        wUseProtectCntDown;

    BOOL                    bRadioControlOff;
    BOOL                    bRadioOff;
    BOOL                    bEnablePSMode;
    WORD                    wListenInterval;    
    BOOL                    bPWBitOn;
    WMAC_POWER_MODE         ePSMode;
    
    
    // GPIO Radio Control
    BYTE                    byRadioCtl;
    BYTE                    byGPIO;
    BOOL                    bHWRadioOff;
    BOOL                    bPrvActive4RadioOFF;
    BOOL                    bGPIOBlockRead;    

    // Beacon releated
    WORD                    wSeqCounter;    
    WORD                    wBCNBufLen;
    BOOL                    bBeaconBufReady;    
    BOOL                    bBeaconSent;
    BOOL                    bIsBeaconBufReadySet;
    UINT                    cbBeaconBufReadySetCnt;    
    BOOL                    bFixRate;
    BYTE                    byCurrentCh;
    UINT                    uScanTime;    

    CMD_STATE               eCommandState;

    CMD_CODE                eCommand;
    BOOL                    bBeaconTx;
    
    BOOL                    bStopBeacon;
    BOOL                    bStopDataPkt;
    BOOL                    bStopTx0Pkt;    
    UINT                    uAutoReConnectTime;
    
    // 802.11 counter
    
    CMD_ITEM                eCmdQueue[CMD_Q_SIZE];
    UINT                    uCmdDequeueIdx;
    UINT                    uCmdEnqueueIdx;
    UINT                    cbFreeCmdQueue;
    BOOL                    bCmdRunning;

    BOOL                    bRoaming;
    //WOW
    BYTE                    abyIPAddr[4];

    ULONG                   ulTxPower;
    NDIS_802_11_WEP_STATUS  eEncryptionStatus;
    BOOL                    bTransmitKey;

    SKeyManagement          sKey;
    DWORD                   dwIVCounter;    

    QWORD                   qwPacketNumber; //For CCMP and TKIP as TSC(6 bytes)
    UINT                    uCurrentWEPMode;

    RC4Ext                  SBox;
    BYTE                    abyPRNG[WLAN_WEPMAX_KEYLEN+3];

    BYTE                    byKeyIndex;    
    UINT                    uKeyLength;    
    BYTE                    abyKey[WLAN_WEP232_KEYLEN];    

    BOOL                    bAES;
    BYTE                    byCntMeasure;    

    // for AP mode
    UINT                    uAssocCount;
    BOOL                    bMoreData;

    // QoS
    BOOL                    bGrpAckPolicy;

    // for OID_802_11_ASSOCIATION_INFORMATION
    BOOL                    bAssocInfoSet;


    BYTE                    byAutoFBCtrl;    

    BOOL                    bTxMICFail;
    BOOL                    bRxMICFail;
    
    
    UINT                    uRATEIdx;
    
    
    // For Update BaseBand VGA Gain Offset
    BOOL                    bUpdateBBVGA;
    UINT                    uBBVGADiffCount;
    BYTE                    byBBVGANew;
    BYTE                    byBBVGACurrent;
    BYTE                    abyBBVGA[BB_VGA_LEVEL];
    LONG                    ldBmThreshold[BB_VGA_LEVEL];
    

    BOOL                    bRadioCmd;
    DWORD                   dwDiagRefCount;    

    // For FOE Tuning
    BYTE                    byFOETuning;      
    
    // For Auto Power Tunning
    
    BYTE                    byAutoPwrTunning;
    SHORT                   sPSetPointCCK;
    SHORT                   sPSetPointOFDMG;
    SHORT                   sPSetPointOFDMA; 
    LONG                    lPFormulaOffset;       
    SHORT                   sPThreshold;
    CHAR                    cAdjustStep;
    CHAR                    cMinTxAGC;

    // For RF Power table
    BYTE                    byCCKPwr;
    BYTE                    byOFDMPwrG;
    BYTE                    byCurPwr;
    I8                      byCurPwrdBm;
    BYTE                    abyCCKPwrTbl[CB_MAX_CHANNEL_24G+1];
    BYTE                    abyOFDMPwrTbl[CB_MAX_CHANNEL+1];
    I8                      abyCCKDefaultPwr[CB_MAX_CHANNEL_24G+1];
    I8                      abyOFDMDefaultPwr[CB_MAX_CHANNEL+1];
    I8                      abyRegPwr[CB_MAX_CHANNEL+1];
    I8                      abyLocalPwr[CB_MAX_CHANNEL+1];    
    
    
    // BaseBand Loopback Use
    BYTE                    byBBCR4d;
    BYTE                    byBBCRc9;    
    BYTE                    byBBCR88;
    BYTE                    byBBCR09;       
    
    // command timer
    struct timer_list       sTimerCommand;    
    BYTE                    abyNodeName[17];    

    BOOL                    bDiversityRegCtlON;
    BOOL                    bDiversityEnable;
    ULONG                   ulDiversityNValue;
    ULONG                   ulDiversityMValue;
    BYTE                    byTMax;
    BYTE                    byTMax2;
    BYTE                    byTMax3;
    ULONG                   ulSQ3TH;
    
// ANT diversity    
    ULONG                   uDiversityCnt;
    BYTE                    byAntennaState;
    ULONG                   ulRatio_State0;
    ULONG                   ulRatio_State1;
    
    //SQ3 functions for antenna diversity
    struct timer_list           TimerSQ3Tmax1;
    struct timer_list           TimerSQ3Tmax2;
    struct timer_list           TimerSQ3Tmax3;    
    
    
    ULONG                   uNumSQ3[MAX_RATE];
    WORD                    wAntDiversityMaxRate;    

    
    SEthernetHeader         sTxEthHeader;
    SEthernetHeader         sRxEthHeader;
    BYTE                    abyBroadcastAddr[U_ETHER_ADDR_LEN];
    BYTE                    abySNAP_RFC1042[U_ETHER_ADDR_LEN];
    BYTE                    abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN];        
    
    // Pre-Authentication & PMK cache
    SPMKID                  gsPMKID;
    SPMKIDCandidateEvent    gsPMKIDCandidate;    
    
    
    // for 802.11h
    BOOL                    b11hEnable;
    BYTE                    abyCountryCode[3];
    // for 802.11h DFS
    UINT                    uNumOfMeasureEIDs;
    PWLAN_IE_MEASURE_REQ    pCurrMeasureEID;
    BOOL                    bMeasureInProgress;
    BYTE                    byOrgChannel;
    BYTE                    byOrgRCR;
    DWORD                   dwOrgMAR0;
    DWORD                   dwOrgMAR4;
    BYTE                    byBasicMap;
    BYTE                    byCCAFraction;
    BYTE                    abyRPIs[8];
    DWORD                   dwRPIs[8];
    BOOL                    bChannelSwitch;
    BYTE                    byNewChannel;
    BYTE                    byChannelSwitchCount;
    BOOL                    bQuietEnable;
    BOOL                    bEnableFirstQuiet;
    BYTE                    byQuietStartCount;
    UINT                    uQuietEnqueue;
    DWORD                   dwCurrentQuietEndTime;
    SQuietControl           sQuiet[MAX_QUIET_COUNT];
    // for 802.11h TPC
    BOOL                    bCountryInfo5G;
    BOOL                    bCountryInfo24G;    

    WORD                    wBeaconInterval;

    //WPA supplicant deamon
	struct net_device       *wpadev;
	BOOL                    bWPADevEnable;
    struct sk_buff          *skb;
    //--
#ifdef HOSTAP
    // user space daemon: hostapd, is used for HOSTAP
	BOOL                    bEnableHostapd;
	BOOL                    bEnable8021x;
	BOOL                    bEnableHostWEP;	
	struct net_device       *apdev;
	int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
#endif   
    UINT                    uChannel;
    BOOL                    bMACSuspend;    
    
#ifdef WIRELESS_EXT
	struct iw_statistics	wstats;		// wireless stats
#endif /* WIRELESS_EXT */    
    BOOL                    bCommit;
    
} DEVICE_INFO, *PSDevice;




inline static BOOL device_get_ip(PSDevice pInfo) {
    struct in_device* in_dev=(struct in_device*) pInfo->dev->ip_ptr;
    struct in_ifaddr* ifa;
        
    if (in_dev!=NULL) {
        ifa=(struct in_ifaddr*) in_dev->ifa_list;
        if (ifa!=NULL) {
            memcpy(pInfo->abyIPAddr,&ifa->ifa_address,4);
            return TRUE;
        }
    }       
    return FALSE;
}



static inline PDEVICE_RD_INFO alloc_rd_info(void) {
    PDEVICE_RD_INFO  ptr;
    if ((ptr = (PDEVICE_RD_INFO)kmalloc((int)sizeof(DEVICE_RD_INFO), (int)GFP_ATOMIC)) == NULL)
        return NULL;
    else {
        memset(ptr,0,sizeof(DEVICE_RD_INFO));
        return ptr;
    }
}

static inline PDEVICE_TD_INFO alloc_td_info(void) {
    PDEVICE_TD_INFO  ptr;
    if ((ptr = (PDEVICE_TD_INFO)kmalloc((int)sizeof(DEVICE_TD_INFO), (int)GFP_ATOMIC))==NULL)
        return NULL;
    else {
        memset(ptr,0,sizeof(DEVICE_TD_INFO));
        return ptr;
    }
}

/*---------------------  Export Functions  --------------------------*/

BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, UINT uNodeIndex);
BOOL device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF);

#endif


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?