/**/
/******************************************************************************/
/**                                                                          **/
/**  Copyright (c) 1996                                                      **/
/**  by DIGITAL Equipment Corporation, Maynard, Mass.                        **/
/**                                                                          **/
/**  This software is furnished under a license and may be used and  copied  **/
/**  only  in  accordance  with  the  terms  of  such  license and with the  **/
/**  inclusion of the above copyright notice.  This software or  any  other  **/
/**  copies  thereof may not be provided or otherwise made available to any  **/
/**  other person.  No title to and ownership of  the  software  is  hereby  **/
/**  transferred.                                                            **/
/**                                                                          **/
/**  The information in this software is subject to change  without  notice  **/
/**  and  should  not  be  construed  as  a commitment by DIGITAL Equipment  **/
/**  Corporation.                                                            **/
/**                                                                          **/
/**  DIGITAL assumes no responsibility for the use or  reliability  of  its  **/
/**  software on equipment which is not supplied by DIGITAL.                 **/
/**                                                                          **/
/******************************************************************************/
/********************************************************************************************************************************/
/* Created: 25-NOV-1996 18:19:57 by OpenVMS SDL EV1-52     */
/* Source:  22-JUN-1995 16:39:36 $64$DUA2130:[LIB_H.SRC]DDTDEF.SDL;1 */
/********************************************************************************************************************************/
/*** MODULE $DDTDEF ***/
#ifndef __DDTDEF_LOADED
#define __DDTDEF_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
 
#if !defined(__VAXC)
#define __struct struct
#define __union union
#else
#define __struct variant_struct
#define __union variant_union
#endif
 
/*+                                                                         */
/* DDT - DRIVER DISPATCH TABLE                                              */
/*                                                                          */
/* EACH DEVICE DRIVER HAS A DRIVER DISPATCH TABLE.                          */
/*-                                                                         */
	
#define DDT$M_DIAGBUF64 32768           /*Use 64-bit BUFIO for diag buffer if set in DDT$W_DIAGBUF */
	
 
#ifdef __cplusplus		    /* Define structure prototypes */
struct _fdt;
#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 _ddt {
#pragma __nomember_alignment
    int ddt$l_reserved_lw1;
    int ddt$l_reserved_lw2;
    short int ddt$iw_size;              /*Structure size                    */
    short int ddt$w_reserved_w1;
    __union  {
        unsigned short int ddt$w_diagbuf; /*Size of diagnostic buffer in bytes (low 15-bits) */
        __struct  {
            unsigned short int ddt$iw_diagbuf; /*Size of diagnostic buffer in bytes (low 15-bits) */
            } ddt$r_fill_1;
        } ddt$r_fill_0;
    __union  {
        unsigned short int ddt$w_errorbuf; /*SIZE OF ERROR LOG BUFFER IN BYTES  */
        __struct  {
            unsigned short int ddt$iw_errorbuf; /*SIZE OF ERROR LOG BUFFER IN BYTES  */
            } ddt$r_fill_3;
        } ddt$r_fill_2;
    __union  {
        unsigned short int ddt$w_fdtsize; /*SIZE OF FDT IN BYTES            */
        __struct  {
            unsigned short int ddt$iw_fdtsize; /*SIZE OF FDT IN BYTES       */
            } ddt$r_fill_5;
        } ddt$r_fill_4;
    short int ddt$w_reserved_w2;
    void (*ddt$ps_start_2)();           /*STEP 2 DRIVER START I/O ROUTINE   */
    void (*ddt$ps_start_jsb)();         /*STEP 2 DRIVER JSB_START I/O ROUTINE  */
    int (*ddt$ps_ctrlinit_2)();         /*STEP 2 CONTROLLER INITIALIZATION ROUTINE */
    int (*ddt$ps_unitinit_2)();         /*STEP 2 UNIT INITIALIZATION ROUTINE */
    int (*ddt$ps_cloneducb_2)();        /*STEP 2 CLONED UCB ROUTINE         */
    struct _fdt *ddt$ps_fdt_2;          /*ADDR OF STEP 2 FUNCTION DECISION TABLE */
    void (*ddt$ps_cancel_2)();          /*STEP 2 CANCEL I/O ROUTINE         */
    void (*ddt$ps_regdump_2)();         /*STEP 2 DEVICE REGISTER DUMP ROUTINE */
    void (*ddt$ps_altstart_2)();        /*STEP 2 ALTERNATE START I/O ROUTINE */
    void (*ddt$ps_altstart_jsb)();      /*STEP 2 JSB ALTERNATE START I/O ROUTINE */
    void (*ddt$ps_mntver_2)();          /*STEP 2 MOUNT VERIFICATION ROUTINE */
    __union  {
        int ddt$l_mntv_sssc;            /*ADDRESS OF SHADOW SET STATE CHANGE MV ENTRY */
        __struct  {
            int (*ddt$ps_mntv_sssc)();  /*ADDRESS OF SHADOW SET STATE CHANGE MV ENTRY */
            } ddt$r_fill_7;
        } ddt$r_fill_6;
    __union  {
        int ddt$l_mntv_for;             /*ADDRESS OF FOREIGN DEVICE MV ENTRY */
        __struct  {
            int (*ddt$ps_mntv_for)();   /*ADDRESS OF FOREIGN DEVICE MV ENTRY */
            } ddt$r_fill_9;
        } ddt$r_fill_8;
    __union  {
        int ddt$l_mntv_sqd;             /*ADDRESS OF SEQUENTIAL DEVICE MV ENTRY */
        __struct  {
            int (*ddt$ps_mntv_sqd)();   /*ADDRESS OF SEQUENTIAL DEVICE MV ENTRY */
            } ddt$r_fill_11;
        } ddt$r_fill_10;
    __union  {
        int ddt$l_aux_storage;          /*ADDRESS OF AUXILIARY STORAGE AREA */
        __struct  {
            void *ddt$ps_aux_storage;   /*ADDRESS OF AUXILIARY STORAGE AREA */
            } ddt$r_fill_13;
        } ddt$r_fill_12;
    __union  {
        int ddt$l_aux_routine;          /*ADDRESS OF AUXILIARY ROUTINE      */
        __struct  {
            int (*ddt$ps_aux_routine)(); /*ADDRESS OF AUXILIARY ROUTINE     */
            } ddt$r_fill_15;
        } ddt$r_fill_14;
    void (*ddt$ps_channel_assign_2)();  /*STEP 2 ROUTINE TO CALL FROM $ASSIGN */
    int (*ddt$ps_cancel_selective_2)(); /*STEP 2 SELECTIVE CANCEL I/O ROUTINE */
    unsigned int ddt$is_stack_bcnt;     /*BYTES OF KP STACK REQUIRED        */
    unsigned int ddt$is_reg_mask;       /*KP REGISTER SAVE MASK             */
    void (*ddt$ps_kp_startio)();        /*ADDRESS OF KERNEL PROCESS START I/O ROUTINE */
    int (*ddt$ps_csr_mapping)();        /*ADDRESS OF CSR MAPPING ROUTINE    */
    int (*ddt$ps_fast_fdt)();           /* Address of Fast-IO fast-FDT routine */
    int (*ddt$ps_pending_io)();         /*Address of Pending I/O routine    */
    void *ddt$ps_customer;              /*Reserved_to_customer pointer      */
    } DDT;
 
