1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __MYRI10GE_MCP_GEN_HEADER_H__ 3 #define __MYRI10GE_MCP_GEN_HEADER_H__ 4 5 6 #define MCP_HEADER_PTR_OFFSET 0x3c 7 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" */ 14 15 struct mcp_gen_header { 16 /* the first 4 fields are filled at compile time */ 17 unsigned header_length; 18 __be32 mcp_type; 19 char version[128]; 20 unsigned mcp_private; /* pointer to mcp-type specific structure */ 21 22 /* filled by the MCP at run-time */ 23 unsigned sram_size; 24 unsigned string_specs; /* either the original STRING_SPECS or a superset */ 25 unsigned string_specs_len; 26 27 /* Fields above this comment are guaranteed to be present. 28 * 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. 32 * 33 * Never remove any field. Keep everything naturally align. 34 */ 35 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 */ 47 unsigned features; 48 unsigned ee_hdr_addr; 49 unsigned led_pattern; 50 unsigned led_pattern_dflt; 51 /* 8 */ 52 }; 53 54 struct zmcp_info { 55 unsigned info_len; 56 unsigned zmcp_addr; 57 unsigned zmcp_len; 58 unsigned mcp_edata; 59 }; 60 61 #endif /* __MYRI10GE_MCP_GEN_HEADER_H__ */ 62