rtwnvar.h revision 1.11
1/* $OpenBSD: rtwnvar.h,v 1.11 2018/09/21 01:45:53 jmatthew Exp $ */ 2 3/*- 4 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 5 * Copyright (c) 2015 Stefan Sperling <stsp@openbsd.org> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20/* Operations provided by bus-specific attachment drivers. */ 21struct rtwn_ops { 22 void *cookie; /* Attachment driver's private data. */ 23 24 uint8_t (*read_1)(void *, uint16_t); 25 uint16_t (*read_2)(void *, uint16_t); 26 uint32_t (*read_4)(void *, uint16_t); 27 void (*write_1)(void *, uint16_t, uint8_t); 28 void (*write_2)(void *, uint16_t, uint16_t); 29 void (*write_4)(void *, uint16_t, uint32_t); 30 int (*tx)(void *, struct mbuf *, struct ieee80211_node *); 31 int (*power_on)(void *); 32 int (*dma_init)(void *); 33 int (*fw_loadpage)(void *, int, uint8_t *, int); 34 int (*load_firmware)(void *, u_char **fw, size_t *); 35 void (*mac_init)(void *); 36 void (*bb_init)(void *); 37 int (*alloc_buffers)(void *); 38 int (*init)(void *); 39 void (*stop)(void *); 40 int (*is_oactive)(void *); 41 void (*next_calib)(void *); 42 void (*cancel_calib)(void *); 43 void (*next_scan)(void *); 44 void (*cancel_scan)(void *); 45 void (*wait_async)(void *); 46}; 47 48#define RTWN_LED_LINK 0 49#define RTWN_LED_DATA 1 50 51#define RTWN_92C_INT_ENABLE (R92C_IMR_ROK | R92C_IMR_VODOK | R92C_IMR_VIDOK | \ 52 R92C_IMR_BEDOK | R92C_IMR_BKDOK | R92C_IMR_MGNTDOK | \ 53 R92C_IMR_HIGHDOK | R92C_IMR_BDOK | R92C_IMR_RDU | \ 54 R92C_IMR_RXFOVW) 55#define RTWN_88E_INT_ENABLE (R88E_HIMR_PSTIMEOUT | R88E_HIMR_HSISR_IND_ON_INT | \ 56 R88E_HIMR_C2HCMD | R88E_HIMR_ROK | R88E_HIMR_VODOK | \ 57 R88E_HIMR_VIDOK | R88E_HIMR_BEDOK | R88E_HIMR_BKDOK | \ 58 R88E_HIMR_MGNTDOK | R88E_HIMR_HIGHDOK | R88E_HIMR_RDU) 59 60struct rtwn_softc { 61 /* sc_ops must be initialized by the attachment driver! */ 62 struct rtwn_ops sc_ops; 63 64 struct device *sc_pdev; 65 struct ieee80211com sc_ic; 66 int (*sc_newstate)(struct ieee80211com *, 67 enum ieee80211_state, int); 68 struct task init_task; 69 int ac2idx[EDCA_NUM_AC]; 70 uint32_t sc_flags; 71#define RTWN_FLAG_CCK_HIPWR 0x01 72#define RTWN_FLAG_BUSY 0x02 73#define RTWN_FLAG_FORCE_RAID_11B 0x04 74#define RTWN_FLAG_EXT_HDR 0x08 75 76 uint32_t chip; 77#define RTWN_CHIP_92C 0x00000001 78#define RTWN_CHIP_92C_1T2R 0x00000002 79#define RTWN_CHIP_UMC 0x00000004 80#define RTWN_CHIP_UMC_A_CUT 0x00000008 81#define RTWN_CHIP_88C 0x00000010 82#define RTWN_CHIP_88E 0x00000020 83 84#define RTWN_CHIP_PCI 0x40000000 85#define RTWN_CHIP_USB 0x80000000 86 87 uint8_t board_type; 88 uint8_t crystal_cap; 89 uint8_t regulatory; 90 uint8_t pa_setting; 91 int avg_pwdb; 92 int thcal_state; 93 int thcal_lctemp; 94 int ntxchains; 95 int nrxchains; 96 int ledlink; 97 98 int sc_tx_timer; 99 int fwcur; 100 union { 101 struct r92c_rom r92c_rom; 102 struct { 103 struct r88e_rom r88e_rom; 104 union { 105 struct r88e_pci_rom pci; 106 struct r88e_usb_rom usb; 107 } u; 108 } __packed _88e; 109 } u; 110#define sc_r92c_rom u.r92c_rom 111#define sc_r88e_rom u._88e.r88e_rom 112#define sc_r88e_pci_rom u._88e.u.pci 113#define sc_r88e_usb_rom u._88e.u.usb 114 115 uint32_t rf_chnlbw[R92C_MAX_CHAINS]; 116}; 117 118int rtwn_attach(struct device *, struct rtwn_softc *); 119int rtwn_detach(struct rtwn_softc *, int); 120int rtwn_activate(struct rtwn_softc *, int); 121int8_t rtwn_get_rssi(struct rtwn_softc *, int, void *); 122void rtwn_update_avgrssi(struct rtwn_softc *, int, int8_t); 123void rtwn_calib(struct rtwn_softc *); 124void rtwn_next_scan(struct rtwn_softc *); 125int rtwn_newstate(struct ieee80211com *, enum ieee80211_state, int); 126void rtwn_updateslot(struct ieee80211com *); 127void rtwn_updateedca(struct ieee80211com *); 128int rtwn_set_key(struct ieee80211com *, struct ieee80211_node *, 129 struct ieee80211_key *); 130void rtwn_delete_key(struct ieee80211com *, 131 struct ieee80211_node *, struct ieee80211_key *); 132int rtwn_ioctl(struct ifnet *, u_long, caddr_t); 133void rtwn_start(struct ifnet *); 134void rtwn_fw_reset(struct rtwn_softc *); 135