112 lines
4.2 KiB
Plaintext
112 lines
4.2 KiB
Plaintext
|
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;
|
||
|
libhinawa;
|
||
|
tools like linux-firewire-utils, fwhack, ...
|