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

Annotation of sys/dev/ic/acxvar.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: acxvar.h,v 1.18 2007/07/18 18:10:31 damien 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 _IF_ACXVAR_H
        !            54: #define _IF_ACXVAR_H
        !            55:
        !            56: #ifdef ACX_DEBUG
        !            57: extern int acxdebug;
        !            58: #define DPRINTF(x)      do { if (acxdebug) printf x; } while (0)
        !            59: #define DPRINTFN(n,x)   do { if (acxdebug >= (n)) printf x; } while (0)
        !            60: #else
        !            61: #define DPRINTF(x)
        !            62: #define DPRINTFN(n,x)
        !            63: #endif
        !            64:
        !            65: #define ACX_FRAME_HDRLEN       sizeof(struct ieee80211_frame)
        !            66: #define ACX_MEMBLOCK_SIZE      256
        !            67:
        !            68: #define ACX_TX_DESC_CNT                16
        !            69: #define ACX_RX_DESC_CNT                16
        !            70:
        !            71: #define ACX_TX_RING_SIZE       \
        !            72:        (2 * ACX_TX_DESC_CNT * sizeof(struct acx_host_desc))
        !            73: #define ACX_RX_RING_SIZE       \
        !            74:        (ACX_RX_DESC_CNT * sizeof(struct acx_host_desc))
        !            75:
        !            76: #define CSR_READ_1(sc, reg)                                    \
        !            77:        bus_space_read_1((sc)->sc_mem1_bt, (sc)->sc_mem1_bh,    \
        !            78:                         (sc)->chip_ioreg[(reg)])
        !            79: #define CSR_READ_2(sc, reg)                                    \
        !            80:        bus_space_read_2((sc)->sc_mem1_bt, (sc)->sc_mem1_bh,    \
        !            81:                         (sc)->chip_ioreg[(reg)])
        !            82: #define CSR_READ_4(sc, reg)                                    \
        !            83:        bus_space_read_4((sc)->sc_mem1_bt, (sc)->sc_mem1_bh,    \
        !            84:                         (sc)->chip_ioreg[(reg)])
        !            85:
        !            86: #define CSR_WRITE_2(sc, reg, val)                              \
        !            87:        bus_space_write_2((sc)->sc_mem1_bt, (sc)->sc_mem1_bh,   \
        !            88:                          (sc)->chip_ioreg[(reg)], val)
        !            89: #define CSR_WRITE_4(sc, reg, val)                              \
        !            90:        bus_space_write_4((sc)->sc_mem1_bt, (sc)->sc_mem1_bh,   \
        !            91:                          (sc)->chip_ioreg[(reg)], val)
        !            92:
        !            93: #define CSR_SETB_2(sc, reg, b)         \
        !            94:        CSR_WRITE_2((sc), (reg), CSR_READ_2((sc), (reg)) | (b))
        !            95: #define CSR_CLRB_2(sc, reg, b)         \
        !            96:        CSR_WRITE_2((sc), (reg), CSR_READ_2((sc), (reg)) & (~(b)))
        !            97:
        !            98: #define DESC_WRITE_REGION_1(sc, off, d, dlen)                          \
        !            99:        bus_space_write_region_1((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,    \
        !           100:                                 (off), (const uint8_t *)(d), (dlen))
        !           101:
        !           102: #define FW_TXDESC_SETFIELD_1(sc, mb, field, val)               \
        !           103:        bus_space_write_1((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,   \
        !           104:            (mb)->tb_fwdesc_ofs + offsetof(struct acx_fw_txdesc, field), (val))
        !           105: #define FW_TXDESC_SETFIELD_2(sc, mb, field, val)               \
        !           106:        bus_space_write_2((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,   \
        !           107:            (mb)->tb_fwdesc_ofs + offsetof(struct acx_fw_txdesc, field), (val))
        !           108: #define FW_TXDESC_SETFIELD_4(sc, mb, field, val)       \
        !           109:        bus_space_write_4((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,   \
        !           110:            (mb)->tb_fwdesc_ofs + offsetof(struct acx_fw_txdesc, field), (val))
        !           111:
        !           112: #define FW_TXDESC_GETFIELD_1(sc, mb, field)                    \
        !           113:        bus_space_read_1((sc)->sc_mem2_bt, (sc)->sc_mem2_bh,    \
        !           114:            (mb)->tb_fwdesc_ofs + offsetof(struct acx_fw_txdesc, field))
        !           115:
        !           116: /*
        !           117:  * Firmware TX descriptor
        !           118:  * Fields are little endian
        !           119:  */
        !           120: struct acx_fw_txdesc {
        !           121:        uint32_t        f_tx_next_desc; /* next acx_fw_txdesc phyaddr */
        !           122:        uint32_t        f_tx_host_desc; /* acx_host_desc phyaddr */
        !           123:        uint32_t        f_tx_acx_ptr;
        !           124:        uint32_t        f_tx_time;
        !           125:        uint16_t        f_tx_len;
        !           126:        uint16_t        f_tx_reserved;
        !           127:
        !           128:        uint32_t        f_tx_dev_spec[4];
        !           129:
        !           130:        uint8_t         f_tx_ctrl;      /* see DESC_CTRL_ */
        !           131:        uint8_t         f_tx_ctrl2;
        !           132:        uint8_t         f_tx_error;     /* see DESC_ERR_ */
        !           133:        uint8_t         f_tx_ack_fail;
        !           134:        uint8_t         f_tx_rts_fail;
        !           135:        uint8_t         f_tx_rts_ok;
        !           136:
        !           137:        /* XXX should be moved to chip specific file */
        !           138:        union {
        !           139:                struct {
        !           140:                        uint8_t         rate100;        /* acx100 tx rate */
        !           141:                        uint8_t         queue_ctrl;
        !           142:                } __packed r1;
        !           143:                struct {
        !           144:                        uint16_t        rate111;        /* acx111 tx rate */
        !           145:                } __packed r2;
        !           146:        } u;
        !           147: #define f_tx_rate100   u.r1.rate100
        !           148: #define f_tx_queue_ctrl        u.r1.queue_ctrl
        !           149: #define f_tx_rate111   u.r2.rate111
        !           150:        uint32_t        f_tx_queue_info;
        !           151: } __packed;
        !           152:
        !           153: /*
        !           154:  * Firmware RX descriptor
        !           155:  * Fields are little endian
        !           156:  */
        !           157: struct acx_fw_rxdesc {
        !           158:        uint32_t        f_rx_next_desc; /* next acx_fw_rxdesc phyaddr */
        !           159:        uint32_t        f_rx_host_desc; /* acx_host_desc phyaddr */
        !           160:        uint32_t        f_rx_acx_ptr;
        !           161:        uint32_t        f_rx_time;
        !           162:        uint16_t        f_rx_len;
        !           163:        uint16_t        f_rx_wep_len;
        !           164:        uint32_t        f_rx_wep_ofs;
        !           165:
        !           166:        uint8_t         f_rx_dev_spec[16];
        !           167:
        !           168:        uint8_t         f_rx_ctrl;      /* see DESC_CTRL_ */
        !           169:        uint8_t         f_rx_rate;
        !           170:        uint8_t         f_rx_error;
        !           171:        uint8_t         f_rx_snr;       /* signal noise ratio */
        !           172:        uint8_t         f_rx_level;
        !           173:        uint8_t         f_rx_queue_ctrl;
        !           174:        uint16_t        f_rx_unknown0;
        !           175:        uint32_t        f_rx_unknown1;
        !           176: } __packed;
        !           177:
        !           178: /*
        !           179:  * Host TX/RX descriptor
        !           180:  * Fields are little endian
        !           181:  */
        !           182: struct acx_host_desc {
        !           183:        uint32_t        h_data_paddr;   /* data phyaddr */
        !           184:        uint16_t        h_data_ofs;
        !           185:        uint16_t        h_reserved;
        !           186:        uint16_t        h_ctrl;         /* see DESC_CTRL_ */
        !           187:        uint16_t        h_data_len;     /* data length */
        !           188:        uint32_t        h_next_desc;    /* next acx_host_desc phyaddr */
        !           189:        uint32_t        h_pnext;
        !           190:        uint32_t        h_status;       /* see DESC_STATUS_ */
        !           191: } __packed;
        !           192:
        !           193: #define DESC_STATUS_FULL               0x80000000
        !           194:
        !           195: #define DESC_CTRL_SHORT_PREAMBLE       0x01
        !           196: #define DESC_CTRL_FIRST_FRAG           0x02
        !           197: #define DESC_CTRL_AUTODMA              0x04
        !           198: #define DESC_CTRL_RECLAIM              0x08
        !           199: #define DESC_CTRL_HOSTDONE             0x20    /* host finished buf proc */
        !           200: #define DESC_CTRL_ACXDONE              0x40    /* chip finished buf proc */
        !           201: #define DESC_CTRL_HOSTOWN              0x80    /* host controls desc */
        !           202:
        !           203: #define DESC_ERR_OTHER_FRAG            0x01
        !           204: #define DESC_ERR_ABORT                 0x02
        !           205: #define DESC_ERR_PARAM                 0x04
        !           206: #define DESC_ERR_NO_WEPKEY             0x08
        !           207: #define DESC_ERR_MSDU_TIMEOUT          0x10
        !           208: #define DESC_ERR_EXCESSIVE_RETRY       0x20
        !           209: #define DESC_ERR_BUF_OVERFLOW          0x40
        !           210: #define DESC_ERR_DMA                   0x80
        !           211:
        !           212: /*
        !           213:  * Extra header in receiving buffer
        !           214:  * Fields are little endian
        !           215:  */
        !           216: struct acx_rxbuf_hdr {
        !           217:        uint16_t        rbh_len;        /* ACX_RXBUG_LEN_MASK part is len */
        !           218:        uint8_t         rbh_memblk_cnt;
        !           219:        uint8_t         rbh_status;
        !           220:        uint8_t         rbh_stat_baseband; /* see ACX_RXBUF_STAT_ */
        !           221:        uint8_t         rbh_plcp;
        !           222:        uint8_t         rbh_level;      /* signal level */
        !           223:        uint8_t         rbh_snr;        /* signal noise ratio */
        !           224:        uint32_t        rbh_time;       /* recv timestamp */
        !           225:
        !           226:        /*
        !           227:         * XXX may have 4~8 byte here which
        !           228:         * depends on firmware version
        !           229:         */
        !           230: } __packed;
        !           231:
        !           232: #define ACX_RXBUF_LEN_MASK     0xfff
        !           233: #define ACX_RXBUF_STAT_LNA     0x80    /* low noise amplifier */
        !           234:
        !           235: struct acx_ring_data {
        !           236:        struct acx_host_desc    *rx_ring;
        !           237:        bus_dma_segment_t       rx_ring_seg;
        !           238:        bus_dmamap_t            rx_ring_dmamap;
        !           239:        uint32_t                rx_ring_paddr;
        !           240:
        !           241:        struct acx_host_desc    *tx_ring;
        !           242:        bus_dma_segment_t       tx_ring_seg;
        !           243:        bus_dmamap_t            tx_ring_dmamap;
        !           244:        uint32_t                tx_ring_paddr;
        !           245: };
        !           246:
        !           247: struct acx_txbuf {
        !           248:        struct mbuf             *tb_mbuf;
        !           249:        bus_dmamap_t            tb_mbuf_dmamap;
        !           250:
        !           251:        struct acx_host_desc    *tb_desc1;
        !           252:        struct acx_host_desc    *tb_desc2;
        !           253:
        !           254:        uint32_t                tb_fwdesc_ofs;
        !           255:
        !           256:        /*
        !           257:         * Used by tx rate updating
        !           258:         */
        !           259:        struct acx_node         *tb_node;       /* remote node */
        !           260:        int                     tb_rate;        /* current tx rate */
        !           261: };
        !           262:
        !           263: struct acx_rxbuf {
        !           264:        struct mbuf             *rb_mbuf;
        !           265:        bus_dmamap_t            rb_mbuf_dmamap;
        !           266:
        !           267:        struct acx_host_desc    *rb_desc;
        !           268: };
        !           269:
        !           270: struct acx_buf_data {
        !           271:        struct acx_rxbuf        rx_buf[ACX_RX_DESC_CNT];
        !           272:        struct acx_txbuf        tx_buf[ACX_TX_DESC_CNT];
        !           273:        bus_dmamap_t            mbuf_tmp_dmamap;
        !           274:
        !           275:        int                     rx_scan_start;
        !           276:
        !           277:        int                     tx_free_start;
        !           278:        int                     tx_used_start;
        !           279:        int                     tx_used_count;
        !           280: };
        !           281:
        !           282: struct acx_node {
        !           283:        struct ieee80211_node           ni;     /* must be first */
        !           284:        struct ieee80211_amrr_node      amn;
        !           285: };
        !           286:
        !           287: struct acx_config {
        !           288:        uint8_t antenna;
        !           289:        uint8_t regdom;
        !           290:        uint8_t cca_mode;       /* acx100 */
        !           291:        uint8_t ed_thresh;      /* acx100 */
        !           292: };
        !           293:
        !           294: struct acx_stats {
        !           295:        uint64_t        err_oth_frag;   /* XXX error in other frag?? */
        !           296:        uint64_t        err_abort;      /* tx abortion */
        !           297:        uint64_t        err_param;      /* tx desc contains invalid param */
        !           298:        uint64_t        err_no_wepkey;  /* no WEP key exists */
        !           299:        uint64_t        err_msdu_timeout; /* MSDU timed out */
        !           300:        uint64_t        err_ex_retry;   /* excessive tx retry */
        !           301:        uint64_t        err_buf_oflow;  /* buffer overflow */
        !           302:        uint64_t        err_dma;        /* DMA error */
        !           303:        uint64_t        err_unkn;       /* XXX unknown error */
        !           304: };
        !           305:
        !           306: #define ACX_RX_RADIOTAP_PRESENT                                                \
        !           307:        ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
        !           308:         (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
        !           309:         (1 << IEEE80211_RADIOTAP_RSSI))
        !           310:
        !           311: struct acx_rx_radiotap_hdr {
        !           312:        struct ieee80211_radiotap_header        wr_ihdr;
        !           313:        uint8_t                                 wr_flags;
        !           314:        uint16_t                                wr_chan_freq;
        !           315:        uint16_t                                wr_chan_flags;
        !           316:        uint8_t                                 wr_rssi;
        !           317:        uint8_t                                 wr_max_rssi;
        !           318: } __packed;
        !           319:
        !           320: #define ACX_TX_RADIOTAP_PRESENT                                                \
        !           321:        ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
        !           322:         (1 << IEEE80211_RADIOTAP_RATE) |                               \
        !           323:         (1 << IEEE80211_RADIOTAP_CHANNEL))                             \
        !           324:
        !           325: struct acx_tx_radiotap_hdr {
        !           326:        struct ieee80211_radiotap_header        wt_ihdr;
        !           327:        uint8_t                                 wt_flags;
        !           328:        uint8_t                                 wt_rate;
        !           329:        uint16_t                                wt_chan_freq;
        !           330:        uint16_t                                wt_chan_flags;
        !           331: } __packed;
        !           332:
        !           333: struct acx_softc {
        !           334:        /*
        !           335:         * sc_xxx are filled in by common code
        !           336:         * chip_xxx are filled in by chip specific code
        !           337:         */
        !           338:        struct device           sc_dev;
        !           339:        struct ieee80211com     sc_ic;
        !           340:
        !           341:        struct timeout          sc_chanscan_timer;
        !           342:        uint32_t                sc_flags;       /* see ACX_FLAG_ */
        !           343:
        !           344:        uint32_t                sc_firmware_ver;
        !           345:        uint32_t                sc_hardware_id;
        !           346:
        !           347:        bus_dma_tag_t           sc_dmat;
        !           348:
        !           349:        struct ieee80211_amrr   amrr;
        !           350:        struct timeout          amrr_ch;
        !           351:
        !           352:        /*
        !           353:         * MMIO 1
        !           354:         */
        !           355:        struct resource         *sc_mem1_res;
        !           356:        bus_space_tag_t         sc_mem1_bt;
        !           357:        bus_space_handle_t      sc_mem1_bh;
        !           358:        int                     chip_mem1_rid;
        !           359:
        !           360:        /*
        !           361:         * MMIO 2
        !           362:         */
        !           363:        struct resource         *sc_mem2_res;
        !           364:        bus_space_tag_t         sc_mem2_bt;
        !           365:        bus_space_handle_t      sc_mem2_bh;
        !           366:        int                     chip_mem2_rid;
        !           367:
        !           368:        struct resource         *sc_irq_res;
        !           369:        void                    *sc_irq_handle;
        !           370:        int                     sc_irq_rid;
        !           371:
        !           372:        int                     (*sc_enable)(struct acx_softc *);
        !           373:        void                    (*sc_disable)(struct acx_softc *);
        !           374:        void                    (*sc_power)(struct acx_softc *, int);
        !           375:
        !           376:        uint32_t                sc_cmd;         /* cmd reg (MMIO 2) */
        !           377:        uint32_t                sc_cmd_param;   /* cmd param reg (MMIO 2) */
        !           378:        uint32_t                sc_info;        /* unused */
        !           379:        uint32_t                sc_info_param;  /* unused */
        !           380:
        !           381:        const uint16_t          *chip_ioreg;    /* reg map (MMIO 1) */
        !           382:
        !           383:        /*
        !           384:         * NOTE:
        !           385:         * chip_intr_enable is not necessarily same as
        !           386:         * ~chip_intr_disable
        !           387:         */
        !           388:        uint16_t                chip_intr_enable;
        !           389:        uint16_t                chip_intr_disable;
        !           390:
        !           391:        int                     chip_hw_crypt;
        !           392:        uint16_t                chip_gpio_pled; /* power led */
        !           393:        uint16_t                chip_chan_flags; /* see IEEE80211_CHAN_ */
        !           394:        uint16_t                chip_txdesc1_len;
        !           395:        int                     chip_rxbuf_exhdr; /* based on fw ver */
        !           396:        uint32_t                chip_ee_eaddr_ofs;
        !           397:        enum ieee80211_phymode  chip_phymode;   /* see IEEE80211_MODE_ */
        !           398:        uint8_t                 chip_fw_txdesc_ctrl;
        !           399:
        !           400:        uint8_t                 sc_eeprom_ver;  /* unused */
        !           401:        uint8_t                 sc_form_factor; /* unused */
        !           402:        uint8_t                 sc_radio_type;  /* see ACX_RADIO_TYPE_ */
        !           403:
        !           404:        struct acx_ring_data    sc_ring_data;
        !           405:        struct acx_buf_data     sc_buf_data;
        !           406:
        !           407:        struct acx_stats        sc_stats;       /* statistics */
        !           408:
        !           409:        /*
        !           410:         * Per interface sysctl variables
        !           411:         */
        !           412:        int                     sc_txtimer;
        !           413:        int                     sc_long_retry_limit;
        !           414:        int                     sc_short_retry_limit;
        !           415:        int                     sc_msdu_lifetime;
        !           416:
        !           417:        int                     (*sc_newstate)
        !           418:                                (struct ieee80211com *,
        !           419:                                 enum ieee80211_state, int);
        !           420:
        !           421:        int                     (*chip_init)            /* non-NULL */
        !           422:                                (struct acx_softc *);
        !           423:
        !           424:        int                     (*chip_set_wepkey)
        !           425:                                (struct acx_softc *,
        !           426:                                 struct ieee80211_key *, int);
        !           427:
        !           428:        int                     (*chip_read_config)
        !           429:                                (struct acx_softc *, struct acx_config *);
        !           430:
        !           431:        int                     (*chip_write_config)
        !           432:                                (struct acx_softc *, struct acx_config *);
        !           433:
        !           434:        void                    (*chip_set_fw_txdesc_rate) /* non-NULL */
        !           435:                                (struct acx_softc *, struct acx_txbuf *, int);
        !           436:
        !           437:        void                    (*chip_set_bss_join_param) /* non-NULL */
        !           438:                                (struct acx_softc *, void *, int);
        !           439:
        !           440:        void                    (*chip_proc_wep_rxbuf)
        !           441:                                (struct acx_softc *, struct mbuf *, int *);
        !           442:
        !           443: #if NBPFILTER > 0
        !           444:        caddr_t                 sc_drvbpf;
        !           445:
        !           446:        union {
        !           447:                struct acx_rx_radiotap_hdr th;
        !           448:                uint8_t pad[64];
        !           449:        }                       sc_rxtapu;
        !           450: #define sc_rxtap               sc_rxtapu.th
        !           451:        int                     sc_rxtap_len;
        !           452:
        !           453:        union {
        !           454:                struct acx_tx_radiotap_hdr th;
        !           455:                uint8_t pad[64];
        !           456:        }                       sc_txtapu;
        !           457: #define sc_txtap               sc_txtapu.th
        !           458:        int                     sc_txtap_len;
        !           459: #endif
        !           460: };
        !           461:
        !           462: #define ACX_FLAG_FW_LOADED     0x01
        !           463: #define ACX_FLAG_ACX111                0x02
        !           464:
        !           465: #define ACX_RADIO_TYPE_MAXIM   0x0d
        !           466: #define ACX_RADIO_TYPE_RFMD    0x11
        !           467: #define ACX_RADIO_TYPE_RALINK  0x15
        !           468: #define ACX_RADIO_TYPE_RADIA   0x16
        !           469: #define ACX_RADIO_TYPE_UNKN17  0x17
        !           470: #define ACX_RADIO_TYPE_UNKN19  0x19
        !           471:
        !           472: #define ACX_RADIO_RSSI_MAXIM   120     /* 100dB */
        !           473: #define ACX_RADIO_RSSI_RFMD    215     /* 215dB */
        !           474: #define ACX_RADIO_RSSI_RALINK  0       /* XXX unknown yet */
        !           475: #define ACX_RADIO_RSSI_RADIA   78      /* 78db */
        !           476: #define ACX_RADIO_RSSI_UNKN    0       /* unknown radio */
        !           477:
        !           478: extern const struct ieee80211_rateset  acx_rates_11b;
        !           479: extern const struct ieee80211_rateset  acx_rates_11g;
        !           480: extern int                             acx_beacon_intvl;
        !           481:
        !           482: void   acx100_set_param(struct acx_softc *);
        !           483: void   acx111_set_param(struct acx_softc *);
        !           484:
        !           485: int    acx_init_tmplt_ordered(struct acx_softc *);
        !           486: void   acx_write_phyreg(struct acx_softc *, uint32_t, uint8_t);
        !           487:
        !           488: int    acx_set_tmplt(struct acx_softc *, uint16_t, void *, uint16_t);
        !           489: int    acx_get_conf(struct acx_softc *, uint16_t, void *, uint16_t);
        !           490: int    acx_set_conf(struct acx_softc *, uint16_t, void *, uint16_t);
        !           491: int    acx_exec_command(struct acx_softc *, uint16_t, void *, uint16_t,
        !           492:            void *, uint16_t);
        !           493: int    acx_attach(struct acx_softc *);
        !           494: int    acx_detach(void *);
        !           495: int    acx_intr(void *);
        !           496:
        !           497: #endif /* !_IF_ACXVAR_H */

CVSweb