aboutsummaryrefslogtreecommitdiff
path: root/scripts/ghes_inject.py
blob: 9a235201418b40968b81121c1225961e7a6c32c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python3
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024-2025 Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

"""
Handle ACPI GHESv2 error injection logic QEMU QMP interface.
"""

import argparse
import sys

from arm_processor_error import ArmProcessorEinj

EINJ_DESC = """
Handle ACPI GHESv2 error injection logic QEMU QMP interface.

It allows using UEFI BIOS EINJ features to generate GHES records.

It helps testing CPER and GHES drivers at the guest OS and how
userspace applications at the guest handle them.
"""

def main():
    """Main program"""

    # Main parser - handle generic args like QEMU QMP TCP socket options
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
                                     usage="%(prog)s [options]",
                                     description=EINJ_DESC)

    g_options = parser.add_argument_group("QEMU QMP socket options")
    g_options.add_argument("-H", "--host", default="localhost", type=str,
                           help="host name")
    g_options.add_argument("-P", "--port", default=4445, type=int,
                           help="TCP port number")
    g_options.add_argument('-d', '--debug', action='store_true')

    subparsers = parser.add_subparsers()

    ArmProcessorEinj(subparsers)

    args = parser.parse_args()
    if "func" in args:
        args.func(args)
    else:
        sys.exit(f"Please specify a valid command for {sys.argv[0]}")

if __name__ == "__main__":
    main()