1*4a053c8eSAlexander Hansen #include <inttypes.h> 2*4a053c8eSAlexander Hansen #include <unistd.h> 3*4a053c8eSAlexander Hansen 4*4a053c8eSAlexander Hansen #include <cstring> 5*4a053c8eSAlexander Hansen 6*4a053c8eSAlexander Hansen /* 7*4a053c8eSAlexander Hansen * componentLocationOffsetIndex is for backfilling by the caller 8*4a053c8eSAlexander Hansen */ create_pldm_component_image_info_area_v1_0_0(uint8_t * b,ssize_t i,size_t component_image_size,size_t & componentLocationOffsetIndex)9*4a053c8eSAlexander Hansenssize_t create_pldm_component_image_info_area_v1_0_0( 10*4a053c8eSAlexander Hansen uint8_t* b, ssize_t i, size_t component_image_size, 11*4a053c8eSAlexander Hansen size_t& componentLocationOffsetIndex) 12*4a053c8eSAlexander Hansen { 13*4a053c8eSAlexander Hansen // Component Image Count 14*4a053c8eSAlexander Hansen b[i++] = 0x1; 15*4a053c8eSAlexander Hansen b[i++] = 0x0; 16*4a053c8eSAlexander Hansen 17*4a053c8eSAlexander Hansen // ComponentImageInformation (Table 5) 18*4a053c8eSAlexander Hansen // (1 for each image) 19*4a053c8eSAlexander Hansen 20*4a053c8eSAlexander Hansen // ComponentClassification 21*4a053c8eSAlexander Hansen b[i++] = 0x1; // this is vendor selected value 22*4a053c8eSAlexander Hansen b[i++] = 0x0; 23*4a053c8eSAlexander Hansen 24*4a053c8eSAlexander Hansen // ComponentIdentifier 25*4a053c8eSAlexander Hansen b[i++] = 0x1; // this is vendor selected value 26*4a053c8eSAlexander Hansen b[i++] = 0x0; 27*4a053c8eSAlexander Hansen 28*4a053c8eSAlexander Hansen // ComponentComparisonStamp 29*4a053c8eSAlexander Hansen b[i++] = 0xff; 30*4a053c8eSAlexander Hansen b[i++] = 0xff; 31*4a053c8eSAlexander Hansen b[i++] = 0xff; 32*4a053c8eSAlexander Hansen b[i++] = 0xff; 33*4a053c8eSAlexander Hansen 34*4a053c8eSAlexander Hansen // ComponentOptions 35*4a053c8eSAlexander Hansen b[i++] = 0x00; 36*4a053c8eSAlexander Hansen b[i++] = 0x00; 37*4a053c8eSAlexander Hansen 38*4a053c8eSAlexander Hansen // RequestedComponentActivationMethod 39*4a053c8eSAlexander Hansen b[i++] = 0b100000; // AC Power Cycle 40*4a053c8eSAlexander Hansen b[i++] = 0x0; 41*4a053c8eSAlexander Hansen 42*4a053c8eSAlexander Hansen // ComponentLocationOffset 43*4a053c8eSAlexander Hansen // (leave blank for now) 44*4a053c8eSAlexander Hansen componentLocationOffsetIndex = i; 45*4a053c8eSAlexander Hansen b[i++] = 0x0; 46*4a053c8eSAlexander Hansen b[i++] = 0x0; 47*4a053c8eSAlexander Hansen b[i++] = 0x0; 48*4a053c8eSAlexander Hansen b[i++] = 0x0; 49*4a053c8eSAlexander Hansen 50*4a053c8eSAlexander Hansen // ComponentSize 51*4a053c8eSAlexander Hansen b[i++] = (component_image_size >> 0) & 0xff; 52*4a053c8eSAlexander Hansen b[i++] = (component_image_size >> 8) & 0xff; 53*4a053c8eSAlexander Hansen b[i++] = (component_image_size >> 16) & 0xff; 54*4a053c8eSAlexander Hansen b[i++] = (component_image_size >> 24) & 0xff; 55*4a053c8eSAlexander Hansen 56*4a053c8eSAlexander Hansen // ComponentVersionStringType 57*4a053c8eSAlexander Hansen b[i++] = 0x1; // type = Ascii 58*4a053c8eSAlexander Hansen 59*4a053c8eSAlexander Hansen const char* buf = (const char*)"mycompversion"; 60*4a053c8eSAlexander Hansen // ComponentVersionStringLength 61*4a053c8eSAlexander Hansen b[i++] = strlen(buf); 62*4a053c8eSAlexander Hansen 63*4a053c8eSAlexander Hansen // ComponentVersionString 64*4a053c8eSAlexander Hansen for (ssize_t j = 0; j < (ssize_t)strlen(buf); j++) 65*4a053c8eSAlexander Hansen { 66*4a053c8eSAlexander Hansen b[i++] = buf[j]; 67*4a053c8eSAlexander Hansen } 68*4a053c8eSAlexander Hansen 69*4a053c8eSAlexander Hansen return i; 70*4a053c8eSAlexander Hansen } 71