From 1bdb22f3a1d9c2cd498e27a3a3cd607e76fa2184 Mon Sep 17 00:00:00 2001 From: wpaul Date: Fri, 26 Dec 2003 03:31:34 +0000 Subject: [PATCH] Back out the last batch of changes until I have a chance to properly evaluate them. Whatever they're meant to do, they're doing it wrong. Also: - Clean up last bits of NULL fallout in subr_pe - Don't let ndis_ifmedia_sts() do anything if the IFF_UP flag isn't set - Implement NdisSystemProcessorCount() and NdisQueryMapRegisterCount(). --- sys/compat/ndis/kern_ndis.c | 68 ++++++++++++++++++------------------- sys/compat/ndis/ndis_var.h | 1 - sys/compat/ndis/subr_ndis.c | 50 +++++++++++++++------------ sys/compat/ndis/subr_pe.c | 2 +- sys/dev/if_ndis/if_ndis.c | 9 +++-- 5 files changed, 69 insertions(+), 61 deletions(-) diff --git a/sys/compat/ndis/kern_ndis.c b/sys/compat/ndis/kern_ndis.c index f4e9b0ec699..76a49d70e6b 100644 --- a/sys/compat/ndis/kern_ndis.c +++ b/sys/compat/ndis/kern_ndis.c @@ -81,7 +81,6 @@ __stdcall static void ndis_statusdone_func(ndis_handle); __stdcall static void ndis_setdone_func(ndis_handle, ndis_status); __stdcall static void ndis_getdone_func(ndis_handle, ndis_status); __stdcall static void ndis_resetdone_func(ndis_handle, ndis_status, uint8_t); -static void ndis_free_packet_and_bufs(ndis_packet *); /* * This allows us to export our symbols to other modules. @@ -328,38 +327,6 @@ ndis_flush_sysctls(arg) return(0); } -void -ndis_free_bufs(b0) - ndis_buffer *b0; -{ - ndis_buffer *next; - - if (b0 == NULL) - return; - - while(b0 != NULL) { - next = b0->nb_next; - ndis_free_buf(b0); - b0 = next; - } - - return; -} - -static void -ndis_free_packet_and_bufs(p) - ndis_packet *p; -{ - if (p == NULL) - return; - - ndis_free_bufs(p->np_private.npp_head); - p->np_private.npp_head = NULL; - ndis_free_packet(p); - - return; -} - void ndis_return_packet(buf, arg) void *buf; /* not used */ @@ -385,13 +352,44 @@ ndis_return_packet(buf, arg) sc = p->np_softc; returnfunc = sc->ndis_chars.nmc_return_packet_func; adapter = sc->ndis_block.nmb_miniportadapterctx; - if (returnfunc == NULL || p->np_oob.npo_status != NDIS_STATUS_PENDING) - ndis_free_packet_and_bufs(p); + if (returnfunc == NULL) + ndis_free_packet(p); else returnfunc(adapter, p); return; } +void +ndis_free_bufs(b0) + ndis_buffer *b0; +{ + ndis_buffer *next; + + if (b0 == NULL) + return; + + while(b0 != NULL) { + next = b0->nb_next; + free (b0, M_DEVBUF); + b0 = next; + } + + return; +} + +void +ndis_free_packet(p) + ndis_packet *p; +{ + if (p == NULL) + return; + + ndis_free_bufs(p->np_private.npp_head); + free(p, M_DEVBUF); + + return; +} + int ndis_convert_res(arg) void *arg; diff --git a/sys/compat/ndis/ndis_var.h b/sys/compat/ndis/ndis_var.h index 4ae28968e2f..d3814a6bbf6 100644 --- a/sys/compat/ndis/ndis_var.h +++ b/sys/compat/ndis/ndis_var.h @@ -1177,7 +1177,6 @@ extern int ndis_convert_res(void *); extern int ndis_alloc_amem(void *); extern void ndis_free_packet(ndis_packet *); extern void ndis_free_bufs(ndis_buffer *); -extern void ndis_free_buf(ndis_buffer *); extern int ndis_reset_nic(void *); extern int ndis_halt_nic(void *); extern int ndis_shutdown_nic(void *); diff --git a/sys/compat/ndis/subr_ndis.c b/sys/compat/ndis/subr_ndis.c index 2996df10f08..0259ef1def5 100644 --- a/sys/compat/ndis/subr_ndis.c +++ b/sys/compat/ndis/subr_ndis.c @@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -150,6 +151,7 @@ __stdcall static void ndis_deregister_ioport(ndis_handle, uint32_t, uint32_t, void *); __stdcall static void ndis_read_netaddr(ndis_status *, void **, uint32_t *, ndis_handle); +__stdcall static ndis_status ndis_mapreg_cnt(uint32_t, uint32_t *); __stdcall static ndis_status ndis_alloc_mapreg(ndis_handle, uint32_t, uint8_t, uint32_t, uint32_t); __stdcall static void ndis_free_mapreg(ndis_handle); @@ -242,6 +244,7 @@ __stdcall static void ndis_open_file(ndis_status *, ndis_handle *, uint32_t *, __stdcall static void ndis_map_file(ndis_status *, void **, ndis_handle); __stdcall static void ndis_unmap_file(ndis_handle); __stdcall static void ndis_close_file(ndis_handle); +__stdcall static u_int8_t ndis_cpu_cnt(void); __stdcall static void dummy(void); @@ -1085,6 +1088,15 @@ ndis_read_netaddr(status, addr, addrlen, adapter) return; } +__stdcall static ndis_status +ndis_mapreg_cnt(bustype, cnt) + uint32_t bustype; + uint32_t *cnt; +{ + *cnt = 64; + return(NDIS_STATUS_SUCCESS); +} + __stdcall static ndis_status ndis_alloc_mapreg(adapter, dmachannel, dmasize, physmapneeded, maxmap) ndis_handle adapter; @@ -1477,8 +1489,8 @@ ndis_alloc_packet(status, packet, pool) return; } -void -ndis_free_packet(packet) +__stdcall static void +ndis_release_packet(packet) ndis_packet *packet; { ndis_packet *head; @@ -1497,14 +1509,6 @@ ndis_free_packet(packet) return; } -__stdcall static void -ndis_release_packet(packet) - ndis_packet *packet; -{ - ndis_free_packet(packet); - return; -} - __stdcall static void ndis_unchain_headbuf(packet, buf) ndis_packet *packet; @@ -1644,8 +1648,8 @@ ndis_alloc_buf(status, buffer, pool, vaddr, len) return; } -void -ndis_free_buf(buf) +__stdcall static void +ndis_release_buf(buf) ndis_buffer *buf; { ndis_buffer *head; @@ -1664,14 +1668,6 @@ ndis_free_buf(buf) return; } -__stdcall static void -ndis_release_buf(buf) - ndis_buffer *buf; -{ - ndis_free_buf(buf); - return; -} - /* * Get the virtual address and length of a buffer. * Note: the vaddr argument is optional. @@ -2265,6 +2261,16 @@ ndis_close_file(filehandle) return; } +__stdcall static uint8_t +ndis_cpu_cnt() +{ +#ifdef SMP + return(mp_ncpus); +#else + return(1); +#endif +}; + __stdcall static void dummy() { @@ -2273,6 +2279,7 @@ dummy() } image_patch_table ndis_functbl[] = { + { "NdisSystemProcessorCount", (FUNC)ndis_cpu_cnt }, { "NdisUnchainBufferAtBack", (FUNC)ndis_unchain_tailbuf, }, { "NdisGetFirstBufferFromPacket", (FUNC)ndis_firstbuf }, { "NdisGetFirstBufferFromPacketSafe", (FUNC)ndis_firstbuf_safe }, @@ -2322,8 +2329,9 @@ image_patch_table ndis_functbl[] = { { "NdisMRegisterIoPortRange", (FUNC)ndis_register_ioport }, { "NdisMDeregisterIoPortRange", (FUNC)ndis_deregister_ioport }, { "NdisReadNetworkAddress", (FUNC)ndis_read_netaddr }, + { "NdisQueryMapRegisterCount", (FUNC)ndis_mapreg_cnt }, { "NdisMAllocateMapRegisters", (FUNC)ndis_alloc_mapreg }, - { "NdisMFreeMapRegisters", (FUNC)ndis_free_mapreg }, + { "NdisMFreeMapRegisters", (FUNC)ndis_free_mapreg }, { "NdisMAllocateSharedMemory", (FUNC)ndis_alloc_sharedmem }, { "NdisMMapIoSpace", (FUNC)ndis_map_iospace }, { "NdisMUnmapIoSpace", (FUNC)ndis_unmap_iospace }, diff --git a/sys/compat/ndis/subr_pe.c b/sys/compat/ndis/subr_pe.c index 7132b3122a3..340d669561c 100644 --- a/sys/compat/ndis/subr_pe.c +++ b/sys/compat/ndis/subr_pe.c @@ -520,7 +520,7 @@ pe_patch_imports(imgbase, module, functbl) fptr = (vm_offset_t *)pe_translate_addr(imgbase, imp_desc.iid_import_address_table_addr); - while (nptr != NULL && pe_translate_addr(imgbase, *nptr) != NULL) { + while (nptr != NULL && pe_translate_addr(imgbase, *nptr)) { fname = (char *)pe_translate_addr(imgbase, (*nptr) + 2); func = pe_functbl_match(functbl, fname); if (func) diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 0bad3c93bed..6ee63b16102 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -1048,6 +1048,12 @@ ndis_ifmedia_sts(ifp, ifmr) ndis_media_state linkstate; int error, len; + ifmr->ifm_status = IFM_AVALID; + ifmr->ifm_active = IFM_ETHER; + + if (!(ifp->if_flags & IFF_UP)) + return; + sc = ifp->if_softc; len = sizeof(linkstate); @@ -1058,9 +1064,6 @@ ndis_ifmedia_sts(ifp, ifmr) error = ndis_get_info(sc, OID_GEN_LINK_SPEED, (void *)&media_info, &len); - ifmr->ifm_status = IFM_AVALID; - ifmr->ifm_active = IFM_ETHER; - if (linkstate == nmc_connected) ifmr->ifm_status |= IFM_ACTIVE; -- 2.45.2