diff options
Diffstat (limited to 'include/ipmitool/ipmi_fwum.h')
| -rw-r--r-- | include/ipmitool/ipmi_fwum.h | 243 | 
1 files changed, 243 insertions, 0 deletions
| diff --git a/include/ipmitool/ipmi_fwum.h b/include/ipmitool/ipmi_fwum.h new file mode 100644 index 0000000..c19a582 --- /dev/null +++ b/include/ipmitool/ipmi_fwum.h @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2003 Sun Microsystems, Inc.  All Rights Reserved. + *  + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + *  + * Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + *  + * Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + *  + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + *  + * This software is provided "AS IS," without a warranty of any kind. + * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. + * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE + * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING + * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  IN NO EVENT WILL + * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, + * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR + * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF + * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, + * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +#ifndef IPMI_KFWUM_H +# define IPMI_KFWUM_H + +#include <inttypes.h> +#include <ipmitool/ipmi.h> + +/* KFWUM Version */ +# define VER_MAJOR        1 +# define VER_MINOR        3 +/* Minimum size (IPMB/IOL/old protocol) */ +# define KFWUM_SMALL_BUFFER     32 +/* Maximum size on KCS interface */ +# define KFWUM_BIG_BUFFER       32 +# define MAX_BUFFER_SIZE          1024*16 + +/* 3 address + 1 size + 1 checksum + 1 command */ +# define KFWUM_OLD_CMD_OVERHEAD 6 +/* 1 sequence + 1 size + 1 checksum + 1 command */ +# define KFWUM_NEW_CMD_OVERHEAD 4 +# define KFWUM_PAGE_SIZE        256 + +# define FWUM_SAVE_FIRMWARE_NO_RESPONSE_LIMIT 6 +# define FWUM_MAX_UPLOAD_RETRY 6 + +# define TRACE_LOG_CHUNK_COUNT 7 +# define TRACE_LOG_CHUNK_SIZE  7 +# define TRACE_LOG_ATT_COUNT   3 + +# define IN_FIRMWARE_INFO_OFFSET_LOCATION           0x5a0 +# define IN_FIRMWARE_INFO_SIZE                      20 +# define IN_FIRMWARE_INFO_OFFSET_FILE_SIZE          0 +# define IN_FIRMWARE_INFO_OFFSET_CHECKSUM           4 +# define IN_FIRMWARE_INFO_OFFSET_BOARD_ID           6 +# define IN_FIRMWARE_INFO_OFFSET_DEVICE_ID          8 +# define IN_FIRMWARE_INFO_OFFSET_TABLE_VERSION      9 +# define IN_FIRMWARE_INFO_OFFSET_IMPLEMENT_REV      10 +# define IN_FIRMWARE_INFO_OFFSET_VER_MAJOROR      11 +# define IN_FIRMWARE_INFO_OFFSET_VER_MINORSUB     12 +# define IN_FIRMWARE_INFO_OFFSET_SDR_REV            13 +# define IN_FIRMWARE_INFO_OFFSET_IANA0              14 +# define IN_FIRMWARE_INFO_OFFSET_IANA1              15 +# define IN_FIRMWARE_INFO_OFFSET_IANA2              16 + +# define KWUM_GET_BYTE_AT_OFFSET(pBuffer,os)            pBuffer[os] + +int ipmi_fwum_main(struct ipmi_intf *, int, char **); + +typedef enum eKFWUM_BoardList +{ +	KFWUM_BOARD_KONTRON_UNKNOWN = 0, +	KFWUM_BOARD_KONTRON_5002 = 5002, +} tKFWUM_BoardList; + +typedef struct sKFWUM_BoardInfo +{ +	tKFWUM_BoardList boardId; +	IPMI_OEM  iana; +} tKFWUM_BoardInfo; + +typedef enum eKFWUM_DownloadType +{ +	KFWUM_DOWNLOAD_TYPE_ADDRESS = 0, +	KFWUM_DOWNLOAD_TYPE_SEQUENCE, +} tKFWUM_DownloadType; + +typedef enum eKFWUM_DownloadBuffferType +{ +	KFWUM_SMALL_BUFFER_TYPE = 0, +	KFUMW_BIG_BUFFER_TYPE +} tKFWUM_DownloadBuffferType; + +typedef struct sKFWUM_InFirmwareInfo +{ +	unsigned long   fileSize; +	unsigned short  checksum; +	unsigned short  sumToRemoveFromChecksum; +	/* Since the checksum is added in the bin +	 * after the checksum is calculated, we +	 * need to remove the each byte value.  This +	 * byte will contain the addition of both bytes +	 */ +	tKFWUM_BoardList boardId; +	unsigned char   deviceId; +	unsigned char   tableVers; +	unsigned char   implRev; +	unsigned char   versMajor; +	unsigned char   versMinor; +	unsigned char   versSubMinor; +	unsigned char   sdrRev; +	IPMI_OEM iana; +} tKFWUM_InFirmwareInfo; + +typedef struct sKFWUM_SaveFirmwareInfo +{ +	tKFWUM_DownloadType downloadType; +	unsigned char       bufferSize; +	unsigned char       overheadSize; +} tKFWUM_SaveFirmwareInfo; + +/* COMMANDS */ +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumGetInfoResp { +	unsigned char protocolRevision; +	unsigned char controllerDeviceId; +	struct { +		unsigned char mode:1; +		unsigned char seqAdd:1; +		unsigned char res : 6; +	} byte; +	unsigned char firmRev1; +	unsigned char firmRev2; +	unsigned char numBank; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumGetStatusResp { +	unsigned char bankState; +	unsigned char firmLengthLSB; +	unsigned char firmLengthMid; +	unsigned char firmLengthMSB; +	unsigned char firmRev1; +	unsigned char firmRev2; +	unsigned char firmRev3; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumManualRollbackReq { +	unsigned char type; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumStartFirmwareDownloadReq { +	unsigned char lengthLSB; +	unsigned char lengthMid; +	unsigned char lengthMSB; +	unsigned char paddingLSB; +	unsigned char paddingMSB; +	unsigned char useSequence; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumStartFirmwareDownloadResp { +	unsigned char bank; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumSaveFirmwareAddressReq +{ +	unsigned char addressLSB; +	unsigned char addressMid; +	unsigned char addressMSB; +	unsigned char numBytes; +	unsigned char txBuf[KFWUM_SMALL_BUFFER-KFWUM_OLD_CMD_OVERHEAD]; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumSaveFirmwareSequenceReq +{ +	unsigned char sequenceNumber; +	unsigned char txBuf[KFWUM_BIG_BUFFER]; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(1) +# endif +struct KfwumFinishFirmwareDownloadReq { +	unsigned char versionMaj; +	unsigned char versionMinSub; +	unsigned char versionSdr; +	unsigned char reserved; +} ATTRIBUTE_PACKING; +# ifdef HAVE_PRAGMA_PACK +#  pragma pack(0) +# endif + +#endif /* IPMI_KFWUM_H */ | 
