datapipe - peer-to-peer data transfer between hardware devices.
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
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.
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 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.
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 <sys/datapipe_events.h>.
Once a data pipe is created, we can make bandwidth allocation through
priority I/O mechanism on the data pipe file descriptor (prio(5)).
datapipe(3X), prio(5), prio(3X)
PPPPaaaaggggeeee 1111 [ Back ]