summaryrefslogtreecommitdiffstats
path: root/sys/dev/mxge/mcp_gen_header.h
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2006-02-19 22:39:19 +0000
committergallatin <gallatin@FreeBSD.org>2006-02-19 22:39:19 +0000
commit9a34695ace03c6cf7bf16f38837d5c90c310d5db (patch)
tree0062dda628f25042020575c33e42389f89e8c7b2 /sys/dev/mxge/mcp_gen_header.h
parent35856d05d214e9842e12f9fa271f43bf8e4ccb90 (diff)
downloadFreeBSD-src-9a34695ace03c6cf7bf16f38837d5c90c310d5db.zip
FreeBSD-src-9a34695ace03c6cf7bf16f38837d5c90c310d5db.tar.gz
10GbE mode driver and binary firmware for Myricom's PCI-express NICs.
More info regarding these nics can be found at http://www.myri.com. Please note that the files sys/dev/myri10ge/{mcp_gen_header.h,myri10ge_mcp.h} are internally shared between all our drivers (solaris, macosx, windows, linux, etc). I'd like to keep these files unchanged, so I can just import newer versions of them when the firmware API/ABI changes. This means I'm stuck with some of the crazy-long #define names, and possibly non-style(9) characteristics of these files. Many thanks to mlaier for doing firmware(9) just as I needed it, and to scottl for his helpful review. Reviewed by: scottl, glebius Sponsored by: Myricom Inc.
Diffstat (limited to 'sys/dev/mxge/mcp_gen_header.h')
-rw-r--r--sys/dev/mxge/mcp_gen_header.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/sys/dev/mxge/mcp_gen_header.h b/sys/dev/mxge/mcp_gen_header.h
new file mode 100644
index 0000000..7cb4491
--- /dev/null
+++ b/sys/dev/mxge/mcp_gen_header.h
@@ -0,0 +1,107 @@
+/*******************************************************************************
+
+Copyright (c) 2006, Myricom Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the Myricom Inc, nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+$FreeBSD$
+***************************************************************************/
+
+#ifndef _mcp_gen_header_h
+#define _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.1 2005/12/23 02:10:44 gallatin 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" */
+
+
+typedef 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.
+ */
+} mcp_gen_header_t;
+
+/* Macro to create a simple mcp header */
+#define MCP_GEN_HEADER_DECL(type, version_str, global_ptr) \
+ struct mcp_gen_header mcp_gen_header = { \
+ sizeof (struct mcp_gen_header), \
+ (type), \
+ version_str, \
+ (global_ptr), \
+ SRAM_SIZE, \
+ (unsigned int) STRING_SPECS, \
+ 256 \
+ }
+
+
+#endif /* _mcp_gen_header_h */
OpenPOWER on IntegriCloud