1*0d8d0da2Sdamien /* $OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $ */ 217849d02Sdamien 317849d02Sdamien /*- 417849d02Sdamien * Copyright (c) 2006 517849d02Sdamien * Damien Bergamini <damien.bergamini@free.fr> 617849d02Sdamien * 717849d02Sdamien * Permission to use, copy, modify, and distribute this software for any 817849d02Sdamien * purpose with or without fee is hereby granted, provided that the above 917849d02Sdamien * copyright notice and this permission notice appear in all copies. 1017849d02Sdamien * 1117849d02Sdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1217849d02Sdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1317849d02Sdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1417849d02Sdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1517849d02Sdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1617849d02Sdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1717849d02Sdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1817849d02Sdamien */ 1917849d02Sdamien 2017849d02Sdamien #define UATH_CONFIG_NO 1 2117849d02Sdamien #define UATH_IFACE_INDEX 0 2217849d02Sdamien 2317849d02Sdamien /* all fields are big endian */ 2417849d02Sdamien struct uath_fwblock { 2517849d02Sdamien uint32_t flags; 2617849d02Sdamien #define UATH_WRITE_BLOCK (1 << 4) 2717849d02Sdamien 2817849d02Sdamien uint32_t len; 2917849d02Sdamien #define UATH_MAX_FWBLOCK_SIZE 2048 3017849d02Sdamien 3117849d02Sdamien uint32_t total; 3217849d02Sdamien uint32_t remain; 3317849d02Sdamien uint32_t rxtotal; 3417849d02Sdamien uint32_t pad[123]; 3517849d02Sdamien } __packed; 3617849d02Sdamien 3717849d02Sdamien #define UATH_MAX_RXCMDSZ 512 3817849d02Sdamien #define UATH_MAX_TXCMDSZ 512 3917849d02Sdamien 4017849d02Sdamien struct uath_cmd_hdr { 4117849d02Sdamien uint32_t len; 4217849d02Sdamien uint32_t code; 4317849d02Sdamien #define UATH_CMD_SETUP 0x01 4417849d02Sdamien #define UATH_CMD_02 0x02 4517849d02Sdamien #define UATH_CMD_READ_MAC 0x03 4617849d02Sdamien #define UATH_CMD_WRITE_MAC 0x04 4717849d02Sdamien #define UATH_CMD_READ_EEPROM 0x05 4817849d02Sdamien #define UATH_CMD_STATS 0x06 4917849d02Sdamien #define UATH_CMD_07 0x07 5017849d02Sdamien #define UATH_CMD_SHUTDOWN 0x08 5117849d02Sdamien #define UATH_CMD_0B 0x0b 5217849d02Sdamien #define UATH_CMD_0C 0x0c 5317849d02Sdamien #define UATH_CMD_0F 0x0f 5417849d02Sdamien #define UATH_NOTIF_STATS 0x10 5517849d02Sdamien #define UATH_NOTIF_READY 0x12 5617849d02Sdamien #define UATH_NOTIF_TX 0x13 5717849d02Sdamien #define UATH_CMD_15 0x15 5817849d02Sdamien #define UATH_CMD_SET_LED 0x17 5917849d02Sdamien #define UATH_CMD_SET_XLED 0x18 6017849d02Sdamien #define UATH_CMD_1B 0x1b 6117849d02Sdamien #define UATH_CMD_1E 0x1e 6217849d02Sdamien #define UATH_CMD_CRYPTO 0x1d 6317849d02Sdamien #define UATH_CMD_SET_STATE 0x20 6417849d02Sdamien #define UATH_CMD_SET_BSSID 0x21 6517849d02Sdamien #define UATH_CMD_24 0x24 6617849d02Sdamien #define UATH_CMD_SET_RATES 0x26 6717849d02Sdamien #define UATH_CMD_27 0x27 6817849d02Sdamien #define UATH_CMD_2E 0x2e 6917849d02Sdamien #define UATH_CMD_31 0x31 7017849d02Sdamien #define UATH_CMD_SET_FILTER 0x32 7117849d02Sdamien #define UATH_CMD_SET_CHAN 0x34 7217849d02Sdamien #define UATH_CMD_RESET 0x35 7317849d02Sdamien #define UATH_CMD_SET_QUEUE 0x3a 7417849d02Sdamien #define UATH_CMD_RESET_QUEUE 0x3b 7517849d02Sdamien 7617849d02Sdamien uint32_t priv; /* driver private data */ 7717849d02Sdamien uint32_t magic; 7817849d02Sdamien uint32_t reserved2[4]; 7917849d02Sdamien } __packed; 8017849d02Sdamien 8117849d02Sdamien struct uath_rx_desc { 8217849d02Sdamien uint32_t len; 8317849d02Sdamien uint32_t reserved1[8]; 8417849d02Sdamien uint32_t rssi; 8517849d02Sdamien uint32_t freq; 8617849d02Sdamien uint32_t reserved2[5]; 8717849d02Sdamien } __packed; 8817849d02Sdamien 8917849d02Sdamien #define UATH_MAKECTL(qid, len) htobe32((qid) << 16 | (len)) 9017849d02Sdamien 9117849d02Sdamien struct uath_tx_desc { 9217849d02Sdamien uint32_t len; 9317849d02Sdamien uint32_t priv; /* driver private data */ 9417849d02Sdamien uint32_t type; 9517849d02Sdamien #define UATH_TX_DATA 0xe 9617849d02Sdamien #define UATH_TX_NULL 0xf 9717849d02Sdamien 9817849d02Sdamien uint32_t magic; 9917849d02Sdamien uint32_t dest; 10017849d02Sdamien #define UATH_ID_BSS 2 10117849d02Sdamien #define UATH_ID_BROADCAST 0xffffffff 10217849d02Sdamien 10317849d02Sdamien uint32_t flags; 10417849d02Sdamien #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */ 10517849d02Sdamien 10617849d02Sdamien uint32_t paylen; 10717849d02Sdamien } __packed; 10817849d02Sdamien 10917849d02Sdamien /* structure for command UATH_CMD_SETUP */ 11017849d02Sdamien struct uath_cmd_setup { 11117849d02Sdamien uint32_t magic1; 11217849d02Sdamien uint32_t magic2; 11317849d02Sdamien uint32_t magic3; 11417849d02Sdamien uint32_t magic4; 11517849d02Sdamien } __packed; 11617849d02Sdamien 11717849d02Sdamien /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */ 11817849d02Sdamien struct uath_read_mac { 11917849d02Sdamien uint32_t len; 12017849d02Sdamien uint8_t data[32]; 12117849d02Sdamien } __packed; 12217849d02Sdamien 12317849d02Sdamien /* structure for command UATH_CMD_WRITE_MAC */ 12417849d02Sdamien struct uath_write_mac { 12517849d02Sdamien uint32_t reg; 12617849d02Sdamien uint32_t len; 12717849d02Sdamien uint8_t data[32]; 12817849d02Sdamien } __packed; 12917849d02Sdamien 13017849d02Sdamien /* structure for command UATH_CMD_0B */ 13117849d02Sdamien struct uath_cmd_0b { 13217849d02Sdamien uint32_t code; 13317849d02Sdamien uint32_t reserved; 13417849d02Sdamien uint32_t size; 13517849d02Sdamien uint8_t data[44]; 13617849d02Sdamien } __packed; 13717849d02Sdamien 13817849d02Sdamien /* structure for command UATH_CMD_0C */ 13917849d02Sdamien struct uath_cmd_0c { 14017849d02Sdamien uint32_t magic1; 14117849d02Sdamien uint32_t magic2; 14217849d02Sdamien uint32_t magic3; 14317849d02Sdamien } __packed; 14417849d02Sdamien 14517849d02Sdamien /* structure for command UATH_CMD_SET_LED */ 14617849d02Sdamien struct uath_cmd_led { 14717849d02Sdamien uint32_t which; 14817849d02Sdamien #define UATH_LED_LINK 0 14917849d02Sdamien #define UATH_LED_ACTIVITY 1 15017849d02Sdamien 15117849d02Sdamien uint32_t state; 15217849d02Sdamien #define UATH_LED_OFF 0 15317849d02Sdamien #define UATH_LED_ON 1 15417849d02Sdamien } __packed; 15517849d02Sdamien 15617849d02Sdamien /* structure for command UATH_CMD_SET_XLED */ 15717849d02Sdamien struct uath_cmd_xled { 15817849d02Sdamien uint32_t which; 15917849d02Sdamien uint32_t rate; 16017849d02Sdamien uint32_t mode; 16117849d02Sdamien } __packed; 16217849d02Sdamien 16317849d02Sdamien /* structure for command UATH_CMD_CRYPTO */ 16417849d02Sdamien struct uath_cmd_crypto { 16517849d02Sdamien uint32_t keyidx; 16617849d02Sdamien #define UATH_DEFAULT_KEY 6 16717849d02Sdamien 16817849d02Sdamien uint32_t magic1; 16917849d02Sdamien uint32_t size; 17017849d02Sdamien uint32_t reserved1; 17117849d02Sdamien uint32_t mask; 17217849d02Sdamien uint8_t addr[IEEE80211_ADDR_LEN]; 17317849d02Sdamien uint16_t reserved2; 17417849d02Sdamien uint32_t flags; 17517849d02Sdamien uint32_t reserved3[2]; 17617849d02Sdamien uint8_t key[68]; 17717849d02Sdamien uint8_t magic2[136]; 17817849d02Sdamien uint8_t magic3[136]; 17917849d02Sdamien } __packed; 18017849d02Sdamien 18117849d02Sdamien /* structure for command UATH_CMD_SET_RATES */ 18217849d02Sdamien struct uath_cmd_rates { 18317849d02Sdamien uint32_t magic1; 18417849d02Sdamien uint32_t reserved; 185*0d8d0da2Sdamien uint32_t size; 18617849d02Sdamien uint8_t nrates; 187*0d8d0da2Sdamien #define UATH_MAX_NRATES 30 188*0d8d0da2Sdamien uint8_t rates[UATH_MAX_NRATES]; 18917849d02Sdamien } __packed; 19017849d02Sdamien 19117849d02Sdamien /* structure for command UATH_CMD_SET_CHAN */ 19217849d02Sdamien struct uath_set_chan { 19317849d02Sdamien uint32_t flags; 19417849d02Sdamien uint32_t freq; 19517849d02Sdamien uint32_t magic1; 19617849d02Sdamien uint32_t magic2; 19717849d02Sdamien uint32_t reserved1; 19817849d02Sdamien uint32_t magic3; 19917849d02Sdamien uint32_t reserved2; 20017849d02Sdamien } __packed; 20117849d02Sdamien 20217849d02Sdamien /* structure for command UATH_CMD_SET_QUEUE */ 20317849d02Sdamien struct uath_qinfo { 20417849d02Sdamien uint32_t qid; 20517849d02Sdamien #define UATH_AC_TO_QID(ac) (ac) /* id function */ 20617849d02Sdamien 20717849d02Sdamien uint32_t size; 20817849d02Sdamien uint32_t ac; 20917849d02Sdamien uint32_t aifsn; 21017849d02Sdamien uint32_t logcwmin; 21117849d02Sdamien uint32_t logcwmax; 21217849d02Sdamien uint32_t txop; 21317849d02Sdamien uint32_t acm; 21417849d02Sdamien uint32_t magic1; 21517849d02Sdamien uint32_t magic2; 21617849d02Sdamien } __packed; 21717849d02Sdamien 21817849d02Sdamien /* structure for command UATH_CMD_31 */ 21917849d02Sdamien struct uath_cmd_31 { 22017849d02Sdamien uint32_t magic1; 22117849d02Sdamien uint32_t magic2; 22217849d02Sdamien } __packed; 22317849d02Sdamien 22417849d02Sdamien /* structure for command UATH_CMD_SET_FILTER */ 22517849d02Sdamien struct uath_cmd_filter { 22617849d02Sdamien uint32_t filter; 22717849d02Sdamien uint32_t flags; 22817849d02Sdamien } __packed; 22917849d02Sdamien 23017849d02Sdamien /* structure for command UATH_CMD_SET_BSSID */ 23117849d02Sdamien struct uath_cmd_bssid { 23217849d02Sdamien uint32_t reserved1; 23317849d02Sdamien uint32_t flags1; 23417849d02Sdamien uint32_t flags2; 23517849d02Sdamien uint32_t reserved2; 23617849d02Sdamien uint32_t len; 23717849d02Sdamien uint8_t bssid[IEEE80211_ADDR_LEN]; 23817849d02Sdamien } __packed; 23917849d02Sdamien 24017849d02Sdamien 24117849d02Sdamien #define UATH_EEPROM_MACADDR 0x0b 24217849d02Sdamien #define UATH_EEPROM_RXBUFSZ 0x0f 24317849d02Sdamien 24417849d02Sdamien #define UATH_MAX_TXBUFSZ \ 24517849d02Sdamien (sizeof (uint32_t) + sizeof (struct uath_tx_desc) + IEEE80211_MAX_LEN) 24617849d02Sdamien 24717849d02Sdamien #define UATH_MIN_RXBUFSZ \ 24817849d02Sdamien (((sizeof (uint32_t) + sizeof (struct ieee80211_frame_min) + \ 24917849d02Sdamien sizeof (struct uath_rx_desc)) + 3) & ~3) 250