xref: /openbmc/libcper/generator/cper-generate-cli.c (revision d34f2b11bab8ee8275540075201c277e9bde06b9)
1*d34f2b11SLawrence Tang /**
2*d34f2b11SLawrence Tang  * A user-space application for generating psuedo-random specification compliant CPER records.
3*d34f2b11SLawrence Tang  *
4*d34f2b11SLawrence Tang  * Author: Lawrence.Tang@arm.com
5*d34f2b11SLawrence Tang  **/
6*d34f2b11SLawrence Tang 
7*d34f2b11SLawrence Tang #include <stdio.h>
8*d34f2b11SLawrence Tang #include <string.h>
9*d34f2b11SLawrence Tang #include "../edk/Cper.h"
10*d34f2b11SLawrence Tang #include "cper-generate.h"
11*d34f2b11SLawrence Tang 
12*d34f2b11SLawrence Tang void print_help();
13*d34f2b11SLawrence Tang 
14*d34f2b11SLawrence Tang int main(int argc, char* argv[])
15*d34f2b11SLawrence Tang {
16*d34f2b11SLawrence Tang     //If help requested, print help.
17*d34f2b11SLawrence Tang     if (argc == 2 && strcmp(argv[1], "--help") == 0)
18*d34f2b11SLawrence Tang     {
19*d34f2b11SLawrence Tang         print_help();
20*d34f2b11SLawrence Tang         return 0;
21*d34f2b11SLawrence Tang     }
22*d34f2b11SLawrence Tang 
23*d34f2b11SLawrence Tang     //Ensure the minimum number of arguments.
24*d34f2b11SLawrence Tang     if (argc < 5)
25*d34f2b11SLawrence Tang     {
26*d34f2b11SLawrence Tang         printf("Insufficient number of arguments. See 'cper-generate --help' for command information.\n");
27*d34f2b11SLawrence Tang         return -1;
28*d34f2b11SLawrence Tang     }
29*d34f2b11SLawrence Tang 
30*d34f2b11SLawrence Tang     //Open a file handle to write output.
31*d34f2b11SLawrence Tang     FILE* cper_file = fopen(argv[2], "w");
32*d34f2b11SLawrence Tang     if (cper_file == NULL)
33*d34f2b11SLawrence Tang     {
34*d34f2b11SLawrence Tang         printf("Could not get a handle for output file '%s', file handle returned null.\n", argv[2]);
35*d34f2b11SLawrence Tang         return -1;
36*d34f2b11SLawrence Tang     }
37*d34f2b11SLawrence Tang 
38*d34f2b11SLawrence Tang     //Generate the record. Type names start from argv[4].
39*d34f2b11SLawrence Tang     UINT16 num_sections = argc - 4;
40*d34f2b11SLawrence Tang     generate_cper_record(argv + 4, num_sections, cper_file);
41*d34f2b11SLawrence Tang     fclose(cper_file);
42*d34f2b11SLawrence Tang }
43*d34f2b11SLawrence Tang 
44*d34f2b11SLawrence Tang 
45*d34f2b11SLawrence Tang //Prints command help for this CPER generator.
46*d34f2b11SLawrence Tang void print_help()
47*d34f2b11SLawrence Tang {
48*d34f2b11SLawrence Tang     printf(":: --out cper.file --sections section1 [section2 section3 ...]\n");
49*d34f2b11SLawrence Tang     printf("\tGenerates a psuedo-random CPER file with the provided section types and outputs to the given file name.\n");
50*d34f2b11SLawrence Tang     printf("\tValid section type names are the following:\n");
51*d34f2b11SLawrence Tang     printf("\t\t- generic\n");
52*d34f2b11SLawrence Tang     printf("\t\t- ia32x64\n");
53*d34f2b11SLawrence Tang     printf("\t\t- ipf\n");
54*d34f2b11SLawrence Tang     printf("\t\t- arm\n");
55*d34f2b11SLawrence Tang     printf("\t\t- memory\n");
56*d34f2b11SLawrence Tang     printf("\t\t- memory2\n");
57*d34f2b11SLawrence Tang     printf("\t\t- pcie\n");
58*d34f2b11SLawrence Tang     printf("\t\t- firmware\n");
59*d34f2b11SLawrence Tang     printf("\t\t- pcibus\n");
60*d34f2b11SLawrence Tang     printf("\t\t- pcidev\n");
61*d34f2b11SLawrence Tang     printf("\t\t- dmargeneric\n");
62*d34f2b11SLawrence Tang     printf("\t\t- dmarvtd\n");
63*d34f2b11SLawrence Tang     printf("\t\t- dmariommu\n");
64*d34f2b11SLawrence Tang     printf("\t\t- ccixper\n");
65*d34f2b11SLawrence Tang     printf("\t\t- cxlprotocol\n");
66*d34f2b11SLawrence Tang     printf("\t\t- cxlcomponent\n");
67*d34f2b11SLawrence Tang     printf("\t\t- unknown\n");
68*d34f2b11SLawrence Tang     printf("\n:: --help\n");
69*d34f2b11SLawrence Tang     printf("\tDisplays help information to the console.\n");
70*d34f2b11SLawrence Tang }