mce.h
001: #ifndef _ASM_X86_MCE_H
002: #define _ASM_X86_MCE_H
003: 
004: #include <linux/types.h>
005: #include <asm/ioctls.h>
006: 
007: 
008: 
009: 
010: 
011: 
012: #define MCG_BANKCNT_MASK        0xff         
013: #define MCG_CTL_P               (1ULL<<8)    
014: #define MCG_EXT_P               (1ULL<<9)    
015: #define MCG_CMCI_P              (1ULL<<10)   
016: #define MCG_EXT_CNT_MASK        0xff0000     
017: #define MCG_EXT_CNT_SHIFT       16
018: #define MCG_EXT_CNT(c)          (((c) & MCG_EXT_CNT_MASK) >> MCG_EXT_CNT_SHIFT)
019: #define MCG_SER_P               (1ULL<<24)   
020: 
021: 
022: #define MCG_STATUS_RIPV  (1ULL<<0)   
023: #define MCG_STATUS_EIPV  (1ULL<<1)   
024: #define MCG_STATUS_MCIP  (1ULL<<2)   
025: 
026: 
027: #define MCI_STATUS_VAL   (1ULL<<63)  
028: #define MCI_STATUS_OVER  (1ULL<<62)  
029: #define MCI_STATUS_UC    (1ULL<<61)  
030: #define MCI_STATUS_EN    (1ULL<<60)  
031: #define MCI_STATUS_MISCV (1ULL<<59)  
032: #define MCI_STATUS_ADDRV (1ULL<<58)  
033: #define MCI_STATUS_PCC   (1ULL<<57)  
034: #define MCI_STATUS_S     (1ULL<<56)  
035: #define MCI_STATUS_AR    (1ULL<<55)  
036: 
037: 
038: #define MCI_MISC_ADDR_LSB(m)    ((m) & 0x3f)
039: #define MCI_MISC_ADDR_MODE(m)   (((m) >> 6) & 7)
040: #define  MCI_MISC_ADDR_SEGOFF   0       
041: #define  MCI_MISC_ADDR_LINEAR   1       
042: #define  MCI_MISC_ADDR_PHYS     2       
043: #define  MCI_MISC_ADDR_MEM      3       
044: #define  MCI_MISC_ADDR_GENERIC  7       
045: 
046: 
047: #define MCI_CTL2_CMCI_EN                (1ULL << 30)
048: #define MCI_CTL2_CMCI_THRESHOLD_MASK    0x7fffULL
049: 
050: #define MCJ_CTX_MASK            3
051: #define MCJ_CTX(flags)          ((flags) & MCJ_CTX_MASK)
052: #define MCJ_CTX_RANDOM          0    
053: #define MCJ_CTX_PROCESS         1    
054: #define MCJ_CTX_IRQ             2    
055: #define MCJ_NMI_BROADCAST       4    
056: #define MCJ_EXCEPTION           8    
057: 
058: 
059: struct mce {
060:         __u64 status;
061:         __u64 misc;
062:         __u64 addr;
063:         __u64 mcgstatus;
064:         __u64 ip;
065:         __u64 tsc;      
066:         __u64 time;     
067:         __u8  cpuvendor;        
068:         __u8  inject_flags;     
069:         __u16  pad;
070:         __u32 cpuid;    
071:         __u8  cs;               
072:         __u8  bank;     
073:         __u8  cpu;      
074:         __u8  finished;   
075:         __u32 extcpu;   
076:         __u32 socketid; 
077:         __u32 apicid;   
078:         __u64 mcgcap;   
079:         __u64 aux0;     
080:         __u64 aux1;     
081: };
082: 
083: 
084: 
085: 
086: 
087: 
088: 
089: 
090: #define MCE_LOG_LEN 32
091: 
092: struct mce_log {
093:         char signature[12]; 
094:         unsigned len;       
095:         unsigned next;
096:         unsigned flags;
097:         unsigned recordlen;     
098:         struct mce entry[MCE_LOG_LEN];
099: };
100: 
101: #define MCE_OVERFLOW 0          
102: 
103: #define MCE_LOG_SIGNATURE       "MACHINECHECK"
104: 
105: #define MCE_GET_RECORD_LEN   _IOR('M', 1, int)
106: #define MCE_GET_LOG_LEN      _IOR('M', 2, int)
107: #define MCE_GETCLEAR_FLAGS   _IOR('M', 3, int)
108: 
109: 
110: #define MCE_EXTENDED_BANK       128
111: #define MCE_THERMAL_BANK        MCE_EXTENDED_BANK + 0
112: 
113: #define K8_MCE_THRESHOLD_BASE      (MCE_EXTENDED_BANK + 1)      
114: #define K8_MCE_THRESHOLD_BANK_0    (MCE_THRESHOLD_BASE + 0 * 9)
115: #define K8_MCE_THRESHOLD_BANK_1    (MCE_THRESHOLD_BASE + 1 * 9)
116: #define K8_MCE_THRESHOLD_BANK_2    (MCE_THRESHOLD_BASE + 2 * 9)
117: #define K8_MCE_THRESHOLD_BANK_3    (MCE_THRESHOLD_BASE + 3 * 9)
118: #define K8_MCE_THRESHOLD_BANK_4    (MCE_THRESHOLD_BASE + 4 * 9)
119: #define K8_MCE_THRESHOLD_BANK_5    (MCE_THRESHOLD_BASE + 5 * 9)
120: #define K8_MCE_THRESHOLD_DRAM_ECC  (MCE_THRESHOLD_BANK_4 + 0)
121: 
122: 
123: #endif 
124: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved