diff options
author | Vladislav Zolotarov <vladz@broadcom.com> | 2009-04-27 06:27:43 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-04-27 06:27:43 -0400 |
commit | 94a78b79cb5f14c09a42522738d6694c6a1cdd20 (patch) | |
tree | 17bb6b92c16c91db0398baafa04996c958a8d494 /drivers/net/bnx2x.h | |
parent | ec9323f417e803f07a99a15a9cfb207662ad2c55 (diff) |
bnx2x: Separated FW from the source.
>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-<chip version>-<FW version>.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 <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x.h')
-rw-r--r-- | drivers/net/bnx2x.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h index a329bee25550..8678457849f9 100644 --- a/drivers/net/bnx2x.h +++ b/drivers/net/bnx2x.h | |||
@@ -965,6 +965,21 @@ struct bnx2x { | |||
965 | int gunzip_outlen; | 965 | int gunzip_outlen; |
966 | #define FW_BUF_SIZE 0x8000 | 966 | #define FW_BUF_SIZE 0x8000 |
967 | 967 | ||
968 | struct raw_op *init_ops; | ||
969 | /* Init blocks offsets inside init_ops */ | ||
970 | u16 *init_ops_offsets; | ||
971 | /* Data blob - has 32 bit granularity */ | ||
972 | u32 *init_data; | ||
973 | /* Zipped PRAM blobs - raw data */ | ||
974 | const u8 *tsem_int_table_data; | ||
975 | const u8 *tsem_pram_data; | ||
976 | const u8 *usem_int_table_data; | ||
977 | const u8 *usem_pram_data; | ||
978 | const u8 *xsem_int_table_data; | ||
979 | const u8 *xsem_pram_data; | ||
980 | const u8 *csem_int_table_data; | ||
981 | const u8 *csem_pram_data; | ||
982 | const struct firmware *firmware; | ||
968 | }; | 983 | }; |
969 | 984 | ||
970 | 985 | ||