myri10ge_mcp_gen_header.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #ifndef __MYRI10GE_MCP_GEN_HEADER_H__
  2. #define __MYRI10GE_MCP_GEN_HEADER_H__
  3. /* this file define a standard header used as a first entry point to
  4. * exchange information between firmware/driver and driver. The
  5. * header structure can be anywhere in the mcp. It will usually be in
  6. * the .data section, because some fields needs to be initialized at
  7. * compile time.
  8. * The 32bit word at offset MX_HEADER_PTR_OFFSET in the mcp must
  9. * contains the location of the header.
  10. *
  11. * Typically a MCP will start with the following:
  12. * .text
  13. * .space 52 ! to help catch MEMORY_INT errors
  14. * bt start ! jump to real code
  15. * nop
  16. * .long _gen_mcp_header
  17. *
  18. * The source will have a definition like:
  19. *
  20. * mcp_gen_header_t gen_mcp_header = {
  21. * .header_length = sizeof(mcp_gen_header_t),
  22. * .mcp_type = MCP_TYPE_XXX,
  23. * .version = "something $Id: mcp_gen_header.h,v 1.2 2006/05/13 10:04:35 bgoglin Exp $",
  24. * .mcp_globals = (unsigned)&Globals
  25. * };
  26. */
  27. #define MCP_HEADER_PTR_OFFSET 0x3c
  28. #define MCP_TYPE_MX 0x4d582020 /* "MX " */
  29. #define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */
  30. #define MCP_TYPE_ETH 0x45544820 /* "ETH " */
  31. #define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */
  32. struct mcp_gen_header {
  33. /* the first 4 fields are filled at compile time */
  34. unsigned header_length;
  35. unsigned mcp_type;
  36. char version[128];
  37. unsigned mcp_globals; /* pointer to mcp-type specific structure */
  38. /* filled by the MCP at run-time */
  39. unsigned sram_size;
  40. unsigned string_specs; /* either the original STRING_SPECS or a superset */
  41. unsigned string_specs_len;
  42. /* Fields above this comment are guaranteed to be present.
  43. *
  44. * Fields below this comment are extensions added in later versions
  45. * of this struct, drivers should compare the header_length against
  46. * offsetof(field) to check wether a given MCP implements them.
  47. *
  48. * Never remove any field. Keep everything naturally align.
  49. */
  50. };
  51. #endif /* __MYRI10GE_MCP_GEN_HEADER_H__ */