summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/shared/motorola/vpd.h
blob: 61b633f38aaf287956f754fd933dbdd7c1416084 (plain) (tree)































                                                                                                 
                                              











                                                                                                                
 



















































                                                                                       
  




                                                                         
  




                                                                          
  







                                                                           
  



                                                                         
  



                                                                      

                                                     







                                                                        
  
                                                                        
   

      
#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 <strauman@slac.stanford.edu>, 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