| What: /dev/fw[0-9]+ | |
| Date: May 2007 | |
| KernelVersion: 2.6.22 | |
| Contact: linux1394-devel@lists.sourceforge.net | |
| Description: | |
| The character device files /dev/fw* are the interface between | |
| firewire-core and IEEE 1394 device drivers implemented in | |
| userspace. The ioctl(2)- and read(2)-based ABI is defined and | |
| documented in <linux/firewire-cdev.h>. | |
| This ABI offers most of the features which firewire-core also | |
| exposes to kernelspace IEEE 1394 drivers. | |
| Each /dev/fw* is associated with one IEEE 1394 node, which can | |
| be remote or local nodes. Operations on a /dev/fw* file have | |
| different scope: | |
| - The 1394 node which is associated with the file: | |
| - Asynchronous request transmission | |
| - Get the Configuration ROM | |
| - Query node ID | |
| - Query maximum speed of the path between this node | |
| and local node | |
| - The 1394 bus (i.e. "card") to which the node is attached to: | |
| - Isochronous stream transmission and reception | |
| - Asynchronous stream transmission and reception | |
| - Asynchronous broadcast request transmission | |
| - PHY packet transmission and reception | |
| - Allocate, reallocate, deallocate isochronous | |
| resources (channels, bandwidth) at the bus's IRM | |
| - Query node IDs of local node, root node, IRM, bus | |
| manager | |
| - Query cycle time | |
| - Bus reset initiation, bus reset event reception | |
| - All 1394 buses: | |
| - Allocation of IEEE 1212 address ranges on the local | |
| link layers, reception of inbound requests to such | |
| an address range, asynchronous response transmission | |
| to inbound requests | |
| - Addition of descriptors or directories to the local | |
| nodes' Configuration ROM | |
| Due to the different scope of operations and in order to let | |
| userland implement different access permission models, some | |
| operations are restricted to /dev/fw* files that are associated | |
| with a local node: | |
| - Addition of descriptors or directories to the local | |
| nodes' Configuration ROM | |
| - PHY packet transmission and reception | |
| A /dev/fw* file remains associated with one particular node | |
| during its entire life time. Bus topology changes, and hence | |
| node ID changes, are tracked by firewire-core. ABI users do not | |
| need to be aware of topology. | |
| The following file operations are supported: | |
| open(2) | |
| Currently the only useful flags are O_RDWR. | |
| ioctl(2) | |
| Initiate various actions. Some take immediate effect, others | |
| are performed asynchronously while or after the ioctl returns. | |
| See the inline documentation in <linux/firewire-cdev.h> for | |
| descriptions of all ioctls. | |
| poll(2), select(2), epoll_wait(2) etc. | |
| Watch for events to become available to be read. | |
| read(2) | |
| Receive various events. There are solicited events like | |
| outbound asynchronous transaction completion or isochronous | |
| buffer completion, and unsolicited events such as bus resets, | |
| request reception, or PHY packet reception. Always use a read | |
| buffer which is large enough to receive the largest event that | |
| could ever arrive. See <linux/firewire-cdev.h> for descriptions | |
| of all event types and for which ioctls affect reception of | |
| events. | |
| mmap(2) | |
| Allocate a DMA buffer for isochronous reception or transmission | |
| and map it into the process address space. The arguments should | |
| be used as follows: addr = NULL, length = the desired buffer | |
| size, i.e. number of packets times size of largest packet, | |
| prot = at least PROT_READ for reception and at least PROT_WRITE | |
| for transmission, flags = MAP_SHARED, fd = the handle to the | |
| /dev/fw*, offset = 0. | |
| Isochronous reception works in packet-per-buffer fashion except | |
| for multichannel reception which works in buffer-fill mode. | |
| munmap(2) | |
| Unmap the isochronous I/O buffer from the process address space. | |
| close(2) | |
| Besides stopping and freeing I/O contexts that were associated | |
| with the file descriptor, back out any changes to the local | |
| nodes' Configuration ROM. Deallocate isochronous channels and | |
| bandwidth at the IRM that were marked for kernel-assisted | |
| re- and deallocation. | |
| Users: libraw1394 | |
| libdc1394 | |
| tools like jujuutils, fwhack, ... |