/* * Copyright (c) 2007-2008 Atheros Communications Inc. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _STRUCT_H #define _STRUCT_H #include "../oal_marc.h" #define ZM_SW_LOOP_BACK 0 /* 1=>enable, 0=>disable */ #define ZM_PCI_LOOP_BACK 0 /* 1=>enable, 0=>disable */ #define ZM_PROTOCOL_RESPONSE_SIMULATION 0 #define ZM_RX_FRAME_SIZE 1600 extern const u8_t zg11bRateTbl[4]; extern const u8_t zg11gRateTbl[8]; #define ZM_DRIVER_CORE_MAJOR_VERSION 1 #define ZM_DRIVER_CORE_MINOR_VERSION 1 #define ZM_DRIVER_CORE_BRANCH_MAJOR_VERSION 3 #define ZM_DRIVER_CORE_BRANCH_MINOR_VERSION 39 #ifndef ZM_VTXQ_SIZE #define ZM_VTXQ_SIZE 1024 //2^N #endif #define ZM_VTXQ_SIZE_MASK (ZM_VTXQ_SIZE-1) #define ZM_VMMQ_SIZE 8 //2^N #define ZM_VMMQ_SIZE_MASK (ZM_VMMQ_SIZE-1) #include "cagg.h" #define ZM_AGG_POOL_SIZE 20 #define ZM_RATE_TABLE_SIZE 32 #define ZM_MAX_BUF_DISCRETE_NUMBER 5 /**********************************************************************************/ /* IBSS macros */ /**********************************************************************************/ #define ZM_IBSS_PEER_ALIVE_COUNTER 4 /**********************************************************************************/ /* BIT mapping related macros */ /**********************************************************************************/ #define ZM_BIT_0 0x1 #define ZM_BIT_1 0x2 #define ZM_BIT_2 0x4 #define ZM_BIT_3 0x8 #define ZM_BIT_4 0x10 #define ZM_BIT_5 0x20 #define ZM_BIT_6 0x40 #define ZM_BIT_7 0x80 #define ZM_BIT_8 0x100 #define ZM_BIT_9 0x200 #define ZM_BIT_10 0x400 #define ZM_BIT_11 0x800 #define ZM_BIT_12 0x1000 #define ZM_BIT_13 0x2000 #define ZM_BIT_14 0x4000 #define ZM_BIT_15 0x8000 #define ZM_BIT_16 0x10000 #define ZM_BIT_17 0x20000 #define ZM_BIT_18 0x40000 #define ZM_BIT_19 0x80000 #define ZM_BIT_20 0x100000 #define ZM_BIT_21 0x200000 #define ZM_BIT_22 0x400000 #define ZM_BIT_23 0x800000 #define ZM_BIT_24 0x1000000 #define ZM_BIT_25 0x2000000 #define ZM_BIT_26 0x4000000 #define ZM_BIT_27 0x8000000 #define ZM_BIT_28 0x10000000 #define ZM_BIT_29 0x20000000 //WPA support #define ZM_BIT_30 0x40000000 #define ZM_BIT_31 0x80000000 /**********************************************************************************/ /* MAC address related macros */ /**********************************************************************************/ #define ZM_MAC_BYTE_TO_WORD(macb, macw) macw[0] = macb[0] + (macb[1] << 8); \ macw[1] = macb[2] + (macb[3] << 8); \ macw[2] = macb[4] + (macb[5] << 8); #define ZM_MAC_WORD_TO_BYTE(macw, macb) macb[0] = (u8_t) (macw[0] & 0xff); \ macb[1] = (u8_t) (macw[0] >> 8); \ macb[2] = (u8_t) (macw[1] & 0xff); \ macb[3] = (u8_t) (macw[1] >> 8); \ macb[4] = (u8_t) (macw[2] & 0xff); \ macb[5] = (u8_t) (macw[2] >> 8); #define ZM_MAC_0(macw) ((u8_t)(macw[0] & 0xff)) #define ZM_MAC_1(macw) ((u8_t)(macw[0] >> 8)) #define ZM_MAC_2(macw) ((u8_t)(macw[1] & 0xff)) #define ZM_MAC_3(macw) ((u8_t)(macw[1] >> 8)) #define ZM_MAC_4(macw) ((u8_t)(macw[2] & 0xff)) #define ZM_MAC_5(macw) ((u8_t)(macw[2] >> 8)) #define ZM_IS_MULTICAST_OR_BROADCAST(mac) (mac[0] & 0x01) #define ZM_IS_MULTICAST(mac) ((mac[0] & 0x01) && (((u8_t)mac[0]) != 0xFF)) #define ZM_MAC_EQUAL(mac1, mac2) ((mac1[0]==mac2[0])&&(mac1[1]==mac2[1])&&(mac1[2]==mac2[2])) #define ZM_MAC_NOT_EQUAL(mac1, mac2) ((mac1[0]!=mac2[0])||(mac1[1]!=mac2[1])||(mac1[2]!=mac2[2])) /**********************************************************************************/ /* MAC address related mac'ros (end) */ /**********************************************************************************/ #define ZM_BYTE_TO_WORD(A, B) ((A<<8)+B) #define ZM_ROL32( A, n ) \ ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) #define ZM_ROR32( A, n ) ZM_ROL32( (A), 32-(n) ) #define ZM_LO8(v16) ((u8_t)((v16) & 0xFF)) #define ZM_HI8(v16) ((u8_t)(((v16)>>8)&0xFF)) #ifdef ZM_ENABLE_BUFFER_TRACE extern void zfwBufTrace(zdev_t* dev, zbuf_t *buf, u8_t *functionName); #define ZM_BUFFER_TRACE(dev, buf) zfwBufTrace(dev, buf, __FUNCTION__); #else #define ZM_BUFFER_TRACE(dev, buf) #endif /* notification events to heart beat function */ #define ZM_BSSID_LIST_SCAN 0x01 /* CAM mode */ #define ZM_CAM_AP 0x1 #define ZM_CAM_STA 0x2 #define ZM_CAM_HOST 0x4 /* finite state machine for adapter */ #define ZM_STA_STATE_DISCONNECT 1 #define ZM_STA_STATE_CONNECTING 2 #define ZM_STA_STATE_CONNECTED 3 /* Event definitions for finite state machine */ #define ZM_EVENT_TIMEOUT_SCAN 0x0000 #define ZM_EVENT_TIMEOUT_BG_SCAN 0x0001 #define ZN_EVENT_TIMEOUT_RECONNECT 0x0002 #define ZM_EVENT_TIMEOUT_INIT_SCAN 0x0003 #define ZM_EVENT_TIMEOUT_AUTH 0x0004 #define ZM_EVENT_TIMEOUT_ASSO 0x0005 #define ZM_EVENT_TIMEOUT_AUTO_SCAN 0x0006 #define ZM_EVENT_TIMEOUT_MIC_FAIL 0x0007 #define ZM_EVENT_TIMEOUT_CHECK_AP 0x0008 #define ZM_EVENT_CONNECT 0x0009 #define ZM_EVENT_INIT_SCAN 0x000a #define ZM_EVENT_SCAN 0x000b #define ZM_EVENT_BG_SCAN 0x000c #define ZM_EVENT_DISCONNECT 0x000d #define ZM_EVENT_WPA_MIC_FAIL 0x000e #define ZM_EVENT_AP_ALIVE 0x000f #define ZM_EVENT_CHANGE_TO_AP 0x0010 #define ZM_EVENT_CHANGE_TO_STA 0x0011 #define ZM_EVENT_IDLE 0x0012 #define ZM_EVENT_AUTH 0x0013 #define ZM_EVENT_ASSO_RSP 0x0014 #define ZM_EVENT_WPA_PK_OK 0x0015 #define ZM_EVENT_WPA_GK_OK 0x0016 #define ZM_EVENT_RCV_BEACON 0x0017 #define ZM_EVENT_RCV_PROBE_RSP 0x0018 #define ZM_EVENT_SEND_DATA 0x0019 #define ZM_EVENT_AUTO_SCAN 0x001a #define ZM_EVENT_MIC_FAIL1 0x001d #define ZM_EVENT_MIC_FAIL2 0x001e #define ZM_EVENT_IBSS_MONITOR 0x001f #define ZM_EVENT_IN_SCAN 0x0020 #define ZM_EVENT_CM_TIMER 0x0021 #define ZM_EVENT_CM_DISCONNECT 0x0022 #define ZM_EVENT_CM_BLOCK_TIMER 0x0023 #define ZM_EVENT_TIMEOUT_ADDBA 0x0024 #define ZM_EVENT_TIMEOUT_PERFORMANCE 0x0025 #define ZM_EVENT_SKIP_COUNTERMEASURE 0x0026 #define ZM_EVENT_NONE 0xffff /* Actions after call finite state machine */ #define ZM_ACTION_NONE 0x0000 #define ZM_ACTION_QUEUE_DATA 0x0001 #define ZM_ACTION_DROP_DATA 0x0002 /* Timers for finite state machine */ #define ZM_TICK_ZERO 0 #define ZM_TICK_INIT_SCAN_END 8 #define ZM_TICK_NEXT_BG_SCAN 50 #define ZM_TICK_BG_SCAN_END 8 #define ZM_TICK_AUTH_TIMEOUT 4 #define ZM_TICK_ASSO_TIMEOUT 4 #define ZM_TICK_AUTO_SCAN 300 #define ZM_TICK_MIC_FAIL_TIMEOUT 6000 #define ZM_TICK_CHECK_AP1 150 #define ZM_TICK_CHECK_AP2 350 #define ZM_TICK_CHECK_AP3 250 #define ZM_TICK_IBSS_MONITOR 160 #define ZM_TICK_IN_SCAN 4 #define ZM_TICK_CM_TIMEOUT 6000 #define ZM_TICK_CM_DISCONNECT 200 #define ZM_TICK_CM_BLOCK_TIMEOUT 6000 /* Fix bug#33338 Counter Measure Issur */ #ifdef NDIS_CM_FOR_XP #define ZM_TICK_CM_TIMEOUT_OFFSET 2160 #define ZM_TICK_CM_DISCONNECT_OFFSET 72 #define ZM_TICK_CM_BLOCK_TIMEOUT_OFFSET 2160 #else #define ZM_TICK_CM_TIMEOUT_OFFSET 0 #define ZM_TICK_CM_DISCONNECT_OFFSET 0 #define ZM_TICK_CM_BLOCK_TIMEOUT_OFFSET 0 #endif #define ZM_TIME_ACTIVE_SCAN 30 //ms #define ZM_TIME_PASSIVE_SCAN 110 //ms /* finite state machine for BSS connect */ #define ZM_STA_CONN_STATE_NONE 0 #define ZM_STA_CONN_STATE_AUTH_OPEN 1 #define ZM_STA_CONN_STATE_AUTH_SHARE_1 2 #define ZM_STA_CONN_STATE_AUTH_SHARE_2 3 #define ZM_STA_CONN_STATE_ASSOCIATE 4 #define ZM_STA_CONN_STATE_SSID_NOT_FOUND 5 #define ZM_STA_CONN_STATE_AUTH_COMPLETED 6 /* finite state machine for WPA handshaking */ #define ZM_STA_WPA_STATE_INIT 0 #define ZM_STA_WPA_STATE_PK_OK 1 #define ZM_STA_WPA_STATE_GK_OK 2 /* various timers */ #define ZM_INTERVAL_CONNECT_TIMEOUT 20 /* 200 milisecond */ /* IBSS definitions */ #define ZM_IBSS_PARTNER_LOST 0 #define ZM_IBSS_PARTNER_ALIVE 1 #define ZM_IBSS_PARTNER_CHECK 2 #define ZM_BCMC_ARRAY_SIZE 16 /* Must be 2^N */ #define ZM_UNI_ARRAY_SIZE 16 /* Must be 2^N */ #define ZM_MAX_DEFRAG_ENTRIES 4 /* 2^N */ #define ZM_DEFRAG_AGING_TIME_SEC 5 /* 5 seconds */ #define ZM_MAX_WPAIE_SIZE 128 /* WEP related definitions */ #define ZM_USER_KEY_DEFAULT 64 #define ZM_USER_KEY_PK 0 /* Pairwise Key */ #define ZM_USER_KEY_GK 1 /* Group Key */ /* AP WLAN Type */ #define ZM_WLAN_TYPE_PURE_B 2 #define ZM_WLAN_TYPE_PURE_G 1 #define ZM_WLAN_TYPE_MIXED 0 /* HAL State */ #define ZM_HAL_STATE_INIT 0 #define ZM_HAL_STATE_RUNNING 1 /* AP Capability */ #define ZM_All11N_AP 0x01 #define ZM_XR_AP 0x02 #define ZM_SuperG_AP 0x04 /* MPDU Density */ #define ZM_MPDU_DENSITY_NONE 0 #define ZM_MPDU_DENSITY_1_8US 1 #define ZM_MPDU_DENSITY_1_4US 2 #define ZM_MPDU_DENSITY_1_2US 3 #define ZM_MPDU_DENSITY_1US 4 #define ZM_MPDU_DENSITY_2US 5 #define ZM_MPDU_DENSITY_4US 6 #define ZM_MPDU_DENSITY_8US 7 /* Software Encryption */ #define ZM_SW_TKIP_ENCRY_EN 0x01 #define ZM_SW_TKIP_DECRY_EN 0x02 #define ZM_SW_WEP_ENCRY_EN 0x04 #define ZM_SW_WEP_DECRY_EN 0x08 /* Default Support Rate */ #define ZM_DEFAULT_SUPPORT_RATE_ZERO 0x0 #define ZM_DEFAULT_SUPPORT_RATE_DISCONNECT 0x1 #define ZM_DEFAULT_SUPPORT_RATE_IBSS_B 0x2 #define ZM_DEFAULT_SUPPORT_RATE_IBSS_AG 0x3 /* security related definitions */ struct zsTkipSeed { u8_t tk[32]; /* key */ u8_t ta[6]; u16_t ttak[5]; u16_t ppk[6]; u16_t iv16,iv16tmp; u32_t iv32,iv32tmp; }; struct zsMicVar { u32_t k0, k1; // Key u32_t left, right; // Current state u32_t m; // Message accumulator (single word) u16_t nBytes; // # bytes in M }; struct zsDefragEntry { u8_t fragCount; u8_t addr[6]; u16_t seqNum; zbuf_t* fragment[8]; u32_t tick; }; struct zsDefragList { struct zsDefragEntry defragEntry[ZM_MAX_DEFRAG_ENTRIES]; u8_t replaceNum; }; #define ZM_MAX_OPPOSITE_COUNT 16 #define ZM_MAX_TX_SAMPLES 15 #define ZM_TX_RATE_DOWN_CRITERIA 80 #define ZM_TX_RATE_UP_CRITERIA 200 #define ZM_MAX_PROBE_HIDDEN_SSID_SIZE 2 struct zsSsidList { u8_t ssid[32]; u8_t ssidLen; }; struct zsWrapperSetting { u8_t bDesiredBssid; u8_t desiredBssid[6]; u16_t bssid[3]; u8_t ssid[32]; u8_t ssidLen; u8_t authMode; u8_t wepStatus; u8_t encryMode; u8_t wlanMode; u16_t frequency; u16_t beaconInterval; u8_t dtim; u8_t preambleType; u16_t atimWindow; struct zsSsidList probingSsidList[ZM_MAX_PROBE_HIDDEN_SSID_SIZE]; u8_t dropUnencryptedPkts; u8_t ibssJoinOnly; u32_t adhocMode; u8_t countryIsoName[4]; u16_t autoSetFrequency; /* AP */ u8_t bRateBasic; u8_t gRateBasic; u32_t nRateBasic; u8_t bgMode; /* Common */ u8_t staWmeEnabled; u8_t staWmeQosInfo; u8_t apWmeEnabled; /* rate information: added in the future */ }; struct zsWrapperFeatureCtrl { u8_t bIbssGMode; }; #define ZM_MAX_PS_STA 16 #define ZM_PS_QUEUE_SIZE 32 struct zsStaPSEntity { u8_t bUsed; u8_t macAddr[6]; u8_t bDataQueued; }; struct zsStaPSList { u8_t count; struct zsStaPSEntity entity[ZM_MAX_PS_STA]; }; #define ZM_MAX_TIMER_COUNT 32 /* double linked list */ struct zsTimerEntry { u16_t event; u32_t timer; struct zsTimerEntry *pre; struct zsTimerEntry *next; }; struct zsTimerList { u8_t freeCount; struct zsTimerEntry list[ZM_MAX_TIMER_COUNT]; struct zsTimerEntry *head; struct zsTimerEntry *tail; }; /* Multicast list */ #define ZM_MAX_MULTICAST_LIST_SIZE 64 struct zsMulticastAddr { u8_t addr[6]; }; struct zsMulticastList { u8_t size; struct zsMulticastAddr macAddr[ZM_MAX_MULTICAST_LIST_SIZE]; }; enum ieee80211_cwm_mode { CWM_MODE20, CWM_MODE2040, CWM_MODE40, CWM_MODEMAX }; enum ieee80211_cwm_extprotspacing { CWM_EXTPROTSPACING20, CWM_EXTPROTSPACING25, CWM_EXTPROTSPACINGMAX }; enum ieee80211_cwm_width { CWM_WIDTH20, CWM_WIDTH40 }; enum ieee80211_cwm_extprotmode { CWM_EXTPROTNONE, /* no protection */ CWM_EXTPROTCTSONLY, /* CTS to self */ CWM_EXTPROTRTSCTS, /* RTS-CTS */ CWM_EXTPROTMAX }; struct ieee80211_cwm { /* Configuration */ enum ieee80211_cwm_mode cw_mode; /* CWM mode */ u8_t cw_extoffset; /* CWM Extension Channel Offset */ enum ieee80211_cwm_extprotmode cw_extprotmode; /* CWM Extension Channel Protection Mode */ enum ieee80211_cwm_extprotspacing cw_extprotspacing;/* CWM Extension Channel Protection Spacing */ u32_t cw_enable; /* CWM State Machine Enabled */ u32_t cw_extbusythreshold;/* CWM Extension Channel Busy Threshold */ /* State */ enum ieee80211_cwm_width cw_width; /* CWM channel width */ }; /* AP : STA database structure */ struct zsStaTable { u32_t time; /* tick time */ //u32_t phyCtrl; /* Tx PHY CTRL */ u16_t addr[3]; /* STA MAC address */ u16_t state; /* aut/asoc */ //u16_t retry; /* Retry count */ struct zsRcCell rcCell; u8_t valid; /* Valid flag : 1=>valid */ u8_t psMode; /* STA power saving mode */ u8_t staType; /* 0=>11b, 1=>11g, 2=>11n */ u8_t qosType; /* 0=>Legacy, 1=>WME */ u8_t qosInfo; /* WME QoS info */ u8_t vap; /* Virtual AP ID */ u8_t encryMode; /* Encryption type for this STA */ u8_t keyIdx; struct zsMicVar txMicKey; struct zsMicVar rxMicKey; u16_t iv16; u32_t iv32; #ifdef ZM_ENABLE_CENC /* CENC */ u8_t cencKeyIdx; u32_t txiv[4]; u32_t rxiv[4]; #endif //ZM_ENABLE_CENC }; struct zdStructWds { u8_t wdsBitmap; /* Set bit-N to 1 to enable WDS */ u8_t encryMode[ZM_MAX_WDS_SUPPORT]; /* WDS encryption mode */ u16_t macAddr[ZM_MAX_WDS_SUPPORT][3]; /* WDS neighbor MAC address */ }; // htcapinfo 16bits #define HTCAP_AdvCodingCap 0x0001 #define HTCAP_SupChannelWidthSet 0x0002 #define HTCAP_DynamicSMPS 0x0004 #define HTCAP_SMEnabled 0x000C #define HTCAP_GreenField 0x0010 #define HTCAP_ShortGIfor20MHz 0x0020 #define HTCAP_ShortGIfor40MHz 0x0040 #define HTCAP_TxSTBC 0x0080 #define HTCAP_RxOneStream 0x0100 #define HTCAP_RxTwoStream 0x0200 #define HTCAP_RxThreeStream 0x0300 #define HTCAP_DelayedBlockACK 0x0400 #define HTCAP_MaxAMSDULength 0x0800 #define HTCAP_DSSSandCCKin40MHz 0x1000 #define HTCAP_PSMPSup 0x2000 #define HTCAP_STBCControlFrameSup 0x4000 #define HTCAP_LSIGTXOPProtectionSUP 0x8000 // Ampdu HT Parameter Info 8bits #define HTCAP_MaxRxAMPDU0 0x00 #define HTCAP_MaxRxAMPDU1 0x01 #define HTCAP_MaxRxAMPDU2 0x02 #define HTCAP_MaxRxAMPDU3 0x03 // PCO 8bits #define HTCAP_PCO 0x01 #define HTCAP_TransmissionTime1 0x02 #define HTCAP_TransmissionTime2 0x04 #define HTCAP_TransmissionTime3 0x06 // MCS FeedBack 8bits #define HTCAP_PlusHTCSupport 0x04 #define HTCAP_RDResponder 0x08 // TX Beamforming 0 8bits #define HTCAP_TxBFCapable 0x01 #define HTCAP_RxStaggeredSoundCap 0x02 #define HTCAP_TxStaggeredSoundCap 0x04 #define HTCAP_RxZLFCapable 0x08 #define HTCAP_TxZLFCapable 0x10 #define HTCAP_ImplicitTxBFCapable 0x20 // Tx Beamforming 1 8bits #define HTCAP_ExplicitCSITxBFCap 0x01 #define HTCAP_ExpUncompSteerMatrCap 0x02 // Antenna Selection Capabilities 8bits #define HTCAP_AntennaSelectionCap 0x01 #define HTCAP_ExplicitCSITxASCap 0x02 #define HTCAP_AntennaIndFeeTxASCap 0x04 #define HTCAP_ExplicitCSIFeedbackCap 0x08 #define HTCAP_AntennaIndFeedbackCap 0x10 #define HTCAP_RxASCap 0x20 #define HTCAP_TxSoundPPDUsCap 0x40 struct zsHTCapability { u8_t ElementID; u8_t Length; // HT Capability Info u16_t HtCapInfo; u8_t AMPDUParam; u8_t MCSSet[16]; //16 bytes // Extended HT Capability Info u8_t PCO; u8_t MCSFeedBack; u8_t TxBFCap[4]; u8_t AselCap; }; union zuHTCapability { struct zsHTCapability Data; u8_t Byte[28]; }; //channelinfo 8bits #define ExtHtCap_ExtChannelOffsetAbove 0x01 #define ExtHtCap_ExtChannelOffsetBelow 0x03 #define ExtHtCap_RecomTxWidthSet 0x04 #define ExtHtCap_RIFSMode 0x08 #define ExtHtCap_ControlAccessOnly 0x10 //operatinginfo 16bits #define ExtHtCap_NonGFDevicePresent 0x0004 //beaconinfo 16bits #define ExtHtCap_DualBeacon 0x0040 #define ExtHtCap_DualSTBCProtection 0x0080 #define ExtHtCap_SecondaryBeacon 0x0100 #define ExtHtCap_LSIGTXOPProtectFullSup 0x0200 #define ExtHtCap_PCOActive 0x0400 #define ExtHtCap_PCOPhase 0x0800 struct zsExtHTCapability { u8_t ElementID; u8_t Length; u8_t ControlChannel; u8_t ChannelInfo; u16_t OperatingInfo; u16_t BeaconInfo; // Supported MCS Set u8_t MCSSet[16]; }; union zuExtHTCapability { struct zsExtHTCapability Data; u8_t Byte[24]; }; struct InformationElementSta { struct zsHTCapability HtCap; struct zsExtHTCapability HtInfo; }; struct InformationElementAp { struct zsHTCapability HtCap; }; #define ZM_MAX_FREQ_REQ_QUEUE 32 typedef void (*zfpFreqChangeCompleteCb)(zdev_t* dev); struct zsWlanDevFreqControl { u16_t freqReqQueue[ZM_MAX_FREQ_REQ_QUEUE]; u8_t freqReqBw40[ZM_MAX_FREQ_REQ_QUEUE]; u8_t freqReqExtOffset[ZM_MAX_FREQ_REQ_QUEUE]; zfpFreqChangeCompleteCb freqChangeCompCb[ZM_MAX_FREQ_REQ_QUEUE]; u8_t freqReqQueueHead; u8_t freqReqQueueTail; }; struct zsWlanDevAp { u16_t protectedObss; /* protected overlap BSS */ u16_t staAgingTimeSec; /* in second, STA will be deathed if it does not */ /* active for this long time */ u16_t staProbingTimeSec;/* in second, STA will be probed if it does not */ /* active for this long time */ u8_t authSharing; /* authentication on going*/ u8_t bStaAssociated; /* 11b STA associated */ u8_t gStaAssociated; /* 11g STA associated */ u8_t nStaAssociated; /* 11n STA associated */ u16_t protectionMode; /* AP protection mode flag */ u16_t staPowerSaving; /* Set associated power saving STA count */ zbuf_t* uniArray[ZM_UNI_ARRAY_SIZE]; /* array to store unicast frames */ u16_t uniHead; u16_t uniTail; /* HT Capability Info */ union zuHTCapability HTCap; //CWYang(+) /* Extended HT Capability Info */ union zuExtHTCapability ExtHTCap; //CWYang(+) /* STA table */ struct zsStaTable staTable[ZM_MAX_STA_SUPPORT]; /* WDS */ struct zdStructWds wds; /* WPA */ u8_t wpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_WPAIE_SIZE]; u8_t wpaLen[ZM_MAX_AP_SUPPORT]; u8_t stawpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_WPAIE_SIZE]; u8_t stawpaLen[ZM_MAX_AP_SUPPORT]; u8_t wpaSupport[ZM_MAX_AP_SUPPORT]; //struct zsTkipSeed bcSeed; u8_t bcKeyIndex[ZM_MAX_AP_SUPPORT]; u8_t bcHalKeyIdx[ZM_MAX_AP_SUPPORT]; struct zsMicVar bcMicKey[ZM_MAX_AP_SUPPORT]; u16_t iv16[ZM_MAX_AP_SUPPORT]; u32_t iv32[ZM_MAX_AP_SUPPORT]; #ifdef ZM_ENABLE_CENC /* CENC */ u32_t txiv[ZM_MAX_AP_SUPPORT][4]; #endif //ZM_ENABLE_CENC /* Virtual AP */ u8_t beaconCounter; u8_t vapNumber; u8_t apBitmap; /* Set bit-N to 1 to enable VAP */ u8_t hideSsid[ZM_MAX_AP_SUPPORT]; u8_t authAlgo[ZM_MAX_AP_SUPPORT]; u8_t ssid[ZM_MAX_AP_SUPPORT][32]; /* SSID */ u8_t ssidLen[ZM_MAX_AP_SUPPORT]; /* SSID length */ u8_t encryMode[ZM_MAX_AP_SUPPORT]; u8_t wepStatus[ZM_MAX_AP_SUPPORT]; u16_t capab[ZM_MAX_AP_SUPPORT]; /* Capability */ u8_t timBcmcBit[ZM_MAX_AP_SUPPORT]; /* BMCM bit of TIM */ u8_t wlanType[ZM_MAX_AP_SUPPORT]; /* Array to store BC or MC frames */ zbuf_t* bcmcArray[ZM_MAX_AP_SUPPORT][ZM_BCMC_ARRAY_SIZE]; u16_t bcmcHead[ZM_MAX_AP_SUPPORT]; u16_t bcmcTail[ZM_MAX_AP_SUPPORT]; u8_t qosMode; /* 1=>WME */ u8_t uapsdEnabled; struct zsQueue* uapsdQ; u8_t challengeText[128]; struct InformationElementAp ie[ZM_MAX_STA_SUPPORT]; }; #define ZM_MAX_BLOCKING_AP_LIST_SIZE 4 /* 2^N */ struct zsBlockingAp { u8_t addr[6]; u8_t weight; }; #define ZM_SCAN_MGR_SCAN_NONE 0 #define ZM_SCAN_MGR_SCAN_INTERNAL 1 #define ZM_SCAN_MGR_SCAN_EXTERNAL 2 struct zsWlanDevStaScanMgr { u8_t scanReqs[2]; u8_t currScanType; u8_t scanStartDelay; }; #define ZM_PS_MSG_STATE_ACTIVE 0 #define ZM_PS_MSG_STATE_SLEEP 1 #define ZM_PS_MSG_STATE_T1 2 #define ZM_PS_MSG_STATE_T2 3 #define ZM_PS_MSG_STATE_S1 4 #define ZM_PS_MAX_SLEEP_PERIODS 3 // The number of beacon periods struct zsWlanDevStaPSMgr { u8_t state; u8_t isSleepAllowed; u8_t maxSleepPeriods; u8_t ticks; u32_t lastTxUnicastFrm; u32_t lastTxMulticastFrm; u32_t lastTxBroadcastFrm; u8_t tempWakeUp; /*enable when wake up but still in ps mode */ u16_t sleepAllowedtick; }; struct zsWlanDevSta { u32_t beaconTxCnt; /* Transmitted beacon counter (in IBSS) */ u8_t txBeaconInd; /* In IBSS mode, true means that we just transmit a beacon during last beacon period. */ u16_t beaconCnt; /* receive beacon count, will be perodically reset */ u16_t bssid[3]; /* BSSID of connected AP */ u8_t ssid[32]; /* SSID */ u8_t ssidLen; /* SSID length */ u8_t mTxRate; /* Tx rate for multicast */ u8_t uTxRate; /* Tx rate for unicast */ u8_t mmTxRate; /* Tx rate for management frame */ u8_t bChannelScan; u8_t bScheduleScan; u8_t InternalScanReq; u16_t activescanTickPerChannel; u16_t passiveScanTickPerChannel; u16_t scanFrequency; u32_t connPowerInHalfDbm; u16_t currentFrequency; u16_t currentBw40; u16_t currentExtOffset; u8_t bPassiveScan; struct zsBlockingAp blockingApList[ZM_MAX_BLOCKING_AP_LIST_SIZE]; //struct zsBssInfo bssInfoPool[ZM_MAX_BSS]; struct zsBssInfo* bssInfoArray[ZM_MAX_BSS]; struct zsBssList bssList; u8_t bssInfoArrayHead; u8_t bssInfoArrayTail; u8_t bssInfoFreeCount; u8_t authMode; u8_t currentAuthMode; u8_t wepStatus; u8_t encryMode; u8_t keyId; #ifdef ZM_ENABLE_IBSS_WPA2PSK u8_t ibssWpa2Psk; #endif #ifdef ZM_ENABLE_CENC u8_t cencKeyId; //CENC #endif //ZM_ENABLE_CENC u8_t dropUnencryptedPkts; u8_t ibssJoinOnly; u8_t adapterState; u8_t oldAdapterState; u8_t connectState; u8_t connectRetry; u8_t wpaState; u8_t wpaIe[ZM_MAX_IE_SIZE + 2]; u8_t rsnIe[ZM_MAX_IE_SIZE + 2]; u8_t challengeText[255+2]; u8_t capability[2]; //u8_t connectingHiddenAP; //u8_t scanWithSSID; u16_t aid; u32_t mgtFrameCount; u8_t bProtectionMode; u32_t NonNAPcount; u8_t RTSInAGGMode; u32_t connectTimer; u16_t atimWindow; u8_t desiredBssid[6]; u8_t bDesiredBssid; struct zsTkipSeed txSeed; struct zsTkipSeed rxSeed[4]; struct zsMicVar txMicKey; struct zsMicVar rxMicKey[4]; u16_t iv16; u32_t iv32; struct zsOppositeInfo oppositeInfo[ZM_MAX_OPPOSITE_COUNT]; u8_t oppositeCount; u8_t bssNotFoundCount; /* sitesurvey for search desired ISBB threshold */ u16_t rxBeaconCount; u8_t beaconMissState; u32_t rxBeaconTotal; u8_t bIsSharedKey; u8_t connectTimeoutCount; u8_t recvAtim; /* ScanMgr Control block */ struct zsWlanDevStaScanMgr scanMgr; struct zsWlanDevStaPSMgr psMgr; // The callback would be called if receiving an unencrypted packets but // the station is in encrypted mode. The wrapper could decide whether // to drop the packet by its OS setting. zfpStaRxSecurityCheckCb pStaRxSecurityCheckCb; /* WME */ u8_t apWmeCapability; //bit-0 => a WME AP //bit-7 => a UAPSD AP u8_t wmeParameterSetCount; u8_t wmeEnabled; #define ZM_STA_WME_ENABLE_BIT 0x1 #define ZM_STA_UAPSD_ENABLE_BIT 0x2 u8_t wmeQosInfo; u8_t wmeConnected; u8_t qosInfo; struct zsQueue* uapsdQ; /* countermeasures */ u8_t cmMicFailureCount; u8_t cmDisallowSsidLength; u8_t cmDisallowSsid[32]; /* power-saving mode */ u8_t powerSaveMode; zbuf_t* staPSDataQueue[ZM_PS_QUEUE_SIZE]; u8_t staPSDataCount; /* IBSS power-saving mode */ /* record the STA which has entered the PS mode */ struct zsStaPSList staPSList; /* queue the data of the PS STAs */ zbuf_t* ibssPSDataQueue[ZM_PS_QUEUE_SIZE]; u8_t ibssPSDataCount; u8_t ibssPrevPSDataCount; u8_t bIbssPSEnable; /* BIT_15: ON/OFF, BIT_0~14: Atim Timer */ u16_t ibssAtimTimer; /* WPA2 */ struct zsPmkidInfo pmkidInfo; /* Multicast list related objects */ struct zsMulticastList multicastList; /* XP packet filter feature : */ /* 1=>enable: All multicast address packets, not just the ones enumerated in the multicast address list. */ /* 0=>disable */ u8_t bAllMulticast; /* reassociation flag */ u8_t connectByReasso; u8_t failCntOfReasso; /* for HT configure control setting */ u8_t preambleTypeHT; /* HT: 0 Mixed mode 1 Green field */ u8_t htCtrlBandwidth; u8_t htCtrlSTBC; u8_t htCtrlSG; u8_t defaultTA; u8_t connection_11b; u8_t EnableHT; u8_t SG40; u8_t HT2040; /* for WPA setting */ u8_t wpaSupport; u8_t wpaLen; /* IBSS related objects */ u8_t ibssDelayedInd; struct zsPartnerNotifyEvent ibssDelayedIndEvent; u8_t ibssPartnerStatus; u8_t bAutoReconnect; u8_t flagFreqChanging; u8_t flagKeyChanging; struct zsBssInfo ibssBssDesc; u8_t ibssBssIsCreator; u16_t ibssReceiveBeaconCount; u8_t ibssSiteSurveyStatus; u8_t disableProbingWithSsid; #ifdef ZM_ENABLE_CENC /* CENC */ u8_t cencIe[ZM_MAX_IE_SIZE + 2]; #endif //ZM_ENABLE_CENC u32_t txiv[4]; //Tx PN Sequence u32_t rxiv[4]; //Rx PN Sequence u32_t rxivGK[4];//Broadcast Rx PN Sequence u8_t wepKey[4][32]; // For Software WEP u8_t SWEncryMode[4]; /* 802.11d */ u8_t b802_11D; /* 802.11h */ u8_t TPCEnable; u8_t DFSEnable; u8_t DFSDisableTx; /* Owl AP */ u8_t athOwlAp; /* Enable BA response in driver */ u8_t enableDrvBA; /* HT Capability Info */ union zuHTCapability HTCap; //CWYang(+) /* Extended HT Capability Info */ union zuExtHTCapability ExtHTCap; //CWYang(+) struct InformationElementSta ie; #define ZM_CACHED_FRAMEBODY_SIZE 200 u8_t asocReqFrameBody[ZM_CACHED_FRAMEBODY_SIZE]; u16_t asocReqFrameBodySize; u8_t asocRspFrameBody[ZM_CACHED_FRAMEBODY_SIZE]; u16_t asocRspFrameBodySize; u8_t beaconFrameBody[ZM_CACHED_FRAMEBODY_SIZE]; u16_t beaconFrameBodySize; u8_t ac0PriorityHigherThanAc2; u8_t SWEncryptEnable; u8_t leapEnabled; u32_t TotalNumberOfReceivePackets; u32_t TotalNumberOfReceiveBytes; u32_t avgSizeOfReceivePackets; u32_t ReceivedPacketRateCounter; u32_t ReceivedPktRatePerSecond; /* #2 Record the sequence number to determine whether the unicast frame is separated by RIFS or not */ #define ZM_RIFS_STATE_DETECTING 0 #define ZM_RIFS_STATE_DETECTED 1 #define ZM_RIFS_TIMER_TIMEOUT 4480 // 4480ms 7s u8_t rifsState; u8_t rifsLikeFrameCnt; u16_t rifsLikeFrameSequence[3]; u32_t rifsTimer; u32_t rifsCount; /* RX filter desired by upper layers. Note this contains some bits which must be filtered by sw since the hw supports only a subset of possible filter actions.= */ u32_t osRxFilter; u8_t bSafeMode; u32_t ibssAdditionalIESize; u8_t ibssAdditionalIE[256]; }; //struct zsWlanDevSta #define ZM_CMD_QUEUE_SIZE 256 //Roger Check, test 64 when ready #define ZM_OID_READ 1 #define ZM_OID_WRITE 2 #define ZM_OID_INTERNAL_WRITE 3 #define ZM_CMD_SET_FREQUENCY 4 #define ZM_CMD_SET_KEY 5 #define ZM_CWM_READ 6 #define ZM_MAC_READ 7 #define ZM_ANI_READ 8 #define ZM_EEPROM_READ 9 #define ZM_EEPROM_WRITE 0x0A #define ZM_OID_CHAN 0x30 #define ZM_OID_SYNTH 0x32 #define ZM_OID_TALLY 0x81 #define ZM_OID_TALLY_APD 0x82 #define ZM_OID_DKTX_STATUS 0x92 #define ZM_OID_FLASH_CHKSUM 0xD0 #define ZM_OID_FLASH_READ 0xD1 #define ZM_OID_FLASH_PROGRAM 0xD2 #define ZM_OID_FW_DL_INIT 0xD3 /* Driver to Firmware OID */ #define ZM_CMD_ECHO 0x80 #define ZM_CMD_TALLY 0x81 #define ZM_CMD_TALLY_APD 0x82 #define ZM_CMD_CONFIG 0x83 #define ZM_CMD_RREG 0x00 #define ZM_CMD_WREG 0x01 #define ZM_CMD_RMEM 0x02 #define ZM_CMD_WMEM 0x03 #define ZM_CMD_BITAND 0x04 #define ZM_CMD_BITOR 0x05 #define ZM_CMD_EKEY 0x28 #define ZM_CMD_DKEY 0x29 #define ZM_CMD_FREQUENCY 0x30 #define ZM_CMD_RF_INIT 0x31 #define ZM_CMD_SYNTH 0x32 #define ZM_CMD_FREQ_STRAT 0x33 #define ZM_CMD_RESET 0x90 #define ZM_CMD_DKRESET 0x91 #define ZM_CMD_DKTX_STATUS 0x92 #define ZM_CMD_FDC 0xA0 #define ZM_CMD_WREEPROM 0xB0 #define ZM_CMD_WFLASH 0xB0 #define ZM_CMD_FLASH_ERASE 0xB1 #define ZM_CMD_FLASH_PROG 0xB2 #define ZM_CMD_FLASH_CHKSUM 0xB3 #define ZM_CMD_FLASH_READ 0xB4 #define ZM_CMD_FW_DL_INIT 0xB5 #define ZM_CMD_MEM_WREEPROM 0xBB /* duplicate filter table column */ #define ZM_FILTER_TABLE_COL 2 /* 2^n */ /* duplicate filter table Row */ #define ZM_FILTER_TABLE_ROW 8 /* 2^n */ /* duplicate filter table structure */ struct zsRxFilter { u16_t addr[3]; u16_t seq; u8_t up; }; struct zsWlanDev { /* AP global variables */ struct zsWlanDevAp ap; /* STA global variables */ struct zsWlanDevSta sta; /* save wrapper setting */ struct zsWrapperSetting ws; /* features determined by wrapper (vendor) */ struct zsWrapperFeatureCtrl wfc; /* Traffic Monitor tally */ struct zsTrafTally trafTally; /* Communication tally */ struct zsCommTally commTally; /* Duplicate frame filter table */ struct zsRxFilter rxFilterTbl[ZM_FILTER_TABLE_COL][ZM_FILTER_TABLE_ROW]; /* Regulatory table */ struct zsRegulationTable regulationTable; /* */ struct zsWlanDevFreqControl freqCtrl; enum devState state; u8_t halState; u8_t wlanMode; /* AP/INFRASTRUCTURE/IBSS/PSEUDO */ u16_t macAddr[3]; /* MAC address */ u16_t beaconInterval; /* beacon Interval */ u8_t dtim; /* DTIM period */ u8_t CurrentDtimCount; u8_t preambleType; u8_t preambleTypeInUsed; u8_t maxTxPower2; /* 2.4 GHz Max Tx power (Unit: 0.5 dBm) */ u8_t maxTxPower5; /* 5 GHz Max Tx power (Unit: 0.5 dBm) */ u8_t connectMode; u32_t supportMode; u8_t bRate; /* 11b Support Rate bit map */ u8_t bRateBasic; /* 11b Basic Rate bit map */ u8_t gRate; /* 11g Support Rate bit map */ u8_t gRateBasic; /* 11g Basic Rate bit map */ /* channel index point to the item in regulation table */ u8_t channelIndex; /* channel management */ u8_t BandWidth40; u8_t ExtOffset; //1 above, 3 below, 0 not present u16_t frequency; /* operation frequency */ u8_t erpElement; /* ERP information element data */ u8_t disableSelfCts; /* set to 1 to disable Self-CTS */ u8_t bgMode; /* private test flag */ u32_t enableProtectionMode; /* force enable/disable self cts */ u32_t checksumTest; /* OTUS checksum test 1=>zero checksum 0=>normal */ u32_t rxPacketDump; /* rx packet dump */ u8_t enableAggregation; /* force enable/disable A-MSPU */ u8_t enableWDS; /* force enable/disable WDS testing */ u8_t enableTxPathMode; /* OTUS special testing mode 1=>diable, 0=>enable: ZM_SYSTEM_TEST_MODE */ u8_t enableHALDbgInfo; /* */ u32_t forceTxTPC; /* force tx packet send TPC */ u16_t seq[4]; u16_t mmseq; /* driver core time tick */ u32_t tick; u16_t tickIbssSendBeacon; u16_t tickIbssReceiveBeacon; /* RTS threshold */ u16_t rtsThreshold; /* fragmentation threshold, 256 <= value <= 2346, 0=disabled */ u16_t fragThreshold; /* Tx Rate */ u16_t txMCS; u16_t txMT; u32_t CurrentTxRateKbps; //CWYang(+) /* Rx Rate */ u32_t CurrentRxRateKbps; //Janet(+) u8_t CurrentRxRateUpdated; u8_t modulationType; u8_t rxInfo; u16_t rateField; /* timer related objects */ struct zsTimerList timerList; u8_t bTimerReady; /* for defragmentation */ struct zsDefragList defragTable; /* Data struct for Interface Dependent Layer */ //struct zsIdlStruct idlStruct; /* Signal Strength/Quality Related Parameters */ u8_t SignalStrength; //CWYang(+) u8_t SignalQuality; //CWYang(+) /* QoS */ zbuf_t* vtxq[4][ZM_VTXQ_SIZE]; u16_t vtxqHead[4]; u16_t vtxqTail[4]; u16_t qosDropIpFrag[4]; /* Management Tx queue */ zbuf_t* vmmq[ZM_VMMQ_SIZE]; u16_t vmmqHead; u16_t vmmqTail; u8_t vtxqPushing; /* * add by honda * 1. Aggregate queues * 2. STA's associated information and queue number * 3. rx aggregation re-ordering queue */ struct aggQueue *aggQPool[ZM_AGG_POOL_SIZE]; u8_t aggInitiated; u8_t addbaComplete; u8_t addbaCount; u8_t aggState; u8_t destLock; struct aggSta aggSta[ZM_MAX_STA_SUPPORT]; struct agg_tid_rx *tid_rx[ZM_AGG_POOL_SIZE]; struct aggTally agg_tal; struct destQ destQ; struct baw_enabler *baw_enabler; struct ieee80211_cwm cwm; u16_t reorder; u16_t seq_debug; /* rate control */ u32_t txMPDU[ZM_RATE_TABLE_SIZE]; u32_t txFail[ZM_RATE_TABLE_SIZE]; u32_t PER[ZM_RATE_TABLE_SIZE]; u16_t probeCount; u16_t probeSuccessCount; u16_t probeInterval; u16_t success_probing; /* * end of add by honda */ /* airopeek sniffer mode for upper sw */ u32_t swSniffer; /* window: airoPeek */ u32_t XLinkMode; /* MDK mode */ /* init by 0=>normal driver 1=>MDK driver */ u32_t modeMDKEnable; u32_t heartBeatNotification; /* pointer for HAL Plus private memory */ void* hpPrivate; /* for WPA setting */ //u8_t wpaSupport[ZM_MAX_AP_SUPPORT]; //u8_t wpaLen[ZM_MAX_AP_SUPPORT]; //u8_t wpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_IE_SIZE]; struct zsLedStruct ledStruct; /* ani flag */ u8_t aniEnable; u16_t txq_threshold; //Skip Mic Error Check u8_t TKIP_Group_KeyChanging; u8_t dynamicSIFSEnable; u8_t queueFlushed; u16_t (*zfcbAuthNotify)(zdev_t* dev, u16_t* macAddr); u16_t (*zfcbAsocNotify)(zdev_t* dev, u16_t* macAddr, u8_t* body, u16_t bodySize, u16_t port); u16_t (*zfcbDisAsocNotify)(zdev_t* dev, u8_t* macAddr, u16_t port); u16_t (*zfcbApConnectNotify)(zdev_t* dev, u8_t* macAddr, u16_t port); void (*zfcbConnectNotify)(zdev_t* dev, u16_t status, u16_t* bssid); void (*zfcbScanNotify)(zdev_t* dev, struct zsScanResult* result); void (*zfcbMicFailureNotify)(zdev_t* dev, u16_t* addr, u16_t status); void (*zfcbApMicFailureNotify)(zdev_t* dev, u8_t* addr, zbuf_t* buf); void (*zfcbIbssPartnerNotify)(zdev_t* dev, u16_t status, struct zsPartnerNotifyEvent *event); void (*zfcbMacAddressNotify)(zdev_t* dev, u8_t* addr); void (*zfcbSendCompleteIndication)(zdev_t* dev, zbuf_t* buf); void (*zfcbRecvEth)(zdev_t* dev, zbuf_t* buf, u16_t port); void (*zfcbRecv80211)(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo); void (*zfcbRestoreBufData)(zdev_t* dev, zbuf_t* buf); #ifdef ZM_ENABLE_CENC u16_t (*zfcbCencAsocNotify)(zdev_t* dev, u16_t* macAddr, u8_t* body, u16_t bodySize, u16_t port); #endif //ZM_ENABLE_CENC u8_t (*zfcbClassifyTxPacket)(zdev_t* dev, zbuf_t* buf); void (*zfcbHwWatchDogNotify)(zdev_t* dev); }; struct zsWlanKey { u8_t key; }; /* These macros are defined here for backward compatibility */ /* Please leave them alone */ /* For Tx packet allocated in upper layer layer */ #define zmw_tx_buf_readb(dev, buf, offset) zmw_buf_readb(dev, buf, offset) #define zmw_tx_buf_readh(dev, buf, offset) zmw_buf_readh(dev, buf, offset) #define zmw_tx_buf_writeb(dev, buf, offset, value) zmw_buf_writeb(dev, buf, offset, value) #define zmw_tx_buf_writeh(dev, buf, offset, value) zmw_buf_writeh(dev, buf, offset, value) /* For Rx packet allocated in driver */ #define zmw_rx_buf_readb(dev, buf, offset) zmw_buf_readb(dev, buf, offset) #define zmw_rx_buf_readh(dev, buf, offset) zmw_buf_readh(dev, buf, offset) #define zmw_rx_buf_writeb(dev, buf, offset, value) zmw_buf_writeb(dev, buf, offset, value) #define zmw_rx_buf_writeh(dev, buf, offset, value) zmw_buf_writeh(dev, buf, offset, value) #endif /* #ifndef _STRUCT_H */