1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __MYRI10GE_MCP_GEN_HEADER_H__
3 #define __MYRI10GE_MCP_GEN_HEADER_H__
6 #define MCP_HEADER_PTR_OFFSET 0x3c
8 #define MCP_TYPE_MX 0x4d582020 /* "MX " */
9 #define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */
10 #define MCP_TYPE_ETH 0x45544820 /* "ETH " */
11 #define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */
12 #define MCP_TYPE_DFLT 0x20202020 /* " " */
13 #define MCP_TYPE_ETHZ 0x4554485a /* "ETHZ" */
15 struct mcp_gen_header
{
16 /* the first 4 fields are filled at compile time */
17 unsigned header_length
;
20 unsigned mcp_private
; /* pointer to mcp-type specific structure */
22 /* filled by the MCP at run-time */
24 unsigned string_specs
; /* either the original STRING_SPECS or a superset */
25 unsigned string_specs_len
;
27 /* Fields above this comment are guaranteed to be present.
29 * Fields below this comment are extensions added in later versions
30 * of this struct, drivers should compare the header_length against
31 * offsetof(field) to check whether a given MCP implements them.
33 * Never remove any field. Keep everything naturally align.
36 /* Specifies if the running mcp is mcp0, 1, or 2. */
37 unsigned char mcp_index
;
38 unsigned char disable_rabbit
;
39 unsigned char unaligned_tlp
;
40 unsigned char pcie_link_algo
;
41 unsigned counters_addr
;
42 unsigned copy_block_info
; /* for small mcps loaded with "lload -d" */
43 unsigned short handoff_id_major
; /* must be equal */
44 unsigned short handoff_id_caps
; /* bitfield: new mcp must have superset */
45 unsigned msix_table_addr
; /* start address of msix table in firmware */
46 unsigned bss_addr
; /* start of bss */
50 unsigned led_pattern_dflt
;
61 #endif /* __MYRI10GE_MCP_GEN_HEADER_H__ */