#if !defined(__VAXC)
#define ddt$w_diagbuf ddt$r_fill_0.ddt$w_diagbuf
#define ddt$iw_diagbuf ddt$r_fill_0.ddt$r_fill_1.ddt$iw_diagbuf
#define ddt$w_errorbuf ddt$r_fill_2.ddt$w_errorbuf
#define ddt$iw_errorbuf ddt$r_fill_2.ddt$r_fill_3.ddt$iw_errorbuf
#define ddt$w_fdtsize ddt$r_fill_4.ddt$w_fdtsize
#define ddt$iw_fdtsize ddt$r_fill_4.ddt$r_fill_5.ddt$iw_fdtsize
#define ddt$l_mntv_sssc ddt$r_fill_6.ddt$l_mntv_sssc
#define ddt$ps_mntv_sssc ddt$r_fill_6.ddt$r_fill_7.ddt$ps_mntv_sssc
#define ddt$l_mntv_for ddt$r_fill_8.ddt$l_mntv_for
#define ddt$ps_mntv_for ddt$r_fill_8.ddt$r_fill_9.ddt$ps_mntv_for
#define ddt$l_mntv_sqd ddt$r_fill_10.ddt$l_mntv_sqd
#define ddt$ps_mntv_sqd ddt$r_fill_10.ddt$r_fill_11.ddt$ps_mntv_sqd
#define ddt$l_aux_storage ddt$r_fill_12.ddt$l_aux_storage
#define ddt$ps_aux_storage ddt$r_fill_12.ddt$r_fill_13.ddt$ps_aux_storage
#define ddt$l_aux_routine ddt$r_fill_14.ddt$l_aux_routine
#define ddt$ps_aux_routine ddt$r_fill_14.ddt$r_fill_15.ddt$ps_aux_routine
#endif		/* #if !defined(__VAXC) */
 
#define DDT$K_LENGTH 120                /*LENGTH OF DDT                     */
#define DDT$C_LENGTH 120                /*LENGTH OF DDT                     */
#define DDT$S_DDTDEF 120                /*OLD DDT LENGTH NAME FOR COMPATIBILITY */
 
#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 /* __DDTDEF_LOADED */
 
