1*cf67a9a2Skrw /* $OpenBSD: if_runvar.h,v 1.13 2020/11/27 14:45:03 krw Exp $ */ 230aa40ebSdamien 330aa40ebSdamien /*- 430aa40ebSdamien * Copyright (c) 2008,2009 Damien Bergamini <damien.bergamini@free.fr> 530aa40ebSdamien * 630aa40ebSdamien * Permission to use, copy, modify, and distribute this software for any 730aa40ebSdamien * purpose with or without fee is hereby granted, provided that the above 830aa40ebSdamien * copyright notice and this permission notice appear in all copies. 930aa40ebSdamien * 1030aa40ebSdamien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1130aa40ebSdamien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1230aa40ebSdamien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1330aa40ebSdamien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1430aa40ebSdamien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1530aa40ebSdamien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1630aa40ebSdamien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1730aa40ebSdamien */ 1830aa40ebSdamien 1930aa40ebSdamien #define RUN_MAX_RXSZ \ 2030aa40ebSdamien 4096 2130aa40ebSdamien #if 0 2230aa40ebSdamien (sizeof (uint32_t) + \ 2330aa40ebSdamien sizeof (struct rt2860_rxwi) + \ 2430aa40ebSdamien sizeof (uint16_t) + \ 2530aa40ebSdamien MCLBYTES + \ 2630aa40ebSdamien sizeof (struct rt2870_rxd)) 2730aa40ebSdamien #endif 2830aa40ebSdamien /* NB: "11" is the maximum number of padding bytes needed for Tx */ 2930aa40ebSdamien #define RUN_MAX_TXSZ \ 3030aa40ebSdamien (sizeof (struct rt2870_txd) + \ 31d80de052Sstsp sizeof (struct rt2860_txwi) + \ 3230aa40ebSdamien MCLBYTES + 11) 3330aa40ebSdamien 3430aa40ebSdamien #define RUN_TX_TIMEOUT 5000 /* ms */ 3530aa40ebSdamien 3630aa40ebSdamien #define RUN_RX_RING_COUNT 1 3730aa40ebSdamien #define RUN_TX_RING_COUNT 8 3830aa40ebSdamien 39d80de052Sstsp #define RT2870_WCID_MAX 64 4030aa40ebSdamien #define RUN_AID2WCID(aid) ((aid) & 0xff) 4130aa40ebSdamien 4230aa40ebSdamien struct run_rx_radiotap_header { 4330aa40ebSdamien struct ieee80211_radiotap_header wr_ihdr; 4430aa40ebSdamien uint8_t wr_flags; 4530aa40ebSdamien uint8_t wr_rate; 4630aa40ebSdamien uint16_t wr_chan_freq; 4730aa40ebSdamien uint16_t wr_chan_flags; 4830aa40ebSdamien uint8_t wr_dbm_antsignal; 4930aa40ebSdamien uint8_t wr_antenna; 5030aa40ebSdamien uint8_t wr_antsignal; 5130aa40ebSdamien } __packed; 5230aa40ebSdamien 5330aa40ebSdamien #define RUN_RX_RADIOTAP_PRESENT \ 5430aa40ebSdamien (1 << IEEE80211_RADIOTAP_FLAGS | \ 5530aa40ebSdamien 1 << IEEE80211_RADIOTAP_RATE | \ 5630aa40ebSdamien 1 << IEEE80211_RADIOTAP_CHANNEL | \ 5730aa40ebSdamien 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL | \ 5830aa40ebSdamien 1 << IEEE80211_RADIOTAP_ANTENNA | \ 5930aa40ebSdamien 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) 6030aa40ebSdamien 6130aa40ebSdamien struct run_tx_radiotap_header { 6230aa40ebSdamien struct ieee80211_radiotap_header wt_ihdr; 6330aa40ebSdamien uint8_t wt_flags; 6430aa40ebSdamien uint8_t wt_rate; 6530aa40ebSdamien uint16_t wt_chan_freq; 6630aa40ebSdamien uint16_t wt_chan_flags; 6730aa40ebSdamien } __packed; 6830aa40ebSdamien 6930aa40ebSdamien #define RUN_TX_RADIOTAP_PRESENT \ 7030aa40ebSdamien (1 << IEEE80211_RADIOTAP_FLAGS | \ 7130aa40ebSdamien 1 << IEEE80211_RADIOTAP_RATE | \ 72eb1adcecSmpi 1 << IEEE80211_RADIOTAP_CHANNEL) 7330aa40ebSdamien 7430aa40ebSdamien struct run_softc; 7530aa40ebSdamien 7630aa40ebSdamien struct run_tx_data { 7730aa40ebSdamien struct run_softc *sc; 78ab0b1be7Smglocker struct usbd_xfer *xfer; 7930aa40ebSdamien uint8_t *buf; 8030aa40ebSdamien uint8_t qid; 8130aa40ebSdamien }; 8230aa40ebSdamien 8330aa40ebSdamien struct run_rx_data { 8430aa40ebSdamien struct run_softc *sc; 85ab0b1be7Smglocker struct usbd_xfer *xfer; 8630aa40ebSdamien uint8_t *buf; 8730aa40ebSdamien }; 8830aa40ebSdamien 8930aa40ebSdamien struct run_tx_ring { 9030aa40ebSdamien struct run_tx_data data[RUN_TX_RING_COUNT]; 91ab0b1be7Smglocker struct usbd_pipe *pipeh; 9230aa40ebSdamien int cur; 9330aa40ebSdamien int queued; 9430aa40ebSdamien uint8_t pipe_no; 9530aa40ebSdamien }; 9630aa40ebSdamien 9730aa40ebSdamien struct run_rx_ring { 9830aa40ebSdamien struct run_rx_data data[RUN_RX_RING_COUNT]; 99ab0b1be7Smglocker struct usbd_pipe *pipeh; 10030aa40ebSdamien uint8_t pipe_no; 10130aa40ebSdamien }; 10230aa40ebSdamien 10330aa40ebSdamien struct run_host_cmd { 10430aa40ebSdamien void (*cb)(struct run_softc *, void *); 10530aa40ebSdamien uint8_t data[256]; 10630aa40ebSdamien }; 10730aa40ebSdamien 10830aa40ebSdamien struct run_cmd_newstate { 10930aa40ebSdamien enum ieee80211_state state; 11030aa40ebSdamien int arg; 11130aa40ebSdamien }; 11230aa40ebSdamien 11330aa40ebSdamien struct run_cmd_key { 11430aa40ebSdamien struct ieee80211_key key; 115*cf67a9a2Skrw struct ieee80211_node *ni; 11630aa40ebSdamien }; 11730aa40ebSdamien 11830aa40ebSdamien #define RUN_HOST_CMD_RING_COUNT 32 11930aa40ebSdamien struct run_host_cmd_ring { 12030aa40ebSdamien struct run_host_cmd cmd[RUN_HOST_CMD_RING_COUNT]; 12130aa40ebSdamien int cur; 12230aa40ebSdamien int next; 12330aa40ebSdamien int queued; 12430aa40ebSdamien }; 12530aa40ebSdamien 12630aa40ebSdamien struct run_node { 12730aa40ebSdamien struct ieee80211_node ni; 12830aa40ebSdamien uint8_t ridx[IEEE80211_RATE_MAXSIZE]; 12930aa40ebSdamien uint8_t ctl_ridx[IEEE80211_RATE_MAXSIZE]; 13030aa40ebSdamien }; 13130aa40ebSdamien 13230aa40ebSdamien struct run_softc { 13330aa40ebSdamien struct device sc_dev; 13430aa40ebSdamien struct ieee80211com sc_ic; 13530aa40ebSdamien int (*sc_newstate)(struct ieee80211com *, 13630aa40ebSdamien enum ieee80211_state, int); 13730aa40ebSdamien int (*sc_srom_read)(struct run_softc *, 13830aa40ebSdamien uint16_t, uint16_t *); 13930aa40ebSdamien 140ab0b1be7Smglocker struct usbd_device *sc_udev; 141ab0b1be7Smglocker struct usbd_interface *sc_iface; 14230aa40ebSdamien 1436755f0faSdamien uint16_t mac_ver; 1446755f0faSdamien uint16_t mac_rev; 145d80de052Sstsp uint16_t rf_rev; 14630aa40ebSdamien uint8_t freq; 14730aa40ebSdamien uint8_t ntxchains; 14830aa40ebSdamien uint8_t nrxchains; 14930aa40ebSdamien int fixed_ridx; 15030aa40ebSdamien 15118327d80Sdamien uint8_t bbp25; 15218327d80Sdamien uint8_t bbp26; 15330aa40ebSdamien uint8_t rf24_20mhz; 15430aa40ebSdamien uint8_t rf24_40mhz; 155f19591d0Sdamien uint8_t patch_dac; 156f19591d0Sdamien uint8_t rfswitch; 15730aa40ebSdamien uint8_t ext_2ghz_lna; 15830aa40ebSdamien uint8_t ext_5ghz_lna; 15930aa40ebSdamien uint8_t calib_2ghz; 16030aa40ebSdamien uint8_t calib_5ghz; 161f19591d0Sdamien uint8_t txmixgain_2ghz; 162f19591d0Sdamien uint8_t txmixgain_5ghz; 1638e0b65aaSdamien int8_t txpow1[54]; 1648e0b65aaSdamien int8_t txpow2[54]; 165d80de052Sstsp int8_t txpow3[54]; 16630aa40ebSdamien int8_t rssi_2ghz[3]; 16730aa40ebSdamien int8_t rssi_5ghz[3]; 16830aa40ebSdamien uint8_t lna[4]; 16930aa40ebSdamien 17030aa40ebSdamien struct { 17130aa40ebSdamien uint8_t reg; 17230aa40ebSdamien uint8_t val; 173f19591d0Sdamien } bbp[10], rf[10]; 17430aa40ebSdamien uint8_t leds; 17530aa40ebSdamien uint16_t led[3]; 17630aa40ebSdamien uint32_t txpow20mhz[5]; 17730aa40ebSdamien uint32_t txpow40mhz_2ghz[5]; 17830aa40ebSdamien uint32_t txpow40mhz_5ghz[5]; 17930aa40ebSdamien 18030aa40ebSdamien struct usb_task sc_task; 18130aa40ebSdamien 18230aa40ebSdamien struct ieee80211_amrr amrr; 18330aa40ebSdamien struct ieee80211_amrr_node amn; 18430aa40ebSdamien 18530aa40ebSdamien struct timeout scan_to; 18630aa40ebSdamien struct timeout calib_to; 18730aa40ebSdamien 18830aa40ebSdamien struct run_rx_ring rxq; 1895892192bSdamien struct run_tx_ring txq[4]; 19030aa40ebSdamien struct run_host_cmd_ring cmdq; 19130aa40ebSdamien uint8_t qfullmsk; 19230aa40ebSdamien int sc_tx_timer; 19330aa40ebSdamien 19430aa40ebSdamien #if NBPFILTER > 0 19530aa40ebSdamien caddr_t sc_drvbpf; 19630aa40ebSdamien 19730aa40ebSdamien union { 19830aa40ebSdamien struct run_rx_radiotap_header th; 19930aa40ebSdamien uint8_t pad[64]; 20030aa40ebSdamien } sc_rxtapu; 20130aa40ebSdamien #define sc_rxtap sc_rxtapu.th 20230aa40ebSdamien int sc_rxtap_len; 20330aa40ebSdamien 20430aa40ebSdamien union { 20530aa40ebSdamien struct run_tx_radiotap_header th; 20630aa40ebSdamien uint8_t pad[64]; 20730aa40ebSdamien } sc_txtapu; 20830aa40ebSdamien #define sc_txtap sc_txtapu.th 20930aa40ebSdamien int sc_txtap_len; 21030aa40ebSdamien #endif 211*cf67a9a2Skrw int sc_key_tasks; 21230aa40ebSdamien }; 213