Also, add unit location fields to the ROM image. The p1212 spec requires
unit locations if you have 2 or more unit directories which is the case for
ipv4 and ipv6 compiled into a kernel.
been tested on i386. It does not have any interface for useland to
get isochoronous stream. The isochoronous acquisition interface
should be determined.
- fwohci_arrq_input: Do not return if next packet is in the buffer,
or the next packet cannot be received until the next receive interrupt.
- fwohci_uid_collect: XXX change M_WAITOK to M_NOWAIT for now, since there is
no lock but only one instance must be allowed here.
split fwohci_uid_req() and retry to get uid.
XXX need timer to wait some moment between retries...
- Add DELAY(10) for wait loop.
- split fwohci_buf_stop() into _stop_tx() and _stop_rx() because receiver
should not be stopped at bus-reset.
- split fwohci_buf_input() into _input() and _input_ppb() to improve
performance slightly.
Clean up one bug in a DPRINTF in arrs_input which could panic on some packets.
Gut the ack/response functionality and clean it up so all packets get checked
correctly and the abuf struct isn't used once the ab_cb has happened (there
still could be ack packets waiting to be processed at that time).
Finally, add some documentation explaining read/write/inreg and their
purpose/argument calling.
my time shortage):
- Use 8 column for basic indent.
- Use 4 space for 2nd level indent.
- Use tab instead of 8 spaces.
- Don't put space before function call operator. That's unary operator.
- Wrap lines so that it fits in 80 columns.
Move interrupt routine to simply updating state flags and ack'ing interrupts
Move main processing into kthread
Change IPL level to IPL_BIO and try not to hold splbio very much if at all.
Add baseline support for attaching/detaching/updating fwnode's.
Start adding higher level API which isn't tied to if_fw/mbuf's
Use Global UID register as is, it should be initialized by firmware.
If it is not initialized (i.e. 0), try to read GUID ROM if exists.
On my VAIO PCG-N505AS, the version register says it implement GUID ROM,
but reading GUID ROM returns all zero bytes. I'm not sure where the bug is.
Still use memcpy in receiving because we must use buffer fill mode
and many packets may share single receive buffer.
XXX: Workaround(?) for CXD3222: it fails to DMA for selfid packet according
to code placement. I'm not sure about the reason (cache? timing? bug?).
Fixed the bug: transmitter sometimes stop and OACTIVE bit of if_fw
never be cleared.
Fixed the bug: freeing free buffer.
Enable ieee1394_drain and ieee1394_watchdog for loss of fragment.
Use PAGE_SIZE instead of OHCI_PAGE_SIZE for each DMA mem.
OHCI_PAGE_SIZE(2kB) will be round up PAGE_SIZE, anyway.
XXX: need more sophisticated way to manage buffer.
Clear IntEvent first not to lose SelfIDCompleted in multiple bus reset.
Be careful not to clear BusReset int event in SelfID duration to follow
the OHCI spec.
Initiate BusReset if selfid is not completed within 3sec after busreset.