xref: /openbmc/qemu/scripts/ghes_inject.py (revision 92a0dcbd751d771512b9dedd97e00553181b7699)
1#!/usr/bin/env python3
2#
3# SPDX-License-Identifier: GPL-2.0-or-later
4#
5# Copyright (C) 2024-2025 Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
6
7"""
8Handle ACPI GHESv2 error injection logic QEMU QMP interface.
9"""
10
11import argparse
12import sys
13
14from arm_processor_error import ArmProcessorEinj
15
16EINJ_DESC = """
17Handle ACPI GHESv2 error injection logic QEMU QMP interface.
18
19It allows using UEFI BIOS EINJ features to generate GHES records.
20
21It helps testing CPER and GHES drivers at the guest OS and how
22userspace applications at the guest handle them.
23"""
24
25def main():
26    """Main program"""
27
28    # Main parser - handle generic args like QEMU QMP TCP socket options
29    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
30                                     usage="%(prog)s [options]",
31                                     description=EINJ_DESC)
32
33    g_options = parser.add_argument_group("QEMU QMP socket options")
34    g_options.add_argument("-H", "--host", default="localhost", type=str,
35                           help="host name")
36    g_options.add_argument("-P", "--port", default=4445, type=int,
37                           help="TCP port number")
38    g_options.add_argument('-d', '--debug', action='store_true')
39
40    subparsers = parser.add_subparsers()
41
42    ArmProcessorEinj(subparsers)
43
44    args = parser.parse_args()
45    if "func" in args:
46        args.func(args)
47    else:
48        sys.exit(f"Please specify a valid command for {sys.argv[0]}")
49
50if __name__ == "__main__":
51    main()
52