/**/ /***************************************************************************/ /** **/ /** © 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:41 by OpenVMS SDL EV3-3 */ /* Source: 04-APR-2006 10:10:43 $1$DGA7274:[LIB_H.SRC]PCTXDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $PCTXDEF ***/ #ifndef __PCTXDEF_LOADED #define __PCTXDEF_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: FCLE_MBD (FCLE API Mapped Buffer Descriptor) */ /* */ /* */ /*- */ #ifdef __cplusplus /* Define structure prototypes */ struct _mbd; struct _pte; #endif /* #ifdef __cplusplus */ #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 _fcle_mbd { /* Flink and Blink pointers */ #pragma __nomember_alignment struct _mbd *fcle_mbd$ps_qfl; struct _mbd *fcle_mbd$ps_qbl; /* Size, type and subtype in standard OpenVMS structure locations */ short int fcle_mbd$w_size; char fcle_mbd$b_type; char fcle_mbd$b_subtype; unsigned int fcle_mbd$l_flags; /* Quadword available for whatever the user wants */ unsigned __int64 fcle_mbd$q_user_data; /* Logical Size - this is the number of leading bytes of this buffer which */ /* will be read or written the next time this MBD is used. It will be initialized */ /* to the number of bytes mapped. It can be changed by a caller prior to use and */ /* read by a caller after use. Again: this size always refers to the leading */ /* bytes of the buffer */ int fcle_mbd$is_logical_size; /* This is only used to store a VA if the caller mapping a buffer passes in a */ /* VA, and it's only so the caller can always find a VA from an MBD. If they */ /* want to use it for something else that's OK with the Kernel, because it */ /* never references the address of a buffer mapped by an MBD */ __int64 fcle_mbd$q_va; /* Buffer byte offset */ int fcle_mbd$is_boff; /* Mapped size, the absolute maximum number of bytes which can be */ /* addressed by this MBD. */ int fcle_mbd$is_bcnt; /* Buffer SVAPTE */ struct _pte *fcle_mbd$ps_svapte; /* Number of physical pages spanned (and MRs allocated) */ int fcle_mbd$is_pages; /* Number of bytes transferred */ int fcle_mbd$is_transfer_bcnt; } FCLE_MBD; /* */ /* There is one PCBVEC for each protocol (PCTX) so protocol specific */ /* data is unioned in the PCBVEC to save space. */ /* */ #define PCBVEC$K_FORMAT_VERSION 2 #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 _pcbvec { /* */ /* Only bump this version number if the PCBVEC is changed in */ /* such a way that all drivers will need to be recompiled */ /* */ #pragma __nomember_alignment int pcbvec$is_format_version; /* */ /* Unused entries have been added in the middle of the common vectors */ /* at the end of the protocol specific vectors. Use these unused */ /* entries add new vectors. This will save us from */ /* having to compile all drivers when only one protocol is */ /* affected. */ /* */ __union { int (*pcbvec$ps_vector_array [1])(); __struct { int (*pcbvec$ps_exchange_aborted)(); int (*pcbvec$ps_prli_ind)(); int (*pcbvec$ps_prlo_ind)(); int (*pcbvec$ps_buffer_wanted)(); int (*pcbvec$ps_buffer_filled)(); int (*pcbvec$ps_buffer_released)(); int (*pcbvec$ps_pause)(); int (*pcbvec$ps_resume)(); int (*pcbvec$ps_link_state)(); int (*pcbvec$ps_pause_fc_la)(); int (*pcbvec$ps_resume_fc_la)(); int (*pcbvec$ps_cmd_timeout)(); int (*pcbvec$ps_els_ind)(); int (*pcbvec$ps_els_cnf)(); int (*pcbvec$ps_port_state)(); int (*pcbvec$ps_change_preferred)(); int (*pcbvec$ps_create_target)(); /* X-6 */ int (*pcbvec$ps_unused2)(); int (*pcbvec$ps_unused3)(); int (*pcbvec$ps_unused4)(); int (*pcbvec$ps_unused5)(); /* */ /* This union is for data that is only needed by a specific */ /* protocol. */ /* */ __union { __struct { int (*pcbvec$ps_rbun_init)(); } pcbvec$r_fcp_structure; __struct { int (*pcbvec$ps_confirmation)(); int (*pcbvec$ps_indication)(); int (*pcbvec$ps_get_preq_buf)(); int (*pcbvec$ps_ret_preq_buf)(); int (*pcbvec$ps_unused6)(); int (*pcbvec$ps_unused7)(); int (*pcbvec$ps_unused8)(); int (*pcbvec$ps_unused9)(); int (*pcbvec$ps_unused10)(); } pcbvec$r_fcle_structure; } pcbvec$r_protocol_vector_union; } pcbvec$r_vectors_structure; } pcbvec$r_vector_union; char pcbvec$b_fill_0_ [4]; } PCBVEC; #if !defined(__VAXC) #define pcbvec$ps_vector_array pcbvec$r_vector_union.pcbvec$ps_vector_array #define pcbvec$r_vectors_structure pcbvec$r_vector_union.pcbvec$r_vectors_structure #define pcbvec$ps_exchange_aborted pcbvec$r_vectors_structure.pcbvec$ps_exchange_aborted #define pcbvec$ps_prli_ind pcbvec$r_vectors_structure.pcbvec$ps_prli_ind #define pcbvec$ps_prlo_ind pcbvec$r_vectors_structure.pcbvec$ps_prlo_ind #define pcbvec$ps_buffer_wanted pcbvec$r_vectors_structure.pcbvec$ps_buffer_wanted #define pcbvec$ps_buffer_filled pcbvec$r_vectors_structure.pcbvec$ps_buffer_filled #define pcbvec$ps_buffer_released pcbvec$r_vectors_structure.pcbvec$ps_buffer_released #define pcbvec$ps_pause pcbvec$r_vectors_structure.pcbvec$ps_pause #define pcbvec$ps_resume pcbvec$r_vectors_structure.pcbvec$ps_resume #define pcbvec$ps_link_state pcbvec$r_vectors_structure.pcbvec$ps_link_state #define pcbvec$ps_pause_fc_la pcbvec$r_vectors_structure.pcbvec$ps_pause_fc_la #define pcbvec$ps_resume_fc_la pcbvec$r_vectors_structure.pcbvec$ps_resume_fc_la #define pcbvec$ps_cmd_timeout pcbvec$r_vectors_structure.pcbvec$ps_cmd_timeout #define pcbvec$ps_els_ind pcbvec$r_vectors_structure.pcbvec$ps_els_ind #define pcbvec$ps_els_cnf pcbvec$r_vectors_structure.pcbvec$ps_els_cnf #define pcbvec$ps_port_state pcbvec$r_vectors_structure.pcbvec$ps_port_state #define pcbvec$ps_change_preferred pcbvec$r_vectors_structure.pcbvec$ps_change_preferred #define pcbvec$ps_create_target pcbvec$r_vectors_structure.pcbvec$ps_create_target #define pcbvec$ps_unused2 pcbvec$r_vectors_structure.pcbvec$ps_unused2 #define pcbvec$ps_unused3 pcbvec$r_vectors_structure.pcbvec$ps_unused3 #define pcbvec$ps_unused4 pcbvec$r_vectors_structure.pcbvec$ps_unused4 #define pcbvec$ps_unused5 pcbvec$r_vectors_structure.pcbvec$ps_unused5 #define pcbvec$r_protocol_vector_union pcbvec$r_vectors_structure.pcbvec$r_protocol_vector_union #define pcbvec$r_fcp_structure pcbvec$r_protocol_vector_union.pcbvec$r_fcp_structure #define pcbvec$ps_rbun_init pcbvec$r_fcp_structure.pcbvec$ps_rbun_init #define pcbvec$r_fcle_structure pcbvec$r_protocol_vector_union.pcbvec$r_fcle_structure #define pcbvec$ps_confirmation pcbvec$r_fcle_structure.pcbvec$ps_confirmation #define pcbvec$ps_indication pcbvec$r_fcle_structure.pcbvec$ps_indication #define pcbvec$ps_get_preq_buf pcbvec$r_fcle_structure.pcbvec$ps_get_preq_buf #define pcbvec$ps_ret_preq_buf pcbvec$r_fcle_structure.pcbvec$ps_ret_preq_buf #define pcbvec$ps_unused6 pcbvec$r_fcle_structure.pcbvec$ps_unused6 #define pcbvec$ps_unused7 pcbvec$r_fcle_structure.pcbvec$ps_unused7 #define pcbvec$ps_unused8 pcbvec$r_fcle_structure.pcbvec$ps_unused8 #define pcbvec$ps_unused9 pcbvec$r_fcle_structure.pcbvec$ps_unused9 #define pcbvec$ps_unused10 pcbvec$r_fcle_structure.pcbvec$ps_unused10 #endif /* #if !defined(__VAXC) */ /* */ /* There is only one ULPVEC per system */ /* */ #define ULPVEC$K_FORMAT_VERSION 3 #define ULP$K_DEBUG 0 #define ULP$K_FCP_SCSI 1 #define ULP$K_LAN 2 #define ULP$K_ELS 3 /* Define buffer context values for ULP$MAP */ #define ULP$K_GENERAL_DATA 1 #define ULP$K_FCP_DATA 2 #define ULP$K_FCP_CMD_RSP 3 #define ULP$K_ELS_REQ_RSP 4 #define ULP$K_QUEUE_BUFFER 5 #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 _ulpvec { /* */ /* Only bump this version number if the ULPVEC is changed in */ /* such a way that all drivers will need to be recompiled */ /* */ #pragma __nomember_alignment int ulpvec$is_format_version; __union { int (*ulpvec$ps_vector_array [1])(); __struct { /* ************************************************** */ /* ULP (Upper Level Protocol) Vectors */ /* ************************************************** */ int (*ulpvec$ps_disconnect)(); int (*ulpvec$ps_get_requests)(); int (*ulpvec$ps_get_request_data)(); int (*ulpvec$ps_get_exchanges)(); int (*ulpvec$ps_get_exchange_data)(); int (*ulpvec$ps_map)(); int (*ulpvec$ps_unmap)(); int (*ulpvec$ps_reset)(); int (*ulpvec$ps_queue_buffer_ulp)(); int (*ulpvec$ps_queue_buffer_exchange)(); int (*ulpvec$ps_send_sequence)(); int (*ulpvec$ps_open_exchange)(); int (*ulpvec$ps_abort_request)(); int (*ulpvec$ps_abort_exchange)(); int (*ulpvec$ps_broadcast_frame)(); int (*ulpvec$ps_alloc_mbd)(); int (*ulpvec$ps_free_mbd)(); int (*ulpvec$ps_clone_mbd)(); int (*ulpvec$ps_deleted_vector)(); int (*ulpvec$ps_get_fcla)(); int (*ulpvec$ps_validate_fcla)(); int (*ulpvec$ps_init_link)(); int (*ulpvec$ps_get_port_wwid)(); int (*ulpvec$ps_cancel_request)(); int (*ulpvec$ps_alloc_mapped_buffer)(); int (*ulpvec$ps_free_mapped_buffer)(); int (*ulpvec$ps_get_link_data)(); int (*ulpvec$ps_fp_request)(); int (*ulpvec$ps_fp_send)(); int (*ulpvec$ps_free_rbun)(); int (*ulpvec$ps_bus_address)(); int (*ulpvec$ps_unused1)(); int (*ulpvec$ps_unused2)(); int (*ulpvec$ps_unused3)(); int (*ulpvec$ps_unused4)(); /* *************************************************** */ /* ELS (Extended Link Service) Vectors */ /* *************************************************** */ int (*ulpvec$ps_els_alloc_payloads)(); int (*ulpvec$ps_els_dealloc_payloads)(); int (*ulpvec$ps_els_send)(); int (*ulpvec$ps_els_send_cmd)(); int (*ulpvec$ps_els_send_rsp)(); int (*ulpvec$ps_alloc_ls_rjt)(); int (*ulpvec$ps_alloc_ls_acc)(); int (*ulpvec$ps_unused5)(); int (*ulpvec$ps_unused6)(); int (*ulpvec$ps_unused7)(); /* */ /* The following data are specific to particular */ /* protocols but we can't union then together because */ /* there is only one ULPVEC per system. */ /* */ /* ******************************************************** */ /* FCP (SCSI FibreChannel Protocol) Vectors */ /* ******************************************************** */ int (*ulpvec$ps_fcp_alloc_payloads)(); int (*ulpvec$ps_fcp_dealloc_payloads)(); int (*ulpvec$ps_fcp_send)(); int (*ulpvec$ps_completion_processing)(); int (*ulpvec$ps_write_data)(); int (*ulpvec$ps_read_data)(); int (*ulpvec$ps_fcp_send_rsp)(); int (*ulpvec$ps_set_connection_char)(); int (*ulpvec$ps_fcp_abort)(); int (*ulpvec$ps_event)(); int (*ulpvec$ps_trigger)(); /* X-8 */ int (*ulpvec$ps_unused9)(); int (*ulpvec$ps_unused10)(); /* ********************************************************* */ /* FCLE (LAN over Fibre Channel) Vectors */ /* ********************************************************* */ int (*ulpvec$ps_get_fc_la_data)(); int (*ulpvec$ps_broadcast)(); int (*ulpvec$ps_sequence)(); int (*ulpvec$ps_fcle_abort)(); int (*ulpvec$ps_close_exchange)(); int (*ulpvec$ps_ret_mbd_list)(); int (*ulpvec$ps_hard_reset)(); } ulpvec$r_vectors_structure; } ulpvec$r_vector_union; /* Define ULP_ID values */ } ULPVEC; #if !defined(__VAXC) #define ulpvec$ps_vector_array ulpvec$r_vector_union.ulpvec$ps_vector_array #define ulpvec$r_vectors_structure ulpvec$r_vector_union.ulpvec$r_vectors_structure #define ulpvec$ps_disconnect ulpvec$r_vectors_structure.ulpvec$ps_disconnect #define ulpvec$ps_get_requests ulpvec$r_vectors_structure.ulpvec$ps_get_requests #define ulpvec$ps_get_request_data ulpvec$r_vectors_structure.ulpvec$ps_get_request_data #define ulpvec$ps_get_exchanges ulpvec$r_vectors_structure.ulpvec$ps_get_exchanges #define ulpvec$ps_get_exchange_data ulpvec$r_vectors_structure.ulpvec$ps_get_exchange_data #define ulpvec$ps_map ulpvec$r_vectors_structure.ulpvec$ps_map #define ulpvec$ps_unmap ulpvec$r_vectors_structure.ulpvec$ps_unmap #define ulpvec$ps_reset ulpvec$r_vectors_structure.ulpvec$ps_reset #define ulpvec$ps_queue_buffer_ulp ulpvec$r_vectors_structure.ulpvec$ps_queue_buffer_ulp #define ulpvec$ps_queue_buffer_exchange ulpvec$r_vectors_structure.ulpvec$ps_queue_buffer_exchange #define ulpvec$ps_send_sequence ulpvec$r_vectors_structure.ulpvec$ps_send_sequence #define ulpvec$ps_open_exchange ulpvec$r_vectors_structure.ulpvec$ps_open_exchange #define ulpvec$ps_abort_request ulpvec$r_vectors_structure.ulpvec$ps_abort_request #define ulpvec$ps_abort_exchange ulpvec$r_vectors_structure.ulpvec$ps_abort_exchange #define ulpvec$ps_broadcast_frame ulpvec$r_vectors_structure.ulpvec$ps_broadcast_frame #define ulpvec$ps_alloc_mbd ulpvec$r_vectors_structure.ulpvec$ps_alloc_mbd #define ulpvec$ps_free_mbd ulpvec$r_vectors_structure.ulpvec$ps_free_mbd #define ulpvec$ps_clone_mbd ulpvec$r_vectors_structure.ulpvec$ps_clone_mbd #define ulpvec$ps_deleted_vector ulpvec$r_vectors_structure.ulpvec$ps_deleted_vector #define ulpvec$ps_get_fcla ulpvec$r_vectors_structure.ulpvec$ps_get_fcla #define ulpvec$ps_validate_fcla ulpvec$r_vectors_structure.ulpvec$ps_validate_fcla #define ulpvec$ps_init_link ulpvec$r_vectors_structure.ulpvec$ps_init_link #define ulpvec$ps_get_port_wwid ulpvec$r_vectors_structure.ulpvec$ps_get_port_wwid #define ulpvec$ps_cancel_request ulpvec$r_vectors_structure.ulpvec$ps_cancel_request #define ulpvec$ps_alloc_mapped_buffer ulpvec$r_vectors_structure.ulpvec$ps_alloc_mapped_buffer #define ulpvec$ps_free_mapped_buffer ulpvec$r_vectors_structure.ulpvec$ps_free_mapped_buffer #define ulpvec$ps_get_link_data ulpvec$r_vectors_structure.ulpvec$ps_get_link_data #define ulpvec$ps_fp_request ulpvec$r_vectors_structure.ulpvec$ps_fp_request #define ulpvec$ps_fp_send ulpvec$r_vectors_structure.ulpvec$ps_fp_send #define ulpvec$ps_free_rbun ulpvec$r_vectors_structure.ulpvec$ps_free_rbun #define ulpvec$ps_bus_address ulpvec$r_vectors_structure.ulpvec$ps_bus_address #define ulpvec$ps_unused1 ulpvec$r_vectors_structure.ulpvec$ps_unused1 #define ulpvec$ps_unused2 ulpvec$r_vectors_structure.ulpvec$ps_unused2 #define ulpvec$ps_unused3 ulpvec$r_vectors_structure.ulpvec$ps_unused3 #define ulpvec$ps_unused4 ulpvec$r_vectors_structure.ulpvec$ps_unused4 #define ulpvec$ps_els_alloc_payloads ulpvec$r_vectors_structure.ulpvec$ps_els_alloc_payloads #define ulpvec$ps_els_dealloc_payloads ulpvec$r_vectors_structure.ulpvec$ps_els_dealloc_payloads #define ulpvec$ps_els_send ulpvec$r_vectors_structure.ulpvec$ps_els_send #define ulpvec$ps_els_send_cmd ulpvec$r_vectors_structure.ulpvec$ps_els_send_cmd #define ulpvec$ps_els_send_rsp ulpvec$r_vectors_structure.ulpvec$ps_els_send_rsp #define ulpvec$ps_alloc_ls_rjt ulpvec$r_vectors_structure.ulpvec$ps_alloc_ls_rjt #define ulpvec$ps_alloc_ls_acc ulpvec$r_vectors_structure.ulpvec$ps_alloc_ls_acc #define ulpvec$ps_unused5 ulpvec$r_vectors_structure.ulpvec$ps_unused5 #define ulpvec$ps_unused6 ulpvec$r_vectors_structure.ulpvec$ps_unused6 #define ulpvec$ps_unused7 ulpvec$r_vectors_structure.ulpvec$ps_unused7 #define ulpvec$ps_fcp_alloc_payloads ulpvec$r_vectors_structure.ulpvec$ps_fcp_alloc_payloads #define ulpvec$ps_fcp_dealloc_payloads ulpvec$r_vectors_structure.ulpvec$ps_fcp_dealloc_payloads #define ulpvec$ps_fcp_send ulpvec$r_vectors_structure.ulpvec$ps_fcp_send #define ulpvec$ps_completion_processing ulpvec$r_vectors_structure.ulpvec$ps_completion_processing #define ulpvec$ps_write_data ulpvec$r_vectors_structure.ulpvec$ps_write_data #define ulpvec$ps_read_data ulpvec$r_vectors_structure.ulpvec$ps_read_data #define ulpvec$ps_fcp_send_rsp ulpvec$r_vectors_structure.ulpvec$ps_fcp_send_rsp #define ulpvec$ps_set_connection_char ulpvec$r_vectors_structure.ulpvec$ps_set_connection_char #define ulpvec$ps_fcp_abort ulpvec$r_vectors_structure.ulpvec$ps_fcp_abort #define ulpvec$ps_event ulpvec$r_vectors_structure.ulpvec$ps_event #define ulpvec$ps_trigger ulpvec$r_vectors_structure.ulpvec$ps_trigger #define ulpvec$ps_unused9 ulpvec$r_vectors_structure.ulpvec$ps_unused9 #define ulpvec$ps_unused10 ulpvec$r_vectors_structure.ulpvec$ps_unused10 #define ulpvec$ps_get_fc_la_data ulpvec$r_vectors_structure.ulpvec$ps_get_fc_la_data #define ulpvec$ps_broadcast ulpvec$r_vectors_structure.ulpvec$ps_broadcast #define ulpvec$ps_sequence ulpvec$r_vectors_structure.ulpvec$ps_sequence #define ulpvec$ps_fcle_abort ulpvec$r_vectors_structure.ulpvec$ps_fcle_abort #define ulpvec$ps_close_exchange ulpvec$r_vectors_structure.ulpvec$ps_close_exchange #define ulpvec$ps_ret_mbd_list ulpvec$r_vectors_structure.ulpvec$ps_ret_mbd_list #define ulpvec$ps_hard_reset ulpvec$r_vectors_structure.ulpvec$ps_hard_reset #endif /* #if !defined(__VAXC) */ /*+ */ /* */ /* Define: PCTX (Protocol Context) */ /* */ /* One Protocol Context is created for each ULP which connects to the Shell */ /* */ /*- */ #define PCTX$M_BROADCAST 0x1 #define PCTX$M_INITIAL_PREEMPT 0x2 #define PCTX$K_FORMAT_VERSION 2 /* format of the PCTX */ #define PCTX$M_CLASS2 4 #define PCTX$M_CLASS3 8 #define PCTX$V_CLASS2 2 #define PCTX$V_CLASS3 3 #ifdef __cplusplus /* Define structure prototypes */ struct _sctx; struct _uctx; struct _ucb; struct _kpb; struct _tqe; struct _fcp_rbun; struct _crctx; struct _fccd; #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 _pctx { /* Forward link */ #pragma __nomember_alignment void *pctx$ps_qfl; /* Backward link */ void *pctx$ps_qbl; /* Structure (allocation) size */ short int pctx$w_size; /* Structure type (DYN$C_MISC) */ char pctx$b_type; /* Structure subtype (DYN$C_PCTX) */ char pctx$b_subtype; /* Define some flags */ __union { /* All flags */ int pctx$l_flags; /* Individual flags */ __union { unsigned int pctx$l_flags_structure; __struct { unsigned pctx$v_broadcast : 1; /* Boolean: true if protocol can do broadcast */ unsigned pctx$v_initial_preempt : 1; /* Boolean: true if initial preemptive target */ /* creation has taken place. */ unsigned pctx$v_fill_3_ : 6; } pctx$r_fill_2_; } pctx$r_fill_1_; } pctx$r_flags_overlay; /* */ /* Only bump this version number if the PCTX is changed in */ /* such a way that all drivers will need to be recompiled */ /* */ int pctx$is_format_version; /* Shell Context pointer */ struct _sctx *pctx$ps_sctx; /* Unit Context pointer */ struct _uctx *pctx$ps_uctx; /* Ring on which this protocol is enabled */ int pctx$is_ring; /* Return the UCB to the ULP */ struct _ucb *pctx$ps_fc_ad_ucb; /* ULP fork lock index */ unsigned int pctx$is_flck; /* Protocol Callback Context to be passed to each callback */ unsigned __int64 pctx$q_pcbctx; /* ULP KPB (this does not need to be specified and it may be NULL) */ struct _kpb *pctx$ps_ulp_kpb; /* Protocol ID given to the adapter ( FCPH$K_ ) */ unsigned int pctx$is_protocol; /* Protocol specified when ULP connected ( ULP$K_ ) */ unsigned int pctx$is_protocol_id; /* Load PCI address space for adapter ID information */ void *pctx$ps_chs; /* Pointer used to define a protocol port specific data */ /* for the Fibre Channel adapter. */ void *pctx$ps_protodef; /* ULP vector pointer */ struct _ulpvec *pctx$ps_ulpvec; /* PCB vector structure */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif PCBVEC pctx$r_pcbvec; /* */ /* This union is for protocol specific data cells */ /* */ __union { /* */ /* FCP protocol specific */ /* */ #pragma __nomember_alignment __struct { /* Resource Bundle Lookaside List pointer */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif void *pctx$ps_rbun_lal; /* Sequence number to allow LAL to be used with EXE$LAL_INSERT/REMOVE_FIRST */ #pragma __nomember_alignment unsigned int pctx$l_rbun_lal_seqnum; /* Prebuilt READ IOCB command longword (i.e. FCP_IREAD for FCP protocol) */ unsigned int pctx$l_fp_iocb_read_icb; /* Maximum data buffer byte count in an RBUN */ int pctx$l_max_rbun_bcnt; /* Prebuilt WRITE IOCB command longword (i.e. FCP_IWRITE for FCP protocol) */ unsigned int pctx$l_fp_iocb_write_icb; /* Value at which we'll start drain TQE */ int pctx$l_rbun_drain_threshold; /* Total number of RBUNs, free and in use */ int pctx$l_total_rbuns; /* Number of unhandled RBUN allocation failures */ int pctx$l_rbun_alloc_failures; /* TQE used to check & drain RBUNs */ struct _tqe *pctx$ps_rbun_drain_tqe; char pctx$b_fill_4_ [4]; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __union { #pragma __nomember_alignment unsigned __int64 pctx$q_rbun_drain_active; __struct { struct _fcp_rbun *pctx$ps_rbun_drain_lal; unsigned int pctx$l_rbun_drain_count; } pctx$r_rbun_drain_struct; } pctx$r_rbun_drain_union; /* */ /* These two values are pointers to the SPDT data */ /* */ void *pctx$l_spl_port; unsigned int *pctx$ps_max_fp_bcnt; void *pctx$l_spl_dyn; /* X-7 */ } pctx$r_fcpdef; /* */ /* FCLE protocol specific */ /* */ __struct { /* */ struct _crctx *pctx$ps_fcle_load_crctx; /* */ struct _crctx *pctx$ps_fcle_alloc_crctx; /* size of the pre-queued adapter buffers for the fcle ring */ unsigned int pctx$l_fcle_preq_buf_size; /* list of available FCCDs */ struct _fccd *pctx$ps_fcle_fccd_list; /* A count of mbd_list arrays passed up the LAN ULP. */ /* The count is decremented as the ULP returns each mbd_list. */ unsigned int pctx$l_outstanding_mbd_lists; /* Number of FCCDs to preallocate */ int pctx$l_fcle_max_fccds; /* */ /* LAN Driver private data */ /* */ unsigned int pctx$l_lan_p1; unsigned int pctx$l_lan_p2; unsigned int pctx$l_lan_p3; unsigned int pctx$l_lan_p4; unsigned int pctx$l_lan_p5; unsigned int pctx$l_lan_p6; /* */ /* unspecified reserved data */ /* */ unsigned int pctx$l_fcle_p1; unsigned int pctx$l_fcle_p2; unsigned int pctx$l_fcle_p3; unsigned int pctx$l_fcle_p4; unsigned int pctx$l_fcle_p5; unsigned int pctx$l_fcle_p6; } pctx$r_fcledef; } pctx$r_protocol_specific_data; /* */ /* These constants define the Fibre Channel class of service */ /* capabilities of the connection */ /* */ } PCTX; #if !defined(__VAXC) #define pctx$l_flags pctx$r_flags_overlay.pctx$l_flags #define pctx$l_flags_structure pctx$r_flags_overlay.pctx$r_fill_1_.pctx$l_flags_structure #define pctx$v_broadcast pctx$r_flags_overlay.pctx$r_fill_1_.pctx$r_fill_2_.pctx$v_broadcast #define pctx$v_initial_preempt pctx$r_flags_overlay.pctx$r_fill_1_.pctx$r_fill_2_.pctx$v_initial_preempt #define pctx$r_fcpdef pctx$r_protocol_specific_data.pctx$r_fcpdef #define pctx$ps_rbun_lal pctx$r_fcpdef.pctx$ps_rbun_lal #define pctx$l_rbun_lal_seqnum pctx$r_fcpdef.pctx$l_rbun_lal_seqnum #define pctx$l_fp_iocb_read_icb pctx$r_fcpdef.pctx$l_fp_iocb_read_icb #define pctx$l_max_rbun_bcnt pctx$r_fcpdef.pctx$l_max_rbun_bcnt #define pctx$l_fp_iocb_write_icb pctx$r_fcpdef.pctx$l_fp_iocb_write_icb #define pctx$l_rbun_drain_threshold pctx$r_fcpdef.pctx$l_rbun_drain_threshold #define pctx$l_total_rbuns pctx$r_fcpdef.pctx$l_total_rbuns #define pctx$l_rbun_alloc_failures pctx$r_fcpdef.pctx$l_rbun_alloc_failures #define pctx$ps_rbun_drain_tqe pctx$r_fcpdef.pctx$ps_rbun_drain_tqe #define pctx$r_rbun_drain_union pctx$r_fcpdef.pctx$r_rbun_drain_union #define pctx$q_rbun_drain_active pctx$r_rbun_drain_union.pctx$q_rbun_drain_active #define pctx$r_rbun_drain_struct pctx$r_rbun_drain_union.pctx$r_rbun_drain_struct #define pctx$ps_rbun_drain_lal pctx$r_rbun_drain_struct.pctx$ps_rbun_drain_lal #define pctx$l_rbun_drain_count pctx$r_rbun_drain_struct.pctx$l_rbun_drain_count #define pctx$l_spl_port pctx$r_fcpdef.pctx$l_spl_port #define pctx$ps_max_fp_bcnt pctx$r_fcpdef.pctx$ps_max_fp_bcnt #define pctx$l_spl_dyn pctx$r_fcpdef.pctx$l_spl_dyn #define pctx$r_fcledef pctx$r_protocol_specific_data.pctx$r_fcledef #define pctx$ps_fcle_load_crctx pctx$r_fcledef.pctx$ps_fcle_load_crctx #define pctx$ps_fcle_alloc_crctx pctx$r_fcledef.pctx$ps_fcle_alloc_crctx #define pctx$l_fcle_preq_buf_size pctx$r_fcledef.pctx$l_fcle_preq_buf_size #define pctx$ps_fcle_fccd_list pctx$r_fcledef.pctx$ps_fcle_fccd_list #define pctx$l_outstanding_mbd_lists pctx$r_fcledef.pctx$l_outstanding_mbd_lists #define pctx$l_fcle_max_fccds pctx$r_fcledef.pctx$l_fcle_max_fccds #define pctx$l_lan_p1 pctx$r_fcledef.pctx$l_lan_p1 #define pctx$l_lan_p2 pctx$r_fcledef.pctx$l_lan_p2 #define pctx$l_lan_p3 pctx$r_fcledef.pctx$l_lan_p3 #define pctx$l_lan_p4 pctx$r_fcledef.pctx$l_lan_p4 #define pctx$l_lan_p5 pctx$r_fcledef.pctx$l_lan_p5 #define pctx$l_lan_p6 pctx$r_fcledef.pctx$l_lan_p6 #define pctx$l_fcle_p1 pctx$r_fcledef.pctx$l_fcle_p1 #define pctx$l_fcle_p2 pctx$r_fcledef.pctx$l_fcle_p2 #define pctx$l_fcle_p3 pctx$r_fcledef.pctx$l_fcle_p3 #define pctx$l_fcle_p4 pctx$r_fcledef.pctx$l_fcle_p4 #define pctx$l_fcle_p5 pctx$r_fcledef.pctx$l_fcle_p5 #define pctx$l_fcle_p6 pctx$r_fcledef.pctx$l_fcle_p6 #endif /* #if !defined(__VAXC) */ /* */ /* LNK$K_UP and LNK$K_DOWN are returned in pcbvec$ps_link_state */ /* */ #define LNK$K_INITIAL 0 /* Initial link state (suppresses initial report, MBZ) */ #define LNK$K_UP 1 /* Link is up */ #define LNK$K_DOWN 2 /* Link is down */ #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 /* __PCTXDEF_LOADED */