Lines Matching +full:ext +full:- +full:clk +full:- +full:freq +full:- +full:hz
22 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
82 /* get_fru_area_str - Parse FRU area string from raw data
91 static const char bcd_plus[] = "0123456789 -.:,_"; in get_fru_area_str()
112 /* hex dump -> 2x length */ in get_fru_area_str()
115 case 2: /* 10b: 6-bit ASCII */ in get_fru_area_str()
116 /* 4 chars per group of 1-3 bytes */ in get_fru_area_str()
119 case 3: /* 11b: 8-bit ASCII */ in get_fru_area_str()
152 case 2: /* 6-bit ASCII */ in get_fru_area_str()
155 k = ((len-i) < 3 ? (len-i) : 3); in get_fru_area_str()
185 /* is_valid_filename - checks file/path supplied by user
187 * input_filename - user input string
190 * returns (-1) if path is NULL
191 * returns (-2) if path is too short
192 * returns (-3) if path is too long
199 return (-1); in is_valid_filename()
204 return (-2); in is_valid_filename()
209 return (-3); in is_valid_filename()
215 /* build_fru_bloc - build fru bloc for write protection
226 * returns -1 on error
255 rsp = intf->sendrecv(intf, &req); in build_fru_bloc()
262 if (rsp->ccode > 0) { in build_fru_bloc()
264 val2str(rsp->ccode, completion_code_vals)); in build_fru_bloc()
269 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in build_fru_bloc()
272 memcpy(&header, rsp->data + 1, 8); in build_fru_bloc()
297 p_bloc->next = NULL; in build_fru_bloc()
298 p_bloc->start= 0; in build_fru_bloc()
299 p_bloc->size = fru->size; in build_fru_bloc()
300 strcpy((char *)p_bloc->blocId, "Common Header Section"); in build_fru_bloc()
311 p_new->next = NULL; in build_fru_bloc()
312 p_new->start = header.offsets[i] * 8; in build_fru_bloc()
313 p_new->size = fru->size - p_new->start; in build_fru_bloc()
315 strncpy((char *)p_new->blocId, section_id[i], sizeof(p_new->blocId)); in build_fru_bloc()
317 p_new->blocId[sizeof(p_new->blocId)-1] = 0; in build_fru_bloc()
319 p_bloc->next = p_new; in build_fru_bloc()
320 p_bloc->size = p_new->start - p_bloc->start; in build_fru_bloc()
334 if (fru->access && (off & 1)) { in build_fru_bloc()
353 p_new->next = NULL; in build_fru_bloc()
354 p_new->start = off; in build_fru_bloc()
355 p_new->size = fru->size - p_new->start; in build_fru_bloc()
356 sprintf((char *)p_new->blocId, "Multi-Rec Area: Type %i", in build_fru_bloc()
359 p_bloc->next = p_new; in build_fru_bloc()
360 p_bloc->size = p_new->start - p_bloc->start; in build_fru_bloc()
371 } while (!(rec_hdr.format & 0x80) && (off < fru->size)); in build_fru_bloc()
373 lprintf(LOG_DEBUG,"Multi-Record area ends at: %i (%xh)", off, off); in build_fru_bloc()
375 if (fru->size > off) { in build_fru_bloc()
384 p_new->next = NULL; in build_fru_bloc()
385 p_new->start = off; in build_fru_bloc()
386 p_new->size = fru->size - p_new->start; in build_fru_bloc()
387 strcpy((char *)p_new->blocId, "Unused space"); in build_fru_bloc()
389 p_bloc->next = p_new; in build_fru_bloc()
390 p_bloc->size = p_new->start - p_bloc->start; in build_fru_bloc()
395 for(p_bloc = p_first, i = 0; p_bloc; p_bloc = p_bloc->next) { in build_fru_bloc()
397 lprintf(LOG_DEBUG ,"Bloc Id : %s", p_bloc->blocId); in build_fru_bloc()
398 lprintf(LOG_DEBUG ,"Bloc Start: %i", p_bloc->start); in build_fru_bloc()
399 lprintf(LOG_DEBUG ,"Bloc Size : %i", p_bloc->size); in build_fru_bloc()
413 bloc = bloc->next; in free_fru_bloc()
436 if (finish > fru->size) in write_fru_area()
439 return -1; in write_fru_area()
442 if (fru->access && ((doffset & 1) || (length & 1))) { in write_fru_area()
444 return (-1); in write_fru_area()
456 if (fru->max_write_size == 0) { in write_fru_area()
463 return -1; in write_fru_area()
470 if (max_rq_size - 3 > 255) { in write_fru_area()
472 fru->max_write_size = 255; in write_fru_area()
475 fru->max_write_size = max_rq_size - 3; in write_fru_area()
479 if (fru->access) { in write_fru_area()
480 fru->max_write_size &= ~1; in write_fru_area()
489 while (fru_bloc && fru_bloc->start + fru_bloc->size <= doffset) { in write_fru_area()
490 fru_bloc = fru_bloc->next; in write_fru_area()
494 if (fru_bloc && fru_bloc->start + fru_bloc->size < finish) { in write_fru_area()
495 end_bloc = fru_bloc->start + fru_bloc->size; in write_fru_area()
501 tmp = end_bloc - doffset; in write_fru_area()
504 if (tmp > fru->max_write_size) { in write_fru_area()
505 writeLength = fru->max_write_size; in write_fru_area()
514 if (fru->access) { in write_fru_area()
519 if (fru->access) { in write_fru_area()
530 writeLength, found_bloc, fru_bloc->blocId); in write_fru_area()
535 rsp = intf->sendrecv(intf, &req); in write_fru_area()
540 if (rsp->ccode == 0xc7 || rsp->ccode == 0xc8 || rsp->ccode == 0xca) { in write_fru_area()
541 if (fru->max_write_size > 8) { in write_fru_area()
542 fru->max_write_size -= 8; in write_fru_area()
544 fru->max_write_size); in write_fru_area()
547 } else if(rsp->ccode == 0x80) { in write_fru_area()
548 rsp->ccode = 0; in write_fru_area()
553 if (rsp->ccode > 0) in write_fru_area()
566 fru_bloc->blocId, fru_bloc->start, fru_bloc->size); in write_fru_area()
573 soffset += end_bloc - doffset; in write_fru_area()
585 /* read_fru_area - fill in frubuf[offset:length] from the FRU[offset:length]
594 * returns -1 on error
606 if (offset > fru->size) { in read_fru_area()
608 offset, fru->size); in read_fru_area()
609 return -1; in read_fru_area()
613 if (finish > fru->size) { in read_fru_area()
614 finish = fru->size; in read_fru_area()
617 offset + length, finish - offset); in read_fru_area()
626 if (fru->max_read_size == 0) { in read_fru_area()
627 uint16_t max_rs_size = ipmi_intf_get_max_response_data_size(intf) - 1; in read_fru_area()
633 return -1; in read_fru_area()
639 if (max_rs_size - 1 > 255) { in read_fru_area()
641 fru->max_read_size = 255; in read_fru_area()
644 fru->max_read_size = max_rs_size - 1; in read_fru_area()
648 if (fru->access) { in read_fru_area()
649 fru->max_read_size &= ~1; in read_fru_area()
654 tmp = fru->access ? off >> 1 : off; in read_fru_area()
658 tmp = finish - off; in read_fru_area()
659 if (tmp > fru->max_read_size) in read_fru_area()
660 msg_data[3] = (uint8_t)fru->max_read_size; in read_fru_area()
664 rsp = intf->sendrecv(intf, &req); in read_fru_area()
669 if (rsp->ccode > 0) { in read_fru_area()
672 if ((rsp->ccode == 0xc8 || rsp->ccode == 0xca) in read_fru_area()
673 && fru->max_read_size > 8) { in read_fru_area()
674 if (fru->max_read_size > 32) { in read_fru_area()
676 fru->max_read_size -= 8; in read_fru_area()
679 fru->max_read_size--; in read_fru_area()
683 fru->max_read_size); in read_fru_area()
688 val2str(rsp->ccode, completion_code_vals)); in read_fru_area()
692 tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; in read_fru_area()
693 memcpy(frubuf, rsp->data + 1, tmp); in read_fru_area()
705 return -1; in read_fru_area()
711 /* read_fru_area - fill in frubuf[offset:length] from the FRU[offset:length]
720 * returns -1 on error
733 if (offset > fru->size) { in read_fru_area_section()
735 offset, fru->size); in read_fru_area_section()
736 return -1; in read_fru_area_section()
740 if (finish > fru->size) { in read_fru_area_section()
741 finish = fru->size; in read_fru_area_section()
744 offset + length, finish - offset); in read_fru_area_section()
756 if (fru->access && fru_data_rqst_size > 16) in read_fru_area_section()
760 tmp = fru->access ? off >> 1 : off; in read_fru_area_section()
764 tmp = finish - off; in read_fru_area_section()
770 rsp = intf->sendrecv(intf, &req); in read_fru_area_section()
775 if (rsp->ccode > 0) { in read_fru_area_section()
778 if ((rsp->ccode == 0xc7 || rsp->ccode == 0xc8 || rsp->ccode == 0xca) && in read_fru_area_section()
779 (--fru_data_rqst_size > 8)) { in read_fru_area_section()
785 val2str(rsp->ccode, completion_code_vals)); in read_fru_area_section()
789 tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; in read_fru_area_section()
790 memcpy((frubuf + off)-offset, rsp->data + 1, tmp); in read_fru_area_section()
802 return -1; in read_fru_area_section()
820 fru_data = malloc(fru->size + 1); in fru_area_print_multirec_bloc()
826 memset(fru_data, 0, fru->size + 1); in fru_area_print_multirec_bloc()
832 if ((last_off < (i + sizeof(*h))) || (last_off < (i + h->len))) in fru_area_print_multirec_bloc()
834 len = fru->size - last_off; in fru_area_print_multirec_bloc()
846 printf("Bloc Size : %i\n", h->len); in fru_area_print_multirec_bloc()
849 i += h->len + sizeof (struct fru_multirec_header); in fru_area_print_multirec_bloc()
850 } while (!(h->format & 0x80)); in fru_area_print_multirec_bloc()
857 printf("Bloc Size : %i\n", h->len); in fru_area_print_multirec_bloc()
860 i += h->len + sizeof (struct fru_multirec_header); in fru_area_print_multirec_bloc()
861 } while (!(h->format & 0x80)); in fru_area_print_multirec_bloc()
863 lprintf(LOG_DEBUG ,"Multi-Record area ends at: %i (%xh)",i,i); in fru_area_print_multirec_bloc()
870 /* fru_area_print_chassis - Print FRU Chassis Area
920 (sizeof(chassis_type_desc)/sizeof(chassis_type_desc[0])) - 1 ? in fru_area_print_chassis()
967 /* fru_area_print_board - Print FRU Board Area
1091 /* fru_area_print_product - Print FRU Product Area
1226 /* fru_area_print_multirec - Print FRU Multi Record Area
1263 if (h->len && read_fru_area(intf, fru, id, in fru_area_print_multirec()
1264 last_off + sizeof(*h), h->len, fru_data + sizeof(*h)) < 0) { in fru_area_print_multirec()
1268 last_off += h->len + sizeof(*h); in fru_area_print_multirec()
1270 switch (h->type) { in fru_area_print_multirec()
1276 ps->capacity = BSWAP_16(ps->capacity); in fru_area_print_multirec()
1277 ps->peak_va = BSWAP_16(ps->peak_va); in fru_area_print_multirec()
1278 ps->lowend_input1 = BSWAP_16(ps->lowend_input1); in fru_area_print_multirec()
1279 ps->highend_input1 = BSWAP_16(ps->highend_input1); in fru_area_print_multirec()
1280 ps->lowend_input2 = BSWAP_16(ps->lowend_input2); in fru_area_print_multirec()
1281 ps->highend_input2 = BSWAP_16(ps->highend_input2); in fru_area_print_multirec()
1282 ps->combined_capacity = BSWAP_16(ps->combined_capacity); in fru_area_print_multirec()
1283 ps->peak_cap_ht = BSWAP_16(ps->peak_cap_ht); in fru_area_print_multirec()
1285 peak_hold_up_time = (ps->peak_cap_ht & 0xf000) >> 12; in fru_area_print_multirec()
1286 peak_capacity = ps->peak_cap_ht & 0x0fff; in fru_area_print_multirec()
1290 ps->capacity); in fru_area_print_multirec()
1292 ps->peak_va); in fru_area_print_multirec()
1294 ps->inrush_current); in fru_area_print_multirec()
1296 ps->inrush_interval); in fru_area_print_multirec()
1297 printf (" Input Voltage Range 1 : %d-%d V\n", in fru_area_print_multirec()
1298 ps->lowend_input1 / 100, ps->highend_input1 / 100); in fru_area_print_multirec()
1299 printf (" Input Voltage Range 2 : %d-%d V\n", in fru_area_print_multirec()
1300 ps->lowend_input2 / 100, ps->highend_input2 / 100); in fru_area_print_multirec()
1301 printf (" Input Frequency Range : %d-%d Hz\n", in fru_area_print_multirec()
1302 ps->lowend_freq, ps->highend_freq); in fru_area_print_multirec()
1304 ps->dropout_tolerance); in fru_area_print_multirec()
1306 ps->predictive_fail ? "'Predictive fail' " : "", in fru_area_print_multirec()
1307 ps->pfc ? "'Power factor correction' " : "", in fru_area_print_multirec()
1308 ps->autoswitch ? "'Autoswitch voltage' " : "", in fru_area_print_multirec()
1309 ps->hotswap ? "'Hot swap' " : "", in fru_area_print_multirec()
1310 ps->predictive_fail ? ps->rps_threshold ? in fru_area_print_multirec()
1311 ps->tach ? "'Two pulses per rotation'" : "'One pulse per rotation'" : in fru_area_print_multirec()
1312 ps->tach ? "'Failure on pin de-assertion'" : "'Failure on pin assertion'" : ""); in fru_area_print_multirec()
1317 if (ps->combined_capacity == 0) in fru_area_print_multirec()
1321 ps->combined_capacity, in fru_area_print_multirec()
1322 combined_voltage_desc [ps->combined_voltage1], in fru_area_print_multirec()
1323 combined_voltage_desc [ps->combined_voltage2]); in fru_area_print_multirec()
1324 if (ps->predictive_fail) in fru_area_print_multirec()
1326 ps->rps_threshold); in fru_area_print_multirec()
1334 dc->nominal_voltage = BSWAP_16(dc->nominal_voltage); in fru_area_print_multirec()
1335 dc->max_neg_dev = BSWAP_16(dc->max_neg_dev); in fru_area_print_multirec()
1336 dc->max_pos_dev = BSWAP_16(dc->max_pos_dev); in fru_area_print_multirec()
1337 dc->ripple_and_noise = BSWAP_16(dc->ripple_and_noise); in fru_area_print_multirec()
1338 dc->min_current = BSWAP_16(dc->min_current); in fru_area_print_multirec()
1339 dc->max_current = BSWAP_16(dc->max_current); in fru_area_print_multirec()
1344 dc->output_number); in fru_area_print_multirec()
1346 dc->standby ? "Yes" : "No"); in fru_area_print_multirec()
1348 (double) dc->nominal_voltage / 100); in fru_area_print_multirec()
1350 (double) dc->max_neg_dev / 100); in fru_area_print_multirec()
1352 (double) dc->max_pos_dev / 100); in fru_area_print_multirec()
1353 printf (" Ripple and noise pk-pk : %d mV\n", in fru_area_print_multirec()
1354 dc->ripple_and_noise); in fru_area_print_multirec()
1356 (double) dc->min_current / 1000); in fru_area_print_multirec()
1358 (double) dc->max_current / 1000); in fru_area_print_multirec()
1366 dl->nominal_voltage = BSWAP_16(dl->nominal_voltage); in fru_area_print_multirec()
1367 dl->min_voltage = BSWAP_16(dl->min_voltage); in fru_area_print_multirec()
1368 dl->max_voltage = BSWAP_16(dl->max_voltage); in fru_area_print_multirec()
1369 dl->ripple_and_noise = BSWAP_16(dl->ripple_and_noise); in fru_area_print_multirec()
1370 dl->min_current = BSWAP_16(dl->min_current); in fru_area_print_multirec()
1371 dl->max_current = BSWAP_16(dl->max_current); in fru_area_print_multirec()
1376 dl->output_number); in fru_area_print_multirec()
1378 (double) dl->nominal_voltage / 100); in fru_area_print_multirec()
1380 (double) dl->min_voltage / 100); in fru_area_print_multirec()
1382 (double) dl->max_voltage / 100); in fru_area_print_multirec()
1383 printf (" Ripple and noise pk-pk : %d mV\n", in fru_area_print_multirec()
1384 dl->ripple_and_noise); in fru_area_print_multirec()
1386 (double) dl->min_current / 1000); in fru_area_print_multirec()
1388 (double) dl->max_current / 1000); in fru_area_print_multirec()
1394 uint32_t iana = oh->mfg_id[0] | oh->mfg_id[1]<<8 | oh->mfg_id[2]<<16; in fru_area_print_multirec()
1402 h->len); in fru_area_print_multirec()
1411 } while (!(h->format & 0x80)); in fru_area_print_multirec()
1413 lprintf(LOG_DEBUG ,"Multi-Record area ends at: %i (%xh)", last_off, last_off); in fru_area_print_multirec()
1418 /* ipmi_fru_query_new_value - Query new values to replace original FRU content
1471 /* ipmi_fru_oemkontron_edit -
1588 if(oh->record_id == OEM_KONTRON_INFORMATION_RECORD ) { in ipmi_fru_oemkontron_get()
1593 version = oh->record_version; in ipmi_fru_oemkontron_get()
1630 ((tOemKontronInformationRecordV0 *) pRecordData)->field1); in ipmi_fru_oemkontron_get()
1634 ((tOemKontronInformationRecordV0 *) pRecordData)->field2); in ipmi_fru_oemkontron_get()
1638 ((tOemKontronInformationRecordV0 *) pRecordData)->field3); in ipmi_fru_oemkontron_get()
1642 ((tOemKontronInformationRecordV0 *) pRecordData)->crc32); in ipmi_fru_oemkontron_get()
1652 ((tOemKontronInformationRecordV1 *) pRecordData)->field1); in ipmi_fru_oemkontron_get()
1656 ((tOemKontronInformationRecordV1 *) pRecordData)->field2); in ipmi_fru_oemkontron_get()
1660 ((tOemKontronInformationRecordV1 *) pRecordData)->field3); in ipmi_fru_oemkontron_get()
1664 ((tOemKontronInformationRecordV1 *) pRecordData)->crc32); in ipmi_fru_oemkontron_get()
1730 if(oh->record_id == OEM_KONTRON_INFORMATION_RECORD ) { in ipmi_fru_oemkontron_edit()
1743 version = oh->record_version; in ipmi_fru_oemkontron_edit()
1785 pRecordData)->field1 , in ipmi_fru_oemkontron_edit()
1789 pRecordData)->field2 , in ipmi_fru_oemkontron_edit()
1793 pRecordData)->field3 , in ipmi_fru_oemkontron_edit()
1797 pRecordData)->crc32 , in ipmi_fru_oemkontron_edit()
1804 pRecordData)->field1 , in ipmi_fru_oemkontron_edit()
1808 pRecordData)->field2 , in ipmi_fru_oemkontron_edit()
1812 pRecordData)->field3 , in ipmi_fru_oemkontron_edit()
1816 pRecordData)->crc32 , in ipmi_fru_oemkontron_edit()
1861 lprintf(LOG_DEBUG,"Initial record checksum : %x",h->record_checksum); in ipmi_fru_oemkontron_edit()
1862 lprintf(LOG_DEBUG,"Initial header checksum : %x",h->header_checksum); in ipmi_fru_oemkontron_edit()
1867 h->record_checksum = ~record_checksum + 1; in ipmi_fru_oemkontron_edit()
1870 for(index=0;index<(sizeof(struct fru_multirec_header) -1);index++){ in ipmi_fru_oemkontron_edit()
1875 h->header_checksum = ~header_checksum + 1; in ipmi_fru_oemkontron_edit()
1877 lprintf(LOG_DEBUG,"Final record checksum : %x",h->record_checksum); in ipmi_fru_oemkontron_edit()
1878 lprintf(LOG_DEBUG,"Final header checksum : %x",h->header_checksum); in ipmi_fru_oemkontron_edit()
1887 /* ipmi_fru_picmg_ext_edit - Query new values to replace original FRU content
1909 switch (oh->record_id) in ipmi_fru_picmg_ext_edit()
1942 printf(" IPMB-Address: 0x%x\n", a->ibmb_addr); in ipmi_fru_picmg_ext_edit()
1943 printf(" Max. Module Current: %.2f A\n", (float)a->max_module_curr / 10.0f); in ipmi_fru_picmg_ext_edit()
1978 lprintf(LOG_DEBUG,"Initial record checksum : %x",h->record_checksum); in ipmi_fru_picmg_ext_edit()
1979 lprintf(LOG_DEBUG,"Initial header checksum : %x",h->header_checksum); in ipmi_fru_picmg_ext_edit()
1984 h->record_checksum = ~record_checksum + 1; in ipmi_fru_picmg_ext_edit()
1987 for(index=0;index<(sizeof(struct fru_multirec_header) -1);index++){ in ipmi_fru_picmg_ext_edit()
1992 h->header_checksum = ~header_checksum + 1; in ipmi_fru_picmg_ext_edit()
1994 lprintf(LOG_DEBUG,"Final record checksum : %x",h->record_checksum); in ipmi_fru_picmg_ext_edit()
1995 lprintf(LOG_DEBUG,"Final header checksum : %x",h->header_checksum); in ipmi_fru_picmg_ext_edit()
2003 /* ipmi_fru_picmg_ext_print - prints OEM fru record (PICMG)
2022 switch (h->record_id) in ipmi_fru_picmg_ext_print()
2038 switch (slot_d->chan_type) in ipmi_fru_picmg_ext_print()
2064 slot_d->chan_type); in ipmi_fru_picmg_ext_print()
2068 slot_d->slot_addr ); in ipmi_fru_picmg_ext_print()
2070 slot_d->chn_count); in ipmi_fru_picmg_ext_print()
2073 index < (slot_d->chn_count); in ipmi_fru_picmg_ext_print()
2082 "Chn: %02x -> " in ipmi_fru_picmg_ext_print()
2085 d->local_chn, in ipmi_fru_picmg_ext_print()
2086 d->remote_chn, in ipmi_fru_picmg_ext_print()
2087 d->remote_slot); in ipmi_fru_picmg_ext_print()
2190 " Min Expected Voltage: -%02d.%dV\n", in ipmi_fru_picmg_ext_print()
2194 " Min Expected Voltage: -%dV (actual invalid value 0x%x)\n", in ipmi_fru_picmg_ext_print()
2276 d->grouping); in ipmi_fru_picmg_ext_print()
2277 printf(" Link Type Extension: 0x%02x - ", in ipmi_fru_picmg_ext_print()
2278 d->ext); in ipmi_fru_picmg_ext_print()
2279 if (d->type == FRU_PICMGEXT_LINK_TYPE_BASE) { in ipmi_fru_picmg_ext_print()
2280 switch (d->ext) in ipmi_fru_picmg_ext_print()
2283 printf("10/100/1000BASE-T Link (four-pair)\n"); in ipmi_fru_picmg_ext_print()
2286 printf("ShMC Cross-connect (two-pair)\n"); in ipmi_fru_picmg_ext_print()
2292 } else if (d->type == FRU_PICMGEXT_LINK_TYPE_FABRIC_ETHERNET) { in ipmi_fru_picmg_ext_print()
2293 switch (d->ext) in ipmi_fru_picmg_ext_print()
2296 printf("Fixed 1000Base-BX\n"); in ipmi_fru_picmg_ext_print()
2299 printf("Fixed 10GBASE-BX4 [XAUI]\n"); in ipmi_fru_picmg_ext_print()
2302 printf("FC-PI\n"); in ipmi_fru_picmg_ext_print()
2308 } else if (d->type == FRU_PICMGEXT_LINK_TYPE_FABRIC_INFINIBAND) { in ipmi_fru_picmg_ext_print()
2310 } else if (d->type == FRU_PICMGEXT_LINK_TYPE_FABRIC_STAR) { in ipmi_fru_picmg_ext_print()
2312 } else if (d->type == FRU_PICMGEXT_LINK_TYPE_PCIE) { in ipmi_fru_picmg_ext_print()
2318 printf(" Link Type: 0x%02x - ", in ipmi_fru_picmg_ext_print()
2319 d->type); in ipmi_fru_picmg_ext_print()
2320 if (d->type == 0 || d->type == 0xff) { in ipmi_fru_picmg_ext_print()
2323 else if (d->type >= 0x06 && d->type <= 0xef) { in ipmi_fru_picmg_ext_print()
2326 else if (d->type >= 0xf0 && d->type <= 0xfe) { in ipmi_fru_picmg_ext_print()
2330 switch (d->type) in ipmi_fru_picmg_ext_print()
2354 d->desig_port); in ipmi_fru_picmg_ext_print()
2355 printf(" Interface: 0x%02x - ", in ipmi_fru_picmg_ext_print()
2356 d->desig_if); in ipmi_fru_picmg_ext_print()
2357 switch (d->desig_if) in ipmi_fru_picmg_ext_print()
2376 d->desig_channel); in ipmi_fru_picmg_ext_print()
2415 printf(" IPMB-Address: 0x%x\n", in ipmi_fru_picmg_ext_print()
2416 a->ibmb_addr); in ipmi_fru_picmg_ext_print()
2418 (float)a->max_module_curr / 10.0f); in ipmi_fru_picmg_ext_print()
2433 (h->resource_id & 0x07)); in ipmi_fru_picmg_ext_print()
2435 if ((h->resource_id>>7) == 1) { in ipmi_fru_picmg_ext_print()
2441 h->p2p_count); in ipmi_fru_picmg_ext_print()
2443 for (index = 0; index < h->p2p_count; index++) { in ipmi_fru_picmg_ext_print()
2457 printf(" Port: %02d\t-> Remote Port: %02d\t", in ipmi_fru_picmg_ext_print()
2458 desc->local_port, desc->remote_port); in ipmi_fru_picmg_ext_print()
2459 if ((desc->remote_resource_id >> 7) == 1) { in ipmi_fru_picmg_ext_print()
2461 desc->remote_resource_id & 0x0F); in ipmi_fru_picmg_ext_print()
2464 desc->remote_resource_id & 0x0F); in ipmi_fru_picmg_ext_print()
2491 (h->record_type ? in ipmi_fru_picmg_ext_print()
2492 "AMC Module:" : "On-Carrier Device")); in ipmi_fru_picmg_ext_print()
2493 printf(" Resource ID: %i\n", h->resource_id); in ipmi_fru_picmg_ext_print()
2509 d->lane0port); in ipmi_fru_picmg_ext_print()
2511 d->lane1port); in ipmi_fru_picmg_ext_print()
2513 d->lane2port); in ipmi_fru_picmg_ext_print()
2515 d->lane3port); in ipmi_fru_picmg_ext_print()
2529 l->channel_id, in ipmi_fru_picmg_ext_print()
2530 (l->port_flag_0)?"o":"-", in ipmi_fru_picmg_ext_print()
2531 (l->port_flag_1)?"o":"-", in ipmi_fru_picmg_ext_print()
2532 (l->port_flag_2)?"o":"-", in ipmi_fru_picmg_ext_print()
2533 (l->port_flag_3)?"o":"-" ); in ipmi_fru_picmg_ext_print()
2534 switch (l->type) { in ipmi_fru_picmg_ext_print()
2537 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2538 "AMC.1 PCI Express\n", l->type); in ipmi_fru_picmg_ext_print()
2539 switch (l->type_ext) { in ipmi_fru_picmg_ext_print()
2541 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2542 " Gen 1 capable - non SSC\n", in ipmi_fru_picmg_ext_print()
2543 l->type_ext); in ipmi_fru_picmg_ext_print()
2546 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2547 " Gen 1 capable - SSC\n", in ipmi_fru_picmg_ext_print()
2548 l->type_ext); in ipmi_fru_picmg_ext_print()
2551 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2552 " Gen 2 capable - non SSC\n", in ipmi_fru_picmg_ext_print()
2553 l->type_ext); in ipmi_fru_picmg_ext_print()
2556 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2557 " Gen 2 capable - SSC\n", in ipmi_fru_picmg_ext_print()
2558 l->type_ext); in ipmi_fru_picmg_ext_print()
2561 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2563 l->type_ext); in ipmi_fru_picmg_ext_print()
2571 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2573 l->type); in ipmi_fru_picmg_ext_print()
2574 printf(" Link Type Ext: %i\n", in ipmi_fru_picmg_ext_print()
2575 l->type_ext); in ipmi_fru_picmg_ext_print()
2580 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2582 l->type); in ipmi_fru_picmg_ext_print()
2583 switch (l->type_ext) { in ipmi_fru_picmg_ext_print()
2585 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2586 " 1000Base-Bx (SerDES Gigabit) Ethernet Link\n", in ipmi_fru_picmg_ext_print()
2587 l->type_ext); in ipmi_fru_picmg_ext_print()
2591 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2593 l->type_ext); in ipmi_fru_picmg_ext_print()
2597 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2599 l->type_ext); in ipmi_fru_picmg_ext_print()
2606 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2608 l->type); in ipmi_fru_picmg_ext_print()
2609 switch (l->type_ext) { in ipmi_fru_picmg_ext_print()
2611 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2613 l->type_ext); in ipmi_fru_picmg_ext_print()
2617 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2619 l->type_ext); in ipmi_fru_picmg_ext_print()
2623 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2625 l->type_ext); in ipmi_fru_picmg_ext_print()
2629 printf( " Link Type Ext: %i - " in ipmi_fru_picmg_ext_print()
2631 l->type_ext); in ipmi_fru_picmg_ext_print()
2638 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2640 l->type); in ipmi_fru_picmg_ext_print()
2641 printf(" Link Type Ext: %i\n", in ipmi_fru_picmg_ext_print()
2642 l->type_ext); in ipmi_fru_picmg_ext_print()
2646 printf( " Link Type: %02x - " in ipmi_fru_picmg_ext_print()
2648 l->type); in ipmi_fru_picmg_ext_print()
2649 printf(" Link Type Ext: %i\n", in ipmi_fru_picmg_ext_print()
2650 l->type_ext); in ipmi_fru_picmg_ext_print()
2655 l->group_id); in ipmi_fru_picmg_ext_print()
2657 l->asym_match); in ipmi_fru_picmg_ext_print()
2703 if((resource_id & 0xC0)>>6 == 0) {printf("On-Carrier-Device\n");} in ipmi_fru_picmg_ext_print()
2716 printf(" CLK-ID: 0x%02x ->", loc_channel); in ipmi_fru_picmg_ext_print()
2718 if((rem_resource & 0xC0)>>6 == 0) {printf("[ Carrier-Dev");} in ipmi_fru_picmg_ext_print()
2748 printf(" CLK-ID: 0x%02x - ", channel_id); in ipmi_fru_picmg_ext_print()
2767 printf(" Feature: 0x%02x [%8s] - ", feature, (feature&0x1)==1?"Source":"Receiver"); in ipmi_fru_picmg_ext_print()
2768 printf(" Dep. CLK-ID: 0x%02x\n", dep_chn_id); in ipmi_fru_picmg_ext_print()
2774 unsigned int freq, min_freq, max_freq; in ipmi_fru_picmg_ext_print() local
2779 freq = (fru_data[offset+0] << 0 ) | (fru_data[offset+1] << 8 ) in ipmi_fru_picmg_ext_print()
2789 printf(" - Feature: 0x%02x - PLL: %x / Asym: %s\n", in ipmi_fru_picmg_ext_print()
2793 printf(" Family: 0x%02x - AccLVL: 0x%02x\n", family, accuracy); in ipmi_fru_picmg_ext_print()
2794 printf(" FRQ: %-9ld - min: %-9ld - max: %-9ld\n", in ipmi_fru_picmg_ext_print()
2795 freq, min_freq, max_freq); in ipmi_fru_picmg_ext_print()
2816 printf(" - Record ID: 0x%02x\n", h->record_id); in ipmi_fru_picmg_ext_print()
2820 printf(" Unknown OEM Extension Record ID: %x\n", h->record_id); in ipmi_fru_picmg_ext_print()
2827 /* __ipmi_fru_print - Do actual work to print a FRU by its ID
2832 * returns -1 on error
2860 rsp = intf->sendrecv(intf, &req); in __ipmi_fru_print()
2863 return -1; in __ipmi_fru_print()
2865 if (rsp->ccode > 0) { in __ipmi_fru_print()
2867 val2str(rsp->ccode, completion_code_vals)); in __ipmi_fru_print()
2868 return -1; in __ipmi_fru_print()
2872 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in __ipmi_fru_print()
2873 fru.access = rsp->data[2] & 0x1; in __ipmi_fru_print()
2880 return -1; in __ipmi_fru_print()
2897 rsp = intf->sendrecv(intf, &req); in __ipmi_fru_print()
2902 if (rsp->ccode > 0) { in __ipmi_fru_print()
2904 val2str(rsp->ccode, completion_code_vals)); in __ipmi_fru_print()
2909 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in __ipmi_fru_print()
2911 memcpy(&header, rsp->data + 1, 8); in __ipmi_fru_print()
2916 return -1; in __ipmi_fru_print()
2922 * which would overflow our 1-byte offset field */ in __ipmi_fru_print()
2963 /* ipmi_fru_print - Print a FRU from its SDR locator record
2968 * returns -1 on error
2999 if (fru->dev_type != 0x10 && in ipmi_fru_print()
3000 (fru->dev_type_modifier != 0x02 || in ipmi_fru_print()
3001 fru->dev_type < 0x08 || fru->dev_type > 0x0f)) in ipmi_fru_print()
3002 return -1; in ipmi_fru_print()
3004 if (fru->dev_slave_addr == IPMI_BMC_SLAVE_ADDR && in ipmi_fru_print()
3005 fru->device_id == 0) in ipmi_fru_print()
3009 memcpy(desc, fru->id_string, fru->id_code & 0x01f); in ipmi_fru_print()
3010 desc[fru->id_code & 0x01f] = 0; in ipmi_fru_print()
3011 printf("FRU Device Description : %s (ID %d)\n", desc, fru->device_id); in ipmi_fru_print()
3013 switch (fru->dev_type_modifier) { in ipmi_fru_print()
3016 if (BRIDGE_TO_SENSOR(intf, fru->dev_slave_addr, in ipmi_fru_print()
3017 fru->channel_num)) { in ipmi_fru_print()
3019 save_addr = intf->target_addr; in ipmi_fru_print()
3020 intf->target_addr = fru->dev_slave_addr; in ipmi_fru_print()
3021 save_channel = intf->target_channel; in ipmi_fru_print()
3022 intf->target_channel = fru->channel_num; in ipmi_fru_print()
3025 rc = __ipmi_fru_print(intf, fru->device_id); in ipmi_fru_print()
3027 intf->target_addr = save_addr; in ipmi_fru_print()
3028 intf->target_channel = save_channel; in ipmi_fru_print()
3032 rc = ipmi_spd_print_fru(intf, fru->device_id); in ipmi_fru_print()
3038 fru->device_id, fru->dev_type, in ipmi_fru_print()
3039 fru->dev_type_modifier); in ipmi_fru_print()
3048 /* ipmi_fru_print_all - Print builtin FRU + SDR FRU Locator records
3052 * returns -1 on error
3076 rsp = intf->sendrecv(intf, &req); in ipmi_fru_print_all()
3079 return -1; in ipmi_fru_print_all()
3081 if (rsp->ccode > 0) { in ipmi_fru_print_all()
3083 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_print_all()
3084 return -1; in ipmi_fru_print_all()
3087 devid = (struct ipm_devid_rsp *) rsp->data; in ipmi_fru_print_all()
3092 if (devid->adtl_device_support & 0x08) { /* FRU Inventory Device bit? */ in ipmi_fru_print_all()
3098 return -1; in ipmi_fru_print_all()
3106 if (header->type == SDR_RECORD_TYPE_MC_DEVICE_LOCATOR ) { in ipmi_fru_print_all()
3111 if (mc && (mc->dev_support & 0x08) && /* FRU inventory device? */ in ipmi_fru_print_all()
3112 intf->target_addr != mc->dev_slave_addr) { in ipmi_fru_print_all()
3117 save_addr = intf->target_addr; in ipmi_fru_print_all()
3120 intf->target_addr = mc->dev_slave_addr; in ipmi_fru_print_all()
3122 printf("FRU Device Description : %-16s\n", mc->id_string); in ipmi_fru_print_all()
3131 intf->target_addr = save_addr; in ipmi_fru_print_all()
3142 if (header->type != SDR_RECORD_TYPE_FRU_DEVICE_LOCATOR) in ipmi_fru_print_all()
3148 if (fru == NULL || !fru->logical) { in ipmi_fru_print_all()
3165 /* ipmi_fru_read_help() - print help text for 'read'
3196 rsp = intf->sendrecv(intf, &req); in ipmi_fru_read_to_bin()
3200 if (rsp->ccode > 0) { in ipmi_fru_read_to_bin()
3201 if (rsp->ccode == 0xc3) in ipmi_fru_read_to_bin()
3207 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_read_to_bin()
3208 fru.access = rsp->data[2] & 0x1; in ipmi_fru_read_to_bin()
3264 rsp = intf->sendrecv(intf, &req); in ipmi_fru_write_from_bin()
3268 if (rsp->ccode) { in ipmi_fru_write_from_bin()
3269 if (rsp->ccode == 0xc3) in ipmi_fru_write_from_bin()
3275 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_write_from_bin()
3276 fru.access = rsp->data[2] & 0x1; in ipmi_fru_write_from_bin()
3308 /* ipmi_fru_write_help() - print help text for 'write'
3320 /* ipmi_fru_edit_help - print help text for 'fru edit' command
3328 "fru edit <fruid> field <section> <index> <string> - edit FRU string"); in ipmi_fru_edit_help()
3330 "fru edit <fruid> oem iana <record> <format> <args> - limited OEM support"); in ipmi_fru_edit_help()
3333 /* ipmi_fru_edit_multirec - Query new values to replace original FRU content
3383 rsp = intf->sendrecv(intf, &req); in ipmi_fru_edit_multirec()
3386 return -1; in ipmi_fru_edit_multirec()
3388 if (rsp->ccode > 0) { in ipmi_fru_edit_multirec()
3390 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_edit_multirec()
3391 return -1; in ipmi_fru_edit_multirec()
3395 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_edit_multirec()
3396 fru.access = rsp->data[2] & 0x1; in ipmi_fru_edit_multirec()
3403 return -1; in ipmi_fru_edit_multirec()
3422 return -1; in ipmi_fru_edit_multirec()
3430 if ((last_off < (i + sizeof(*h))) || (last_off < (i + h->len))) in ipmi_fru_edit_multirec()
3432 len = fru.size - last_off; in ipmi_fru_edit_multirec()
3441 if( h->type == FRU_RECORD_TYPE_OEM_EXTENSION ){ in ipmi_fru_edit_multirec()
3445 uint32_t iana = oh->mfg_id[0] | oh->mfg_id[1]<<8 | oh->mfg_id[2]<<16; in ipmi_fru_edit_multirec()
3480 h->len, h, oh )){ in ipmi_fru_edit_multirec()
3483 h->len+ sizeof(struct fru_multirec_header), fru_data); in ipmi_fru_edit_multirec()
3489 h->len, h, oh )){ in ipmi_fru_edit_multirec()
3492 h->len+ sizeof(struct fru_multirec_header), fru_data); in ipmi_fru_edit_multirec()
3503 i += h->len + sizeof (struct fru_multirec_header); in ipmi_fru_edit_multirec()
3504 } while (!(h->format & 0x80) && (error != 1)); in ipmi_fru_edit_multirec()
3512 /* ipmi_fru_get_help - print help text for 'fru get'
3520 "fru get <fruid> oem iana <record> <format> <args> - limited OEM support"); in ipmi_fru_get_help()
3527 "fru internaluse <fru id> info - get internal use area size"); in ipmi_fru_internaluse_help()
3529 "fru internaluse <fru id> print - print internal use area in hex"); in ipmi_fru_internaluse_help()
3531 "fru internaluse <fru id> read <fru file> - read internal use area to file"); in ipmi_fru_internaluse_help()
3533 "fru internaluse <fru id> write <fru file> - write internal use area from file"); in ipmi_fru_internaluse_help()
3536 /* ipmi_fru_get_multirec - Query new values to replace original FRU content
3586 rsp = intf->sendrecv(intf, &req); in ipmi_fru_get_multirec()
3589 return -1; in ipmi_fru_get_multirec()
3591 if (rsp->ccode > 0) { in ipmi_fru_get_multirec()
3593 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_get_multirec()
3594 return -1; in ipmi_fru_get_multirec()
3598 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_get_multirec()
3599 fru.access = rsp->data[2] & 0x1; in ipmi_fru_get_multirec()
3606 return -1; in ipmi_fru_get_multirec()
3624 return -1; in ipmi_fru_get_multirec()
3632 if ((last_off < (i + sizeof(*h))) || (last_off < (i + h->len))) in ipmi_fru_get_multirec()
3634 len = fru.size - last_off; in ipmi_fru_get_multirec()
3643 if( h->type == FRU_RECORD_TYPE_OEM_EXTENSION ){ in ipmi_fru_get_multirec()
3647 uint32_t iana = oh->mfg_id[0] | oh->mfg_id[1]<<8 | oh->mfg_id[2]<<16; in ipmi_fru_get_multirec()
3676 h->len, h, oh ); in ipmi_fru_get_multirec()
3686 i += h->len + sizeof (struct fru_multirec_header); in ipmi_fru_get_multirec()
3687 } while (!(h->format & 0x80) && (error != 1)); in ipmi_fru_get_multirec()
3708 return (-1); in ipmi_fru_upg_ekeying()
3713 return (-1); in ipmi_fru_upg_ekeying()
3720 return (-1); in ipmi_fru_upg_ekeying()
3725 return (-1); in ipmi_fru_upg_ekeying()
3734 return (-1); in ipmi_fru_upg_ekeying()
3742 return (-1); in ipmi_fru_upg_ekeying()
3751 return (-1); in ipmi_fru_upg_ekeying()
3761 /* ipmi_fru_upgekey_help - print help text for 'upgEkey'
3798 return -1; in ipmi_fru_get_multirec_size_from_file()
3803 return -1; in ipmi_fru_get_multirec_size_from_file()
3823 *pSize = end - (header.offset.multi * 8); in ipmi_fru_get_multirec_size_from_file()
3854 status = (-1); in ipmi_fru_get_adjust_size_from_buffer()
3856 printf("--> FAIL"); in ipmi_fru_get_adjust_size_from_buffer()
3859 printf("--> OK"); in ipmi_fru_get_adjust_size_from_buffer()
3862 for (counter = 0; counter < head->len; counter++) { in ipmi_fru_get_adjust_size_from_buffer()
3870 count += head->len + sizeof (struct fru_multirec_header); in ipmi_fru_get_adjust_size_from_buffer()
3871 } while ((!(head->format & 0x80)) && (status == 0)); in ipmi_fru_get_adjust_size_from_buffer()
3886 return (-1); in ipmi_fru_get_multirec_from_file()
3892 lprintf(LOG_ERR, "Error opening file '%s': %i -> %s.", pFileName, errno, in ipmi_fru_get_multirec_from_file()
3894 return (-1); in ipmi_fru_get_multirec_from_file()
3898 lprintf(LOG_ERR, "Failed to seek in file '%s': %i -> %s.", pFileName, errno, in ipmi_fru_get_multirec_from_file()
3901 return (-1); in ipmi_fru_get_multirec_from_file()
3908 return (-1); in ipmi_fru_get_multirec_from_file()
3936 rsp = intf->sendrecv(intf, &req); in ipmi_fru_get_multirec_location_from_fru()
3940 return -1; in ipmi_fru_get_multirec_location_from_fru()
3943 if (rsp->ccode > 0) { in ipmi_fru_get_multirec_location_from_fru()
3944 if (rsp->ccode == 0xc3) in ipmi_fru_get_multirec_location_from_fru()
3947 printf (" CCODE = 0x%02x\n", rsp->ccode); in ipmi_fru_get_multirec_location_from_fru()
3948 return -1; in ipmi_fru_get_multirec_location_from_fru()
3950 pFruInfo->size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_get_multirec_location_from_fru()
3951 pFruInfo->access = rsp->data[2] & 0x1; in ipmi_fru_get_multirec_location_from_fru()
3954 printf("pFruInfo->size = %d bytes (accessed by %s)\n", in ipmi_fru_get_multirec_location_from_fru()
3955 pFruInfo->size, pFruInfo->access ? "words" : "bytes"); in ipmi_fru_get_multirec_location_from_fru()
3957 if (!pFruInfo->size) in ipmi_fru_get_multirec_location_from_fru()
3958 return -1; in ipmi_fru_get_multirec_location_from_fru()
3971 rsp = intf->sendrecv(intf, &req); in ipmi_fru_get_multirec_location_from_fru()
3974 return -1; in ipmi_fru_get_multirec_location_from_fru()
3975 if (rsp->ccode > 0) { in ipmi_fru_get_multirec_location_from_fru()
3976 if (rsp->ccode == 0xc3) in ipmi_fru_get_multirec_location_from_fru()
3978 return -1; in ipmi_fru_get_multirec_location_from_fru()
3982 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in ipmi_fru_get_multirec_location_from_fru()
3984 memcpy(&header, rsp->data + 1, 8); in ipmi_fru_get_multirec_location_from_fru()
3988 return -1; in ipmi_fru_get_multirec_location_from_fru()
3991 end = pFruInfo->size; in ipmi_fru_get_multirec_location_from_fru()
4016 /* ipmi_fru_get_internal_use_offset - Retreive internal use offset
4021 * returns -1 on error
4056 rsp = intf->sendrecv(intf, &req); in ipmi_fru_get_internal_use_info()
4059 return -1; in ipmi_fru_get_internal_use_info()
4061 if (rsp->ccode > 0) { in ipmi_fru_get_internal_use_info()
4063 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_get_internal_use_info()
4064 return -1; in ipmi_fru_get_internal_use_info()
4068 fru->size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_get_internal_use_info()
4069 fru->access = rsp->data[2] & 0x1; in ipmi_fru_get_internal_use_info()
4072 fru->size, fru->access ? "words" : "bytes"); in ipmi_fru_get_internal_use_info()
4074 if (fru->size < 1) { in ipmi_fru_get_internal_use_info()
4075 lprintf(LOG_ERR, " Invalid FRU size %d", fru->size); in ipmi_fru_get_internal_use_info()
4076 return -1; in ipmi_fru_get_internal_use_info()
4093 rsp = intf->sendrecv(intf, &req); in ipmi_fru_get_internal_use_info()
4098 if (rsp->ccode > 0) { in ipmi_fru_get_internal_use_info()
4100 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_get_internal_use_info()
4105 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in ipmi_fru_get_internal_use_info()
4107 memcpy(&header, rsp->data + 1, 8); in ipmi_fru_get_internal_use_info()
4112 return -1; in ipmi_fru_get_internal_use_info()
4139 (* size) = ((header.offset.chassis*8)-(* offset)); in ipmi_fru_get_internal_use_info()
4143 (* size) = ((header.offset.board*8)-(* offset)); in ipmi_fru_get_internal_use_info()
4147 (* size) = ((header.offset.product*8)-(* offset)); in ipmi_fru_get_internal_use_info()
4151 (* size) = ((header.offset.multi*8)-(* offset)); in ipmi_fru_get_internal_use_info()
4155 (* size) = (fru->size - (* offset)); in ipmi_fru_get_internal_use_info()
4161 /* ipmi_fru_info_internal_use - print internal use info
4166 * returns -1 on error
4188 return -1; in ipmi_fru_info_internal_use()
4193 /* ipmi_fru_help - print help text for FRU subcommand
4204 /* ipmi_fru_read_internal_use - print internal use are in hex or file
4209 * returns -1 on error
4243 printf("\n%02i- ", (counter / 16)); in ipmi_fru_read_internal_use()
4261 return -1; in ipmi_fru_read_internal_use()
4280 /* ipmi_fru_write_internal_use - print internal use are in hex or file
4285 * returns -1 on error
4383 lprintf(LOG_NOTICE, "fru print [fru id] - print information about FRU(s)"); in ipmi_fru_main()
4388 return (-1); in ipmi_fru_main()
4402 return (-1); in ipmi_fru_main()
4406 return (-1); in ipmi_fru_main()
4410 return (-1); in ipmi_fru_main()
4416 /* TODO - rc is missing */ in ipmi_fru_main()
4426 return (-1); in ipmi_fru_main()
4430 return (-1); in ipmi_fru_main()
4434 return (-1); in ipmi_fru_main()
4440 /* TODO - rc is missing */ in ipmi_fru_main()
4450 return (-1); in ipmi_fru_main()
4454 return (-1); in ipmi_fru_main()
4458 return (-1); in ipmi_fru_main()
4471 return (-1); in ipmi_fru_main()
4478 return (-1); in ipmi_fru_main()
4485 return (-1); in ipmi_fru_main()
4489 return (-1); in ipmi_fru_main()
4499 return (-1); in ipmi_fru_main()
4503 return (-1); in ipmi_fru_main()
4513 return (-1); in ipmi_fru_main()
4523 return (-1); in ipmi_fru_main()
4528 return (-1); in ipmi_fru_main()
4542 return (-1); in ipmi_fru_main()
4551 return (-1); in ipmi_fru_main()
4564 return (-1); in ipmi_fru_main()
4569 return (-1); in ipmi_fru_main()
4584 return (-1); in ipmi_fru_main()
4593 return (-1); in ipmi_fru_main()
4599 /* ipmi_fru_set_field_string - Set a field string to a new value, Need to be the same size. If
4609 * returns -1 on error
4639 rsp = intf->sendrecv(intf, &req); in ipmi_fru_set_field_string()
4642 rc = (-1); in ipmi_fru_set_field_string()
4645 if (rsp->ccode > 0) { in ipmi_fru_set_field_string()
4647 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_set_field_string()
4648 rc = (-1); in ipmi_fru_set_field_string()
4653 fru.size = (rsp->data[1] << 8) | rsp->data[0]; in ipmi_fru_set_field_string()
4654 fru.access = rsp->data[2] & 0x1; in ipmi_fru_set_field_string()
4658 rc = (-1); in ipmi_fru_set_field_string()
4675 rsp = intf->sendrecv(intf, &req); in ipmi_fru_set_field_string()
4679 rc = (-1); in ipmi_fru_set_field_string()
4682 if (rsp->ccode > 0) in ipmi_fru_set_field_string()
4685 val2str(rsp->ccode, completion_code_vals)); in ipmi_fru_set_field_string()
4686 rc = (-1); in ipmi_fru_set_field_string()
4691 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in ipmi_fru_set_field_string()
4693 memcpy(&header, rsp->data + 1, 8); in ipmi_fru_set_field_string()
4699 rc = (-1); in ipmi_fru_set_field_string()
4708 rc = (-1); in ipmi_fru_set_field_string()
4738 rc = (-1); in ipmi_fru_set_field_string()
4745 rc = (-1); in ipmi_fru_set_field_string()
4749 f_index= f_index - 0x30; in ipmi_fru_set_field_string()
4763 rc = (-1); in ipmi_fru_set_field_string()
4776 + fru_section_len - 1; i ++ ) in ipmi_fru_set_field_string()
4781 fru_data[header_offset + fru_section_len - 1] = checksum; in ipmi_fru_set_field_string()
4788 rc = (-1); in ipmi_fru_set_field_string()
4798 rc = (-1); in ipmi_fru_set_field_string()
4823 /* ipmi_fru_set_field_string_rebuild - Set a field string to a new value, When size are not
4828 * - Chassis
4829 * - Product
4830 * - Board
4840 * returns -1 on error
4870 rc = (-1); in ipmi_fru_set_field_string_rebuild()
4925 rc = (-1); in ipmi_fru_set_field_string_rebuild()
4945 rc = (-1); in ipmi_fru_set_field_string_rebuild()
4957 if(*(fru_data_old + (header_offset + fru_section_len - counter)) == 0) in ipmi_fru_set_field_string_rebuild()
4962 num_byte_change = strlen(f_string) - strlen(fru_area); in ipmi_fru_set_field_string_rebuild()
4971 …printf("End Sec wo Pad: %x\n", *(fru_data_old + header_offset + fru_section_len - 2 - padding_len)… in ipmi_fru_set_field_string_rebuild()
4972 printf("End Section : %x\n", *(fru_data_old + header_offset + fru_section_len - 1)); in ipmi_fru_set_field_string_rebuild()
4976 padding_len -= num_byte_change; in ipmi_fru_set_field_string_rebuild()
4992 change_size_by_8 = ((padding_len) / 8) * (-1); in ipmi_fru_set_field_string_rebuild()
4997 change_size_by_8 = 1 + (((padding_len+1) / 8) * (-1)); in ipmi_fru_set_field_string_rebuild()
5065 for(counter = 0; counter < (sizeof(struct fru_header) -1); counter ++) in ipmi_fru_set_field_string_rebuild()
5069 header.checksum = (0 - header.checksum); in ipmi_fru_set_field_string_rebuild()
5074 printf("Moving Remaining Bytes (Multi-Rec , etc..), from %i to %i\n", in ipmi_fru_set_field_string_rebuild()
5078 if(((header.offset.product * 8) + product_len_new - remaining_offset) < 0) in ipmi_fru_set_field_string_rebuild()
5083 fru.size - remaining_offset in ipmi_fru_set_field_string_rebuild()
5091 fru.size - ((header.offset.product * 8) + product_len_new) in ipmi_fru_set_field_string_rebuild()
5116 (int)((fru_data_old + header_offset + fru_section_len - 1) - in ipmi_fru_set_field_string_rebuild()
5124 ((fru_data_old + header_offset + fru_section_len - 1) - in ipmi_fru_set_field_string_rebuild()
5130 *(fru_data_new + header_offset + fru_section_len - 1 - in ipmi_fru_set_field_string_rebuild()
5136 for( counter = 0; counter <fru_section_len-1; counter ++ ) in ipmi_fru_set_field_string_rebuild()
5140 *(fru_data_new + header_offset + fru_section_len - 1) = (0 - cksum); in ipmi_fru_set_field_string_rebuild()
5143 printf("Calculate New Checksum: %x\n", (0 - cksum)); in ipmi_fru_set_field_string_rebuild()
5174 rc = (-1); in ipmi_fru_set_field_string_rebuild()
5184 rc = (-1); in ipmi_fru_set_field_string_rebuild()