104 lines
		
	
	
	
		
			4 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
	
		
			4 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | 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, ... |