Specifications

Writing Device-Driver Tables
4.4 Building Driver Tables Using C
int driver$ini_ddt_altstart( DDT *ddt, void (*func)() );
int driver$ini_ddt_aux_routine( DDT *ddt, int ( *func )()
);
int driver$ini_ddt_aux_storage( DDT *ddt, void *addr );
int driver$ini_ddt_cancel( DDT *ddt, void ( *func )() );
int driver$ini_ddt_cancel_selective( DDT *ddt, int ( *func
)() );
int driver$ini_ddt_channel_assign( DDT *ddt, void ( *func
)() );
int driver$ini_ddt_cloneducb( DDT *ddt, int ( *func )() );
int driver$ini_ddt_ctrlinit( DDT *ddt, int ( *func )() );
int driver$ini_ddt_diagbf( DDT *ddt, unsigned short value
);
int driver$ini_ddt_erlgbf( DDT *ddt, unsigned short value
);
int driver$ini_ddt_kp_reg_mask( DDT *ddt, unsigned long
value );
int driver$ini_ddt_kp_stack_size( DDT *ddt, unsigned long
value );
int driver$ini_ddt_kp_startio( DDT *ddt, void ( *func )()
);
int driver$ini_ddt_mntv_for( DDT *ddt, int ( *func )() );
int driver$ini_ddt_mntver( DDT *ddt, void ( *func )() );
int driver$ini_ddt_regdmp( DDT *ddt, void ( *func )() );
int driver$ini_ddt_start( DDT *ddt, void ( *func )() );
int driver$ini_ddt_unitinit( DDT *ddt, int ( *func )() );
The following function signals that initialization of the DDT is complete.
int driver$ini_ddt_end( DDT *ddt );
4.4.2.3 DDT Macro Calls
The following macros invoke the corresponding function, check the status
returned and exit to the driver loader if the status is not a success code.
ini_ddt_altstart( ddt, func )
ini_ddt_aux_routine( ddt, func )
ini_ddt_aux_storage( ddt, addr )
ini_ddt_cancel( ddt, func )
ini_ddt_cancel_selective( ddt, func )
ini_ddt_channel_assign( ddt, func )
ini_ddt_cloneducb( ddt, func )
ini_ddt_ctrlinit( ddt, func )
ini_ddt_diagbf( ddt, value )
ini_ddt_erlgbf( ddt, value )
ini_ddt_kp_reg_mask( ddt, value )
ini_ddt_kp_stack_size( ddt, value )
ini_ddt_kp_startio( ddt, func )
ini_ddt_mntv_for( ddt, func )
ini_ddt_mntver( ddt, func )
ini_ddt_regdmp( ddt, func )
ini_ddt_start( ddt, func )
ini_ddt_unitinit( ddt, func )
ini_ddt_end( ddt )
4.4.3 Function Decision Table
There are two fields in the FDT: a quadword bit mask of functions that are to
be processed as buffered I/O by the driver and an array of 64 pointers which
is indexed by function code to locate the FDT action routine for the function.
The buffered I/O mask is initialized to zero, meaning that no function is treated
as buffered by the driver. The pointer array is initialized to EXE$ILLIOFUNC
which means that no function is considered valid.
4–13