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>
This commit is contained in:
committed by
David S. Miller
parent
ec9323f417
commit
94a78b79cb
37
drivers/net/bnx2x_fw_file_hdr.h
Normal file
37
drivers/net/bnx2x_fw_file_hdr.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/* bnx2x_fw_file_hdr.h: FW binary file header structure.
|
||||
*
|
||||
* Copyright (c) 2007-2009 Broadcom Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*
|
||||
* Maintained by: Eilon Greenstein <eilong@broadcom.com>
|
||||
* Written by: Vladislav Zolotarov <vladz@broadcom.com>
|
||||
* Based on the original idea of John Wright <john.wright@hp.com>.
|
||||
*/
|
||||
|
||||
#ifndef BNX2X_INIT_FILE_HDR_H
|
||||
#define BNX2X_INIT_FILE_HDR_H
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
#endif /* BNX2X_INIT_FILE_HDR_H */
|
||||
Reference in New Issue
Block a user