1*d2cfaccaSjsg /* $OpenBSD: atwreg.h,v 1.7 2009/08/16 18:03:48 jsg Exp $ */ 2a98accbeSmillert /* $NetBSD: atwreg.h,v 1.10 2004/07/23 05:01:29 dyoung Exp $ */ 33475e505Smillert 43475e505Smillert /* 53475e505Smillert * Copyright (c) 2003 The NetBSD Foundation, Inc. All rights reserved. 63475e505Smillert * 73475e505Smillert * This code is derived from software contributed to The NetBSD Foundation 83475e505Smillert * by David Young. 93475e505Smillert * 103475e505Smillert * Redistribution and use in source and binary forms, with or without 113475e505Smillert * modification, are permitted provided that the following conditions 123475e505Smillert * are met: 133475e505Smillert * 1. Redistributions of source code must retain the above copyright 143475e505Smillert * notice, this list of conditions and the following disclaimer. 153475e505Smillert * 2. Redistributions in binary form must reproduce the above copyright 163475e505Smillert * notice, this list of conditions and the following disclaimer in the 173475e505Smillert * documentation and/or other materials provided with the distribution. 183475e505Smillert * 193475e505Smillert * THIS SOFTWARE IS PROVIDED BY David Young AND CONTRIBUTORS ``AS IS'' AND 203475e505Smillert * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 213475e505Smillert * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 223475e505Smillert * ARE DISCLAIMED. IN NO EVENT SHALL David Young 233475e505Smillert * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 243475e505Smillert * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 253475e505Smillert * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 263475e505Smillert * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 273475e505Smillert * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 283475e505Smillert * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 293475e505Smillert * THE POSSIBILITY OF SUCH DAMAGE. 303475e505Smillert */ 313475e505Smillert 323475e505Smillert /* glossary */ 333475e505Smillert 343475e505Smillert /* DTIM Delivery Traffic Indication Map, sent by AP 353475e505Smillert * ATIM Ad Hoc Traffic Indication Map 363475e505Smillert * TU 1024 microseconds 373475e505Smillert * TSF time synchronization function 383475e505Smillert * TBTT target beacon transmission time 393475e505Smillert * DIFS distributed inter-frame space 403475e505Smillert * SIFS short inter-frame space 413475e505Smillert * EIFS extended inter-frame space 423475e505Smillert */ 433475e505Smillert 443475e505Smillert /* Macros for bit twiddling. */ 453475e505Smillert 463475e505Smillert #ifndef _BIT_TWIDDLE 473475e505Smillert #define _BIT_TWIDDLE 483475e505Smillert 493475e505Smillert /* find least significant bit that is set */ 503475e505Smillert #define LOWEST_SET_BIT(x) ((((x) - 1) & (x)) ^ (x)) 513475e505Smillert 523475e505Smillert /* for x a power of two and p a non-negative integer, is x a greater power than 2**p? */ 533475e505Smillert #define GTEQ_POWER(x, p) (((u_long)(x) >> (p)) != 0) 543475e505Smillert 553475e505Smillert #define MASK_TO_SHIFT2(m) (GTEQ_POWER(LOWEST_SET_BIT((m)), 1) ? 1 : 0) 563475e505Smillert 573475e505Smillert #define MASK_TO_SHIFT4(m) \ 583475e505Smillert (GTEQ_POWER(LOWEST_SET_BIT((m)), 2) \ 593475e505Smillert ? 2 + MASK_TO_SHIFT2((m) >> 2) \ 603475e505Smillert : MASK_TO_SHIFT2((m))) 613475e505Smillert 623475e505Smillert #define MASK_TO_SHIFT8(m) \ 633475e505Smillert (GTEQ_POWER(LOWEST_SET_BIT((m)), 4) \ 643475e505Smillert ? 4 + MASK_TO_SHIFT4((m) >> 4) \ 653475e505Smillert : MASK_TO_SHIFT4((m))) 663475e505Smillert 673475e505Smillert #define MASK_TO_SHIFT16(m) \ 683475e505Smillert (GTEQ_POWER(LOWEST_SET_BIT((m)), 8) \ 693475e505Smillert ? 8 + MASK_TO_SHIFT8((m) >> 8) \ 703475e505Smillert : MASK_TO_SHIFT8((m))) 713475e505Smillert 723475e505Smillert #define MASK_TO_SHIFT(m) \ 733475e505Smillert (GTEQ_POWER(LOWEST_SET_BIT((m)), 16) \ 743475e505Smillert ? 16 + MASK_TO_SHIFT16((m) >> 16) \ 753475e505Smillert : MASK_TO_SHIFT16((m))) 763475e505Smillert 773475e505Smillert #define MASK_AND_RSHIFT(x, mask) (((x) & (mask)) >> MASK_TO_SHIFT(mask)) 783475e505Smillert #define LSHIFT(x, mask) ((x) << MASK_TO_SHIFT(mask)) 793475e505Smillert #define MASK_AND_REPLACE(reg, val, mask) ((reg & ~mask) | LSHIFT(val, mask)) 803475e505Smillert #define PRESHIFT(m) MASK_AND_RSHIFT((m), (m)) 813475e505Smillert 823475e505Smillert #endif /* _BIT_TWIDDLE */ 833475e505Smillert 843475e505Smillert /* ADM8211 Host Control and Status Registers */ 853475e505Smillert 863475e505Smillert #define ATW_PAR 0x00 /* PCI access */ 873475e505Smillert #define ATW_FRCTL 0x04 /* Frame control */ 883475e505Smillert #define ATW_TDR 0x08 /* Transmit demand */ 893475e505Smillert #define ATW_WTDP 0x0C /* Current transmit descriptor pointer */ 903475e505Smillert #define ATW_RDR 0x10 /* Receive demand */ 913475e505Smillert #define ATW_WRDP 0x14 /* Current receive descriptor pointer */ 923475e505Smillert #define ATW_RDB 0x18 /* Receive descriptor base address */ 933475e505Smillert #define ATW_CSR3A 0x1C /* Unused (on ADM8211A) */ 943475e505Smillert #define ATW_C_TDBH 0x1C /* Transmit descriptor base address, 953475e505Smillert * high-priority packet 963475e505Smillert */ 973475e505Smillert #define ATW_TDBD 0x20 /* Transmit descriptor base address, DCF */ 983475e505Smillert #define ATW_TDBP 0x24 /* Transmit descriptor base address, PCF */ 993475e505Smillert #define ATW_STSR 0x28 /* Status */ 1003475e505Smillert #define ATW_CSR5A 0x2C /* Unused */ 1013475e505Smillert #define ATW_C_TDBB 0x2C /* Transmit descriptor base address, buffered 1023475e505Smillert * broadcast/multicast packet 1033475e505Smillert */ 1043475e505Smillert #define ATW_NAR 0x30 /* Network access */ 1053475e505Smillert #define ATW_CSR6A 0x34 /* Unused */ 1063475e505Smillert #define ATW_IER 0x38 /* Interrupt enable */ 1073475e505Smillert #define ATW_CSR7A 0x3C 1083475e505Smillert #define ATW_LPC 0x40 /* Lost packet counter */ 1093475e505Smillert #define ATW_TEST1 0x44 /* Test register 1 */ 1103475e505Smillert #define ATW_SPR 0x48 /* Serial port */ 1113475e505Smillert #define ATW_TEST0 0x4C /* Test register 0 */ 1123475e505Smillert #define ATW_WCSR 0x50 /* Wake-up control/status */ 1133475e505Smillert #define ATW_WPDR 0x54 /* Wake-up pattern data */ 1143475e505Smillert #define ATW_GPTMR 0x58 /* General purpose timer */ 1153475e505Smillert #define ATW_GPIO 0x5C /* GPIO[5:0] configuration and control */ 1163475e505Smillert #define ATW_BBPCTL 0x60 /* BBP control port */ 1173475e505Smillert #define ATW_SYNCTL 0x64 /* synthesizer control port */ 1183475e505Smillert #define ATW_PLCPHD 0x68 /* PLCP header setting */ 1193475e505Smillert #define ATW_MMIWADDR 0x6C /* MMI write address */ 1203475e505Smillert #define ATW_MMIRADDR1 0x70 /* MMI read address 1 */ 1213475e505Smillert #define ATW_MMIRADDR2 0x74 /* MMI read address 2 */ 1223475e505Smillert #define ATW_TXBR 0x78 /* Transmit burst counter */ 1233475e505Smillert #define ATW_CSR15A 0x7C /* Unused */ 1243475e505Smillert #define ATW_ALCSTAT 0x80 /* ALC statistics */ 1253475e505Smillert #define ATW_TOFS2 0x84 /* Timing offset parameter 2, 16b */ 1263475e505Smillert #define ATW_CMDR 0x88 /* Command */ 1273475e505Smillert #define ATW_PCIC 0x8C /* PCI bus performance counter */ 1283475e505Smillert #define ATW_PMCSR 0x90 /* Power management command and status */ 1293475e505Smillert #define ATW_PAR0 0x94 /* Local MAC address register 0, 32b */ 1303475e505Smillert #define ATW_PAR1 0x98 /* Local MAC address register 1, 16b */ 1313475e505Smillert #define ATW_MAR0 0x9C /* Multicast address hash table register 0 */ 1323475e505Smillert #define ATW_MAR1 0xA0 /* Multicast address hash table register 1 */ 1333475e505Smillert #define ATW_ATIMDA0 0xA4 /* Ad Hoc Traffic Indication Map (ATIM) 1343475e505Smillert * frame DA, byte[3:0] 1353475e505Smillert */ 1363475e505Smillert #define ATW_ABDA1 0xA8 /* BSSID address byte[5:4]; 1373475e505Smillert * ATIM frame DA byte[5:4] 1383475e505Smillert */ 1393475e505Smillert #define ATW_BSSID0 0xAC /* BSSID address byte[3:0] */ 1403475e505Smillert #define ATW_TXLMT 0xB0 /* WLAN retry limit, 8b; 1413475e505Smillert * Max TX MSDU lifetime, 16b 1423475e505Smillert */ 1433475e505Smillert #define ATW_MIBCNT 0xB4 /* RTS/ACK/FCS MIB count, 32b */ 1443475e505Smillert #define ATW_BCNT 0xB8 /* Beacon transmission time, 32b */ 1453475e505Smillert #define ATW_TSFTH 0xBC /* TSFT[63:32], 32b */ 1463475e505Smillert #define ATW_TSC 0xC0 /* TSFT[39:32] down count value */ 1473475e505Smillert #define ATW_SYNRF 0xC4 /* SYN RF IF direct control */ 1483475e505Smillert #define ATW_BPLI 0xC8 /* Beacon interval, 16b. 1493475e505Smillert * STA listen interval, 16b. 1503475e505Smillert */ 1513475e505Smillert #define ATW_CAP0 0xCC /* Current channel, 4b. RCVDTIM, 1b. */ 1523475e505Smillert #define ATW_CAP1 0xD0 /* Capability information, 16b. 1533475e505Smillert * ATIM window, 1b. 1543475e505Smillert */ 1553475e505Smillert #define ATW_RMD 0xD4 /* RX max reception duration, 16b */ 1563475e505Smillert #define ATW_CFPP 0xD8 /* CFP parameter, 32b */ 1573475e505Smillert #define ATW_TOFS0 0xDC /* Timing offset parameter 0, 28b */ 1583475e505Smillert #define ATW_TOFS1 0xE0 /* Timing offset parameter 1, 24b */ 1593475e505Smillert #define ATW_IFST 0xE4 /* IFS timing parameter 1, 32b */ 1603475e505Smillert #define ATW_RSPT 0xE8 /* Response time, 24b */ 1613475e505Smillert #define ATW_TSFTL 0xEC /* TSFT[31:0], 32b */ 1623475e505Smillert #define ATW_WEPCTL 0xF0 /* WEP control */ 1633475e505Smillert #define ATW_WESK 0xF4 /* Write entry for shared/individual key */ 1643475e505Smillert #define ATW_WEPCNT 0xF8 /* WEP count */ 1653475e505Smillert #define ATW_MACTEST 0xFC 1663475e505Smillert 1673475e505Smillert #define ATW_FER 0x100 /* Function event */ 1683475e505Smillert #define ATW_FEMR 0x104 /* Function event mask */ 1693475e505Smillert #define ATW_FPSR 0x108 /* Function present state */ 1703475e505Smillert #define ATW_FFER 0x10C /* Function force event */ 1713475e505Smillert 1723475e505Smillert 173*d2cfaccaSjsg #define ATW_PAR_MWIE (1<<24) /* memory write and invalidate 1743475e505Smillert * enable 1753475e505Smillert */ 176*d2cfaccaSjsg #define ATW_PAR_MRLE (1<<23) /* memory read line enable */ 177*d2cfaccaSjsg #define ATW_PAR_MRME (1<<21) /* memory read multiple 1783475e505Smillert * enable 1793475e505Smillert */ 180c33247eeSjsg #define ATW_PAR_RAP_MASK 0x60000 /* receive auto-polling in 1813475e505Smillert * receive suspended state 1823475e505Smillert */ 183c33247eeSjsg #define ATW_PAR_CAL_MASK 0xc000 /* cache alignment */ 1843475e505Smillert #define ATW_PAR_CAL_PBL 0x0 1853475e505Smillert /* min(8 DW, PBL) */ 1863475e505Smillert #define ATW_PAR_CAL_8DW LSHIFT(0x1, ATW_PAR_CAL_MASK) 1873475e505Smillert /* min(16 DW, PBL) */ 1883475e505Smillert #define ATW_PAR_CAL_16DW LSHIFT(0x2, ATW_PAR_CAL_MASK) 1893475e505Smillert /* min(32 DW, PBL) */ 1903475e505Smillert #define ATW_PAR_CAL_32DW LSHIFT(0x3, ATW_PAR_CAL_MASK) 191c33247eeSjsg #define ATW_PAR_PBL_MASK 0x3f00 /* programmable burst length */ 1923475e505Smillert #define ATW_PAR_PBL_UNLIMITED 0x0 1933475e505Smillert #define ATW_PAR_PBL_1DW LSHIFT(0x1, ATW_PAR_PBL_MASK) 1943475e505Smillert #define ATW_PAR_PBL_2DW LSHIFT(0x2, ATW_PAR_PBL_MASK) 1953475e505Smillert #define ATW_PAR_PBL_4DW LSHIFT(0x4, ATW_PAR_PBL_MASK) 1963475e505Smillert #define ATW_PAR_PBL_8DW LSHIFT(0x8, ATW_PAR_PBL_MASK) 1973475e505Smillert #define ATW_PAR_PBL_16DW LSHIFT(0x16, ATW_PAR_PBL_MASK) 1983475e505Smillert #define ATW_PAR_PBL_32DW LSHIFT(0x32, ATW_PAR_PBL_MASK) 199*d2cfaccaSjsg #define ATW_PAR_BLE (1<<7) /* big/little endian selection */ 200c33247eeSjsg #define ATW_PAR_DSL_MASK 0x7c /* descriptor skip length */ 201*d2cfaccaSjsg #define ATW_PAR_BAR (1<<1) /* bus arbitration */ 202*d2cfaccaSjsg #define ATW_PAR_SWR (1<<0) /* software reset */ 2033475e505Smillert 204*d2cfaccaSjsg #define ATW_FRCTL_PWRMGMT (1<<31) /* power management */ 205c33247eeSjsg #define ATW_FRCTL_VER_MASK 0x60000000 /* protocol version */ 206*d2cfaccaSjsg #define ATW_FRCTL_ORDER (1<<28) /* order bit */ 207*d2cfaccaSjsg #define ATW_FRCTL_MAXPSP (1<<27) /* maximum power saving */ 208*d2cfaccaSjsg #define ATW_C_FRCTL_PRSP (1<<26) /* 1: driver sends probe 2093475e505Smillert * response 2103475e505Smillert * 0: ASIC sends prresp 2113475e505Smillert */ 212*d2cfaccaSjsg #define ATW_C_FRCTL_DRVBCON (1<<25) /* 1: driver sends beacons 2133475e505Smillert * 0: ASIC sends beacons 2143475e505Smillert */ 215*d2cfaccaSjsg #define ATW_C_FRCTL_DRVLINKCTRL (1<<24) /* 1: driver controls link LED 2163475e505Smillert * 0: ASIC controls link LED 2173475e505Smillert */ 218*d2cfaccaSjsg #define ATW_C_FRCTL_DRVLINKON (1<<23) /* 1: turn on link LED 2193475e505Smillert * 0: turn off link LED 2203475e505Smillert */ 221*d2cfaccaSjsg #define ATW_C_FRCTL_CTX_DATA (1<<22) /* 0: set by CSR28 2223475e505Smillert * 1: random 2233475e505Smillert */ 224*d2cfaccaSjsg #define ATW_C_FRCTL_RSVFRM (1<<21) /* 1: receive "reserved" 2253475e505Smillert * frames, 0: ignore 2263475e505Smillert * reserved frames 2273475e505Smillert */ 228*d2cfaccaSjsg #define ATW_C_FRCTL_CFEND (1<<19) /* write to send CF_END, 2293475e505Smillert * ADM8211C/CR clears 2303475e505Smillert */ 231*d2cfaccaSjsg #define ATW_FRCTL_DOZEFRM (1<<18) /* select pre-sleep frame */ 232*d2cfaccaSjsg #define ATW_FRCTL_PSAWAKE (1<<17) /* MAC is awake (?) */ 233*d2cfaccaSjsg #define ATW_FRCTL_PSMODE (1<<16) /* MAC is power-saving (?) */ 234c33247eeSjsg #define ATW_FRCTL_AID_MASK 0xffff /* STA Association ID */ 2353475e505Smillert 236*d2cfaccaSjsg #define ATW_INTR_PCF (1<<31) /* started/ended CFP */ 237*d2cfaccaSjsg #define ATW_INTR_BCNTC (1<<30) /* transmitted IBSS beacon */ 238*d2cfaccaSjsg #define ATW_INTR_GPINT (1<<29) /* GPIO interrupt */ 239*d2cfaccaSjsg #define ATW_INTR_LINKOFF (1<<28) /* lost ATW_WCSR_BLN beacons */ 240*d2cfaccaSjsg #define ATW_INTR_ATIMTC (1<<27) /* transmitted ATIM */ 241*d2cfaccaSjsg #define ATW_INTR_TSFTF (1<<26) /* TSFT out of range */ 242*d2cfaccaSjsg #define ATW_INTR_TSCZ (1<<25) /* TSC countdown expired */ 243*d2cfaccaSjsg #define ATW_INTR_LINKON (1<<24) /* matched SSID, BSSID */ 244*d2cfaccaSjsg #define ATW_INTR_SQL (1<<23) /* Marvel signal quality */ 245*d2cfaccaSjsg #define ATW_INTR_WEPTD (1<<22) /* switched WEP table */ 246*d2cfaccaSjsg #define ATW_INTR_ATIME (1<<21) /* ended ATIM window */ 247*d2cfaccaSjsg #define ATW_INTR_TBTT (1<<20) /* (TBTT) Target Beacon TX Time 2483475e505Smillert * passed 2493475e505Smillert */ 250*d2cfaccaSjsg #define ATW_INTR_NISS (1<<16) /* normal interrupt status 2513475e505Smillert * summary: any of 31, 30, 27, 2523475e505Smillert * 24, 14, 12, 6, 2, 0. 2533475e505Smillert */ 254*d2cfaccaSjsg #define ATW_INTR_AISS (1<<15) /* abnormal interrupt status 2553475e505Smillert * summary: any of 29, 28, 26, 2563475e505Smillert * 25, 23, 22, 13, 11, 8, 7, 5, 2573475e505Smillert * 4, 3, 1. 2583475e505Smillert */ 259*d2cfaccaSjsg #define ATW_INTR_TEIS (1<<14) /* transmit early interrupt 2603475e505Smillert * status: moved TX packet to 2613475e505Smillert * FIFO 2623475e505Smillert */ 263*d2cfaccaSjsg #define ATW_INTR_FBE (1<<13) /* fatal bus error */ 264*d2cfaccaSjsg #define ATW_INTR_REIS (1<<12) /* receive early interrupt 2653475e505Smillert * status: RX packet filled 2663475e505Smillert * its first descriptor 2673475e505Smillert */ 268*d2cfaccaSjsg #define ATW_INTR_GPTT (1<<11) /* general purpose timer expired */ 269*d2cfaccaSjsg #define ATW_INTR_RPS (1<<8) /* stopped receive process */ 270*d2cfaccaSjsg #define ATW_INTR_RDU (1<<7) /* receive descriptor 2713475e505Smillert * unavailable 2723475e505Smillert */ 273*d2cfaccaSjsg #define ATW_INTR_RCI (1<<6) /* completed packet reception */ 274*d2cfaccaSjsg #define ATW_INTR_TUF (1<<5) /* transmit underflow */ 275*d2cfaccaSjsg #define ATW_INTR_TRT (1<<4) /* transmit retry count 2763475e505Smillert * expired 2773475e505Smillert */ 278*d2cfaccaSjsg #define ATW_INTR_TLT (1<<3) /* transmit lifetime exceeded */ 279*d2cfaccaSjsg #define ATW_INTR_TDU (1<<2) /* transmit descriptor 2803475e505Smillert * unavailable 2813475e505Smillert */ 282*d2cfaccaSjsg #define ATW_INTR_TPS (1<<1) /* stopped transmit process */ 283*d2cfaccaSjsg #define ATW_INTR_TCI (1<<0) /* completed transmit */ 284*d2cfaccaSjsg #define ATW_NAR_TXCF (1<<31) /* stop process on TX failure */ 285*d2cfaccaSjsg #define ATW_NAR_HF (1<<30) /* flush TX FIFO to host (?) */ 286*d2cfaccaSjsg #define ATW_NAR_UTR (1<<29) /* select retry count source */ 287*d2cfaccaSjsg #define ATW_NAR_PCF (1<<28) /* use one/both transmit 2883475e505Smillert * descriptor base addresses 2893475e505Smillert */ 290*d2cfaccaSjsg #define ATW_NAR_CFP (1<<27) /* indicate more TX data to 2913475e505Smillert * point coordinator 2923475e505Smillert */ 293*d2cfaccaSjsg #define ATW_C_NAR_APSTA (1<<26) /* 0: STA mode 2943475e505Smillert * 1: AP mode 2953475e505Smillert */ 296*d2cfaccaSjsg #define ATW_C_NAR_TDBBE (1<<25) /* 0: disable TDBB 2973475e505Smillert * 1: enable TDBB 2983475e505Smillert */ 299*d2cfaccaSjsg #define ATW_C_NAR_TDBHE (1<<24) /* 0: disable TDBH 3003475e505Smillert * 1: enable TDBH 3013475e505Smillert */ 302*d2cfaccaSjsg #define ATW_C_NAR_TDBHT (1<<23) /* write 1 to make ASIC 3033475e505Smillert * poll TDBH once; ASIC clears 3043475e505Smillert */ 305*d2cfaccaSjsg #define ATW_NAR_SF (1<<21) /* store and forward: ignore 3063475e505Smillert * TX threshold 3073475e505Smillert */ 308c33247eeSjsg #define ATW_NAR_TR_MASK 0xc000 /* TX threshold */ 3093475e505Smillert #define ATW_NAR_TR_L64 LSHIFT(0x0, ATW_NAR_TR_MASK) 3103475e505Smillert #define ATW_NAR_TR_L160 LSHIFT(0x2, ATW_NAR_TR_MASK) 3113475e505Smillert #define ATW_NAR_TR_L192 LSHIFT(0x3, ATW_NAR_TR_MASK) 3123475e505Smillert #define ATW_NAR_TR_H96 LSHIFT(0x0, ATW_NAR_TR_MASK) 3133475e505Smillert #define ATW_NAR_TR_H288 LSHIFT(0x2, ATW_NAR_TR_MASK) 3143475e505Smillert #define ATW_NAR_TR_H544 LSHIFT(0x3, ATW_NAR_TR_MASK) 315*d2cfaccaSjsg #define ATW_NAR_ST (1<<13) /* start/stop transmit */ 316c33247eeSjsg #define ATW_NAR_OM_MASK 0xc00 /* operating mode */ 3173475e505Smillert #define ATW_NAR_OM_NORMAL 0x0 3183475e505Smillert #define ATW_NAR_OM_LOOPBACK LSHIFT(0x1, ATW_NAR_OM_MASK) 319*d2cfaccaSjsg #define ATW_NAR_MM (1<<7) /* RX any multicast */ 320*d2cfaccaSjsg #define ATW_NAR_PR (1<<6) /* promiscuous mode */ 321*d2cfaccaSjsg #define ATW_NAR_EA (1<<5) /* match ad hoc packets (?) */ 322*d2cfaccaSjsg #define ATW_NAR_DISPCF (1<<4) /* 1: PCF *not* supported 3233475e505Smillert * 0: PCF supported 3243475e505Smillert */ 325*d2cfaccaSjsg #define ATW_NAR_PB (1<<3) /* pass bad packets */ 326*d2cfaccaSjsg #define ATW_NAR_STPDMA (1<<2) /* stop DMA, abort packet */ 327*d2cfaccaSjsg #define ATW_NAR_SR (1<<1) /* start/stop receive */ 328*d2cfaccaSjsg #define ATW_NAR_CTX (1<<0) /* continuous TX mode */ 3293475e505Smillert 3303475e505Smillert /* IER bits are identical to STSR bits. Use ATW_INTR_*. */ 3313475e505Smillert #if 0 332*d2cfaccaSjsg #define ATW_IER_NIE (1<<16) /* normal interrupt enable */ 333*d2cfaccaSjsg #define ATW_IER_AIE (1<<15) /* abnormal interrupt enable */ 3343475e505Smillert /* normal interrupts: combine with ATW_IER_NIE */ 335*d2cfaccaSjsg #define ATW_IER_PCFIE (1<<31) /* STA entered CFP */ 336*d2cfaccaSjsg #define ATW_IER_BCNTCIE (1<<30) /* STA TX'd beacon */ 337*d2cfaccaSjsg #define ATW_IER_ATIMTCIE (1<<27) /* transmitted ATIM */ 338*d2cfaccaSjsg #define ATW_IER_LINKONIE (1<<24) /* matched beacon */ 339*d2cfaccaSjsg #define ATW_IER_ATIMIE (1<<21) /* ended ATIM window */ 340*d2cfaccaSjsg #define ATW_IER_TBTTIE (1<<20) /* TBTT */ 341*d2cfaccaSjsg #define ATW_IER_TEIE (1<<14) /* moved TX packet to FIFO */ 342*d2cfaccaSjsg #define ATW_IER_REIE (1<<12) /* RX packet filled its first 3433475e505Smillert * descriptor 3443475e505Smillert */ 345*d2cfaccaSjsg #define ATW_IER_RCIE (1<<6) /* completed RX */ 346*d2cfaccaSjsg #define ATW_IER_TDUIE (1<<2) /* transmit descriptor 3473475e505Smillert * unavailable 3483475e505Smillert */ 349*d2cfaccaSjsg #define ATW_IER_TCIE (1<<0) /* completed TX */ 3503475e505Smillert /* abnormal interrupts: combine with ATW_IER_AIE */ 351*d2cfaccaSjsg #define ATW_IER_GPIE (1<<29) /* GPIO interrupt */ 352*d2cfaccaSjsg #define ATW_IER_LINKOFFIE (1<<28) /* lost beacon */ 353*d2cfaccaSjsg #define ATW_IER_TSFTFIE (1<<26) /* TSFT out of range */ 354*d2cfaccaSjsg #define ATW_IER_TSCIE (1<<25) /* TSC countdown expired */ 355*d2cfaccaSjsg #define ATW_IER_SQLIE (1<<23) /* signal quality */ 356*d2cfaccaSjsg #define ATW_IER_WEPIE (1<<22) /* finished WEP table switch */ 357*d2cfaccaSjsg #define ATW_IER_FBEIE (1<<13) /* fatal bus error */ 358*d2cfaccaSjsg #define ATW_IER_GPTIE (1<<11) /* general purpose timer expired */ 359*d2cfaccaSjsg #define ATW_IER_RPSIE (1<<8) /* stopped receive process */ 360*d2cfaccaSjsg #define ATW_IER_RUIE (1<<7) /* receive descriptor unavailable */ 361*d2cfaccaSjsg #define ATW_IER_TUIE (1<<5) /* transmit underflow */ 362*d2cfaccaSjsg #define ATW_IER_TRTIE (1<<4) /* exceeded transmit retry count */ 363*d2cfaccaSjsg #define ATW_IER_TLTTIE (1<<3) /* transmit lifetime exceeded */ 364*d2cfaccaSjsg #define ATW_IER_TPSIE (1<<1) /* stopped transmit process */ 3653475e505Smillert #endif 3663475e505Smillert 367*d2cfaccaSjsg #define ATW_LPC_LPCO (1<<16) /* lost packet counter overflow */ 368c33247eeSjsg #define ATW_LPC_LPC_MASK 0xffff /* lost packet counter */ 3693475e505Smillert 370*d2cfaccaSjsg #define ATW_TEST1_CONTROL (1<<31) /* "0: read from dxfer_control, 3713475e505Smillert * 1: read from dxfer_state" 3723475e505Smillert */ 373c33247eeSjsg #define ATW_TEST1_DBGREAD_MASK 0x70000000 /* "control of read data, 3743475e505Smillert * debug only" 3753475e505Smillert */ 376c33247eeSjsg #define ATW_TEST1_TXWP_MASK 0xe000000 /* select ATW_WTDP content? */ 3773475e505Smillert #define ATW_TEST1_TXWP_TDBD LSHIFT(0x0, ATW_TEST1_TXWP_MASK) 3783475e505Smillert #define ATW_TEST1_TXWP_TDBH LSHIFT(0x1, ATW_TEST1_TXWP_MASK) 3793475e505Smillert #define ATW_TEST1_TXWP_TDBB LSHIFT(0x2, ATW_TEST1_TXWP_MASK) 3803475e505Smillert #define ATW_TEST1_TXWP_TDBP LSHIFT(0x3, ATW_TEST1_TXWP_MASK) 381c33247eeSjsg #define ATW_TEST1_RSVD0_MASK 0x1ffffc0 /* reserved */ 382c33247eeSjsg #define ATW_TEST1_TESTMODE_MASK 0x30 383a98accbeSmillert /* normal operation */ 384a98accbeSmillert #define ATW_TEST1_TESTMODE_NORMAL LSHIFT(0x0, ATW_TEST1_TESTMODE_MASK) 385a98accbeSmillert /* MAC-only mode */ 386a98accbeSmillert #define ATW_TEST1_TESTMODE_MACONLY LSHIFT(0x1, ATW_TEST1_TESTMODE_MASK) 387a98accbeSmillert /* normal operation */ 388a98accbeSmillert #define ATW_TEST1_TESTMODE_NORMAL2 LSHIFT(0x2, ATW_TEST1_TESTMODE_MASK) 389a98accbeSmillert /* monitor mode */ 390a98accbeSmillert #define ATW_TEST1_TESTMODE_MONITOR LSHIFT(0x3, ATW_TEST1_TESTMODE_MASK) 3913475e505Smillert 392c33247eeSjsg #define ATW_TEST1_DUMP_MASK 0xf /* select dump signal 3933475e505Smillert * from dxfer (huh?) 3943475e505Smillert */ 3953475e505Smillert 396*d2cfaccaSjsg #define ATW_SPR_SRS (1<<11) /* activate SEEPROM access */ 397*d2cfaccaSjsg #define ATW_SPR_SDO (1<<3) /* data out of SEEPROM */ 398*d2cfaccaSjsg #define ATW_SPR_SDI (1<<2) /* data into SEEPROM */ 399*d2cfaccaSjsg #define ATW_SPR_SCLK (1<<1) /* SEEPROM clock */ 400*d2cfaccaSjsg #define ATW_SPR_SCS (1<<0) /* SEEPROM chip select */ 4013475e505Smillert 402c33247eeSjsg #define ATW_TEST0_BE_MASK 0xe0000000 /* Bus error state */ 403c33247eeSjsg #define ATW_TEST0_TS_MASK 0x1c000000 /* Transmit process state */ 4043475e505Smillert 4053475e505Smillert /* Stopped */ 4063475e505Smillert #define ATW_TEST0_TS_STOPPED LSHIFT(0, ATW_TEST0_TS_MASK) 4073475e505Smillert /* Running - fetch transmit descriptor */ 4083475e505Smillert #define ATW_TEST0_TS_FETCH LSHIFT(1, ATW_TEST0_TS_MASK) 4093475e505Smillert /* Running - wait for end of transmission */ 4103475e505Smillert #define ATW_TEST0_TS_WAIT LSHIFT(2, ATW_TEST0_TS_MASK) 4113475e505Smillert /* Running - read buffer from memory and queue into FIFO */ 4123475e505Smillert #define ATW_TEST0_TS_READING LSHIFT(3, ATW_TEST0_TS_MASK) 4133475e505Smillert #define ATW_TEST0_TS_RESERVED1 LSHIFT(4, ATW_TEST0_TS_MASK) 4143475e505Smillert #define ATW_TEST0_TS_RESERVED2 LSHIFT(5, ATW_TEST0_TS_MASK) 4153475e505Smillert /* Suspended */ 4163475e505Smillert #define ATW_TEST0_TS_SUSPENDED LSHIFT(6, ATW_TEST0_TS_MASK) 4173475e505Smillert /* Running - close transmit descriptor */ 4183475e505Smillert #define ATW_TEST0_TS_CLOSE LSHIFT(7, ATW_TEST0_TS_MASK) 4193475e505Smillert 4203475e505Smillert /* ADM8211C/CR registers */ 4213475e505Smillert /* Suspended */ 4223475e505Smillert #define ATW_C_TEST0_TS_SUSPENDED LSHIFT(4, ATW_TEST0_TS_MASK) 4233475e505Smillert /* Descriptor write */ 4243475e505Smillert #define ATW_C_TEST0_TS_CLOSE LSHIFT(5, ATW_TEST0_TS_MASK) 4253475e505Smillert /* Last descriptor write */ 4263475e505Smillert #define ATW_C_TEST0_TS_CLOSELAST LSHIFT(6, ATW_TEST0_TS_MASK) 4273475e505Smillert /* FIFO full */ 4283475e505Smillert #define ATW_C_TEST0_TS_FIFOFULL LSHIFT(7, ATW_TEST0_TS_MASK) 4293475e505Smillert 430c33247eeSjsg #define ATW_TEST0_RS_MASK 0x3800000 /* Receive process state */ 4313475e505Smillert 4323475e505Smillert /* Stopped */ 4333475e505Smillert #define ATW_TEST0_RS_STOPPED LSHIFT(0, ATW_TEST0_RS_MASK) 4343475e505Smillert /* Running - fetch receive descriptor */ 4353475e505Smillert #define ATW_TEST0_RS_FETCH LSHIFT(1, ATW_TEST0_RS_MASK) 4363475e505Smillert /* Running - check for end of receive */ 4373475e505Smillert #define ATW_TEST0_RS_CHECK LSHIFT(2, ATW_TEST0_RS_MASK) 4383475e505Smillert /* Running - wait for packet */ 4393475e505Smillert #define ATW_TEST0_RS_WAIT LSHIFT(3, ATW_TEST0_RS_MASK) 4403475e505Smillert /* Suspended */ 4413475e505Smillert #define ATW_TEST0_RS_SUSPENDED LSHIFT(4, ATW_TEST0_RS_MASK) 4423475e505Smillert /* Running - close receive descriptor */ 4433475e505Smillert #define ATW_TEST0_RS_CLOSE LSHIFT(5, ATW_TEST0_RS_MASK) 4443475e505Smillert /* Running - flush current frame from FIFO */ 4453475e505Smillert #define ATW_TEST0_RS_FLUSH LSHIFT(6, ATW_TEST0_RS_MASK) 4463475e505Smillert /* Running - queue current frame from FIFO into buffer */ 4473475e505Smillert #define ATW_TEST0_RS_QUEUE LSHIFT(7, ATW_TEST0_RS_MASK) 4483475e505Smillert 449*d2cfaccaSjsg #define ATW_TEST0_EPNE (1<<18) /* SEEPROM not detected */ 450*d2cfaccaSjsg #define ATW_TEST0_EPSNM (1<<17) /* SEEPROM bad signature */ 451*d2cfaccaSjsg #define ATW_TEST0_EPTYP_MASK (1<<16) /* SEEPROM type 4523475e505Smillert * 1: 93c66, 4533475e505Smillert * 0: 93c46 4543475e505Smillert */ 4553475e505Smillert #define ATW_TEST0_EPTYP_93c66 ATW_TEST0_EPTYP_MASK 4563475e505Smillert #define ATW_TEST0_EPTYP_93c46 0 457*d2cfaccaSjsg #define ATW_TEST0_EPRLD (1<<15) /* recall SEEPROM (write 1) */ 4583475e505Smillert 459*d2cfaccaSjsg #define ATW_WCSR_CRCT (1<<30) /* CRC-16 type */ 460*d2cfaccaSjsg #define ATW_WCSR_WP1E (1<<29) /* match wake-up pattern 1 */ 461*d2cfaccaSjsg #define ATW_WCSR_WP2E (1<<28) /* match wake-up pattern 2 */ 462*d2cfaccaSjsg #define ATW_WCSR_WP3E (1<<27) /* match wake-up pattern 3 */ 463*d2cfaccaSjsg #define ATW_WCSR_WP4E (1<<26) /* match wake-up pattern 4 */ 464*d2cfaccaSjsg #define ATW_WCSR_WP5E (1<<25) /* match wake-up pattern 5 */ 465c33247eeSjsg #define ATW_WCSR_BLN_MASK 0xe00000 /* lose link after BLN lost 4663475e505Smillert * beacons 4673475e505Smillert */ 468*d2cfaccaSjsg #define ATW_WCSR_TSFTWE (1<<20) /* wake up on TSFT out of 4693475e505Smillert * range 4703475e505Smillert */ 471*d2cfaccaSjsg #define ATW_WCSR_TIMWE (1<<19) /* wake up on TIM */ 472*d2cfaccaSjsg #define ATW_WCSR_ATIMWE (1<<18) /* wake up on ATIM */ 473*d2cfaccaSjsg #define ATW_WCSR_KEYWE (1<<17) /* wake up on key update */ 474*d2cfaccaSjsg #define ATW_WCSR_WFRE (1<<10) /* wake up on wake-up frame */ 475*d2cfaccaSjsg #define ATW_WCSR_MPRE (1<<9) /* wake up on magic packet */ 476*d2cfaccaSjsg #define ATW_WCSR_LSOE (1<<8) /* wake up on link loss */ 4773475e505Smillert /* wake-up reasons correspond to enable bits */ 478*d2cfaccaSjsg #define ATW_WCSR_KEYUP (1<<6) /* */ 479*d2cfaccaSjsg #define ATW_WCSR_TSFTW (1<<5) /* */ 480*d2cfaccaSjsg #define ATW_WCSR_TIMW (1<<4) /* */ 481*d2cfaccaSjsg #define ATW_WCSR_ATIMW (1<<3) /* */ 482*d2cfaccaSjsg #define ATW_WCSR_WFR (1<<2) /* */ 483*d2cfaccaSjsg #define ATW_WCSR_MPR (1<<1) /* */ 484*d2cfaccaSjsg #define ATW_WCSR_LSO (1<<0) /* */ 4853475e505Smillert 486*d2cfaccaSjsg #define ATW_GPTMR_COM_MASK (1<<16) /* continuous operation mode */ 487c33247eeSjsg #define ATW_GPTMR_GTV_MASK 0xffff /* set countdown in 204us ticks */ 4883475e505Smillert 489c33247eeSjsg #define ATW_GPIO_EC1_MASK 0x3000000 /* GPIO1 event configuration */ 490c33247eeSjsg #define ATW_GPIO_LAT_MASK 0x300000 /* input latch */ 491c33247eeSjsg #define ATW_GPIO_INTEN_MASK 0xc0000 /* interrupt enable */ 492c33247eeSjsg #define ATW_GPIO_EN_MASK 0x3f000 /* output enable */ 493c33247eeSjsg #define ATW_GPIO_O_MASK 0xfc0 /* output value */ 494c33247eeSjsg #define ATW_GPIO_I_MASK 0x3f /* pin static input */ 4953475e505Smillert 496*d2cfaccaSjsg #define ATW_BBPCTL_TWI (1<<31) /* Intersil 3-wire interface */ 497c33247eeSjsg #define ATW_BBPCTL_RF3KADDR_MASK 0x7f000000 /* Address for RF3000 */ 4983475e505Smillert #define ATW_BBPCTL_RF3KADDR_ADDR LSHIFT(0x20, ATW_BBPCTL_RF3KADDR_MASK) 499*d2cfaccaSjsg #define ATW_BBPCTL_NEGEDGE_DO (1<<23) /* data-out on negative edge */ 500*d2cfaccaSjsg #define ATW_BBPCTL_NEGEDGE_DI (1<<22) /* data-in on negative edge */ 501*d2cfaccaSjsg #define ATW_BBPCTL_CCA_ACTLO (1<<21) /* CCA low when busy */ 502c33247eeSjsg #define ATW_BBPCTL_TYPE_MASK 0x1c0000 /* BBP type */ 503*d2cfaccaSjsg #define ATW_BBPCTL_WR (1<<17) /* start write; reset on 5043475e505Smillert * completion 5053475e505Smillert */ 506*d2cfaccaSjsg #define ATW_BBPCTL_RD (1<<16) /* start read; reset on 5073475e505Smillert * completion 5083475e505Smillert */ 509c33247eeSjsg #define ATW_BBPCTL_ADDR_MASK 0xff00 /* BBP address */ 510c33247eeSjsg #define ATW_BBPCTL_DATA_MASK 0xff /* BBP data */ 5113475e505Smillert 512*d2cfaccaSjsg #define ATW_SYNCTL_WR (1<<31) /* start write; reset on 5133475e505Smillert * completion 5143475e505Smillert */ 515*d2cfaccaSjsg #define ATW_SYNCTL_RD (1<<30) /* start read; reset on 5163475e505Smillert * completion 5173475e505Smillert */ 518*d2cfaccaSjsg #define ATW_SYNCTL_CS0 (1<<29) /* chip select */ 519*d2cfaccaSjsg #define ATW_SYNCTL_CS1 (1<<28) 520*d2cfaccaSjsg #define ATW_SYNCTL_CAL (1<<27) /* generate RF CAL pulse after 5213475e505Smillert * Rx 5223475e505Smillert */ 523*d2cfaccaSjsg #define ATW_SYNCTL_SELCAL (1<<26) /* RF CAL source, 0: CAL bit, 5243475e505Smillert * 1: MAC; needed by Intersil 5253475e505Smillert * BBP 5263475e505Smillert */ 527*d2cfaccaSjsg #define ATW_C_SYNCTL_MMICE (1<<25) /* ADM8211C/CR define this 5283475e505Smillert * bit. 0: latch data on 5293475e505Smillert * negative edge, 1: positive 5303475e505Smillert * edge. 5313475e505Smillert */ 532c33247eeSjsg #define ATW_SYNCTL_RFTYPE_MASK 0x1c00000 /* RF type */ 533c33247eeSjsg #define ATW_SYNCTL_DATA_MASK 0x3fffff /* synthesizer setting */ 5343475e505Smillert 535c33247eeSjsg #define ATW_PLCPHD_SIGNAL_MASK 0xff000000 /* signal field in PLCP header, 5363475e505Smillert * only for beacon, ATIM, and 5373475e505Smillert * RTS. 5383475e505Smillert */ 539c33247eeSjsg #define ATW_PLCPHD_SERVICE_MASK 0xff0000 /* service field in PLCP 5403475e505Smillert * header; with RFMD BBP, 5413475e505Smillert * sets Tx power for beacon, 5423475e505Smillert * RTS, ATIM. 5433475e505Smillert */ 544*d2cfaccaSjsg #define ATW_PLCPHD_PMBL (1<<15) /* 0: long preamble, 1: short */ 5453475e505Smillert 546c33247eeSjsg #define ATW_MMIWADDR_LENLO_MASK 0xff000000 /* tx: written 4th */ 547c33247eeSjsg #define ATW_MMIWADDR_LENHI_MASK 0xff0000 /* tx: written 3rd */ 548c33247eeSjsg #define ATW_MMIWADDR_GAIN_MASK 0xff00 /* tx: written 2nd */ 549c33247eeSjsg #define ATW_MMIWADDR_RATE_MASK 0xff /* tx: written 1st */ 5503475e505Smillert 551a98accbeSmillert /* was magic 0x100E0C0A */ 552a98accbeSmillert #define ATW_MMIWADDR_INTERSIL \ 553a98accbeSmillert (LSHIFT(0x0c, ATW_MMIWADDR_GAIN_MASK) | \ 554a98accbeSmillert LSHIFT(0x0a, ATW_MMIWADDR_RATE_MASK) | \ 555a98accbeSmillert LSHIFT(0x0e, ATW_MMIWADDR_LENHI_MASK) | \ 556a98accbeSmillert LSHIFT(0x10, ATW_MMIWADDR_LENLO_MASK)) 5573475e505Smillert 558a98accbeSmillert /* was magic 0x00009101 559a98accbeSmillert * 560a98accbeSmillert * ADMtek sets the AI bit on the ATW_MMIWADDR_GAIN_MASK address to 561a98accbeSmillert * put the RF3000 into auto-increment mode so that it can write Tx gain, 562a98accbeSmillert * Tx length (high) and Tx length (low) registers back-to-back. 563a98accbeSmillert */ 564a98accbeSmillert #define ATW_MMIWADDR_RFMD \ 565a98accbeSmillert (LSHIFT(RF3000_TWI_AI|RF3000_GAINCTL, ATW_MMIWADDR_GAIN_MASK) | \ 566a98accbeSmillert LSHIFT(RF3000_CTL, ATW_MMIWADDR_RATE_MASK)) 567a98accbeSmillert 568c33247eeSjsg #define ATW_MMIRADDR1_RSVD_MASK 0xff000000 569c33247eeSjsg #define ATW_MMIRADDR1_PWRLVL_MASK 0xff0000 570c33247eeSjsg #define ATW_MMIRADDR1_RSSI_MASK 0xff00 571c33247eeSjsg #define ATW_MMIRADDR1_RXSTAT_MASK 0xff 572a98accbeSmillert 573a98accbeSmillert /* was magic 0x00007c7e 574a98accbeSmillert * 575a98accbeSmillert * TBD document registers for Intersil 3861 baseband 576a98accbeSmillert */ 577a98accbeSmillert #define ATW_MMIRADDR1_INTERSIL \ 578a98accbeSmillert (LSHIFT(0x7c, ATW_MMIRADDR1_RSSI_MASK) | \ 579a98accbeSmillert LSHIFT(0x7e, ATW_MMIRADDR1_RXSTAT_MASK)) 580a98accbeSmillert 581a98accbeSmillert /* was magic 0x00000301 */ 582a98accbeSmillert #define ATW_MMIRADDR1_RFMD \ 583a98accbeSmillert (LSHIFT(RF3000_RSSI, ATW_MMIRADDR1_RSSI_MASK) | \ 584a98accbeSmillert LSHIFT(RF3000_RXSTAT, ATW_MMIRADDR1_RXSTAT_MASK)) 585a98accbeSmillert 586a98accbeSmillert /* was magic 0x00100000 */ 587a98accbeSmillert #define ATW_MMIRADDR2_INTERSIL \ 588a98accbeSmillert (LSHIFT(0x0, ATW_MMIRADDR2_ID_MASK) | \ 589a98accbeSmillert LSHIFT(0x10, ATW_MMIRADDR2_RXPECNT_MASK)) 590a98accbeSmillert 591a98accbeSmillert /* was magic 0x7e100000 */ 592a98accbeSmillert #define ATW_MMIRADDR2_RFMD \ 593a98accbeSmillert (LSHIFT(0x7e, ATW_MMIRADDR2_ID_MASK) | \ 594a98accbeSmillert LSHIFT(0x10, ATW_MMIRADDR2_RXPECNT_MASK)) 595a98accbeSmillert 596c33247eeSjsg #define ATW_MMIRADDR2_ID_MASK 0xff000000 /* 1st element ID in WEP table 597a98accbeSmillert * for Probe Response (huh?) 598a98accbeSmillert */ 599a98accbeSmillert /* RXPE is re-asserted after RXPECNT * 22MHz. */ 600c33247eeSjsg #define ATW_MMIRADDR2_RXPECNT_MASK 0xff0000 601*d2cfaccaSjsg #define ATW_MMIRADDR2_PROREXT (1<<15) /* Probe Response 602a98accbeSmillert * 11Mb/s length 603a98accbeSmillert * extension. 604a98accbeSmillert */ 605c33247eeSjsg #define ATW_MMIRADDR2_PRORLEN_MASK 0x7fff /* Probe Response 606a98accbeSmillert * microsecond length 607a98accbeSmillert */ 6083475e505Smillert 609*d2cfaccaSjsg #define ATW_TXBR_ALCUPDATE_MASK (1<<31) /* auto-update BBP with ALCSET */ 610c33247eeSjsg #define ATW_TXBR_TBCNT_MASK 0x1f0000 /* transmit burst count */ 611c33247eeSjsg #define ATW_TXBR_ALCSET_MASK 0xff00 /* TX power level set point */ 612c33247eeSjsg #define ATW_TXBR_ALCREF_MASK 0xff /* TX power level reference point */ 6133475e505Smillert 614*d2cfaccaSjsg #define ATW_ALCSTAT_MCOV_MASK (1<<27) /* MPDU count overflow */ 615*d2cfaccaSjsg #define ATW_ALCSTAT_ESOV_MASK (1<<26) /* error sum overflow */ 616c33247eeSjsg #define ATW_ALCSTAT_MCNT_MASK 0x3ff0000 /* MPDU count, unsigned integer */ 617c33247eeSjsg #define ATW_ALCSTAT_ERSUM_MASK 0xffff /* power error sum, 6183475e505Smillert * 2's complement signed integer 6193475e505Smillert */ 6203475e505Smillert 621c33247eeSjsg #define ATW_TOFS2_PWR1UP_MASK 0xf0000000 /* delay of Tx/Rx from PE1, 6223475e505Smillert * Radio, PHYRST change after 6233475e505Smillert * power-up, in 2ms units 6243475e505Smillert */ 625c33247eeSjsg #define ATW_TOFS2_PWR0PAPE_MASK 0xf000000 /* delay of PAPE going low 6263475e505Smillert * after internal data 6273475e505Smillert * transmit end, in us 6283475e505Smillert */ 629c33247eeSjsg #define ATW_TOFS2_PWR1PAPE_MASK 0xf00000 /* delay of PAPE going high 6303475e505Smillert * after TXPE asserted, in us 6313475e505Smillert */ 632c33247eeSjsg #define ATW_TOFS2_PWR0TRSW_MASK 0xf0000 /* delay of TRSW going low 6333475e505Smillert * after internal data transmit 6343475e505Smillert * end, in us 6353475e505Smillert */ 636c33247eeSjsg #define ATW_TOFS2_PWR1TRSW_MASK 0xf000 /* delay of TRSW going high 6373475e505Smillert * after TXPE asserted, in us 6383475e505Smillert */ 639c33247eeSjsg #define ATW_TOFS2_PWR0PE2_MASK 0xf00 /* delay of PE2 going low 6403475e505Smillert * after internal data transmit 6413475e505Smillert * end, in us 6423475e505Smillert */ 643c33247eeSjsg #define ATW_TOFS2_PWR1PE2_MASK 0xf0 /* delay of PE2 going high 6443475e505Smillert * after TXPE asserted, in us 6453475e505Smillert */ 646c33247eeSjsg #define ATW_TOFS2_PWR0TXPE_MASK 0xf /* delay of TXPE going low 6473475e505Smillert * after internal data transmit 6483475e505Smillert * end, in us 6493475e505Smillert */ 6503475e505Smillert 651*d2cfaccaSjsg #define ATW_CMDR_PM (1<<19) /* enables power mgmt 6523475e505Smillert * capabilities. 6533475e505Smillert */ 654*d2cfaccaSjsg #define ATW_CMDR_APM (1<<18) /* APM mode, effective when 6553475e505Smillert * PM = 1. 6563475e505Smillert */ 657*d2cfaccaSjsg #define ATW_CMDR_RTE (1<<4) /* enable Rx FIFO threshold */ 658c33247eeSjsg #define ATW_CMDR_DRT_MASK 0xc /* drain Rx FIFO threshold */ 659f744aeebSmillert /* 32 bytes */ 660f744aeebSmillert #define ATW_CMDR_DRT_8DW LSHIFT(0x0, ATW_CMDR_DRT_MASK) 661f744aeebSmillert /* 64 bytes */ 662f744aeebSmillert #define ATW_CMDR_DRT_16DW LSHIFT(0x1, ATW_CMDR_DRT_MASK) 663f744aeebSmillert /* Store & Forward */ 664f744aeebSmillert #define ATW_CMDR_DRT_SF LSHIFT(0x2, ATW_CMDR_DRT_MASK) 665f744aeebSmillert /* Reserved */ 666f744aeebSmillert #define ATW_CMDR_DRT_RSVD LSHIFT(0x3, ATW_CMDR_DRT_MASK) 667*d2cfaccaSjsg #define ATW_CMDR_SINT_MASK (1<<1) /* software interrupt---huh? */ 6683475e505Smillert 6693475e505Smillert /* TBD PCIC */ 6703475e505Smillert 6713475e505Smillert /* TBD PMCSR */ 6723475e505Smillert 6733475e505Smillert 674c33247eeSjsg #define ATW_PAR0_PAB0_MASK 0xff /* MAC address byte 0 */ 675c33247eeSjsg #define ATW_PAR0_PAB1_MASK 0xff00 /* MAC address byte 1 */ 676c33247eeSjsg #define ATW_PAR0_PAB2_MASK 0xff0000 /* MAC address byte 2 */ 677c33247eeSjsg #define ATW_PAR0_PAB3_MASK 0xff000000 /* MAC address byte 3 */ 6783475e505Smillert 679c33247eeSjsg #define ATW_C_PAR1_CTD 0xffff0000 /* Continuous Tx pattern */ 680c33247eeSjsg #define ATW_PAR1_PAB5_MASK 0xff00 /* MAC address byte 5 */ 681c33247eeSjsg #define ATW_PAR1_PAB4_MASK 0xff /* MAC address byte 4 */ 6823475e505Smillert 683c33247eeSjsg #define ATW_MAR0_MAB3_MASK 0xff000000 /* multicast table bits 31:24 */ 684c33247eeSjsg #define ATW_MAR0_MAB2_MASK 0xff0000 /* multicast table bits 23:16 */ 685c33247eeSjsg #define ATW_MAR0_MAB1_MASK 0xff00 /* multicast table bits 15:8 */ 686c33247eeSjsg #define ATW_MAR0_MAB0_MASK 0xff /* multicast table bits 7:0 */ 6873475e505Smillert 688c33247eeSjsg #define ATW_MAR1_MAB7_MASK 0xff000000 /* multicast table bits 63:56 */ 689c33247eeSjsg #define ATW_MAR1_MAB6_MASK 0xff0000 /* multicast table bits 55:48 */ 690c33247eeSjsg #define ATW_MAR1_MAB5_MASK 0xff00 /* multicast table bits 47:40 */ 691c33247eeSjsg #define ATW_MAR1_MAB4_MASK 0xff /* multicast table bits 39:32 */ 6923475e505Smillert 6933475e505Smillert /* ATIM destination address */ 694c33247eeSjsg #define ATW_ATIMDA0_ATIMB3_MASK 0xff000000 695c33247eeSjsg #define ATW_ATIMDA0_ATIMB2_MASK 0xff0000 696c33247eeSjsg #define ATW_ATIMDA0_ATIMB1_MASK 0xff00 697c33247eeSjsg #define ATW_ATIMDA0_ATIMB0_MASK 0xff 6983475e505Smillert 6993475e505Smillert /* ATIM destination address, BSSID */ 700c33247eeSjsg #define ATW_ABDA1_BSSIDB5_MASK 0xff000000 701c33247eeSjsg #define ATW_ABDA1_BSSIDB4_MASK 0xff0000 702c33247eeSjsg #define ATW_ABDA1_ATIMB5_MASK 0xff00 703c33247eeSjsg #define ATW_ABDA1_ATIMB4_MASK 0xff 7043475e505Smillert 7053475e505Smillert /* BSSID */ 706c33247eeSjsg #define ATW_BSSID0_BSSIDB3_MASK 0xff000000 707c33247eeSjsg #define ATW_BSSID0_BSSIDB2_MASK 0xff0000 708c33247eeSjsg #define ATW_BSSID0_BSSIDB1_MASK 0xff00 709c33247eeSjsg #define ATW_BSSID0_BSSIDB0_MASK 0xff 7103475e505Smillert 711c33247eeSjsg #define ATW_TXLMT_MTMLT_MASK 0xffff0000 /* max TX MSDU lifetime in TU */ 712c33247eeSjsg #define ATW_TXLMT_SRTYLIM_MASK 0xff /* short retry limit */ 7133475e505Smillert 714c33247eeSjsg #define ATW_MIBCNT_FFCNT_MASK 0xff000000 /* FCS failure count */ 715c33247eeSjsg #define ATW_MIBCNT_AFCNT_MASK 0xff0000 /* ACK failure count */ 716c33247eeSjsg #define ATW_MIBCNT_RSCNT_MASK 0xff00 /* RTS success count */ 717c33247eeSjsg #define ATW_MIBCNT_RFCNT_MASK 0xff /* RTS failure count */ 7183475e505Smillert 719c33247eeSjsg #define ATW_BCNT_PLCPH_MASK 0xff0000 /* 11M PLCP length (us) */ 720c33247eeSjsg #define ATW_BCNT_PLCPL_MASK 0xff00 /* 5.5M PLCP length (us) */ 721c33247eeSjsg #define ATW_BCNT_BCNT_MASK 0xff /* byte count of beacon frame */ 7223475e505Smillert 7233475e505Smillert /* For ADM8211C/CR */ 7243475e505Smillert /* ATW_C_TSC_TIMTABSEL = 1 */ 725*d2cfaccaSjsg #define ATW_C_BCNT_EXTEN1 (1<<31) /* 11M beacon len. extension */ 726c33247eeSjsg #define ATW_C_BCNT_BEANLEN1 0x7fff0000 /* beacon length in us */ 7273475e505Smillert /* ATW_C_TSC_TIMTABSEL = 0 */ 728*d2cfaccaSjsg #define ATW_C_BCNT_EXTEN0 (1<<15) /* 11M beacon len. extension */ 7293475e505Smillert #define ATW_C_BCNT_BEANLEN0 BIT(14,0) /* beacon length in us */ 7303475e505Smillert 731c33247eeSjsg #define ATW_C_TSC_TIMOFS 0xff000000 /* I think this is the 7323475e505Smillert * SRAM offset for the TIM 7333475e505Smillert */ 734c33247eeSjsg #define ATW_C_TSC_TIMLEN 0x3ff000 /* length of TIM */ 735*d2cfaccaSjsg #define ATW_C_TSC_TIMTABSEL (1<<4) /* select TIM table 0 or 1 */ 736c33247eeSjsg #define ATW_TSC_TSC_MASK 0xf /* TSFT countdown value, 0 7373475e505Smillert * disables 7383475e505Smillert */ 7393475e505Smillert 740*d2cfaccaSjsg #define ATW_SYNRF_SELSYN (1<<31) /* 0: MAC controls SYN IF pins, 7413475e505Smillert * 1: ATW_SYNRF controls SYN IF pins. 7423475e505Smillert */ 743*d2cfaccaSjsg #define ATW_SYNRF_SELRF (1<<30) /* 0: MAC controls RF IF pins, 7443475e505Smillert * 1: ATW_SYNRF controls RF IF pins. 7453475e505Smillert */ 746*d2cfaccaSjsg #define ATW_SYNRF_LERF (1<<29) /* if SELSYN = 1, direct control of 7473475e505Smillert * LERF# pin 7483475e505Smillert */ 749*d2cfaccaSjsg #define ATW_SYNRF_LEIF (1<<28) /* if SELSYN = 1, direct control of 7503475e505Smillert * LEIF# pin 7513475e505Smillert */ 752*d2cfaccaSjsg #define ATW_SYNRF_SYNCLK (1<<27) /* if SELSYN = 1, direct control of 7533475e505Smillert * SYNCLK pin 7543475e505Smillert */ 755*d2cfaccaSjsg #define ATW_SYNRF_SYNDATA (1<<26) /* if SELSYN = 1, direct control of 7563475e505Smillert * SYNDATA pin 7573475e505Smillert */ 758*d2cfaccaSjsg #define ATW_SYNRF_PE1 (1<<25) /* if SELRF = 1, direct control of 7593475e505Smillert * PE1 pin 7603475e505Smillert */ 761*d2cfaccaSjsg #define ATW_SYNRF_PE2 (1<<24) /* if SELRF = 1, direct control of 7623475e505Smillert * PE2 pin 7633475e505Smillert */ 764*d2cfaccaSjsg #define ATW_SYNRF_PAPE (1<<23) /* if SELRF = 1, direct control of 7653475e505Smillert * PAPE pin 7663475e505Smillert */ 767*d2cfaccaSjsg #define ATW_C_SYNRF_TRSW (1<<22) /* if SELRF = 1, direct control of 7683475e505Smillert * TRSW pin 7693475e505Smillert */ 770*d2cfaccaSjsg #define ATW_C_SYNRF_TRSWN (1<<21) /* if SELRF = 1, direct control of 7713475e505Smillert * TRSWn pin 7723475e505Smillert */ 773*d2cfaccaSjsg #define ATW_SYNRF_INTERSIL_EN (1<<20) /* if SELRF = 1, enables 7743475e505Smillert * some signal used by the 7753475e505Smillert * Intersil RF front-end? 7763475e505Smillert * Undocumented. 7773475e505Smillert */ 778*d2cfaccaSjsg #define ATW_SYNRF_PHYRST (1<<18) /* if SELRF = 1, direct control of 7793475e505Smillert * PHYRST# pin 7803475e505Smillert */ 7813475e505Smillert /* 1: force TXPE = RXPE = 1 if ATW_CMDR[27] = 0. */ 7823475e505Smillert #define ATW_C_SYNRF_RF2958PD ATW_SYNRF_PHYRST 7833475e505Smillert 784c33247eeSjsg #define ATW_BPLI_BP_MASK 0xffff0000 /* beacon interval in TU */ 785c33247eeSjsg #define ATW_BPLI_LI_MASK 0xffff /* STA listen interval in 7863475e505Smillert * beacon intervals 7873475e505Smillert */ 7883475e505Smillert 789c33247eeSjsg #define ATW_C_CAP0_TIMLEN1 0xff000000 /* TIM table 1 len in bytes 7903475e505Smillert * including TIM ID (XXX huh?) 7913475e505Smillert */ 792c33247eeSjsg #define ATW_C_CAP0_TIMLEN0 0xff0000 /* TIM table 0 len in bytes, 7933475e505Smillert * including TIM ID (XXX huh?) 7943475e505Smillert */ 795c33247eeSjsg #define ATW_C_CAP0_CWMAX 0xf00 /* 1 <= CWMAX <= 5 fixes CW? 7963475e505Smillert * 5 < CWMAX <= 9 sets max? 7973475e505Smillert * 10? 7983475e505Smillert * default 0 7993475e505Smillert */ 800*d2cfaccaSjsg #define ATW_CAP0_RCVDTIM (1<<4) /* receive every DTIM */ 801c33247eeSjsg #define ATW_CAP0_CHN_MASK 0xf /* current DSSS channel */ 8023475e505Smillert 803c33247eeSjsg #define ATW_CAP1_CAPI_MASK 0xffff0000 /* capability information */ 804c33247eeSjsg #define ATW_CAP1_ATIMW_MASK 0xffff /* ATIM window in TU */ 8053475e505Smillert 806*d2cfaccaSjsg #define ATW_RMD_ATIMST (1<<31) /* ATIM frame TX status */ 807*d2cfaccaSjsg #define ATW_RMD_CFP (1<<30) /* CFP indicator */ 808c33247eeSjsg #define ATW_RMD_PCNT 0xfff0000 /* idle time between 809f744aeebSmillert * awake/ps mode, in seconds 8103475e505Smillert */ 811c33247eeSjsg #define ATW_RMD_RMRD_MASK 0xffff /* max RX reception duration 8123475e505Smillert * in us 8133475e505Smillert */ 8143475e505Smillert 815c33247eeSjsg #define ATW_CFPP_CFPP 0xff000000 /* CFP unit DTIM */ 816c33247eeSjsg #define ATW_CFPP_CFPMD 0xffff00 /* CFP max duration in TU */ 817c33247eeSjsg #define ATW_CFPP_DTIMP 0xff /* DTIM period in beacon 8183475e505Smillert * intervals 8193475e505Smillert */ 820c33247eeSjsg #define ATW_TOFS0_USCNT_MASK 0x3f000000 /* number of system clocks 8213475e505Smillert * in 1 microsecond. 8223475e505Smillert * Depends PCI bus speed? 8233475e505Smillert */ 824c33247eeSjsg #define ATW_C_TOFS0_TUCNT_MASK 0x7c00 /* PIFS (microseconds) */ 825c33247eeSjsg #define ATW_TOFS0_TUCNT_MASK 0x3ff /* TU counter in microseconds */ 8263475e505Smillert 8273475e505Smillert /* TBD TOFS1 */ 828c33247eeSjsg #define ATW_TOFS1_TSFTOFSR_MASK 0xff000000 /* RX TSFT offset in 8293475e505Smillert * microseconds: RF+BBP 8303475e505Smillert * latency 8313475e505Smillert */ 832c33247eeSjsg #define ATW_TOFS1_TBTTPRE_MASK 0xffff00 /* prediction time, (next 8333475e505Smillert * Nth TBTT - TBTTOFS) in 8343475e505Smillert * microseconds (huh?). To 8353475e505Smillert * match TSFT[25:10] (huh?). 8363475e505Smillert */ 837c33247eeSjsg #define ATW_TBTTPRE_MASK 0x3fffc00 838c33247eeSjsg #define ATW_TOFS1_TBTTOFS_MASK 0xff /* wake-up time offset before 8393475e505Smillert * TBTT in TU 8403475e505Smillert */ 841c33247eeSjsg #define ATW_IFST_SLOT_MASK 0xf800000 /* SLOT time in us */ 842c33247eeSjsg #define ATW_IFST_SIFS_MASK 0x7f8000 /* SIFS time in us */ 843c33247eeSjsg #define ATW_IFST_DIFS_MASK 0x7e00 /* DIFS time in us */ 844c33247eeSjsg #define ATW_IFST_EIFS_MASK 0x1ff /* EIFS time in us */ 8453475e505Smillert 846c33247eeSjsg #define ATW_RSPT_MART_MASK 0xffff0000 /* max response time in us */ 847c33247eeSjsg #define ATW_RSPT_MIRT_MASK 0xff00 /* min response time in us */ 848c33247eeSjsg #define ATW_RSPT_TSFTOFST_MASK 0xff /* TX TSFT offset in us */ 8493475e505Smillert 850*d2cfaccaSjsg #define ATW_WEPCTL_WEPENABLE (1<<31) /* enable WEP engine */ 851*d2cfaccaSjsg #define ATW_WEPCTL_AUTOSWITCH (1<<30) /* auto-switch enable (huh?) */ 852*d2cfaccaSjsg #define ATW_WEPCTL_CURTBL (1<<29) /* current table in use */ 853*d2cfaccaSjsg #define ATW_WEPCTL_WR (1<<28) /* */ 854*d2cfaccaSjsg #define ATW_WEPCTL_RD (1<<27) /* */ 855*d2cfaccaSjsg #define ATW_WEPCTL_WEPRXBYP (1<<25) /* bypass WEP on RX */ 856*d2cfaccaSjsg #define ATW_WEPCTL_SHKEY (1<<24) /* 1: pass to host if tbl 8573475e505Smillert * lookup fails, 0: use 8583475e505Smillert * shared-key 8593475e505Smillert */ 860*d2cfaccaSjsg #define ATW_WEPCTL_UNKNOWN0 (1<<23) /* has something to do with 8613475e505Smillert * revision 0x20. Possibly 8623475e505Smillert * selects a different WEP 8633475e505Smillert * table. 8643475e505Smillert */ 865c33247eeSjsg #define ATW_WEPCTL_TBLADD_MASK 0x1ff /* add to table */ 8663475e505Smillert 8673475e505Smillert /* set these bits in the second byte of a SRAM shared key record to affect 8683475e505Smillert * the use and interpretation of the key in the record. 8693475e505Smillert */ 870*d2cfaccaSjsg #define ATW_WEP_ENABLED (1<<7) 871*d2cfaccaSjsg #define ATW_WEP_104BIT (1<<6) 8723475e505Smillert 873c33247eeSjsg #define ATW_WESK_DATA_MASK 0xffff /* data */ 874c33247eeSjsg #define ATW_WEPCNT_WIEC_MASK 0xffff /* WEP ICV error count */ 8753475e505Smillert 876*d2cfaccaSjsg #define ATW_MACTEST_FORCE_IV (1<<23) 877*d2cfaccaSjsg #define ATW_MACTEST_FORCE_KEYID (1<<22) 878c33247eeSjsg #define ATW_MACTEST_KEYID_MASK 0x300000 879*d2cfaccaSjsg #define ATW_MACTEST_MMI_USETXCLK (1<<11) 8803475e505Smillert 8813475e505Smillert /* Function Event/Status registers */ 8823475e505Smillert 883*d2cfaccaSjsg #define ATW_FER_INTR (1<<15) /* interrupt: set regardless of mask */ 884*d2cfaccaSjsg #define ATW_FER_GWAKE (1<<4) /* general wake-up: set regardless of mask */ 8853475e505Smillert 886*d2cfaccaSjsg #define ATW_FEMR_INTR_EN (1<<15) /* enable INTA# */ 887*d2cfaccaSjsg #define ATW_FEMR_WAKEUP_EN (1<<14) /* enable wake-up */ 888*d2cfaccaSjsg #define ATW_FEMR_GWAKE_EN (1<<4) /* enable general wake-up */ 8893475e505Smillert 890*d2cfaccaSjsg #define ATW_FPSR_INTR_STATUS (1<<15) /* interrupt status */ 891*d2cfaccaSjsg #define ATW_FPSR_WAKEUP_STATUS (1<<4) /* CSTSCHG state */ 892*d2cfaccaSjsg #define ATW_FFER_INTA_FORCE (1<<15) /* activate INTA (if not masked) */ 893*d2cfaccaSjsg #define ATW_FFER_GWAKE_FORCE (1<<4) /* activate CSTSCHG (if not masked) */ 8943475e505Smillert 8953475e505Smillert /* Serial EEPROM offsets */ 8963475e505Smillert #define ATW_SR_CLASS_CODE (0x00/2) 8973475e505Smillert #define ATW_SR_FORMAT_VERSION (0x02/2) 898c33247eeSjsg #define ATW_SR_MAJOR_MASK 0xff 899c33247eeSjsg #define ATW_SR_MINOR_MASK 0xff00 9003475e505Smillert #define ATW_SR_MAC00 (0x08/2) /* CSR21 */ 9013475e505Smillert #define ATW_SR_MAC01 (0x0A/2) /* CSR21/22 */ 9023475e505Smillert #define ATW_SR_MAC10 (0x0C/2) /* CSR22 */ 9033475e505Smillert #define ATW_SR_CSR20 (0x16/2) 904c33247eeSjsg #define ATW_SR_ANT_MASK 0x1c00 905c33247eeSjsg #define ATW_SR_PWRSCALE_MASK 0x300 906c33247eeSjsg #define ATW_SR_CLKSAVE_MASK 0xc0 907c33247eeSjsg #define ATW_SR_RFTYPE_MASK 0x38 908c33247eeSjsg #define ATW_SR_BBPTYPE_MASK 0x7 9093475e505Smillert #define ATW_SR_CR28_CR03 (0x18/2) 910c33247eeSjsg #define ATW_SR_CR28_MASK 0xff00 911c33247eeSjsg #define ATW_SR_CR03_MASK 0xff 9123475e505Smillert #define ATW_SR_CTRY_CR29 (0x1A/2) 913c33247eeSjsg #define ATW_SR_CTRY_MASK 0xff00 /* country code */ 9143475e505Smillert #define COUNTRY_FCC 0 9153475e505Smillert #define COUNTRY_IC 1 9163475e505Smillert #define COUNTRY_ETSI 2 9173475e505Smillert #define COUNTRY_SPAIN 3 9183475e505Smillert #define COUNTRY_FRANCE 4 9193475e505Smillert #define COUNTRY_MMK 5 9203475e505Smillert #define COUNTRY_MMK2 6 921c33247eeSjsg #define ATW_SR_CR29_MASK 0xff 9223475e505Smillert #define ATW_SR_PCI_DEVICE (0x20/2) /* CR0 */ 9233475e505Smillert #define ATW_SR_PCI_VENDOR (0x22/2) /* CR0 */ 9243475e505Smillert #define ATW_SR_SUB_DEVICE (0x24/2) /* CR11 */ 9253475e505Smillert #define ATW_SR_SUB_VENDOR (0x26/2) /* CR11 */ 9263475e505Smillert #define ATW_SR_CR15 (0x28/2) 9273475e505Smillert #define ATW_SR_LOCISPTR (0x2A/2) /* CR10 */ 9283475e505Smillert #define ATW_SR_HICISPTR (0x2C/2) /* CR10 */ 9293475e505Smillert #define ATW_SR_CSR18 (0x2E/2) 9303475e505Smillert #define ATW_SR_D0_D1_PWR (0x40/2) /* CR49 */ 9313475e505Smillert #define ATW_SR_D2_D3_PWR (0x42/2) /* CR49 */ 9323475e505Smillert #define ATW_SR_CIS_WORDS (0x52/2) 9333475e505Smillert /* CR17 of RFMD RF3000 BBP: returns TWO channels */ 9343475e505Smillert #define ATW_SR_TXPOWER(chnl) (0x54/2 + ((chnl) - 1)/2) 9353475e505Smillert /* CR20 of RFMD RF3000 BBP: returns TWO channels */ 9363475e505Smillert #define ATW_SR_LPF_CUTOFF(chnl) (0x62/2 + ((chnl) - 1)/2) 9373475e505Smillert /* CR21 of RFMD RF3000 BBP: returns TWO channels */ 9383475e505Smillert #define ATW_SR_LNA_GS_THRESH(chnl) (0x70/2 + ((chnl) - 1)/2) 9393475e505Smillert #define ATW_SR_CHECKSUM (0x7e/2) /* for data 0x00-0x7d */ 9403475e505Smillert #define ATW_SR_CIS (0x80/2) /* Cardbus CIS */ 9413475e505Smillert 9423475e505Smillert /* Tx descriptor */ 9433475e505Smillert struct atw_txdesc { 9443475e505Smillert u_int32_t at_ctl; 9453475e505Smillert #define at_stat at_ctl 9463475e505Smillert u_int32_t at_flags; 9473475e505Smillert u_int32_t at_buf1; 9483475e505Smillert u_int32_t at_buf2; 9493475e505Smillert }; 9503475e505Smillert 951*d2cfaccaSjsg #define ATW_TXCTL_OWN (1<<31) /* 1: ready to transmit */ 952*d2cfaccaSjsg #define ATW_TXCTL_DONE (1<<30) /* 0: not processed */ 953c33247eeSjsg #define ATW_TXCTL_TXDR_MASK 0xff00000 /* TX data rate (?) */ 954c33247eeSjsg #define ATW_TXCTL_TL_MASK 0xfffff /* retry limit, 0 - 255 */ 9553475e505Smillert 9563475e505Smillert #define ATW_TXSTAT_OWN ATW_TXCTL_OWN /* 0: not for transmission */ 9573475e505Smillert #define ATW_TXSTAT_DONE ATW_TXCTL_DONE /* 1: been processed */ 958*d2cfaccaSjsg #define ATW_TXSTAT_ES (1<<29) /* 0: TX successful */ 959*d2cfaccaSjsg #define ATW_TXSTAT_TLT (1<<28) /* TX lifetime expired */ 960*d2cfaccaSjsg #define ATW_TXSTAT_TRT (1<<27) /* TX retry limit expired */ 961*d2cfaccaSjsg #define ATW_TXSTAT_TUF (1<<26) /* TX under-run error */ 962*d2cfaccaSjsg #define ATW_TXSTAT_TRO (1<<25) /* TX over-run error */ 963*d2cfaccaSjsg #define ATW_TXSTAT_SOFBR (1<<24) /* packet size != buffer size 9643475e505Smillert * (?) 9653475e505Smillert */ 966c33247eeSjsg #define ATW_TXSTAT_ARC_MASK 0xfff /* accumulated retry count */ 9673475e505Smillert 968*d2cfaccaSjsg #define ATW_TXFLAG_IC (1<<31) /* interrupt on completion */ 969*d2cfaccaSjsg #define ATW_TXFLAG_LS (1<<30) /* packet's last descriptor */ 970*d2cfaccaSjsg #define ATW_TXFLAG_FS (1<<29) /* packet's first descriptor */ 971*d2cfaccaSjsg #define ATW_TXFLAG_TER (1<<25) /* end of ring */ 972*d2cfaccaSjsg #define ATW_TXFLAG_TCH (1<<24) /* at_buf2 is 2nd chain */ 973c33247eeSjsg #define ATW_TXFLAG_TBS2_MASK 0xfff000 /* at_buf2 byte count */ 974c33247eeSjsg #define ATW_TXFLAG_TBS1_MASK 0xfff /* at_buf1 byte count */ 9753475e505Smillert 9763475e505Smillert /* Rx descriptor */ 9773475e505Smillert struct atw_rxdesc { 9783475e505Smillert u_int32_t ar_stat; 9793475e505Smillert u_int32_t ar_ctl; 9803475e505Smillert u_int32_t ar_buf1; 9813475e505Smillert u_int32_t ar_buf2; 9823475e505Smillert }; 9833475e505Smillert 9843475e505Smillert #define ar_rssi ar_ctl 9853475e505Smillert 986*d2cfaccaSjsg #define ATW_RXCTL_RER (1<<25) /* end of ring */ 987*d2cfaccaSjsg #define ATW_RXCTL_RCH (1<<24) /* ar_buf2 is 2nd chain */ 988c33247eeSjsg #define ATW_RXCTL_RBS2_MASK 0xfff000 /* ar_buf2 byte count */ 989c33247eeSjsg #define ATW_RXCTL_RBS1_MASK 0xfff /* ar_buf1 byte count */ 9903475e505Smillert 991*d2cfaccaSjsg #define ATW_RXSTAT_OWN (1<<31) /* 1: NIC may fill descriptor */ 992*d2cfaccaSjsg #define ATW_RXSTAT_ES (1<<30) /* error summary, 0 on 9933475e505Smillert * success 9943475e505Smillert */ 995*d2cfaccaSjsg #define ATW_RXSTAT_SQL (1<<29) /* has signal quality (?) */ 996*d2cfaccaSjsg #define ATW_RXSTAT_DE (1<<28) /* descriptor error---packet is 9973475e505Smillert * truncated. last descriptor 9983475e505Smillert * only 9993475e505Smillert */ 1000*d2cfaccaSjsg #define ATW_RXSTAT_FS (1<<27) /* packet's first descriptor */ 1001*d2cfaccaSjsg #define ATW_RXSTAT_LS (1<<26) /* packet's last descriptor */ 1002*d2cfaccaSjsg #define ATW_RXSTAT_PCF (1<<25) /* received during CFP */ 1003*d2cfaccaSjsg #define ATW_RXSTAT_SFDE (1<<24) /* PLCP SFD error */ 1004*d2cfaccaSjsg #define ATW_RXSTAT_SIGE (1<<23) /* PLCP signal error */ 1005*d2cfaccaSjsg #define ATW_RXSTAT_CRC16E (1<<22) /* PLCP CRC16 error */ 1006*d2cfaccaSjsg #define ATW_RXSTAT_RXTOE (1<<21) /* RX time-out, last descriptor 10073475e505Smillert * only. 10083475e505Smillert */ 1009*d2cfaccaSjsg #define ATW_RXSTAT_CRC32E (1<<20) /* CRC32 error */ 1010*d2cfaccaSjsg #define ATW_RXSTAT_ICVE (1<<19) /* WEP ICV error */ 1011*d2cfaccaSjsg #define ATW_RXSTAT_DA1 (1<<17) /* DA bit 1, admin'd address */ 1012*d2cfaccaSjsg #define ATW_RXSTAT_DA0 (1<<16) /* DA bit 0, group address */ 1013c33247eeSjsg #define ATW_RXSTAT_RXDR_MASK 0xf000 /* RX data rate */ 1014c33247eeSjsg #define ATW_RXSTAT_FL_MASK 0xfff /* RX frame length, last 10153475e505Smillert * descriptor only 10163475e505Smillert */ 10173475e505Smillert 10183475e505Smillert /* Static RAM (contains WEP keys, beacon content). Addresses and size 10193475e505Smillert * are in 16-bit words. 10203475e505Smillert */ 10213475e505Smillert #define ATW_SRAM_ADDR_INDIVL_KEY 0x0 10223475e505Smillert #define ATW_SRAM_ADDR_SHARED_KEY (0x160 * 2) 10233475e505Smillert #define ATW_SRAM_ADDR_SSID (0x180 * 2) 10243475e505Smillert #define ATW_SRAM_ADDR_SUPRATES (0x191 * 2) 1025a98accbeSmillert #define ATW_SRAM_MAXSIZE (0x200 * 2) 1026a98accbeSmillert #define ATW_SRAM_A_SIZE ATW_SRAM_MAXSIZE 1027a98accbeSmillert #define ATW_SRAM_B_SIZE (0x1c0 * 2) 10283475e505Smillert 1029