#include <lib/libkern/libkern.h>
#include <dev/ic/rf3000reg.h>
#include <dev/ic/hfa3861areg.h>
#define ATW_PAR 0x00
#define ATW_FRCTL 0x04
#define ATW_TDR 0x08
#define ATW_WTDP 0x0C
#define ATW_RDR 0x10
#define ATW_WRDP 0x14
#define ATW_RDB 0x18
#define ATW_CSR3A 0x1C
#define ATW_C_TDBH 0x1C
#define ATW_TDBD 0x20
#define ATW_TDBP 0x24
#define ATW_STSR 0x28
#define ATW_CSR5A 0x2C
#define ATW_C_TDBB 0x2C
#define ATW_NAR 0x30
#define ATW_CSR6A 0x34
#define ATW_IER 0x38
#define ATW_CSR7A 0x3C
#define ATW_LPC 0x40
#define ATW_TEST1 0x44
#define ATW_SPR 0x48
#define ATW_TEST0 0x4C
#define ATW_WCSR 0x50
#define ATW_WPDR 0x54
#define ATW_GPTMR 0x58
#define ATW_GPIO 0x5C
#define ATW_BBPCTL 0x60
#define ATW_SYNCTL 0x64
#define ATW_PLCPHD 0x68
#define ATW_MMIWADDR 0x6C
#define ATW_MMIRADDR1 0x70
#define ATW_MMIRADDR2 0x74
#define ATW_TXBR 0x78
#define ATW_CSR15A 0x7C
#define ATW_ALCSTAT 0x80
#define ATW_TOFS2 0x84
#define ATW_CMDR 0x88
#define ATW_PCIC 0x8C
#define ATW_PMCSR 0x90
#define ATW_PAR0 0x94
#define ATW_PAR1 0x98
#define ATW_MAR0 0x9C
#define ATW_MAR1 0xA0
#define ATW_ATIMDA0 0xA4
#define ATW_ABDA1 0xA8
#define ATW_BSSID0 0xAC
#define ATW_TXLMT 0xB0
#define ATW_MIBCNT 0xB4
#define ATW_BCNT 0xB8
#define ATW_TSFTH 0xBC
#define ATW_TSC 0xC0
#define ATW_SYNRF 0xC4
#define ATW_BPLI 0xC8
#define ATW_CAP0 0xCC
#define ATW_CAP1 0xD0
#define ATW_RMD 0xD4
#define ATW_CFPP 0xD8
#define ATW_TOFS0 0xDC
#define ATW_TOFS1 0xE0
#define ATW_IFST 0xE4
#define ATW_RSPT 0xE8
#define ATW_TSFTL 0xEC
#define ATW_WEPCTL 0xF0
#define ATW_WESK 0xF4
#define ATW_WEPCNT 0xF8
#define ATW_MACTEST 0xFC
#define ATW_FER 0x100
#define ATW_FEMR 0x104
#define ATW_FPSR 0x108
#define ATW_FFER 0x10C
#define ATW_PAR_MWIE __BIT(24)
#define ATW_PAR_MRLE __BIT(23)
#define ATW_PAR_MRME __BIT(21)
#define ATW_PAR_RAP_MASK __BITS(17, 18)
#define ATW_PAR_CAL_MASK __BITS(14, 15)
#define ATW_PAR_CAL_PBL 0x0
#define ATW_PAR_CAL_8DW __SHIFTIN(0x1, ATW_PAR_CAL_MASK)
#define ATW_PAR_CAL_16DW __SHIFTIN(0x2, ATW_PAR_CAL_MASK)
#define ATW_PAR_CAL_32DW __SHIFTIN(0x3, ATW_PAR_CAL_MASK)
#define ATW_PAR_PBL_MASK __BITS(8, 13)
#define ATW_PAR_PBL_UNLIMITED 0x0
#define ATW_PAR_PBL_1DW __SHIFTIN(0x1, ATW_PAR_PBL_MASK)
#define ATW_PAR_PBL_2DW __SHIFTIN(0x2, ATW_PAR_PBL_MASK)
#define ATW_PAR_PBL_4DW __SHIFTIN(0x4, ATW_PAR_PBL_MASK)
#define ATW_PAR_PBL_8DW __SHIFTIN(0x8, ATW_PAR_PBL_MASK)
#define ATW_PAR_PBL_16DW __SHIFTIN(0x16, ATW_PAR_PBL_MASK)
#define ATW_PAR_PBL_32DW __SHIFTIN(0x32, ATW_PAR_PBL_MASK)
#define ATW_PAR_BLE __BIT(7)
#define ATW_PAR_DSL_MASK __BITS(2, 6)
#define ATW_PAR_BAR __BIT(1)
#define ATW_PAR_SWR __BIT(0)
#define ATW_FRCTL_PWRMGMT __BIT(31)
#define ATW_FRCTL_VER_MASK __BITS(29, 30)
#define ATW_FRCTL_ORDER __BIT(28)
#define ATW_FRCTL_MAXPSP __BIT(27)
#define ATW_C_FRCTL_PRSP __BIT(26)
#define ATW_C_FRCTL_DRVBCON __BIT(25)
#define ATW_C_FRCTL_DRVLINKCTRL __BIT(24)
#define ATW_C_FRCTL_DRVLINKON __BIT(23)
#define ATW_C_FRCTL_CTX_DATA __BIT(22)
#define ATW_C_FRCTL_RSVFRM __BIT(21)
#define ATW_C_FRCTL_CFEND __BIT(19)
#define ATW_FRCTL_DOZEFRM __BIT(18)
#define ATW_FRCTL_PSAWAKE __BIT(17)
#define ATW_FRCTL_PSMODE __BIT(16)
#define ATW_FRCTL_AID_MASK __BITS(0, 15)
#define ATW_INTR_PCF __BIT(31)
#define ATW_INTR_BCNTC __BIT(30)
#define ATW_INTR_GPINT __BIT(29)
#define ATW_INTR_LINKOFF __BIT(28)
#define ATW_INTR_ATIMTC __BIT(27)
#define ATW_INTR_TSFTF __BIT(26)
#define ATW_INTR_TSCZ __BIT(25)
#define ATW_INTR_LINKON __BIT(24)
#define ATW_INTR_SQL __BIT(23)
#define ATW_INTR_WEPTD __BIT(22)
#define ATW_INTR_ATIME __BIT(21)
#define ATW_INTR_TBTT __BIT(20)
#define ATW_INTR_NISS __BIT(16)
#define ATW_INTR_AISS __BIT(15)
#define ATW_INTR_TEIS __BIT(14)
#define ATW_INTR_FBE __BIT(13)
#define ATW_INTR_REIS __BIT(12)
#define ATW_INTR_GPTT __BIT(11)
#define ATW_INTR_RPS __BIT(8)
#define ATW_INTR_RDU __BIT(7)
#define ATW_INTR_RCI __BIT(6)
#define ATW_INTR_TUF __BIT(5)
#define ATW_INTR_TRT __BIT(4)
#define ATW_INTR_TLT __BIT(3)
#define ATW_INTR_TDU __BIT(2)
#define ATW_INTR_TPS __BIT(1)
#define ATW_INTR_TCI __BIT(0)
#define ATW_NAR_TXCF __BIT(31)
#define ATW_NAR_HF __BIT(30)
#define ATW_NAR_UTR __BIT(29)
#define ATW_NAR_PCF __BIT(28)
#define ATW_NAR_CFP __BIT(27)
#define ATW_C_NAR_APSTA __BIT(26)
#define ATW_C_NAR_TDBBE __BIT(25)
#define ATW_C_NAR_TDBHE __BIT(24)
#define ATW_C_NAR_TDBHT __BIT(23)
#define ATW_NAR_SF __BIT(21)
#define ATW_NAR_TR_MASK __BITS(14, 15)
#define ATW_NAR_TR_L64 __SHIFTIN(0x0, ATW_NAR_TR_MASK)
#define ATW_NAR_TR_L160 __SHIFTIN(0x2, ATW_NAR_TR_MASK)
#define ATW_NAR_TR_L192 __SHIFTIN(0x3, ATW_NAR_TR_MASK)
#define ATW_NAR_TR_H96 __SHIFTIN(0x0, ATW_NAR_TR_MASK)
#define ATW_NAR_TR_H288 __SHIFTIN(0x2, ATW_NAR_TR_MASK)
#define ATW_NAR_TR_H544 __SHIFTIN(0x3, ATW_NAR_TR_MASK)
#define ATW_NAR_ST __BIT(13)
#define ATW_NAR_OM_MASK __BITS(10, 11)
#define ATW_NAR_OM_NORMAL 0x0
#define ATW_NAR_OM_LOOPBACK __SHIFTIN(0x1, ATW_NAR_OM_MASK)
#define ATW_NAR_MM __BIT(7)
#define ATW_NAR_PR __BIT(6)
#define ATW_NAR_EA __BIT(5)
#define ATW_NAR_DISPCF __BIT(4)
#define ATW_NAR_PB __BIT(3)
#define ATW_NAR_STPDMA __BIT(2)
#define ATW_NAR_SR __BIT(1)
#define ATW_NAR_CTX __BIT(0)
#if 0
#define ATW_IER_NIE __BIT(16)
#define ATW_IER_AIE __BIT(15)
#define ATW_IER_PCFIE __BIT(31)
#define ATW_IER_BCNTCIE __BIT(30)
#define ATW_IER_ATIMTCIE __BIT(27)
#define ATW_IER_LINKONIE __BIT(24)
#define ATW_IER_ATIMIE __BIT(21)
#define ATW_IER_TBTTIE __BIT(20)
#define ATW_IER_TEIE __BIT(14)
#define ATW_IER_REIE __BIT(12)
#define ATW_IER_RCIE __BIT(6)
#define ATW_IER_TDUIE __BIT(2)
#define ATW_IER_TCIE __BIT(0)
#define ATW_IER_GPIE __BIT(29)
#define ATW_IER_LINKOFFIE __BIT(28)
#define ATW_IER_TSFTFIE __BIT(26)
#define ATW_IER_TSCIE __BIT(25)
#define ATW_IER_SQLIE __BIT(23)
#define ATW_IER_WEPIE __BIT(22)
#define ATW_IER_FBEIE __BIT(13)
#define ATW_IER_GPTIE __BIT(11)
#define ATW_IER_RPSIE __BIT(8)
#define ATW_IER_RUIE __BIT(7)
#define ATW_IER_TUIE __BIT(5)
#define ATW_IER_TRTIE __BIT(4)
#define ATW_IER_TLTTIE __BIT(3)
#define ATW_IER_TPSIE __BIT(1)
#endif
#define ATW_LPC_LPCO __BIT(16)
#define ATW_LPC_LPC_MASK __BITS(0, 15)
#define ATW_TEST1_RRA_MASK __BITS(20,12)
#define ATW_TEST1_RWA_MASK __BITS(10,2)
#define ATW_TEST1_RXPKT1IN __BIT(1)
#define ATW_TEST1_CONTROL __BIT(31)
#define ATW_TEST1_DBGREAD_MASK __BITS(30,28)
#define ATW_TEST1_TXWP_MASK __BITS(27,25)
#define ATW_TEST1_TXWP_TDBD __SHIFTIN(0x0, ATW_TEST1_TXWP_MASK)
#define ATW_TEST1_TXWP_TDBH __SHIFTIN(0x1, ATW_TEST1_TXWP_MASK)
#define ATW_TEST1_TXWP_TDBB __SHIFTIN(0x2, ATW_TEST1_TXWP_MASK)
#define ATW_TEST1_TXWP_TDBP __SHIFTIN(0x3, ATW_TEST1_TXWP_MASK)
#define ATW_TEST1_RSVD0_MASK __BITS(24,6)
#define ATW_TEST1_TESTMODE_MASK __BITS(5,4)
#define ATW_TEST1_TESTMODE_NORMAL __SHIFTIN(0x0, ATW_TEST1_TESTMODE_MASK)
#define ATW_TEST1_TESTMODE_MACONLY __SHIFTIN(0x1, ATW_TEST1_TESTMODE_MASK)
#define ATW_TEST1_TESTMODE_NORMAL2 __SHIFTIN(0x2, ATW_TEST1_TESTMODE_MASK)
#define ATW_TEST1_TESTMODE_MONITOR __SHIFTIN(0x3, ATW_TEST1_TESTMODE_MASK)
#define ATW_TEST1_DUMP_MASK __BITS(3,0)
#define ATW_SPR_SRS __BIT(11)
#define ATW_SPR_SDO __BIT(3)
#define ATW_SPR_SDI __BIT(2)
#define ATW_SPR_SCLK __BIT(1)
#define ATW_SPR_SCS __BIT(0)
#define ATW_TEST0_BE_MASK __BITS(31, 29)
#define ATW_TEST0_TS_MASK __BITS(28, 26)
#define ATW_TEST0_TS_STOPPED __SHIFTIN(0, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_FETCH __SHIFTIN(1, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_WAIT __SHIFTIN(2, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_READING __SHIFTIN(3, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_RESERVED1 __SHIFTIN(4, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_RESERVED2 __SHIFTIN(5, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_SUSPENDED __SHIFTIN(6, ATW_TEST0_TS_MASK)
#define ATW_TEST0_TS_CLOSE __SHIFTIN(7, ATW_TEST0_TS_MASK)
#define ATW_C_TEST0_TS_SUSPENDED __SHIFTIN(4, ATW_TEST0_TS_MASK)
#define ATW_C_TEST0_TS_CLOSE __SHIFTIN(5, ATW_TEST0_TS_MASK)
#define ATW_C_TEST0_TS_CLOSELAST __SHIFTIN(6, ATW_TEST0_TS_MASK)
#define ATW_C_TEST0_TS_FIFOFULL __SHIFTIN(7, ATW_TEST0_TS_MASK)
#define ATW_TEST0_RS_MASK __BITS(25, 23)
#define ATW_TEST0_RS_STOPPED __SHIFTIN(0, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_FETCH __SHIFTIN(1, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_CHECK __SHIFTIN(2, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_WAIT __SHIFTIN(3, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_SUSPENDED __SHIFTIN(4, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_CLOSE __SHIFTIN(5, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_FLUSH __SHIFTIN(6, ATW_TEST0_RS_MASK)
#define ATW_TEST0_RS_QUEUE __SHIFTIN(7, ATW_TEST0_RS_MASK)
#define ATW_TEST0_EPNE __BIT(18)
#define ATW_TEST0_EPSNM __BIT(17)
#define ATW_TEST0_EPTYP_MASK __BIT(16)
#define ATW_TEST0_EPTYP_93c66 ATW_TEST0_EPTYP_MASK
#define ATW_TEST0_EPTYP_93c46 0
#define ATW_TEST0_EPRLD __BIT(15)
#define ATW_WCSR_CRCT __BIT(30)
#define ATW_WCSR_WP1E __BIT(29)
#define ATW_WCSR_WP2E __BIT(28)
#define ATW_WCSR_WP3E __BIT(27)
#define ATW_WCSR_WP4E __BIT(26)
#define ATW_WCSR_WP5E __BIT(25)
#define ATW_WCSR_BLN_MASK __BITS(21, 23)
#define ATW_WCSR_TSFTWE __BIT(20)
#define ATW_WCSR_TIMWE __BIT(19)
#define ATW_WCSR_ATIMWE __BIT(18)
#define ATW_WCSR_KEYWE __BIT(17)
#define ATW_WCSR_WFRE __BIT(10)
#define ATW_WCSR_MPRE __BIT(9)
#define ATW_WCSR_LSOE __BIT(8)
#define ATW_WCSR_KEYUP __BIT(6)
#define ATW_WCSR_TSFTW __BIT(5)
#define ATW_WCSR_TIMW __BIT(4)
#define ATW_WCSR_ATIMW __BIT(3)
#define ATW_WCSR_WFR __BIT(2)
#define ATW_WCSR_MPR __BIT(1)
#define ATW_WCSR_LSO __BIT(0)
#define ATW_GPTMR_COM_MASK __BIT(16)
#define ATW_GPTMR_GTV_MASK __BITS(0, 15)
#define ATW_GPIO_EC1_MASK __BITS(25, 24)
#define ATW_GPIO_LAT_MASK __BITS(21, 20)
#define ATW_GPIO_INTEN_MASK __BITS(19, 18)
#define ATW_GPIO_EN_MASK __BITS(17, 12)
#define ATW_GPIO_O_MASK __BITS(11, 6)
#define ATW_GPIO_I_MASK __BITS(5, 0)
#define ATW_BBPCTL_TWI __BIT(31)
#define ATW_BBPCTL_RF3KADDR_MASK __BITS(30, 24)
#define ATW_BBPCTL_RF3KADDR_ADDR __SHIFTIN(0x20, ATW_BBPCTL_RF3KADDR_MASK)
#define ATW_BBPCTL_NEGEDGE_DO __BIT(23)
#define ATW_BBPCTL_NEGEDGE_DI __BIT(22)
#define ATW_BBPCTL_CCA_ACTLO __BIT(21)
#define ATW_BBPCTL_TYPE_MASK __BITS(20, 18)
#define ATW_BBPCTL_WR __BIT(17)
#define ATW_BBPCTL_RD __BIT(16)
#define ATW_BBPCTL_ADDR_MASK __BITS(15, 8)
#define ATW_BBPCTL_DATA_MASK __BITS(7, 0)
#define ATW_SYNCTL_WR __BIT(31)
#define ATW_SYNCTL_RD __BIT(30)
#define ATW_SYNCTL_CS0 __BIT(29)
#define ATW_SYNCTL_CS1 __BIT(28)
#define ATW_SYNCTL_CAL __BIT(27)
#define ATW_SYNCTL_SELCAL __BIT(26)
#define ATW_C_SYNCTL_MMICE __BIT(25)
#define ATW_SYNCTL_RFTYPE_MASK __BITS(24, 22)
#define ATW_SYNCTL_DATA_MASK __BITS(21, 0)
#define ATW_PLCPHD_SIGNAL_MASK __BITS(31, 24)
#define ATW_PLCPHD_SERVICE_MASK __BITS(23, 16)
#define ATW_PLCPHD_PMBL __BIT(15)
#define ATW_MMIWADDR_LENLO_MASK __BITS(31,24)
#define ATW_MMIWADDR_LENHI_MASK __BITS(23,16)
#define ATW_MMIWADDR_GAIN_MASK __BITS(15,8)
#define ATW_MMIWADDR_RATE_MASK __BITS(7,0)
#define ATW_MMIWADDR_INTERSIL \
(__SHIFTIN(HFA3861A_CR6, ATW_MMIWADDR_GAIN_MASK) | \
__SHIFTIN(HFA3861A_CR5, ATW_MMIWADDR_RATE_MASK) | \
__SHIFTIN(HFA3861A_CR7, ATW_MMIWADDR_LENHI_MASK) | \
__SHIFTIN(HFA3861A_CR8, ATW_MMIWADDR_LENLO_MASK))
#define ATW_MMIWADDR_RFMD \
(__SHIFTIN(RF3000_TWI_AI|RF3000_GAINCTL, ATW_MMIWADDR_GAIN_MASK) | \
__SHIFTIN(RF3000_CTL, ATW_MMIWADDR_RATE_MASK))
#define ATW_MMIRADDR1_RSVD_MASK __BITS(31, 24)
#define ATW_MMIRADDR1_PWRLVL_MASK __BITS(23, 16)
#define ATW_MMIRADDR1_RSSI_MASK __BITS(15, 8)
#define ATW_MMIRADDR1_RXSTAT_MASK __BITS(7, 0)
#define ATW_MMIRADDR1_INTERSIL \
(__SHIFTIN(HFA3861A_CR61, ATW_MMIRADDR1_RSSI_MASK) | \
__SHIFTIN(HFA3861A_CR62, ATW_MMIRADDR1_RXSTAT_MASK))
#define ATW_MMIRADDR1_RFMD \
(__SHIFTIN(RF3000_RSSI, ATW_MMIRADDR1_RSSI_MASK) | \
__SHIFTIN(RF3000_RXSTAT, ATW_MMIRADDR1_RXSTAT_MASK))
#define ATW_MMIRADDR2_INTERSIL \
(__SHIFTIN(0x0, ATW_MMIRADDR2_ID_MASK) | \
__SHIFTIN(0x10, ATW_MMIRADDR2_RXPECNT_MASK))
#define ATW_MMIRADDR2_RFMD \
(__SHIFTIN(0x7e, ATW_MMIRADDR2_ID_MASK) | \
__SHIFTIN(0x10, ATW_MMIRADDR2_RXPECNT_MASK))
#define ATW_MMIRADDR2_ID_MASK __BITS(31, 24)
#define ATW_MMIRADDR2_RXPECNT_MASK __BITS(23, 16)
#define ATW_MMIRADDR2_PROREXT __BIT(15)
#define ATW_MMIRADDR2_PRORLEN_MASK __BITS(14, 0)
#define ATW_TXBR_ALCUPDATE_MASK __BIT(31)
#define ATW_TXBR_TBCNT_MASK __BITS(16, 20)
#define ATW_TXBR_ALCSET_MASK __BITS(8, 15)
#define ATW_TXBR_ALCREF_MASK __BITS(0, 7)
#define ATW_ALCSTAT_MCOV_MASK __BIT(27)
#define ATW_ALCSTAT_ESOV_MASK __BIT(26)
#define ATW_ALCSTAT_MCNT_MASK __BITS(16, 25)
#define ATW_ALCSTAT_ERSUM_MASK __BITS(0, 15)
#define ATW_TOFS2_PWR1UP_MASK __BITS(31, 28)
#define ATW_TOFS2_PWR0PAPE_MASK __BITS(27, 24)
#define ATW_TOFS2_PWR1PAPE_MASK __BITS(23, 20)
#define ATW_TOFS2_PWR0TRSW_MASK __BITS(19, 16)
#define ATW_TOFS2_PWR1TRSW_MASK __BITS(15, 12)
#define ATW_TOFS2_PWR0PE2_MASK __BITS(11, 8)
#define ATW_TOFS2_PWR1PE2_MASK __BITS(7, 4)
#define ATW_TOFS2_PWR0TXPE_MASK __BITS(3, 0)
#define ATW_CMDR_PM __BIT(19)
#define ATW_CMDR_APM __BIT(18)
#define ATW_CMDR_RTE __BIT(4)
#define ATW_CMDR_DRT_MASK __BITS(3, 2)
#define ATW_CMDR_DRT_8DW __SHIFTIN(0x0, ATW_CMDR_DRT_MASK)
#define ATW_CMDR_DRT_16DW __SHIFTIN(0x1, ATW_CMDR_DRT_MASK)
#define ATW_CMDR_DRT_SF __SHIFTIN(0x2, ATW_CMDR_DRT_MASK)
#define ATW_CMDR_DRT_RSVD __SHIFTIN(0x3, ATW_CMDR_DRT_MASK)
#define ATW_CMDR_SINT_MASK __BIT(1)
#define ATW_PAR0_PAB0_MASK __BITS(0, 7)
#define ATW_PAR0_PAB1_MASK __BITS(8, 15)
#define ATW_PAR0_PAB2_MASK __BITS(16, 23)
#define ATW_PAR0_PAB3_MASK __BITS(24, 31)
#define ATW_C_PAR1_CTD __BITS(16,31)
#define ATW_PAR1_PAB5_MASK __BITS(8, 15)
#define ATW_PAR1_PAB4_MASK __BITS(0, 7)
#define ATW_MAR0_MAB3_MASK __BITS(31, 24)
#define ATW_MAR0_MAB2_MASK __BITS(23, 16)
#define ATW_MAR0_MAB1_MASK __BITS(15, 8)
#define ATW_MAR0_MAB0_MASK __BITS(7, 0)
#define ATW_MAR1_MAB7_MASK __BITS(31, 24)
#define ATW_MAR1_MAB6_MASK __BITS(23, 16)
#define ATW_MAR1_MAB5_MASK __BITS(15, 8)
#define ATW_MAR1_MAB4_MASK __BITS(7, 0)
#define ATW_ATIMDA0_ATIMB3_MASK __BITS(31,24)
#define ATW_ATIMDA0_ATIMB2_MASK __BITS(23,16)
#define ATW_ATIMDA0_ATIMB1_MASK __BITS(15,8)
#define ATW_ATIMDA0_ATIMB0_MASK __BITS(7,0)
#define ATW_ABDA1_BSSIDB5_MASK __BITS(31,24)
#define ATW_ABDA1_BSSIDB4_MASK __BITS(23,16)
#define ATW_ABDA1_ATIMB5_MASK __BITS(15,8)
#define ATW_ABDA1_ATIMB4_MASK __BITS(7,0)
#define ATW_BSSID0_BSSIDB3_MASK __BITS(31,24)
#define ATW_BSSID0_BSSIDB2_MASK __BITS(23,16)
#define ATW_BSSID0_BSSIDB1_MASK __BITS(15,8)
#define ATW_BSSID0_BSSIDB0_MASK __BITS(7,0)
#define ATW_TXLMT_MTMLT_MASK __BITS(31,16)
#define ATW_TXLMT_SRTYLIM_MASK __BITS(7,0)
#define ATW_MIBCNT_FFCNT_MASK __BITS(31,24)
#define ATW_MIBCNT_AFCNT_MASK __BITS(23,16)
#define ATW_MIBCNT_RSCNT_MASK __BITS(15,8)
#define ATW_MIBCNT_RFCNT_MASK __BITS(7,0)
#define ATW_BCNT_PLCPH_MASK __BITS(23,16)
#define ATW_BCNT_PLCPL_MASK __BITS(15,8)
#define ATW_BCNT_BCNT_MASK __BITS(7,0)
#define ATW_C_BCNT_EXTEN1 __BIT(31)
#define ATW_C_BCNT_BEANLEN1 __BITS(30,16)
#define ATW_C_BCNT_EXTEN0 __BIT(15)
#define ATW_C_BCNT_BEANLEN0 __BIT(14,0)
#define ATW_C_TSC_TIMOFS __BITS(31,24)
#define ATW_C_TSC_TIMLEN __BITS(21,12)
#define ATW_C_TSC_TIMTABSEL __BIT(4)
#define ATW_TSC_TSC_MASK __BITS(3,0)
#define ATW_SYNRF_SELSYN __BIT(31)
#define ATW_SYNRF_SELRF __BIT(30)
#define ATW_SYNRF_LERF __BIT(29)
#define ATW_SYNRF_LEIF __BIT(28)
#define ATW_SYNRF_SYNCLK __BIT(27)
#define ATW_SYNRF_SYNDATA __BIT(26)
#define ATW_SYNRF_PE1 __BIT(25)
#define ATW_SYNRF_PE2 __BIT(24)
#define ATW_SYNRF_PAPE __BIT(23)
#define ATW_C_SYNRF_TRSW __BIT(22)
#define ATW_C_SYNRF_TRSWN __BIT(21)
#define ATW_SYNRF_INTERSIL_EN __BIT(20)
#define ATW_SYNRF_PHYRST __BIT(18)
#define ATW_C_SYNRF_RF2958PD ATW_SYNRF_PHYRST
#define ATW_BPLI_BP_MASK __BITS(31,16)
#define ATW_BPLI_LI_MASK __BITS(15,0)
#define ATW_C_CAP0_TIMLEN1 __BITS(31,24)
#define ATW_C_CAP0_TIMLEN0 __BITS(23,16)
#define ATW_C_CAP0_CWMAX __BITS(11,8)
#define ATW_CAP0_RCVDTIM __BIT(4)
#define ATW_CAP0_CHN_MASK __BITS(3,0)
#define ATW_CAP1_CAPI_MASK __BITS(31,16)
#define ATW_CAP1_ATIMW_MASK __BITS(15,0)
#define ATW_RMD_ATIMST __BIT(31)
#define ATW_RMD_CFP __BIT(30)
#define ATW_RMD_PCNT __BITS(27,16)
#define ATW_RMD_RMRD_MASK __BITS(15,0)
#define ATW_CFPP_CFPP __BITS(31,24)
#define ATW_CFPP_CFPMD __BITS(23,8)
#define ATW_CFPP_DTIMP __BITS(7,0)
#define ATW_TOFS0_USCNT_MASK __BITS(29,24)
#define ATW_C_TOFS0_TUCNT_MASK __BITS(14,10)
#define ATW_TOFS0_TUCNT_MASK __BITS(9,0)
#define ATW_TOFS1_TSFTOFSR_MASK __BITS(31,24)
#define ATW_TOFS1_TBTTPRE_MASK __BITS(23,8)
#define ATW_TBTTPRE_MASK __BITS(25, 10)
#define ATW_TOFS1_TBTTOFS_MASK __BITS(7,0)
#define ATW_IFST_SLOT_MASK __BITS(27,23)
#define ATW_IFST_SIFS_MASK __BITS(22,15)
#define ATW_IFST_DIFS_MASK __BITS(14,9)
#define ATW_IFST_EIFS_MASK __BITS(8,0)
#define ATW_RSPT_MART_MASK __BITS(31,16)
#define ATW_RSPT_MIRT_MASK __BITS(15,8)
#define ATW_RSPT_TSFTOFST_MASK __BITS(7,0)
#define ATW_WEPCTL_WEPENABLE __BIT(31)
#define ATW_WEPCTL_AUTOSWITCH __BIT(30)
#define ATW_WEPCTL_CURTBL __BIT(29)
#define ATW_WEPCTL_WR __BIT(28)
#define ATW_WEPCTL_RD __BIT(27)
#define ATW_WEPCTL_WEPRXBYP __BIT(25)
#define ATW_WEPCTL_SHKEY __BIT(24)
#define ATW_WEPCTL_UNKNOWN0 __BIT(23)
#define ATW_WEPCTL_TBLADD_MASK __BITS(8,0)
#define ATW_WEP_ENABLED __BIT(7)
#define ATW_WEP_104BIT __BIT(6)
#define ATW_WESK_DATA_MASK __BITS(15,0)
#define ATW_WEPCNT_WIEC_MASK __BITS(15,0)
#define ATW_MACTEST_FORCE_IV __BIT(23)
#define ATW_MACTEST_FORCE_KEYID __BIT(22)
#define ATW_MACTEST_KEYID_MASK __BITS(21,20)
#define ATW_MACTEST_MMI_USETXCLK __BIT(11)
#define ATW_FER_INTR __BIT(15)
#define ATW_FER_GWAKE __BIT(4)
#define ATW_FEMR_INTR_EN __BIT(15)
#define ATW_FEMR_WAKEUP_EN __BIT(14)
#define ATW_FEMR_GWAKE_EN __BIT(4)
#define ATW_FPSR_INTR_STATUS __BIT(15)
#define ATW_FPSR_WAKEUP_STATUS __BIT(4)
#define ATW_FFER_INTA_FORCE __BIT(15)
#define ATW_FFER_GWAKE_FORCE __BIT(4)
#define ATW_SR_CLASS_CODE (0x00/2)
#define ATW_SR_FORMAT_VERSION (0x02/2)
#define ATW_SR_MAJOR_MASK __BITS(7, 0)
#define ATW_SR_MINOR_MASK __BITS(15,8)
#define ATW_SR_MAC00 (0x08/2)
#define ATW_SR_MAC01 (0x0A/2)
#define ATW_SR_MAC10 (0x0C/2)
#define ATW_SR_CSR20 (0x16/2)
#define ATW_SR_ANT_MASK __BITS(12, 10)
#define ATW_SR_PWRSCALE_MASK __BITS(9, 8)
#define ATW_SR_CLKSAVE_MASK __BITS(7, 6)
#define ATW_SR_RFTYPE_MASK __BITS(5, 3)
#define ATW_SR_BBPTYPE_MASK __BITS(2, 0)
#define ATW_SR_CR28_CR03 (0x18/2)
#define ATW_SR_CR28_MASK __BITS(15,8)
#define ATW_SR_CR03_MASK __BITS(7, 0)
#define ATW_SR_CTRY_CR29 (0x1A/2)
#define ATW_SR_CTRY_MASK __BITS(15,8)
#define COUNTRY_FCC 0
#define COUNTRY_IC 1
#define COUNTRY_ETSI 2
#define COUNTRY_SPAIN 3
#define COUNTRY_FRANCE 4
#define COUNTRY_MMK 5
#define COUNTRY_MMK2 6
#define ATW_SR_CR29_MASK __BITS(7, 0)
#define ATW_SR_PCI_DEVICE (0x20/2)
#define ATW_SR_PCI_VENDOR (0x22/2)
#define ATW_SR_SUB_DEVICE (0x24/2)
#define ATW_SR_SUB_VENDOR (0x26/2)
#define ATW_SR_CR15 (0x28/2)
#define ATW_SR_LOCISPTR (0x2A/2)
#define ATW_SR_HICISPTR (0x2C/2)
#define ATW_SR_CSR18 (0x2E/2)
#define ATW_SR_D0_D1_PWR (0x40/2)
#define ATW_SR_D2_D3_PWR (0x42/2)
#define ATW_SR_CIS_WORDS (0x52/2)
#define ATW_SR_TXPOWER(chnl) (0x54/2 + ((chnl) - 1)/2)
#define ATW_SR_LPF_CUTOFF(chnl) (0x62/2 + ((chnl) - 1)/2)
#define ATW_SR_LNA_GS_THRESH(chnl) (0x70/2 + ((chnl) - 1)/2)
#define ATW_SR_CHECKSUM (0x7e/2)
#define ATW_SR_CIS (0x80/2)
struct atw_txdesc {
volatile uint32_t at_ctl;
#define at_stat at_ctl
volatile uint32_t at_flags;
volatile uint32_t at_buf1;
volatile uint32_t at_buf2;
} __packed __aligned(4);
#define ATW_TXCTL_OWN __BIT(31)
#define ATW_TXCTL_DONE __BIT(30)
#define ATW_TXCTL_TXDR_MASK __BITS(27,20)
#define ATW_TXCTL_TL_MASK __BITS(19,0)
#define ATW_TXSTAT_OWN ATW_TXCTL_OWN
#define ATW_TXSTAT_DONE ATW_TXCTL_DONE
#define ATW_TXSTAT_ES __BIT(29)
#define ATW_TXSTAT_TLT __BIT(28)
#define ATW_TXSTAT_TRT __BIT(27)
#define ATW_TXSTAT_TUF __BIT(26)
#define ATW_TXSTAT_TRO __BIT(25)
#define ATW_TXSTAT_SOFBR __BIT(24)
#define ATW_TXSTAT_ARC_MASK __BITS(11,0)
#define ATW_TXSTAT_ERRMASK (ATW_TXSTAT_TUF | ATW_TXSTAT_TLT | \
ATW_TXSTAT_TRT | ATW_TXSTAT_TRO | \
ATW_TXSTAT_SOFBR)
#define ATW_TXSTAT_FMT "\20\31ATW_TXSTAT_SOFBR\32ATW_TXSTAT_TRO" \
"\33ATW_TXSTAT_TUF\34ATW_TXSTAT_TRT\35ATW_TXSTAT_TLT"
#define ATW_TXFLAG_IC __BIT(31)
#define ATW_TXFLAG_LS __BIT(30)
#define ATW_TXFLAG_FS __BIT(29)
#define ATW_TXFLAG_TER __BIT(25)
#define ATW_TXFLAG_TCH __BIT(24)
#define ATW_TXFLAG_TBS2_MASK __BITS(23,12)
#define ATW_TXFLAG_TBS1_MASK __BITS(11,0)
struct atw_rxdesc {
volatile uint32_t ar_stat;
volatile uint32_t ar_ctlrssi;
volatile uint32_t ar_buf1;
volatile uint32_t ar_buf2;
} __packed __aligned(4);
#define ATW_RXCTL_RER __BIT(25)
#define ATW_RXCTL_RCH __BIT(24)
#define ATW_RXCTL_RBS2_MASK __BITS(23,12)
#define ATW_RXCTL_RBS1_MASK __BITS(11,0)
#define ATW_RXSTAT_OWN __BIT(31)
#define ATW_RXSTAT_ES __BIT(30)
#define ATW_RXSTAT_SQL __BIT(29)
#define ATW_RXSTAT_DE __BIT(28)
#define ATW_RXSTAT_FS __BIT(27)
#define ATW_RXSTAT_LS __BIT(26)
#define ATW_RXSTAT_PCF __BIT(25)
#define ATW_RXSTAT_SFDE __BIT(24)
#define ATW_RXSTAT_SIGE __BIT(23)
#define ATW_RXSTAT_CRC16E __BIT(22)
#define ATW_RXSTAT_RXTOE __BIT(21)
#define ATW_RXSTAT_CRC32E __BIT(20)
#define ATW_RXSTAT_ICVE __BIT(19)
#define ATW_RXSTAT_DA1 __BIT(17)
#define ATW_RXSTAT_DA0 __BIT(16)
#define ATW_RXSTAT_RXDR_MASK __BITS(15,12)
#define ATW_RXSTAT_FL_MASK __BITS(11,0)
#define ATW_SRAM_ADDR_INDIVL_KEY 0x0
#define ATW_SRAM_ADDR_SHARED_KEY (0x160 * 2)
#define ATW_SRAM_ADDR_SSID (0x180 * 2)
#define ATW_SRAM_ADDR_SUPRATES (0x191 * 2)
#define ATW_SRAM_MAXSIZE (0x200 * 2)
#define ATW_SRAM_A_SIZE ATW_SRAM_MAXSIZE
#define ATW_SRAM_B_SIZE (0x1c0 * 2)