root/drivers/net/ethernet/myricom/myri10ge/myri10ge_mcp_gen_header.h
/* SPDX-License-Identifier: GPL-2.0 */
#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 whether 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;
        unsigned led_pattern;
        unsigned led_pattern_dflt;
        /* 8 */
};

struct zmcp_info {
        unsigned info_len;
        unsigned zmcp_addr;
        unsigned zmcp_len;
        unsigned mcp_edata;
};

#endif                          /* __MYRI10GE_MCP_GEN_HEADER_H__ */