#define WI_DELAY 5
#define WI_TIMEOUT (500000/WI_DELAY)
#define WI_PORT0 (0 << 8)
#define WI_PORT1 (1 << 8)
#define WI_PORT2 (2 << 8)
#define WI_PORT3 (3 << 8)
#define WI_PORT4 (4 << 8)
#define WI_PORT5 (5 << 8)
#define WI_PCI_LMEMRES 0x10
#define WI_PCI_LOCALRES 0x14
#define WI_PCI_MEMRES 0x18
#define WI_PCI_IORES 0x1C
#define WI_LOCAL_INTCSR 0x4c
#define WI_LOCAL_INTEN 0x40
#define WI_HFA384X_SWSUPPORT0_OFF 0x28
#define WI_PRISM2STA_MAGIC 0x4A2D
#define WI_PCICOR_OFF 0x26
#define WI_PCICOR_RESET 0x0080
#define WI_DEFAULT_PORT WI_PORT0
#define WI_DEFAULT_NETNAME ""
#define WI_DEFAULT_AP_DENSITY 1
#define WI_DEFAULT_RTS_THRESH 2347
#define WI_DEFAULT_DATALEN 2304
#define WI_DEFAULT_CREATE_IBSS 0
#define WI_DEFAULT_PM_ENABLED 0
#define WI_DEFAULT_MAX_SLEEP 100
#define WI_DEFAULT_ROAMING 1
#define WI_DEFAULT_AUTHTYPE 1
#ifdef __NetBSD__
#define OS_STRING_NAME "NetBSD"
#endif
#ifdef __FreeBSD__
#define OS_STRING_NAME "FreeBSD"
#endif
#ifdef __OpenBSD__
#define OS_STRING_NAME "OpenBSD"
#endif
#define WI_DEFAULT_NODENAME OS_STRING_NAME " WaveLAN/IEEE node"
#define WI_DEFAULT_IBSS OS_STRING_NAME " IBSS"
#define WI_BUS_PCCARD 0
#define WI_BUS_PCI_PLX 1
#define WI_BUS_PCI_NATIVE 2
#define CSR_WRITE_4(sc, reg, val) \
bus_space_write_4((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg), val)
#define CSR_WRITE_2(sc, reg, val) \
bus_space_write_2((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg), val)
#define CSR_WRITE_1(sc, reg, val) \
bus_space_write_1((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg), val)
#define CSR_READ_4(sc, reg) \
bus_space_read_4((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg))
#define CSR_READ_2(sc, reg) \
bus_space_read_2((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg))
#define CSR_READ_1(sc, reg) \
bus_space_read_1((sc)->wi_btag, (sc)->wi_bhandle, \
(sc)->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg)*2 : (reg))
#define CSM_WRITE_1(sc, off, val) \
bus_space_write_1((sc)->wi_bmemtag, (sc)->wi_bmemhandle, off, val)
#define CSM_READ_1(sc, off) \
bus_space_read_1((sc)->wi_bmemtag, (sc)->wi_bmemhandle, off)
#define CSR_WRITE_STREAM_2(sc, reg, val) \
bus_space_write_stream_2(sc->wi_btag, sc->wi_bhandle, \
(sc->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg) * 2 : (reg)), val)
#define CSR_WRITE_MULTI_STREAM_2(sc, reg, val, count) \
bus_space_write_multi_stream_2(sc->wi_btag, sc->wi_bhandle, \
(sc->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg) * 2 : (reg)), val, count)
#define CSR_READ_STREAM_2(sc, reg) \
bus_space_read_stream_2(sc->wi_btag, sc->wi_bhandle, \
(sc->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg) * 2 : (reg)))
#define CSR_READ_MULTI_STREAM_2(sc, reg, buf, count) \
bus_space_read_multi_stream_2(sc->wi_btag, sc->wi_bhandle, \
(sc->wi_bus_type == WI_BUS_PCI_NATIVE ? (reg) * 2 : (reg)), buf, count)
#define WI_IOSIZ 0x40
#define WI_COMMAND 0x00
#define WI_PARAM0 0x02
#define WI_PARAM1 0x04
#define WI_PARAM2 0x06
#define WI_STATUS 0x08
#define WI_RESP0 0x0A
#define WI_RESP1 0x0C
#define WI_RESP2 0x0E
#define WI_CMD_BUSY 0x8000
#define WI_CMD_INI 0x0000
#define WI_CMD_ENABLE 0x0001
#define WI_CMD_DISABLE 0x0002
#define WI_CMD_DIAG 0x0003
#define WI_CMD_ALLOC_MEM 0x000A
#define WI_CMD_TX 0x000B
#define WI_CMD_NOTIFY 0x0010
#define WI_CMD_INQUIRE 0x0011
#define WI_CMD_ACCESS 0x0021
#define WI_CMD_ACCESS_WRITE 0x0121
#define WI_CMD_PROGRAM 0x0022
#define WI_CMD_READEE 0x0030
#define WI_CMD_READMIF 0x0030
#define WI_CMD_WRITEMIF 0x0031
#define WI_CMD_DEBUG 0x0038
#define WI_CMD_CODE_MASK 0x003F
#define WI_TEST_MONITOR 0x0B
#define WI_TEST_STOP 0x0F
#define WI_TEST_CFG_BITS 0x15
#define WI_TEST_CFG_BIT_ALC 0x08
#define WI_RECLAIM 0x0100
#define WI_ACCESS_READ 0x0000
#define WI_ACCESS_WRITE 0x0100
#define WI_PROGRAM_DISABLE 0x0000
#define WI_PROGRAM_ENABLE_RAM 0x0100
#define WI_PROGRAM_ENABLE_NVRAM 0x0200
#define WI_PROGRAM_NVRAM 0x0300
#define WI_STAT_CMD_CODE 0x003F
#define WI_STAT_DIAG_ERR 0x0100
#define WI_STAT_INQ_ERR 0x0500
#define WI_STAT_CMD_RESULT 0x7F00
#define WI_INFO_FID 0x10
#define WI_RX_FID 0x20
#define WI_ALLOC_FID 0x22
#define WI_TX_CMP_FID 0x24
#define WI_SEL0 0x18
#define WI_SEL1 0x1A
#define WI_OFF0 0x1C
#define WI_OFF1 0x1E
#define WI_DATA0 0x36
#define WI_DATA1 0x38
#define WI_BAP0 WI_DATA0
#define WI_BAP1 WI_DATA1
#define WI_OFF_BUSY 0x8000
#define WI_OFF_ERR 0x4000
#define WI_OFF_DATAOFF 0x0FFF
#define WI_EVENT_STAT 0x30
#define WI_INT_EN 0x32
#define WI_EVENT_ACK 0x34
#define WI_EV_TICK 0x8000
#define WI_EV_RES 0x4000
#define WI_EV_INFO_DROP 0x2000
#define WI_EV_NO_CARD 0x0800
#define WI_EV_DUIF_RX 0x0400
#define WI_EV_INFO 0x0080
#define WI_EV_CMD 0x0010
#define WI_EV_ALLOC 0x0008
#define WI_EV_TX_EXC 0x0004
#define WI_EV_TX 0x0002
#define WI_EV_RX 0x0001
#define WI_SW0 0x28
#define WI_SW1 0x2A
#define WI_SW2 0x2C
#define WI_SW3 0x2E
#define WI_CNTL 0x14
#define WI_CNTL_AUX_ENA 0xC000
#define WI_CNTL_AUX_ENA_STAT 0xC000
#define WI_CNTL_AUX_DIS_STAT 0x0000
#define WI_CNTL_AUX_ENA_CNTL 0x8000
#define WI_CNTL_AUX_DIS_CNTL 0x4000
#define WI_AUX_PAGE 0x3A
#define WI_AUX_OFFSET 0x3C
#define WI_AUX_DATA 0x3E
#define WI_AUX_PGSZ 128
#define WI_AUX_KEY0 0xfe01
#define WI_AUX_KEY1 0xdc23
#define WI_AUX_KEY2 0xba45
#define WI_COR 0x40
#define WI_COR_RESET 0x0080
#define WI_COR_IOMODE 0x0041
#define WI_HCR 0x42
#define WI_HCR_4WIRE 0x0010
#define WI_HCR_RUN 0x0007
#define WI_HCR_HOLD 0x000f
#define WI_HCR_EEHOLD 0x00ce
#define WI_COR_OFFSET 0x3e0
#define WI_COR_VALUE 0x41
struct wi_lt_hdr {
u_int16_t wi_len;
u_int16_t wi_type;
};
struct wi_dnld_buf {
u_int16_t wi_buf_pg;
u_int16_t wi_buf_off;
u_int16_t wi_buf_len;
};
struct wi_memsz {
u_int16_t wi_mem_ram;
u_int16_t wi_mem_nvram;
};
struct wi_ver {
u_int16_t wi_ver[4];
};
#define WI_NIC_LUCENT_ID 0x0001
#define WI_NIC_LUCENT_STR "Lucent Technologies, WaveLAN/IEEE"
#define WI_NIC_SONY_ID 0x0002
#define WI_NIC_SONY_STR "Sony WaveLAN/IEEE"
#define WI_NIC_LUCENT_EMB_ID 0x0005
#define WI_NIC_LUCENT_EMB_STR "Lucent Embedded WaveLAN/IEEE"
#define WI_NIC_EVB2_ID 0x8000
#define WI_NIC_EVB2_STR "RF:PRISM2 MAC:HFA3841"
#define WI_NIC_HWB3763_ID 0x8001
#define WI_NIC_HWB3763_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3763 rev.B"
#define WI_NIC_HWB3163_ID 0x8002
#define WI_NIC_HWB3163_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.A"
#define WI_NIC_HWB3163B_ID 0x8003
#define WI_NIC_HWB3163B_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.B"
#define WI_NIC_EVB3_ID 0x8004
#define WI_NIC_EVB3_STR "RF:PRISM2 MAC:HFA3842 CARD:HFA3842 EVAL"
#define WI_NIC_HWB1153_ID 0x8007
#define WI_NIC_HWB1153_STR "RF:PRISM1 MAC:HFA3841 CARD:HWB1153"
#define WI_NIC_P2_SST_ID 0x8008
#define WI_NIC_P2_SST_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163-SST-flash"
#define WI_NIC_EVB2_SST_ID 0x8009
#define WI_NIC_EVB2_SST_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163-SST-flash"
#define WI_NIC_3842_EVA_ID 0x800A
#define WI_NIC_3842_EVA_STR "RF:PRISM2 MAC:HFA3842 CARD:HFA3842 EVAL"
#define WI_NIC_3842_PCMCIA_AMD_ID 0x800B
#define WI_NIC_3842_PCMCIA_SST_ID 0x800C
#define WI_NIC_3842_PCMCIA_ATL_ID 0x800D
#define WI_NIC_3842_PCMCIA_ATS_ID 0x800E
#define WI_NIC_3842_PCMCIA_STR "RF:PRISM2.5 MAC:ISL3873"
#define WI_NIC_3842_MINI_AMD_ID 0x8012
#define WI_NIC_3842_MINI_SST_ID 0x8013
#define WI_NIC_3842_MINI_ATL_ID 0x8014
#define WI_NIC_3842_MINI_ATS_ID 0x8015
#define WI_NIC_3842_MINI_STR "RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)"
#define WI_NIC_3842_PCI_AMD_ID 0x8016
#define WI_NIC_3842_PCI_SST_ID 0x8017
#define WI_NIC_3842_PCI_ATL_ID 0x8018
#define WI_NIC_3842_PCI_ATS_ID 0x8019
#define WI_NIC_3842_PCI_STR "RF:PRISM2.5 MAC:ISL3874A(PCI-bridge)"
#define WI_NIC_P3_PCMCIA_AMD_ID 0x801A
#define WI_NIC_P3_PCMCIA_SST_ID 0x801B
#define WI_NIC_P3_PCMCIA_ATL_ID 0x801C
#define WI_NIC_P3_PCMCIA_ATS_ID 0x801D
#define WI_NIC_P3_PCMCIA_STR "RF:PRISM3(PCMCIA)"
#define WI_NIC_P3_USB_AMD_ID 0x801E
#define WI_NIC_P3_USB_SST_ID 0x801F
#define WI_NIC_P3_USB_ATL_ID 0x8020
#define WI_NIC_P3_MINI_AMD_ID 0x8021
#define WI_NIC_P3_MINI_SST_ID 0x8022
#define WI_NIC_P3_MINI_ATL_ID 0x8023
#define WI_NIC_P3_MINI_ATS_ID 0x8024
#define WI_NIC_P3_MINI_STR "RF:PRISM3(Mini-PCI)"
struct wi_ltv_domains {
u_int16_t wi_len;
u_int16_t wi_type;
u_int16_t wi_num_dom;
u_int8_t wi_domains[10];
};
struct wi_cis {
u_int16_t wi_cis[240];
};
struct wi_commqual {
u_int16_t wi_coms_qual;
u_int16_t wi_sig_lvl;
u_int16_t wi_noise_lvl;
};
struct wi_scalethresh {
u_int16_t wi_energy_detect;
u_int16_t wi_carrier_detect;
u_int16_t wi_defer;
u_int16_t wi_cell_search;
u_int16_t wi_out_of_range;
u_int16_t wi_delta_snr;
};
struct wi_pcf {
u_int16_t wi_medium_occupancy_limit;
u_int16_t wi_cfp_period;
u_int16_t wi_cfp_max_duration;
};
#define WI_PORTTYPE_IBSS 0x0
#define WI_PORTTYPE_BSS 0x1
#define WI_PORTTYPE_WDS 0x2
#define WI_PORTTYPE_ADHOC 0x3
#define WI_PORTTYPE_APSILENT 0x5
#define WI_PORTTYPE_HOSTAP 0x6
struct wi_macaddr {
u_int8_t wi_mac_addr[6];
};
struct wi_ssid {
u_int16_t wi_len;
u_int8_t wi_ssid[32];
};
struct wi_nodename {
u_int16_t wi_nodelen;
u_int8_t wi_nodename[32];
};
struct wi_mcast {
struct ether_addr wi_mcast[16];
};
struct wi_joinreq {
struct ether_addr wi_bssid;
u_int16_t wi_chan;
};
#define WI_SUPPRATES_1M 0x0001
#define WI_SUPPRATES_2M 0x0002
#define WI_SUPPRATES_5M 0x0004
#define WI_SUPPRATES_11M 0x0008
#define WI_RATES_BITS "\20\0011M\0022M\0035.5M\00411M"
#define WI_INFO_NOTIFY 0xF000
#define WI_INFO_COUNTERS 0xF100
#define WI_INFO_SCAN_RESULTS 0xF101
#define WI_INFO_HOST_SCAN_RESULTS 0xF104
#define WI_INFO_LINK_STAT 0xF200
#define WI_INFO_LINK_STAT_CONNECTED 1
#define WI_INFO_LINK_STAT_DISCONNECTED 2
#define WI_INFO_LINK_STAT_AP_CHG 3
#define WI_INFO_LINK_STAT_AP_OOR 4
#define WI_INFO_LINK_STAT_AP_INR 5
#define WI_INFO_LINK_STAT_ASSOC_FAILED 6
#define WI_INFO_ASSOC_STAT 0xF201
#define WI_INFO_AUTH_REQUEST 0xF202
#define WI_INFO_POWERSAVE_COUNT 0xF203
struct wi_assoc {
u_int16_t wi_assoc_stat;
#define ASSOC 1
#define REASSOC 2
#define DISASSOC 3
#define ASSOCFAIL 4
#define AUTHFAIL 5
u_int8_t wi_assoc_sta[6];
u_int8_t wi_assoc_osta[6];
u_int16_t wi_assoc_reason;
u_int16_t wi_assoc_reserve;
};
struct wi_scan_header {
u_int16_t wi_reserve;
u_int16_t wi_reason;
};
struct wi_scan_data_p2 {
u_int16_t wi_chid;
u_int16_t wi_noise;
u_int16_t wi_signal;
u_int8_t wi_bssid[6];
u_int16_t wi_interval;
u_int16_t wi_capinfo;
u_int16_t wi_namelen;
u_int8_t wi_name[32];
u_int16_t wi_suprate[5];
u_int16_t wi_rate;
#define WI_APRATE_1 0x0A
#define WI_APRATE_2 0x14
#define WI_APRATE_5 0x37
#define WI_APRATE_11 0x6E
};
struct wi_scan_data {
u_int16_t wi_chid;
u_int16_t wi_noise;
u_int16_t wi_signal;
u_int8_t wi_bssid[6];
u_int16_t wi_interval;
u_int16_t wi_capinfo;
u_int16_t wi_namelen;
u_int8_t wi_name[32];
};
struct wi_frame {
u_int16_t wi_status;
u_int16_t wi_rx_tstamp1;
u_int16_t wi_rx_tstamp0;
u_int8_t wi_rx_silence;
u_int8_t wi_rx_signal;
u_int8_t wi_rx_rate;
u_int8_t wi_rx_flow;
u_int8_t wi_tx_rtry;
u_int8_t wi_tx_rate;
u_int16_t wi_tx_ctl;
struct ieee80211_frame_addr4 wi_whdr;
u_int16_t wi_dat_len;
struct ether_header wi_ehdr;
} __attribute__((__packed__));
#define WI_TXSTAT_RET_ERR 0x0001
#define WI_TXSTAT_AGED_ERR 0x0002
#define WI_TXSTAT_DISCONNECT 0x0004
#define WI_TXSTAT_FORM_ERR 0x0008
#define WI_STAT_BADCRC 0x0001
#define WI_STAT_UNDECRYPTABLE 0x0002
#define WI_STAT_ERRSTAT 0x0003
#define WI_STAT_MAC_PORT 0x0700
#define WI_STAT_PCF 0x1000
#define WI_RXSTAT_MSG_TYPE 0xE000
#define WI_STAT_1042 0x2000
#define WI_STAT_TUNNEL 0x4000
#define WI_STAT_WMP_MSG 0x6000
#define WI_STAT_MGMT 0x8000
#define WI_ENC_TX_E_II 0x0E
#define WI_ENC_TX_1042 0x00
#define WI_ENC_TX_TUNNEL 0xF8
#define WI_TXCNTL_TX_OK 0x0002
#define WI_TXCNTL_TX_EX 0x0004
#define WI_TXCNTL_STRUCT_TYPE 0x0018
#define WI_ENC_TX_802_3 0x00
#define WI_ENC_TX_802_11 0x08
#define WI_TXCNTL_ALTRTRY 0x0020
#define WI_TXCNTL_NOCRYPT 0x0080
#define WI_HFA386X_CR_A_D_TEST_MODES2 0x1A
#define WI_HFA386X_CR_MANUAL_TX_POWER 0x3E
#ifdef IEEE80211_RADIOTAP_F_CFP
#define WI_RX_RADIOTAP_PRESENT \
((1 << IEEE80211_RADIOTAP_TSFT) | \
(1 << IEEE80211_RADIOTAP_FLAGS) | \
(1 << IEEE80211_RADIOTAP_RATE) | \
(1 << IEEE80211_RADIOTAP_CHANNEL) | \
(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \
(1 << IEEE80211_RADIOTAP_DB_ANTNOISE))
struct wi_rx_radiotap_header {
struct ieee80211_radiotap_header wr_ihdr;
u_int64_t wr_tsf;
u_int8_t wr_flags;
u_int8_t wr_rate;
u_int16_t wr_chan_freq;
u_int16_t wr_chan_flags;
u_int8_t wr_antsignal;
u_int8_t wr_antnoise;
};
#define WI_TX_RADIOTAP_PRESENT \
((1 << IEEE80211_RADIOTAP_FLAGS) | \
(1 << IEEE80211_RADIOTAP_RATE) | \
(1 << IEEE80211_RADIOTAP_CHANNEL))
struct wi_tx_radiotap_header {
struct ieee80211_radiotap_header wt_ihdr;
u_int8_t wt_flags;
u_int8_t wt_rate;
u_int16_t wt_chan_freq;
u_int16_t wt_chan_flags;
};
#endif