summaryrefslogtreecommitdiff
path: root/util/ipmidir.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/ipmidir.h')
-rw-r--r--util/ipmidir.h301
1 files changed, 301 insertions, 0 deletions
diff --git a/util/ipmidir.h b/util/ipmidir.h
new file mode 100644
index 0000000..079c6b6
--- /dev/null
+++ b/util/ipmidir.h
@@ -0,0 +1,301 @@
+/***********************************************
+ * ipmidir.h
+ *
+ * Definitions and data structures for direct
+ * user-space IPMI I/Os.
+ *
+ ***********************************************/
+/*----------------------------------------------------------------------*
+The BSD License
+
+Copyright (c) 2006, Intel Corporation
+Copyright (c) 2009 Kontron America, 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:
+
+ a.. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ b.. Redistributions 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.
+ c.. Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *----------------------------------------------------------------------*/
+#ifndef IPMIDIR_H_
+#define IPMIDIR_H_
+
+
+#define SMB_DATA_ADDRESS = 0x000
+
+//
+// State bits based on S1 & S0 below
+//
+#define ISA_STATE_MASK 0xC0
+#define ISA_IDLE_STATE 0x00
+#define ISA_READ_STATE 0x40
+#define ISA_WRITE_STATE 0x80
+#define ISA_ERROR_STATE 0xC0
+//
+// Status Register Bits
+//
+#define ISA_S1_FLAG 0x80
+#define ISA_S0_FLAG 0x40
+// RESERVED 0x20
+// RESERVED 0x10
+#define ISA_CD_FLAG 0x08
+#define ISA_SMS_MSG_FLAG 0x04
+#define ISA_IBF_FLAG 0x02
+#define ISA_OBF_FLAG 0x01
+//
+// ISA interface register access defines
+//
+
+#define BMC_SLAVE_ADDR 0x20
+#define MAX_ISA_LENGTH 35
+
+#define ISA_SMS_TIMEOUT 5000 // in miliseconds - 1 second
+#define ISA_SMM_TIMEOUT 100 // in microseconds
+//
+// mBMC Address
+//
+#define IMB_SEND_ERROR 1
+#define IMB_SUCCESS 0
+
+// typedef unsigned int DWORD;
+// typedef unsigned char BYTE;
+// typedef unsigned char UCHAR; * defined in imb_api.h *
+// typedef unsigned long ULONG; * defined in imb_api.h *
+// typedef unsigned int UINT32;
+typedef unsigned short UINT16;
+typedef unsigned char UINT8;
+
+struct SMBCharStruct
+{
+unsigned int Controller;
+unsigned int baseAddr;
+};
+
+/*---------------------------------------------------------*
+ * PCI defines for SMBus
+ *---------------------------------------------------------*/
+
+// PCI related definitions
+#define PCI_CONFIG_ADDRESS 0xCF8
+#define PCI_CONFIG_DATA 0xCFC
+
+// PCI unique identifiers
+#define ID_8111 0x746A1022
+#define ID_81801 0x24128086
+#define ID_81801AA 0x24138086
+#define ID_81801AB 0x24238086
+#define ID_82801BA 0x24438086
+#define ID_82801CA 0x24838086
+#define ID_ICH4 0x24C38086
+#define ID_ICH5 0x24D38086
+#define ID_ICH6 0x266A8086 //srini added ICH6 support
+#define ID_CSB5 0x02011166
+#define ID_CSB6 0x02031166
+#define ID_OSB4 0x02001166
+#define Hance_Rapids 0x25A48086 //lester 0627
+
+// PCI configuration registers
+#define ICH_SMB_BASE 0x20 // base address register
+#define ICH_HOSTC 0x40 // host config register
+#define ICH_HOSTC_I2C_EN 0x04 // enable i2c mode
+#define ICH_HOSTC_SMB_SMI_EN 0x02 // SMI# instead of irq
+#define ICH_HOSTC_HST_EN 0x01 // enable host cntrlr
+#define AMD_SMB_BASE_2 0x10 // base address register of SMBus 2.0
+#define AMD_SMB_BASE_2_EN 0x04 // SMBus 2.0 space enable
+#define AMD_SMB_BASE_1 0x58 // base address register of SMBus 1.0
+#define AMD_SMB_BASE_1_EN 0x41 // SMBus 1.0 space enable
+#define AMD_SMBUS_1 0xE0 // SMBus 1.0 registers
+
+// I/O registers
+#define ICH_HST_STA 0x00 // host status
+#define ICH_HST_STA_BYTE_DONE_STS 0x80 // byte send/rec'd
+#define ICH_HST_STA_INUSE_STS 0x40 // device access mutex
+#define ICH_HST_STA_SMBALERT_STS 0x20 // SMBALERT# signal
+#define ICH_HST_STA_FAILED 0x10 // failed bus transaction
+#define ICH_HST_STA_BUS_ERR 0x08 // transaction collision
+#define ICH_HST_STA_DEV_ERR 0x04 // misc. smb device error
+#define ICH_HST_STA_ALL_ERRS (ICH_HST_STA_FAILED|ICH_HST_STA_BUS_ERR|ICH_HST_STA_DEV_ERR)
+#define ICH_HST_STA_INTR 0x02 // command completed ok
+#define ICH_HST_STA_HOST_BUSY 0x01 // command is running
+#define ICH_HST_CNT 0x02 // host control
+#define ICH_HST_CNT_START 0x40 // start command
+#define ICH_HST_CNT_LAST_BYTE 0x20 // indicate last byte
+#define ICH_HST_CNT_SMB_CMD_QUICK 0x00 // command: quick
+#define ICH_HST_CNT_SMB_CMD_BYTE 0x04 // command: byte
+#define ICH_HST_CNT_SMB_CMD_BYTE_DATA 0x08 // command: byte data
+#define ICH_HST_CNT_SMB_CMD_WORD_DATA 0x0c // command: word data
+#define ICH_HST_CNT_SMB_CMD_PROC_CALL 0x10 // command: process call
+#define ICH_HST_CNT_SMB_CMD_BLOCK 0x14 // command: block
+#define ICH_HST_CNT_SMB_CMD_I2C_READ 0x18 // command: i2c read
+#define ICH_HST_CNT_KILL 0x02 // kill current transaction
+#define ICH_HST_CNT_INTREN 0x01 // enable interrupt
+#define ICH_HST_CMD 0x03 // host command
+#define ICH_XMIT_SLVA 0x04 // transmit slave address
+#define ICH_XMIT_SLVA_READ 0x01 // direction: read
+#define ICH_XMIT_SLVA_WRITE 0x00 // direction: write
+#define ICH_D0 0x05 // host data 0
+#define ICH_D1 0x06 // host data 1
+#define ICH_BLOCK_DB 0x07 // block data byte
+
+// SMBus 1.0
+#define AMD_SMB_1_STATUS 0x00 // SMBus global status
+#define AMD_SMB_1_STATUS_SMBS_BSY (1<11)
+#define AMD_SMB_1_STATUS_SMBA_STS (1<10)
+#define AMD_SMB_1_STATUS_HSLV_STS (1<9)
+#define AMD_SMB_1_STATUS_SNP_STS (1<8)
+#define AMD_SMB_1_STATUS_TO_STS (1<5)
+#define AMD_SMB_1_STATUS_HCYC_STS (1<4)
+#define AMD_SMB_1_STATUS_HST_BSY (1<3)
+#define AMD_SMB_1_STATUS_PERR_STS (1<2)
+#define AMD_SMB_1_STATUS_COL_STS (1<1)
+#define AMD_SMB_1_STATUS_ABRT_STS (1<0)
+#define AMD_SMB_1_STATUS_ALL_ERRS AMD_SMB_1_STATUS_TO_STS|AMD_SMB_1_STATUS_HST_BSY|AMD_SMB_1_STATUS_PERR_STS|AMD_SMB_1_STATUS_COL_STS
+#define AMD_SMB_1_CTL 0x02 // SMBus global control
+#define AMD_SMB_1_CTL_SMBA_EN (1<<10)
+#define AMD_SMB_1_CTL_HSLV_EN (1<<9)
+#define AMD_SMB_1_CTL_SNP_EN (1<<8)
+#define AMD_SMB_1_CTL_ABORT (1<<5)
+#define AMD_SMB_HCYC_EN (1<<4)
+#define AMD_SMB_HOSTSTS (1<<3)
+#define AMD_SMB_CYCTYPE_QC 0x0 // quick command
+#define AMD_SMB_CYCTYPE_RSB 0x1 // receive/send byte
+#define AMD_SMB_CYCTYPE_RWB 0x2 // read/write byte
+#define AMD_SMB_CYCTYPE_RWW 0x3 // read/write word
+#define AMD_SMB_CYCTYPE_PC 0x4 // process call
+#define AMD_SMB_CYCTYPE_RWBL 0x5 // read/write block
+#define AMD_SMB_1_ADDR 0x04 // SMBus host address
+#define AMD_SMB_1_ADDR_READCYC (1<<0)
+#define AMD_SMB_1_DATA 0x06 // SMBus host data
+#define AMD_SMB_1_CMD 0x08 // SMBus host command
+#define AMD_SMB_1_BLOCK_DATA 0x09 // SMBus block data FIFO access port
+
+// For SMBus 2.0, see ACPI 2.0 chapter 13 PCI interface definitions
+
+#define AMD_SMB_BLOCK_WRITE 0xa
+#define AMD_SMB_BLOCK_READ 0xb
+
+// AMD PCI control registers definitions.
+#define AMD_PCI_MISC 0x48
+#define AMD_PCI_MISC_SCI 0x04
+#define AMD_PCI_MISC_INT 0x02
+#define AMD_PCI_MISC_SPEEDUP 0x01
+
+
+// SMBus Controllers
+#define INTEL_SMBC 1 // Intel
+#define SW_SMBC 2 // ServerWorks
+#define VIA_SMBC 3 // VIA
+#define AMD_SMBC 4 // AMD
+
+/************************************************
+ * bmc.h
+ ************************************************/
+
+#define STATUS_OK 0
+#define BMC_MAX_RETRIES 3 // Max number of retries if BMC is busy
+#define DATA_BUF_SIZE 255 // Max data buffer, see IPMI_REQBUF_SIZE
+#define GETMSGTIMEOUT 5 // Time out in sec for send/get message command
+
+// Product IDs of systems with PC87431 chips (have both Sahalee and mBMC)
+#define ID_PC87431_M 0x4311
+#define ID_PC87431_S 0x4312
+#define ID_PC87431_C 0x4315
+
+// Available BMC chips that are supported by this library.
+#define BMC_UNKNOWN 0
+#define BMC_SAHALEE 1 // Intel Sahalee BMC
+#define BMC_MBMC_87431M 2 // mBMC, chip = PC87431M
+#define BMC_MBMC_87431S 3 // mBMC, chip = PC87431S
+#define BMC_MBMC_87431C 4 // mBMC, chip = PC87431C
+#define BMC_BOTH_SAHALEE_MBMC 5
+#define BMC_DUAL_NW 6 // currently not detected
+// #define BMC_AMT10 7
+
+// Available IPMI versions. There may be full and partial IPMI implementations.
+// To figure out what implementation is supported, look at the BMC_TYPE.
+#define IPMI_VERSION_UNKNOWN 0
+#define IPMI_VERSION_1_5 1
+#define IPMI_VERSION_2_0 2
+#define IPMI_VERSION_1_0 3
+
+//*****************************************************************************
+// Message struct for sending and receiving messages from the BMC. Requests
+// must have a DevAdd, NetFn, LUN, Cmd, Data, and Len. The response will have
+// all fields filled in. In both cases 'Len' is the length of the data buffer.
+typedef struct {
+ UINT8 Bus;
+ UINT8 DevAdd;
+ UINT8 NetFn;
+ UINT8 LUN;
+ UINT8 Cmd;
+ UINT8 Data[DATA_BUF_SIZE];
+ UINT32 Len;
+ UINT8 CompCode;
+} BMC_MESSAGE;
+
+/* Internal error codes from BMC or IPMI driver:
+ * ERR_NO_DRV is defined in ipmicmd.h, and the other
+ * values below are not used.
+ */
+#define ER_NO_BMC_IF -400 // could not find the BMC interface
+#define ERCANTLOCATEIPMIHANDLE -500 // Unable to locate IPMI handle
+#define ERCANTALLOCMEMORYFORIPMI -501 // Unable to allocate memory for IPMI services
+#define ERCANTLOADIPMIDRIVER -502 // Unable to dynamically load IPMI driver
+#define ERSENDINGIPMIMESSAGE -503 // Error sending request to BMC
+#define ERGETTINGIPMIMESSAGE -504 // Error getting request from BMC
+#define ERCMDRETURNEDDONTMATCH -505 // Returned command # doesn't match what was sent
+#define ERLUNRETURNEDDONTMATCH -506 // Returned LUN # doesn't match what was sent
+#define ERCOMPCODEERR -507 // Comp code is not COMPCODE_NORMAL
+#define ERSEQNUMBER -508 // Sequence number error.
+#define ERCANTCLEARMSGFLAGS -509 // Can not clear message flags
+#define ERINVALIDRESPONSELEN -510 // Response length not as expected.
+#define ER_NO_PCI_BIOS -511 // No PCI BIOS record exist
+#define ER_SMBUSBUSERROR -512
+#define ER_SMBUSTIMEOUT -513
+#define ER_SMBUSOWNERSHIP -514
+#define ER_SMBUSDEVERROR -515
+#define ER_NOTKCS -516 // Not KCS, probably SMBus
+
+// Device Addresses
+#define BMC_ADDR 0x20 // Baseboard Management Controller
+#define HSC0_ADDR 0xC0 // Hot Swap Controller 0
+#define HSC1_ADDR 0xC2 // Hot Swap Controller 1
+#define PSC_ADDR 0xC8 // Power Supply Controller
+#define CBC_ADDR 0x28 // Chassis Bridge Controller
+#define LCP_ADDR 0x22 // LCP(Local Control Panel) Address
+#define MBMC_ADDR 0x84 // MINI BMC address
+
+#define SMBUS_SLAVE_ADDRESS 0x00
+#define ID_VITESSE 0x01 // for HSC
+#define ID_GEM 0x02 // for HSC
+#define ISA_BUS 0xFF // ISA Bus address
+
+#define BMC_DEV_ADDR 0x20 // BMC Device Addr for Get Device ID
+// #define BMC_LUN 0x00 // BMC commands & event request messages
+#define OEM_LUN1 0x01 // OEM LUN 1
+#define SMS_MSG_LUN 0x02 // SMS message LUN
+#define OEM_LUN2 0x03 // OEM LUN 2
+
+#define NETFN_APP 0x06
+#define GETMESSAGE_CMD 0x33 // IPMI Get Message command
+#define SENDMESSAGE_CMD 0x34 // IPMI Send Message command
+
+#endif // IPMIDIR_H_