/**/ /***************************************************************************/ /** **/ /** © 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:37:38 by OpenVMS SDL EV3-3 */ /* Source: 26-JAN-2007 13:48:20 $1$DGA7274:[LIB_H.SRC]MPDEVDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $MPDEVDEF ***/ #ifndef __MPDEVDEF_LOADED #define __MPDEVDEF_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 /* Include base definitions */ #include #include #include #include #define MPDEV$M_ENABLE 0x1 #define MPDEV$M_REMOTE 0x2 #define MPDEV$M_POLLER 0x4 #define MPDEV$M_SCSI_ERROR_POLL 0x8 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _mpdev_sgn_flgs { /* Definition for Multipath sysgen */ /* parameters. */ #pragma __nomember_alignment __union { char mpdev$b_bits; __struct { unsigned mpdev$v_enable : 1; /* enable Multipath */ unsigned mpdev$v_remote : 1; /* enable Multipath for remote paths */ unsigned mpdev$v_poller : 1; /* enable Multipath poller */ unsigned mpdev$v_scsi_error_poll : 1; /* enable polling to flush SCSI errors */ unsigned mpdev$v_fill_2_ : 4; } mpdev$r_fill_1_; } mpdev$r_fill_0_; char mpdev$b_fill_3_ [3]; } MPDEV_SGN_FLGS; #if !defined(__VAXC) #define mpdev$v_enable mpdev$r_fill_0_.mpdev$r_fill_1_.mpdev$v_enable #define mpdev$v_remote mpdev$r_fill_0_.mpdev$r_fill_1_.mpdev$v_remote #define mpdev$v_poller mpdev$r_fill_0_.mpdev$r_fill_1_.mpdev$v_poller #define mpdev$v_scsi_error_poll mpdev$r_fill_0_.mpdev$r_fill_1_.mpdev$v_scsi_error_poll #endif /* #if !defined(__VAXC) */ #define MPDEV$M_ERRORLOG 0x1 #define MPDEV$M_INHIBIT_PATHBAL 0x2 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _mpdev_d1_flgs { /* Definition for Multipath sysgen */ /* debugging parameters. */ #pragma __nomember_alignment __union { char mpdev$b_bits; __struct { unsigned mpdev$v_errorlog : 1; /* enable error logging */ unsigned mpdev$v_inhibit_pathbal : 1; /* inhibit path balancing */ unsigned mpdev$v_fill_6_ : 6; } mpdev$r_fill_5_; } mpdev$r_fill_4_; char mpdev$b_fill_7_ [3]; } MPDEV_D1_FLGS; #if !defined(__VAXC) #define mpdev$v_errorlog mpdev$r_fill_4_.mpdev$r_fill_5_.mpdev$v_errorlog #define mpdev$v_inhibit_pathbal mpdev$r_fill_4_.mpdev$r_fill_5_.mpdev$v_inhibit_pathbal #endif /* #if !defined(__VAXC) */ /* Multipath specific data structure */ #define MPDEV$M_CP_MANUAL 0x1 #define MPDEV$M_PV_IRP_ACTIVE 0x2 #define MPDEV$M_PV_PACKACK_SUCCESS 0x4 #define MPDEV$M_WAS_FNDACT 0x8 #define MPDEV$M_PVIRP_SRVIO 0x10 #define MPDEV$M_DEVICE_POLL_ACTIVE 0x20 #define MPDEV$K_IO_ERROR 1 /* I/O error initiated path verification */ #define MPDEV$K_MANUAL_SWITCH 2 /* Manual switch requested */ #define MPDEV$K_FIND_ACTIVE 3 /* Proactive search for active path */ #define MPDEV$K_ST_STABLE 1 /* Path is stable */ #define MPDEV$K_ST_DRAINING 2 /* Draining I/O from current path */ #define MPDEV$K_ST_SWLCLCON 3 /* Path switching is being attempted to */ /* only local path that are connected */ #define MPDEV$K_ST_SWLCLANY 4 /* Path switching is being attempted to */ /* any local path */ #define MPDEV$K_ST_SWANY 5 /* Path switching is being attempted to any path */ #define MPDEV$K_ST_STACP 6 /* Attempt to stay on current path */ #define MPDEV$K_ST_RESIDUAL 7 /* Waiting for "leftover" PVIRP from earlier path ver */ /* ..can't go to STABLE until that PVIRP completes */ #define MPDEV$K_PACKACK_TIMLIM_SECS 5 /* Default time limit (seconds) */ #ifdef __cplusplus /* Define structure prototypes */ struct _irp$r_acb64_ast_overlay; struct _fdt; struct _irp$r_diobm; struct _cucb; struct _mpdev_acb; #endif /* #ifdef __cplusplus */ #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 _mpdev { #pragma __nomember_alignment struct _mpdev *mpdev$ps_flink; /* Forward pointer */ struct _mpdev *mpdev$ps_blink; /* Backward pointer */ unsigned short int mpdev$w_size; /* Size of the data buffer */ unsigned char mpdev$b_type; /* Data structure type */ unsigned char mpdev$b_subtype; /* Data structure sub-type */ struct _ucb *mpdev$ps_primary_ucb; /* Pointer to the primary ucb */ struct _ucb *mpdev$ps_current_ucb; /* Pointer to the current UCB in the multipath set. */ struct _fdt *mpdev$ps_primary_fdt; /* Saved value of primary path's UCB$PS_FDT_2 */ unsigned int mpdev$l_primary_affinity; /* Saved value of primary path's UCB$L_AFFINITY */ __union { unsigned int mpdev$l_set_flags; /* Status flags for whole set */ __struct { unsigned mpdev$v_cp_manual : 1; /* Current path selected via a manual switch */ unsigned mpdev$v_pv_irp_active : 1; /* A PV IRP is active */ unsigned mpdev$v_pv_packack_success : 1; /* Most recent PV packack completed successfully */ unsigned mpdev$v_was_fndact : 1; /* Event started out as "find active" */ unsigned mpdev$v_pvirp_srvio : 1; /* Current PV IRP was originally a SRVIO */ unsigned mpdev$v_device_poll_active : 1; /* Search for a working path in this set is in progress */ unsigned mpdev$v_fill_10_ : 2; } mpdev$r_fill_9_; } mpdev$r_fill_8_; struct _ddt *mpdev$ps_ddt; /* Pointer to the newly created DDT */ struct _ucb *mpdev$ps_pv_ucb; /* Pointer to the path UCB last issued a path */ /* verification IRP */ unsigned int mpdev$l_eb_type_code; /* Multipath event block codes */ unsigned int mpdev$l_eb_state; /* Multipath automatic path switching state */ /* Values are 1,2,3,... */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif unsigned __int64 mpdev$q_eb_start_time; /* Time this event started */ #pragma __nomember_alignment struct _ucb *mpdev$ps_eb_start_ucb; /* UCB of current path at start of the event */ int mpdev$l_eb_lclcon_retries; /* Number of scans of the multipath set when path */ /* verification is in progress and MPDEV$L_EB_STATE */ /* is MPDEV$K_ST_SWLCLCON */ unsigned int mpdev$l_eb_saved_mvirp_func; /* Saved value of the MVIRP's IRP$L_FUNC field while */ /* the IRP is being used as a path verification IRP */ unsigned int mpdev$l_eb_saved_mvirp_pid; /* Saved value of the MVIRP's IRP$L_PID field while */ /* the IRP is being used as a path verification IRP */ unsigned int mpdev$l_eb_saved_mvirp_sts; /* Saved value of the MVIRP's IRP$L_STS field while */ /* the IRP is being used as a path verification IRP */ unsigned int mpdev$l_eb_saved_mvirp_sts2; /* Saved value of the MVIRP's IRP$L_STS2 field while */ /* the IRP is being used as a path verification IRP */ __union { unsigned int mpdev$l_driver1; /* Driver-specific field */ struct _cucb *mpdev$ps_cucb; /* DK uses it as a CUCB field */ } mpdev$r_driver1_overlay; unsigned int mpdev$l_driver2; /* Driver-specific field */ unsigned int mpdev$l_driver3; /* Driver-specific field */ unsigned int mpdev$l_driver4; /* Driver-specific field */ struct _mpdev_acb *mpdev$ps_notify_mpdev_acb; /* Address of mpdev_acb */ int mpdev$l_eb_packack_rescans_left; /* Number of path/state rescans left for this packack */ unsigned int mpdev$l_eb_packack_timlim; /* Path verification packack time limit (ABSTIM value) */ char mpdev$b_fill_11_ [4]; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif unsigned __int64 mpdev$q_eb_end_time; /* Time this event ended */ #pragma __nomember_alignment struct _irp *mpdev$ps_eb_saved_mvirp; /* MVIRP whose values are saved */ unsigned int mpdev$l_eb_st_at_path_switch; /* State at last path switch */ unsigned int mpdev$l_num_path_ver; /* Number of path verifications started */ unsigned int mpdev$l_num_path_switch_auto; /* Number of automatic path switches */ unsigned int mpdev$l_num_path_switch_man; /* Number of manual path switches */ unsigned int mpdev$l_num_mvirp_ok; /* Number of times a MVIRP packack was completed successfully */ unsigned int mpdev$l_num_mvirp_fail; /* Number of times a MVIRP packack was failed */ unsigned int mpdev$l_num_mvirp_conc; /* Number of times a concurrent MVIRP packack was intercepted */ unsigned int mpdev$l_num_find_active; /* Number of times a "find active path" scan initiated */ struct _ucb *mpdev$ps_switch_to_ucb; /* New path selected during path verification */ unsigned int mpdev$l_failback_time; /* abstim of last failback attempt */ char mpdev$b_fill_12_ [4]; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif struct _irp *mpdev$ps_conc_packack_fl; #pragma __nomember_alignment struct _irp *mpdev$ps_conc_packack_bl; /* list of IRP's of concurrent packacks */ unsigned int mpdev$l_spare_1; unsigned int mpdev$l_spare_2; unsigned __int64 mpdev$q_primary_affinity; /* Saved value of primary path's UCB$L_AFFINITY */ } MPDEV; #if !defined(__VAXC) #define mpdev$l_set_flags mpdev$r_fill_8_.mpdev$l_set_flags #define mpdev$v_cp_manual mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_cp_manual #define mpdev$v_pv_irp_active mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_pv_irp_active #define mpdev$v_pv_packack_success mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_pv_packack_success #define mpdev$v_was_fndact mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_was_fndact #define mpdev$v_pvirp_srvio mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_pvirp_srvio #define mpdev$v_device_poll_active mpdev$r_fill_8_.mpdev$r_fill_9_.mpdev$v_device_poll_active #define mpdev$l_driver1 mpdev$r_driver1_overlay.mpdev$l_driver1 #define mpdev$ps_cucb mpdev$r_driver1_overlay.mpdev$ps_cucb #endif /* #if !defined(__VAXC) */ #define MPDEV$C_LENGTH 192 /* Length of a MPDEV */ #define MPDEV$K_LENGTH 192 /* Length of a MPDEV */ /* Poller path block data structure */ #define MPDEV_PPB$M_PATH_AVAILABLE 0x1 #define MPDEV_PPB$M_ALL_PATHS_DISABLED 0x2 #define MPDEV_PPB$M_NORMAL_TIMER 0x4 #define MPDEV_PPB$M_FAIL_TIMER 0x8 #define MPDEV_PPB$M_FAILBACK_PENDING 0x10 #define MPDEV_PPB$M_POLLING_IRP_ACTIVE 0x20 #define MPDEV_PPB$M_SCAN_ACTIVE 0x40 #define MPDEV_PPB$M_PATH_VERIFY_FAILED 0x80 #define MPDEV_PPB$M_ENABLED_FOUND 0x100 #define MPDEV_PPB$M_PVIP_RESPONDING 0x200 #define MPDEV_PPB$M_POLLING_STARTED 0x400 #define MPDEV_PPB$M_POLLING_ENABLED 0x1 #define MPDEV_PPB$M_PATH_IS_DISTANT 0x2 #ifdef __cplusplus /* Define structure prototypes */ struct _irp$r_acb64_ast_overlay; struct _sud; #endif /* #ifdef __cplusplus */ #pragma __member_alignment typedef struct _mpdev_ppb { struct _mpdev_ppb *mpdev_ppb$ps_flink; /* Forward link */ #pragma __member_alignment struct _mpdev_ppb *mpdev_ppb$ps_blink; /* Backward link */ #pragma __member_alignment unsigned short int mpdev_ppb$w_size; /* Structure size */ unsigned char mpdev_ppb$b_type; /* Structure type */ unsigned char mpdev_ppb$b_subtype; /* Structure subtype */ __union { unsigned int mpdev_ppb$l_status1; /* Statuses modified via polling routines */ __struct { unsigned mpdev_ppb$v_path_available : 1; /* Path was available at last poll (D) */ unsigned mpdev_ppb$v_all_paths_disabled : 1; /* All devices on this path were not testable at last poll */ unsigned mpdev_ppb$v_normal_timer : 1; /* Poller is waiting using "working path" timer interval */ unsigned mpdev_ppb$v_fail_timer : 1; /* Poller is waiting using "failed path" timer interval */ unsigned mpdev_ppb$v_failback_pending : 1; /* A device has failed over from local to remote; when a local path becomes \ */ /* available, check to see if it can be failed back to the local path */ unsigned mpdev_ppb$v_polling_irp_active : 1; /* Polling IRP is active */ unsigned mpdev_ppb$v_scan_active : 1; /* A poller scan of devices on this path is in progress */ unsigned mpdev_ppb$v_path_verify_failed : 1; /* In this scan: At least one poller path verify has failed */ unsigned mpdev_ppb$v_enabled_found : 1; /* In this scan: An enabled device was found */ unsigned mpdev_ppb$v_pvip_responding : 1; /* In this scan: Found a device in PVIP with "not responding" clear */ unsigned mpdev_ppb$v_polling_started : 1; /* Polling has been started on this path */ unsigned mpdev_ppb$v_fill_13_ : 21; } mpdev_ppb$r_status1_bits; } mpdev_ppb$r_status1_overlay; __union { unsigned int mpdev_ppb$l_status2; /* Statuses modified via SET DEVICE */ __struct { unsigned mpdev_ppb$v_polling_enabled : 1; /* Path check enabled (D) */ unsigned mpdev_ppb$v_path_is_distant : 1; /* Path is not local to this system */ unsigned mpdev_ppb$v_fill_14_ : 30; } mpdev_ppb$r_status2_bits; } mpdev_ppb$r_status2_overlay; struct _ucb *mpdev_ppb$ps_path_test_ucb; /* UCB most recently used to test the path (never zero) */ #pragma __member_alignment struct _ucb *mpdev_ppb$ps_path_test_ucb_cp; /* Current path on device when polling IRP issued (valid only if POLLING_IRP_ACTIVE\ ) */ #pragma __member_alignment struct _sud *mpdev_ppb$ps_sud_list; /* List head of SUDs for devices that share this path */ #pragma __member_alignment unsigned __int64 mpdev_ppb$q_transition_time; /* Time of most recent change to PATH_AVAILABLE flag */ unsigned __int64 mpdev_ppb$q_time_user_disabled; /* Time of most recent change to ALL_PATHS_DISABLED flag */ unsigned int mpdev_ppb$l_current_ucb_count; /* number of current UCB's on this path */ char mpdev_ppb$b_fill_15_ [4]; TQE mpdev_ppb$r_tqe; /* Timer Queue Entry */ IRP mpdev_ppb$r_irp; /* I/O Request Packet */ } MPDEV_PPB; #if !defined(__VAXC) #define mpdev_ppb$l_status1 mpdev_ppb$r_status1_overlay.mpdev_ppb$l_status1 #define mpdev_ppb$v_path_available mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_path_available #define mpdev_ppb$v_all_paths_disabled mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_all_paths_disabled #define mpdev_ppb$v_normal_timer mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_normal_timer #define mpdev_ppb$v_fail_timer mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_fail_timer #define mpdev_ppb$v_failback_pending mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_failback_pending #define mpdev_ppb$v_polling_irp_active mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_polling_irp_active #define mpdev_ppb$v_scan_active mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_scan_active #define mpdev_ppb$v_path_verify_failed mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_path_verify_failed #define mpdev_ppb$v_enabled_found mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_enabled_found #define mpdev_ppb$v_pvip_responding mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_pvip_responding #define mpdev_ppb$v_polling_started mpdev_ppb$r_status1_overlay.mpdev_ppb$r_status1_bits.mpdev_ppb$v_polling_started #define mpdev_ppb$l_status2 mpdev_ppb$r_status2_overlay.mpdev_ppb$l_status2 #define mpdev_ppb$v_polling_enabled mpdev_ppb$r_status2_overlay.mpdev_ppb$r_status2_bits.mpdev_ppb$v_polling_enabled #define mpdev_ppb$v_path_is_distant mpdev_ppb$r_status2_overlay.mpdev_ppb$r_status2_bits.mpdev_ppb$v_path_is_distant #endif /* #if !defined(__VAXC) */ #define MPDEV_PPB$C_LENGTH 680 /* Length of a MPDEV_PPB */ #define MPDEV_PPB$K_LENGTH 680 /* Length of a MPDEV_PPB */ /* List header data structure */ typedef struct _mpdev_quehdr { struct _mpdev *mpdev_quehdr$ps_flink; /* Forward link */ #pragma __member_alignment struct _mpdev *mpdev_quehdr$ps_blink; /* Backward link */ } MPDEV_QUEHDR; #define MPDEV_QUEHDR$C_LENGTH 8 /* Length of a MPDEV_QUEHDR */ #define MPDEV_QUEHDR$K_LENGTH 8 /* Length of a MPDEV_QUEHDR */ /* Mpdev acb to deliver completion AST in multipath system services */ #ifdef __cplusplus /* Define structure prototypes */ struct _irp$r_acb64_ast_overlay; struct _iosb; #endif /* #ifdef __cplusplus */ #pragma __member_alignment typedef struct _mpdev_acb { ACB64 mpdev_acb$r_base_acb; /* Imbeded ACB64 structure */ struct _ucb *mpdev_acb$ps_desired_path; /* Pointer to desired path UCB */ #pragma __member_alignment unsigned int mpdev_acb$l_spare_1; /* spare (we'd get a filler longword here, anyway) */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _iosb *mpdev_acb$pq_iosb_address; /* Pointer to IOSB */ #else unsigned __int64 mpdev_acb$pq_iosb_address; #endif #pragma __member_alignment unsigned int mpdev_acb$l_efn; /* Event flag */ unsigned int mpdev_acb$l_status; /* Status */ unsigned int mpdev_acb$l_imgcnt; /* Image count */ unsigned int mpdev_acb$l_spare_2; /* another spare (again, we'd get a filler longword here) */ unsigned __int64 mpdev_acb$q_flags; /* flags */ } MPDEV_ACB; #define MPDEV_ACB$C_LENGTH 104 /* Length of a MPDEV_ACB */ #define MPDEV_ACB$K_LENGTH 104 /* Length of a MPDEV_ACB */ /**************************************************************************** */ /* */ /* Miscellaneous Multipath-related constants that are not public */ /* */ /* Note: Constants that are used in a specific cell of a data structure are */ /* defined inside the definition of the structure. */ /* Define constants used by the "bent pin" heuristic in MPDEV$PV_TRACK_PVS. */ /* If in the current tracking interval of MPDEV$K_TRACKING_INTERVAL seconds */ /* we've successfully successfully completed at least MPDEV$K_TRACKING_THRESHOLD */ /* MVIRP packacks, then fail any additional MVIRP packacks on this path for */ /* the remainder of the tracking interval. */ /* */ /* These value were chosen so that this heuristic could come into play if a path */ /* were to enter into mount verification repeatedly due to frequent SCSI command */ /* timeouts, which are 24 seconds for disk commands. */ #define MPDEV$K_TRACKING_INTERVAL 300 /* Time in seconds */ #define MPDEV$K_TRACKING_THRESHOLD 10 /* Number of invocations */ /* Constant used in [CLIUTL]SETDEVICE.B32 to check for the maximum displayable path name */ #define MPDEV$K_MAX_DSPLYPATH_SIZE 292 /* X-38 */ /* Symbolic constant for the time-limit, in seconds, for the deferral of path */ /* balancing when a newly configured path is not yet available for use. */ #define MPDEV$K_PATHBAL_AVAIL_WAIT 5 #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 /* __MPDEVDEF_LOADED */