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