59 строки
1.8 KiB
C
59 строки
1.8 KiB
C
#ifndef __MYRI10GE_MCP_GEN_HEADER_H__
|
|
#define __MYRI10GE_MCP_GEN_HEADER_H__
|
|
|
|
|
|
#define MCP_HEADER_PTR_OFFSET 0x3c
|
|
|
|
#define MCP_TYPE_MX 0x4d582020 /* "MX " */
|
|
#define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */
|
|
#define MCP_TYPE_ETH 0x45544820 /* "ETH " */
|
|
#define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */
|
|
#define MCP_TYPE_DFLT 0x20202020 /* " " */
|
|
#define MCP_TYPE_ETHZ 0x4554485a /* "ETHZ" */
|
|
|
|
struct mcp_gen_header {
|
|
/* the first 4 fields are filled at compile time */
|
|
unsigned header_length;
|
|
__be32 mcp_type;
|
|
char version[128];
|
|
unsigned mcp_private; /* pointer to mcp-type specific structure */
|
|
|
|
/* filled by the MCP at run-time */
|
|
unsigned sram_size;
|
|
unsigned string_specs; /* either the original STRING_SPECS or a superset */
|
|
unsigned string_specs_len;
|
|
|
|
/* Fields above this comment are guaranteed to be present.
|
|
*
|
|
* Fields below this comment are extensions added in later versions
|
|
* of this struct, drivers should compare the header_length against
|
|
* offsetof(field) to check wether a given MCP implements them.
|
|
*
|
|
* Never remove any field. Keep everything naturally align.
|
|
*/
|
|
|
|
/* Specifies if the running mcp is mcp0, 1, or 2. */
|
|
unsigned char mcp_index;
|
|
unsigned char disable_rabbit;
|
|
unsigned char unaligned_tlp;
|
|
unsigned char pcie_link_algo;
|
|
unsigned counters_addr;
|
|
unsigned copy_block_info; /* for small mcps loaded with "lload -d" */
|
|
unsigned short handoff_id_major; /* must be equal */
|
|
unsigned short handoff_id_caps; /* bitfield: new mcp must have superset */
|
|
unsigned msix_table_addr; /* start address of msix table in firmware */
|
|
unsigned bss_addr; /* start of bss */
|
|
unsigned features;
|
|
unsigned ee_hdr_addr;
|
|
/* 8 */
|
|
};
|
|
|
|
struct zmcp_info {
|
|
unsigned info_len;
|
|
unsigned zmcp_addr;
|
|
unsigned zmcp_len;
|
|
unsigned mcp_edata;
|
|
};
|
|
|
|
#endif /* __MYRI10GE_MCP_GEN_HEADER_H__ */
|