Firewire, precisely IEEE~1394 standard high-performance serial bus, have been designed packet based computer bus. Two transfer services are defined in firewire i.e. asynchronous transfer and isochronous stream. Asynchronous transfer supports transaction type communication with memory access to mapped nodes. Isochronous stream supports low jitter and constant rate communication with broadcast like packet transfer within a bus. To support best effort type communication, asynchronous stream mode is also added onto the firewire as IEEE1394.a. Every arbitration in each bus is performed upon 8~kHz (125 $\mu$s) common clock provided the cycle master. The clock interval is considered as fairness unit and bandwidth reservation function is established sharing the value of clock interval.

PCI~Lynx chip based firewire interface is targeted for our development. PCI~Lynx is an IEEE~1394 serial bus compatible ASIC LSI manufactured by Texas Instrument and called TSB12LV21 in precisely. PHY device is indispensable for PCI~Lynx chip to connect serial bus. Although PCI~Lynx supports up to 400~Mbps bandwidth, PHY device provided our interface (TSB21LV03) only supports up to 200~Mbps. Then our firewire system is restricted up to 200~Mbps only. Whole development is performed on FreeBSD 2.2.6 system. We also verified the operation on upper version of FreeBSD as 2.2.7.

Too many purpose is considered in firewire specification e.g. interface to storage device, A/V manufacture, other computer and peripheral devices. It is difficult to categolize firewire into legacy UNIX device types i.e. network, character and block device. We develop the driver to support both network and character type and choose appropriate one at use.

When constant bit-rate data is transfered in isochronous stream mode, the node must send every packet at the timing of each fairness unit being 125 $\mu$ s. If the isochronous stream mode is implemented as row network socket only, the host should control the timing of packet sending in the order of the fairness unit. This timing of the fairness unit of firewire is an unrealistic value to control by UNIX kernel. Since isochronous stream mode is designed to transfer bulk block data combined large number of firewire packets, sometimes it is adequate that application treat it a block device compared with network. We implement character device type only for isochronous stream mode. The payload of DV packet on firewire must include the correct high resolution clock information being bus clock interval order 125 $\mu$s due to the frame synchronization. Application working on UNIX cannot satisfy such condition. So, we define special minor device for DV stream and the device driver rewrite the payload data at DMA transfer.

We implement both row firewire and IP protocol socket interface. Row firewire socket also support both asynchronous transfer and isochronous stream mode. Node specific information required at asynchronous transfer mode i.e. node ID, bus ID and address are settled each packet by application. In isochronous stream mode, the channel number is specified, when socket is connected. After once connected, application can make communication on firewire as general socket treatment. We also implemented some important firewire functions on kernel.

The current draft of IP over firewire standard adopts asynchronous stream mode for the function of broadcast, multicast and ARP. However, PCI~Lynx does not support asynchronous stream mode itself. We adopt most simple way that substitute asynchronous stream mode to isochronous stream mode. The throughput of developed driver is obtained about 30~Mbps in S100 mode from the TCP performance test of netperf. Its results is shown that our driver has good performance compared with theoretical limit value being 32~Mbps.