[BACK]Return to acxreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/acxreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: acxreg.h,v 1.11 2007/03/29 12:37:47 claudio Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org>
                      5:  *
                      6:  * Permission to use, copy, modify, and distribute this software for any
                      7:  * purpose with or without fee is hereby granted, provided that the above
                      8:  * copyright notice and this permission notice appear in all copies.
                      9:  *
                     10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     17:  */
                     18:
                     19: /*
                     20:  * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
                     21:  *
                     22:  * This code is derived from software contributed to The DragonFly Project
                     23:  * by Sepherosa Ziehau <sepherosa@gmail.com>
                     24:  *
                     25:  * Redistribution and use in source and binary forms, with or without
                     26:  * modification, are permitted provided that the following conditions
                     27:  * are met:
                     28:  *
                     29:  * 1. Redistributions of source code must retain the above copyright
                     30:  *    notice, this list of conditions and the following disclaimer.
                     31:  * 2. Redistributions in binary form must reproduce the above copyright
                     32:  *    notice, this list of conditions and the following disclaimer in
                     33:  *    the documentation and/or other materials provided with the
                     34:  *    distribution.
                     35:  * 3. Neither the name of The DragonFly Project nor the names of its
                     36:  *    contributors may be used to endorse or promote products derived
                     37:  *    from this software without specific, prior written permission.
                     38:  *
                     39:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
                     40:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
                     41:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
                     42:  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
                     43:  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
                     44:  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
                     45:  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
                     46:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
                     47:  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
                     48:  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
                     49:  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     50:  * SUCH DAMAGE.
                     51:  */
                     52:
                     53: #ifndef _ACXREG_H
                     54: #define _ACXREG_H
                     55:
                     56: /*
                     57:  * IO register index
                     58:  */
                     59: #define ACXREG_SOFT_RESET              0
                     60: #define ACXREG_FWMEM_ADDR              1
                     61: #define ACXREG_FWMEM_DATA              2
                     62: #define ACXREG_FWMEM_CTRL              3
                     63: #define ACXREG_FWMEM_START             4
                     64: #define ACXREG_EVENT_MASK              5
                     65: #define ACXREG_INTR_TRIG               6
                     66: #define ACXREG_INTR_MASK               7
                     67: #define ACXREG_INTR_STATUS             8
                     68: #define ACXREG_INTR_STATUS_CLR         9       /* cleared after being read */
                     69: #define ACXREG_INTR_ACK                        10
                     70: #define ACXREG_HINTR_TRIG              11      /* XXX what's this? */
                     71: #define ACXREG_RADIO_ENABLE            12
                     72: #define ACXREG_EEPROM_INIT             13
                     73: #define ACXREG_EEPROM_CTRL             14
                     74: #define ACXREG_EEPROM_ADDR             15
                     75: #define ACXREG_EEPROM_DATA             16
                     76: #define ACXREG_EEPROM_CONF             17
                     77: #define ACXREG_EEPROM_INFO             18
                     78: #define ACXREG_PHY_ADDR                        19
                     79: #define ACXREG_PHY_DATA                        20
                     80: #define ACXREG_PHY_CTRL                        21
                     81: #define ACXREG_GPIO_OUT_ENABLE         22
                     82: #define ACXREG_GPIO_OUT                        23
                     83: #define ACXREG_CMD_REG_OFFSET          24
                     84: #define ACXREG_INFO_REG_OFFSET         25
                     85: #define ACXREG_RESET_SENSE             26
                     86: #define ACXREG_ECPU_CTRL               27
                     87: #define ACXREG_MAX                     28
                     88: #define ACXREG(reg, val)               [ACXREG_##reg] = val
                     89:
                     90: /*
                     91:  * Value read from ACXREG_EEPROM_INFO
                     92:  * upper 8bits are radio type
                     93:  * lower 8bits are form factor
                     94:  */
                     95: #define ACX_EEINFO_RADIO_TYPE_SHIFT    8
                     96: #define ACX_EEINFO_RADIO_TYPE_MASK     (0xff << ACX_EEINFO_RADIO_TYPE_SHIFT)
                     97: #define ACX_EEINFO_FORM_FACTOR_MASK    0xff
                     98:
                     99: #define ACX_EEINFO_HAS_RADIO_TYPE(info)        ((info) & ACX_EEINFO_RADIO_TYPE_MASK)
                    100: #define ACX_EEINFO_RADIO_TYPE(info)    ((info) >> ACX_EEINFO_RADIO_TYPE_SHIFT)
                    101: #define ACX_EEINFO_FORM_FACTOR(info)   ((info) & ACX_EEINFO_FORM_FACTOR_MASK)
                    102:
                    103: /*
                    104:  * Size of command register whose location is obtained
                    105:  * from ACXREG_CMD_REG_OFFSET IO register
                    106:  */
                    107: #define ACX_CMD_REG_SIZE               4       /* 4 bytes */
                    108:
                    109: /*
                    110:  * Size of infomation register whose location is obtained
                    111:  * from ACXREG_INFO_REG_OFFSET IO register
                    112:  */
                    113: #define ACX_INFO_REG_SIZE              4       /* 4 bytes */
                    114:
                    115: /*
                    116:  * Offset of EEPROM variables
                    117:  */
                    118: #define ACX_EE_VERSION_OFS             0x05
                    119:
                    120: /*
                    121:  * Possible values for various IO registers
                    122:  */
                    123:
                    124: /* ACXREG_SOFT_RESET */
                    125: #define ACXRV_SOFT_RESET               0x1
                    126:
                    127: /* ACXREG_FWMEM_START */
                    128: #define ACXRV_FWMEM_START_OP           0x0
                    129:
                    130: /* ACXREG_FWMEM_CTRL */
                    131: #define ACXRV_FWMEM_ADDR_AUTOINC       0x10000
                    132:
                    133: /* ACXREG_EVENT_MASK */
                    134: #define ACXRV_EVENT_DISABLE            0x8000  /* XXX What's this?? */
                    135:
                    136: /* ACXREG_INTR_TRIG */
                    137: #define ACXRV_TRIG_CMD_FINI            0x0001
                    138: #define ACXRV_TRIG_TX_FINI             0x0004
                    139:
                    140: /* ACXREG_INTR_MASK */
                    141: #define ACXRV_INTR_RX_DATA             0x0001
                    142: #define ACXRV_INTR_TX_FINI             0x0002
                    143: #define ACXRV_INTR_TX_XFER             0x0004
                    144: #define ACXRV_INTR_RX_FINI             0x0008
                    145: #define ACXRV_INTR_DTIM                        0x0010
                    146: #define ACXRV_INTR_BEACON              0x0020
                    147: #define ACXRV_INTR_TIMER               0x0040
                    148: #define ACXRV_INTR_KEY_MISS            0x0080
                    149: #define ACXRV_INTR_WEP_FAIL            0x0100
                    150: #define ACXRV_INTR_CMD_FINI            0x0200
                    151: #define ACXRV_INTR_INFO                        0x0400
                    152: #define ACXRV_INTR_OVERFLOW            0x0800  /* XXX */
                    153: #define ACXRV_INTR_PROC_ERR            0x1000  /* XXX */
                    154: #define ACXRV_INTR_SCAN_FINI           0x2000
                    155: #define ACXRV_INTR_FCS_THRESH          0x4000  /* XXX */
                    156: #define ACXRV_INTR_UNKN                        0x8000
                    157: #define ACXRV_INTR_ALL                 0xffff
                    158:
                    159: /* ACXREG_EEPROM_INIT */
                    160: #define ACXRV_EEPROM_INIT              0x1
                    161:
                    162: /* ACXREG_EEPROM_CTRL */
                    163: #define ACXRV_EEPROM_READ              0x2
                    164:
                    165: /* ACXREG_PHY_CTRL */
                    166: #define ACXRV_PHY_WRITE                        0x1
                    167: #define ACXRV_PHY_READ                 0x2
                    168:
                    169: /* ACXREG_PHY_ADDR */
                    170: #define ACXRV_PHYREG_TXPOWER           0x11    /* axc100 */
                    171: #define ACXRV_PHYREG_SENSITIVITY       0x30
                    172:
                    173: /* ACXREG_ECPU_CTRL */
                    174: #define ACXRV_ECPU_HALT                        0x1
                    175: #define ACXRV_ECPU_START               0x0
                    176:
                    177: /* Commands */
                    178: #define ACXCMD_GET_CONF                0x01
                    179: #define ACXCMD_SET_CONF                0x02
                    180: #define ACXCMD_ENABLE_RXCHAN   0x03
                    181: #define ACXCMD_ENABLE_TXCHAN   0x04
                    182: #define ACXCMD_TMPLT_TIM       0x0a
                    183: #define ACXCMD_JOIN_BSS                0x0b
                    184: #define ACXCMD_WEP_MGMT                0x0c    /* acx111 */
                    185: #define ACXCMD_SLEEP           0x0f
                    186: #define ACXCMD_WAKEUP          0x10
                    187: #define ACXCMD_INIT_MEM                0x12    /* acx100 */
                    188: #define ACXCMD_TMPLT_BEACON    0x13
                    189: #define ACXCMD_TMPLT_PROBE_RESP        0x14
                    190: #define ACXCMD_TMPLT_NULL_DATA 0x15
                    191: #define ACXCMD_TMPLT_PROBE_REQ 0x16
                    192: #define ACXCMD_INIT_RADIO      0x18
                    193:
                    194: #if 0
                    195: /*
                    196:  * acx111 does not agree with acx100 about
                    197:  * the meaning of following values.  So they
                    198:  * are put into chip specific files.
                    199:  */
                    200: #define ACX_CONF_FW_RING       0x0003
                    201: #define ACX_CONF_MEMOPT                0x0005
                    202: #endif
                    203: #define ACX_CONF_MEMBLK_SIZE   0x0004  /* acx100 */
                    204: #define ACX_CONF_RATE_FALLBACK 0x0006
                    205: #define ACX_CONF_WEPOPT                0x0007  /* acx100 */
                    206: #define ACX_CONF_MMAP          0x0008
                    207: #define ACX_CONF_FWREV         0x000d
                    208: #define ACX_CONF_RXOPT         0x0010
                    209: #define ACX_CONF_OPTION                0x0015  /* acx111 */
                    210: #define ACX_CONF_EADDR         0x1001
                    211: #define ACX_CONF_NRETRY_SHORT  0x1005
                    212: #define ACX_CONF_NRETRY_LONG   0x1006
                    213: #define ACX_CONF_WEPKEY                0x1007  /* acx100 */
                    214: #define ACX_CONF_MSDU_LIFETIME 0x1008
                    215: #define ACX_CONF_REGDOM                0x100a
                    216: #define ACX_CONF_ANTENNA       0x100b
                    217: #define ACX_CONF_TXPOWER       0x100d  /* acx111 */
                    218: #define ACX_CONF_CCA_MODE      0x100e
                    219: #define ACX_CONF_ED_THRESH     0x100f
                    220: #define ACX_CONF_WEP_TXKEY     0x1010
                    221:
                    222: /*
                    223:  * NOTE:
                    224:  * Following structs' fields are little endian
                    225:  */
                    226:
                    227: struct acx_conf {
                    228:        uint16_t        conf_id;        /* see ACXCONF_ (_acxcmd.h) */
                    229:        uint16_t        conf_data_len;
                    230: } __packed;
                    231:
                    232: struct acx_conf_mmap {
                    233:        struct acx_conf confcom;
                    234:        uint32_t        code_start;
                    235:        uint32_t        code_end;
                    236:        uint32_t        wep_cache_start;
                    237:        uint32_t        wep_cache_end;
                    238:        uint32_t        pkt_tmplt_start;
                    239:        uint32_t        pkt_tmplt_end;
                    240:        uint32_t        fw_desc_start;
                    241:        uint32_t        fw_desc_end;
                    242:        uint32_t        memblk_start;
                    243:        uint32_t        memblk_end;
                    244: } __packed;
                    245:
                    246: struct acx_conf_wepopt {
                    247:        struct acx_conf confcom;
                    248:        uint16_t        nkey;
                    249:        uint8_t         opt;    /* see WEPOPT_ */
                    250: } __packed;
                    251:
                    252: #define WEPOPT_HDWEP   0       /* hardware WEP */
                    253:
                    254: struct acx_conf_eaddr {
                    255:        struct acx_conf confcom;
                    256:        uint8_t         eaddr[IEEE80211_ADDR_LEN];
                    257: } __packed;
                    258:
                    259: struct acx_conf_regdom {
                    260:        struct acx_conf confcom;
                    261:        uint8_t         regdom;
                    262:        uint8_t         unknown;
                    263: } __packed;
                    264:
                    265: struct acx_conf_antenna {
                    266:        struct acx_conf confcom;
                    267:        uint8_t         antenna;
                    268: } __packed;
                    269:
                    270: struct acx_conf_fwrev {
                    271:        struct acx_conf confcom;
                    272: #define ACX_FWREV_LEN  20
                    273:        /*
                    274:         * "Rev xx.xx.xx.xx"
                    275:         * '\0' terminated
                    276:         */
                    277:        char            fw_rev[ACX_FWREV_LEN];
                    278:        uint32_t        hw_id;
                    279: } __packed;
                    280:
                    281: struct acx_conf_nretry_long {
                    282:        struct acx_conf confcom;
                    283:        uint8_t         nretry;
                    284: } __packed;
                    285:
                    286: struct acx_conf_nretry_short {
                    287:        struct acx_conf confcom;
                    288:        uint8_t         nretry;
                    289: } __packed;
                    290:
                    291: struct acx_conf_msdu_lifetime {
                    292:        struct acx_conf confcom;
                    293:        uint32_t        lifetime;
                    294: } __packed;
                    295:
                    296: struct acx_conf_rate_fallback {
                    297:        struct acx_conf confcom;
                    298:        uint8_t         ratefb_enable;  /* 0/1 */
                    299: } __packed;
                    300:
                    301: struct acx_conf_rxopt {
                    302:        struct acx_conf confcom;
                    303:        uint16_t        opt1;   /* see RXOPT1_ */
                    304:        uint16_t        opt2;   /* see RXOPT2_ */
                    305: } __packed;
                    306:
                    307: #define RXOPT1_INCL_RXBUF_HDR  0x2000  /* rxbuf with acx_rxbuf_hdr */
                    308: #define RXOPT1_RECV_SSID       0x0400  /* recv frame for joined SSID */
                    309: #define RXOPT1_FILT_BCAST      0x0200  /* filt broadcast pkt */
                    310: #define RXOPT1_RECV_MCAST1     0x0100  /* recv pkt for multicast addr1 */
                    311: #define RXOPT1_RECV_MCAST0     0x0080  /* recv pkt for multicast addr0 */
                    312: #define RXOPT1_FILT_ALLMULTI   0x0040  /* filt allmulti pkt */
                    313: #define RXOPT1_FILT_FSSID      0x0020  /* filt frame for foreign SSID */
                    314: #define RXOPT1_FILT_FDEST      0x0010  /* filt frame for foreign dest addr */
                    315: #define RXOPT1_PROMISC         0x0008  /* promisc mode */
                    316: #define RXOPT1_INCL_FCS                0x0004
                    317: #define RXOPT1_INCL_PHYHDR     0x0000  /* XXX 0x0002 */
                    318:
                    319: #define RXOPT2_RECV_ASSOC_REQ  0x0800
                    320: #define RXOPT2_RECV_AUTH       0x0400
                    321: #define RXOPT2_RECV_BEACON     0x0200
                    322: #define RXOPT2_RECV_CF         0x0100
                    323: #define RXOPT2_RECV_CTRL       0x0080
                    324: #define RXOPT2_RECV_DATA       0x0040
                    325: #define RXOPT2_RECV_BROKEN     0x0020  /* broken frame */
                    326: #define RXOPT2_RECV_MGMT       0x0010
                    327: #define RXOPT2_RECV_PROBE_REQ  0x0008
                    328: #define RXOPT2_RECV_PROBE_RESP 0x0004
                    329: #define RXOPT2_RECV_ACK                0x0002  /* RTS/CTS/ACK */
                    330: #define RXOPT2_RECV_OTHER      0x0001
                    331:
                    332: struct acx_conf_wep_txkey {
                    333:        struct acx_conf confcom;
                    334:        uint8_t         wep_txkey;
                    335: } __packed;
                    336:
                    337:
                    338: struct acx_tmplt_null_data {
                    339:        uint16_t        size;
                    340:        struct ieee80211_frame data;
                    341: } __packed;
                    342:
                    343: struct acx_tmplt_probe_req {
                    344:        uint16_t        size;
                    345:        union {
                    346:                struct {
                    347:                        struct ieee80211_frame f;
                    348:                        uint8_t         var[1];
                    349:                } __packed      u_data;
                    350:                uint8_t         u_mem[0x44];
                    351:        }               data;
                    352: } __packed;
                    353:
                    354: #define ACX_TMPLT_PROBE_REQ_SIZ(var_len)       \
                    355:        (sizeof(uint16_t) + sizeof(struct ieee80211_frame) + (var_len))
                    356:
                    357: struct acx_tmplt_probe_resp {
                    358:        uint16_t        size;
                    359:        union {
                    360:                struct {
                    361:                        struct ieee80211_frame f;
                    362:                        uint8_t         time_stamp[8];
                    363:                        uint16_t        beacon_intvl;
                    364:                        uint16_t        cap;
                    365:                        uint8_t         var[1];
                    366:                } __packed      u_data;
                    367:                uint8_t         u_mem[0x54];
                    368:        }               data;
                    369: } __packed;
                    370:
                    371: #define ACX_TMPLT_PROBE_RESP_SIZ(var_len)                              \
                    372:        (sizeof(uint16_t) + sizeof(struct ieee80211_frame) +            \
                    373:         8 * sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t) + (var_len))
                    374:
                    375: /* XXX same as acx_tmplt_probe_resp */
                    376: struct acx_tmplt_beacon {
                    377:        uint16_t        size;
                    378:        union {
                    379:                struct {
                    380:                        struct ieee80211_frame f;
                    381:                        uint8_t         time_stamp[8];
                    382:                        uint16_t        beacon_intvl;
                    383:                        uint16_t        cap;
                    384:                        uint8_t         var[1];
                    385:                } __packed      u_data;
                    386:                uint8_t         u_mem[0x54];
                    387:        }               data;
                    388: } __packed;
                    389:
                    390: /* XXX C&P of ACX_TMPLT_PROVE_RESP_SIZ() */
                    391: #define ACX_TMPLT_BEACON_SIZ(var_len)                                  \
                    392:        (sizeof(uint16_t) + sizeof(struct ieee80211_frame) +            \
                    393:         8 * sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint16_t) + (var_len))
                    394:
                    395: /* XXX do NOT belong here */
                    396: struct tim_head {
                    397:        uint8_t eid;
                    398:        uint8_t len;
                    399:        uint8_t dtim_count;
                    400:        uint8_t dtim_period;
                    401:        uint8_t bitmap_ctrl;
                    402: } __packed;
                    403:
                    404: /* For tim_head.len (tim_head - eid - len + bitmap) */
                    405: #define ACX_TIM_LEN(bitmap_len)        \
                    406:        (sizeof(struct tim_head) - (2 * sizeof(uint8_t)) + (bitmap_len))
                    407: #define ACX_TIM_BITMAP_LEN     1
                    408:
                    409: struct acx_tmplt_tim {
                    410:        uint16_t        size;
                    411:        union {
                    412:                struct {
                    413:                        struct tim_head th;
                    414:                        uint8_t         bitmap[1];
                    415:                } __packed      u_data;
                    416:                uint8_t         u_mem[0x100];
                    417:        }               data;
                    418: #define tim_eid                data.u_data.th.eid
                    419: #define tim_len                data.u_data.th.len
                    420: #define tim_dtim_count data.u_data.th.dtim_count
                    421: #define tim_dtim_period        data.u_data.th.dtim_period
                    422: #define tim_bitmap_ctrl        data.u_data.th.bitmap_ctrl
                    423: #define tim_bitmap     data.u_data.bitmap
                    424: } __packed;
                    425:
                    426: #define ACX_TMPLT_TIM_SIZ(bitmap_len)  \
                    427:        (sizeof(uint16_t) + sizeof(struct tim_head) + (bitmap_len))
                    428:
                    429: #define CMDPRM_WRITE_REGION_1(sc, r, rlen)             \
                    430:        bus_space_write_region_1((sc)->sc_mem2_bt,      \
                    431:                                 (sc)->sc_mem2_bh,      \
                    432:                                 (sc)->sc_cmd_param,    \
                    433:                                 (const uint8_t *)(r), (rlen))
                    434:
                    435: #define CMDPRM_READ_REGION_1(sc, r, rlen)                              \
                    436:        bus_space_read_region_1((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,     \
                    437:                                (sc)->sc_cmd_param, (uint8_t *)(r), (rlen))
                    438:
                    439: /*
                    440:  * This will clear previous command's
                    441:  * execution status too
                    442:  */
                    443: #define CMD_WRITE_4(sc, val)                                   \
                    444:        bus_space_write_4((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,   \
                    445:                          (sc)->sc_cmd, (val))
                    446: #define CMD_READ_4(sc)         \
                    447:        bus_space_read_4((sc)->sc_mem2_bt, (sc)->sc_mem2_bh, (sc)->sc_cmd)
                    448:
                    449: /*
                    450:  * acx command register layerout:
                    451:  * upper 16bits are command execution status
                    452:  * lower 16bits are command to be executed
                    453:  */
                    454: #define ACX_CMD_STATUS_SHIFT   16
                    455: #define ACX_CMD_STATUS_OK      1
                    456:
                    457: struct radio_init {
                    458:        uint32_t        radio_ofs;      /* radio firmware offset */
                    459:        uint32_t        radio_len;      /* radio firmware length */
                    460: } __packed;
                    461:
                    462: struct bss_join_hdr {
                    463:        uint8_t         bssid[IEEE80211_ADDR_LEN];
                    464:        uint16_t        beacon_intvl;
                    465:        uint8_t         chip_spec[3];
                    466:        uint8_t         ndata_txrate;   /* see ACX_NDATA_TXRATE_ */
                    467:        uint8_t         ndata_txopt;    /* see ACX_NDATA_TXOPT_ */
                    468:        uint8_t         mode;           /* see ACX_MODE_ */
                    469:        uint8_t         channel;
                    470:        uint8_t         esslen;
                    471:        char            essid[1];
                    472: } __packed;
                    473:
                    474: /*
                    475:  * non-data frame tx rate
                    476:  */
                    477: #define ACX_NDATA_TXRATE_2             20      /* 2Mbits/s */
                    478:
                    479: /*
                    480:  * non-data frame tx options
                    481:  */
                    482: #define ACX_NDATA_TXOPT_PBCC           0x40
                    483: #define ACX_NDATA_TXOPT_OFDM           0x20
                    484: #define ACX_NDATA_TXOPT_SHORT_PREAMBLE 0x10
                    485:
                    486: #define BSS_JOIN_BUFLEN                \
                    487:        (sizeof(struct bss_join_hdr) + IEEE80211_NWID_LEN - 1)
                    488: #define BSS_JOIN_PARAM_SIZE(bj)        \
                    489:        (sizeof(struct bss_join_hdr) + (bj)->esslen - 1)
                    490:
                    491:
                    492: #define PCIR_BAR(x)     (PCI_MAPS + (x) * 4)
                    493:
                    494: #endif /* !_ACXREG_H */

CVSweb