Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Machine check exception header file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright 2013 IBM Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #ifndef __ASM_PPC64_MCE_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define __ASM_PPC64_MCE_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <linux/bitops.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) enum MCE_Version {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	MCE_V1 = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) enum MCE_Severity {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	MCE_SEV_NO_ERROR = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	MCE_SEV_WARNING = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	MCE_SEV_SEVERE = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	MCE_SEV_FATAL = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) enum MCE_Disposition {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	MCE_DISPOSITION_RECOVERED = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	MCE_DISPOSITION_NOT_RECOVERED = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) enum MCE_Initiator {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	MCE_INITIATOR_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	MCE_INITIATOR_CPU = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	MCE_INITIATOR_PCI = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	MCE_INITIATOR_ISA = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	MCE_INITIATOR_MEMORY= 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	MCE_INITIATOR_POWERMGM = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) enum MCE_ErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	MCE_ERROR_TYPE_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	MCE_ERROR_TYPE_UE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	MCE_ERROR_TYPE_SLB = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	MCE_ERROR_TYPE_ERAT = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	MCE_ERROR_TYPE_TLB = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	MCE_ERROR_TYPE_USER = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	MCE_ERROR_TYPE_RA = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	MCE_ERROR_TYPE_LINK = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	MCE_ERROR_TYPE_DCACHE = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	MCE_ERROR_TYPE_ICACHE = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) enum MCE_ErrorClass {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	MCE_ECLASS_UNKNOWN = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	MCE_ECLASS_HARDWARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	MCE_ECLASS_HARD_INDETERMINATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	MCE_ECLASS_SOFTWARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	MCE_ECLASS_SOFT_INDETERMINATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) enum MCE_UeErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	MCE_UE_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	MCE_UE_ERROR_IFETCH = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	MCE_UE_ERROR_LOAD_STORE = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) enum MCE_SlbErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	MCE_SLB_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	MCE_SLB_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	MCE_SLB_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) enum MCE_EratErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	MCE_ERAT_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	MCE_ERAT_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	MCE_ERAT_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) enum MCE_TlbErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	MCE_TLB_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	MCE_TLB_ERROR_PARITY = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	MCE_TLB_ERROR_MULTIHIT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) enum MCE_UserErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	MCE_USER_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	MCE_USER_ERROR_TLBIE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	MCE_USER_ERROR_SCV = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) enum MCE_RaErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	MCE_RA_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	MCE_RA_ERROR_IFETCH = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	MCE_RA_ERROR_IFETCH_FOREIGN = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	MCE_RA_ERROR_PAGE_TABLE_WALK_IFETCH_FOREIGN = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	MCE_RA_ERROR_LOAD = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	MCE_RA_ERROR_STORE = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	MCE_RA_ERROR_PAGE_TABLE_WALK_LOAD_STORE_FOREIGN = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	MCE_RA_ERROR_LOAD_STORE_FOREIGN = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) enum MCE_LinkErrorType {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	MCE_LINK_ERROR_INDETERMINATE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	MCE_LINK_ERROR_IFETCH_TIMEOUT = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	MCE_LINK_ERROR_PAGE_TABLE_WALK_IFETCH_TIMEOUT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	MCE_LINK_ERROR_LOAD_TIMEOUT = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	MCE_LINK_ERROR_STORE_TIMEOUT = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	MCE_LINK_ERROR_PAGE_TABLE_WALK_LOAD_STORE_TIMEOUT = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) struct machine_check_event {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	enum MCE_Version	version:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	u8			in_use;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	enum MCE_Severity	severity:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	enum MCE_Initiator	initiator:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	enum MCE_ErrorType	error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	enum MCE_ErrorClass	error_class:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	enum MCE_Disposition	disposition:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	bool			sync_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	u16			cpu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	u64			gpr3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	u64			srr0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	u64			srr1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 			enum MCE_UeErrorType ue_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 			u8		physical_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 			u8		ignore_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 			u8		reserved_1[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 			u64		physical_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 			u8		reserved_2[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 		} ue_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 			enum MCE_SlbErrorType slb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 		} slb_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 			enum MCE_EratErrorType erat_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 		} erat_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 			enum MCE_TlbErrorType tlb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 		} tlb_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 			enum MCE_UserErrorType user_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		} user_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 			enum MCE_RaErrorType ra_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		} ra_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 			enum MCE_LinkErrorType link_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 			u8		effective_address_provided;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 			u8		reserved_1[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 			u64		effective_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 			u8		reserved_2[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 		} link_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	} u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct mce_error_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	enum MCE_ErrorType error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 		enum MCE_UeErrorType ue_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 		enum MCE_SlbErrorType slb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 		enum MCE_EratErrorType erat_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 		enum MCE_TlbErrorType tlb_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		enum MCE_UserErrorType user_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		enum MCE_RaErrorType ra_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		enum MCE_LinkErrorType link_error_type:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	} u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	enum MCE_Severity	severity:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	enum MCE_Initiator	initiator:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	enum MCE_ErrorClass	error_class:8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	bool			sync_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	bool			ignore_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define MAX_MC_EVT	100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) /* Release flags for get_mce_event() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define MCE_EVENT_RELEASE	true
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define MCE_EVENT_DONTRELEASE	false
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct pt_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) struct notifier_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) extern void save_mce_event(struct pt_regs *regs, long handled,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 			   struct mce_error_info *mce_err, uint64_t nip,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 			   uint64_t addr, uint64_t phys_addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) extern int get_mce_event(struct machine_check_event *mce, bool release);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) extern void release_mce_event(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) extern void machine_check_queue_event(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) extern void machine_check_print_event_info(struct machine_check_event *evt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 					   bool user_mode, bool in_guest);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) extern void mce_common_process_ue(struct pt_regs *regs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 				  struct mce_error_info *mce_err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) int mce_register_notifier(struct notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) int mce_unregister_notifier(struct notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #ifdef CONFIG_PPC_BOOK3S_64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) void flush_and_reload_slb(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) long __machine_check_early_realmode_p7(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) long __machine_check_early_realmode_p8(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) long __machine_check_early_realmode_p9(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) long __machine_check_early_realmode_p10(struct pt_regs *regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #endif /* CONFIG_PPC_BOOK3S_64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #endif /* __ASM_PPC64_MCE_H__ */