| #!/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() |