[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     ! 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