| // SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | /* | 
 |  * Copyright (C) 2023 Alibaba Corporation | 
 |  * Authors: Shuai Xue | 
 |  * | 
 |  * This software may be redistributed and/or modified under the terms of | 
 |  * the GNU General Public License ("GPL") version 2 only as published by the | 
 |  * Free Software Foundation. | 
 |  */ | 
 |  | 
 | #ifndef EINJ_H | 
 | #define EINJ_H | 
 |  | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <unistd.h> | 
 | #include <linux/version.h> | 
 | #include <sys/mman.h> | 
 | #include <string.h> | 
 | #include <stdint.h> | 
 | #include <errno.h> | 
 |  | 
 | #define EINJ_ETYPE "/sys/kernel/debug/apei/einj/error_type" | 
 | #define EINJ_ETYPE_AVAILABLE "/sys/kernel/debug/apei/einj/available_error_type" | 
 | #define EINJ_ADDR "/sys/kernel/debug/apei/einj/param1" | 
 | #define EINJ_MASK "/sys/kernel/debug/apei/einj/param2" | 
 | #define EINJ_APIC "/sys/kernel/debug/apei/einj/param3" | 
 | #define EINJ_SBDF "/sys/kernel/debug/apei/einj/param4" | 
 | #define EINJ_FLAGS "/sys/kernel/debug/apei/einj/flags" | 
 | #define EINJ_NOTRIGGER "/sys/kernel/debug/apei/einj/notrigger" | 
 | #define EINJ_DOIT "/sys/kernel/debug/apei/einj/error_inject" | 
 | #define EINJ_VENDOR "/sys/kernel/debug/apei/einj/vendor" | 
 |  | 
 | #define PRINT_INJECTING printf("injecting ...\n") | 
 | #define PRINT_TRIGGERING printf("triggering ...\n") | 
 |  | 
 | extern char *progname; | 
 | extern int Sflag; | 
 | extern long pagesize; | 
 |  | 
 | struct error_type { | 
 | 	int type; | 
 | 	char *type_name; | 
 | }; | 
 |  | 
 | int check_errortype_available(char *file, unsigned long long val); | 
 |  | 
 | void wfile(char *file, unsigned long long val); | 
 |  | 
 | int is_einj_support(void); | 
 |  | 
 | int is_privileged(void); | 
 |  | 
 | void inject_mem_uc(unsigned long long addr, void *vaddr, int notrigger); | 
 |  | 
 | char *lookup_type_name(unsigned long long type); | 
 |  | 
 | #endif /* EINJ_H */ |