Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Mar 2004 10:31:53 -0800 (PST)
From:      Bill Paul <wpaul@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/compat/ndis kern_ndis.c subr_ndis.c
Message-ID:  <200403251831.i2PIVrkl097680@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
wpaul       2004/03/25 10:31:53 PST

  FreeBSD src repository

  Modified files:
    sys/compat/ndis      kern_ndis.c subr_ndis.c 
  Log:
  - In subr_ndis.c:ndis_init_event(), initialize events as notification
    objects rather than synchronization objects. When a sync object is
    signaled, only the first thread waiting on it is woken up, and then
    it's automatically reset to the not-signaled state. When a
    notification object is signaled, all threads waiting on it will
    be woken up, and it remains in the signaled state until someone
    resets it manually. We want the latter behavior for NDIS events.
  
  - In kern_ndis.c:ndis_convert_res(), we have to create a temporary
    copy of the list returned by BUS_GET_RESOURCE_LIST(). When the PCI
    bus code probes resources for a given device, it enters them into
    a singly linked list, head first. The result is that traversing
    this list gives you the resources in reverse order. This means when
    we create the Windows resource list, it will be in reverse order too.
    Unfortunately, this can hose drivers for devices with multiple I/O
    ranges of the same type, like, say, two memory mapped I/O regions (one
    for registers, one to map the NVRAM/bootrom/whatever). Some drivers
    test the range size to figure out which region is which, but others
    just assume that the resources will be listed in ascending order from
    lowest numbered BAR to highest. Reversing the order means such drivers
    will choose the wrong resource as their I/O register range.
  
    Since we can't traverse the resource SLIST backwards, we have to
    make a temporary copy of the list in the right order and then build
    the Windows resource list from that. I suppose we could just fix
    the PCI bus code to use a TAILQ instead, but then I'd have to track
    down all the consumers of the BUS_GET_RESOURCE_LIST() and fix them
    too.
  
  Revision  Changes    Path
  1.47      +39 -2     src/sys/compat/ndis/kern_ndis.c
  1.53      +2 -2      src/sys/compat/ndis/subr_ndis.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403251831.i2PIVrkl097680>