Blame include/ipmitool/ipmi_fru.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_FRU_H
Packit Service ed0f68
#define IPMI_FRU_H
Packit Service ed0f68
Packit Service ed0f68
#include <inttypes.h>
Packit Service ed0f68
#include <ipmitool/ipmi.h>
Packit Service ed0f68
#include <ipmitool/ipmi_sdr.h>
Packit Service ed0f68
Packit Service ed0f68
#if HAVE_CONFIG_H
Packit Service ed0f68
# include <config.h>
Packit Service ed0f68
#endif
Packit Service ed0f68
Packit Service ed0f68
#define GET_FRU_INFO		0x10
Packit Service ed0f68
#define GET_FRU_DATA		0x11
Packit Service ed0f68
#define SET_FRU_DATA		0x12
Packit Service ed0f68
Packit Service ed0f68
enum {
Packit Service ed0f68
	FRU_CHASSIS_PARTNO,
Packit Service ed0f68
	FRU_CHASSIS_SERIAL,
Packit Service ed0f68
	FRU_BOARD_MANUF,
Packit Service ed0f68
	FRU_BOARD_PRODUCT,
Packit Service ed0f68
	FRU_BOARD_SERIAL,
Packit Service ed0f68
	FRU_BOARD_PARTNO,
Packit Service ed0f68
	FRU_PRODUCT_MANUF,
Packit Service ed0f68
	FRU_PRODUCT_NAME,
Packit Service ed0f68
	FRU_PRODUCT_PARTNO,
Packit Service ed0f68
	FRU_PRODUCT_VERSION,
Packit Service ed0f68
	FRU_PRODUCT_SERIAL,
Packit Service ed0f68
	FRU_PRODUCT_ASSET,
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
struct fru_info {
Packit Service ed0f68
	uint16_t size;
Packit Service ed0f68
	uint8_t access:1;
Packit Service ed0f68
	uint8_t max_read_size;
Packit Service ed0f68
	uint8_t max_write_size;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_header {
Packit Service ed0f68
	uint8_t version;
Packit Service ed0f68
	union {
Packit Service ed0f68
		struct {
Packit Service ed0f68
			uint8_t internal;
Packit Service ed0f68
			uint8_t chassis;
Packit Service ed0f68
			uint8_t board;
Packit Service ed0f68
			uint8_t product;
Packit Service ed0f68
			uint8_t multi;
Packit Service ed0f68
		} offset;
Packit Service ed0f68
		uint8_t offsets[5];
Packit Service ed0f68
	};
Packit Service ed0f68
	uint8_t pad;
Packit Service ed0f68
	uint8_t checksum;
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
struct fru_area_chassis {
Packit Service ed0f68
	uint8_t area_ver;
Packit Service ed0f68
	uint8_t type;
Packit Service ed0f68
	uint16_t area_len;
Packit Service ed0f68
	char * part;
Packit Service ed0f68
	char * serial;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
struct fru_area_board {
Packit Service ed0f68
	uint8_t area_ver;
Packit Service ed0f68
	uint8_t lang;
Packit Service ed0f68
	uint16_t area_len;
Packit Service ed0f68
	uint32_t mfg_date_time;
Packit Service ed0f68
	char * mfg;
Packit Service ed0f68
	char * prod;
Packit Service ed0f68
	char * serial;
Packit Service ed0f68
	char * part;
Packit Service ed0f68
	char * fru;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
struct fru_area_product {
Packit Service ed0f68
	uint8_t area_ver;
Packit Service ed0f68
	uint8_t lang;
Packit Service ed0f68
	uint16_t area_len;
Packit Service ed0f68
	char * mfg;
Packit Service ed0f68
	char * name;
Packit Service ed0f68
	char * part;
Packit Service ed0f68
	char * version;
Packit Service ed0f68
	char * serial;
Packit Service ed0f68
	char * asset;
Packit Service ed0f68
	char * fru;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_multirec_header {
Packit Service ed0f68
#define FRU_RECORD_TYPE_POWER_SUPPLY_INFORMATION 0x00
Packit Service ed0f68
#define FRU_RECORD_TYPE_DC_OUTPUT 0x01
Packit Service ed0f68
#define FRU_RECORD_TYPE_DC_LOAD 0x02
Packit Service ed0f68
#define FRU_RECORD_TYPE_MANAGEMENT_ACCESS 0x03
Packit Service ed0f68
#define FRU_RECORD_TYPE_BASE_COMPATIBILITY 0x04
Packit Service ed0f68
#define FRU_RECORD_TYPE_EXTENDED_COMPATIBILITY 0x05
Packit Service ed0f68
#define FRU_RECORD_TYPE_OEM_EXTENSION	0xc0
Packit Service ed0f68
	uint8_t type;
Packit Service ed0f68
	uint8_t format;
Packit Service ed0f68
	uint8_t len;
Packit Service ed0f68
	uint8_t record_checksum;
Packit Service ed0f68
	uint8_t header_checksum;
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 fru_multirec_powersupply {
Packit Service ed0f68
#if WORDS_BIGENDIAN
Packit Service ed0f68
	uint16_t capacity;
Packit Service ed0f68
#else
Packit Service ed0f68
	uint16_t capacity:12;
Packit Service ed0f68
	uint16_t __reserved1:4;
Packit Service ed0f68
#endif
Packit Service ed0f68
	uint16_t peak_va;
Packit Service ed0f68
	uint8_t inrush_current;
Packit Service ed0f68
	uint8_t inrush_interval;
Packit Service ed0f68
	uint16_t lowend_input1;
Packit Service ed0f68
	uint16_t highend_input1;
Packit Service ed0f68
	uint16_t lowend_input2;
Packit Service ed0f68
	uint16_t highend_input2;
Packit Service ed0f68
	uint8_t lowend_freq;
Packit Service ed0f68
	uint8_t highend_freq;
Packit Service ed0f68
	uint8_t dropout_tolerance;
Packit Service ed0f68
#if WORDS_BIGENDIAN
Packit Service ed0f68
	uint8_t __reserved2:3;
Packit Service ed0f68
	uint8_t tach:1;
Packit Service ed0f68
	uint8_t hotswap:1;
Packit Service ed0f68
	uint8_t autoswitch:1;
Packit Service ed0f68
	uint8_t pfc:1;
Packit Service ed0f68
	uint8_t predictive_fail:1;
Packit Service ed0f68
#else
Packit Service ed0f68
	uint8_t predictive_fail:1;
Packit Service ed0f68
	uint8_t pfc:1;
Packit Service ed0f68
	uint8_t autoswitch:1;
Packit Service ed0f68
	uint8_t hotswap:1;
Packit Service ed0f68
	uint8_t tach:1;
Packit Service ed0f68
	uint8_t __reserved2:3;
Packit Service ed0f68
#endif
Packit Service ed0f68
	uint16_t peak_cap_ht;
Packit Service ed0f68
#if WORDS_BIGENDIAN
Packit Service ed0f68
	uint8_t combined_voltage1:4;
Packit Service ed0f68
	uint8_t combined_voltage2:4;
Packit Service ed0f68
#else
Packit Service ed0f68
	uint8_t combined_voltage2:4;
Packit Service ed0f68
	uint8_t combined_voltage1:4;
Packit Service ed0f68
#endif
Packit Service ed0f68
	uint16_t combined_capacity;
Packit Service ed0f68
	uint8_t rps_threshold;
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
static const char * combined_voltage_desc[] __attribute__((unused)) = {
Packit Service ed0f68
"12 V", "-12 V", "5 V", "3.3 V"};
Packit Service ed0f68
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_multirec_dcoutput {
Packit Service ed0f68
#if WORDS_BIGENDIAN
Packit Service ed0f68
	uint8_t standby:1;
Packit Service ed0f68
	uint8_t __reserved:3;
Packit Service ed0f68
	uint8_t output_number:4;
Packit Service ed0f68
#else
Packit Service ed0f68
	uint8_t output_number:4;
Packit Service ed0f68
	uint8_t __reserved:3;
Packit Service ed0f68
	uint8_t standby:1;
Packit Service ed0f68
#endif
Packit Service ed0f68
	short nominal_voltage;
Packit Service ed0f68
	short max_neg_dev;
Packit Service ed0f68
	short max_pos_dev;
Packit Service ed0f68
	uint16_t ripple_and_noise;
Packit Service ed0f68
	uint16_t min_current;
Packit Service ed0f68
	uint16_t max_current;
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 fru_multirec_dcload {
Packit Service ed0f68
#if WORDS_BIGENDIAN
Packit Service ed0f68
	uint8_t __reserved:4;
Packit Service ed0f68
	uint8_t output_number:4;
Packit Service ed0f68
#else
Packit Service ed0f68
	uint8_t output_number:4;
Packit Service ed0f68
	uint8_t __reserved:4;
Packit Service ed0f68
#endif
Packit Service ed0f68
	short nominal_voltage;
Packit Service ed0f68
	short min_voltage;
Packit Service ed0f68
	short max_voltage;
Packit Service ed0f68
	uint16_t ripple_and_noise;
Packit Service ed0f68
	uint16_t min_current;
Packit Service ed0f68
	uint16_t max_current;
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 fru_multirec_oem_header {
Packit Service ed0f68
	unsigned char mfg_id[3];
Packit Service ed0f68
#define FRU_PICMG_BACKPLANE_P2P			0x04
Packit Service ed0f68
#define FRU_PICMG_ADDRESS_TABLE			0x10
Packit Service ed0f68
#define FRU_PICMG_SHELF_POWER_DIST		0x11
Packit Service ed0f68
#define FRU_PICMG_SHELF_ACTIVATION		0x12
Packit Service ed0f68
#define FRU_PICMG_SHMC_IP_CONN			0x13
Packit Service ed0f68
#define FRU_PICMG_BOARD_P2P				0x14
Packit Service ed0f68
#define FRU_AMC_CURRENT					0x16
Packit Service ed0f68
#define FRU_AMC_ACTIVATION				0x17
Packit Service ed0f68
#define FRU_AMC_CARRIER_P2P				0x18
Packit Service ed0f68
#define FRU_AMC_P2P						0x19
Packit Service ed0f68
#define FRU_AMC_CARRIER_INFO			0x1a
Packit Service ed0f68
#define FRU_UTCA_FRU_INFO_TABLE			0x20
Packit Service ed0f68
#define FRU_UTCA_CARRIER_MNG_IP			0x21
Packit Service ed0f68
#define FRU_UTCA_CARRIER_INFO			0x22
Packit Service ed0f68
#define FRU_UTCA_CARRIER_LOCATION		0x23
Packit Service ed0f68
#define FRU_UTCA_SHMC_IP_LINK			0x24
Packit Service ed0f68
#define FRU_UTCA_POWER_POLICY			0x25
Packit Service ed0f68
#define FRU_UTCA_ACTIVATION				0x26
Packit Service ed0f68
#define FRU_UTCA_PM_CAPABILTY			0x27
Packit Service ed0f68
#define FRU_UTCA_FAN_GEOGRAPHY			0x28
Packit Service ed0f68
#define FRU_UTCA_CLOCK_MAPPING			0x29
Packit Service ed0f68
#define FRU_UTCA_MSG_BRIDGE_POLICY		0x2A
Packit Service ed0f68
#define FRU_UTCA_OEM_MODULE_DESC		0x2B
Packit Service ed0f68
#define FRU_PICMG_CLK_CARRIER_P2P		0x2C
Packit Service ed0f68
#define FRU_PICMG_CLK_CONFIG			0x2D
Packit Service ed0f68
	unsigned char record_id;
Packit Service ed0f68
	unsigned char record_version;
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 fru_picmgext_guid {
Packit Service ed0f68
	unsigned char guid[16];
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 fru_picmgext_link_desc {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned int desig_channel:6;
Packit Service ed0f68
	unsigned int desig_if:2;
Packit Service ed0f68
	unsigned int desig_port:4;
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_BASE			0x01
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET		0x02
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND	0x03
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR		0x04
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_PCIE			0x05
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD	0x32
Packit Service ed0f68
	unsigned int type:8;
Packit Service ed0f68
	unsigned int ext:4;
Packit Service ed0f68
	unsigned int grouping:8;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned int grouping:8;
Packit Service ed0f68
	unsigned int ext:4;
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_BASE			0x01
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET		0x02
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND	0x03
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR		0x04
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_PCIE			0x05
Packit Service ed0f68
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD	0x32
Packit Service ed0f68
	unsigned int type:8;
Packit Service ed0f68
	unsigned int desig_port:4;
Packit Service ed0f68
	unsigned int desig_if:2;
Packit Service ed0f68
	unsigned int desig_channel:6;
Packit Service ed0f68
#endif
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
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED			 	  0x00
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED1            0x01
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCI_EXPRESS          0x02
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING1  0x03
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING2  0x04
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET             0x05
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO              0x06
Packit Service ed0f68
#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE              0x07
Packit Service ed0f68
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
/* This is used in command, not in FRU */
Packit Service ed0f68
struct fru_picmgext_amc_link_info {
Packit Service ed0f68
   unsigned char linkInfo[3];
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 fru_picmgext_amc_link_desc_core {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned int designator:12;
Packit Service ed0f68
	unsigned int type:8;
Packit Service ed0f68
	unsigned int ext:4;
Packit Service ed0f68
	unsigned int grouping:8;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned int grouping:8;
Packit Service ed0f68
	unsigned int ext:4;
Packit Service ed0f68
	unsigned int type:8;
Packit Service ed0f68
	unsigned int designator:12;
Packit Service ed0f68
#endif
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 fru_picmgext_amc_link_desc_extra {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned char asymetricMatch:2;
Packit Service ed0f68
	unsigned char reserved:6;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned char reserved:6;
Packit Service ed0f68
	unsigned char asymetricMatch:2;
Packit Service ed0f68
#endif
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
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_amc_link_desc {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
   struct fru_picmgext_amc_link_desc_core  core;/* lsb */
Packit Service ed0f68
   struct fru_picmgext_amc_link_desc_extra extra;
Packit Service ed0f68
#else
Packit Service ed0f68
   struct fru_picmgext_amc_link_desc_extra extra;
Packit Service ed0f68
   struct fru_picmgext_amc_link_desc_core  core;/* lsb */
Packit Service ed0f68
#endif
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
Packit Service ed0f68
#define FRU_PICMGEXT_OEM_SWFW 0x03
Packit Service ed0f68
#define OEM_SWFW_NBLOCK_OFFSET 0x05
Packit Service ed0f68
#define OEM_SWFW_FIELD_START_OFFSET 0x06
Packit Service ed0f68
Packit Service ed0f68
#define FRU_PICMGEXT_CHN_DESC_RECORD_SIZE 3
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_chn_desc {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned int remote_slot:8;
Packit Service ed0f68
	unsigned int remote_chn:5;
Packit Service ed0f68
	unsigned int local_chn:5;
Packit Service ed0f68
	unsigned int res:14;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned int res:14;
Packit Service ed0f68
	unsigned int local_chn:5;
Packit Service ed0f68
	unsigned int remote_chn:5;
Packit Service ed0f68
	unsigned int remote_slot:8;
Packit Service ed0f68
#endif
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 fru_picmgext_slot_desc {
Packit Service ed0f68
	unsigned char chan_type;
Packit Service ed0f68
	unsigned char slot_addr;
Packit Service ed0f68
	unsigned char chn_count;
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
#define FRU_PICMGEXT_DESIGN_IF_BASE				0x00
Packit Service ed0f68
#define FRU_PICMGEXT_DESIGN_IF_FABRIC			0x01
Packit Service ed0f68
#define FRU_PICMGEXT_DESIGN_IF_UPDATE_CHANNEL	0x02
Packit Service ed0f68
#define FRU_PICMGEXT_DESIGN_IF_RESERVED			0x03
Packit Service ed0f68
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_carrier_activation_record {
Packit Service ed0f68
	unsigned short max_internal_curr;
Packit Service ed0f68
	unsigned char  allowance_for_readiness;
Packit Service ed0f68
   unsigned char  module_activation_record_count;
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 fru_picmgext_activation_record {
Packit Service ed0f68
	unsigned char ibmb_addr;
Packit Service ed0f68
	unsigned char max_module_curr;
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
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_carrier_p2p_record {
Packit Service ed0f68
	unsigned char resource_id;
Packit Service ed0f68
	unsigned char p2p_count;
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 fru_picmgext_carrier_p2p_descriptor {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned char  remote_resource_id;
Packit Service ed0f68
	unsigned short remote_port:5;
Packit Service ed0f68
	unsigned short local_port:5;
Packit Service ed0f68
	unsigned short reserved:6;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned short reserved:6;
Packit Service ed0f68
	unsigned short local_port:5;
Packit Service ed0f68
	unsigned short remote_port:5;
Packit Service ed0f68
	unsigned char  remote_resource_id;
Packit Service ed0f68
#endif
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 fru_picmgext_amc_p2p_record {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned char resource_id         :4;
Packit Service ed0f68
	unsigned char /* reserved */      :3;
Packit Service ed0f68
	unsigned char record_type         :1;
Packit Service ed0f68
#else	
Packit Service ed0f68
	unsigned char record_type         :1;
Packit Service ed0f68
	unsigned char /* reserved */      :3;
Packit Service ed0f68
	unsigned char resource_id         :4;
Packit Service ed0f68
#endif 
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
#define FRU_PICMGEXT_AMC_CHANNEL_DESC_RECORD_SIZE 3
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_amc_channel_desc_record {
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned int lane0port           :5;
Packit Service ed0f68
	unsigned int lane1port           :5;
Packit Service ed0f68
	unsigned int lane2port           :5;
Packit Service ed0f68
	unsigned int lane3port           :5;
Packit Service ed0f68
	unsigned int /* reserved */      :12;
Packit Service ed0f68
#else
Packit Service ed0f68
	unsigned int /* reserved */      :12;
Packit Service ed0f68
	unsigned int lane3port           :5;
Packit Service ed0f68
	unsigned int lane2port           :5;
Packit Service ed0f68
	unsigned int lane1port           :5;
Packit Service ed0f68
	unsigned int lane0port           :5;
Packit Service ed0f68
#endif 
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
#define FRU_PICMGEXT_AMC_LINK_DESC_RECORD_SIZE 5
Packit Service ed0f68
#ifdef HAVE_PRAGMA_PACK
Packit Service ed0f68
#pragma pack(1)
Packit Service ed0f68
#endif
Packit Service ed0f68
struct fru_picmgext_amc_link_desc_record {
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE		0x02
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS1	0x03
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS2	0x04
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET	0x05		
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO	0x06
Packit Service ed0f68
	#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE	0x07
Packit Service ed0f68
	
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_PCIE_G1_NSSC	0x00
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_PCIE_G1_SSC	0x01
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_PCIE_G2_NSSC	0x02
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_PCIE_G2_SSC	0x03
Packit Service ed0f68
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_ETH_1000_BX	0x00
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_ETH_10G_XAUI	0x01
Packit Service ed0f68
	
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_STORAGE_FC	0x00
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_STORAGE_SATA	0x01
Packit Service ed0f68
	#define AMC_LINK_TYPE_EXT_STORAGE_SAS	0x02
Packit Service ed0f68
#ifndef WORDS_BIGENDIAN
Packit Service ed0f68
	unsigned int channel_id          :8;
Packit Service ed0f68
	unsigned int port_flag_0         :1;
Packit Service ed0f68
	unsigned int port_flag_1         :1;
Packit Service ed0f68
	unsigned int port_flag_2         :1;
Packit Service ed0f68
	unsigned int port_flag_3         :1;
Packit Service ed0f68
	unsigned int type                :8;
Packit Service ed0f68
	unsigned int type_ext            :4;
Packit Service ed0f68
	unsigned int group_id            :8;
Packit Service ed0f68
	unsigned int asym_match          :2;
Packit Service ed0f68
	unsigned int  /* reserved */     :30;
Packit Service ed0f68
#else	
Packit Service ed0f68
	unsigned int group_id            :8;
Packit Service ed0f68
	unsigned int type_ext            :4;
Packit Service ed0f68
	unsigned int type                :8;
Packit Service ed0f68
	unsigned int port_flag_3         :1;
Packit Service ed0f68
	unsigned int port_flag_2         :1;
Packit Service ed0f68
	unsigned int port_flag_1         :1;
Packit Service ed0f68
	unsigned int port_flag_0         :1;
Packit Service ed0f68
	unsigned int channel_id          :8;
Packit Service ed0f68
Packit Service ed0f68
	unsigned int  /* reserved */     :30;
Packit Service ed0f68
	unsigned int asym_match          :2;
Packit Service ed0f68
#endif 
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
/* FRU Board manufacturing date */
Packit Service ed0f68
static const uint64_t secs_from_1970_1996 = 820454400;
Packit Service ed0f68
static const char * chassis_type_desc[] __attribute__((unused)) = {
Packit Service ed0f68
	"Unspecified", "Other", "Unknown",
Packit Service ed0f68
	"Desktop", "Low Profile Desktop", "Pizza Box",
Packit Service ed0f68
	"Mini Tower", "Tower",
Packit Service ed0f68
	    "Portable", "LapTop", "Notebook", "Hand Held",
Packit Service ed0f68
	    "Docking Station", "All in One", "Sub Notebook",
Packit Service ed0f68
	    "Space-saving", "Lunch Box", "Main Server Chassis",
Packit Service ed0f68
	    "Expansion Chassis", "SubChassis", "Bus Expansion Chassis",
Packit Service ed0f68
	    "Peripheral Chassis", "RAID Chassis", "Rack Mount Chassis",
Packit Service ed0f68
	    "Sealed-case PC", "Multi-system Chassis", "CompactPCI",
Packit Service ed0f68
	    "AdvancedTCA", "Blade", "Blade Enclosure"
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
typedef struct ipmi_fru_bloc {
Packit Service ed0f68
	struct ipmi_fru_bloc * next;
Packit Service ed0f68
	uint16_t start;
Packit Service ed0f68
	uint16_t size;
Packit Service ed0f68
	uint8_t  blocId[32];
Packit Service ed0f68
} t_ipmi_fru_bloc;
Packit Service ed0f68
Packit Service ed0f68
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
Packit Service ed0f68
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
Packit Service ed0f68
Packit Service ed0f68
#endif /* IPMI_FRU_H */