Blame include/ipmitool/ipmi_fru.h

Packit d14fb6
/*
Packit d14fb6
 * Copyright (c) 2003 Sun Microsystems, Inc.  All Rights Reserved.
Packit d14fb6
 * 
Packit d14fb6
 * Redistribution and use in source and binary forms, with or without
Packit d14fb6
 * modification, are permitted provided that the following conditions
Packit d14fb6
 * are met:
Packit d14fb6
 * 
Packit d14fb6
 * Redistribution of source code must retain the above copyright
Packit d14fb6
 * notice, this list of conditions and the following disclaimer.
Packit d14fb6
 * 
Packit d14fb6
 * Redistribution in binary form must reproduce the above copyright
Packit d14fb6
 * notice, this list of conditions and the following disclaimer in the
Packit d14fb6
 * documentation and/or other materials provided with the distribution.
Packit d14fb6
 * 
Packit d14fb6
 * Neither the name of Sun Microsystems, Inc. or the names of
Packit d14fb6
 * contributors may be used to endorse or promote products derived
Packit d14fb6
 * from this software without specific prior written permission.
Packit d14fb6
 * 
Packit d14fb6
 * This software is provided "AS IS," without a warranty of any kind.
Packit d14fb6
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
Packit d14fb6
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
Packit d14fb6
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
Packit d14fb6
 * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
Packit d14fb6
 * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
Packit d14fb6
 * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  IN NO EVENT WILL
Packit d14fb6
 * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
Packit d14fb6
 * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
Packit d14fb6
 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
Packit d14fb6
 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
Packit d14fb6
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Packit d14fb6
 */
