cvs commit: src/sys/compat/ndis kern_ndis.c ntoskrnl_var.h
subr_ndis.c src/sys/dev/if_ndis if_ndis.c
Bill Paul
wpaul at FreeBSD.org
Mon Dec 22 20:08:24 PST 2003
wpaul 2003/12/22 20:08:23 PST
FreeBSD src repository
Modified files:
sys/compat/ndis kern_ndis.c ntoskrnl_var.h subr_ndis.c
sys/dev/if_ndis if_ndis.c
Log:
Re-do the handling of ndis_buffers. The NDIS_BUFFER structure is
supposed to be opaque to the driver, however it is exposed through
several macros which expect certain behavior. In my original
implementation, I used the mappedsystemva member of the structure
to hold a pointer to the buffer and bytecount to hold the length.
It turns out you must use the startva pointer to point to the
page containing the start of the buffer and set byteoffset to
the offset within the page where the buffer starts. So, for a buffer
with address 'baseva,' startva is baseva & ~(PAGE_SIZE -1) and
byteoffset is baseva & (PAGE_SIZE -1). We have to maintain this
convention everywhere that ndis_buffers are used.
Fortunately, Microsoft defines some macros for initializing and
manipulating NDIS_BUFFER structures in ntddk.h. I adapted some
of them for use here and used them where appropriate.
This fixes the discrepancy I observed between how RX'ed packet sizes
were being reported in the Broadcom wireless driver and the sample
ethernet drivers that I've tested. This should also help the
Intel Centrino wireless driver work.
Also try to properly initialize the 802.11 BSS and IBSS channels.
(Sadly, the channel value is meaningless since there's no way
in the existing NDIS API to get/set the channel, but this should
take care of any 'invalid channel (NULL)' messages printed on
the console.
Revision Changes Path
1.8 +5 -9 src/sys/compat/ndis/kern_ndis.c
1.4 +14 -0 src/sys/compat/ndis/ntoskrnl_var.h
1.11 +15 -9 src/sys/compat/ndis/subr_ndis.c
1.7 +11 -4 src/sys/dev/if_ndis/if_ndis.c
More information about the cvs-src
mailing list