xref: /openbmc/phosphor-bmc-code-mgmt/test/create_package/component_image_info_area.cpp (revision 4a053c8e069133436d490aaff12471ee6c9d0677)
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 Hansen ssize_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