48 lines
2.1 KiB
Groff
48 lines
2.1 KiB
Groff
'\"!tbl|mmdoc
|
|
'\"macro stdmacro
|
|
.TH datapipe 5
|
|
.SH NAME
|
|
datapipe \- peer-to-peer data transfer between hardware devices.
|
|
.SH DESCRIPTION
|
|
Data pipes are dynamic connections between two hardware devices
|
|
that support peer-to-peer data transfers. These connections are created by an
|
|
application to process a data stream from a source device to a sink device.
|
|
The purpose is to have minimum system impact during I/O operations.
|
|
.PP
|
|
Data is moved in sized quanta from source to sink. Each transfer of a
|
|
quantum of data is assumed to be atomic with respect to both drivers
|
|
and application APIs.
|
|
When data is moved at the hardware level, addresses are provided and data
|
|
is either read or written. If a device can provide addresses, it is
|
|
called a bus master; if a device can accept addresses, it is called
|
|
a bus slave. A bus slave stores data in the write case or provides
|
|
data in the read case. A device can be both a bus master or a bus slave.
|
|
Host memory is a most common case of a bus slave.
|
|
.PP
|
|
Each device has a number of common attributes that are used
|
|
by the data pipe driver to decide whether a data pipe can be created
|
|
between the two devices. If so, each driver (the data pipe driver, and the
|
|
two pipe ends) will create an event queue
|
|
for the pipe. Once the pipe is created, all key interactions with the
|
|
data pipe are done by posting events to the event queue. Pipe events are
|
|
the primary means
|
|
for the setup and management of data pipes. Each driver within a data pipe
|
|
can post an event into the other drivers' event queue. The application also
|
|
can post events to a particular queue via
|
|
.B dpipePostEvent(3x).
|
|
When an application posts an event, it must specify which
|
|
queue the event is posted to. Not every event can be posted to
|
|
all queues.
|
|
.PP
|
|
A set of base events must be supported by each involved device.
|
|
Individual devices can have their own expanded set of events. The data
|
|
structure of the base events are in
|
|
.I <sys/datapipe_events.h>.
|
|
.PP
|
|
Once a data pipe is created, we can make bandwidth allocation through
|
|
priority I/O mechanism on the data pipe file descriptor (prio(5)).
|
|
.SH SEE ALSO
|
|
datapipe(3X),
|
|
prio(5),
|
|
prio(3X)
|