1 #ifndef __IPMI_WRITE_FRU_DATA_H__ 2 #define __IPMI_WRITE_FRU_DATA_H__ 3 4 #include <stddef.h> 5 #include <stdint.h> 6 #include <systemd/sd-bus.h> 7 8 #ifndef __cplusplus 9 #include <stdbool.h> // For bool variable 10 #endif 11 12 // IPMI commands for Storage net functions. 13 enum ipmi_netfn_storage_cmds 14 { 15 IPMI_CMD_WRITE_FRU_DATA = 0x12 16 }; 17 18 // Format of write fru data command 19 struct write_fru_data_t 20 { 21 uint8_t frunum; 22 uint8_t offsetls; 23 uint8_t offsetms; 24 uint8_t data; 25 } __attribute__((packed)); 26 27 // Per IPMI v2.0 FRU specification 28 struct common_header 29 { 30 uint8_t fixed; 31 uint8_t internal_offset; 32 uint8_t chassis_offset; 33 uint8_t board_offset; 34 uint8_t product_offset; 35 uint8_t multi_offset; 36 uint8_t pad; 37 uint8_t crc; 38 } __attribute__((packed)); 39 40 // first byte in header is 1h per IPMI V2 spec. 41 #define IPMI_FRU_HDR_BYTE_ZERO 1 42 #define IPMI_FRU_INTERNAL_OFFSET offsetof(struct common_header, internal_offset) 43 #define IPMI_FRU_CHASSIS_OFFSET offsetof(struct common_header, chassis_offset) 44 #define IPMI_FRU_BOARD_OFFSET offsetof(struct common_header, board_offset) 45 #define IPMI_FRU_PRODUCT_OFFSET offsetof(struct common_header, product_offset) 46 #define IPMI_FRU_MULTI_OFFSET offsetof(struct common_header, multi_offset) 47 #define IPMI_FRU_HDR_CRC_OFFSET offsetof(struct common_header, crc) 48 #define IPMI_EIGHT_BYTES 8 49 50 #ifdef __cplusplus 51 extern "C" { 52 #endif 53 54 int ipmi_validate_fru_area(const uint8_t, const char*, sd_bus*, const bool); 55 56 #ifdef __cplusplus 57 } // extern C 58 #endif 59 #endif 60