11541Srgrimes/******************************************************************************* 21541Srgrimes 31541SrgrimesCopyright (c) 2006-2007, Myricom Inc. 41541SrgrimesAll rights reserved. 51541Srgrimes 61541SrgrimesRedistribution and use in source and binary forms, with or without 71541Srgrimesmodification, are permitted provided that the following conditions are met: 81541Srgrimes 91541Srgrimes 1. Redistributions of source code must retain the above copyright notice, 101541Srgrimes this list of conditions and the following disclaimer. 111541Srgrimes 121541Srgrimes 2. Neither the name of the Myricom Inc, nor the names of its 131541Srgrimes contributors may be used to endorse or promote products derived from 141541Srgrimes this software without specific prior written permission. 151541Srgrimes 161541SrgrimesTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 171541SrgrimesAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 181541SrgrimesIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 191541SrgrimesARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 201541SrgrimesLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211541SrgrimesCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221541SrgrimesSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 231541SrgrimesINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 241541SrgrimesCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 251541SrgrimesARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 261541SrgrimesPOSSIBILITY OF SUCH DAMAGE. 271541Srgrimes 281541Srgrimes$FreeBSD: releng/10.2/sys/dev/mxge/mcp_gen_header.h 171405 2007-07-12 16:04:55Z gallatin $ 2922521Sdyson***************************************************************************/ 3050477Speter 311541Srgrimes#ifndef _mcp_gen_header_h 321541Srgrimes#define _mcp_gen_header_h 334464Sbde 344464Sbde/* this file define a standard header used as a first entry point to 352177Spaul exchange information between firmware/driver and driver. The 3630779Sbde header structure can be anywhere in the mcp. It will usually be in 371541Srgrimes the .data section, because some fields needs to be initialized at 3830779Sbde compile time. 391541Srgrimes The 32bit word at offset MX_HEADER_PTR_OFFSET in the mcp must 401541Srgrimes contains the location of the header. 4183366Sjulian 4228270Swollman Typically a MCP will start with the following: 431541Srgrimes .text 4430779Sbde .space 52 ! to help catch MEMORY_INT errors 4522521Sdyson bt start ! jump to real code 461541Srgrimes nop 4730779Sbde .long _gen_mcp_header 4830779Sbde 4930779Sbde The source will have a definition like: 5030779Sbde 5130779Sbde mcp_gen_header_t gen_mcp_header = { 521541Srgrimes .header_length = sizeof(mcp_gen_header_t), 53138290Sphk .mcp_type = MCP_TYPE_XXX, 54138290Sphk .version = "something $Id: mcp_gen_header.h,v 1.1 2005/12/23 02:10:44 gallatin Exp $", 5530439Sphk .mcp_globals = (unsigned)&Globals 5692728Salfred }; 57100344Smckusick*/ 58100344Smckusick 59222167Srmacklem 60207141Sjeff#define MCP_HEADER_PTR_OFFSET 0x3c 6192728Salfred 6292728Salfred#define MCP_TYPE_MX 0x4d582020 /* "MX " */ 6392728Salfred#define MCP_TYPE_PCIE 0x70636965 /* "PCIE" pcie-only MCP */ 64100344Smckusick#define MCP_TYPE_ETH 0x45544820 /* "ETH " */ 65100344Smckusick#define MCP_TYPE_MCP0 0x4d435030 /* "MCP0" */ 6692728Salfred 6792728Salfred 6892728Salfredtypedef struct mcp_gen_header { 69207141Sjeff /* the first 4 fields are filled at compile time */ 7092728Salfred unsigned header_length; 7192728Salfred unsigned mcp_type; 72207141Sjeff char version[128]; 73207141Sjeff unsigned mcp_globals; /* pointer to mcp-type specific structure */ 7498542Smckusick 7592728Salfred /* filled by the MCP at run-time */ 7692728Salfred unsigned sram_size; 7792728Salfred unsigned string_specs; /* either the original STRING_SPECS or a superset */ 7892728Salfred unsigned string_specs_len; 79220985Skib 8092728Salfred /* Fields above this comment are guaranteed to be present. 8192728Salfred 8292728Salfred Fields below this comment are extensions added in later versions 83101777Sphk of this struct, drivers should compare the header_length against 8499101Siedowse offsetof(field) to check wether a given MCP implements them. 85138290Sphk 861541Srgrimes Never remove any field. Keep everything naturally align. 87207141Sjeff */ 88207141Sjeff} mcp_gen_header_t; 89207141Sjeff 9034266Sjulian/* Macro to create a simple mcp header */ 9134266Sjulian#define MCP_GEN_HEADER_DECL(type, version_str, global_ptr) \ 9234266Sjulian struct mcp_gen_header mcp_gen_header = { \ 9392728Salfred sizeof (struct mcp_gen_header), \ 9498542Smckusick (type), \ 95207141Sjeff version_str, \ 96207141Sjeff (global_ptr), \ 9792728Salfred SRAM_SIZE, \ 9892728Salfred (unsigned int) STRING_SPECS, \ 9998542Smckusick 256 \ 10092728Salfred } 10192728Salfred 102207141Sjeff 103207141Sjeff#endif /* _mcp_gen_header_h */ 104207141Sjeff