|
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 */
|