#ifndef PPC_MOTLOAD_VPD_H #define PPC_MOTLOAD_VPD_H /* $Id$ */ /* MotLoad VPD format */ /* Till Straumann, 2005; see copyright notice at the end of this file */ #ifdef __cplusplus extern "C" { #endif /* VPD = "MOTOROLA" , { field } field = type_byte, length_byte, { data } */ /* Known fields so far */ typedef enum { ProductIdent = 0x01, /* String */ AssemblyNumber = 0x02, /* String */ SerialNumber = 0x03, /* String */ CpuClockHz = 0x05, /* binary (5bytes), 0x01 byte appended to unsigned int */ BusClockHz = 0x06, /* binary (5bytes), 0x01 byte appended to unsigned int */ EthernetAddr = 0x08, /* binary (7bytes), 0x00 byte appended, 2nd has 0x01 appended */ CpuType = 0x09, /* String */ EEpromCrc = 0x0a, /* binary (4bytes) */ FlashConfig = 0x0b, /* binary */ L2CacheConfig = 0x0e, /* binary */ VPDRevision = 0x0f, /* binary (4bytes) */ L3CacheConfig = 0x19, /* binary */ End = 0xff } VpdKey; typedef struct { VpdKey key; /* key for the data item to be read into 'buf' */ char instance; /* instance # (starting with 0) - some keys are present more than one time */ void *buf; /* pointer to area where the data item is to be stored */ int buflen; /* available space in the buffer */ char found; /* set by BSP_vpdRetrieveFields() to the original length as found in the PROM */ } VpdBufRec, *VpdBuf; #define VPD_END { key:End, } /* Scan the VPD EEPROM for a number of fields * * Pass an array of VpdBufRec items. The routine * fills the 'buf'fers for all keys that are found * and sets the 'found' field to the original length * of the data (i.e., as found in the PROM) so that * the routine could be called again with a larger * buffer. * * NOTE: - the array must be terminated by a VPD_END record! * - no CRC check is performed. * - INTERRUPT MANAGEMENT MUST BE FUNCTIONAL * * RETURNS: 0 on success, -1 if any read errors were * encountered or if the "MOTOROLA" header * was not found. */ int BSP_vpdRetrieveFields(VpdBuf data); /* Example: * Read 2nd ethernet address: * * char enet_addr_2[6]; * * VpdBufRec enetVpd [] = { * { key: EthernetAddr, instance: 1, buf: enet_addr_2, buflen: 2}, * VPD_END * }; * * if ( BSP_vpdRetrieveFields(enetVpd) ) { * error("ethernet address couldn't be read\n"); * } else if ( enetVpd[0].found < 6 ) { * error("2nd ethernet address not found in VPD\n"); * } else { * use_it(enet_addr_2); * } */ /* Simple wrapper if only one field is needed * * RETURNS: original length if key is found, -1 on error or if key is not found */ int BSP_vpdRetrieveKey(VpdKey k, void *buf, int buflen, int instance); #ifdef __cplusplus } #endif /* * Authorship * ---------- * This software ('beatnik' RTEMS BSP for MVME6100 and MVME5500) was * created by Till Straumann , 2005-2007, * Stanford Linear Accelerator Center, Stanford University. * * Acknowledgement of sponsorship * ------------------------------ * The 'beatnik' BSP was produced by * the Stanford Linear Accelerator Center, Stanford University, * under Contract DE-AC03-76SFO0515 with the Department of Energy. * * Government disclaimer of liability * ---------------------------------- * Neither the United States nor the United States Department of Energy, * nor any of their employees, makes any warranty, express or implied, or * assumes any legal liability or responsibility for the accuracy, * completeness, or usefulness of any data, apparatus, product, or process * disclosed, or represents that its use would not infringe privately owned * rights. * * Stanford disclaimer of liability * -------------------------------- * Stanford University makes no representations or warranties, express or * implied, nor assumes any liability for the use of this software. * * Stanford disclaimer of copyright * -------------------------------- * Stanford University, owner of the copyright, hereby disclaims its * copyright and all other rights in this software. Hence, anyone may * freely use it for any purpose without restriction. * * Maintenance of notices * ---------------------- * In the interest of clarity regarding the origin and status of this * SLAC software, this and all the preceding Stanford University notices * are to remain affixed to any copy or derivative of this software made * or distributed by the recipient and are to be affixed to any copy of * software made or distributed by the recipient that contains a copy or * derivative of this software. * * ------------------ SLAC Software Notices, Set 4 OTT.002a, 2004 FEB 03 */ #endif