Uniform Driver Interface: Difference between revisions

no edit summary
[unchecked revision][unchecked revision]
(Explained handles)
No edit summary
Line 71:
message 3 Pseudo-Driver
message 4 Generic UDI Pseudo-Driver
release 3 1.01
supplier 1
Line 117:
Region-local data is data private to a region. Being private makes it okay to move the region to a different location or domain without affecting any of the neighbouring regions. Region-global is data that is not particular to a channel or operation.
 
However, none of these are actually data objects. The difference between variables of certain data types and data objects is that dataData objects get allocated via an UDI allocation interface. Let's take a look at the existing types of data objects.
 
===Control blocks===
 
Control blocks are a semi-opaque (i.e., the driver doesn't see the whole data object) data type that are used in metalanguage operations. Once a block is sent via a channel operation it may not be referenced until the channel operation completes. The same is true for asynchronous service calls - the control block will only become available once the callback returns. The way you need to think about this is that a block is owned by only one region at a time and you movetransfer it from one place to another.
 
There are several types of control blocks, the generic block type being udi_cb_t. All other types of control blocks are supersets of the generic control block. Also, there is the notion of control block groups - control blocks are categorized into groups of control blocks of the same size. Control blocks within the same group can thus be used interchangeably using casts.
Line 144:
 
{{stub}}
 
Drivers are relocatable objects files, they have no entry points. UDI drivers have only one global variable, udi_init_info that describes the primary module (and perhaps secondary modules), its primary region (and perhaps the secondary regions that it and the other modules have) and what control blocks it requests. udi_init_info is of type udi_init_t:
 
<source lang="c">
typedef const struct { // Don't forget that global variables are read-only
udi_primary_init_t *primary_init_info;
udi_secondary_init_t *secondary_init_list;
udi_ops_init_t *ops_init_list;
udi_cb_init_t *cb_init_list;
udi_gcb_init_t *gcb_init_list;
udi_cb_select_t *cb_select_list;
}
</source>
 
==Driver failures==
Anonymous user