/**/ /***************************************************************************/ /** **/ /** © Copyright 2010, Hewlett-Packard Development Company, L.P. **/ /** **/ /** Confidential computer software. Valid license from HP and/or **/ /** its subsidiaries required for possession, use, or copying. **/ /** **/ /** Consistent with FAR 12.211 and 12.212, Commercial Computer Software, **/ /** Computer Software Documentation, and Technical Data for Commercial **/ /** Items are licensed to the U.S. Government under vendor's standard **/ /** commercial license. **/ /** **/ /** Neither HP nor any of its subsidiaries shall be liable for technical **/ /** or editorial errors or omissions contained herein. The information **/ /** in this document is provided "as is" without warranty of any kind and **/ /** is subject to change without notice. The warranties for HP products **/ /** are set forth in the express limited warranty statements accompanying **/ /** such products. Nothing herein should be construed as constituting an **/ /** additional warranty. **/ /** **/ /***************************************************************************/ /********************************************************************************************************************************/ /* Created: 30-Mar-2010 17:27:29 by OpenVMS SDL EV3-3 */ /* Source: 30-MAR-1998 16:28:31 $1$DGA7274:[LIB_H.SRC]EV6MCHKDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE ev6mchkdef IDENT X-2 ***/ #ifndef __EV6MCHKDEF_LOADED #define __EV6MCHKDEF_LOADED 1 #pragma __nostandard /* This file uses non-ANSI-Standard features */ #pragma __member_alignment __save #pragma __nomember_alignment #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __save /* Save the previously-defined required ptr size */ #pragma __required_pointer_size __short /* And set ptr size default to 32-bit pointers */ #endif #ifdef __cplusplus extern "C" { #define __unknown_params ... #define __optional_params ... #else #define __unknown_params #define __optional_params ... #endif #ifndef __struct #if !defined(__VAXC) #define __struct struct #else #define __struct variant_struct #endif #endif #ifndef __union #if !defined(__VAXC) #define __union union #else #define __union variant_union #endif #endif /* */ /* Define the field offsets for the machine check logout area */ /* */ /* NOTE: */ /* *********** */ /* Do not add the contents of the "cpu_offset" field in the header to the */ /* base pointer of the logout area in order to access the cpu data. This is one */ /* contiguous structure, not a union, so the offset to the cpu data is not */ /* necessary. The base pointer typecast to (MCK *) will be able to directly */ /* access the cpu data. */ /* */ /* For example: */ /* */ /* The following is the correct way to access data in the cpu-specific area of the */ /* logout. */ /* */ /* MCK *mck; */ /* uint64 dc_stat; */ /* : */ /* mck = (MCK *)logout_va; */ /* dc_stat = mck->mck$q_dc_stat; */ /* */ /* The following is the WRONG way to access data in the cpu-specific area of the */ /* logout. */ /* */ /* MCK *mck; */ /* MCK *cpu_data; */ /* uint64 dc_stat; */ /* : */ /* mck = (MCK *)logout_va; */ /* cpu_data = (MCK *)((int)logout_va + mck->mck$l_cpu_offset); */ /* dc_stat = cpu_data->mck$q_dc_stat; */ /* */ /* */ #define MCK$K_CORRECTABLE_CPU_FRAME_SIZE 88 /* 0x58 */ /* */ #define MCK$K_UNCORRECTABLE_CPU_FRAME_SIZE 160 /* 0xA0 */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _mck { __struct { /* offset 0x0 */ #pragma __nomember_alignment __union { /* */ /* frame_base can be used as explicit qw pointer to base of mchk frame */ /* */ unsigned __int64 mck$q_frame_base; /* 0x0 */ __union { unsigned __int64 mck$q_frame; __struct { unsigned int mck$l_frame_size; /* 0x0 Size of logout frame in bytes */ __union { int mck$l_frame_flags; /* 0x4 */ __struct { unsigned mck$v_ff_reserved_0 : 28; unsigned mck$v_scrubbed : 1; unsigned mck$v_diagnostic : 1; unsigned mck$v_second_error : 1; /* Second error occurred */ unsigned mck$v_retry : 1; /* Retry bit */ } mck$r_fill_3_; } mck$r_fill_2_; } mck$r_fill_1_; } mck$r_fill_0_; } mck$r_frame_overlay; unsigned int mck$l_cpu_offset; /* 0x08 Offset to cpu specific info */ unsigned int mck$l_system_offset; /* 0x0c Offset to sys specific info */ unsigned int mck$l_code; /* 0x10 PAL-determined cause for mck */ unsigned int mck$l_frame_rev; /* 0x14 Mchk frame revision */ } mck$r_header; /* */ /* */ /* Processor specific segment of logout frame */ /* */ /* Because the correctable and uncorrectable frames have the same first 8 */ /* quadwords of information in common, the uncorrectable frame is built as */ /* an extension to, rather than in union with, the correctable frame. */ /* */ /* The reason for providing both quadword and longword abstracts of each */ /* register is to allow power-on debug print routines to access each */ /* longword separately, as I don't think that 64-bit format support has */ /* been extended to our kprintf() routine. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __struct { #pragma __nomember_alignment __union { unsigned __int64 mck$q_i_stat; /* 0x18 */ __struct { unsigned int mck$l_i_stat_0; unsigned int mck$l_i_stat_1; } mck$r_fill_5_; } mck$r_fill_4_; __union { unsigned __int64 mck$q_dc_stat; /* 0x20 */ __struct { unsigned int mck$l_dc_stat_0; unsigned int mck$l_dc_stat_1; } mck$r_fill_7_; } mck$r_fill_6_; __union { unsigned __int64 mck$q_c_addr; /* 0x28 */ __struct { unsigned int mck$l_c_addr_0; unsigned int mck$l_c_addr_1; } mck$r_fill_9_; } mck$r_fill_8_; __union { unsigned __int64 mck$q_dc1_syndrome; /* 0x30 */ __struct { unsigned int mck$l_dc1_syndrome_0; unsigned int mck$l_dc1_syndrome_1; } mck$r_fill_11_; } mck$r_fill_10_; __union { unsigned __int64 mck$q_dc0_syndrome; /* 0x38 */ __struct { unsigned int mck$l_dc0_syndrome_0; unsigned int mck$l_dc0_syndrome_1; } mck$r_fill_13_; } mck$r_fill_12_; __union { unsigned __int64 mck$q_c_stat; /* 0x40 */ __struct { unsigned int mck$l_c_stat_0; unsigned int mck$l_c_stat_1; } mck$r_fill_15_; } mck$r_fill_14_; __union { unsigned __int64 mck$q_c_sts; /* 0x48 */ __struct { unsigned int mck$l_c_sts_0; unsigned int mck$l_c_sts_1; } mck$r_fill_17_; } mck$r_fill_16_; __union { unsigned __int64 mck$q_mm_stat; /* 0x50 */ __struct { unsigned int mck$l_mm_stat_0; unsigned int mck$l_mm_stat_1; } mck$r_fill_19_; } mck$r_fill_18_; } mck$r_correctable; /* */ /* This is the uncorrectable processor-specific part of the logout frame. */ /* For EV6, it simply picks up where the correctable frame leaves off. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __struct { /* 0x58 */ #pragma __nomember_alignment __union { unsigned __int64 mck$q_exc_addr; /* 0x58 */ __struct { unsigned int mck$l_exc_addr_0; unsigned int mck$l_exc_addr_1; } mck$r_fill_21_; } mck$r_fill_20_; __union { unsigned __int64 mck$q_ier_cm; /* 0x60 */ __struct { unsigned int mck$l_ier_cm_0; unsigned int mck$l_ier_cm_1; } mck$r_fill_23_; } mck$r_fill_22_; __union { unsigned __int64 mck$q_isum; /* 0x68 */ __struct { unsigned int mck$l_isum_0; unsigned int mck$l_isum_1; } mck$r_fill_25_; } mck$r_fill_24_; unsigned __int64 mck$q_u_reserved_0; /* 0x70 */ __union { unsigned __int64 mck$q_pal_base; /* 0x78 */ __struct { unsigned int mck$l_pal_base_0; unsigned int mck$l_pal_base_1; } mck$r_fill_27_; } mck$r_fill_26_; __union { unsigned __int64 mck$q_i_ctl; /* 0x80 */ __struct { unsigned int mck$l_i_ctl_0; unsigned int mck$l_i_ctl_1; } mck$r_fill_29_; } mck$r_fill_28_; __union { unsigned __int64 mck$q_pctx; /* 0x88 */ __struct { unsigned int mck$l_pctx_0; unsigned int mck$l_pctx_1; } mck$r_fill_31_; } mck$r_fill_30_; unsigned __int64 mck$q_u_reserved_1; /* 0x90 */ unsigned __int64 mck$q_u_reserved_2; /* 0x98 */ } mck$r_uncorrectable; } MCK; #if !defined(__VAXC) #define mck$q_frame_base mck$r_header.mck$r_frame_overlay.mck$q_frame_base #define mck$l_frame_size mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$l_frame_size #define mck$l_frame_flags mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$r_fill_2_.mck$l_frame_flags #define mck$v_scrubbed mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$r_fill_2_.mck$r_fill_3_.mck$v_scrubbed #define mck$v_diagnostic mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$r_fill_2_.mck$r_fill_3_.mck$v_diagnostic #define mck$v_second_error mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$r_fill_2_.mck$r_fill_3_.mck$v_second_er\ ror #define mck$v_retry mck$r_header.mck$r_frame_overlay.mck$r_fill_0_.mck$r_fill_1_.mck$r_fill_2_.mck$r_fill_3_.mck$v_retry #define mck$l_cpu_offset mck$r_header.mck$l_cpu_offset #define mck$l_system_offset mck$r_header.mck$l_system_offset #define mck$l_code mck$r_header.mck$l_code #define mck$l_frame_rev mck$r_header.mck$l_frame_rev #define mck$q_i_stat mck$r_correctable.mck$r_fill_4_.mck$q_i_stat #define mck$l_i_stat_0 mck$r_correctable.mck$r_fill_4_.mck$r_fill_5_.mck$l_i_stat_0 #define mck$l_i_stat_1 mck$r_correctable.mck$r_fill_4_.mck$r_fill_5_.mck$l_i_stat_1 #define mck$q_dc_stat mck$r_correctable.mck$r_fill_6_.mck$q_dc_stat #define mck$l_dc_stat_0 mck$r_correctable.mck$r_fill_6_.mck$r_fill_7_.mck$l_dc_stat_0 #define mck$l_dc_stat_1 mck$r_correctable.mck$r_fill_6_.mck$r_fill_7_.mck$l_dc_stat_1 #define mck$q_c_addr mck$r_correctable.mck$r_fill_8_.mck$q_c_addr #define mck$l_c_addr_0 mck$r_correctable.mck$r_fill_8_.mck$r_fill_9_.mck$l_c_addr_0 #define mck$l_c_addr_1 mck$r_correctable.mck$r_fill_8_.mck$r_fill_9_.mck$l_c_addr_1 #define mck$q_dc1_syndrome mck$r_correctable.mck$r_fill_10_.mck$q_dc1_syndrome #define mck$l_dc1_syndrome_0 mck$r_correctable.mck$r_fill_10_.mck$r_fill_11_.mck$l_dc1_syndrome_0 #define mck$l_dc1_syndrome_1 mck$r_correctable.mck$r_fill_10_.mck$r_fill_11_.mck$l_dc1_syndrome_1 #define mck$q_dc0_syndrome mck$r_correctable.mck$r_fill_12_.mck$q_dc0_syndrome #define mck$l_dc0_syndrome_0 mck$r_correctable.mck$r_fill_12_.mck$r_fill_13_.mck$l_dc0_syndrome_0 #define mck$l_dc0_syndrome_1 mck$r_correctable.mck$r_fill_12_.mck$r_fill_13_.mck$l_dc0_syndrome_1 #define mck$q_c_stat mck$r_correctable.mck$r_fill_14_.mck$q_c_stat #define mck$l_c_stat_0 mck$r_correctable.mck$r_fill_14_.mck$r_fill_15_.mck$l_c_stat_0 #define mck$l_c_stat_1 mck$r_correctable.mck$r_fill_14_.mck$r_fill_15_.mck$l_c_stat_1 #define mck$q_c_sts mck$r_correctable.mck$r_fill_16_.mck$q_c_sts #define mck$l_c_sts_0 mck$r_correctable.mck$r_fill_16_.mck$r_fill_17_.mck$l_c_sts_0 #define mck$l_c_sts_1 mck$r_correctable.mck$r_fill_16_.mck$r_fill_17_.mck$l_c_sts_1 #define mck$q_mm_stat mck$r_correctable.mck$r_fill_18_.mck$q_mm_stat #define mck$l_mm_stat_0 mck$r_correctable.mck$r_fill_18_.mck$r_fill_19_.mck$l_mm_stat_0 #define mck$l_mm_stat_1 mck$r_correctable.mck$r_fill_18_.mck$r_fill_19_.mck$l_mm_stat_1 #define mck$q_exc_addr mck$r_uncorrectable.mck$r_fill_20_.mck$q_exc_addr #define mck$l_exc_addr_0 mck$r_uncorrectable.mck$r_fill_20_.mck$r_fill_21_.mck$l_exc_addr_0 #define mck$l_exc_addr_1 mck$r_uncorrectable.mck$r_fill_20_.mck$r_fill_21_.mck$l_exc_addr_1 #define mck$q_ier_cm mck$r_uncorrectable.mck$r_fill_22_.mck$q_ier_cm #define mck$l_ier_cm_0 mck$r_uncorrectable.mck$r_fill_22_.mck$r_fill_23_.mck$l_ier_cm_0 #define mck$l_ier_cm_1 mck$r_uncorrectable.mck$r_fill_22_.mck$r_fill_23_.mck$l_ier_cm_1 #define mck$q_isum mck$r_uncorrectable.mck$r_fill_24_.mck$q_isum #define mck$l_isum_0 mck$r_uncorrectable.mck$r_fill_24_.mck$r_fill_25_.mck$l_isum_0 #define mck$l_isum_1 mck$r_uncorrectable.mck$r_fill_24_.mck$r_fill_25_.mck$l_isum_1 #define mck$q_pal_base mck$r_uncorrectable.mck$r_fill_26_.mck$q_pal_base #define mck$l_pal_base_0 mck$r_uncorrectable.mck$r_fill_26_.mck$r_fill_27_.mck$l_pal_base_0 #define mck$l_pal_base_1 mck$r_uncorrectable.mck$r_fill_26_.mck$r_fill_27_.mck$l_pal_base_1 #define mck$q_i_ctl mck$r_uncorrectable.mck$r_fill_28_.mck$q_i_ctl #define mck$l_i_ctl_0 mck$r_uncorrectable.mck$r_fill_28_.mck$r_fill_29_.mck$l_i_ctl_0 #define mck$l_i_ctl_1 mck$r_uncorrectable.mck$r_fill_28_.mck$r_fill_29_.mck$l_i_ctl_1 #define mck$q_pctx mck$r_uncorrectable.mck$r_fill_30_.mck$q_pctx #define mck$l_pctx_0 mck$r_uncorrectable.mck$r_fill_30_.mck$r_fill_31_.mck$l_pctx_0 #define mck$l_pctx_1 mck$r_uncorrectable.mck$r_fill_30_.mck$r_fill_31_.mck$l_pctx_1 #endif /* #if !defined(__VAXC) */ /* */ /* */ /* Platform-specific data in the logout frame below this point Should be placed */ /* in a separate MCHKxxyyDEF.SDL module, where xx is the hex value of the */ /* system type and yy is the hex value of the cpu generation. */ /* */ /* Processor detected error types */ /* */ #define MCK_PROC$K_CORR_ECC 67 #define MCK_PROC$K_BUGCHECK 71 #define MCK_PROC$K_OS_BUGCHECK 72 #define MCK_PROC$K_RETRYABLE_IRD 75 #define MCK_PROC$K_PROC_HRD_ERR 76 #define MCK_PROC$K_DC_TAG_PERR 79 #define MCK_PROC$K_SYS_HRD_ERR 257 #pragma __member_alignment __restore #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __restore /* Restore the previously-defined required ptr size */ #endif #ifdef __cplusplus } #endif #pragma __standard #endif /* __EV6MCHKDEF_LOADED */