rtwnvar.h revision 1.10
1/* $OpenBSD: rtwnvar.h,v 1.10 2017/07/08 14:26:23 kevlo 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_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 56struct rtwn_softc { 57 /* sc_ops must be initialized by the attachment driver! */ 58 struct rtwn_ops sc_ops; 59 60 struct device *sc_pdev; 61 struct ieee80211com sc_ic; 62 int (*sc_newstate)(struct ieee80211com *, 63 enum ieee80211_state, int); 64 struct task init_task; 65 int ac2idx[EDCA_NUM_AC]; 66 uint32_t sc_flags; 67#define RTWN_FLAG_CCK_HIPWR 0x01 68#define RTWN_FLAG_BUSY 0x02 69#define RTWN_FLAG_FORCE_RAID_11B 0x04 70#define RTWN_FLAG_EXT_HDR 0x08 71 72 uint32_t chip; 73#define RTWN_CHIP_92C 0x00000001 74#define RTWN_CHIP_92C_1T2R 0x00000002 75#define RTWN_CHIP_UMC 0x00000004 76#define RTWN_CHIP_UMC_A_CUT 0x00000008 77#define RTWN_CHIP_88C 0x00000010 78#define RTWN_CHIP_88E 0x00000020 79 80#define RTWN_CHIP_PCI 0x40000000 81#define RTWN_CHIP_USB 0x80000000 82 83 uint8_t board_type; 84 uint8_t crystal_cap; 85 uint8_t regulatory; 86 uint8_t pa_setting; 87 int avg_pwdb; 88 int thcal_state; 89 int thcal_lctemp; 90 int ntxchains; 91 int nrxchains; 92 int ledlink; 93 94 int sc_tx_timer; 95 int fwcur; 96 union { 97 struct r92c_rom r92c_rom; 98 struct r88e_rom r88e_rom; 99 } u; 100#define sc_r92c_rom u.r92c_rom 101#define sc_r88e_rom u.r88e_rom 102 103 uint32_t rf_chnlbw[R92C_MAX_CHAINS]; 104}; 105 106int rtwn_attach(struct device *, struct rtwn_softc *); 107int rtwn_detach(struct rtwn_softc *, int); 108int rtwn_activate(struct rtwn_softc *, int); 109int8_t rtwn_get_rssi(struct rtwn_softc *, int, void *); 110void rtwn_update_avgrssi(struct rtwn_softc *, int, int8_t); 111void rtwn_calib(struct rtwn_softc *); 112void rtwn_next_scan(struct rtwn_softc *); 113int rtwn_newstate(struct ieee80211com *, enum ieee80211_state, int); 114void rtwn_updateslot(struct ieee80211com *); 115void rtwn_updateedca(struct ieee80211com *); 116int rtwn_set_key(struct ieee80211com *, struct ieee80211_node *, 117 struct ieee80211_key *); 118void rtwn_delete_key(struct ieee80211com *, 119 struct ieee80211_node *, struct ieee80211_key *); 120int rtwn_ioctl(struct ifnet *, u_long, caddr_t); 121void rtwn_start(struct ifnet *); 122void rtwn_fw_reset(struct rtwn_softc *); 123