kern_ndis.c (140267) | kern_ndis.c (140751) |
---|---|
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/compat/ndis/kern_ndis.c 140267 2005-01-14 22:39:44Z wpaul $"); | 34__FBSDID("$FreeBSD: head/sys/compat/ndis/kern_ndis.c 140751 2005-01-24 18:18:12Z wpaul $"); |
35 36#include <sys/param.h> 37#include <sys/systm.h> 38#include <sys/unistd.h> 39#include <sys/types.h> 40#include <sys/errno.h> 41#include <sys/callout.h> 42#include <sys/socket.h> --- 738 unchanged lines hidden (view full) --- 781 p = arg; 782 sc = p->np_softc; 783 adapter = sc->ndis_block.nmb_miniportadapterctx; 784 785 if (adapter == NULL) 786 return; 787 788 returnfunc = sc->ndis_chars.nmc_return_packet_func; | 35 36#include <sys/param.h> 37#include <sys/systm.h> 38#include <sys/unistd.h> 39#include <sys/types.h> 40#include <sys/errno.h> 41#include <sys/callout.h> 42#include <sys/socket.h> --- 738 unchanged lines hidden (view full) --- 781 p = arg; 782 sc = p->np_softc; 783 adapter = sc->ndis_block.nmb_miniportadapterctx; 784 785 if (adapter == NULL) 786 return; 787 788 returnfunc = sc->ndis_chars.nmc_return_packet_func; |
789 irql = ntoskrnl_raise_irql(DISPATCH_LEVEL); | 789 irql = KeRaiseIrql(DISPATCH_LEVEL); |
790 returnfunc(adapter, p); | 790 returnfunc(adapter, p); |
791 ntoskrnl_lower_irql(irql); | 791 KeLowerIrql(irql); |
792 793 return; 794} 795 796void 797ndis_return_packet(buf, arg) 798 void *buf; /* not used */ 799 void *arg; --- 22 unchanged lines hidden (view full) --- 822 ndis_buffer *b0; 823{ 824 ndis_buffer *next; 825 826 if (b0 == NULL) 827 return; 828 829 while(b0 != NULL) { | 792 793 return; 794} 795 796void 797ndis_return_packet(buf, arg) 798 void *buf; /* not used */ 799 void *arg; --- 22 unchanged lines hidden (view full) --- 822 ndis_buffer *b0; 823{ 824 ndis_buffer *next; 825 826 if (b0 == NULL) 827 return; 828 829 while(b0 != NULL) { |
830 next = b0->nb_next; | 830 next = b0->mdl_next; |
831 uma_zfree (ndis_buffer_zone, b0); 832 b0 = next; 833 } 834 835 return; 836} 837 838void --- 145 unchanged lines hidden (view full) --- 984 985 if (p == NULL || m0 == NULL) 986 return(EINVAL); 987 988 priv = &p->np_private; 989 buf = priv->npp_head; 990 p->np_refcnt = 0; 991 | 831 uma_zfree (ndis_buffer_zone, b0); 832 b0 = next; 833 } 834 835 return; 836} 837 838void --- 145 unchanged lines hidden (view full) --- 984 985 if (p == NULL || m0 == NULL) 986 return(EINVAL); 987 988 priv = &p->np_private; 989 buf = priv->npp_head; 990 p->np_refcnt = 0; 991 |
992 for (buf = priv->npp_head; buf != NULL; buf = buf->nb_next) { | 992 for (buf = priv->npp_head; buf != NULL; buf = buf->mdl_next) { |
993 if (buf == priv->npp_head) 994 MGETHDR(m, M_DONTWAIT, MT_HEADER); 995 else 996 MGET(m, M_DONTWAIT, MT_DATA); 997 if (m == NULL) { 998 m_freem(*m0); 999 *m0 = NULL; 1000 return(ENOBUFS); 1001 } | 993 if (buf == priv->npp_head) 994 MGETHDR(m, M_DONTWAIT, MT_HEADER); 995 else 996 MGET(m, M_DONTWAIT, MT_DATA); 997 if (m == NULL) { 998 m_freem(*m0); 999 *m0 = NULL; 1000 return(ENOBUFS); 1001 } |
1002 m->m_len = buf->nb_bytecount; 1003 m->m_data = MDL_VA(buf); | 1002 m->m_len = MmGetMdlByteCount(buf); 1003 m->m_data = MmGetMdlVirtualAddress(buf); |
1004 MEXTADD(m, m->m_data, m->m_len, ndis_return_packet, 1005 p, 0, EXT_NDIS); 1006 p->np_refcnt++; 1007 totlen += m->m_len; 1008 if (m->m_flags & MT_HEADER) 1009 *m0 = m; 1010 else 1011 prev->m_next = m; --- 50 unchanged lines hidden (view full) --- 1062 continue; 1063 buf = uma_zalloc(ndis_buffer_zone, M_NOWAIT | M_ZERO); 1064 if (buf == NULL) { 1065 ndis_free_packet(*p); 1066 *p = NULL; 1067 return(ENOMEM); 1068 } 1069 | 1004 MEXTADD(m, m->m_data, m->m_len, ndis_return_packet, 1005 p, 0, EXT_NDIS); 1006 p->np_refcnt++; 1007 totlen += m->m_len; 1008 if (m->m_flags & MT_HEADER) 1009 *m0 = m; 1010 else 1011 prev->m_next = m; --- 50 unchanged lines hidden (view full) --- 1062 continue; 1063 buf = uma_zalloc(ndis_buffer_zone, M_NOWAIT | M_ZERO); 1064 if (buf == NULL) { 1065 ndis_free_packet(*p); 1066 *p = NULL; 1067 return(ENOMEM); 1068 } 1069 |
1070 MDL_INIT(buf, m->m_data, m->m_len); | 1070 MmInitializeMdl(buf, m->m_data, m->m_len); |
1071 if (priv->npp_head == NULL) 1072 priv->npp_head = buf; 1073 else | 1071 if (priv->npp_head == NULL) 1072 priv->npp_head = buf; 1073 else |
1074 prev->nb_next = buf; | 1074 prev->mdl_next = buf; |
1075 prev = buf; 1076 } 1077 1078 priv->npp_tail = buf; 1079 priv->npp_totlen = m0->m_pkthdr.len; 1080 1081 return(0); 1082} --- 48 unchanged lines hidden (view full) --- 1131 NDIS_LOCK(sc); 1132 setfunc = sc->ndis_chars.nmc_setinfo_func; 1133 adapter = sc->ndis_block.nmb_miniportadapterctx; 1134 NDIS_UNLOCK(sc); 1135 1136 if (adapter == NULL || setfunc == NULL) 1137 return(ENXIO); 1138 | 1075 prev = buf; 1076 } 1077 1078 priv->npp_tail = buf; 1079 priv->npp_totlen = m0->m_pkthdr.len; 1080 1081 return(0); 1082} --- 48 unchanged lines hidden (view full) --- 1131 NDIS_LOCK(sc); 1132 setfunc = sc->ndis_chars.nmc_setinfo_func; 1133 adapter = sc->ndis_block.nmb_miniportadapterctx; 1134 NDIS_UNLOCK(sc); 1135 1136 if (adapter == NULL || setfunc == NULL) 1137 return(ENXIO); 1138 |
1139 ntoskrnl_acquire_spinlock(&sc->ndis_block.nmb_lock, &irql); | 1139 KeAcquireSpinLock(&sc->ndis_block.nmb_lock, &irql); |
1140 rval = setfunc(adapter, oid, buf, *buflen, 1141 &byteswritten, &bytesneeded); | 1140 rval = setfunc(adapter, oid, buf, *buflen, 1141 &byteswritten, &bytesneeded); |
1142 ntoskrnl_release_spinlock(&sc->ndis_block.nmb_lock, irql); | 1142 KeReleaseSpinLock(&sc->ndis_block.nmb_lock, irql); |
1143 1144 if (rval == NDIS_STATUS_PENDING) { 1145 mtx_lock(&ndis_req_mtx); 1146 error = msleep(&sc->ndis_block.nmb_setstat, 1147 &ndis_req_mtx, 1148 curthread->td_priority|PDROP, 1149 "ndisset", 5 * hz); 1150 rval = sc->ndis_block.nmb_setstat; --- 37 unchanged lines hidden (view full) --- 1188 uint8_t irql; 1189 1190 sc = arg; 1191 adapter = sc->ndis_block.nmb_miniportadapterctx; 1192 if (adapter == NULL) 1193 return(ENXIO); 1194 sendfunc = sc->ndis_chars.nmc_sendmulti_func; 1195 senddonefunc = sc->ndis_block.nmb_senddone_func; | 1143 1144 if (rval == NDIS_STATUS_PENDING) { 1145 mtx_lock(&ndis_req_mtx); 1146 error = msleep(&sc->ndis_block.nmb_setstat, 1147 &ndis_req_mtx, 1148 curthread->td_priority|PDROP, 1149 "ndisset", 5 * hz); 1150 rval = sc->ndis_block.nmb_setstat; --- 37 unchanged lines hidden (view full) --- 1188 uint8_t irql; 1189 1190 sc = arg; 1191 adapter = sc->ndis_block.nmb_miniportadapterctx; 1192 if (adapter == NULL) 1193 return(ENXIO); 1194 sendfunc = sc->ndis_chars.nmc_sendmulti_func; 1195 senddonefunc = sc->ndis_block.nmb_senddone_func; |
1196 irql = ntoskrnl_raise_irql(DISPATCH_LEVEL); | 1196 irql = KeRaiseIrql(DISPATCH_LEVEL); |
1197 sendfunc(adapter, packets, cnt); | 1197 sendfunc(adapter, packets, cnt); |
1198 ntoskrnl_lower_irql(irql); | 1198 KeLowerIrql(irql); |
1199 1200 for (i = 0; i < cnt; i++) { 1201 p = packets[i]; 1202 /* 1203 * Either the driver already handed the packet to 1204 * ndis_txeof() due to a failure, or it wants to keep 1205 * it and release it asynchronously later. Skip to the 1206 * next one. --- 20 unchanged lines hidden (view full) --- 1227 1228 sc = arg; 1229 adapter = sc->ndis_block.nmb_miniportadapterctx; 1230 if (adapter == NULL) 1231 return(ENXIO); 1232 sendfunc = sc->ndis_chars.nmc_sendsingle_func; 1233 senddonefunc = sc->ndis_block.nmb_senddone_func; 1234 | 1199 1200 for (i = 0; i < cnt; i++) { 1201 p = packets[i]; 1202 /* 1203 * Either the driver already handed the packet to 1204 * ndis_txeof() due to a failure, or it wants to keep 1205 * it and release it asynchronously later. Skip to the 1206 * next one. --- 20 unchanged lines hidden (view full) --- 1227 1228 sc = arg; 1229 adapter = sc->ndis_block.nmb_miniportadapterctx; 1230 if (adapter == NULL) 1231 return(ENXIO); 1232 sendfunc = sc->ndis_chars.nmc_sendsingle_func; 1233 senddonefunc = sc->ndis_block.nmb_senddone_func; 1234 |
1235 irql = ntoskrnl_raise_irql(DISPATCH_LEVEL); | 1235 irql = KeRaiseIrql(DISPATCH_LEVEL); |
1236 status = sendfunc(adapter, packet, packet->np_private.npp_flags); | 1236 status = sendfunc(adapter, packet, packet->np_private.npp_flags); |
1237 ntoskrnl_lower_irql(irql); | 1237 KeLowerIrql(irql); |
1238 1239 if (status == NDIS_STATUS_PENDING) 1240 return(0); 1241 1242 senddonefunc(&sc->ndis_block, packet, status); 1243 1244 return(0); 1245} --- 70 unchanged lines hidden (view full) --- 1316 ifp = &sc->arpcom.ac_if; 1317 NDIS_LOCK(sc); 1318 adapter = sc->ndis_block.nmb_miniportadapterctx; 1319 resetfunc = sc->ndis_chars.nmc_reset_func; 1320 NDIS_UNLOCK(sc); 1321 if (adapter == NULL || resetfunc == NULL) 1322 return(EIO); 1323 | 1238 1239 if (status == NDIS_STATUS_PENDING) 1240 return(0); 1241 1242 senddonefunc(&sc->ndis_block, packet, status); 1243 1244 return(0); 1245} --- 70 unchanged lines hidden (view full) --- 1316 ifp = &sc->arpcom.ac_if; 1317 NDIS_LOCK(sc); 1318 adapter = sc->ndis_block.nmb_miniportadapterctx; 1319 resetfunc = sc->ndis_chars.nmc_reset_func; 1320 NDIS_UNLOCK(sc); 1321 if (adapter == NULL || resetfunc == NULL) 1322 return(EIO); 1323 |
1324 irql = ntoskrnl_raise_irql(DISPATCH_LEVEL); | 1324 irql = KeRaiseIrql(DISPATCH_LEVEL); |
1325 rval = resetfunc(&addressing_reset, adapter); | 1325 rval = resetfunc(&addressing_reset, adapter); |
1326 ntoskrnl_lower_irql(irql); | 1326 KeLowerIrql(irql); |
1327 1328 if (rval == NDIS_STATUS_PENDING) { 1329 mtx_lock(&ndis_req_mtx); 1330 msleep(sc, &ndis_req_mtx, 1331 curthread->td_priority|PDROP, "ndisrst", 0); 1332 } 1333 1334 return(0); --- 214 unchanged lines hidden (view full) --- 1549 NDIS_LOCK(sc); 1550 queryfunc = sc->ndis_chars.nmc_queryinfo_func; 1551 adapter = sc->ndis_block.nmb_miniportadapterctx; 1552 NDIS_UNLOCK(sc); 1553 1554 if (adapter == NULL || queryfunc == NULL) 1555 return(ENXIO); 1556 | 1327 1328 if (rval == NDIS_STATUS_PENDING) { 1329 mtx_lock(&ndis_req_mtx); 1330 msleep(sc, &ndis_req_mtx, 1331 curthread->td_priority|PDROP, "ndisrst", 0); 1332 } 1333 1334 return(0); --- 214 unchanged lines hidden (view full) --- 1549 NDIS_LOCK(sc); 1550 queryfunc = sc->ndis_chars.nmc_queryinfo_func; 1551 adapter = sc->ndis_block.nmb_miniportadapterctx; 1552 NDIS_UNLOCK(sc); 1553 1554 if (adapter == NULL || queryfunc == NULL) 1555 return(ENXIO); 1556 |
1557 ntoskrnl_acquire_spinlock(&sc->ndis_block.nmb_lock, &irql); | 1557 KeAcquireSpinLock(&sc->ndis_block.nmb_lock, &irql); |
1558 rval = queryfunc(adapter, oid, buf, *buflen, 1559 &byteswritten, &bytesneeded); | 1558 rval = queryfunc(adapter, oid, buf, *buflen, 1559 &byteswritten, &bytesneeded); |
1560 ntoskrnl_release_spinlock(&sc->ndis_block.nmb_lock, irql); | 1560 KeReleaseSpinLock(&sc->ndis_block.nmb_lock, irql); |
1561 1562 /* Wait for requests that block. */ 1563 1564 if (rval == NDIS_STATUS_PENDING) { 1565 mtx_lock(&ndis_req_mtx); 1566 error = msleep(&sc->ndis_block.nmb_getstat, 1567 &ndis_req_mtx, 1568 curthread->td_priority|PDROP, --- 137 unchanged lines hidden (view full) --- 1706 free (dummystr.nus_buf, M_DEVBUF); 1707 1708 if (status != NDIS_STATUS_SUCCESS) 1709 return(ENODEV); 1710 1711 ndis_enlarge_thrqueue(8); 1712 1713 TAILQ_INSERT_TAIL(&ndis_devhead, block, link); | 1561 1562 /* Wait for requests that block. */ 1563 1564 if (rval == NDIS_STATUS_PENDING) { 1565 mtx_lock(&ndis_req_mtx); 1566 error = msleep(&sc->ndis_block.nmb_getstat, 1567 &ndis_req_mtx, 1568 curthread->td_priority|PDROP, --- 137 unchanged lines hidden (view full) --- 1706 free (dummystr.nus_buf, M_DEVBUF); 1707 1708 if (status != NDIS_STATUS_SUCCESS) 1709 return(ENODEV); 1710 1711 ndis_enlarge_thrqueue(8); 1712 1713 TAILQ_INSERT_TAIL(&ndis_devhead, block, link); |
1714 ntoskrnl_init_lock(&block->nmb_lock); | 1714 KeInitializeSpinLock(&block->nmb_lock); |
1715 1716 return(0); 1717} | 1715 1716 return(0); 1717} |