13 Aug, 2009

9 commits

  • Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Moving the code to a more logical place and beautifying it. No real change in
    behavior.

    Signed-off-by: Vladislav Zolotarov
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Moved the dmae_command from the heap to the stack. This will save 56
    bytes per bnx2x structure. As a side benefit, we can also reduce the
    time the dmae_mutex is held. This is because do we not need to hold
    this mutex when setting up the dmae command. The memory where is dmae
    command is stored is not a shared resource and doesn not need to be
    protected.

    Signed-off-by: Benjamin Li
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Signed-off-by: Benjamin Li
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • When a given ring is running out of space, the FW can send pause towards the
    network. When working with multi-queues, when one queue is getting out of space
    it can block all other queues. The preferred scheme is to send pause frames only
    when running out of the shared internal chip buffers and if a given queue cannot
    place a packet on the host, it will drop it. Since some users might want to work
    in drop-less mode, allowing changing the behavior as a module parameter.

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • This is required for NCSI statistics

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • As suggested by Ben Hutchings , using the MDC/MDIO
    IOCTL

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • In multi-function mode, the FW can receive special management control commands
    to set the Min/Max BW and the the function link state

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • The new FW improves the packets per second rate. It required a lot of change in
    the FW which implies many changes in the driver to support it. It is now also
    possible for the driver to use a separate MSI-X vector for Rx and Tx - this also
    add some to the complicity of this change.

    All things said - after this patch, practically all performance matrixes show
    improvement.
    Though Vladislav Zolotarov is not signed on this patch, he did most of the job
    and deserves credit for that.

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     

22 Jul, 2009

2 commits

  • Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Adding support for BCM8727 - a dual port SFP+ PHY. That includes verification of
    the optic module vendor and part number - the list of approved modules resides
    on the nvram and the module is verified by the FW. Since not all users would
    like to use this verification feature, it can be disabled. The default behavior
    is to issue a warning if the module is not approved, but still allow using it -
    but it is also possible to disable the link if the module is not approved.

    Signed-off-by: Yaniv Rosner
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     

06 Jul, 2009

1 commit


27 Apr, 2009

1 commit

  • >From now on FW will be downloaded from the binary file using request_firmware.

    There will be different files for every supported chip. Currently 57710 (e1) and
    57711 (e1h).

    File names have the following format: bnx2x--.fw.
    ihex versions of current FW files are submitted in the next patch.

    Each binary file has a header in the following format:

    struct bnx2x_fw_file_section {
    __be32 len;
    __be32 offset;
    }

    struct bnx2x_fw_file_hdr {
    struct bnx2x_fw_file_section init_ops;
    struct bnx2x_fw_file_section init_ops_offsets;
    struct bnx2x_fw_file_section init_data;
    struct bnx2x_fw_file_section tsem_int_table_data;
    struct bnx2x_fw_file_section tsem_pram_data;
    struct bnx2x_fw_file_section usem_int_table_data;
    struct bnx2x_fw_file_section usem_pram_data;
    struct bnx2x_fw_file_section csem_int_table_data;
    struct bnx2x_fw_file_section csem_pram_data;
    struct bnx2x_fw_file_section xsem_int_table_data;
    struct bnx2x_fw_file_section xsem_pram_data;
    struct bnx2x_fw_file_section fw_version;
    }

    Each bnx2x_fw_file_section contains the length and the offset of the appropriate
    section in the binary file. Values are stored in the big endian format.

    Data types of arrays:

    init_data __be32
    init_ops_offsets __be16
    XXsem_pram_data u8
    XXsem_int_table_data u8
    init_ops struct raw_op {
    u8 op;
    __be24 offset;
    __be32 data;
    }
    fw_version u8

    >From now boundaries of a specific initialization stage are stored in
    init_ops_offsets array instead of being defined by separate macroes. The index
    in init_ops_offsets is calculated by BLOCK_OPS_IDX macro:

    #define BLOCK_OPS_IDX(block, stage, end) \
    (2*(((block)*STAGE_IDX_MAX) + (stage)) + (end))

    Security:

    In addition to sanity check of array boundaries bnx2x will check a FW version.
    Additional checks might be added in the future.

    Signed-off-by: Vladislav Zolotarov
    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Vladislav Zolotarov
     

10 Mar, 2009

2 commits


16 Feb, 2009

19 commits


20 Jan, 2009

2 commits


16 Jan, 2009

4 commits

  • The size of the doorbell is 4KB, this bug become visible when using
    more than 8 queues

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Wrong handling of tagged packet if VLAN offload is disabled caused
    packets to get corrupted

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • When the page size is not 4KB, the FW must be programmed to work with
    the right SGE boundaries and fragment list length.

    To avoid confusion with the BCM_PAGE_SIZE which is set to 4KB for the
    FW sake, another alias for the system page size was added to
    explicitly indicate that it is meant for the SGE

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein
     
  • Since slow-path events, including link update, are handled in
    work-queue, a race condition was introduced in the self-test that
    sometimes caused the link status to fail: the self-test was running
    under RTNL lock, and if the link-watch was scheduled it stoped the
    shared work-queue (waiting for the RTNL lock) and so the link update
    event was not handled until the self-test ended (releasing the RTNL
    lock) with failure (since the link status was not updated)

    Signed-off-by: Eilon Greenstein
    Signed-off-by: David S. Miller

    Eilon Greenstein