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 --- |