Deleted Added
full compact
if_ndis.c (124014) if_ndis.c (124060)
1/*
2 * Copyright (c) 2003
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

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.
31 */
32
33#include <sys/cdefs.h>
1/*
2 * Copyright (c) 2003
3 * Bill Paul <wpaul@windriver.com>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

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.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/dev/if_ndis/if_ndis.c 124014 2003-12-31 04:12:57Z wpaul $");
34__FBSDID("$FreeBSD: head/sys/dev/if_ndis/if_ndis.c 124060 2004-01-02 04:31:06Z wpaul $");
35
36#include "opt_bdg.h"
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/sockio.h>
41#include <sys/mbuf.h>
42#include <sys/malloc.h>

--- 93 unchanged lines hidden (view full) ---

136 DEVMETHOD(device_attach, ndis_attach),
137 DEVMETHOD(device_detach, ndis_detach),
138 DEVMETHOD(device_shutdown, ndis_shutdown),
139
140 { 0, 0 }
141};
142
143static driver_t ndis_driver = {
35
36#include "opt_bdg.h"
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/sockio.h>
41#include <sys/mbuf.h>
42#include <sys/malloc.h>

--- 93 unchanged lines hidden (view full) ---

136 DEVMETHOD(device_attach, ndis_attach),
137 DEVMETHOD(device_detach, ndis_detach),
138 DEVMETHOD(device_shutdown, ndis_shutdown),
139
140 { 0, 0 }
141};
142
143static driver_t ndis_driver = {
144#ifdef NDIS_DEVNAME
145 NDIS_DEVNAME,
146#else
144 "ndis",
147 "ndis",
148#endif
145 ndis_methods,
146 sizeof(struct ndis_softc)
147};
148
149static devclass_t ndis_devclass;
150
149 ndis_methods,
150 sizeof(struct ndis_softc)
151};
152
153static devclass_t ndis_devclass;
154
155#ifdef NDIS_MODNAME
156#define NDIS_MODNAME_OVERRIDE_PCI(x) \
157 DRIVER_MODULE(x, pci, ndis_driver, ndis_devclass, 0, 0)
158#define NDIS_MODNAME_OVERRIDE_CARDBUS(x) \
159 DRIVER_MODULE(x, cardbus, ndis_driver, ndis_devclass, 0, 0)
160NDIS_MODNAME_OVERRIDE_PCI(NDIS_MODNAME);
161NDIS_MODNAME_OVERRIDE_CARDBUS(NDIS_MODNAME);
162#else
151DRIVER_MODULE(ndis, pci, ndis_driver, ndis_devclass, 0, 0);
152DRIVER_MODULE(ndis, cardbus, ndis_driver, ndis_devclass, 0, 0);
163DRIVER_MODULE(ndis, pci, ndis_driver, ndis_devclass, 0, 0);
164DRIVER_MODULE(ndis, cardbus, ndis_driver, ndis_devclass, 0, 0);
165#endif
153
154/*
155 * Program the 64-bit multicast hash filter.
156 */
157static void
158ndis_setmulti(sc)
159 struct ndis_softc *sc;
160{

--- 74 unchanged lines hidden (view full) ---

235 SLIST_FOREACH(rle, rl, link) {
236 switch (rle->type) {
237 case SYS_RES_IOPORT:
238 sc->ndis_io_rid = rle->rid;
239 sc->ndis_res_io = bus_alloc_resource(dev,
240 SYS_RES_IOPORT, &sc->ndis_io_rid,
241 0, ~0, 1, RF_ACTIVE);
242 if (sc->ndis_res_io == NULL) {
166
167/*
168 * Program the 64-bit multicast hash filter.
169 */
170static void
171ndis_setmulti(sc)
172 struct ndis_softc *sc;
173{

--- 74 unchanged lines hidden (view full) ---

248 SLIST_FOREACH(rle, rl, link) {
249 switch (rle->type) {
250 case SYS_RES_IOPORT:
251 sc->ndis_io_rid = rle->rid;
252 sc->ndis_res_io = bus_alloc_resource(dev,
253 SYS_RES_IOPORT, &sc->ndis_io_rid,
254 0, ~0, 1, RF_ACTIVE);
255 if (sc->ndis_res_io == NULL) {
243 printf("ndis%d: couldn't map "
244 "iospace\n", unit);
256 device_printf(dev,
257 "couldn't map iospace");
245 error = ENXIO;
246 goto fail;
247 }
248 break;
249 case SYS_RES_MEMORY:
250 if (sc->ndis_res_altmem != NULL &&
251 sc->ndis_res_mem != NULL) {
258 error = ENXIO;
259 goto fail;
260 }
261 break;
262 case SYS_RES_MEMORY:
263 if (sc->ndis_res_altmem != NULL &&
264 sc->ndis_res_mem != NULL) {
252 printf ("ndis%d: too many memory "
253 "resources", sc->ndis_unit);
265 device_printf(dev,
266 "too many memory resources");
254 error = ENXIO;
255 goto fail;
256 }
257 if (rle->rid == PCIR_BAR(2)) {
258 sc->ndis_altmem_rid = rle->rid;
259 sc->ndis_res_altmem =
260 bus_alloc_resource(dev,
261 SYS_RES_MEMORY,
262 &sc->ndis_altmem_rid,
263 0, ~0, 1, RF_ACTIVE);
264 if (sc->ndis_res_altmem == NULL) {
267 error = ENXIO;
268 goto fail;
269 }
270 if (rle->rid == PCIR_BAR(2)) {
271 sc->ndis_altmem_rid = rle->rid;
272 sc->ndis_res_altmem =
273 bus_alloc_resource(dev,
274 SYS_RES_MEMORY,
275 &sc->ndis_altmem_rid,
276 0, ~0, 1, RF_ACTIVE);
277 if (sc->ndis_res_altmem == NULL) {
265 printf("ndis%d: couldn't map "
266 "alt memory\n", unit);
278 device_printf(dev,
279 "couldn't map alt memory");
267 error = ENXIO;
268 goto fail;
269 }
270 } else {
271 sc->ndis_mem_rid = rle->rid;
272 sc->ndis_res_mem =
273 bus_alloc_resource(dev,
274 SYS_RES_MEMORY,
275 &sc->ndis_mem_rid,
276 0, ~0, 1, RF_ACTIVE);
277 if (sc->ndis_res_mem == NULL) {
280 error = ENXIO;
281 goto fail;
282 }
283 } else {
284 sc->ndis_mem_rid = rle->rid;
285 sc->ndis_res_mem =
286 bus_alloc_resource(dev,
287 SYS_RES_MEMORY,
288 &sc->ndis_mem_rid,
289 0, ~0, 1, RF_ACTIVE);
290 if (sc->ndis_res_mem == NULL) {
278 printf("ndis%d: couldn't map "
279 "memory\n", unit);
291 device_printf(dev,
292 "couldn't map memory");
280 error = ENXIO;
281 goto fail;
282 }
283 }
284 break;
285 case SYS_RES_IRQ:
286 rid = rle->rid;
287 sc->ndis_irq = bus_alloc_resource(dev,
288 SYS_RES_IRQ, &rid, 0, ~0, 1,
289 RF_SHAREABLE | RF_ACTIVE);
290 if (sc->ndis_irq == NULL) {
293 error = ENXIO;
294 goto fail;
295 }
296 }
297 break;
298 case SYS_RES_IRQ:
299 rid = rle->rid;
300 sc->ndis_irq = bus_alloc_resource(dev,
301 SYS_RES_IRQ, &rid, 0, ~0, 1,
302 RF_SHAREABLE | RF_ACTIVE);
303 if (sc->ndis_irq == NULL) {
291 printf("ndis%d: couldn't map "
292 "interrupt\n", unit);
304 device_printf(dev,
305 "couldn't map interrupt");
293 error = ENXIO;
294 goto fail;
295 }
296 break;
297 default:
298 break;
299 }
300 sc->ndis_rescnt++;

--- 4 unchanged lines hidden (view full) ---

305 * Hook interrupt early, since calling the driver's
306 * init routine may trigger an interrupt.
307 */
308
309 error = bus_setup_intr(dev, sc->ndis_irq, INTR_TYPE_NET,
310 ndis_intr, sc, &sc->ndis_intrhand);
311
312 if (error) {
306 error = ENXIO;
307 goto fail;
308 }
309 break;
310 default:
311 break;
312 }
313 sc->ndis_rescnt++;

--- 4 unchanged lines hidden (view full) ---

318 * Hook interrupt early, since calling the driver's
319 * init routine may trigger an interrupt.
320 */
321
322 error = bus_setup_intr(dev, sc->ndis_irq, INTR_TYPE_NET,
323 ndis_intr, sc, &sc->ndis_intrhand);
324
325 if (error) {
313 printf("ndis%d: couldn't set up irq\n", unit);
326 device_printf(dev, "couldn't set up irq\n");
314 goto fail;
315 }
316
317 /*
318 * Allocate the parent bus DMA tag appropriate for PCI.
319 */
320#define NDIS_NSEG_NEW 32
321 error = bus_dma_tag_create(NULL, /* parent */

--- 50 unchanged lines hidden (view full) ---

372 ndis_convert_res(sc);
373
374 /* Install our RX and TX interrupt handlers. */
375 sc->ndis_block.nmb_senddone_func = ndis_txeof;
376 sc->ndis_block.nmb_pktind_func = ndis_rxeof;
377
378 /* Call driver's init routine. */
379 if (ndis_init_nic(sc)) {
327 goto fail;
328 }
329
330 /*
331 * Allocate the parent bus DMA tag appropriate for PCI.
332 */
333#define NDIS_NSEG_NEW 32
334 error = bus_dma_tag_create(NULL, /* parent */

--- 50 unchanged lines hidden (view full) ---

385 ndis_convert_res(sc);
386
387 /* Install our RX and TX interrupt handlers. */
388 sc->ndis_block.nmb_senddone_func = ndis_txeof;
389 sc->ndis_block.nmb_pktind_func = ndis_rxeof;
390
391 /* Call driver's init routine. */
392 if (ndis_init_nic(sc)) {
380 printf ("ndis%d: init handler failed\n", sc->ndis_unit);
393 device_printf (dev, "init handler failed\n");
381 error = ENXIO;
382 goto fail;
383 }
384
385 /* Reset the adapter. */
386 ndis_reset(sc);
387
388 /*

--- 42 unchanged lines hidden (view full) ---

431 sc->ndis_80211++;
432 break;
433 }
434 }
435
436 /*
437 * An NDIS device was detected. Inform the world.
438 */
394 error = ENXIO;
395 goto fail;
396 }
397
398 /* Reset the adapter. */
399 ndis_reset(sc);
400
401 /*

--- 42 unchanged lines hidden (view full) ---

444 sc->ndis_80211++;
445 break;
446 }
447 }
448
449 /*
450 * An NDIS device was detected. Inform the world.
451 */
439 if (sc->ndis_80211)
440 printf("ndis%d: 802.11 address: %6D\n", unit, eaddr, ":");
441 else
442 printf("ndis%d: Ethernet address: %6D\n", unit, eaddr, ":");
452 device_printf(dev, "%s address: %6D\n",
453 sc->ndis_80211 ? "802.11" : "Ethernet", eaddr, ":");
443
454
444
445 ifp = &sc->arpcom.ac_if;
446 ifp->if_softc = sc;
447 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
448 ifp->if_mtu = ETHERMTU;
449 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
450 ifp->if_ioctl = ndis_ioctl;
451 ifp->if_output = ether_output;
452 ifp->if_start = ndis_start;

--- 19 unchanged lines hidden (view full) ---

472 ic->ic_caps = IEEE80211_C_PMGT | IEEE80211_C_IBSS;
473 ic->ic_state = IEEE80211_S_RUN;
474 ic->ic_modecaps = (1<<IEEE80211_MODE_AUTO);
475 len = sizeof(rates);
476 bzero((char *)&rates, len);
477 r = ndis_get_info(sc, OID_802_11_SUPPORTED_RATES,
478 (void *)rates, &len);
479 if (r)
455 ifp = &sc->arpcom.ac_if;
456 ifp->if_softc = sc;
457 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
458 ifp->if_mtu = ETHERMTU;
459 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
460 ifp->if_ioctl = ndis_ioctl;
461 ifp->if_output = ether_output;
462 ifp->if_start = ndis_start;

--- 19 unchanged lines hidden (view full) ---

482 ic->ic_caps = IEEE80211_C_PMGT | IEEE80211_C_IBSS;
483 ic->ic_state = IEEE80211_S_RUN;
484 ic->ic_modecaps = (1<<IEEE80211_MODE_AUTO);
485 len = sizeof(rates);
486 bzero((char *)&rates, len);
487 r = ndis_get_info(sc, OID_802_11_SUPPORTED_RATES,
488 (void *)rates, &len);
489 if (r)
480 printf ("get rates failed: 0x%x\n", r);
490 device_printf (dev, "get rates failed: 0x%x\n", r);
481 /*
482 * We need a way to distinguish between 802.11b cards
483 * and 802.11g cards. Unfortunately, Microsoft doesn't
484 * really give us one, so we have to apply a bit of a
485 * heuristic here. If we ask for supported rates, and
486 * we get 8 of them, then we know this isn't just a
487 * plain 802.11b card, since those only support up to
488 * 4 rates. This doesn't help us distinguish 802.11g

--- 191 unchanged lines hidden (view full) ---

680 sc = (struct ndis_softc *)(block->nmb_ifp);
681 ifp = block->nmb_ifp;
682
683 for (i = 0; i < pktcnt; i++) {
684 p = packets[i];
685 /* Stash the softc here so ptom can use it. */
686 p->np_softc = sc;
687 if (ndis_ptom(&m0, p)) {
491 /*
492 * We need a way to distinguish between 802.11b cards
493 * and 802.11g cards. Unfortunately, Microsoft doesn't
494 * really give us one, so we have to apply a bit of a
495 * heuristic here. If we ask for supported rates, and
496 * we get 8 of them, then we know this isn't just a
497 * plain 802.11b card, since those only support up to
498 * 4 rates. This doesn't help us distinguish 802.11g

--- 191 unchanged lines hidden (view full) ---

690 sc = (struct ndis_softc *)(block->nmb_ifp);
691 ifp = block->nmb_ifp;
692
693 for (i = 0; i < pktcnt; i++) {
694 p = packets[i];
695 /* Stash the softc here so ptom can use it. */
696 p->np_softc = sc;
697 if (ndis_ptom(&m0, p)) {
688 printf ("ndis%d: ptom failed\n", sc->ndis_unit);
698 device_printf (sc->ndis_dev, "ptom failed\n");
689 if (p->np_oob.npo_status == NDIS_STATUS_SUCCESS)
690 ndis_return_packet(sc, p);
691 } else {
692 if (p->np_oob.npo_status == NDIS_STATUS_RESOURCES) {
693 m = m_dup(m0, M_DONTWAIT);
694 m_freem(m0);
695 if (m == NULL)
696 ifp->if_ierrors++;

--- 84 unchanged lines hidden (view full) ---

781 sc = ifp->if_softc;
782
783 if (!(ifp->if_flags & IFF_UP))
784 return;
785
786 switch (block->nmb_getstat) {
787 case NDIS_STATUS_MEDIA_CONNECT:
788 sc->ndis_link = 1;
699 if (p->np_oob.npo_status == NDIS_STATUS_SUCCESS)
700 ndis_return_packet(sc, p);
701 } else {
702 if (p->np_oob.npo_status == NDIS_STATUS_RESOURCES) {
703 m = m_dup(m0, M_DONTWAIT);
704 m_freem(m0);
705 if (m == NULL)
706 ifp->if_ierrors++;

--- 84 unchanged lines hidden (view full) ---

791 sc = ifp->if_softc;
792
793 if (!(ifp->if_flags & IFF_UP))
794 return;
795
796 switch (block->nmb_getstat) {
797 case NDIS_STATUS_MEDIA_CONNECT:
798 sc->ndis_link = 1;
789 printf("ndis%d: link up\n", sc->ndis_unit);
799 device_printf(sc->ndis_dev, "link up\n");
790 if (sc->ndis_80211)
791 ndis_getstate_80211(sc);
792 if (ifp->if_snd.ifq_head != NULL)
793 ndis_start(ifp);
794 break;
795 case NDIS_STATUS_MEDIA_DISCONNECT:
800 if (sc->ndis_80211)
801 ndis_getstate_80211(sc);
802 if (ifp->if_snd.ifq_head != NULL)
803 ndis_start(ifp);
804 break;
805 case NDIS_STATUS_MEDIA_DISCONNECT:
796 printf("ndis%d: link down\n", sc->ndis_unit);
806 device_printf(sc->ndis_dev, "link down\n");
797 if (sc->ndis_80211)
798 ndis_getstate_80211(sc);
799 sc->ndis_link = 0;
800 break;
801 default:
802 break;
803 }
804

--- 240 unchanged lines hidden (view full) ---

1045 i = sizeof(ndis_filter);
1046
1047 error = ndis_set_info(sc, OID_GEN_CURRENT_PACKET_FILTER,
1048 &ndis_filter, &i);
1049
1050 sc->ndis_filter = ndis_filter;
1051
1052 if (error)
807 if (sc->ndis_80211)
808 ndis_getstate_80211(sc);
809 sc->ndis_link = 0;
810 break;
811 default:
812 break;
813 }
814

--- 240 unchanged lines hidden (view full) ---

1055 i = sizeof(ndis_filter);
1056
1057 error = ndis_set_info(sc, OID_GEN_CURRENT_PACKET_FILTER,
1058 &ndis_filter, &i);
1059
1060 sc->ndis_filter = ndis_filter;
1061
1062 if (error)
1053 printf ("set filter failed: %d\n", error);
1063 device_printf (sc->ndis_dev, "set filter failed: %d\n", error);
1054
1055 sc->ndis_txidx = 0;
1056 sc->ndis_txpending = sc->ndis_maxpkts;
1057 sc->ndis_link = 0;
1058
1059 if (sc->ndis_80211)
1060 ndis_setstate_80211(sc);
1061

--- 64 unchanged lines hidden (view full) ---

1126 break;
1127 case 1000000:
1128 ifmr->ifm_active |= IFM_100_TX;
1129 break;
1130 case 10000000:
1131 ifmr->ifm_active |= IFM_1000_T;
1132 break;
1133 default:
1064
1065 sc->ndis_txidx = 0;
1066 sc->ndis_txpending = sc->ndis_maxpkts;
1067 sc->ndis_link = 0;
1068
1069 if (sc->ndis_80211)
1070 ndis_setstate_80211(sc);
1071

--- 64 unchanged lines hidden (view full) ---

1136 break;
1137 case 1000000:
1138 ifmr->ifm_active |= IFM_100_TX;
1139 break;
1140 case 10000000:
1141 ifmr->ifm_active |= IFM_1000_T;
1142 break;
1143 default:
1134 printf("ndis%d: unknown speed: %d\n",
1135 sc->ndis_unit, media_info);
1144 device_printf(sc->ndis_dev, "unknown speed: %d\n", media_info);
1136 break;
1137 }
1138
1139 return;
1140}
1141
1142static void
1143ndis_setstate_80211(sc)

--- 12 unchanged lines hidden (view full) ---

1156 if (!(ifp->if_flags & IFF_UP))
1157 return;
1158
1159 arg = NDIS_80211_AUTHMODE_AUTO;
1160 len = sizeof(arg);
1161 rval = ndis_set_info(sc, OID_802_11_AUTHENTICATION_MODE, &arg, &len);
1162
1163 if (rval)
1145 break;
1146 }
1147
1148 return;
1149}
1150
1151static void
1152ndis_setstate_80211(sc)

--- 12 unchanged lines hidden (view full) ---

1165 if (!(ifp->if_flags & IFF_UP))
1166 return;
1167
1168 arg = NDIS_80211_AUTHMODE_AUTO;
1169 len = sizeof(arg);
1170 rval = ndis_set_info(sc, OID_802_11_AUTHENTICATION_MODE, &arg, &len);
1171
1172 if (rval)
1164 printf ("ndis%d: set auth failed: %d\n", sc->ndis_unit, rval);
1173 device_printf (sc->ndis_dev, "set auth failed: %d\n", rval);
1165
1166 /* Set network infrastructure mode. */
1167
1168 len = sizeof(arg);
1169 if (ic->ic_opmode == IEEE80211_M_IBSS)
1170 arg = NDIS_80211_NET_INFRA_IBSS;
1171 else
1172 arg = NDIS_80211_NET_INFRA_BSS;
1173
1174 rval = ndis_set_info(sc, OID_802_11_INFRASTRUCTURE_MODE, &arg, &len);
1175
1176 if (rval)
1174
1175 /* Set network infrastructure mode. */
1176
1177 len = sizeof(arg);
1178 if (ic->ic_opmode == IEEE80211_M_IBSS)
1179 arg = NDIS_80211_NET_INFRA_IBSS;
1180 else
1181 arg = NDIS_80211_NET_INFRA_BSS;
1182
1183 rval = ndis_set_info(sc, OID_802_11_INFRASTRUCTURE_MODE, &arg, &len);
1184
1185 if (rval)
1177 printf ("ndis%d: set infra failed: %d\n", sc->ndis_unit, rval);
1186 device_printf (sc->ndis_dev, "set infra failed: %d\n", rval);
1178
1179 /* Set WEP */
1180
1181 if (ic->ic_flags & IEEE80211_F_WEPON) {
1182 for (i = 0; i < IEEE80211_WEP_NKID; i++) {
1183 if (ic->ic_nw_keys[i].wk_len) {
1184 bzero((char *)&wep, sizeof(wep));
1185 wep.nw_keylen = ic->ic_nw_keys[i].wk_len;

--- 11 unchanged lines hidden (view full) ---

1197 if (i == ic->ic_wep_txkey)
1198 wep.nw_keyidx |= NDIS_80211_WEPKEY_TX;
1199 bcopy(ic->ic_nw_keys[i].wk_key,
1200 wep.nw_keydata, wep.nw_length);
1201 len = sizeof(wep);
1202 rval = ndis_set_info(sc,
1203 OID_802_11_ADD_WEP, &wep, &len);
1204 if (rval)
1187
1188 /* Set WEP */
1189
1190 if (ic->ic_flags & IEEE80211_F_WEPON) {
1191 for (i = 0; i < IEEE80211_WEP_NKID; i++) {
1192 if (ic->ic_nw_keys[i].wk_len) {
1193 bzero((char *)&wep, sizeof(wep));
1194 wep.nw_keylen = ic->ic_nw_keys[i].wk_len;

--- 11 unchanged lines hidden (view full) ---

1206 if (i == ic->ic_wep_txkey)
1207 wep.nw_keyidx |= NDIS_80211_WEPKEY_TX;
1208 bcopy(ic->ic_nw_keys[i].wk_key,
1209 wep.nw_keydata, wep.nw_length);
1210 len = sizeof(wep);
1211 rval = ndis_set_info(sc,
1212 OID_802_11_ADD_WEP, &wep, &len);
1213 if (rval)
1205 printf("ndis%d: set wepkey "
1206 "failed: %d\n", sc->ndis_unit,
1207 rval);
1214 device_printf(sc->ndis_dev,
1215 "set wepkey failed: %d\n", rval);
1208 }
1209 }
1210 arg = NDIS_80211_WEPSTAT_ENABLED;
1211 len = sizeof(arg);
1212 rval = ndis_set_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1213 if (rval)
1216 }
1217 }
1218 arg = NDIS_80211_WEPSTAT_ENABLED;
1219 len = sizeof(arg);
1220 rval = ndis_set_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1221 if (rval)
1214 printf("ndis%d: enable WEP failed: %d\n",
1215 sc->ndis_unit, rval);
1222 device_printf(sc->ndis_dev,
1223 "enable WEP failed: %d\n", rval);
1216 } else {
1217 arg = NDIS_80211_WEPSTAT_DISABLED;
1218 len = sizeof(arg);
1219 ndis_set_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1220 }
1221
1222
1223 /* Set SSID. */
1224
1225 len = sizeof(ssid);
1226 bzero((char *)&ssid, len);
1227 ssid.ns_ssidlen = ic->ic_des_esslen;
1228 if (ssid.ns_ssidlen == 0) {
1229 ssid.ns_ssidlen = 1;
1230 } else
1231 bcopy(ic->ic_des_essid, ssid.ns_ssid, ssid.ns_ssidlen);
1232 rval = ndis_set_info(sc, OID_802_11_SSID, &ssid, &len);
1233
1234 if (rval)
1224 } else {
1225 arg = NDIS_80211_WEPSTAT_DISABLED;
1226 len = sizeof(arg);
1227 ndis_set_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1228 }
1229
1230
1231 /* Set SSID. */
1232
1233 len = sizeof(ssid);
1234 bzero((char *)&ssid, len);
1235 ssid.ns_ssidlen = ic->ic_des_esslen;
1236 if (ssid.ns_ssidlen == 0) {
1237 ssid.ns_ssidlen = 1;
1238 } else
1239 bcopy(ic->ic_des_essid, ssid.ns_ssid, ssid.ns_ssidlen);
1240 rval = ndis_set_info(sc, OID_802_11_SSID, &ssid, &len);
1241
1242 if (rval)
1235 printf ("ndis%d: set ssid failed: %d\n", sc->ndis_unit, rval);
1243 device_printf (sc->ndis_dev, "set ssid failed: %d\n", rval);
1236
1237 return;
1238}
1239
1240static void
1241ndis_getstate_80211(sc)
1242 struct ndis_softc *sc;
1243{

--- 13 unchanged lines hidden (view full) ---

1257 ic->ic_state = IEEE80211_S_RUN;
1258 else
1259 ic->ic_state = IEEE80211_S_ASSOC;
1260/*
1261 len = sizeof(arg);
1262 rval = ndis_get_info(sc, OID_802_11_INFRASTRUCTURE_MODE, &arg, &len);
1263
1264 if (rval)
1244
1245 return;
1246}
1247
1248static void
1249ndis_getstate_80211(sc)
1250 struct ndis_softc *sc;
1251{

--- 13 unchanged lines hidden (view full) ---

1265 ic->ic_state = IEEE80211_S_RUN;
1266 else
1267 ic->ic_state = IEEE80211_S_ASSOC;
1268/*
1269 len = sizeof(arg);
1270 rval = ndis_get_info(sc, OID_802_11_INFRASTRUCTURE_MODE, &arg, &len);
1271
1272 if (rval)
1265 printf ("ndis%d: get infra failed: %d\n", sc->ndis_unit, rval);
1273 device_printf (sc->ndis_dev, "get infra failed: %d\n", rval);
1266
1267 switch(arg) {
1268 case NDIS_80211_NET_INFRA_IBSS:
1269 ic->ic_opmode = IEEE80211_M_IBSS;
1270 break;
1271 case NDIS_80211_NET_INFRA_BSS:
1272 ic->ic_opmode = IEEE80211_M_STA;
1273 break;
1274 default:
1275 break;
1276 }
1277*/
1278 len = sizeof(ssid);
1279 bzero((char *)&ssid, len);
1280 rval = ndis_get_info(sc, OID_802_11_SSID, &ssid, &len);
1281
1282 if (rval)
1274
1275 switch(arg) {
1276 case NDIS_80211_NET_INFRA_IBSS:
1277 ic->ic_opmode = IEEE80211_M_IBSS;
1278 break;
1279 case NDIS_80211_NET_INFRA_BSS:
1280 ic->ic_opmode = IEEE80211_M_STA;
1281 break;
1282 default:
1283 break;
1284 }
1285*/
1286 len = sizeof(ssid);
1287 bzero((char *)&ssid, len);
1288 rval = ndis_get_info(sc, OID_802_11_SSID, &ssid, &len);
1289
1290 if (rval)
1283 printf ("ndis%d: get ssid failed: %d\n", sc->ndis_unit, rval);
1291 device_printf (sc->ndis_dev, "get ssid failed: %d\n", rval);
1284 bcopy(ssid.ns_ssid, ic->ic_bss->ni_essid, ssid.ns_ssidlen);
1285 ic->ic_bss->ni_esslen = ssid.ns_ssidlen;
1286
1287 len = sizeof(arg);
1288 rval = ndis_get_info(sc, OID_GEN_LINK_SPEED, &arg, &len);
1289
1290 if (ic->ic_modecaps & (1<<IEEE80211_MODE_11B)) {
1291 ic->ic_bss->ni_rates = ic->ic_sup_rates[IEEE80211_MODE_11B];

--- 10 unchanged lines hidden (view full) ---

1302 for (i = 0; i < ic->ic_bss->ni_rates.rs_nrates; i++) {
1303 if ((ic->ic_bss->ni_rates.rs_rates[i] &
1304 IEEE80211_RATE_VAL) == (arg / 10000) * 2)
1305 break;
1306 }
1307 }
1308
1309 if (i == ic->ic_bss->ni_rates.rs_nrates)
1292 bcopy(ssid.ns_ssid, ic->ic_bss->ni_essid, ssid.ns_ssidlen);
1293 ic->ic_bss->ni_esslen = ssid.ns_ssidlen;
1294
1295 len = sizeof(arg);
1296 rval = ndis_get_info(sc, OID_GEN_LINK_SPEED, &arg, &len);
1297
1298 if (ic->ic_modecaps & (1<<IEEE80211_MODE_11B)) {
1299 ic->ic_bss->ni_rates = ic->ic_sup_rates[IEEE80211_MODE_11B];

--- 10 unchanged lines hidden (view full) ---

1310 for (i = 0; i < ic->ic_bss->ni_rates.rs_nrates; i++) {
1311 if ((ic->ic_bss->ni_rates.rs_rates[i] &
1312 IEEE80211_RATE_VAL) == (arg / 10000) * 2)
1313 break;
1314 }
1315 }
1316
1317 if (i == ic->ic_bss->ni_rates.rs_nrates)
1310 printf ("ndis%d: no matching rate for: %d\n",
1311 sc->ndis_unit, (arg / 10000) * 2);
1318 device_printf (sc->ndis_dev, "no matching rate for: %d\n",
1319 (arg / 10000) * 2);
1312 else
1313 ic->ic_bss->ni_txrate = i;
1314
1315 len = sizeof(arg);
1316 rval = ndis_get_info(sc, OID_802_11_POWER_MODE, &arg, &len);
1317
1318 if (rval)
1320 else
1321 ic->ic_bss->ni_txrate = i;
1322
1323 len = sizeof(arg);
1324 rval = ndis_get_info(sc, OID_802_11_POWER_MODE, &arg, &len);
1325
1326 if (rval)
1319 printf ("ndis%d: get power mode failed: %d\n",
1320 sc->ndis_unit, rval);
1327 device_printf (sc->ndis_dev,
1328 "get power mode failed: %d\n", rval);
1321 if (arg == NDIS_80211_POWERMODE_CAM)
1322 ic->ic_flags &= ~IEEE80211_F_PMGTON;
1323 else
1324 ic->ic_flags |= IEEE80211_F_PMGTON;
1325
1326/*
1327 len = sizeof(arg);
1328 rval = ndis_get_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1329
1330 if (rval)
1329 if (arg == NDIS_80211_POWERMODE_CAM)
1330 ic->ic_flags &= ~IEEE80211_F_PMGTON;
1331 else
1332 ic->ic_flags |= IEEE80211_F_PMGTON;
1333
1334/*
1335 len = sizeof(arg);
1336 rval = ndis_get_info(sc, OID_802_11_WEP_STATUS, &arg, &len);
1337
1338 if (rval)
1331 printf ("ndis%d: get wep status failed: %d\n",
1332 sc->ndis_unit, rval);
1339 device_printf (sc->ndis_dev,
1340 "get wep status failed: %d\n", rval);
1333
1334 if (arg == NDIS_80211_WEPSTAT_ENABLED)
1335 ic->ic_flags |= IEEE80211_F_WEPON;
1336 else
1337 ic->ic_flags &= ~IEEE80211_F_WEPON;
1338*/
1339 return;
1340}

--- 77 unchanged lines hidden (view full) ---

1418 struct ifnet *ifp;
1419{
1420 struct ndis_softc *sc;
1421
1422 sc = ifp->if_softc;
1423
1424 NDIS_LOCK(sc);
1425 ifp->if_oerrors++;
1341
1342 if (arg == NDIS_80211_WEPSTAT_ENABLED)
1343 ic->ic_flags |= IEEE80211_F_WEPON;
1344 else
1345 ic->ic_flags &= ~IEEE80211_F_WEPON;
1346*/
1347 return;
1348}

--- 77 unchanged lines hidden (view full) ---

1426 struct ifnet *ifp;
1427{
1428 struct ndis_softc *sc;
1429
1430 sc = ifp->if_softc;
1431
1432 NDIS_LOCK(sc);
1433 ifp->if_oerrors++;
1426 printf("ndis%d: watchdog timeout\n", sc->ndis_unit);
1434 device_printf(sc->ndis_dev, "watchdog timeout\n");
1427
1428 ndis_reset(sc);
1429
1430 if (ifp->if_snd.ifq_head != NULL)
1431 ndis_start(ifp);
1432 NDIS_UNLOCK(sc);
1433
1434 return;

--- 41 unchanged lines hidden ---
1435
1436 ndis_reset(sc);
1437
1438 if (ifp->if_snd.ifq_head != NULL)
1439 ndis_start(ifp);
1440 NDIS_UNLOCK(sc);
1441
1442 return;

--- 41 unchanged lines hidden ---