diff options
author | Brice Goglin <brice@myri.com> | 2006-05-23 06:10:15 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-05-24 00:27:31 -0400 |
commit | 0da34b6dfe55810ae60db57e08e2af8a808c0a55 (patch) | |
tree | 4a62f33ee86aba9245bd1356b64a5e797cfde967 /drivers/net/myri10ge/myri10ge_mcp_gen_header.h | |
parent | 3a720d726a6aa0a7cd9190f694587adf7bafdf4f (diff) | |
download | linux-0da34b6dfe55810ae60db57e08e2af8a808c0a55.tar.gz linux-0da34b6dfe55810ae60db57e08e2af8a808c0a55.tar.bz2 linux-0da34b6dfe55810ae60db57e08e2af8a808c0a55.zip |
[PATCH] Add Myri-10G Ethernet driver
Signed-off-by: Brice Goglin <brice@myri.com>
Signed-off-by: Andrew J. Gallatin <gallatin@myri.com>
drivers/net/Kconfig | 17
drivers/net/Makefile | 1
drivers/net/myri10ge/Makefile | 5
drivers/net/myri10ge/myri10ge.c | 2851 +++++++++++++++
drivers/net/myri10ge/myri10ge_mcp.h | 205 +
drivers/net/myri10ge/myri10ge_mcp_gen_header.h | 58
include/linux/pci_ids.h | 1
7 files changed, 3138 insertions(+)
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/myri10ge/myri10ge_mcp_gen_header.h')
-rw-r--r-- | drivers/net/myri10ge/myri10ge_mcp_gen_header.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/net/myri10ge/myri10ge_mcp_gen_header.h b/drivers/net/myri10ge/myri10ge_mcp_gen_header.h new file mode 100644 index 000000000000..1d3a35f10789 --- /dev/null +++ b/drivers/net/myri10ge/myri10ge_mcp_gen_header.h @@ -0,0 +1,58 @@ +#ifndef __MYRI10GE_MCP_GEN_HEADER_H__ +#define __MYRI10GE_MCP_GEN_HEADER_H__ + +/* this file define a standard header used as a first entry point to + * exchange information between firmware/driver and driver. The + * header structure can be anywhere in the mcp. It will usually be in + * the .data section, because some fields needs to be initialized at + * compile time. + * The 32bit word at offset MX_HEADER_PTR_OFFSET in the mcp must + * contains the location of the header. + * + * Typically a MCP will start with the following: + * .text + * .space 52 ! to help catch MEMORY_INT errors + * bt start ! jump to real code + * nop + * .long _gen_mcp_header + * + * The source will have a definition like: + * + * mcp_gen_header_t gen_mcp_header = { + * .header_length = sizeof(mcp_gen_header_t), + * .mcp_type = MCP_TYPE_XXX, + * .version = "something $Id: mcp_gen_header.h,v 1.2 2006/05/13 10:04:35 bgoglin Exp $", + * .mcp_globals = (unsigned)&Globals + * }; + */ + +#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" */ + +struct mcp_gen_header { + /* the first 4 fields are filled at compile time */ + unsigned header_length; + unsigned mcp_type; + char version[128]; + unsigned mcp_globals; /* 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. + */ +}; + +#endif /* __MYRI10GE_MCP_GEN_HEADER_H__ */ |