vendorcode/siemens: Add extended info block support to hwilib
Add support for a fourth info block type to hwilib. This block provides new values and is now variable in length. Change-Id: Ia928b4a98b806ba3e80fb576b78f60bb8f2ea3fc Signed-off-by: Werner Zeh <werner.zeh@siemens.com> Reviewed-on: https://review.coreboot.org/15478 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
c4c8383967
commit
66c20c4dfa
|
@ -21,13 +21,15 @@
|
||||||
#include "hwilib.h"
|
#include "hwilib.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAX_BLOCK_NUM 3
|
#define MAX_BLOCK_NUM 4
|
||||||
#define LEN_HIB 0x1fd
|
#define LEN_HIB 0x1fd
|
||||||
#define LEN_SIB 0x121
|
#define LEN_SIB 0x121
|
||||||
#define LEN_EIB 0x0b5
|
#define LEN_EIB 0x0b5
|
||||||
|
#define MIN_LEN_XIB 0x201
|
||||||
#define NEXT_OFFSET_HIB 0x1dc
|
#define NEXT_OFFSET_HIB 0x1dc
|
||||||
#define NEXT_OFFSET_SIB 0x104
|
#define NEXT_OFFSET_SIB 0x104
|
||||||
#define NEXT_OFFSET_EIB 0x0b0
|
#define NEXT_OFFSET_EIB 0x0b0
|
||||||
|
#define NEXT_OFFSET_XIB 0x014
|
||||||
#define LEN_UNIQUEL_NUM 0x010
|
#define LEN_UNIQUEL_NUM 0x010
|
||||||
#define LEN_HW_REV 0x002
|
#define LEN_HW_REV 0x002
|
||||||
#define LEN_MAC_ADDRESS 0x006
|
#define LEN_MAC_ADDRESS 0x006
|
||||||
|
@ -43,6 +45,7 @@ enum {
|
||||||
BLK_HIB,
|
BLK_HIB,
|
||||||
BLK_SIB,
|
BLK_SIB,
|
||||||
BLK_EIB,
|
BLK_EIB,
|
||||||
|
BLK_XIB
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure holds a valid position for a given field
|
/* This structure holds a valid position for a given field
|
||||||
|
@ -71,6 +74,12 @@ struct param_info {
|
||||||
*/
|
*/
|
||||||
static uint8_t *all_blocks[MAX_BLOCK_NUM] CAR_GLOBAL;
|
static uint8_t *all_blocks[MAX_BLOCK_NUM] CAR_GLOBAL;
|
||||||
|
|
||||||
|
/* As the length of extended block is variable, save all length to a global
|
||||||
|
* variable so that they can be used later to check boundaries.
|
||||||
|
*/
|
||||||
|
static uint16_t all_blk_size[MAX_BLOCK_NUM] CAR_GLOBAL;
|
||||||
|
|
||||||
|
|
||||||
static uint32_t hwilib_read_bytes (const struct param_info *param, uint8_t *dst,
|
static uint32_t hwilib_read_bytes (const struct param_info *param, uint8_t *dst,
|
||||||
uint32_t maxlen);
|
uint32_t maxlen);
|
||||||
|
|
||||||
|
@ -89,6 +98,9 @@ static const struct param_info params[] = {
|
||||||
[EIB_VerID] = {
|
[EIB_VerID] = {
|
||||||
.pos[0] = {.blk_type = BLK_EIB, .offset = 0x8, .len = 4},
|
.pos[0] = {.blk_type = BLK_EIB, .offset = 0x8, .len = 4},
|
||||||
.get_field = hwilib_read_bytes },
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XIB_VerID] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x8, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
[HIB_HwRev] = {
|
[HIB_HwRev] = {
|
||||||
.pos[0] = {.blk_type = BLK_HIB, .offset = 0xbe, .len = 2},
|
.pos[0] = {.blk_type = BLK_HIB, .offset = 0xbe, .len = 2},
|
||||||
.get_field = hwilib_read_bytes },
|
.get_field = hwilib_read_bytes },
|
||||||
|
@ -151,6 +163,9 @@ static const struct param_info params[] = {
|
||||||
[MacMapping4] = {
|
[MacMapping4] = {
|
||||||
.pos[0] = {.blk_type = BLK_HIB, .offset = 0x1d8, .len = 4},
|
.pos[0] = {.blk_type = BLK_HIB, .offset = 0x1d8, .len = 4},
|
||||||
.get_field = hwilib_read_bytes },
|
.get_field = hwilib_read_bytes },
|
||||||
|
[RTCType] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_HIB, .offset = 0x1e8, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
[PF_Color_Depth] = {
|
[PF_Color_Depth] = {
|
||||||
.pos[0] = {.blk_type = BLK_SIB, .offset = 0xea, .len = 1},
|
.pos[0] = {.blk_type = BLK_SIB, .offset = 0xea, .len = 1},
|
||||||
.mask = 0x03,
|
.mask = 0x03,
|
||||||
|
@ -168,6 +183,196 @@ static const struct param_info params[] = {
|
||||||
[VddRef] = {
|
[VddRef] = {
|
||||||
.pos[0] = {.blk_type = BLK_EIB, .offset = 0x90, .len = 2},
|
.pos[0] = {.blk_type = BLK_EIB, .offset = 0x90, .len = 2},
|
||||||
.get_field = hwilib_read_bytes },
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac1] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0xfc, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac1Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x102, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac2] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x114, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac2Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x11a, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac3] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x12c, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac3Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x132, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac4] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x144, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac4Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x14a, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac5] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x15c, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac5Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x162, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac6] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x174, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac6Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x17a, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac7] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x18c, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac7Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x192, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac8] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1a4, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac8Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1aa, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac9] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1bc, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac9Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1c2, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac10] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1d4, .len = 6},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac10Aux] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1da, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac1Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0xec, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac2Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x104, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac3Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x11c, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac4Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x134, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac5Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x14c, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac6Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x164, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac7Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x17c, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac8Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x194, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac9Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1ac, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[XMac10Mapping] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1c4, .len = 16},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind1] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x103, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind2] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x11b, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind3] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x133, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind4] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x14b, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind5] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x163, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind6] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x17b, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind7] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x193, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind8] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1ab, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind9] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1c3, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[netKind10] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1db, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[T_Warn] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x18, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[T_Crit] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x1c, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSamplingTime] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x20, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSetPoint] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x24, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANKp] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x28, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANKi] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x2c, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANKd] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x30, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANHystVal] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x34, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANHystThreshold] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x38, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANHystCtrl] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x3c, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANMaxSpeed] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x40, .len = 2},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANStartpeed] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x42, .len = 2},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorDelay] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x44, .len = 4},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorNum] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x48, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorSelect] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x49, .len = 1},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg0] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x4c, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg1] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x60, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg2] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x74, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg3] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x88, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg4] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0x9c, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg5] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0xb0, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg6] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0xc4, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
[FANSensorCfg7] = {
|
||||||
|
.pos[0] = {.blk_type = BLK_XIB, .offset = 0xd8, .len = 20},
|
||||||
|
.get_field = hwilib_read_bytes },
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \brief This functions reads the given field from the first valid hwinfo
|
/** \brief This functions reads the given field from the first valid hwinfo
|
||||||
|
@ -181,8 +386,7 @@ static uint32_t hwilib_read_bytes (const struct param_info *param, uint8_t *dst,
|
||||||
{
|
{
|
||||||
uint8_t i = 0, *blk = NULL;
|
uint8_t i = 0, *blk = NULL;
|
||||||
uint8_t **blk_ptr = car_get_var_ptr(&all_blocks[0]);
|
uint8_t **blk_ptr = car_get_var_ptr(&all_blocks[0]);
|
||||||
static const uint16_t all_blk_size[MAX_BLOCK_NUM] =
|
uint16_t *all_blk_size_ptr = car_get_var_ptr(&all_blk_size[0]);
|
||||||
{LEN_HIB, LEN_SIB, LEN_EIB};
|
|
||||||
|
|
||||||
if (!param || !dst)
|
if (!param || !dst)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -200,7 +404,7 @@ static uint32_t hwilib_read_bytes (const struct param_info *param, uint8_t *dst,
|
||||||
*/
|
*/
|
||||||
if ((!blk) || (param->pos[i].len > maxlen) ||
|
if ((!blk) || (param->pos[i].len > maxlen) ||
|
||||||
(param->pos[i].len + param->pos[i].offset >
|
(param->pos[i].len + param->pos[i].offset >
|
||||||
all_blk_size[param->pos[i].blk_type]))
|
all_blk_size_ptr[param->pos[i].blk_type]))
|
||||||
return 0;
|
return 0;
|
||||||
/* We can now copy the wanted data. */
|
/* We can now copy the wanted data. */
|
||||||
memcpy(dst, (blk + param->pos[i].offset), param->pos[i].len);
|
memcpy(dst, (blk + param->pos[i].offset), param->pos[i].len);
|
||||||
|
@ -248,6 +452,7 @@ enum cb_err hwilib_find_blocks (const char *hwi_filename)
|
||||||
uint8_t *ptr = NULL, *base = NULL;
|
uint8_t *ptr = NULL, *base = NULL;
|
||||||
uint32_t next_offset = 1;
|
uint32_t next_offset = 1;
|
||||||
uint8_t **blk_ptr = car_get_var_ptr(&all_blocks[0]);
|
uint8_t **blk_ptr = car_get_var_ptr(&all_blocks[0]);
|
||||||
|
uint16_t *all_blk_size_ptr = car_get_var_ptr(&all_blk_size[0]);
|
||||||
size_t filesize = 0;
|
size_t filesize = 0;
|
||||||
|
|
||||||
/* Check for a valid parameter */
|
/* Check for a valid parameter */
|
||||||
|
@ -271,6 +476,12 @@ enum cb_err hwilib_find_blocks (const char *hwi_filename)
|
||||||
memset(blk_ptr, 0, (MAX_BLOCK_NUM * sizeof (uint8_t *)));
|
memset(blk_ptr, 0, (MAX_BLOCK_NUM * sizeof (uint8_t *)));
|
||||||
/* Check which blocks are available by examining the length field. */
|
/* Check which blocks are available by examining the length field. */
|
||||||
base = ptr;
|
base = ptr;
|
||||||
|
/* Fill in sizes of all fixed length blocks. */
|
||||||
|
all_blk_size_ptr[BLK_HIB] = LEN_HIB;
|
||||||
|
all_blk_size_ptr[BLK_SIB] = LEN_SIB;
|
||||||
|
all_blk_size_ptr[BLK_EIB] = LEN_EIB;
|
||||||
|
/* Length of BLK_XIB is variable and will be filled if block is found */
|
||||||
|
all_blk_size_ptr[BLK_XIB] = 0;
|
||||||
while(!(strncmp((char *)ptr, BLOCK_MAGIC, LEN_MAGIC_NUM)) &&
|
while(!(strncmp((char *)ptr, BLOCK_MAGIC, LEN_MAGIC_NUM)) &&
|
||||||
next_offset) {
|
next_offset) {
|
||||||
uint16_t len = read16(ptr + LEN_OFFSET);
|
uint16_t len = read16(ptr + LEN_OFFSET);
|
||||||
|
@ -294,12 +505,19 @@ enum cb_err hwilib_find_blocks (const char *hwi_filename)
|
||||||
next_offset = read32(ptr + NEXT_OFFSET_EIB);
|
next_offset = read32(ptr + NEXT_OFFSET_EIB);
|
||||||
if (next_offset)
|
if (next_offset)
|
||||||
ptr = base + next_offset;
|
ptr = base + next_offset;
|
||||||
|
} else if (len >= MIN_LEN_XIB) {
|
||||||
|
blk_ptr[BLK_XIB] = ptr;
|
||||||
|
next_offset = read32(ptr + NEXT_OFFSET_XIB);
|
||||||
|
all_blk_size_ptr[BLK_XIB] = len;
|
||||||
|
if (next_offset)
|
||||||
|
ptr = base + next_offset;
|
||||||
} else {
|
} else {
|
||||||
next_offset = 0;
|
next_offset = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* We should have found at least one valid block */
|
/* We should have found at least one valid block */
|
||||||
if (blk_ptr[BLK_HIB] || blk_ptr[BLK_SIB] || blk_ptr[BLK_EIB])
|
if (blk_ptr[BLK_HIB] || blk_ptr[BLK_SIB] || blk_ptr[BLK_EIB] ||
|
||||||
|
blk_ptr[BLK_XIB])
|
||||||
return CB_SUCCESS;
|
return CB_SUCCESS;
|
||||||
else
|
else
|
||||||
return CB_ERR;
|
return CB_ERR;
|
||||||
|
|
|
@ -24,16 +24,17 @@ typedef enum {
|
||||||
HIB_VerID = 0,
|
HIB_VerID = 0,
|
||||||
SIB_VerID,
|
SIB_VerID,
|
||||||
EIB_VerID,
|
EIB_VerID,
|
||||||
|
XIB_VerID,
|
||||||
HIB_HwRev,
|
HIB_HwRev,
|
||||||
SIB_HwRev,
|
SIB_HwRev,
|
||||||
UniqueNum,
|
UniqueNum,
|
||||||
Mac1,
|
Mac1,
|
||||||
Mac1Aux,
|
|
||||||
Mac2,
|
Mac2,
|
||||||
Mac2Aux,
|
|
||||||
Mac3,
|
Mac3,
|
||||||
Mac3Aux,
|
|
||||||
Mac4,
|
Mac4,
|
||||||
|
Mac1Aux,
|
||||||
|
Mac2Aux,
|
||||||
|
Mac3Aux,
|
||||||
Mac4Aux,
|
Mac4Aux,
|
||||||
SPD,
|
SPD,
|
||||||
FF_FreezeDis,
|
FF_FreezeDis,
|
||||||
|
@ -43,11 +44,76 @@ typedef enum {
|
||||||
MacMapping2,
|
MacMapping2,
|
||||||
MacMapping3,
|
MacMapping3,
|
||||||
MacMapping4,
|
MacMapping4,
|
||||||
|
RTCType,
|
||||||
PF_Color_Depth,
|
PF_Color_Depth,
|
||||||
PF_DisplType,
|
PF_DisplType,
|
||||||
PF_DisplCon,
|
PF_DisplCon,
|
||||||
Edid,
|
Edid,
|
||||||
VddRef
|
VddRef,
|
||||||
|
T_Warn,
|
||||||
|
T_Crit,
|
||||||
|
FANSamplingTime,
|
||||||
|
FANSetPoint,
|
||||||
|
FANKp,
|
||||||
|
FANKi,
|
||||||
|
FANKd,
|
||||||
|
FANHystVal,
|
||||||
|
FANHystThreshold,
|
||||||
|
FANHystCtrl,
|
||||||
|
FANMaxSpeed,
|
||||||
|
FANStartpeed,
|
||||||
|
FANSensorDelay,
|
||||||
|
FANSensorNum,
|
||||||
|
FANSensorSelect,
|
||||||
|
FANSensorCfg0,
|
||||||
|
FANSensorCfg1,
|
||||||
|
FANSensorCfg2,
|
||||||
|
FANSensorCfg3,
|
||||||
|
FANSensorCfg4,
|
||||||
|
FANSensorCfg5,
|
||||||
|
FANSensorCfg6,
|
||||||
|
FANSensorCfg7,
|
||||||
|
XMac1,
|
||||||
|
XMac2,
|
||||||
|
XMac3,
|
||||||
|
XMac4,
|
||||||
|
XMac5,
|
||||||
|
XMac6,
|
||||||
|
XMac7,
|
||||||
|
XMac8,
|
||||||
|
XMac9,
|
||||||
|
XMac10,
|
||||||
|
XMac1Aux,
|
||||||
|
XMac2Aux,
|
||||||
|
XMac3Aux,
|
||||||
|
XMac4Aux,
|
||||||
|
XMac5Aux,
|
||||||
|
XMac6Aux,
|
||||||
|
XMac7Aux,
|
||||||
|
XMac8Aux,
|
||||||
|
XMac9Aux,
|
||||||
|
XMac10Aux,
|
||||||
|
XMac1Mapping,
|
||||||
|
XMac2Mapping,
|
||||||
|
XMac3Mapping,
|
||||||
|
XMac4Mapping,
|
||||||
|
XMac5Mapping,
|
||||||
|
XMac6Mapping,
|
||||||
|
XMac7Mapping,
|
||||||
|
XMac8Mapping,
|
||||||
|
XMac9Mapping,
|
||||||
|
XMac10Mapping,
|
||||||
|
netKind1,
|
||||||
|
netKind2,
|
||||||
|
netKind3,
|
||||||
|
netKind4,
|
||||||
|
netKind5,
|
||||||
|
netKind6,
|
||||||
|
netKind7,
|
||||||
|
netKind8,
|
||||||
|
netKind9,
|
||||||
|
netKind10
|
||||||
|
|
||||||
} hwinfo_field_t;
|
} hwinfo_field_t;
|
||||||
|
|
||||||
/* Define used values in supported fields */
|
/* Define used values in supported fields */
|
||||||
|
|
Loading…
Reference in New Issue