Lines Matching full:fru

71 											struct fru_info fru, struct fru_header header,
75 fru_area_print_multirec_bloc(struct ipmi_intf * intf, struct fru_info * fru,
78 read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
82 /* get_fru_area_str - Parse FRU area string from raw data
84 * @data: raw FRU data
87 * returns pointer to FRU area string
215 /* build_fru_bloc - build fru bloc for write protection
218 * @fru_info: information about FRU device
219 * @id : Fru id
230 build_fru_bloc(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id) in build_fru_bloc() argument
269 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in build_fru_bloc()
281 lprintf(LOG_ERR, " Unknown FRU header version 0x%02x", header.version); in build_fru_bloc()
299 p_bloc->size = fru->size; in build_fru_bloc()
313 p_new->size = fru->size - p_new->start; in build_fru_bloc()
331 * check for odd offset for the case of fru devices in build_fru_bloc()
334 if (fru->access && (off & 1)) { in build_fru_bloc()
341 if (read_fru_area(intf, fru, id, off, 5, in build_fru_bloc()
355 p_new->size = fru->size - p_new->start; in build_fru_bloc()
371 } while (!(rec_hdr.format & 0x80) && (off < fru->size)); in build_fru_bloc()
375 if (fru->size > off) { in build_fru_bloc()
386 p_new->size = fru->size - p_new->start; in build_fru_bloc()
420 * write FRU[doffset:length] from the pFrubuf[soffset:length]
424 write_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, in write_fru_area() argument
436 if (finish > fru->size) in write_fru_area()
442 if (fru->access && ((doffset & 1) || (length & 1))) { in write_fru_area()
447 t_ipmi_fru_bloc * fru_bloc = build_fru_bloc(intf, fru, id); in write_fru_area()
456 if (fru->max_write_size == 0) { in write_fru_area()
467 * Write FRU Info command returns the number of written bytes in in write_fru_area()
472 fru->max_write_size = 255; in write_fru_area()
474 /* subtract 1 byte for FRU ID an 2 bytes for offset */ 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()
504 if (tmp > fru->max_write_size) { in write_fru_area()
505 writeLength = fru->max_write_size; in write_fru_area()
510 /* copy fru data */ in write_fru_area()
514 if (fru->access) { in write_fru_area()
519 if (fru->access) { 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()
543 lprintf(LOG_INFO, "Retrying FRU write with request size %d", in write_fru_area()
544 fru->max_write_size); in write_fru_area()
570 "Remaining FRU is protected following offset: %i", in write_fru_area()
585 /* read_fru_area - fill in frubuf[offset:length] from the FRU[offset:length]
588 * @fru: fru info
589 * @id: fru id
598 read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, in read_fru_area() argument
606 if (offset > fru->size) { in read_fru_area()
607 lprintf(LOG_ERR, "Read FRU Area offset incorrect: %d > %d", in read_fru_area()
608 offset, fru->size); in read_fru_area()
613 if (finish > fru->size) { in read_fru_area()
614 finish = fru->size; in read_fru_area()
615 lprintf(LOG_NOTICE, "Read FRU Area length %d too large, " in read_fru_area()
626 if (fru->max_read_size == 0) { in read_fru_area()
637 * Read FRU Info command may read up to 255 bytes of data. 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()
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()
666 lprintf(LOG_NOTICE, "FRU Read failed"); 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()
682 lprintf(LOG_INFO, "Retrying FRU read with request size %d", in read_fru_area()
683 fru->max_read_size); in read_fru_area()
687 lprintf(LOG_NOTICE, "FRU Read failed: %s", in read_fru_area()
692 tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; in read_fru_area()
711 /* read_fru_area - fill in frubuf[offset:length] from the FRU[offset:length]
714 * @fru: fru info
715 * @id: fru id
724 read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id, in read_fru_area_section() argument
733 if (offset > fru->size) { in read_fru_area_section()
734 lprintf(LOG_ERR, "Read FRU Area offset incorrect: %d > %d", in read_fru_area_section()
735 offset, fru->size); in read_fru_area_section()
740 if (finish > fru->size) { in read_fru_area_section()
741 finish = fru->size; in read_fru_area_section()
742 lprintf(LOG_NOTICE, "Read FRU Area length %d too large, " 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()
772 lprintf(LOG_NOTICE, "FRU Read failed"); in read_fru_area_section()
780 lprintf(LOG_INFO, "Retrying FRU read with request size %d", in read_fru_area_section()
784 lprintf(LOG_NOTICE, "FRU Read failed: %s", in read_fru_area_section()
789 tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0]; in read_fru_area_section()
809 fru_area_print_multirec_bloc(struct ipmi_intf * intf, struct fru_info * fru, in fru_area_print_multirec_bloc() argument
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()
834 len = fru->size - last_off; in fru_area_print_multirec_bloc()
838 if (read_fru_area(intf, fru, id, last_off, len, fru_data) < 0) in fru_area_print_multirec_bloc()
870 /* fru_area_print_chassis - Print FRU Chassis Area
873 * @fru: fru info
874 * @id: fru id
878 fru_area_print_chassis(struct ipmi_intf * intf, struct fru_info * fru, in fru_area_print_chassis() argument
889 if (read_fru_area(intf, fru, id, offset, 2, tmp) == 0) { in fru_area_print_chassis()
905 /* read in the full fru */ in fru_area_print_chassis()
906 if (read_fru_area(intf, fru, id, offset, fru_len, fru_data) < 0) { in fru_area_print_chassis()
914 * fru area version and fru area length in fru_area_print_chassis()
967 /* fru_area_print_board - Print FRU Board Area
970 * @fru: fru info
971 * @id: fru id
975 fru_area_print_board(struct ipmi_intf * intf, struct fru_info * fru, in fru_area_print_board() argument
988 if (read_fru_area(intf, fru, id, offset, 2, tmp) == 0) { in fru_area_print_board()
1004 /* read in the full fru */ in fru_area_print_board()
1005 if (read_fru_area(intf, fru, id, offset, fru_len, fru_data) < 0) { in fru_area_print_board()
1013 * fru area version, fru area length in fru_area_print_board()
1014 * and fru board language in fru_area_print_board()
1063 printf(" Board FRU ID : %s\n", fru_area); in fru_area_print_board()
1091 /* fru_area_print_product - Print FRU Product Area
1094 * @fru: fru info
1095 * @id: fru id
1099 fru_area_print_product(struct ipmi_intf * intf, struct fru_info * fru, in fru_area_print_product() argument
1110 if (read_fru_area(intf, fru, id, offset, 2, tmp) == 0) { in fru_area_print_product()
1127 /* read in the full fru */ in fru_area_print_product()
1128 if (read_fru_area(intf, fru, id, offset, fru_len, fru_data) < 0) { in fru_area_print_product()
1136 * fru area version, fru area length in fru_area_print_product()
1137 * and fru board language in fru_area_print_product()
1198 printf(" Product FRU ID : %s\n", fru_area); in fru_area_print_product()
1226 /* fru_area_print_multirec - Print FRU Multi Record Area
1229 * @fru: fru info
1230 * @id: fru id
1234 fru_area_print_multirec(struct ipmi_intf * intf, struct fru_info * fru, in fru_area_print_multirec() argument
1259 if (read_fru_area(intf, fru, id, last_off, sizeof(*h), fru_data) < 0) { in fru_area_print_multirec()
1263 if (h->len && read_fru_area(intf, fru, id, in fru_area_print_multirec()
1418 /* ipmi_fru_query_new_value - Query new values to replace original FRU content
1420 * @data: FRU data
1472 * Query new values to replace original FRU content
1484 * the record format information, all commands are really standard 'FRU' command
1487 * @data: FRU data
1501 ./src/ipmitool fru edit 0
1555 ./src/ipmitool fru get 0 oem iana 3
1573 printf("usage: fru get <id> <oem>\n"); in ipmi_fru_oemkontron_get()
1696 printf("usage: fru edit <id> <oem> <args...>\n"); in ipmi_fru_oemkontron_edit()
1887 /* ipmi_fru_picmg_ext_edit - Query new values to replace original FRU content
1889 * @data: FRU data
2003 /* ipmi_fru_picmg_ext_print - prints OEM fru record (PICMG)
2005 * @fru_data: FRU data
2107 "Shelf FRU Information", in ipmi_fru_picmg_ext_print()
2201 " FRU HW Addr: 0x%02x (0x%02x)", in ipmi_fru_picmg_ext_print()
2204 " FRU ID: 0x%02x\n", in ipmi_fru_picmg_ext_print()
2218 " Allowance for FRU Act Readiness: 0x%02x\n", in ipmi_fru_picmg_ext_print()
2223 " FRU activation and Power Desc Cnt: 0x%02x\n", in ipmi_fru_picmg_ext_print()
2229 printf(" FRU ID: 0x%02x ", in ipmi_fru_picmg_ext_print()
2231 printf(" Max FRU Power: 0x%04x ", in ipmi_fru_picmg_ext_print()
2827 /* __ipmi_fru_print - Do actual work to print a FRU by its ID
2830 * @id: fru id
2841 struct fru_info fru; in __ipmi_fru_print() local
2845 memset(&fru, 0, sizeof(struct fru_info)); in __ipmi_fru_print()
2849 * get info about this FRU in __ipmi_fru_print()
2871 memset(&fru, 0, sizeof(fru)); 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()
2875 lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)", in __ipmi_fru_print()
2876 fru.size, fru.access ? "words" : "bytes"); in __ipmi_fru_print()
2878 if (fru.size < 1) { in __ipmi_fru_print()
2879 lprintf(LOG_ERR, " Invalid FRU size %d", fru.size); in __ipmi_fru_print()
2884 * retrieve the FRU header in __ipmi_fru_print()
2909 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in __ipmi_fru_print()
2914 lprintf(LOG_ERR, " Unknown FRU header version 0x%02x", in __ipmi_fru_print()
2924 lprintf(LOG_DEBUG, "fru.header.version: 0x%x", in __ipmi_fru_print()
2926 lprintf(LOG_DEBUG, "fru.header.offset.internal: 0x%x", in __ipmi_fru_print()
2928 lprintf(LOG_DEBUG, "fru.header.offset.chassis: 0x%x", in __ipmi_fru_print()
2930 lprintf(LOG_DEBUG, "fru.header.offset.board: 0x%x", in __ipmi_fru_print()
2932 lprintf(LOG_DEBUG, "fru.header.offset.product: 0x%x", in __ipmi_fru_print()
2934 lprintf(LOG_DEBUG, "fru.header.offset.multi: 0x%x", in __ipmi_fru_print()
2943 fru_area_print_chassis(intf, &fru, id, header.offset.chassis*8); in __ipmi_fru_print()
2947 fru_area_print_board(intf, &fru, id, header.offset.board*8); in __ipmi_fru_print()
2951 fru_area_print_product(intf, &fru, id, header.offset.product*8); in __ipmi_fru_print()
2958 fru_area_print_multirec(intf, &fru, id, header.offset.multi*8); in __ipmi_fru_print()
2963 /* ipmi_fru_print - Print a FRU from its SDR locator record
2966 * @fru: SDR FRU Locator Record
2971 ipmi_fru_print(struct ipmi_intf * intf, struct sdr_record_fru_locator * fru) in ipmi_fru_print() argument
2979 if (fru == NULL) in ipmi_fru_print()
2982 /* Logical FRU Device in ipmi_fru_print()
2985 * 0x00 = IPMI FRU Inventory in ipmi_fru_print()
2987 * 0x02 = IPMI FRU Inventory in ipmi_fru_print()
2988 * 0x03 = System Processor FRU in ipmi_fru_print()
2996 * 0x02 = IPMI FRU Inventory in ipmi_fru_print()
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()
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()
3020 intf->target_addr = fru->dev_slave_addr; in ipmi_fru_print()
3022 intf->target_channel = fru->channel_num; in ipmi_fru_print()
3024 /* print FRU */ in ipmi_fru_print()
3025 rc = __ipmi_fru_print(intf, fru->device_id); 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
3059 struct sdr_record_fru_locator * fru; in ipmi_fru_print_all() local
3067 printf("FRU Device Description : Builtin FRU Device (ID 0)\n"); in ipmi_fru_print_all()
3068 /* TODO: Figure out if FRU device 0 may show up in SDR records. */ in ipmi_fru_print_all()
3089 /* Check the FRU inventory device bit to decide whether various */ in ipmi_fru_print_all()
3090 /* FRU commands can be issued to FRU device #0 LUN 0 */ in ipmi_fru_print_all()
3092 if (devid->adtl_device_support & 0x08) { /* FRU Inventory Device bit? */ in ipmi_fru_print_all()
3100 /* Walk the SDRs looking for FRU Devices and Management Controller Devices. */ in ipmi_fru_print_all()
3101 /* For FRU devices, print the FRU from the SDR locator record. */ in ipmi_fru_print_all()
3102 /* For MC devices, issue FRU commands to the satellite controller to print */ in ipmi_fru_print_all()
3103 /* FRU data. */ in ipmi_fru_print_all()
3110 /* Does this MC device support FRU inventory device? */ in ipmi_fru_print_all()
3111 if (mc && (mc->dev_support & 0x08) && /* FRU inventory device? */ in ipmi_fru_print_all()
3113 /* Yes. Prepare to issue FRU commands to FRU device #0 LUN 0 */ in ipmi_fru_print_all()
3122 printf("FRU Device Description : %-16s\n", mc->id_string); in ipmi_fru_print_all()
3124 /* print the FRU by issuing FRU commands to the satellite */ in ipmi_fru_print_all()
3145 /* Print the FRU from the SDR locator record. */ in ipmi_fru_print_all()
3146 fru = (struct sdr_record_fru_locator *) in ipmi_fru_print_all()
3148 if (fru == NULL || !fru->logical) { in ipmi_fru_print_all()
3149 if (fru) { in ipmi_fru_print_all()
3150 free(fru); in ipmi_fru_print_all()
3151 fru = NULL; in ipmi_fru_print_all()
3155 rc = ipmi_fru_print(intf, fru); in ipmi_fru_print_all()
3156 free(fru); in ipmi_fru_print_all()
3157 fru = NULL; in ipmi_fru_print_all()
3172 lprintf(LOG_NOTICE, "fru read <fru id> <fru file>"); in ipmi_fru_read_help()
3173 lprintf(LOG_NOTICE, "Note: FRU ID and file(incl. full path) must be specified."); in ipmi_fru_read_help()
3174 lprintf(LOG_NOTICE, "Example: ipmitool fru read 0 /root/fru.bin"); in ipmi_fru_read_help()
3184 struct fru_info fru; in ipmi_fru_read_to_bin() local
3202 printf (" Timeout accessing FRU info. (Device not present?)\n"); in ipmi_fru_read_to_bin()
3206 memset(&fru, 0, sizeof(fru)); 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()
3211 printf("Fru Size = %d bytes\n",fru.size); in ipmi_fru_read_to_bin()
3212 printf("Fru Access = %xh\n", fru.access); in ipmi_fru_read_to_bin()
3215 pFruBuf = malloc(fru.size); in ipmi_fru_read_to_bin()
3217 printf("Fru Size : %d bytes\n",fru.size); in ipmi_fru_read_to_bin()
3218 read_fru_area(intf, &fru, fruId, 0, fru.size, pFruBuf); in ipmi_fru_read_to_bin()
3220 lprintf(LOG_ERR, "Cannot allocate %d bytes\n", fru.size); in ipmi_fru_read_to_bin()
3229 fwrite(pFruBuf, fru.size, 1, pFile); in ipmi_fru_read_to_bin()
3250 struct fru_info fru; in ipmi_fru_write_from_bin() local
3270 printf(" Timeout accessing FRU info. (Device not present?)\n"); in ipmi_fru_write_from_bin()
3274 memset(&fru, 0, sizeof(fru)); 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()
3279 printf("Fru Size = %d bytes\n", fru.size); in ipmi_fru_write_from_bin()
3280 printf("Fru Access = %xh\n", fru.access); in ipmi_fru_write_from_bin()
3283 pFruBuf = malloc(fru.size); in ipmi_fru_write_from_bin()
3285 lprintf(LOG_ERR, "Cannot allocate %d bytes\n", fru.size); in ipmi_fru_write_from_bin()
3291 len = fread(pFruBuf, 1, fru.size, pFile); in ipmi_fru_write_from_bin()
3292 printf("Fru Size : %d bytes\n", fru.size); in ipmi_fru_write_from_bin()
3300 write_fru_area(intf, &fru, fruId,0, 0, len, pFruBuf); in ipmi_fru_write_from_bin()
3315 lprintf(LOG_NOTICE, "fru write <fru id> <fru file>"); in ipmi_fru_write_help()
3316 lprintf(LOG_NOTICE, "Note: FRU ID and file(incl. full path) must be specified."); in ipmi_fru_write_help()
3317 lprintf(LOG_NOTICE, "Example: ipmitool fru write 0 /root/fru.bin"); in ipmi_fru_write_help()
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
3336 * @id: FRU id to work on
3349 struct fru_info fru; in ipmi_fru_edit_multirec() local
3362 lprintf(LOG_DEBUG, "FRU Size : %lu\n", fruMultiRecSize); in ipmi_fru_edit_multirec()
3368 memset(&fru, 0, sizeof(struct fru_info)); in ipmi_fru_edit_multirec()
3372 * get info about this FRU in ipmi_fru_edit_multirec()
3394 memset(&fru, 0, sizeof(fru)); 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()
3398 lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)", in ipmi_fru_edit_multirec()
3399 fru.size, fru.access ? "words" : "bytes"); in ipmi_fru_edit_multirec()
3401 if (fru.size < 1) { in ipmi_fru_edit_multirec()
3402 lprintf(LOG_ERR, " Invalid FRU size %d", fru.size); in ipmi_fru_edit_multirec()
3418 memset(&fru, 0, sizeof(fru)); in ipmi_fru_edit_multirec()
3419 fru_data = malloc(fru.size + 1); in ipmi_fru_edit_multirec()
3424 memset(fru_data, 0, fru.size + 1); in ipmi_fru_edit_multirec()
3432 len = fru.size - last_off; in ipmi_fru_edit_multirec()
3436 if (read_fru_area(intf, &fru, id, last_off, len, fru_data) < 0) in ipmi_fru_edit_multirec()
3481 /* The fru changed */ in ipmi_fru_edit_multirec()
3482 write_fru_area(intf,&fru,id, i,i, in ipmi_fru_edit_multirec()
3490 /* The fru changed */ in ipmi_fru_edit_multirec()
3491 write_fru_area(intf,&fru,id, i,i, 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
3539 * @id: FRU id to work on
3552 struct fru_info fru; in ipmi_fru_get_multirec() local
3565 lprintf(LOG_DEBUG, "FRU Size : %lu\n", fruMultiRecSize); in ipmi_fru_get_multirec()
3571 memset(&fru, 0, sizeof(struct fru_info)); in ipmi_fru_get_multirec()
3575 * get info about this FRU in ipmi_fru_get_multirec()
3597 memset(&fru, 0, sizeof(fru)); 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()
3601 lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)", in ipmi_fru_get_multirec()
3602 fru.size, fru.access ? "words" : "bytes"); in ipmi_fru_get_multirec()
3604 if (fru.size < 1) { in ipmi_fru_get_multirec()
3605 lprintf(LOG_ERR, " Invalid FRU size %d", fru.size); in ipmi_fru_get_multirec()
3621 fru_data = malloc(fru.size + 1); in ipmi_fru_get_multirec()
3626 memset(fru_data, 0, fru.size + 1); in ipmi_fru_get_multirec()
3634 len = fru.size - last_off; in ipmi_fru_get_multirec()
3638 if (read_fru_area(intf, &fru, id, last_off, len, fru_data) < 0) in ipmi_fru_get_multirec()
3712 lprintf(LOG_ERR, "Failed to get multirec location from FRU."); in ipmi_fru_upg_ekeying()
3715 lprintf(LOG_DEBUG, "FRU Size : %lu\n", fruMultiRecSize); in ipmi_fru_upg_ekeying()
3746 lprintf(LOG_ERR, "Failed to write FRU area."); in ipmi_fru_upg_ekeying()
3768 lprintf(LOG_NOTICE, "fru upgEkey <fru id> <fru file>"); in ipmi_fru_upgekey_help()
3769 lprintf(LOG_NOTICE, "Note: FRU ID and file(incl. full path) must be specified."); in ipmi_fru_upgekey_help()
3770 lprintf(LOG_NOTICE, "Example: ipmitool fru upgEkey 0 /root/fru.bin"); in ipmi_fru_upgekey_help()
3802 printf ("Unknown FRU header version %02x.\n", header.version); in ipmi_fru_get_multirec_size_from_file()
3945 printf (" Timeout accessing FRU info. (Device not present?)\n"); in ipmi_fru_get_multirec_location_from_fru()
3977 printf (" Timeout while reading FRU data. (Device not present?)\n"); 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()
3987 printf (" Unknown FRU header version %02x.\n", header.version); in ipmi_fru_get_multirec_location_from_fru()
4019 * @id: fru id
4028 struct fru_info * fru, in ipmi_fru_get_internal_use_info() argument
4041 memset(fru, 0, sizeof(struct fru_info)); in ipmi_fru_get_internal_use_info()
4045 * get info about this FRU in ipmi_fru_get_internal_use_info()
4067 memset(&fru, 0, sizeof(fru)); 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()
4071 lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)", 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()
4080 * retrieve the FRU header in ipmi_fru_get_internal_use_info()
4105 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in ipmi_fru_get_internal_use_info()
4110 lprintf(LOG_ERR, " Unknown FRU header version 0x%02x", in ipmi_fru_get_internal_use_info()
4115 lprintf(LOG_DEBUG, "fru.header.version: 0x%x", in ipmi_fru_get_internal_use_info()
4117 lprintf(LOG_DEBUG, "fru.header.offset.internal: 0x%x", in ipmi_fru_get_internal_use_info()
4119 lprintf(LOG_DEBUG, "fru.header.offset.chassis: 0x%x", in ipmi_fru_get_internal_use_info()
4121 lprintf(LOG_DEBUG, "fru.header.offset.board: 0x%x", in ipmi_fru_get_internal_use_info()
4123 lprintf(LOG_DEBUG, "fru.header.offset.product: 0x%x", in ipmi_fru_get_internal_use_info()
4125 lprintf(LOG_DEBUG, "fru.header.offset.multi: 0x%x", in ipmi_fru_get_internal_use_info()
4155 (* size) = (fru->size - (* offset)); in ipmi_fru_get_internal_use_info()
4164 * @id: fru id
4173 struct fru_info fru; in ipmi_fru_info_internal_use() local
4178 rc = ipmi_fru_get_internal_use_info(intf, id, &fru, &size, &offset); in ipmi_fru_info_internal_use()
4193 /* ipmi_fru_help - print help text for FRU subcommand
4201 "FRU Commands: print read write upgEkey edit internaluse get"); in ipmi_fru_help()
4207 * @id: fru id
4216 struct fru_info fru; in ipmi_fru_read_internal_use() local
4221 rc = ipmi_fru_get_internal_use_info(intf, id, &fru, &size, &offset); in ipmi_fru_read_internal_use()
4233 rc = read_fru_area_section(intf, &fru, id, offset, size, frubuf); in ipmi_fru_read_internal_use()
4283 * @id: fru id
4292 struct fru_info fru; in ipmi_fru_write_internal_use() local
4297 rc = ipmi_fru_get_internal_use_info(intf, id, &fru, &size, &offset); in ipmi_fru_write_internal_use()
4340 rc = write_fru_area(intf, &fru, id, 0, offset, size, frubuf); in ipmi_fru_write_internal_use()
4383 lprintf(LOG_NOTICE, "fru print [fru id] - print information about FRU(s)"); in ipmi_fru_main()
4413 printf("FRU ID : %d\n", fru_id); in ipmi_fru_main()
4414 printf("FRU File : %s\n", argv[2]); in ipmi_fru_main()
4437 printf("FRU ID : %d\n", fru_id); in ipmi_fru_main()
4438 printf("FRU File : %s\n", argv[2]); in ipmi_fru_main()
4491 lprintf(LOG_DEBUG, "FRU ID : %d", fru_id); in ipmi_fru_main()
4492 lprintf(LOG_DEBUG, "FRU File : %s", argv[3]); in ipmi_fru_main()
4505 lprintf(LOG_DEBUG, "FRU ID : %d", fru_id); in ipmi_fru_main()
4506 lprintf(LOG_DEBUG, "FRU File : %s", argv[3]); in ipmi_fru_main()
4531 printf("FRU ID : %d\n", fru_id); in ipmi_fru_main()
4534 printf("Using default FRU ID: %d\n", fru_id); in ipmi_fru_main()
4572 printf("FRU ID : %d\n", fru_id); in ipmi_fru_main()
4575 printf("Using default FRU ID: %d\n", fru_id); in ipmi_fru_main()
4591 lprintf(LOG_ERR, "Invalid FRU command: %s", argv[0]); in ipmi_fru_main()
4604 * @id: fru id
4619 struct fru_info fru; in ipmi_fru_set_field_string() local
4652 memset(&fru, 0, sizeof(fru)); 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()
4656 if (fru.size < 1) { in ipmi_fru_set_field_string()
4657 printf(" Invalid FRU size %d", fru.size); in ipmi_fru_set_field_string()
4662 * retrieve the FRU header in ipmi_fru_set_field_string()
4691 printbuf(rsp->data, rsp->data_len, "FRU DATA"); in ipmi_fru_set_field_string()
4697 printf(" Unknown FRU header version 0x%02x", in ipmi_fru_set_field_string()
4703 fru_data = malloc( fru.size ); in ipmi_fru_set_field_string()
4717 read_fru_area(intf ,&fru, fruId, header_offset , 3 , fru_data); in ipmi_fru_set_field_string()
4724 read_fru_area(intf ,&fru, fruId, header_offset , 3 , fru_data); in ipmi_fru_set_field_string()
4731 read_fru_area(intf ,&fru, fruId, header_offset , 3 , fru_data); in ipmi_fru_set_field_string()
4741 memset(fru_data, 0, fru.size); in ipmi_fru_set_field_string()
4742 if( read_fru_area(intf ,&fru, fruId, header_offset , in ipmi_fru_set_field_string()
4783 /* Write the updated section to the FRU data; source offset => 0 */ in ipmi_fru_set_field_string()
4784 if( write_fru_area(intf, &fru, fruId, 0, in ipmi_fru_set_field_string()
4787 printf("Write to FRU data failed.\n"); in ipmi_fru_set_field_string()
4793 printf("String size are not equal, resizing fru to fit new string\n"); in ipmi_fru_set_field_string()
4795 ipmi_fru_set_field_string_rebuild(intf,fruId,fru,header,f_type,f_index,f_string) in ipmi_fru_set_field_string()
4833 * @fruId: fru id
4834 * @fru: info about fru
4835 * @header: contain the header of the FRU
4847 struct fru_info fru, struct fru_header header, in ipmi_fru_set_field_string_rebuild() argument
4863 fru_data_old = calloc( fru.size, sizeof(uint8_t) ); in ipmi_fru_set_field_string_rebuild()
4865 fru_data_new = malloc( fru.size ); in ipmi_fru_set_field_string_rebuild()
4875 1) Read ALL FRU */ in ipmi_fru_set_field_string_rebuild()
4876 printf("Read All FRU area\n"); in ipmi_fru_set_field_string_rebuild()
4877 printf("Fru Size : %u bytes\n", fru.size); in ipmi_fru_set_field_string_rebuild()
4879 /* Read current fru data */ in ipmi_fru_set_field_string_rebuild()
4880 read_fru_area(intf ,&fru, fruId, 0, fru.size , fru_data_old); in ipmi_fru_set_field_string_rebuild()
4883 printf("Copy to new FRU\n"); in ipmi_fru_set_field_string_rebuild()
4887 2) Copy all FRU to new FRU */ in ipmi_fru_set_field_string_rebuild()
4888 memcpy(fru_data_new, fru_data_old, fru.size); 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()
5179 7) Finally, write new FRU */ in ipmi_fru_set_field_string_rebuild()
5180 printf("Writing new FRU.\n"); in ipmi_fru_set_field_string_rebuild()
5181 if( write_fru_area( intf, &fru, fruId, 0, 0, fru.size, fru_data_new ) < 0 ) in ipmi_fru_set_field_string_rebuild()
5183 printf("Write to FRU data failed.\n"); in ipmi_fru_set_field_string_rebuild()