if_ndisvar.h revision 193045
1135446Strhodes/*- 2193149Sdougb * Copyright (c) 2003 3135446Strhodes * Bill Paul <wpaul@windriver.com>. All rights reserved. 4135446Strhodes * 5193149Sdougb * Redistribution and use in source and binary forms, with or without 6135446Strhodes * modification, are permitted provided that the following conditions 7135446Strhodes * are met: 8135446Strhodes * 1. Redistributions of source code must retain the above copyright 9135446Strhodes * notice, this list of conditions and the following disclaimer. 10135446Strhodes * 2. Redistributions in binary form must reproduce the above copyright 11135446Strhodes * notice, this list of conditions and the following disclaimer in the 12135446Strhodes * documentation and/or other materials provided with the distribution. 13135446Strhodes * 3. All advertising materials mentioning features or use of this software 14135446Strhodes * must display the following acknowledgement: 15135446Strhodes * This product includes software developed by Bill Paul. 16135446Strhodes * 4. Neither the name of the author nor the names of any co-contributors 17135446Strhodes * may be used to endorse or promote products derived from this software 18193149Sdougb * without specific prior written permission. 19135446Strhodes * 20170222Sdougb * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 21170222Sdougb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22135446Strhodes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23135446Strhodes * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 24135446Strhodes * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25135446Strhodes * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26135446Strhodes * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27135446Strhodes * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28135446Strhodes * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29135446Strhodes * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30135446Strhodes * THE POSSIBILITY OF SUCH DAMAGE. 31135446Strhodes * 32135446Strhodes * $FreeBSD: head/sys/dev/if_ndis/if_ndisvar.h 193045 2009-05-29 18:46:57Z thompsa $ 33135446Strhodes */ 34135446Strhodes 35135446Strhodes#define NDIS_DEFAULT_NODENAME "FreeBSD NDIS node" 36135446Strhodes#define NDIS_NODENAME_LEN 32 37135446Strhodes 38135446Strhodes/* For setting/getting OIDs from userspace. */ 39135446Strhodes 40135446Strhodesstruct ndis_oid_data { 41135446Strhodes uint32_t oid; 42135446Strhodes uint32_t len; 43135446Strhodes#ifdef notdef 44135446Strhodes uint8_t data[1]; 45135446Strhodes#endif 46135446Strhodes}; 47135446Strhodes 48135446Strhodesstruct ndis_pci_type { 49135446Strhodes uint16_t ndis_vid; 50135446Strhodes uint16_t ndis_did; 51135446Strhodes uint32_t ndis_subsys; 52135446Strhodes char *ndis_name; 53193149Sdougb}; 54135446Strhodes 55135446Strhodesstruct ndis_pccard_type { 56135446Strhodes const char *ndis_vid; 57135446Strhodes const char *ndis_did; 58135446Strhodes char *ndis_name; 59135446Strhodes}; 60135446Strhodes 61135446Strhodesstruct ndis_usb_type { 62135446Strhodes uint16_t ndis_vid; 63135446Strhodes uint16_t ndis_did; 64135446Strhodes char *ndis_name; 65135446Strhodes}; 66135446Strhodes 67135446Strhodesstruct ndis_shmem { 68135446Strhodes list_entry ndis_list; 69135446Strhodes bus_dma_tag_t ndis_stag; 70135446Strhodes bus_dmamap_t ndis_smap; 71135446Strhodes void *ndis_saddr; 72135446Strhodes ndis_physaddr ndis_paddr; 73165071Sdougb}; 74135446Strhodes 75135446Strhodesstruct ndis_cfglist { 76135446Strhodes ndis_cfg ndis_cfg; 77135446Strhodes struct sysctl_oid *ndis_oid; 78135446Strhodes TAILQ_ENTRY(ndis_cfglist) link; 79135446Strhodes}; 80135446Strhodes 81135446Strhodes/* 82135446Strhodes * Helper struct to make parsing information 83135446Strhodes * elements easier. 84135446Strhodes */ 85135446Strhodesstruct ndis_ie { 86135446Strhodes uint8_t ni_oui[3]; 87135446Strhodes uint8_t ni_val; 88135446Strhodes}; 89135446Strhodes 90135446StrhodesTAILQ_HEAD(nch, ndis_cfglist); 91135446Strhodes 92135446Strhodes#define NDIS_INITIALIZED(sc) (sc->ndis_block->nmb_devicectx != NULL) 93135446Strhodes 94135446Strhodes#define NDIS_TXPKTS 64 95135446Strhodes#define NDIS_INC(x) \ 96135446Strhodes (x)->ndis_txidx = ((x)->ndis_txidx + 1) % (x)->ndis_maxpkts 97135446Strhodes 98135446Strhodes 99135446Strhodes#define NDIS_EVENTS 4 100135446Strhodes#define NDIS_EVTINC(x) (x) = ((x) + 1) % NDIS_EVENTS 101135446Strhodes 102135446Strhodesstruct ndis_evt { 103135446Strhodes uint32_t ne_sts; 104135446Strhodes uint32_t ne_len; 105135446Strhodes char *ne_buf; 106135446Strhodes}; 107135446Strhodes 108135446Strhodesstruct ndis_vap { 109135446Strhodes struct ieee80211vap vap; 110135446Strhodes 111135446Strhodes int (*newstate)(struct ieee80211vap *, 112135446Strhodes enum ieee80211_state, int); 113135446Strhodes}; 114135446Strhodes#define NDIS_VAP(vap) ((struct ndis_vap *)(vap)) 115135446Strhodes 116135446Strhodes#define NDISUSB_CONFIG_NO 0 117135446Strhodes#define NDISUSB_IFACE_INDEX 0 118135446Strhodes/* XXX at USB2 there's no USBD_NO_TIMEOUT macro anymore */ 119135446Strhodes#define NDISUSB_NO_TIMEOUT 0 120135446Strhodes#define NDISUSB_INTR_TIMEOUT 1000 121135446Strhodes#define NDISUSB_TX_TIMEOUT 10000 122135446Strhodesstruct ndisusb_xfer; 123135446Strhodesstruct ndisusb_ep { 124135446Strhodes struct usb_xfer *ne_xfer[1]; 125135446Strhodes list_entry ne_active; 126135446Strhodes list_entry ne_pending; 127135446Strhodes kspin_lock ne_lock; 128135446Strhodes uint8_t ne_dirin; 129135446Strhodes}; 130170222Sdougbstruct ndisusb_xfer { 131135446Strhodes struct ndisusb_ep *nx_ep; 132135446Strhodes void *nx_priv; 133135446Strhodes uint8_t *nx_urbbuf; 134135446Strhodes uint32_t nx_urbactlen; 135135446Strhodes uint32_t nx_urblen; 136135446Strhodes uint8_t nx_shortxfer; 137135446Strhodes list_entry nx_next; 138135446Strhodes}; 139165071Sdougbstruct ndisusb_xferdone { 140135446Strhodes struct ndisusb_xfer *nd_xfer; 141135446Strhodes usb_error_t nd_status; 142135446Strhodes list_entry nd_donelist; 143135446Strhodes}; 144135446Strhodes 145135446Strhodesstruct ndisusb_task { 146135446Strhodes unsigned nt_type; 147135446Strhodes#define NDISUSB_TASK_TSTART 0 148135446Strhodes#define NDISUSB_TASK_IRPCANCEL 1 149135446Strhodes#define NDISUSB_TASK_VENDOR 2 150135446Strhodes void *nt_ctx; 151135446Strhodes list_entry nt_tasklist; 152135446Strhodes}; 153135446Strhodes 154135446Strhodesstruct ndis_softc { 155135446Strhodes struct ifnet *ifp; 156135446Strhodes struct ifmedia ifmedia; /* media info */ 157135446Strhodes u_long ndis_hwassist; 158135446Strhodes uint32_t ndis_v4tx; 159135446Strhodes uint32_t ndis_v4rx; 160135446Strhodes bus_space_handle_t ndis_bhandle; 161135446Strhodes bus_space_tag_t ndis_btag; 162135446Strhodes void *ndis_intrhand; 163135446Strhodes struct resource *ndis_irq; 164135446Strhodes struct resource *ndis_res; 165135446Strhodes struct resource *ndis_res_io; 166135446Strhodes int ndis_io_rid; 167135446Strhodes struct resource *ndis_res_mem; 168135446Strhodes int ndis_mem_rid; 169135446Strhodes struct resource *ndis_res_altmem; 170135446Strhodes int ndis_altmem_rid; 171135446Strhodes struct resource *ndis_res_am; /* attribute mem (pccard) */ 172135446Strhodes int ndis_am_rid; 173135446Strhodes struct resource *ndis_res_cm; /* common mem (pccard) */ 174135446Strhodes struct resource_list ndis_rl; 175135446Strhodes int ndis_rescnt; 176135446Strhodes struct mtx ndis_mtx; 177135446Strhodes uint8_t ndis_irql; 178135446Strhodes device_t ndis_dev; 179135446Strhodes int ndis_unit; 180135446Strhodes ndis_miniport_block *ndis_block; 181135446Strhodes ndis_miniport_characteristics *ndis_chars; 182165071Sdougb interface_type ndis_type; 183135446Strhodes struct callout ndis_scan_callout; 184135446Strhodes struct callout ndis_stat_callout; 185135446Strhodes int ndis_maxpkts; 186135446Strhodes ndis_oid *ndis_oids; 187135446Strhodes int ndis_oidcnt; 188135446Strhodes int ndis_txidx; 189135446Strhodes int ndis_txpending; 190135446Strhodes ndis_packet **ndis_txarray; 191135446Strhodes ndis_handle ndis_txpool; 192135446Strhodes int ndis_sc; 193135446Strhodes ndis_cfg *ndis_regvals; 194135446Strhodes struct nch ndis_cfglist_head; 195193149Sdougb int ndis_80211; 196135446Strhodes int ndis_link; 197135446Strhodes uint32_t ndis_sts; 198135446Strhodes uint32_t ndis_filter; 199135446Strhodes int ndis_if_flags; 200135446Strhodes int ndis_skip; 201135446Strhodes 202135446Strhodes int ndis_devidx; 203135446Strhodes interface_type ndis_iftype; 204135446Strhodes driver_object *ndis_dobj; 205135446Strhodes io_workitem *ndis_tickitem; 206135446Strhodes io_workitem *ndis_startitem; 207135446Strhodes io_workitem *ndis_resetitem; 208135446Strhodes io_workitem *ndis_inputitem; 209135446Strhodes kdpc ndis_rxdpc; 210135446Strhodes bus_dma_tag_t ndis_parent_tag; 211135446Strhodes list_entry ndis_shlist; 212135446Strhodes bus_dma_tag_t ndis_mtag; 213135446Strhodes bus_dma_tag_t ndis_ttag; 214135446Strhodes bus_dmamap_t *ndis_mmaps; 215135446Strhodes bus_dmamap_t *ndis_tmaps; 216135446Strhodes int ndis_mmapcnt; 217135446Strhodes struct ndis_evt ndis_evt[NDIS_EVENTS]; 218135446Strhodes int ndis_evtpidx; 219135446Strhodes int ndis_evtcidx; 220135446Strhodes struct ifqueue ndis_rxqueue; 221135446Strhodes kspin_lock ndis_rxlock; 222135446Strhodes 223135446Strhodes int (*ndis_newstate)(struct ieee80211com *, 224135446Strhodes enum ieee80211_state, int); 225135446Strhodes int ndis_tx_timer; 226135446Strhodes int ndis_hang_timer; 227135446Strhodes 228135446Strhodes struct usb_device *ndisusb_dev; 229135446Strhodes struct mtx ndisusb_mtx; 230135446Strhodes struct ndisusb_ep ndisusb_dread_ep; 231135446Strhodes struct ndisusb_ep ndisusb_dwrite_ep; 232135446Strhodes#define NDISUSB_GET_ENDPT(addr) \ 233135446Strhodes ((UE_GET_DIR(addr) >> 7) | (UE_GET_ADDR(addr) << 1)) 234135446Strhodes#define NDISUSB_ENDPT_MAX ((UE_ADDR + 1) * 2) 235135446Strhodes struct ndisusb_ep ndisusb_ep[NDISUSB_ENDPT_MAX]; 236135446Strhodes io_workitem *ndisusb_xferdoneitem; 237135446Strhodes list_entry ndisusb_xferdonelist; 238135446Strhodes kspin_lock ndisusb_xferdonelock; 239135446Strhodes io_workitem *ndisusb_taskitem; 240135446Strhodes list_entry ndisusb_tasklist; 241135446Strhodes kspin_lock ndisusb_tasklock; 242135446Strhodes int ndisusb_status; 243135446Strhodes#define NDISUSB_STATUS_DETACH 0x1 244135446Strhodes#define NDISUSB_STATUS_SETUP_EP 0x2 245135446Strhodes}; 246135446Strhodes 247135446Strhodes#define NDIS_LOCK(_sc) mtx_lock(&(_sc)->ndis_mtx) 248165071Sdougb#define NDIS_UNLOCK(_sc) mtx_unlock(&(_sc)->ndis_mtx) 249135446Strhodes#define NDIS_LOCK_ASSERT(_sc, t) mtx_assert(&(_sc)->ndis_mtx, t) 250135446Strhodes#define NDISUSB_LOCK(_sc) mtx_lock(&(_sc)->ndisusb_mtx) 251135446Strhodes#define NDISUSB_UNLOCK(_sc) mtx_unlock(&(_sc)->ndisusb_mtx) 252135446Strhodes#define NDISUSB_LOCK_ASSERT(_sc, t) mtx_assert(&(_sc)->ndisusb_mtx, t) 253135446Strhodes 254135446Strhodes