mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-11 19:17:22 +00:00
- Add support for AMC type 17h record.
This commit is contained in:
parent
eb22beb537
commit
348cd98287
@ -192,9 +192,6 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* build_fru_bloc - build fru bloc for write protection
|
/* build_fru_bloc - build fru bloc for write protection
|
||||||
*
|
*
|
||||||
* @intf: ipmi interface
|
* @intf: ipmi interface
|
||||||
@ -474,8 +471,6 @@ build_fru_bloc(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
write_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
|
write_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
|
||||||
uint16_t soffset, uint16_t doffset,
|
uint16_t soffset, uint16_t doffset,
|
||||||
@ -1227,8 +1222,6 @@ fru_area_print_product(struct ipmi_intf * intf, struct fru_info * fru,
|
|||||||
free(fru_data);
|
free(fru_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* fru_area_print_multirec - Print FRU Multi Record Area
|
/* fru_area_print_multirec - Print FRU Multi Record Area
|
||||||
*
|
*
|
||||||
* @intf: ipmi interface
|
* @intf: ipmi interface
|
||||||
@ -1881,8 +1874,9 @@ static int ipmi_fru_picmg_ext_edit(uint8_t * fru_data,
|
|||||||
int length = len;
|
int length = len;
|
||||||
offset += sizeof(struct fru_multirec_oem_header);
|
offset += sizeof(struct fru_multirec_oem_header);
|
||||||
|
|
||||||
if(oh->record_id == FRU_AMC_ACTIVATION )
|
switch (oh->record_id)
|
||||||
{
|
{
|
||||||
|
case FRU_AMC_ACTIVATION:
|
||||||
printf(" FRU_AMC_ACTIVATION\n");
|
printf(" FRU_AMC_ACTIVATION\n");
|
||||||
{
|
{
|
||||||
int index=offset;
|
int index=offset;
|
||||||
@ -1891,14 +1885,14 @@ static int ipmi_fru_picmg_ext_edit(uint8_t * fru_data,
|
|||||||
max_current = fru_data[offset];
|
max_current = fru_data[offset];
|
||||||
max_current |= fru_data[++offset]<<8;
|
max_current |= fru_data[++offset]<<8;
|
||||||
|
|
||||||
printf(" Maximum Internal Current(@12V): %02.2f A (0x%02x)\n",
|
printf(" Maximum Internal Current(@12V): %.2f A (0x%02x)\n",
|
||||||
(float)(max_current) / 10.0f , max_current);
|
(float)max_current / 10.0f, max_current);
|
||||||
|
|
||||||
if( ipmi_fru_query_new_value(fru_data,index,2) ){
|
if( ipmi_fru_query_new_value(fru_data,index,2) ){
|
||||||
max_current = fru_data[index];
|
max_current = fru_data[index];
|
||||||
max_current |= fru_data[++index]<<8;
|
max_current |= fru_data[++index]<<8;
|
||||||
printf(" New Maximum Internal Current(@12V): %02.2f A (0x%02x)\n",
|
printf(" New Maximum Internal Current(@12V): %.2f A (0x%02x)\n",
|
||||||
(float)(max_current) / 10.0f , max_current);
|
(float)max_current / 10.0f, max_current);
|
||||||
hasChanged = TRUE;
|
hasChanged = TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1914,11 +1908,35 @@ static int ipmi_fru_picmg_ext_edit(uint8_t * fru_data,
|
|||||||
(struct fru_picmgext_activation_record *) &fru_data[offset];
|
(struct fru_picmgext_activation_record *) &fru_data[offset];
|
||||||
|
|
||||||
printf(" IPMB-Address: 0x%x\n", a->ibmb_addr);
|
printf(" IPMB-Address: 0x%x\n", a->ibmb_addr);
|
||||||
printf(" Max. Module Current: %i A\n", a->max_module_curr/10);
|
printf(" Max. Module Current: %.2f A\n", (float)a->max_module_curr / 10.0f);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FRU_AMC_CURRENT:
|
||||||
|
printf(" FRU_AMC_CURRENT\n");
|
||||||
|
{
|
||||||
|
int index=offset;
|
||||||
|
unsigned char current;
|
||||||
|
|
||||||
|
current = fru_data[index];
|
||||||
|
|
||||||
|
printf(" Current draw(@12V): %.2f A (0x%02x)\n",
|
||||||
|
(float)current / 10.0f, current);
|
||||||
|
|
||||||
|
if( ipmi_fru_query_new_value(fru_data, index, 1) ){
|
||||||
|
current = fru_data[index];
|
||||||
|
|
||||||
|
printf(" New Current draw(@12V): %.2f A (0x%02x)\n",
|
||||||
|
(float)current / 10.0f, current);
|
||||||
|
hasChanged = TRUE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if( hasChanged ){
|
if( hasChanged ){
|
||||||
|
|
||||||
uint8_t record_checksum =0;
|
uint8_t record_checksum =0;
|
||||||
@ -2250,10 +2268,10 @@ static void ipmi_fru_picmg_ext_print(uint8_t * fru_data, int off, int length)
|
|||||||
unsigned char current;
|
unsigned char current;
|
||||||
printf(" FRU_AMC_CURRENT\n");
|
printf(" FRU_AMC_CURRENT\n");
|
||||||
|
|
||||||
//recVersion = fru_data[offset++];
|
|
||||||
current = fru_data[offset];
|
current = fru_data[offset];
|
||||||
printf(" Current draw: %.1f A @ 12V => %.2f Watt\n",
|
printf(" Current draw(@12V): %.2f A [ %.2f Watt ]\n",
|
||||||
(float) current/10.0, ((float)current/10.0)*12.0);
|
(float)current / 10.0f,
|
||||||
|
(float)current / 10.0f * 12.0f);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2266,10 +2284,10 @@ static void ipmi_fru_picmg_ext_print(uint8_t * fru_data, int off, int length)
|
|||||||
max_current = fru_data[offset];
|
max_current = fru_data[offset];
|
||||||
max_current |= fru_data[++offset]<<8;
|
max_current |= fru_data[++offset]<<8;
|
||||||
printf(" Maximum Internal Current(@12V): %.2f A [ %.2f Watt ]\n",
|
printf(" Maximum Internal Current(@12V): %.2f A [ %.2f Watt ]\n",
|
||||||
(float) max_current / 10,
|
(float)max_current / 10.0f,
|
||||||
(float) max_current / 10 * 12);
|
(float)max_current / 10.0f * 12.0f);
|
||||||
printf(" Module Activation Readiness: %i sec.\n", fru_data[++offset]);
|
|
||||||
|
|
||||||
|
printf(" Module Activation Readiness: %i sec.\n", fru_data[++offset]);
|
||||||
printf(" Descriptor Count: %i\n", fru_data[++offset]);
|
printf(" Descriptor Count: %i\n", fru_data[++offset]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
@ -2279,7 +2297,7 @@ static void ipmi_fru_picmg_ext_print(uint8_t * fru_data, int off, int length)
|
|||||||
(struct fru_picmgext_activation_record *) &fru_data[offset];
|
(struct fru_picmgext_activation_record *) &fru_data[offset];
|
||||||
|
|
||||||
printf(" IPMB-Address: 0x%x\n", a->ibmb_addr);
|
printf(" IPMB-Address: 0x%x\n", a->ibmb_addr);
|
||||||
printf(" Max. Module Current: %.2f A\n", (float)a->max_module_curr/10);
|
printf(" Max. Module Current: %.2f A\n", (float)a->max_module_curr / 10.0f);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3051,8 +3069,6 @@ ipmi_fru_write_from_bin(struct ipmi_intf * intf,
|
|||||||
free(pFruBuf);
|
free(pFruBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ipmi_fru_edit_multirec - Query new values to replace original FRU content
|
/* ipmi_fru_edit_multirec - Query new values to replace original FRU content
|
||||||
*
|
*
|
||||||
* @intf: interface to use
|
* @intf: interface to use
|
||||||
@ -3370,7 +3386,6 @@ ipmi_fru_get_multirec(struct ipmi_intf * intf, uint8_t id ,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ipmi_fru_upg_ekeying(struct ipmi_intf * intf,
|
ipmi_fru_upg_ekeying(struct ipmi_intf * intf,
|
||||||
char * pFileName,
|
char * pFileName,
|
||||||
@ -3666,7 +3681,6 @@ ipmi_fru_get_multirec_location_from_fru(struct ipmi_intf * intf,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ipmi_fru_get_internal_use_offset - Retreive internal use offset
|
/* ipmi_fru_get_internal_use_offset - Retreive internal use offset
|
||||||
*
|
*
|
||||||
* @intf: ipmi interface
|
* @intf: ipmi interface
|
||||||
@ -3765,7 +3779,6 @@ ipmi_fru_get_internal_use_info( struct ipmi_intf * intf,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
lprintf(LOG_DEBUG, "fru.header.version: 0x%x",
|
lprintf(LOG_DEBUG, "fru.header.version: 0x%x",
|
||||||
header.version);
|
header.version);
|
||||||
lprintf(LOG_DEBUG, "fru.header.offset.internal: 0x%x",
|
lprintf(LOG_DEBUG, "fru.header.offset.internal: 0x%x",
|
||||||
@ -3812,7 +3825,6 @@ ipmi_fru_get_internal_use_info( struct ipmi_intf * intf,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ipmi_fru_info_internal_use - print internal use info
|
/* ipmi_fru_info_internal_use - print internal use info
|
||||||
*
|
*
|
||||||
* @intf: ipmi interface
|
* @intf: ipmi interface
|
||||||
@ -3845,7 +3857,6 @@ ipmi_fru_info_internal_use(struct ipmi_intf * intf, uint8_t id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ipmi_fru_read_internal_use - print internal use are in hex or file
|
/* ipmi_fru_read_internal_use - print internal use are in hex or file
|
||||||
*
|
*
|
||||||
* @intf: ipmi interface
|
* @intf: ipmi interface
|
||||||
@ -4006,8 +4017,6 @@ ipmi_fru_write_internal_use(struct ipmi_intf * intf, uint8_t id, char * pFileNam
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ipmi_fru_main(struct ipmi_intf * intf, int argc, char ** argv)
|
ipmi_fru_main(struct ipmi_intf * intf, int argc, char ** argv)
|
||||||
{
|
{
|
||||||
@ -4209,6 +4218,7 @@ ipmi_fru_main(struct ipmi_intf * intf, int argc, char ** argv)
|
|||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ipmi_fru_set_field_string - Set a field string to a new value, Need to be the same size. If
|
/* ipmi_fru_set_field_string - Set a field string to a new value, Need to be the same size. If
|
||||||
* size if not equal, the function ipmi_fru_set_field_string_rebuild
|
* size if not equal, the function ipmi_fru_set_field_string_rebuild
|
||||||
* will be called.
|
* will be called.
|
||||||
@ -4534,7 +4544,6 @@ ipmi_fru_set_field_string_rebuild(struct ipmi_intf * intf, uint8_t fruId,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef DBG_RESIZE_FRU
|
#ifdef DBG_RESIZE_FRU
|
||||||
printf("Section Length: %lu\n", fru_section_len);
|
printf("Section Length: %lu\n", fru_section_len);
|
||||||
#endif
|
#endif
|
||||||
@ -4703,7 +4712,8 @@ ipmi_fru_set_field_string_rebuild(struct ipmi_intf * intf, uint8_t fruId,
|
|||||||
(fru_data_old + header_offset + fru_section_len - 1)
|
(fru_data_old + header_offset + fru_section_len - 1)
|
||||||
-
|
-
|
||||||
(fru_data_old + fru_field_offset_tmp + strlen(f_string) + 1)
|
(fru_data_old + fru_field_offset_tmp + strlen(f_string) + 1)
|
||||||
));
|
)
|
||||||
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memcpy(
|
memcpy(
|
||||||
@ -4716,7 +4726,6 @@ ipmi_fru_set_field_string_rebuild(struct ipmi_intf * intf, uint8_t fruId,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/* Add Padding if required */
|
/* Add Padding if required */
|
||||||
for(counter = 0; counter < padding_len; counter ++)
|
for(counter = 0; counter < padding_len; counter ++)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user