This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / drivers / net / myri10ge / myri10ge_mcp_gen_header.h
diff --git a/drivers/net/myri10ge/myri10ge_mcp_gen_header.h b/drivers/net/myri10ge/myri10ge_mcp_gen_header.h
new file mode 100644 (file)
index 0000000..487f779
--- /dev/null
@@ -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__ */