Packit d14fb6
Packit d14fb6
#ifndef IPMI_FRU_H
Packit d14fb6
#define IPMI_FRU_H
Packit d14fb6
Packit d14fb6
#include <inttypes.h>
Packit d14fb6
#include <ipmitool/ipmi.h>
Packit d14fb6
#include <ipmitool/ipmi_sdr.h>
Packit d14fb6
Packit d14fb6
#if HAVE_CONFIG_H
Packit d14fb6
# include <config.h>
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#define GET_FRU_INFO		0x10
Packit d14fb6
#define GET_FRU_DATA		0x11
Packit d14fb6
#define SET_FRU_DATA		0x12
Packit d14fb6
Packit d14fb6
enum {
Packit d14fb6
	FRU_CHASSIS_PARTNO,
Packit d14fb6
	FRU_CHASSIS_SERIAL,
Packit d14fb6
	FRU_BOARD_MANUF,
Packit d14fb6
	FRU_BOARD_PRODUCT,
Packit d14fb6
	FRU_BOARD_SERIAL,
Packit d14fb6
	FRU_BOARD_PARTNO,
Packit d14fb6
	FRU_PRODUCT_MANUF,
Packit d14fb6
	FRU_PRODUCT_NAME,
Packit d14fb6
	FRU_PRODUCT_PARTNO,
Packit d14fb6
	FRU_PRODUCT_VERSION,
Packit d14fb6
	FRU_PRODUCT_SERIAL,
Packit d14fb6
	FRU_PRODUCT_ASSET,
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
struct fru_info {
Packit d14fb6
	uint16_t size;
Packit d14fb6
	uint8_t access:1;
Packit d14fb6
	uint8_t max_read_size;
Packit d14fb6
	uint8_t max_write_size;
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_header {
Packit d14fb6
	uint8_t version;
Packit d14fb6
	union {
Packit d14fb6
		struct {
Packit d14fb6
			uint8_t internal;
Packit d14fb6
			uint8_t chassis;
Packit d14fb6
			uint8_t board;
Packit d14fb6
			uint8_t product;
Packit d14fb6
			uint8_t multi;
Packit d14fb6
		} offset;
Packit d14fb6
		uint8_t offsets[5];
Packit d14fb6
	};
Packit d14fb6
	uint8_t pad;
Packit d14fb6
	uint8_t checksum;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
struct fru_area_chassis {
Packit d14fb6
	uint8_t area_ver;
Packit d14fb6
	uint8_t type;
Packit d14fb6
	uint16_t area_len;
Packit d14fb6
	char * part;
Packit d14fb6
	char * serial;
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
struct fru_area_board {
Packit d14fb6
	uint8_t area_ver;
Packit d14fb6
	uint8_t lang;
Packit d14fb6
	uint16_t area_len;
Packit d14fb6
	uint32_t mfg_date_time;
Packit d14fb6
	char * mfg;
Packit d14fb6
	char * prod;
Packit d14fb6
	char * serial;
Packit d14fb6
	char * part;
Packit d14fb6
	char * fru;
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
struct fru_area_product {
Packit d14fb6
	uint8_t area_ver;
Packit d14fb6
	uint8_t lang;
Packit d14fb6
	uint16_t area_len;
Packit d14fb6
	char * mfg;
Packit d14fb6
	char * name;
Packit d14fb6
	char * part;
Packit d14fb6
	char * version;
Packit d14fb6
	char * serial;
Packit d14fb6
	char * asset;
Packit d14fb6
	char * fru;
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_multirec_header {
Packit d14fb6
#define FRU_RECORD_TYPE_POWER_SUPPLY_INFORMATION 0x00
Packit d14fb6
#define FRU_RECORD_TYPE_DC_OUTPUT 0x01
Packit d14fb6
#define FRU_RECORD_TYPE_DC_LOAD 0x02
Packit d14fb6
#define FRU_RECORD_TYPE_MANAGEMENT_ACCESS 0x03
Packit d14fb6
#define FRU_RECORD_TYPE_BASE_COMPATIBILITY 0x04
Packit d14fb6
#define FRU_RECORD_TYPE_EXTENDED_COMPATIBILITY 0x05
Packit d14fb6
#define FRU_RECORD_TYPE_OEM_EXTENSION	0xc0
Packit d14fb6
	uint8_t type;
Packit d14fb6
	uint8_t format;
Packit d14fb6
	uint8_t len;
Packit d14fb6
	uint8_t record_checksum;
Packit d14fb6
	uint8_t header_checksum;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_multirec_powersupply {
Packit d14fb6
#if WORDS_BIGENDIAN
Packit d14fb6
	uint16_t capacity;
Packit d14fb6
#else
Packit d14fb6
	uint16_t capacity:12;
Packit d14fb6
	uint16_t __reserved1:4;
Packit d14fb6
#endif
Packit d14fb6
	uint16_t peak_va;
Packit d14fb6
	uint8_t inrush_current;
Packit d14fb6
	uint8_t inrush_interval;
Packit d14fb6
	uint16_t lowend_input1;
Packit d14fb6
	uint16_t highend_input1;
Packit d14fb6
	uint16_t lowend_input2;
Packit d14fb6
	uint16_t highend_input2;
Packit d14fb6
	uint8_t lowend_freq;
Packit d14fb6
	uint8_t highend_freq;
Packit d14fb6
	uint8_t dropout_tolerance;
Packit d14fb6
#if WORDS_BIGENDIAN
Packit d14fb6
	uint8_t __reserved2:3;
Packit d14fb6
	uint8_t tach:1;
Packit d14fb6
	uint8_t hotswap:1;
Packit d14fb6
	uint8_t autoswitch:1;
Packit d14fb6
	uint8_t pfc:1;
Packit d14fb6
	uint8_t predictive_fail:1;
Packit d14fb6
#else
Packit d14fb6
	uint8_t predictive_fail:1;
Packit d14fb6
	uint8_t pfc:1;
Packit d14fb6
	uint8_t autoswitch:1;
Packit d14fb6
	uint8_t hotswap:1;
Packit d14fb6
	uint8_t tach:1;
Packit d14fb6
	uint8_t __reserved2:3;
Packit d14fb6
#endif
Packit d14fb6
	uint16_t peak_cap_ht;
Packit d14fb6
#if WORDS_BIGENDIAN
Packit d14fb6
	uint8_t combined_voltage1:4;
Packit d14fb6
	uint8_t combined_voltage2:4;
Packit d14fb6
#else
Packit d14fb6
	uint8_t combined_voltage2:4;
Packit d14fb6
	uint8_t combined_voltage1:4;
Packit d14fb6
#endif
Packit d14fb6
	uint16_t combined_capacity;
Packit d14fb6
	uint8_t rps_threshold;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
static const char * combined_voltage_desc[] __attribute__((unused)) = {
Packit d14fb6
"12 V", "-12 V", "5 V", "3.3 V"};
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_multirec_dcoutput {
Packit d14fb6
#if WORDS_BIGENDIAN
Packit d14fb6
	uint8_t standby:1;
Packit d14fb6
	uint8_t __reserved:3;
Packit d14fb6
	uint8_t output_number:4;
Packit d14fb6
#else
Packit d14fb6
	uint8_t output_number:4;
Packit d14fb6
	uint8_t __reserved:3;
Packit d14fb6
	uint8_t standby:1;
Packit d14fb6
#endif
Packit d14fb6
	short nominal_voltage;
Packit d14fb6
	short max_neg_dev;
Packit d14fb6
	short max_pos_dev;
Packit d14fb6
	uint16_t ripple_and_noise;
Packit d14fb6
	uint16_t min_current;
Packit d14fb6
	uint16_t max_current;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_multirec_dcload {
Packit d14fb6
#if WORDS_BIGENDIAN
Packit d14fb6
	uint8_t __reserved:4;
Packit d14fb6
	uint8_t output_number:4;
Packit d14fb6
#else
Packit d14fb6
	uint8_t output_number:4;
Packit d14fb6
	uint8_t __reserved:4;
Packit d14fb6
#endif
Packit d14fb6
	short nominal_voltage;
Packit d14fb6
	short min_voltage;
Packit d14fb6
	short max_voltage;
Packit d14fb6
	uint16_t ripple_and_noise;
Packit d14fb6
	uint16_t min_current;
Packit d14fb6
	uint16_t max_current;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_multirec_oem_header {
Packit d14fb6
	unsigned char mfg_id[3];
Packit d14fb6
#define FRU_PICMG_BACKPLANE_P2P			0x04
Packit d14fb6
#define FRU_PICMG_ADDRESS_TABLE			0x10
Packit d14fb6
#define FRU_PICMG_SHELF_POWER_DIST		0x11
Packit d14fb6
#define FRU_PICMG_SHELF_ACTIVATION		0x12
Packit d14fb6
#define FRU_PICMG_SHMC_IP_CONN			0x13
Packit d14fb6
#define FRU_PICMG_BOARD_P2P				0x14
Packit d14fb6
#define FRU_AMC_CURRENT					0x16
Packit d14fb6
#define FRU_AMC_ACTIVATION				0x17
Packit d14fb6
#define FRU_AMC_CARRIER_P2P				0x18
Packit d14fb6
#define FRU_AMC_P2P						0x19
Packit d14fb6
#define FRU_AMC_CARRIER_INFO			0x1a
Packit d14fb6
#define FRU_UTCA_FRU_INFO_TABLE			0x20
Packit d14fb6
#define FRU_UTCA_CARRIER_MNG_IP			0x21
Packit d14fb6
#define FRU_UTCA_CARRIER_INFO			0x22
Packit d14fb6
#define FRU_UTCA_CARRIER_LOCATION		0x23
Packit d14fb6
#define FRU_UTCA_SHMC_IP_LINK			0x24
Packit d14fb6
#define FRU_UTCA_POWER_POLICY			0x25
Packit d14fb6
#define FRU_UTCA_ACTIVATION				0x26
Packit d14fb6
#define FRU_UTCA_PM_CAPABILTY			0x27
Packit d14fb6
#define FRU_UTCA_FAN_GEOGRAPHY			0x28
Packit d14fb6
#define FRU_UTCA_CLOCK_MAPPING			0x29
Packit d14fb6
#define FRU_UTCA_MSG_BRIDGE_POLICY		0x2A
Packit d14fb6
#define FRU_UTCA_OEM_MODULE_DESC		0x2B
Packit d14fb6
#define FRU_PICMG_CLK_CARRIER_P2P		0x2C
Packit d14fb6
#define FRU_PICMG_CLK_CONFIG			0x2D
Packit d14fb6
	unsigned char record_id;
Packit d14fb6
	unsigned char record_version;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_guid {
Packit d14fb6
	unsigned char guid[16];
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_link_desc {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned int desig_channel:6;
Packit d14fb6
	unsigned int desig_if:2;
Packit d14fb6
	unsigned int desig_port:4;
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_BASE			0x01
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET		0x02
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND	0x03
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR		0x04
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_PCIE			0x05
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD	0x32
Packit d14fb6
	unsigned int type:8;
Packit d14fb6
	unsigned int ext:4;
Packit d14fb6
	unsigned int grouping:8;
Packit d14fb6
#else
Packit d14fb6
	unsigned int grouping:8;
Packit d14fb6
	unsigned int ext:4;
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_BASE			0x01
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET		0x02
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND	0x03
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR		0x04
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_PCIE			0x05
Packit d14fb6
#define FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET_10GBD	0x32
Packit d14fb6
	unsigned int type:8;
Packit d14fb6
	unsigned int desig_port:4;
Packit d14fb6
	unsigned int desig_if:2;
Packit d14fb6
	unsigned int desig_channel:6;
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED			 	  0x00
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_RESERVED1            0x01
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_PCI_EXPRESS          0x02
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING1  0x03
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_ADVANCED_SWITCHING2  0x04
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET             0x05
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO              0x06
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE              0x07
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
/* This is used in command, not in FRU */
Packit d14fb6
struct fru_picmgext_amc_link_info {
Packit d14fb6
   unsigned char linkInfo[3];
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_link_desc_core {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned int designator:12;
Packit d14fb6
	unsigned int type:8;
Packit d14fb6
	unsigned int ext:4;
Packit d14fb6
	unsigned int grouping:8;
Packit d14fb6
#else
Packit d14fb6
	unsigned int grouping:8;
Packit d14fb6
	unsigned int ext:4;
Packit d14fb6
	unsigned int type:8;
Packit d14fb6
	unsigned int designator:12;
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_link_desc_extra {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned char asymetricMatch:2;
Packit d14fb6
	unsigned char reserved:6;
Packit d14fb6
#else
Packit d14fb6
	unsigned char reserved:6;
Packit d14fb6
	unsigned char asymetricMatch:2;
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_link_desc {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
   struct fru_picmgext_amc_link_desc_core  core;/* lsb */
Packit d14fb6
   struct fru_picmgext_amc_link_desc_extra extra;
Packit d14fb6
#else
Packit d14fb6
   struct fru_picmgext_amc_link_desc_extra extra;
Packit d14fb6
   struct fru_picmgext_amc_link_desc_core  core;/* lsb */
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_OEM_SWFW 0x03
Packit d14fb6
#define OEM_SWFW_NBLOCK_OFFSET 0x05
Packit d14fb6
#define OEM_SWFW_FIELD_START_OFFSET 0x06
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_CHN_DESC_RECORD_SIZE 3
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_chn_desc {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned int remote_slot:8;
Packit d14fb6
	unsigned int remote_chn:5;
Packit d14fb6
	unsigned int local_chn:5;
Packit d14fb6
	unsigned int res:14;
Packit d14fb6
#else
Packit d14fb6
	unsigned int res:14;
Packit d14fb6
	unsigned int local_chn:5;
Packit d14fb6
	unsigned int remote_chn:5;
Packit d14fb6
	unsigned int remote_slot:8;
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_slot_desc {
Packit d14fb6
	unsigned char chan_type;
Packit d14fb6
	unsigned char slot_addr;
Packit d14fb6
	unsigned char chn_count;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_DESIGN_IF_BASE				0x00
Packit d14fb6
#define FRU_PICMGEXT_DESIGN_IF_FABRIC			0x01
Packit d14fb6
#define FRU_PICMGEXT_DESIGN_IF_UPDATE_CHANNEL	0x02
Packit d14fb6
#define FRU_PICMGEXT_DESIGN_IF_RESERVED			0x03
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_carrier_activation_record {
Packit d14fb6
	unsigned short max_internal_curr;
Packit d14fb6
	unsigned char  allowance_for_readiness;
Packit d14fb6
   unsigned char  module_activation_record_count;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_activation_record {
Packit d14fb6
	unsigned char ibmb_addr;
Packit d14fb6
	unsigned char max_module_curr;
Packit d14fb6
	unsigned char reserved;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_carrier_p2p_record {
Packit d14fb6
	unsigned char resource_id;
Packit d14fb6
	unsigned char p2p_count;
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_carrier_p2p_descriptor {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned char  remote_resource_id;
Packit d14fb6
	unsigned short remote_port:5;
Packit d14fb6
	unsigned short local_port:5;
Packit d14fb6
	unsigned short reserved:6;
Packit d14fb6
#else
Packit d14fb6
	unsigned short reserved:6;
Packit d14fb6
	unsigned short local_port:5;
Packit d14fb6
	unsigned short remote_port:5;
Packit d14fb6
	unsigned char  remote_resource_id;
Packit d14fb6
#endif
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_p2p_record {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned char resource_id         :4;
Packit d14fb6
	unsigned char /* reserved */      :3;
Packit d14fb6
	unsigned char record_type         :1;
Packit d14fb6
#else	
Packit d14fb6
	unsigned char record_type         :1;
Packit d14fb6
	unsigned char /* reserved */      :3;
Packit d14fb6
	unsigned char resource_id         :4;
Packit d14fb6
#endif 
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_AMC_CHANNEL_DESC_RECORD_SIZE 3
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_channel_desc_record {
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned int lane0port           :5;
Packit d14fb6
	unsigned int lane1port           :5;
Packit d14fb6
	unsigned int lane2port           :5;
Packit d14fb6
	unsigned int lane3port           :5;
Packit d14fb6
	unsigned int /* reserved */      :12;
Packit d14fb6
#else
Packit d14fb6
	unsigned int /* reserved */      :12;
Packit d14fb6
	unsigned int lane3port           :5;
Packit d14fb6
	unsigned int lane2port           :5;
Packit d14fb6
	unsigned int lane1port           :5;
Packit d14fb6
	unsigned int lane0port           :5;
Packit d14fb6
#endif 
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#define FRU_PICMGEXT_AMC_LINK_DESC_RECORD_SIZE 5
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(1)
Packit d14fb6
#endif
Packit d14fb6
struct fru_picmgext_amc_link_desc_record {
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE		0x02
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS1	0x03
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_PCIE_AS2	0x04
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_ETHERNET	0x05		
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_RAPIDIO	0x06
Packit d14fb6
	#define FRU_PICMGEXT_AMC_LINK_TYPE_STORAGE	0x07
Packit d14fb6
	
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_PCIE_G1_NSSC	0x00
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_PCIE_G1_SSC	0x01
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_PCIE_G2_NSSC	0x02
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_PCIE_G2_SSC	0x03
Packit d14fb6
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_ETH_1000_BX	0x00
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_ETH_10G_XAUI	0x01
Packit d14fb6
	
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_STORAGE_FC	0x00
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_STORAGE_SATA	0x01
Packit d14fb6
	#define AMC_LINK_TYPE_EXT_STORAGE_SAS	0x02
Packit d14fb6
#ifndef WORDS_BIGENDIAN
Packit d14fb6
	unsigned int channel_id          :8;
Packit d14fb6
	unsigned int port_flag_0         :1;
Packit d14fb6
	unsigned int port_flag_1         :1;
Packit d14fb6
	unsigned int port_flag_2         :1;
Packit d14fb6
	unsigned int port_flag_3         :1;
Packit d14fb6
	unsigned int type                :8;
Packit d14fb6
	unsigned int type_ext            :4;
Packit d14fb6
	unsigned int group_id            :8;
Packit d14fb6
	unsigned int asym_match          :2;
Packit d14fb6
	unsigned int  /* reserved */     :30;
Packit d14fb6
#else	
Packit d14fb6
	unsigned int group_id            :8;
Packit d14fb6
	unsigned int type_ext            :4;
Packit d14fb6
	unsigned int type                :8;
Packit d14fb6
	unsigned int port_flag_3         :1;
Packit d14fb6
	unsigned int port_flag_2         :1;
Packit d14fb6
	unsigned int port_flag_1         :1;
Packit d14fb6
	unsigned int port_flag_0         :1;
Packit d14fb6
	unsigned int channel_id          :8;
Packit d14fb6
Packit d14fb6
	unsigned int  /* reserved */     :30;
Packit d14fb6
	unsigned int asym_match          :2;
Packit d14fb6
#endif 
Packit d14fb6
}ATTRIBUTE_PACKING;
Packit d14fb6
#ifdef HAVE_PRAGMA_PACK
Packit d14fb6
#pragma pack(0)
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
/* FRU Board manufacturing date */
Packit d14fb6
static const uint64_t secs_from_1970_1996 = 820454400;
Packit d14fb6
static const char * chassis_type_desc[] __attribute__((unused)) = {
Packit d14fb6
	"Unspecified", "Other", "Unknown",
Packit d14fb6
	"Desktop", "Low Profile Desktop", "Pizza Box",
Packit d14fb6
	"Mini Tower", "Tower",
Packit d14fb6
	    "Portable", "LapTop", "Notebook", "Hand Held",
Packit d14fb6
	    "Docking Station", "All in One", "Sub Notebook",
Packit d14fb6
	    "Space-saving", "Lunch Box", "Main Server Chassis",
Packit d14fb6
	    "Expansion Chassis", "SubChassis", "Bus Expansion Chassis",
Packit d14fb6
	    "Peripheral Chassis", "RAID Chassis", "Rack Mount Chassis",
Packit d14fb6
	    "Sealed-case PC", "Multi-system Chassis", "CompactPCI",
Packit d14fb6
	    "AdvancedTCA", "Blade", "Blade Enclosure"
Packit d14fb6
};
Packit d14fb6
Packit d14fb6
typedef struct ipmi_fru_bloc {
Packit d14fb6
	struct ipmi_fru_bloc * next;
Packit d14fb6
	uint16_t start;
Packit d14fb6
	uint16_t size;
Packit d14fb6
	uint8_t  blocId[32];
Packit d14fb6
} t_ipmi_fru_bloc;
Packit d14fb6
Packit d14fb6
int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv);
Packit d14fb6
int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru);
Packit d14fb6
Packit d14fb6
#endif /* IPMI_FRU_H */