DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

udi_mei_ops_vec_template_t(3udi)


Metalanguage ops vector template

SYNOPSIS

#include <udi.h>

typedef const struct {

	udi_index_t meta_ops_num;

	udi_ubit8_t relationship;

	const udi_mei_op_template_t *op_template_list;

} udi_mei_ops_vec_template_t;
 
/* Flag values for relationship */
 
#define  UDI_MEI_REL_INITIATOR				(1U<<0)
 
#define  UDI_MEI_REL_BIND				(1U<<1)
 
#define  UDI_MEI_REL_EXTERNAL				(1U<<2)
 
#define  UDI_MEI_REL_INTERNAL				(1U<<3)
 
#define  UDI_MEI_REL_SINGLE				(1U<<4)
 

MEMBERS meta_ops_num is a number that identifies this ops vector type with respect to others in this metalanguage, or zero to terminate the ops_vec_template_list array to which this structure belongs (see udi_mei_init_t). If meta_ops_num is zero, all other members of this structure are ignored.

relationship defines the valid relationships between the regions on opposite ends of a channel when using an ops vector of this type.

Relationship must include at least one of UDI_MEI_REL_EXTERNAL or UDI_MEI_REL_INTERNAL. If and only if relationship includes UDI_MEI_REL_EXTERNAL, then this ops type can be used for an external (driver-to-driver) channel. If and only if relationship includes UDI_MEI_REL_INTERNAL, then this ops type can be used for an internal (within one driver instance) channel.

If and only if relationship includes UDI_MEI_REL_INITIATOR, then this ops type can be used for the initiator side of a channel (the side that sends the first operation). Otherwise, this ops type can only be used for the non-initiator (responder) side of a channel.

If and only if relationship includes UDI_MEI_REL_BIND, then this ops type can be used for a bind channel. Otherwise, this ops type can only be used for an auxiliary, non-bind, channel.

Both ends of a channel must be paired appropriately: both must have the same combination of UDI_MEI_REL_EXTERNAL, UDI_MEI_REL_INTERNAL, and UDI_MEI_REL_BIND; exactly one must have UDI_MEI_REL_INITIATOR set.

UDI_MEI_REL_SINGLE is legal only if both UDI_MEI_REL_EXTERNAL and UDI_MEI_REL_BIND are also set and UDI_MEI_REL_INITIATOR is not. If and only if relationship does not include UDI_MEI_REL_SINGLE, then a driver using this ops type for a child bind channel must be prepared to have multiple child instances bound to it for each enumerated child context.

op_template_list is a pointer to a list of structures containing information about each type of ops vector supported by this metalanguage. The udi_channel_event_ind_op_t at the beginning of every ops vector type is not included in this list; the first entry in the list corresponds to index one, rather than zero, in the ops vector.

DESCRIPTION This structure is used to describe the set of metalanguage operations that correspond to the specified meta_ops_num for the role indicated by the relationship parameter. The ops are described in terms of their parameters and the associated ownership and data transfer of those parameters as a result of performing the specified operation.

One structure of this type must be defined for each ops vector types. These will generally come in pairs: one for the ops at each end of the channel.

references udi_channel_event_ind, udi_mei_init_t, udi_mei_op_template_t


UDI Core Specification Contents