| 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, ... |