User manual

68
initialization routine. Initially set to 0. Later, but before calling the initialization routine, the
CHARON core is allowed to put a non-zero value into the field.
The disconnect_io_space field contains an entry point to the corresponding routine. The
CHARON core provides a value in this field before calling the loadable component
initialization routine. Initially set to 0. Later, but before calling the initialization routine, the
CHARON core is allowed to put a non-zero value into the field.
Note that the CHARON core is not required to initialize all the fields of the chapi_in
communication context descriptor before calling the initialization routine. The CHARON
core is allowed to initialize these fields later. More details follow.
3.2 The CHAPI_OUT communication context descriptor
The chapi_out descriptor contains entry points to routines provided by the loadable
component, as well as address range of control and status register I/O space and number
of interrupt vectors. The chapi_out descriptor structure is defined as follows:
typedef struct __chapi_out {
__chapi_out_context_p context;
unsigned int base_b_address;
unsigned int b_address_range;
unsigned int base_i_vector;
unsigned int n_of_i_vector;
unsigned int i_priority;
__chapi_start_procedure_p start;
__chapi_stop_procedure_p stop;
__chapi_reset_procedure_p reset;
__chapi_read_procedure_p read;
__chapi_write_procedure_p write;
__chapi_mapping_register_updated_p mapping_register_updated;
__chapi_set_configuration_procedure_p set_configuration;
__chapi_set_configuration_ex_procedure_p set_configuration_ex;
__chapi_setup_bus_requests_procedure_p setup_bus_requests;
__chapi_run_interactive_command_procedure_p run_interactive_command;
//
// Almost the same device (functionally the same) may have different
// address range of their I/O page window, e.g. RL11 has 4 registers and
// 8 bytes window range while RLV11 has 5 registers and 16 bytes window
range.
// This makes sense to ask device for address range dynamically depending on
// bus type this device is connected (when device supports a number of
different
// buses).
//
__chapi_get_bus_address_range_procedure_p get_bus_address_range;
// This data member defines supported buses
unsigned int supported_buses;
//
// All new methods/data have to be added to the end of this structure,
otherwise