Blame include/ipmitool/ipmi_fwum.h

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