/**/ /***************************************************************************/ /** **/ /** © 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:26:59 by OpenVMS SDL EV3-3 */ /* Source: 02-APR-1996 14:54:32 $1$DGA7274:[LIB_H.SRC]UQBDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $UQBDEF ***/ #ifndef __UQBDEF_LOADED #define __UQBDEF_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 /*+ */ /* UQB (Unit Queue Block) Definitions -- MSCP Server, TMSCP Server */ /* */ /* This data structure has all the information pertaining */ /* to a unit that is currently being served. It is most used */ /* for the list head of all requests for this unit. */ /*- */ #define UQB$M_SEQ 0x1 #define UQB$M_WRTPH 0x2 #define UQB$M_WRTPS 0x4 #define UQB$M_ONLINE 0x8 #define UQB$M_FLUSH 0x10 #define UQB$M_DUNN 0x20 #define UQB$M_C 0x1F #define UQB$M_D1 0x3E0 #define UQB$M_D0 0x7C00 #define UQB$K_ST_ONLINE 2 /* Unit is online to some host */ #define UQB$K_ST_OFFLINE 3 /* Unit is offline */ #define UQB$K_ST_AVAILABLE 4 /* Unit is available */ #ifdef __cplusplus /* Define structure prototypes */ struct _ucb; struct _hrb; #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 _uqb { #pragma __nomember_alignment struct _uqb *uqb$l_flink; /* Used to link together all */ struct _uqb *uqb$l_blink; /* UQBs being served */ unsigned short int uqb$w_size; /* Structure size in bytes */ unsigned char uqb$b_type; /* MSCP type structure */ unsigned char uqb$b_subtype; /* with a UQB subtype (5) */ unsigned short int uqb$w_state; /* Current state of this unit */ __union { unsigned short int uqb$w_flags; /* Unit usage */ __struct { unsigned uqb$v_seq : 1; /* Sequential command executing */ unsigned uqb$v_wrtph : 1; /* Unit is writelocked */ unsigned uqb$v_wrtps : 1; /* Unit was mounted /NOWRITE */ unsigned uqb$v_online : 1; /* Unit is ONLINE. */ unsigned uqb$v_flush : 1; /* Per-unit cache is being flushed */ unsigned uqb$v_dunn : 1; /* Device uses new naming */ unsigned uqb$v_fill_6_ : 2; } uqb$r_fill_1_; } uqb$r_fill_0_; unsigned short int uqb$w_old_unit; /* "Old Style" unit number */ unsigned short int uqb$w_current; /* Commands active on this unit */ unsigned short int uqb$w_mult_unit; /* This information is set up */ unsigned short int uqb$w_unit_flags; /* in ADDUNIT when the device */ __union { unsigned __int64 uqb$q_unit_id; /* is set /SERVED. */ __struct { unsigned int uqb$l_allocls; /* The unit identifier is made up */ unsigned short int uqb$w_unit; /* of the allocation class, the */ __union { unsigned short int uqb$w_devname; /* */ __struct { unsigned uqb$v_c : 5; /* UCB unit number, the controller */ unsigned uqb$v_d1 : 5; /* letter, and the D1 D0 fields */ unsigned uqb$v_d0 : 5; /* from the media ID field */ unsigned uqb$v_fill_7_ : 1; } uqb$r_fill_5_; } uqb$r_fill_4_; } uqb$r_fill_3_; } uqb$r_fill_2_; unsigned int uqb$l_reserved; /* */ struct _ucb *uqb$l_ucb; /* UCB address for this unit */ unsigned short int uqb$w_num_que; /* Host requests pending */ unsigned short int uqb$w_max_que; /* Most requests ever pending */ struct _hrb *uqb$l_blocked_fl; /* List head for HRBs pending */ struct _hrb *uqb$l_blocked_bl; /* sequential cmd completion */ unsigned char uqb$b_online [32]; /* Array of hosts with unit online */ unsigned int uqb$l_extra_io; /* Splinter requests */ unsigned int uqb$l_iocnt; /* Server contribution to total */ unsigned short int uqb$w_qlen; /* Server queue length for unit */ unsigned short int uqb$w_slun; /* Server local unit number */ /* max chars in Cluster unique */ /* device name ( dependency in */ /* PEDRIVER's PEM_DEF.SDL) */ unsigned char uqb$b_unique_dname_cnt; /* .ASCIC string with */ char uqb$t_unique_dname [15]; /* Cluster unique name for disk */ /* unit (obtained VIA GETDVI */ /* ALLDEVNAM item) */ /* Unit state definitions */ } UQB; #if !defined(__VAXC) #define uqb$w_flags uqb$r_fill_0_.uqb$w_flags #define uqb$v_seq uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_seq #define uqb$v_wrtph uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_wrtph #define uqb$v_wrtps uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_wrtps #define uqb$v_online uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_online #define uqb$v_flush uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_flush #define uqb$v_dunn uqb$r_fill_0_.uqb$r_fill_1_.uqb$v_dunn #define uqb$q_unit_id uqb$r_fill_2_.uqb$q_unit_id #define uqb$l_allocls uqb$r_fill_2_.uqb$r_fill_3_.uqb$l_allocls #define uqb$w_unit uqb$r_fill_2_.uqb$r_fill_3_.uqb$w_unit #define uqb$w_devname uqb$r_fill_2_.uqb$r_fill_3_.uqb$r_fill_4_.uqb$w_devname #define uqb$v_c uqb$r_fill_2_.uqb$r_fill_3_.uqb$r_fill_4_.uqb$r_fill_5_.uqb$v_c #define uqb$v_d1 uqb$r_fill_2_.uqb$r_fill_3_.uqb$r_fill_4_.uqb$r_fill_5_.uqb$v_d1 #define uqb$v_d0 uqb$r_fill_2_.uqb$r_fill_3_.uqb$r_fill_4_.uqb$r_fill_5_.uqb$v_d0 #endif /* #if !defined(__VAXC) */ #define UQB$M_ST_BOT 0x1 #define UQB$M_ST_DLS 0x2 #define UQB$M_ST_EOT 0x4 #define UQB$M_ST_LEOT 0x8 #define UQB$M_ST_PLS 0x10 #define UQB$M_ST_SEREX 0x20 #define UQB$M_ST_WRTPH 0x40 #ifdef __cplusplus /* Define structure prototypes */ struct _hqb; struct _hrb; #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 _tsrv_extension { #pragma __nomember_alignment UQB uqb$r_basic_uqb; struct _hqb *uqb$l_online_hqb; /* Unit is excl. onl. to this host. */ unsigned int uqb$l_memw_tot; /* Number of I/Os that had to wait. */ struct _hrb *uqb$l_memw_fl; /* Queue listhead for requests */ struct _hrb *uqb$l_memw_bl; /* in memory wait state. */ unsigned short int uqb$w_memw_cnt; /* Current memory stalls. */ unsigned short int uqb$w_memw_max; /* Most requests ever in MEMWAIT */ struct _hrb *uqb$l_cache_fl; /* Queue listhead for requests */ struct _hrb *uqb$l_cache_bl; /* in server cache. */ unsigned short int uqb$w_num_cache; /* Number of requests in cache. */ unsigned short int uqb$w_max_cache; /* Max ever cached */ void *uqb$l_freelist_fl; /* Queue listhead for available */ void *uqb$l_freelist_bl; /* local buffers */ unsigned short int uqb$w_buff_avail; /* Number of free buffers */ unsigned short int uqb$w_max_buff_avail; /* Max ever of free buffers */ unsigned short int uqb$w_buff_alloc; /* Number of allocated buffers */ unsigned short int uqb$w_max_buff_alloc; /* Max number of buffers alloc. */ unsigned int uqb$l_serv_rspid; /* Last RSPID checked in GCS */ unsigned int uqb$l_class_rspid; /* Last class driver RSPID */ unsigned int uqb$l_old_clssts; /* Class driver command status. */ unsigned short int uqb$w_tapem_skip; /* Storage for REPOS. OBJECT */ unsigned short int uqb$w_record_skip; /* Storage for REPOS. OBJECT */ unsigned int uqb$l_startstop; /* Start/stop time for drive */ unsigned int uqb$l_io_time; /* Cycle time of IO to local drive */ unsigned short int uqb$w_num_io; /* Number of IOs issued to drive */ unsigned short int uqb$w_max_io; /* Max num of IOs outstanding to */ /* to drive */ unsigned int uqb$l_arr_time; /* Average time it takes the host */ /* to respond to a request and */ /* send the next request out. */ unsigned short int uqb$w_num_flush; /* Number of flush commands. */ unsigned short int uqb$w_max_num_flush; /* Max number of flush commands. */ unsigned int uqb$l_position; /* Unit's current position */ __union { unsigned short int uqb$w_st_flags; /* Unit usage */ __struct { unsigned uqb$v_st_bot : 1; /* BOT */ unsigned uqb$v_st_dls : 1; /* Cached data lost */ unsigned uqb$v_st_eot : 1; /* End of tape */ unsigned uqb$v_st_leot : 1; /* Logical end of tape */ unsigned uqb$v_st_pls : 1; /* Position lost */ unsigned uqb$v_st_serex : 1; /* Serious exception state */ unsigned uqb$v_st_wrtph : 1; /* Write protected */ unsigned uqb$v_fill_10_ : 1; } uqb$r_fill_9_; } uqb$r_fill_8_; char uqb$b_fill_11_ [6]; } TSRV_EXTENSION; #if !defined(__VAXC) #define uqb$w_st_flags uqb$r_fill_8_.uqb$w_st_flags #define uqb$v_st_bot uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_bot #define uqb$v_st_dls uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_dls #define uqb$v_st_eot uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_eot #define uqb$v_st_leot uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_leot #define uqb$v_st_pls uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_pls #define uqb$v_st_serex uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_serex #define uqb$v_st_wrtph uqb$r_fill_8_.uqb$r_fill_9_.uqb$v_st_wrtph #endif /* #if !defined(__VAXC) */ #define UQB$C_LENGTH 208 #define UQB$K_LENGTH 208 #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 /* __UQBDEF_LOADED */