FireStack® features an innovative 1394 packet handler, whose objective is to reduce resource burden when receiving and transmitting 1394 packets. The consistent utilization of zero-copy operations greatly enhances the overall system performance. FireStack® provides memory buffers accessible by both the user application and the 1394 Link Layer DMA engine.
For example, when transmitting an asynchronous packet and the user application has filled the memory buffer with the needed packet data, FireStack® will hand the buffer directly to the Link Layer for reading the packet into the packet transmission FIFO without having the CPU copy memory to memory.
Likewise, displaying a video stream from an IIDC camera only requires creation of DMA-capable reception buffers for the video frame data and registration of notification upon filling of a complete frame. Once notified the buffers holding the received data can be accessed directly by the video rendering engine in order to move the data to video card memory.
Inbound Transactions (handling of incoming requests) are defined in two separate methods:
Map Local Memory: The user can "map" a memory buffer to a specific address space. The contents of the memory buffer can be accessed by the user application at any point in time. At the same time when the stack receives a request packet from a remote device it will automatically perform the response operation (read, write or lock) and will send a response packet back to the requester. The user has the option to be notified by the notification callback function when the transaction completes.
Transaction Handler: Similar to the Map Local Memory above the user can "register for" a specific address space instead of "mapping" local memory. When the stack receives a request packet it will call the user-specified handler callback function. The user can then perform any operation within the callback function. Upon returning from the handler callback, the FireStack® may transmit a response packet. The notification callback function will be called after completion of the response process.
This module can be used to perform memory transactions (read, write, lock) on remote nodes. When a memory transaction is initiated FireStack® will automatically determine the maximum speed to the destination node by performing the needed PHY remote accesses.
Outbound Transactions can be used in the following ways with respect to result indication: In Blocking mode the TX functions will not return until the response packet is received and thus making the code sequential. In contrast to that the Non-Blocking mode can be used to initiate a series of “split” transactions i.e. a series of requests that are then followed by the corresponding - but not necessarily sequential - responses.
The Isochronous Streaming modules build on the mechanisms for efficient data processing defined by OHCI and provide a flexible and user-friendly API around it. Linked lists of buffers can be setup by the user application and will be automatically processed by the Link Layer DMA engine. Notification mechanisms are available for buffer and/or packet completion.