/* $OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $ */ /*- * Copyright (c) 2006 * Damien Bergamini * * 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. */ #define UATH_CONFIG_NO 1 #define UATH_IFACE_INDEX 0 /* all fields are big endian */ struct uath_fwblock { uint32_t flags; #define UATH_WRITE_BLOCK (1 << 4) uint32_t len; #define UATH_MAX_FWBLOCK_SIZE 2048 uint32_t total; uint32_t remain; uint32_t rxtotal; uint32_t pad[123]; } __packed; #define UATH_MAX_RXCMDSZ 512 #define UATH_MAX_TXCMDSZ 512 struct uath_cmd_hdr { uint32_t len; uint32_t code; #define UATH_CMD_SETUP 0x01 #define UATH_CMD_02 0x02 #define UATH_CMD_READ_MAC 0x03 #define UATH_CMD_WRITE_MAC 0x04 #define UATH_CMD_READ_EEPROM 0x05 #define UATH_CMD_STATS 0x06 #define UATH_CMD_07 0x07 #define UATH_CMD_SHUTDOWN 0x08 #define UATH_CMD_0B 0x0b #define UATH_CMD_0C 0x0c #define UATH_CMD_0F 0x0f #define UATH_NOTIF_STATS 0x10 #define UATH_NOTIF_READY 0x12 #define UATH_NOTIF_TX 0x13 #define UATH_CMD_15 0x15 #define UATH_CMD_SET_LED 0x17 #define UATH_CMD_SET_XLED 0x18 #define UATH_CMD_1B 0x1b #define UATH_CMD_1E 0x1e #define UATH_CMD_CRYPTO 0x1d #define UATH_CMD_SET_STATE 0x20 #define UATH_CMD_SET_BSSID 0x21 #define UATH_CMD_24 0x24 #define UATH_CMD_SET_RATES 0x26 #define UATH_CMD_27 0x27 #define UATH_CMD_2E 0x2e #define UATH_CMD_31 0x31 #define UATH_CMD_SET_FILTER 0x32 #define UATH_CMD_SET_CHAN 0x34 #define UATH_CMD_RESET 0x35 #define UATH_CMD_SET_QUEUE 0x3a #define UATH_CMD_RESET_QUEUE 0x3b uint32_t priv; /* driver private data */ uint32_t magic; uint32_t reserved2[4]; } __packed; struct uath_rx_desc { uint32_t len; uint32_t reserved1[8]; uint32_t rssi; uint32_t freq; uint32_t reserved2[5]; } __packed; #define UATH_MAKECTL(qid, len) htobe32((qid) << 16 | (len)) struct uath_tx_desc { uint32_t len; uint32_t priv; /* driver private data */ uint32_t type; #define UATH_TX_DATA 0xe #define UATH_TX_NULL 0xf uint32_t magic; uint32_t dest; #define UATH_ID_BSS 2 #define UATH_ID_BROADCAST 0xffffffff uint32_t flags; #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */ uint32_t paylen; } __packed; /* structure for command UATH_CMD_SETUP */ struct uath_cmd_setup { uint32_t magic1; uint32_t magic2; uint32_t magic3; uint32_t magic4; } __packed; /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */ struct uath_read_mac { uint32_t len; uint8_t data[32]; } __packed; /* structure for command UATH_CMD_WRITE_MAC */ struct uath_write_mac { uint32_t reg; uint32_t len; uint8_t data[32]; } __packed; /* structure for command UATH_CMD_0B */ struct uath_cmd_0b { uint32_t code; uint32_t reserved; uint32_t size; uint8_t data[44]; } __packed; /* structure for command UATH_CMD_0C */ struct uath_cmd_0c { uint32_t magic1; uint32_t magic2; uint32_t magic3; } __packed; /* structure for command UATH_CMD_SET_LED */ struct uath_cmd_led { uint32_t which; #define UATH_LED_LINK 0 #define UATH_LED_ACTIVITY 1 uint32_t state; #define UATH_LED_OFF 0 #define UATH_LED_ON 1 } __packed; /* structure for command UATH_CMD_SET_XLED */ struct uath_cmd_xled { uint32_t which; uint32_t rate; uint32_t mode; } __packed; /* structure for command UATH_CMD_CRYPTO */ struct uath_cmd_crypto { uint32_t keyidx; #define UATH_DEFAULT_KEY 6 uint32_t magic1; uint32_t size; uint32_t reserved1; uint32_t mask; uint8_t addr[IEEE80211_ADDR_LEN]; uint16_t reserved2; uint32_t flags; uint32_t reserved3[2]; uint8_t key[68]; uint8_t magic2[136]; uint8_t magic3[136]; } __packed; /* structure for command UATH_CMD_SET_RATES */ struct uath_cmd_rates { uint32_t magic1; uint32_t reserved; uint32_t size; uint8_t nrates; #define UATH_MAX_NRATES 30 uint8_t rates[UATH_MAX_NRATES]; } __packed; /* structure for command UATH_CMD_SET_CHAN */ struct uath_set_chan { uint32_t flags; uint32_t freq; uint32_t magic1; uint32_t magic2; uint32_t reserved1; uint32_t magic3; uint32_t reserved2; } __packed; /* structure for command UATH_CMD_SET_QUEUE */ struct uath_qinfo { uint32_t qid; #define UATH_AC_TO_QID(ac) (ac) /* id function */ uint32_t size; uint32_t ac; uint32_t aifsn; uint32_t logcwmin; uint32_t logcwmax; uint32_t txop; uint32_t acm; uint32_t magic1; uint32_t magic2; } __packed; /* structure for command UATH_CMD_31 */ struct uath_cmd_31 { uint32_t magic1; uint32_t magic2; } __packed; /* structure for command UATH_CMD_SET_FILTER */ struct uath_cmd_filter { uint32_t filter; uint32_t flags; } __packed; /* structure for command UATH_CMD_SET_BSSID */ struct uath_cmd_bssid { uint32_t reserved1; uint32_t flags1; uint32_t flags2; uint32_t reserved2; uint32_t len; uint8_t bssid[IEEE80211_ADDR_LEN]; } __packed; #define UATH_EEPROM_MACADDR 0x0b #define UATH_EEPROM_RXBUFSZ 0x0f #define UATH_MAX_TXBUFSZ \ (sizeof (uint32_t) + sizeof (struct uath_tx_desc) + IEEE80211_MAX_LEN) #define UATH_MIN_RXBUFSZ \ (((sizeof (uint32_t) + sizeof (struct ieee80211_frame_min) + \ sizeof (struct uath_rx_desc)) + 3) & ~3)