summaryrefslogtreecommitdiff
path: root/include/ipmitool/ipmi_fwum.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ipmitool/ipmi_fwum.h')
-rw-r--r--include/ipmitool/ipmi_fwum.h243
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 */