3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by Bill Paul.
16 * 4. Neither the name of the author nor the names of any co-contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30 * THE POSSIBILITY OF SUCH DAMAGE.
32 * $FreeBSD: src/sys/dev/if_ndis/if_ndisvar.h,v 1.39 2009/05/02 15:14:18 thompsa Exp $
35 #define NDIS_DEFAULT_NODENAME "FreeBSD NDIS node"
36 #define NDIS_NODENAME_LEN 32
38 /* For setting/getting OIDs from userspace. */
40 struct ndis_oid_data {
48 struct ndis_pci_type {
55 struct ndis_pccard_type {
61 struct ndis_usb_type {
69 bus_dma_tag_t ndis_stag;
70 bus_dmamap_t ndis_smap;
72 ndis_physaddr ndis_paddr;
77 struct sysctl_oid *ndis_oid;
78 TAILQ_ENTRY(ndis_cfglist) link;
82 * Helper struct to make parsing information
90 TAILQ_HEAD(nch, ndis_cfglist);
92 #define NDIS_INITIALIZED(sc) (sc->ndis_block->nmb_devicectx != NULL)
94 #define NDIS_TXPKTS 64
96 (x)->ndis_txidx = ((x)->ndis_txidx + 1) % (x)->ndis_maxpkts
100 #define NDIS_EVTINC(x) (x) = ((x) + 1) % NDIS_EVENTS
109 struct ieee80211vap vap;
111 int (*newstate)(struct ieee80211vap *,
112 enum ieee80211_state, int);
114 #define NDIS_VAP(vap) ((struct ndis_vap *)(vap))
116 #define NDISUSB_CONFIG_NO 1
117 #define NDISUSB_IFACE_INDEX 0
118 #define NDISUSB_INTR_TIMEOUT 1000
119 #define NDISUSB_TX_TIMEOUT 10000
120 struct ndisusb_xfer {
121 usbd_xfer_handle nx_xfer;
122 usbd_private_handle nx_priv;
123 usbd_status nx_status;
124 list_entry nx_xferlist;
129 struct ifmedia ifmedia; /* media info */
130 u_long ndis_hwassist;
133 bus_space_handle_t ndis_bhandle;
134 bus_space_tag_t ndis_btag;
136 struct resource *ndis_irq;
137 struct resource *ndis_res;
138 struct resource *ndis_res_io;
140 struct resource *ndis_res_mem;
142 struct resource *ndis_res_altmem;
144 struct resource *ndis_res_am; /* attribute mem (pccard) */
146 struct resource *ndis_res_cm; /* common mem (pccard) */
147 struct resource_list ndis_rl;
149 struct lock ndis_lock;
153 ndis_miniport_block *ndis_block;
154 ndis_miniport_characteristics *ndis_chars;
155 interface_type ndis_type;
156 struct callout ndis_scan_callout;
157 struct callout ndis_stat_callout;
163 ndis_packet **ndis_txarray;
164 ndis_handle ndis_txpool;
166 ndis_cfg *ndis_regvals;
167 struct nch ndis_cfglist_head;
171 uint32_t ndis_filter;
175 #if __FreeBSD_version < 502113
176 struct sysctl_ctx_list ndis_ctx;
177 struct sysctl_oid *ndis_tree;
180 interface_type ndis_iftype;
181 driver_object *ndis_dobj;
182 io_workitem *ndis_tickitem;
183 io_workitem *ndis_startitem;
184 io_workitem *ndis_resetitem;
185 io_workitem *ndis_inputitem;
187 bus_dma_tag_t ndis_parent_tag;
188 list_entry ndis_shlist;
189 bus_dma_tag_t ndis_mtag;
190 bus_dma_tag_t ndis_ttag;
191 bus_dmamap_t *ndis_mmaps;
192 bus_dmamap_t *ndis_tmaps;
194 struct ndis_evt ndis_evt[NDIS_EVENTS];
197 struct ifqueue ndis_rxqueue;
198 kspin_lock ndis_rxlock;
200 int (*ndis_newstate)(struct ieee80211com *,
201 enum ieee80211_state, int);
205 io_workitem *ndisusb_xferitem;
206 list_entry ndisusb_xferlist;
207 kspin_lock ndisusb_xferlock;
208 #define NDISUSB_ENDPT_BOUT 0
209 #define NDISUSB_ENDPT_BIN 1
210 #define NDISUSB_ENDPT_IIN 2
211 #define NDISUSB_ENDPT_IOUT 3
212 #define NDISUSB_ENDPT_MAX 4
213 usbd_pipe_handle ndisusb_ep[NDISUSB_ENDPT_MAX];
214 char *ndisusb_iin_buf;
216 #define NDISUSB_STATUS_DETACH 0x1
219 #define NDISMTX_LOCK(_sc) lockmgr(&(_sc)->ndis_lock, LK_EXCLUSIVE)
220 #define NDISMTX_UNLOCK(_sc) lockmgr(&(_sc)->ndis_lock, LK_RELEASE)
221 #define NDISUSB_LOCK(_sc) get_mplock()
222 #define NDISUSB_UNLOCK(_sc) rel_mplock()
223 #define NDIS_LOCK(_sc) do { \
224 if ((_sc)->ndis_iftype == PNPBus) \
228 #define NDIS_UNLOCK(_sc) do { \
229 if ((_sc)->ndis_iftype == PNPBus) \
230 NDISUSB_UNLOCK(_sc); \
231 NDISMTX_UNLOCK(_sc); \