11 Oct, 2007

4 commits

  • Change the default WoL setting to match the NVRAM's setting. It
    always defaulted to WoL disabled before and caused a lot of confusion
    for users.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • This is a follow up to the patches from Denys Vlasenkos
    to further optimize firmware loading.

    1. In bnx2_init_cpus(), we allocate memory for decompression once
    and use it repeatedly instead of doing this for every firmware image.

    2. We eliminate the BSS and SBSS firmware sections in bnx2_fw*.h since
    these are always zeros.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • This patch modifies gzip unpacking code in bnx2 driver so that
    it does not depend on bnx2 internals. I will move this code
    out of the driver and into zlib in follow-on patch.

    It can be useful in other drivers which need to store firmwares
    or any other relatively big binary blobs - fonts, cursor bitmaps,
    whatever.

    Patch is run tested by Michael Chan (driver author).

    Signed-off-by: Denys Vlasenko
    Acked-by: Michael Chan
    Signed-off-by: David S. Miller

    Denys Vlasenko
     
  • Several devices have multiple independant RX queues per net
    device, and some have a single interrupt doorbell for several
    queues.

    In either case, it's easier to support layouts like that if the
    structure representing the poll is independant from the net
    device itself.

    The signature of the ->poll() call back goes from:

    int foo_poll(struct net_device *dev, int *budget)

    to

    int foo_poll(struct napi_struct *napi, int budget)

    The caller is returned the number of RX packets processed (or
    the number of "NAPI credits" consumed if you want to get
    abstract). The callee no longer messes around bumping
    dev->quota, *budget, etc. because that is all handled in the
    caller upon return.

    The napi_struct is to be embedded in the device driver private data
    structures.

    Furthermore, it is the driver's responsibility to disable all NAPI
    instances in it's ->stop() device close handler. Since the
    napi_struct is privatized into the driver's private data structures,
    only the driver knows how to get at all of the napi_struct instances
    it may have per-device.

    With lots of help and suggestions from Rusty Russell, Roland Dreier,
    Michael Chan, Jeff Garzik, and Jamal Hadi Salim.

    Bug fixes from Thomas Graf, Roland Dreier, Peter Zijlstra,
    Joseph Fannin, Scott Wood, Hans J. Koch, and Michael Chan.

    [ Ported to current tree and all drivers converted. Integrated
    Stephen's follow-on kerneldoc additions, and restored poll_list
    handling to the old style to fix mutual exclusion issues. -DaveM ]

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     

18 Jul, 2007

1 commit

  • The NVRAM interface is slightly modified on the 5709. To properly
    support it, we need to change the buffered flag in the flash data
    structure into multiple flags to indicate buffered operation, address
    translation, and the use of write enable (WREN). The 5709 flash
    only requires the buffered operation bit to be set.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

11 Jul, 2007

3 commits

  • Add management firmware version for ethtool -i.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • In addition to the periodic heartbeat, we're adding a heartbeat
    request interrupt when the heartbeat is late. This is needed during
    netpoll where the timer is not available. -rt kernels will also
    benefit since the timer is not as accurate.

    [ We discussed this patch last time and we decided that the -rt
    kernel problem alone did not justify this patch. I think the
    netpoll problem makes this patch necessary. ]

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Add new fields in struct bnx2 and other bit definitions in shared
    memory to support remote PHY.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

08 Jun, 2007

1 commit

  • Add missing code to enable DMA on 5709 A1. The bit is a no-op on A0
    and therefore can be set on all 5709 chips.

    Signed-off-by: Michael Chan
    Acked-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Michael Chan
     

04 May, 2007

8 commits


25 Apr, 2007

1 commit


02 Feb, 2007

1 commit


03 Dec, 2006

5 commits


14 Sep, 2006

1 commit


18 Aug, 2006

1 commit

  • Fix a subtle race condition between bnx2_start_xmit() and bnx2_tx_int()
    similar to the one in tg3 discovered by Herbert Xu:

    CPU0 CPU1
    bnx2_start_xmit()
    if (tx_ring_full) {
    tx_lock
    bnx2_tx()
    if (!netif_queue_stopped)
    netif_stop_queue()
    if (!tx_ring_full)
    update_tx_ring
    netif_wake_queue()
    tx_unlock
    }

    Even though tx_ring is updated before the if statement in bnx2_tx_int() in
    program order, it can be re-ordered by the CPU as shown above. This
    scenario can cause the tx queue to be stopped forever if bnx2_tx_int() has
    just freed up the entire tx_ring. The possibility of this happening
    should be very rare though.

    The following changes are made, very much identical to the tg3 fix:

    1. Add memory barrier to fix the above race condition.

    2. Eliminate the private tx_lock altogether and rely solely on
    netif_tx_lock. This eliminates one spinlock in bnx2_start_xmit()
    when the ring is full.

    3. Because of 2, use netif_tx_lock in bnx2_tx_int() before calling
    netif_wake_queue().

    4. Add memory barrier to bnx2_tx_avail().

    5. Add bp->tx_wake_thresh which is set to half the tx ring size.

    6. Check for the full wake queue condition before getting
    netif_tx_lock in tg3_tx(). This reduces the number of unnecessary
    spinlocks when the tx ring is full in a steady-state condition.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

30 Jun, 2006

1 commit


18 Jun, 2006

3 commits

  • Use CPU native page size to determine various ring sizes. This allows
    order-0 memory allocations on all systems.

    Added check to limit the page size to 16K since that's the maximum rx
    ring size that will be used. This will prevent using unnecessarily
    large page sizes on some architectures with large page sizes.
    [Suggested by David Miller]

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Add functions to decompress firmware before loading to the internal
    CPUs. Compressing the firmware reduces the driver size significantly.

    Added file name length sanity check in the gzip header to prevent
    going past the end of buffer [suggested by DaveM].

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Add a counter for packets dropped by firmware.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

23 Mar, 2006

4 commits


21 Mar, 2006

2 commits

  • Include so that it compiles properly on all archs.

    Update version to 1.4.38.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Increase maximum receive ring size from 255 to 1020 by supporting
    up to 4 linked pages of receive descriptors. To accomodate the
    higher memory usage, each physical descriptor page is allocated
    separately and the software ring that keeps track of the SKBs and the
    DMA addresses is allocated using vmalloc.

    Some of the receive-related fields in the bp structure are re-
    organized a bit for better locality of reference.

    The max. was reduced to 1020 from 4080 after discussion with David
    Miller.

    This patch contains ring init code changes only. This next patch
    contains rx data path code changes.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

24 Jan, 2006

4 commits