123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- /* $OpenBSD: if_malovar.h,v 1.30 2013/12/06 21:03:04 deraadt Exp $ */
- /*
- * Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- /* simplify bus space access */
- #define MALO_READ_1(sc, reg) \
- bus_space_read_1((sc)->sc_iot, (sc)->sc_ioh, (reg))
- #define MALO_READ_2(sc, reg) \
- bus_space_read_2((sc)->sc_iot, (sc)->sc_ioh, (reg))
- #define MALO_READ_MULTI_2(sc, reg, off, size) \
- bus_space_read_raw_multi_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (off), \
- (size))
- #define MALO_WRITE_1(sc, reg, val) \
- bus_space_write_1((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
- #define MALO_WRITE_2(sc, reg, val) \
- bus_space_write_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
- #define MALO_WRITE_MULTI_2(sc, reg, off, size) \
- bus_space_write_raw_multi_2((sc)->sc_iot, (sc)->sc_ioh, (reg), (off), \
- (size))
- /* miscellaneous */
- #define MALO_FW_HELPER_BSIZE 256 /* helper FW block size */
- #define MALO_FW_HELPER_LOADED 0x10 /* helper FW loaded */
- #define MALO_FW_MAIN_MAXRETRY 20 /* main FW block resend max retry */
- #define MALO_CMD_BUFFER_SIZE 256 /* cmd buffer */
- /* device flags */
- #define MALO_DEVICE_ATTACHED (1 << 0)
- #define MALO_FW_LOADED (1 << 1)
- #define MALO_ASSOC_FAILED (1 << 2)
- #define MALO_BUSY (1 << 3)
- /*
- * FW command structures
- */
- struct malo_cmd_header {
- uint16_t cmd;
- uint16_t size;
- uint16_t seqnum;
- uint16_t result;
- /* malo_cmd_body */
- };
- struct malo_cmd_body_spec {
- uint16_t hw_if_version;
- uint16_t hw_version;
- uint16_t num_of_wcb;
- uint16_t num_of_mcast;
- uint8_t macaddr[ETHER_ADDR_LEN];
- uint16_t regioncode;
- uint16_t num_of_antenna;
- uint32_t fw_version;
- uint32_t wcbbase;
- uint32_t rxpdrdptr;
- uint32_t rxpdwrptr;
- uint32_t fw_capinfo;
- } __packed;
- struct malo_cmd_body_scan {
- uint8_t bsstype;
- uint8_t bssid[ETHER_ADDR_LEN];
- /* malo_cmd_tlv_ssid */
- /* malo_cmd_tlv_chanlist */
- /* malo_cmd_tlv_rates */
- /* malo_cmd_tlv_numprobes */
- } __packed;
- struct malo_cmd_body_rsp_scan {
- uint16_t bufsize;
- uint8_t numofset;
- } __packed;
- struct malo_cmd_body_rsp_scan_set {
- uint16_t size;
- uint8_t bssid[ETHER_ADDR_LEN];
- uint8_t rssi;
- uint8_t timestamp[8];
- uint16_t beaconintvl;
- uint16_t capinfo;
- } __packed;
- struct malo_cmd_body_auth {
- uint8_t peermac[ETHER_ADDR_LEN];
- uint8_t authtype;
- } __packed;
- #define MALO_WEP_ACTION_TYPE_ADD 0x02
- #define MALO_WEP_ACTION_TYPE_REMOVE 0x04
- #define MALO_WEP_ACTION_TYPE_DEFAULT 0x08
- #define MALO_WEP_KEY_TYPE_40BIT 0x01
- #define MALO_WEP_KEY_TYPE_104BIT 0x02
- struct malo_cmd_body_wep {
- uint16_t action;
- uint16_t key_index;
- uint8_t key_type_1;
- uint8_t key_type_2;
- uint8_t key_type_3;
- uint8_t key_type_4;
- uint8_t key_value_1[16];
- uint8_t key_value_2[16];
- uint8_t key_value_3[16];
- uint8_t key_value_4[16];
- } __packed;
- #define MALO_OID_BSS 0x00
- #define MALO_OID_RATE 0x01
- #define MALO_OID_BCNPERIOD 0x02
- #define MALO_OID_DTIMPERIOD 0x03
- #define MALO_OID_ASSOCTIMEOUT 0x04
- #define MALO_OID_RTSTRESH 0x05
- #define MALO_OID_SHORTRETRY 0x06
- #define MALO_OID_LONGRETRY 0x07
- #define MALO_OID_FRAGTRESH 0x08
- #define MALO_OID_80211D 0x09
- #define MALO_OID_80211H 0x0a
- struct malo_cmd_body_snmp {
- uint16_t action;
- uint16_t oid;
- uint16_t size;
- uint8_t data[128];
- } __packed;
- struct malo_cmd_body_radio {
- uint16_t action;
- uint16_t control;
- } __packed;
- struct malo_cmd_body_channel {
- uint16_t action;
- uint16_t channel;
- uint16_t rftype;
- uint16_t reserved;
- uint8_t channel_list[32];
- } __packed;
- struct malo_cmd_body_txpower {
- uint16_t action;
- int16_t txpower;
- } __packed;
- struct malo_cmd_body_antenna {
- uint16_t action;
- uint16_t antenna_mode;
- } __packed;
- struct malo_cmd_body_macctrl {
- uint16_t action;
- uint16_t reserved;
- } __packed;
- struct malo_cmd_body_macaddr {
- uint16_t action;
- uint8_t macaddr[ETHER_ADDR_LEN];
- } __packed;
- struct malo_cmd_body_assoc {
- uint8_t peermac[ETHER_ADDR_LEN];
- uint16_t capinfo;
- uint16_t listenintrv;
- uint16_t bcnperiod;
- uint8_t dtimperiod;
- /* malo_cmd_tlv_ssid */
- /* malo_cmd_tlv_phy */
- /* malo_cmd_tlv_cf */
- /* malo_cmd_tlv_rate */
- } __packed;
- struct malo_cmd_body_rsp_assoc {
- uint16_t capinfo;
- uint16_t status;
- uint16_t assoc_id;
- uint16_t info_len;
- /* uint8_t info[270] */
- } __packed;
- struct malo_cmd_body_80211d {
- uint16_t action;
- /* malo_cmd_tlv_80211d */
- } __packed;
- struct malo_cmd_body_bgscan_config {
- uint16_t action;
- uint8_t enable;
- uint8_t bsstype;
- uint8_t chperscan;
- uint8_t discard;
- uint16_t reserved;
- uint32_t scanintvl;
- uint32_t storecond;
- uint32_t reportcond;
- uint16_t maxscanres;
- } __packed;
- struct malo_cmd_body_bgscan_query {
- uint8_t flush;
- } __packed;
- #define MALO_RATE_BITMAP_DS1 (1 << 0)
- #define MALO_RATE_BITMAP_DS2 (1 << 1)
- #define MALO_RATE_BITMAP_DS5 (1 << 2)
- #define MALO_RATE_BITMAP_DS11 (1 << 3)
- #define MALO_RATE_BITMAP_OFDM6 (1 << 5)
- #define MALO_RATE_BITMAP_OFDM9 (1 << 6)
- #define MALO_RATE_BITMAP_OFDM12 (1 << 7)
- #define MALO_RATE_BITMAP_OFDM18 (1 << 8)
- #define MALO_RATE_BITMAP_OFDM24 (1 << 9)
- #define MALO_RATE_BITMAP_OFDM36 (1 << 10)
- #define MALO_RATE_BITMAP_OFDM48 (1 << 11)
- #define MALO_RATE_BITMAP_OFDM54 (1 << 12)
- #define MALO_RATE_BITMAP_AUTO 0x1fef
- struct malo_cmd_body_rate {
- uint16_t action;
- uint16_t hwauto;
- uint16_t ratebitmap;
- } __packed;
- /*
- * FW command TLV structures
- */
- #define MALO_TLV_TYPE_SSID 0x0000
- #define MALO_TLV_TYPE_RATES 0x0001
- #define MALO_TLV_TYPE_PHY 0x0003
- #define MALO_TLV_TYPE_CF 0x0004
- #define MALO_TLV_TYPE_80211D 0x0007
- #define MALO_TLV_TYPE_CHANLIST 0x0101
- #define MALO_TLV_TYPE_NUMPROBES 0x0102
- #define MALO_TLV_TYPE_PASSEID 0x010a
- struct malo_cmd_tlv_ssid {
- uint16_t type;
- uint16_t size;
- uint8_t data[1];
- } __packed;
- struct malo_cmd_tlv_rates {
- uint16_t type;
- uint16_t size;
- uint8_t data[1];
- } __packed;
- struct malo_cmd_tlv_phy {
- uint16_t type;
- uint16_t size;
- uint8_t data[1];
- } __packed;
- struct malo_cmd_tlv_cf {
- uint16_t type;
- uint16_t size;
- uint8_t data[1];
- } __packed;
- struct malo_cmd_tlv_80211d_param {
- uint8_t firstchannel;
- uint8_t numchannels;
- uint8_t maxtxpower;
- } __packed;
- struct malo_cmd_tlv_80211d {
- uint16_t type;
- uint16_t size;
- uint8_t countrycode[3];
- struct malo_cmd_tlv_80211d_param data[12];
- } __packed;
- struct malo_cmd_tlv_chanlist_param {
- uint8_t radiotype;
- uint8_t channumber;
- uint8_t scantype;
- uint16_t minscantime;
- uint16_t maxscantime;
- } __packed;
- #define CHANNELS 12
- struct malo_cmd_tlv_chanlist {
- uint16_t type;
- uint16_t size;
- struct malo_cmd_tlv_chanlist_param data[CHANNELS];
- } __packed;
- struct malo_cmd_tlv_numprobes {
- uint16_t type;
- uint16_t size;
- uint16_t numprobes;
- } __packed;
- struct malo_cmd_tlv_passeid {
- uint16_t type;
- uint16_t size;
- uint8_t data[1];
- } __packed;
- /* RX descriptor */
- #define MALO_RX_STATUS_OK 0x0001
- struct malo_rx_desc {
- uint16_t status;
- uint8_t snr;
- uint8_t control;
- uint16_t pkglen;
- uint8_t nf;
- uint8_t rate;
- uint32_t pkgoffset;
- uint32_t reserved1;
- uint8_t priority;
- uint8_t reserved2[3];
- } __packed;
- /* TX descriptor */
- struct malo_tx_desc {
- uint32_t status;
- uint32_t control;
- uint32_t pkgoffset;
- uint16_t pkglen;
- uint8_t dstaddrhigh[2];
- uint8_t dstaddrlow[4];
- uint8_t priority;
- uint8_t flags;
- uint8_t reserved[2];
- } __packed;
- /* scanned network */
- struct malo_networks {
- uint8_t bssid[ETHER_ADDR_LEN];
- uint8_t rssi;
- uint8_t timestamp[8];
- uint16_t beaconintvl;
- uint16_t capinfo;
- uint8_t ssid[32];
- uint8_t rates[14];
- uint8_t channel;
- } __packed;
- /*
- * Softc
- */
- struct malo_softc {
- struct device sc_dev;
- struct ieee80211com sc_ic;
- bus_space_tag_t sc_iot;
- bus_space_handle_t sc_ioh;
- int (*sc_newstate)
- (struct ieee80211com *, enum ieee80211_state,
- int);
- int sc_flags;
- uint8_t *sc_fw_h;
- uint8_t *sc_fw_m;
- size_t sc_fw_h_size;
- size_t sc_fw_m_size;
- int sc_cmd_ctxsave;
- void *sc_cmd;
- void *sc_data;
- uint8_t sc_curchan;
- int sc_net_num;
- int sc_net_cur;
- struct malo_networks sc_net[12];
- struct timeout sc_scan_to;
- };
|