04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China/*
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * CDDL HEADER START
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China *
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China *
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * and limitations under the License.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China *
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China *
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * CDDL HEADER END
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China/*
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * Copyright 2007-2009 Myricom, Inc. All rights reserved.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China * Use is subject to license terms.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#ifndef _mcp_gen_header_h
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define _mcp_gen_header_h
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China/**
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China @file
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China This file define a standard header used as a first entry point to
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China exchange information between firmware/driver and driver.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China The header structure can be anywhere in the mcp. It will usually be in
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China the .data section, because some fields needs to be initialized at
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China compile time.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China The 32bit word at offset MX_HEADER_PTR_OFFSET in the mcp must
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China contains the location of the header.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China Typically a MCP will start with the following:
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China @code
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .text
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .space 52 ! to help catch MEMORY_INT errors
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China bt start ! jump to real code
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China nop
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .long _gen_mcp_header
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China @endcode
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China The source will have a definition like:
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China @code
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China mcp_gen_header_t gen_mcp_header = {
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .header_length = sizeof(mcp_gen_header_t),
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .mcp_type = MCP_TYPE_XXX,
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .version = "something $Id: mcp_gen_header.h,v 1.9 2009-02-27 16:29:36 loic Exp $",
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China .mcp_globals = (unsigned)&Globals
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China };
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China @endcode
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China In most case using the convenience MCP_GEN_HEADER_DECL() macro is simpler than
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China doing a full manual declaration.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China*/
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_HEADER_PTR_OFFSET 0x3c
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_MX 0x4d582020 /* "MX " */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_ETH 0x45544820 /* "ETH " */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_DFLT 0x20202020 /* " " */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#define MCP_TYPE_ETHZ 0x4554485a /* "ETHZ" */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing Chinastruct mcp_gen_header {
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China /* the first 4 fields are filled at compile time */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned header_length;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned mcp_type;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China char version[128];
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned mcp_private; /* pointer to mcp-type specific structure */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China /* filled by the MCP at run-time */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned sram_size;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned string_specs; /* either the original STRING_SPECS or a superset */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned string_specs_len;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China /* Fields above this comment are guaranteed to be present.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China Fields below this comment are extensions added in later versions
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China of this struct, drivers should compare the header_length against
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China offsetof(field) to check wether a given MCP implements them.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China Never remove any field. Keep everything naturally align.
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China /* Specifies if the running mcp is mcp0, 1, or 2. */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned char mcp_index;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned char disable_rabbit;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned char unaligned_tlp;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned char pcie_link_algo;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned counters_addr;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned copy_block_info; /* for small mcps loaded with "lload -d" */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned short handoff_id_major; /* must be equal */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned short handoff_id_caps; /* bitfield: new mcp must have superset */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned msix_table_addr; /* start address of msix table in firmware */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned bss_addr; /* start of bss */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned features;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned ee_hdr_addr;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China /* 8 */
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China};
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing Chinatypedef struct mcp_gen_header mcp_gen_header_t;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing Chinastruct zmcp_info {
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned info_len;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned zmcp_addr;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned zmcp_len;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China unsigned mcp_edata;
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China};
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China
04b6cca3fef9f6205a9aa479c48d196116193dd9lucy wang - Sun Microsystems - Beijing China#endif /* _mcp_gen_header_h */