104b6cca3Slucy wang - Sun Microsystems - Beijing China /*
204b6cca3Slucy wang - Sun Microsystems - Beijing China  * CDDL HEADER START
304b6cca3Slucy wang - Sun Microsystems - Beijing China  *
404b6cca3Slucy wang - Sun Microsystems - Beijing China  * The contents of this file are subject to the terms of the
504b6cca3Slucy wang - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
604b6cca3Slucy wang - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
704b6cca3Slucy wang - Sun Microsystems - Beijing China  *
804b6cca3Slucy wang - Sun Microsystems - Beijing China  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
904b6cca3Slucy wang - Sun Microsystems - Beijing China  * or http://www.opensolaris.org/os/licensing.
1004b6cca3Slucy wang - Sun Microsystems - Beijing China  * See the License for the specific language governing permissions
1104b6cca3Slucy wang - Sun Microsystems - Beijing China  * and limitations under the License.
1204b6cca3Slucy wang - Sun Microsystems - Beijing China  *
1304b6cca3Slucy wang - Sun Microsystems - Beijing China  * When distributing Covered Code, include this CDDL HEADER in each
1404b6cca3Slucy wang - Sun Microsystems - Beijing China  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1504b6cca3Slucy wang - Sun Microsystems - Beijing China  * If applicable, add the following below this CDDL HEADER, with the
1604b6cca3Slucy wang - Sun Microsystems - Beijing China  * fields enclosed by brackets "[]" replaced with your own identifying
1704b6cca3Slucy wang - Sun Microsystems - Beijing China  * information: Portions Copyright [yyyy] [name of copyright owner]
1804b6cca3Slucy wang - Sun Microsystems - Beijing China  *
1904b6cca3Slucy wang - Sun Microsystems - Beijing China  * CDDL HEADER END
2004b6cca3Slucy wang - Sun Microsystems - Beijing China  */
2104b6cca3Slucy wang - Sun Microsystems - Beijing China 
2204b6cca3Slucy wang - Sun Microsystems - Beijing China /*
2304b6cca3Slucy wang - Sun Microsystems - Beijing China  * Copyright 2007-2009 Myricom, Inc.  All rights reserved.
2404b6cca3Slucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
2504b6cca3Slucy wang - Sun Microsystems - Beijing China  */
2604b6cca3Slucy wang - Sun Microsystems - Beijing China 
2704b6cca3Slucy wang - Sun Microsystems - Beijing China #ifndef _mcp_gen_header_h
2804b6cca3Slucy wang - Sun Microsystems - Beijing China #define _mcp_gen_header_h
2904b6cca3Slucy wang - Sun Microsystems - Beijing China 
3004b6cca3Slucy wang - Sun Microsystems - Beijing China /**
3104b6cca3Slucy wang - Sun Microsystems - Beijing China    @file
3204b6cca3Slucy wang - Sun Microsystems - Beijing China    This file define a standard header used as a first entry point to
33*55fea89dSDan Cross    exchange information between firmware/driver and driver.
3404b6cca3Slucy wang - Sun Microsystems - Beijing China 
3504b6cca3Slucy wang - Sun Microsystems - Beijing China    The header structure can be anywhere in the mcp. It will usually be in
3604b6cca3Slucy wang - Sun Microsystems - Beijing China    the .data section, because some fields needs to be initialized at
3704b6cca3Slucy wang - Sun Microsystems - Beijing China    compile time.
3804b6cca3Slucy wang - Sun Microsystems - Beijing China 
3904b6cca3Slucy wang - Sun Microsystems - Beijing China    The 32bit word at offset MX_HEADER_PTR_OFFSET in the mcp must
40*55fea89dSDan Cross    contains the location of the header.
4104b6cca3Slucy wang - Sun Microsystems - Beijing China 
4204b6cca3Slucy wang - Sun Microsystems - Beijing China    Typically a MCP will start with the following:
4304b6cca3Slucy wang - Sun Microsystems - Beijing China    @code
4404b6cca3Slucy wang - Sun Microsystems - Beijing China    .text
4504b6cca3Slucy wang - Sun Microsystems - Beijing China      .space 52    ! to help catch MEMORY_INT errors
4604b6cca3Slucy wang - Sun Microsystems - Beijing China      bt start     ! jump to real code
4704b6cca3Slucy wang - Sun Microsystems - Beijing China      nop
4804b6cca3Slucy wang - Sun Microsystems - Beijing China      .long _gen_mcp_header
4904b6cca3Slucy wang - Sun Microsystems - Beijing China     @endcode
50*55fea89dSDan Cross 
5104b6cca3Slucy wang - Sun Microsystems - Beijing China    The source will have a definition like:
5204b6cca3Slucy wang - Sun Microsystems - Beijing China    @code
5304b6cca3Slucy wang - Sun Microsystems - Beijing China    mcp_gen_header_t gen_mcp_header = {
5404b6cca3Slucy wang - Sun Microsystems - Beijing China       .header_length = sizeof(mcp_gen_header_t),
5504b6cca3Slucy wang - Sun Microsystems - Beijing China       .mcp_type = MCP_TYPE_XXX,
5604b6cca3Slucy wang - Sun Microsystems - Beijing China       .version = "something $Id: mcp_gen_header.h,v 1.9 2009-02-27 16:29:36 loic Exp $",
5704b6cca3Slucy wang - Sun Microsystems - Beijing China       .mcp_globals = (unsigned)&Globals
5804b6cca3Slucy wang - Sun Microsystems - Beijing China    };
5904b6cca3Slucy wang - Sun Microsystems - Beijing China    @endcode
6004b6cca3Slucy wang - Sun Microsystems - Beijing China    In most case using the convenience MCP_GEN_HEADER_DECL() macro is simpler than
6104b6cca3Slucy wang - Sun Microsystems - Beijing China    doing a full manual declaration.
62*55fea89dSDan Cross 
6304b6cca3Slucy wang - Sun Microsystems - Beijing China */
6404b6cca3Slucy wang - Sun Microsystems - Beijing China 
6504b6cca3Slucy wang - Sun Microsystems - Beijing China 
6604b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_HEADER_PTR_OFFSET  0x3c
6704b6cca3Slucy wang - Sun Microsystems - Beijing China 
6804b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_MX 0x4d582020 /* "MX  " */
6904b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */
7004b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_ETH 0x45544820 /* "ETH " */
7104b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */
7204b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_DFLT 0x20202020 /* "    " */
7304b6cca3Slucy wang - Sun Microsystems - Beijing China #define MCP_TYPE_ETHZ 0x4554485a /* "ETHZ" */
7404b6cca3Slucy wang - Sun Microsystems - Beijing China 
7504b6cca3Slucy wang - Sun Microsystems - Beijing China struct mcp_gen_header {
7604b6cca3Slucy wang - Sun Microsystems - Beijing China   /* the first 4 fields are filled at compile time */
7704b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned header_length;
7804b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned mcp_type;
7904b6cca3Slucy wang - Sun Microsystems - Beijing China   char version[128];
8004b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned mcp_private; /* pointer to mcp-type specific structure */
8104b6cca3Slucy wang - Sun Microsystems - Beijing China 
8204b6cca3Slucy wang - Sun Microsystems - Beijing China   /* filled by the MCP at run-time */
8304b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned sram_size;
8404b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned string_specs;  /* either the original STRING_SPECS or a superset */
8504b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned string_specs_len;
8604b6cca3Slucy wang - Sun Microsystems - Beijing China 
8704b6cca3Slucy wang - Sun Microsystems - Beijing China   /* Fields above this comment are guaranteed to be present.
8804b6cca3Slucy wang - Sun Microsystems - Beijing China 
8904b6cca3Slucy wang - Sun Microsystems - Beijing China      Fields below this comment are extensions added in later versions
9004b6cca3Slucy wang - Sun Microsystems - Beijing China      of this struct, drivers should compare the header_length against
9104b6cca3Slucy wang - Sun Microsystems - Beijing China      offsetof(field) to check wether a given MCP implements them.
9204b6cca3Slucy wang - Sun Microsystems - Beijing China 
9304b6cca3Slucy wang - Sun Microsystems - Beijing China      Never remove any field.  Keep everything naturally align.
9404b6cca3Slucy wang - Sun Microsystems - Beijing China   */
9504b6cca3Slucy wang - Sun Microsystems - Beijing China 
9604b6cca3Slucy wang - Sun Microsystems - Beijing China   /* Specifies if the running mcp is mcp0, 1, or 2. */
9704b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned char mcp_index;
9804b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned char disable_rabbit;
9904b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned char unaligned_tlp;
10004b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned char pcie_link_algo;
10104b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned counters_addr;
10204b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned copy_block_info; /* for small mcps loaded with "lload -d" */
10304b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned short handoff_id_major; /* must be equal */
10404b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned short handoff_id_caps; /* bitfield: new mcp must have superset */
10504b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned msix_table_addr; /* start address of msix table in firmware */
10604b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned bss_addr; /* start of bss */
10704b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned features;
10804b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned ee_hdr_addr;
10904b6cca3Slucy wang - Sun Microsystems - Beijing China   /* 8 */
11004b6cca3Slucy wang - Sun Microsystems - Beijing China };
11104b6cca3Slucy wang - Sun Microsystems - Beijing China typedef struct mcp_gen_header mcp_gen_header_t;
11204b6cca3Slucy wang - Sun Microsystems - Beijing China 
11304b6cca3Slucy wang - Sun Microsystems - Beijing China struct zmcp_info {
11404b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned info_len;
11504b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned zmcp_addr;
11604b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned zmcp_len;
11704b6cca3Slucy wang - Sun Microsystems - Beijing China   unsigned mcp_edata;
11804b6cca3Slucy wang - Sun Microsystems - Beijing China };
11904b6cca3Slucy wang - Sun Microsystems - Beijing China 
12004b6cca3Slucy wang - Sun Microsystems - Beijing China 
12104b6cca3Slucy wang - Sun Microsystems - Beijing China #endif /* _mcp_gen_header_h */
122