cvs commit: src/sys/compat/ndis kern_ndis.c ndis_var.h ntoskrnl_var.h subr_ndis.c subr_ntoskrnl.c src/sys/dev/if_ndis if_ndis.c

Bill Paul wpaul at FreeBSD.org
Sat Mar 20 15:39:44 PST 2004


wpaul       2004/03/20 15:39:43 PST

  FreeBSD src repository

  Modified files:
    sys/compat/ndis      kern_ndis.c ndis_var.h ntoskrnl_var.h 
                         subr_ndis.c subr_ntoskrnl.c 
    sys/dev/if_ndis      if_ndis.c 
  Log:
  - Rewrite the timer and event API routines in subr_ndis.c so that they
    are actually layered on top of the KeTimer API in subr_ntoskrnl.c, just
    as it is in Windows. This reduces code duplication and more closely
    imitates the way things are done in Windows.
  
  - Modify ndis_encode_parm() to deal with the case where we have
    a registry key expressed as a hex value ("0x1") which is being
    read via NdisReadConfiguration() as an int. Previously, we tried
    to decode things like "0x1" with strtol() using a base of 10, which
    would always yield 0. This is what was causing problems with the
    Intel 2200BG Centrino 802.11g driver: the .inf file that comes
    with it has a key called RadioEnable with a value of 0x1. We
    incorrectly decoded this value to '0' when it was queried, hence
    the driver thought we wanted the radio turned off.
  
  - In if_ndis.c, most drivers don't accept NDIS_80211_AUTHMODE_AUTO,
    but NDIS_80211_AUTHMODE_SHARED may not be right in some cases,
    so for now always use NDIS_80211_AUTHMODE_OPEN.
  
  NOTE: There is still one problem with the Intel 2200BG driver: it
  happens that the kernel stack in Windows is larger than the kernel
  stack in FreeBSD. The 2200BG driver sometimes eats up more than 2
  pages of stack space, which can lead to a double fault panic.
  For the moment, I got things to work by adding the following to
  my kernel config file:
  
  options         KSTACK_PAGES=8
  
  I'm pretty sure 8 is too big; I just picked this value out of a hat
  as a test, and it happened to work, so I left it. 4 pages might be
  enough. Unfortunately, I don't think you can dynamically give a
  thread a larger stack, so I'm not sure how to handle this short of
  putting a note in the man page about it and dealing with the flood
  of mail from people who never read man pages.
  
  Revision  Changes    Path
  1.43      +0 -9      src/sys/compat/ndis/kern_ndis.c
  1.22      +6 -5      src/sys/compat/ndis/ndis_var.h
  1.10      +15 -1     src/sys/compat/ndis/ntoskrnl_var.h
  1.52      +60 -171   src/sys/compat/ndis/subr_ndis.c
  1.29      +20 -30    src/sys/compat/ndis/subr_ntoskrnl.c
  1.47      +1 -1      src/sys/dev/if_ndis/if_ndis.c


More information about the cvs-all mailing list