![]() See Buffering Isochronous DMA Transfers for IEEE 1394 Devices for details. (See Step 5 for details.) The bus driver uses the buffers in order until it runs out, and then pauses the operation until the device driver attaches more buffers. The driver uses the handle to provide data buffers for the transaction. If the driver will use the channel to write data to the device (a REQUEST_ISOCH_TALK operation), it sets the RESOURCE_USED_IN_TALKING flag. If the driver will use the channel to read data from a device (a REQUEST_ISOCH_LISTEN operation), it sets the RESOURCE_USED_IN_LISTENING flag. When the driver allocates a resource handle, it also specifies flags indicating how the buffers attached to the handle will be used: In all subsequent steps, the driver uses the resource handle to specify the channel.ĭrivers allocate a resource handle for the channel by submitting the REQUEST_ISOCH_ALLOCATE_RESOURCES request to the bus driver. Once the driver allocates a channel, it allocates a resource handle for that channel. Channels may become free at any time, so drivers should leave themselves in a state where they can attempt to allocate a channel later when appropriate. If the bus driver returns an error code, drivers must not attempt any data transfer, and they must deallocate the bandwidth they allocated in Step 2.ĭrivers should not assume that because a channel is not currently available, it will never be available. On success, the bus driver returns the allocated channel. ![]() The driver may request a specific channel, or ISOCH_ANY_CHANNEL to allocate any free channel. Devices that receive isochronous packets do not send acknowledgment packets in return.ĭrivers request a channel by sending the REQUEST_ISOCH_ALLOCATE_CHANNEL request to the bus driver. ![]() Multiple devices can read packets on one isochronous channel, but only one device can write to a channel. Allocate a channel.Īfter a bandwidth allocation request succeeds, the driver requests an isochronous channel on which to write data. Furthermore, after a reset, bandwidth handles become stale and must be freed by a call to REQUEST_ISOCH_FREE_BANDWIDTH, unless the bandwidth was allocated with the IRB_FLAG_ALLOW_REMOTE_FREE flag set. Attempts to allocate bandwidth after a bus reset are likely to succeed, because the system automatically releases all previously-allocated bandwidth and channels after a bus reset.ĭrivers that succeed in allocating bandwidth, must reallocate their bandwidth and channels after a bus reset, for the reasons just mentioned. Drivers that fail to allocate bandwidth might be able to allocate it in subsequent tries, so they should leave themselves in a state where they can attempt to allocate bandwidth later when appropriate. If the request fails, the driver must not attempt any data transfer. When the driver has finished with the allocated bandwidth, it must use REQUEST_ISOCH_FREE_BANDWIDTH to free the bandwidth, so that it can be used by other devices on the bus. For example, the driver can use REQUEST_ISOCH_SET_CHANNEL_BANDWIDTH on the handle to adjust the amount of bandwidth allocated. The driver uses this handle in future bandwidth-related requests to the bus driver. If the request succeeds, the bus driver returns a bandwidth handle. The driver submits the REQUEST_ISOCH_ALLOCATE_BANDWIDTH request to the bus driver to reserve bandwidth. The bus tracks the amount of bandwidth allocated until it reaches a fixed amount (according to the IEEEE 1394-1995 specification, the maximum bandwidth that can be sent is 80% of one bus cycle, which is 125 nanoseconds) it then does not allow any other device to acquire bandwidth until some of the currently allocated bandwidth is freed. Allocate bandwidth.īefore any isochronous data transfer can take place, the driver must reserve bandwidth on the bus. They query the bus driver with the REQUEST_GET_SPEED_BETWEEN_DEVICES request to determine the maximum possible speed between two devices on the bus, or the device and the host computer. Drivers must determine at run-time the transfer speed between the device and the computer. Even if a specific device supports a certain speed, it may be plugged into another device that only supports lower speeds. The IEEE 1394 bus can support several different speeds, limited by what the hardware allows. Before drivers can start their device, they must follow these steps: Step 1.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |