Deleted Added
full compact
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}