summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason M. Bills <jason.m.bills@linux.intel.com>2019-10-09 22:34:20 +0300
committerBills, Jason M <jason.m.bills@intel.com>2019-10-15 20:16:32 +0300
commitb3c6a07fec5ded0da9b58669800c32a4ed3b831c (patch)
tree7d40bbbeb694bdb4f20d16b8162095c002f3b0e6
parentf95bcccc8af94761a54c10ccbffd1d1ff0a05c4c (diff)
downloadprovingground-b3c6a07fec5ded0da9b58669800c32a4ed3b831c.tar.xz
Change peci_cmds interface to use a string for the command
The dash options to select commands will become very cumbersome as we implement the new PECI 4.0 commands. This separates the parameters into 'options' and 'commands'. Options are set using the dash parameters as they are today. Commands are now selected by a string in the first parameter. This is inspired by the usage of ipmitool and will hopefully feel familiar. This will help as new command types are added so we don't end up overloading the dash options with too many types that have to be checked against the help every time. Tested: Executed the following commands and confirmed they behave as expected: ./peci_cmds -h Usage: ./peci_cmds [-a <addr>] [-s <size>] <command> [parameters] Options: -h Display this help information -a Address of the target in decimal. Default is 48 -s Size of data to read or write in bytes. Default is 4 Commands: Ping Ping the target GetTemp Get the temperature GetDIB Get the DIB RdPkgConfig Read Package Config <Index Parameter> WrPkgConfig Write Package Config <Index Parameter Data> RdIAMSR MSR Read <Thread Address> RdPCIConfig PCI Read for specific hex address <Bus Dev Func [Reg]> RdPCIConfigLocal Local PCI Read for specific hex address <Bus Dev Func [Reg]> WrPCIConfigLocal Local PCI Write for specific hex address <Bus Dev Func Reg Data> ./peci_cmds Ping PECI target[48]: Pinging ... Succeeded ./peci_cmds Ping -a 49 PECI target[49]: Pinging ... Succeeded ./peci_cmds GetTemp PECI target[48]: GetTemp ef1ch (-67.56C) ./peci_cmds GetDIB PECI target[48]: GetDIB 0x3500 ./peci_cmds RdPkgConfig 0 0 PECI target[48]: Pkg Read of Index 00 Param 0000 cc:0x40 0x00050654 ./peci_cmds WrPkgConfig 0 0 0 PECI target[48]: Pkg Write of Index 00 Param 0000: 0x00000000 cc:0x90 ./peci_cmds RdIAMSR 0 411 PECI target[48]: MSR Read of Thread 00 MSR 0411 cc:0x40 0x00000000 ./peci_cmds RdPCIConfig 0 0 0 PECI target[48]: PCI Read of 00:00:00 Reg 00 cc:0x40 0x20208086 ./peci_cmds RdPCIConfigLocal 0 0 0 PECI target[48]: Local PCI Read of 00:00:00 Reg 00 cc:0x40 0x20208086 ./peci_cmds RdPCIConfigLocal 0 0 0 1 -s 1 PECI target[48]: Local PCI Read of 00:00:00 Reg 01 cc:0x40 0x80 ./peci_cmds RdPCIConfigLocal 0 0 0 2 -s 2 PECI target[48]: Local PCI Read of 00:00:00 Reg 02 cc:0x40 0x2020 ./peci_cmds WrPCIConfigLocal d 0 3 270 15 PECI target[48]: Local PCI Write of 0d:00:03 Reg 270: 0x00000015 cc:0x90 ./peci_cmds RdEndpointConfigPCILocal 0 0 0 0 0 cc:0x40 0x09a28086 ./peci_cmds WrEndpointConfigPCILocal 0 0 0 0 0 1 cc:0x40 ./peci_cmds RdEndpointConfigPCI 0 0 0 0 0 cc:0x40 0x09a28086 ./peci_cmds WrEndpointConfigPCI 0 0 0 0 0 1 cc:0x40 ./peci_cmds RdEndpointConfigMMIO 5 0 0 0 0 0 0 cc:0x40 0x00000000 Change-Id: I32bc8a566db7fa6b7a1f4bb1f56e636319b2d7f9 Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
-rw-r--r--libpeci/peci_cmds.c845
1 files changed, 395 insertions, 450 deletions
diff --git a/libpeci/peci_cmds.c b/libpeci/peci_cmds.c
index efc5b86..9e827b0 100644
--- a/libpeci/peci_cmds.c
+++ b/libpeci/peci_cmds.c
@@ -13,64 +13,63 @@
// See the License for the specific language governing permissions and
// limitations under the License.
*/
+#include <ctype.h>
#include <inttypes.h>
#include <peci.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#ifndef ABS
#define ABS(_v_) (((_v_) > 0) ? (_v_) : -(_v_))
#endif
-enum peci_cmd_subtype
-{
- PECI_CMD_RD_END_PT_CFG_LOCAL_PCI = PECI_CMD_MAX + 1,
- PECI_CMD_RD_END_PT_CFG_PCI,
- PECI_CMD_RD_END_PT_CFG_MMIO,
- PECI_CMD_WR_END_PT_CFG_LOCAL_PCI,
- PECI_CMD_WR_END_PT_CFG_PCI,
-};
-
extern EPECIStatus peci_GetDIB(uint8_t target, uint64_t* dib);
void Usage(char* progname)
{
- printf("Usage :\n");
- printf("\t%s [-a <addr>] [-s <size>] <command> [parameters]\n", progname);
- printf("\t\t-a : Address of the target in decimal. Default is 48.\n");
- printf("\t\t-s : Size of data to read or write in bytes. Default is 4.\n");
- printf("\t\t-n : Ping the target.\n");
- printf("\t\t-t : Get the temperature.\n");
- printf("\t\t-d : Get the DIB.\n");
- printf(
- "\t\t-p : PCI Read for specific hex address <Bus Dev Func [Reg]>.\n");
- printf("\t\t-pw : PCI Write for specific hex address <Bus Dev Func [Reg] "
- "Data>.\n");
- printf("\t\t-c : Read Package Config <Index Parameter>.\n");
- printf("\t\t-cw : Write Package Config <Index Parameter Data>.\n");
- printf("\t\t-m : MSR Read <Thread Address>.\n");
- printf("\t\t-l : Local PCI Read for specific hex address <Bus Dev Func "
- "[Reg]>.\n");
- printf("\t\t-lw : Local PCI Write for specific hex address <Bus Dev Func "
- "[Reg] Data>.\n");
- printf(
- "\t\t-e : Endpoint Local PCI Config Read <Seg Bus Dev Func [Reg]>.\n");
- printf("\t\t-ew : Endpoint Local PCI Config Write <Seg Bus Dev Func [Reg] "
- "Data>.\n");
- printf("\t\t-f : Endpoint PCI Config Read <Seg Bus Dev Func [Reg]>.\n");
- printf(
- "\t\t-fw : Endpoint PCI Config Write <Seg Bus Dev Func [Reg] Data>.\n");
- printf(
- "\t\t-g : Endpoint MMIO Read <AType Bar Seg Bus Dev Func [Reg]>.\n");
+ printf("Usage:\n");
+ printf("%s [-a <addr>] [-s <size>] <command> [parameters]\n", progname);
+ printf("Options:\n");
+ printf("\t%-6s%s\n", "-h", "Display this help information");
+ printf("\t%-6s%s\n", "-a",
+ "Address of the target in decimal. Default is 48");
+ printf("\t%-6s%s\n", "-s",
+ "Size of data to read or write in bytes. Default is 4");
+ printf("Commands:\n");
+ printf("\t%-28s%s\n", "Ping", "Ping the target");
+ printf("\t%-28s%s\n", "GetTemp", "Get the temperature");
+ printf("\t%-28s%s\n", "GetDIB", "Get the DIB");
+ printf("\t%-28s%s\n", "RdPkgConfig",
+ "Read Package Config <Index Parameter>");
+ printf("\t%-28s%s\n", "WrPkgConfig",
+ "Write Package Config <Index Parameter Data>");
+ printf("\t%-28s%s\n", "RdIAMSR", "MSR Read <Thread Address>");
+ printf("\t%-28s%s\n", "RdPCIConfig",
+ "PCI Read for specific hex address <Bus Dev Func [Reg]>");
+ printf("\t%-28s%s\n", "RdPCIConfigLocal",
+ "Local PCI Read for specific hex address <Bus Dev Func [Reg]>");
+ printf("\t%-28s%s\n", "WrPCIConfigLocal",
+ "Local PCI Write for specific hex address <Bus Dev Func Reg Data>");
+ printf("\t%-28s%s\n", "RdEndpointConfigPCILocal",
+ "Endpoint Local PCI Config Read <Seg Bus Dev Func Reg>");
+ printf("\t%-28s%s\n", "WrEndpointConfigPCILocal",
+ "Endpoint Local PCI Config Write <Seg Bus Dev Func Reg Data>");
+ printf("\t%-28s%s\n", "RdEndpointConfigPCI",
+ "Endpoint PCI Config Read <Seg Bus Dev Func Reg>");
+ printf("\t%-28s%s\n", "WrEndpointConfigPCI",
+ "Endpoint PCI Config Write <Seg Bus Dev Func Reg Data>");
+ printf("\t%-28s%s\n", "RdEndpointConfigMMIO",
+ "Endpoint MMIO Read <AType Bar Seg Bus Dev Func Reg>");
printf("\n");
}
int main(int argc, char* argv[])
{
int c;
+ int i = 0;
+ char* cmd = NULL;
EPECIStatus ret;
- int cnt = 0;
- uint8_t u8Cmd = PECI_CMD_MAX;
uint8_t address = 0x30; // use default address of 48d
uint8_t u8Size = 4; // default to a DWORD
uint32_t u32PciReadVal = 0;
@@ -97,7 +96,7 @@ int main(int argc, char* argv[])
//
// Parse arguments.
//
- while (-1 != (c = getopt(argc, argv, "a:s:ntdp::c::m::l::e::f::g")))
+ while (-1 != (c = getopt(argc, argv, "ha:s:")))
{
switch (c)
{
@@ -106,71 +105,16 @@ int main(int argc, char* argv[])
address = (unsigned char)atoi(optarg);
break;
+ case 'h':
+ Usage(argv[0]);
+ return 0;
+ break;
+
case 's':
if (optarg != NULL)
u8Size = (unsigned char)atoi(optarg);
break;
- case 'n':
- cnt++;
- u8Cmd = PECI_CMD_PING;
- break;
-
- case 't':
- cnt++;
- u8Cmd = PECI_CMD_GET_TEMP;
- break;
-
- case 'd':
- cnt++;
- u8Cmd = PECI_CMD_GET_DIB;
- break;
-
- case 'p':
- cnt++;
- u8Cmd = PECI_CMD_RD_PCI_CFG;
- if (optarg != NULL && optarg[0] == 'w')
- u8Cmd = PECI_CMD_WR_PCI_CFG;
- break;
-
- case 'c':
- cnt++;
- u8Cmd = PECI_CMD_RD_PKG_CFG;
- if (optarg != NULL && optarg[0] == 'w')
- u8Cmd = PECI_CMD_WR_PKG_CFG;
- break;
-
- case 'm':
- cnt++;
- u8Cmd = PECI_CMD_RD_IA_MSR;
- break;
-
- case 'l':
- cnt++;
- u8Cmd = PECI_CMD_RD_PCI_CFG_LOCAL;
- if (optarg != NULL && optarg[0] == 'w')
- u8Cmd = PECI_CMD_WR_PCI_CFG_LOCAL;
- break;
-
- case 'e':
- cnt++;
- u8Cmd = PECI_CMD_RD_END_PT_CFG_LOCAL_PCI;
- if (optarg != NULL && optarg[0] == 'w')
- u8Cmd = PECI_CMD_WR_END_PT_CFG_LOCAL_PCI;
- break;
-
- case 'f':
- cnt++;
- u8Cmd = PECI_CMD_RD_END_PT_CFG_PCI;
- if (optarg != NULL && optarg[0] == 'w')
- u8Cmd = PECI_CMD_WR_END_PT_CFG_PCI;
- break;
-
- case 'g':
- cnt++;
- u8Cmd = PECI_CMD_RD_END_PT_CFG_MMIO;
- break;
-
default:
printf("ERROR: Unrecognized option \"-%c\".\n", optopt);
goto ErrorExit;
@@ -178,385 +122,386 @@ int main(int argc, char* argv[])
}
}
- if (1 != cnt)
+ // Get the command from the first parameter
+ cmd = argv[optind++];
+ if (cmd == NULL)
{
- printf("ERROR: Invalid options.\n");
- goto ErrorExit;
+ Usage(argv[0]);
+ return 0;
+ }
+
+ // Allow any case
+ while (cmd[i])
+ {
+ cmd[i] = tolower(cmd[i]);
+ i++;
}
//
// Execute the command
//
printf("PECI target[%u]: ", address);
- switch (u8Cmd)
+ if (strcmp(cmd, "ping") == 0)
{
- case PECI_CMD_PING:
- printf("Pinging ... ");
- (0 == peci_Ping(address)) ? printf("Succeeded\n")
- : printf("Failed\n");
- break;
+ printf("Pinging ... ");
+ (0 == peci_Ping(address)) ? printf("Succeeded\n") : printf("Failed\n");
+ }
+ else if (strcmp(cmd, "getdib") == 0)
+ {
+ printf("GetDIB\n");
+ ret = peci_GetDIB(address, &dib);
+ if (0 != ret)
+ {
+ printf("ERROR %d: Retrieving DIB failed\n", ret);
+ return 1;
+ }
+ printf(" 0x%" PRIx64 "\n", dib);
+ }
- case PECI_CMD_GET_TEMP:
- printf("GetTemp\n");
- ret = peci_GetTemp(address, &temperature);
- if (0 != ret)
- {
- printf("ERROR %d: Retrieving temperature failed\n", ret);
- break;
- }
- printf(" %04xh (%c%d.%02dC)\n",
- (int)(unsigned int)(unsigned short)temperature,
- (0 > temperature) ? '-' : '+',
- (int)((unsigned int)ABS(temperature) / 64),
- (int)(((unsigned int)ABS(temperature) % 64) * 100) / 64);
- break;
+ else if (strcmp(cmd, "gettemp") == 0)
+ {
+ printf("GetTemp\n");
+ ret = peci_GetTemp(address, &temperature);
+ if (0 != ret)
+ {
+ printf("ERROR %d: Retrieving temperature failed\n", ret);
+ return 1;
+ }
+ printf(" %04xh (%c%d.%02dC)\n",
+ (int)(unsigned int)(unsigned short)temperature,
+ (0 > temperature) ? '-' : '+',
+ (int)((unsigned int)ABS(temperature) / 64),
+ (int)(((unsigned int)ABS(temperature) % 64) * 100) / 64);
+ }
- case PECI_CMD_GET_DIB:
- printf("GetDIB\n");
- ret = peci_GetDIB(address, &dib);
- if (0 != ret)
- {
- printf("ERROR %d: Retrieving DIB failed\n", ret);
+ else if (strcmp(cmd, "rdpkgconfig") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 2:
+ u16PkgParam = strtoul(argv[--u8Index], NULL, 16);
+ u8PkgIndex = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" 0x%" PRIx64 "\n", dib);
- break;
-
- case PECI_CMD_RD_PCI_CFG:
- u8Index = argc;
- switch (argc - optind)
- {
- case 4:
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- case 3:
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- case 2:
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- case 1:
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf("ERROR: Unsupported arguments for PCI Read\n");
- goto ErrorExit;
- break;
- }
- printf("PCI Read of %02x:%02x:%02x Reg %02x\n", u8PciBus, u8PciDev,
- u8PciFunc, u16PciReg);
- ret = peci_RdPCIConfig(address, u8PciBus, u8PciDev, u8PciFunc,
- u16PciReg, (uint8_t*)&u32PciReadVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for Pkg Read\n");
+ goto ErrorExit;
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
- break;
-
- case PECI_CMD_RD_PKG_CFG:
- u8Index = argc;
- switch (argc - optind)
- {
- case 2:
- u16PkgParam = strtoul(argv[--u8Index], NULL, 16);
- u8PkgIndex = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf("ERROR: Unsupported arguments for Pkg Read\n");
- goto ErrorExit;
- break;
- }
- printf("Pkg Read of Index %02x Param %04x\n", u8PkgIndex,
- u16PkgParam);
- ret = peci_RdPkgConfig(address, u8PkgIndex, u16PkgParam, u8Size,
- (uint8_t*)&u32PkgValue, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ }
+ printf("Pkg Read of Index %02x Param %04x\n", u8PkgIndex, u16PkgParam);
+ ret = peci_RdPkgConfig(address, u8PkgIndex, u16PkgParam, u8Size,
+ (uint8_t*)&u32PkgValue, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PkgValue);
+ }
+ else if (strcmp(cmd, "wrpkgconfig") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 3:
+ u32PkgValue = strtoul(argv[--u8Index], NULL, 16);
+ u16PkgParam = strtoul(argv[--u8Index], NULL, 16);
+ u8PkgIndex = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PkgValue);
- break;
-
- case PECI_CMD_WR_PKG_CFG:
- u8Index = argc;
- switch (argc - optind)
- {
- case 3:
- u32PkgValue = strtoul(argv[--u8Index], NULL, 16);
- u16PkgParam = strtoul(argv[--u8Index], NULL, 16);
- u8PkgIndex = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf("ERROR: Unsupported arguments for Pkg Write\n");
- goto ErrorExit;
- break;
- }
- printf("Pkg Write of Index %02x Param %04x: 0x%0*x\n", u8PkgIndex,
- u16PkgParam, u8Size * 2, u32PkgValue);
- ret = peci_WrPkgConfig(address, u8PkgIndex, u16PkgParam,
- u32PkgValue, u8Size, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for Pkg Write\n");
+ goto ErrorExit;
break;
- }
- printf(" cc:0x%02x\n", cc);
- break;
-
- case PECI_CMD_RD_IA_MSR:
- u8Index = argc;
- switch (argc - optind)
- {
- case 2:
- u16MsrAddr = strtoul(argv[--u8Index], NULL, 16);
- u8MsrThread = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf("ERROR: Unsupported arguments for MSR Read\n");
- goto ErrorExit;
- break;
- }
- printf("MSR Read of Thread %02x MSR %04x\n", u8MsrThread,
- u16MsrAddr);
- ret =
- peci_RdIAMSR(address, u8MsrThread, u16MsrAddr, &u64MsrVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ }
+ printf("Pkg Write of Index %02x Param %04x: 0x%0*x\n", u8PkgIndex,
+ u16PkgParam, u8Size * 2, u32PkgValue);
+ ret = peci_WrPkgConfig(address, u8PkgIndex, u16PkgParam, u32PkgValue,
+ u8Size, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x\n", cc);
+ }
+ else if (strcmp(cmd, "rdiamsr") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 2:
+ u16MsrAddr = strtoul(argv[--u8Index], NULL, 16);
+ u8MsrThread = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u64MsrVal);
- break;
-
- case PECI_CMD_RD_PCI_CFG_LOCAL:
- u8Index = argc;
- switch (argc - optind)
- {
- case 4:
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- case 3:
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- case 2:
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- case 1:
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf("ERROR: Unsupported arguments for Local PCI Read\n");
- goto ErrorExit;
- break;
- }
- printf("Local PCI Read of %02x:%02x:%02x Reg %02x\n", u8PciBus,
- u8PciDev, u8PciFunc, u16PciReg);
- ret = peci_RdPCIConfigLocal(address, u8PciBus, u8PciDev, u8PciFunc,
- u16PciReg, u8Size,
- (uint8_t*)&u32PciReadVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for MSR Read\n");
+ goto ErrorExit;
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
- break;
-
- case PECI_CMD_WR_PCI_CFG_LOCAL:
- u8Index = argc;
- u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
- switch (argc - optind)
- {
- case 5:
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- case 4:
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- case 3:
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- case 2:
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- break;
- default:
- printf(
- "ERROR: Unsupported arguments for Local PCI Write\n");
- goto ErrorExit;
- break;
- }
- printf("Local PCI Write of %02x:%02x:%02x Reg %02x: 0x%0*x\n",
- u8PciBus, u8PciDev, u8PciFunc, u16PciReg, u8Size * 2,
- u32PciWriteVal);
- ret = peci_WrPCIConfigLocal(address, u8PciBus, u8PciDev, u8PciFunc,
- u16PciReg, u8Size, u32PciWriteVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ }
+ printf("MSR Read of Thread %02x MSR %04x\n", u8MsrThread, u16MsrAddr);
+ ret = peci_RdIAMSR(address, u8MsrThread, u16MsrAddr, &u64MsrVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u64MsrVal);
+ }
+ else if (strcmp(cmd, "rdpciconfig") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 4:
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ case 3:
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ case 2:
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ case 1:
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x\n", cc);
- break;
-
- case PECI_CMD_RD_END_PT_CFG_LOCAL_PCI:
- u8Index = argc;
- switch (argc - optind)
- {
- case 5:
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- u8Seg = strtoul(argv[--u8Index], NULL, 16);
- break;
-
- default:
- printf("ERROR: Unsupported arguments for Endpoint Local "
- "PCI Read\n");
- goto ErrorExit;
- }
- printf(
- "Endpoint Local PCI Read of Seg:%02x %02x:%02x:%02x Reg %02x\n",
- u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg);
- ret = peci_RdEndPointConfigPciLocal(
- address, u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg,
- u8Size, (uint8_t*)&u32PciReadVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for PCI Read\n");
+ goto ErrorExit;
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
- break;
-
- case PECI_CMD_WR_END_PT_CFG_LOCAL_PCI:
- u8Index = argc;
- switch (argc - optind)
- {
- case 6:
- u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- u8Seg = strtoul(argv[--u8Index], NULL, 16);
- break;
-
- default:
- printf("ERROR: Unsupported arguments for Endpoint Local "
- "PCI Write\n");
- goto ErrorExit;
- }
- printf("Endpoint Local PCI Write of Seg:%02x %02x:%02x:%02x Reg "
- "%02x: 0x%0*x\n",
- u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg, u8Size * 2,
- u32PciWriteVal);
- ret = peci_WrEndPointPCIConfigLocal(address, u8Seg, u8PciBus,
- u8PciDev, u8PciFunc, u16PciReg,
- u8Size, u32PciWriteVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ }
+ printf("PCI Read of %02x:%02x:%02x Reg %02x\n", u8PciBus, u8PciDev,
+ u8PciFunc, u16PciReg);
+ ret = peci_RdPCIConfig(address, u8PciBus, u8PciDev, u8PciFunc,
+ u16PciReg, (uint8_t*)&u32PciReadVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
+ }
+ else if (strcmp(cmd, "rdpciconfiglocal") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 4:
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ case 3:
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ case 2:
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ case 1:
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x\n", cc);
- break;
-
- case PECI_CMD_RD_END_PT_CFG_PCI:
- u8Index = argc;
- switch (argc - optind)
- {
- case 5:
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- u8Seg = strtoul(argv[--u8Index], NULL, 16);
- break;
-
- default:
- printf(
- "ERROR: Unsupported arguments for Endpoint PCI Read\n");
- goto ErrorExit;
- }
- printf("Endpoint PCI Read of Seg:%02x %02x:%02x:%02x Reg %02x\n",
- u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg);
- ret = peci_RdEndPointConfigPci(address, u8Seg, u8PciBus, u8PciDev,
- u8PciFunc, u16PciReg, u8Size,
- (uint8_t*)&u32PciReadVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for Local PCI Read\n");
+ goto ErrorExit;
+ break;
+ }
+ printf("Local PCI Read of %02x:%02x:%02x Reg %02x\n", u8PciBus,
+ u8PciDev, u8PciFunc, u16PciReg);
+ ret = peci_RdPCIConfigLocal(address, u8PciBus, u8PciDev, u8PciFunc,
+ u16PciReg, u8Size, (uint8_t*)&u32PciReadVal,
+ &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
+ }
+ else if (strcmp(cmd, "wrpciconfiglocal") == 0)
+ {
+ u8Index = argc;
+ u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
+ switch (argc - optind)
+ {
+ case 5:
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ case 4:
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ case 3:
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ case 2:
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ break;
+ default:
+ printf("ERROR: Unsupported arguments for Local PCI Write\n");
+ goto ErrorExit;
+ break;
+ }
+ printf("Local PCI Write of %02x:%02x:%02x Reg %02x: 0x%0*x\n", u8PciBus,
+ u8PciDev, u8PciFunc, u16PciReg, u8Size * 2, u32PciWriteVal);
+ ret = peci_WrPCIConfigLocal(address, u8PciBus, u8PciDev, u8PciFunc,
+ u16PciReg, u8Size, u32PciWriteVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x\n", cc);
+ }
+ else if (strcmp(cmd, "rdendpointconfigpcilocal") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 5:
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ u8Seg = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
- break;
- case PECI_CMD_WR_END_PT_CFG_PCI:
- u8Index = argc;
- switch (argc - optind)
- {
- case 6:
- u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
- u16PciReg = strtoul(argv[--u8Index], NULL, 16);
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- u8Seg = strtoul(argv[--u8Index], NULL, 16);
- break;
+ default:
+ printf("ERROR: Unsupported arguments for Endpoint Local PCI "
+ "Read\n");
+ goto ErrorExit;
+ }
+ printf("Endpoint Local PCI Read of Seg:%02x %02x:%02x:%02x Reg %02x\n",
+ u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg);
+ ret = peci_RdEndPointConfigPciLocal(address, u8Seg, u8PciBus, u8PciDev,
+ u8PciFunc, u16PciReg, u8Size,
+ (uint8_t*)&u32PciReadVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
+ }
+ else if (strcmp(cmd, "wrendpointconfigpcilocal") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 6:
+ u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ u8Seg = strtoul(argv[--u8Index], NULL, 16);
+ break;
- default:
- printf("ERROR: Unsupported arguments for Endpoint PCI "
- "Write\n");
- goto ErrorExit;
- }
- printf("Endpoint PCI Write of Seg:%02x %02x:%02x:%02x Reg %02x: "
- "0x%0*x\n",
- u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg, u8Size * 2,
- u32PciWriteVal);
- ret = peci_WrEndPointPCIConfig(address, u8Seg, u8PciBus, u8PciDev,
- u8PciFunc, u16PciReg, u8Size,
- u32PciWriteVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for Endpoint Local PCI "
+ "Write\n");
+ goto ErrorExit;
+ }
+ printf("Endpoint Local PCI Write of Seg:%02x %02x:%02x:%02x Reg %02x: "
+ "0x%0*x\n",
+ u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg, u8Size * 2,
+ u32PciWriteVal);
+ ret = peci_WrEndPointPCIConfigLocal(address, u8Seg, u8PciBus, u8PciDev,
+ u8PciFunc, u16PciReg, u8Size,
+ u32PciWriteVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x\n", cc);
+ }
+ else if (strcmp(cmd, "rdendpointconfigpci") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 5:
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ u8Seg = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x\n", cc);
- break;
- case PECI_CMD_RD_END_PT_CFG_MMIO:
- u8Index = argc;
- switch (argc - optind)
- {
- case 7:
- u64Offset = strtoul(argv[--u8Index], NULL, 16);
- u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
- u8PciDev = strtoul(argv[--u8Index], NULL, 16);
- u8PciBus = strtoul(argv[--u8Index], NULL, 16);
- u8Seg = strtoul(argv[--u8Index], NULL, 16);
- u8Bar = strtoul(argv[--u8Index], NULL, 16);
- u8AddrType = strtoul(argv[--u8Index], NULL, 16);
- break;
+ default:
+ printf("ERROR: Unsupported arguments for Endpoint PCI Read\n");
+ goto ErrorExit;
+ }
+ printf("Endpoint PCI Read of Seg:%02x %02x:%02x:%02x Reg %02x\n", u8Seg,
+ u8PciBus, u8PciDev, u8PciFunc, u16PciReg);
+ ret = peci_RdEndPointConfigPci(address, u8Seg, u8PciBus, u8PciDev,
+ u8PciFunc, u16PciReg, u8Size,
+ (uint8_t*)&u32PciReadVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
+ }
+ else if (strcmp(cmd, "wrendpointconfigpci") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 6:
+ u32PciWriteVal = strtoul(argv[--u8Index], NULL, 16);
+ u16PciReg = strtoul(argv[--u8Index], NULL, 16);
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ u8Seg = strtoul(argv[--u8Index], NULL, 16);
+ break;
- default:
- printf("ERROR: Unsupported arguments for Endpoint MMIO "
- "Read\n");
- goto ErrorExit;
- }
- printf("Endpoint MMIO Read of Seg:%02x %02x:%02x:%02x AType:%02x "
- "Bar:%02x Offset:0x%" PRIx64 "\n",
- u8Seg, u8PciBus, u8PciDev, u8PciFunc, u8AddrType, u8Bar,
- u64Offset);
- ret = peci_RdEndPointConfigMmio(
- address, u8Seg, u8PciBus, u8PciDev, u8PciFunc, u8Bar,
- u8AddrType, u64Offset, u8Size, (uint8_t*)&u32PciReadVal, &cc);
- if (0 != ret)
- {
- printf("ERROR %d: command failed\n", ret);
+ default:
+ printf("ERROR: Unsupported arguments for Endpoint PCI Write\n");
+ goto ErrorExit;
+ }
+ printf(
+ "Endpoint PCI Write of Seg:%02x %02x:%02x:%02x Reg %02x: 0x%0*x\n",
+ u8Seg, u8PciBus, u8PciDev, u8PciFunc, u16PciReg, u8Size * 2,
+ u32PciWriteVal);
+ ret = peci_WrEndPointPCIConfig(address, u8Seg, u8PciBus, u8PciDev,
+ u8PciFunc, u16PciReg, u8Size,
+ u32PciWriteVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x\n", cc);
+ }
+ else if (strcmp(cmd, "rdendpointconfigmmio") == 0)
+ {
+ u8Index = argc;
+ switch (argc - optind)
+ {
+ case 7:
+ u64Offset = strtoul(argv[--u8Index], NULL, 16);
+ u8PciFunc = strtoul(argv[--u8Index], NULL, 16);
+ u8PciDev = strtoul(argv[--u8Index], NULL, 16);
+ u8PciBus = strtoul(argv[--u8Index], NULL, 16);
+ u8Seg = strtoul(argv[--u8Index], NULL, 16);
+ u8Bar = strtoul(argv[--u8Index], NULL, 16);
+ u8AddrType = strtoul(argv[--u8Index], NULL, 16);
break;
- }
- printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
- break;
- default:
- printf("ERROR: Unrecognized command\n");
- goto ErrorExit;
+ default:
+ printf("ERROR: Unsupported arguments for Endpoint MMIO Read\n");
+ goto ErrorExit;
+ }
+ printf("Endpoint MMIO Read of Seg:%02x %02x:%02x:%02x AType:%02x "
+ "Bar:%02x Offset:0x%" PRIx64 "\n",
+ u8Seg, u8PciBus, u8PciDev, u8PciFunc, u8AddrType, u8Bar,
+ u64Offset);
+ ret = peci_RdEndPointConfigMmio(address, u8Seg, u8PciBus, u8PciDev,
+ u8PciFunc, u8Bar, u8AddrType, u64Offset,
+ u8Size, (uint8_t*)&u32PciReadVal, &cc);
+ if (0 != ret)
+ {
+ printf("ERROR %d: command failed\n", ret);
+ return 1;
+ }
+ printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal);
}
+ else
+ {
+ printf("ERROR: Unrecognized command\n");
+ goto ErrorExit;
+ }
+
return 0;
ErrorExit: