aboutsummaryrefslogtreecommitdiff
path: root/drivers/firewire
AgeCommit message (Collapse)AuthorFilesLines
2008-01-30firewire: fw-ohci: Bug fixes for packet-per-buffer supportDavid Moore1-50/+49
This patch corrects a number of bugs in the current OHCI 1.0 packet-per-buffer support: 1. Correctly deal with payloads that cross a page boundary. The previous version would not split the descriptor at such a boundary, potentially corrupting unrelated memory. 2. Allow user-space to specify multiple packets per struct fw_cdev_iso_packet in the same way that dual-buffer allows. This is signaled by header_length being a multiple of header_size. This multiple determines the number of packets. The payload size allocated per packet is determined by dividing the total payload size by the number of packets. 3. Make sync support work properly for packet-per-buffer. I have tested this patch with libdc1394 by forcing my OHCI 1.1 controller to use the packet-per-buffer support instead of dual-buffer. I would greatly appreciate testing by those who have a DV devices and other types of iso streamers to make sure I didn't cause any regressions. Stefan, with this patch, I'm hoping that libdc1394 will work with all your OHCI 1.0 controllers now. The one bit of future work that remains for packet-per-buffer support is the automatic compaction of short payloads that I discussed with Kristian. Signed-off-by: David Moore <[email protected]> Signed-off-by: Stefan Richter <[email protected]>
2008-01-30firewire: fw-ohci: Fix for dualbuffer three-or-more buffersDavid Moore1-20/+24
This patch fixes the problem where different OHCI 1.1 controllers behave differently when a received iso packet straddles three or more buffers when using the dual-buffer receive mode. Two changes are made in order to handle this situation: 1. The packet sync DMA descriptor is given a non-zero header length and non-zero payload length. This is because zero-payload descriptors are not discussed in the OHCI 1.1 specs and their behavior is thus undefined. Instead we use a header size just large enough for a single header and a payload length of 4 bytes for this first descriptor. 2. As we process received packets in the context's tasklet, read the packet length out of the headers. Keep track of the running total of the packet length as "excess_bytes", so we can ignore any descriptors where no packet starts or ends. These descriptors may not have had their first_res_count or second_res_count fields updated by the controller so we cannot rely on those values. The main drawback of this patch is that the excess_bytes value might get "out of sync" with the packet descriptors if something strange happens to the DMA program. I'm not if such a thing could ever happen, but I appreciate any suggestions in making it more robust. Also, the packet-per-buffer support may need a similar fix to deal with issue 1, but I haven't done any work on that yet. Stefan, I'm hoping that with this patch, all your OHCI 1.1 controllers will work properly with an unmodified version of libdc1394. Signed-off-by: David Moore <[email protected]> Signed-off-by: Stefan Richter <[email protected]>
2008-01-30firewire: fw-sbp2: remove unused misleading macroStefan Richter1-2/+0
SBP2_MAX_SECTORS is nowhere used in fw-sbp2. It merely got copied over from sbp2 where it played a role in the past. Signed-off-by: Stefan Richter <[email protected]>
2008-01-30firewire: fw-sbp2: prepare for s/g chainingStefan Richter1-3/+3
Signed-off-by: Stefan Richter <[email protected]>
2008-01-30firewire: fw-sbp2: refactor workq and kref handlingStefan Richter1-26/+30
This somewhat reduces the size of firewire-sbp2.ko. Signed-off-by: Stefan Richter <[email protected]>
2008-01-11[SCSI] relax scsi dma alignmentJames Bottomley1-0/+6
This patch relaxes the default SCSI DMA alignment from 512 bytes to 4 bytes. I remember from previous discussions that usb and firewire have sector size alignment requirements, so I upped their alignments in the respective slave allocs. The reason for doing this is so that we don't get such a huge amount of copy overhead in bio_copy_user() for udev. (basically all inquiries it issues can now be directly mapped). Acked-by: Alan Stern <[email protected]> Signed-off-by: James Bottomley <[email protected]>
2007-12-10firewire: OHCI 1.0 Isochronous Receive supportJarod Wilson1-20/+155
Third rendition of FireWire OHCI 1.0 Isochronous Receive support, using a zer-copy method similar to OHCI 1.1 which puts the IR data payload directly into the userspace buffer. The zero-copy implementation eliminates the video artifacts, audio popping, and buffer underrun problems seen with version 1 of this patch, as well as fixing a regression in OHCI 1.1 support introduced by version 2 of this patch. Successfully tested in OHCI 1.1 mode on the following chipsets: - NEC uPD72847 (rev 01), OHCI 1.1 (PCI) - Ti XIO2200(A) (rev 01), OHCI 1.1 (PCIe) - Ti TSB41AB2 (rev 01), OHCI 1.1 (PCI on SB Audigy) - Apple UniNorth 2 (rev 81), OHCI 1.1 (PowerBook G4 onboard) Successfully tested in OHCI 1.0 mode on the following chipsets: - Agere FW323 (rev 06), OHCI 1.0 (Mac Mini onboard) - Agere FW323 (rev 06), OHCI 1.0 (PCI) - Via VT6306 (rev 46), OHCI 1.0 (PCI) - NEC OrangeLink (rev 01), OHCI 1.0 (PCI) - NEC uPD72847 (rev 01), OHCI 1.1 (PCI) - Ti XIO2200(A) (rev 01), OHCI 1.1 (PCIe) The bulk of testing was done in an x86_64 system, but was also successfully sanity-tested on other systems, including a PPC(32) PowerBook G4 and an i686 EPIA M10k. Crude benchmarking (watching top during capture) puts the cpu utilization during capture on the EPIA's 1GHz Via C3 processor around 13%, which is down from 30% with the v1 code. Some implementation details: To maintain the same userspace API as dual-buffer mode, we set up two descriptors for every incoming packet. The first is an INPUT_MORE descriptor, pointing to a buffer large enough to hold just the packet's iso headers, immediately followed by an INPUT_LAST descriptor, pointing to a chunk of the userspace buffer big enough for the packet's data payload. With this setup, each incoming packet fills in these two descriptors in a manner that very closely emulates dual-buffer receive, to the point where the bulk of the handle_ir_* code is now identical between the two (and probably primed for some restructuring to share code between them). The only caveat I have at the moment is that neither of my OHCI 1.0 Via VT6307-based FireWire controllers work particularly well with this code for reasons I have yet to figure out. Signed-off-by: Jarod Wilson <[email protected]> Signed-off-by: Stefan Richter <[email protected]>
2007-11-07firewire: fw-sbp2: fix refcountingStefan Richter1-4/+7
Since patch "fw-sbp2: use an own workqueue (fix system responsiveness)" increased parallelism between fw-sbp2 and fw-core, it was possible that fw-sbp2 didn't release the SCSI device when the FireWire device was disconnected. This happened if sbp2_update() ran during sbp2_login(), because a bus reset occurred during sbp2_login(). The sbp2_login() work would [try to] reschedule itself because it failed due to the bus reset, and it would _not_ drop its reference on the target. However, sbp2_update() would schedule sbp2_login() too before sbp2_login() rescheduled itself and hence sbp2_update() would take an additional reference. And then we would have one reference too many. The fix is to _always_ drop the reference when leaving the sbp2_login() work. If the sbp2_login() work reschedules itself, it takes a reference, but only if it wasn't already rescheduled by sbp2_update(). Ditto in the sbp2_reconnect() work. The resulting code is actually simpler than before: We _always_ take a reference when successfully scheduling work. And we _always_ drop a reference when leaving a workqueue job. No exceptions. Signed-off-by: Stefan Richter <[email protected]>
2007-10-31firewire: Fix pci resume to not pass in a __be32 config rom.Kristian Høgsberg1-12/+25
The ohci_enable() function shared between pci_probe and pci_resume takes a host endian config rom, but ohci->config_rom is __be32. This sets up the config rom in the wrong endian on little endian machine, specifically, BusOptions will be initialized to a 0 max receive size. This patch changes the way we reuse the config rom so that we avoid this problem. Signed-off-by: Kristian Hoegsberg <[email protected]> Signed-off-by: Stefan Richter <[email protected]>
2007-10-22firewire: fw-ohci: shut up a superfluous compiler warningStefan Richter1-1/+1
New warning since commit ab88ca488b8af66c3defa165874e81e695319a19, "firewire: fw-ohci: missing dma_unmap_single": drivers/firewire/fw-ohci.c: In function 'at_context_transmit': drivers/firewire/fw-ohci.c:609: warning: 'payload_bus' may be used uninitialized in this function Access to payload_bus is conditional on packet->payload_length > 0, and that won't change while in at_context_queue_packet. Signed-off-by: Stefan Richter <[email protected]>
2007-10-22firewire: fw-ohci: log a note about unsupported featuresStefan Richter1-3/+8
because there seems to be more time needed to implement this. Also, change related error return values to more appropriate ones. Signed-off-by: Stefan Richter <[email protected]>
2007-10-20fix typo "insted" -> "instead"Uwe Kleine-König1-1/+1
Signed-off-by: Uwe Kleine-König <[email protected]> Signed-off-by: Adrian Bunk <[email protected]>
2007-10-17firewire: fw-cdev: reorder wakeup vs. spinlockJay Fenlason1-3/+2
Signed-off-by: Jay Fenlason <[email protected]> Prompted by https://bugzilla.redhat.com/show_bug.cgi?id=323411 Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: in-code doc updates.Yann Dirson1-1/+5
Signed-off-by: Yann Dirson <[email protected]> Signed-off-by: Stefan Richter <[email protected]> (update)
2007-10-17firewire: a header cleanupStefan Richter2-6/+4
fw_node() is not used (and not useful) outside fw-topology.c. Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: adopt read cycle timer ABI from raw1394Stefan Richter1-0/+26
This duplicates the read cycle timer feature of raw1394 (added in Linux 2.6.21) in firewire-core's userspace ABI. The argument to the ioctl is reordered though to ensure 32/64 bit compatibility. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-10-17firewire: fw-ohci: check for misconfigured bus (phyID == 63)Stefan Richter2-2/+9
Check NodeID.nodeNumber as per OHCI 1.1 clause 7.2.3.2. See also IEEE 1394a table 5B-1. Also, demote the "node ID not valid" message from error to notification as it is not an error condition. Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-ohci: missing dma_unmap_singleStefan Richter1-0/+3
at_context_queue_packet() didn't clean up in an early exit path. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-10-17firewire: fw-ohci: log posted write errorsStefan Richter1-2/+6
Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-ohci: reorder includesStefan Richter1-6/+6
Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-ohci: fix includesStefan Richter1-3/+3
Add used includes, remove unused includes. Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-ohci: enforce read order for selfID generationStefan Richter1-0/+3
It seems unlikely, but access to self_id_cpu[0] could at least in theory be deferred until after the loop over self_id_cpu[1..n] or even after the subsequent reg_read. Enforce the desired order by a read barrier. Also prevent the reg_read from being reordered relative to the for loop. This isn't necessary if the loop's conditional printk counts as an implicit barrier, but better make it explicit. (self_id_cpu[] is a coherent DMA buffer.) Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-sbp2: use an own workqueue (fix system responsiveness)Stefan Richter1-4/+13
Firewire-sbp2 did very uncooperative things in the kernel's shared workqueue: Sleeping until reception of management status from the target for up to 2 seconds, and performing SCSI inquiry and all of the setup of SCSI command set drivers via scsi_add_device. If there were transient or permanent error conditions, this caused long blockage of the kernel's events process, noticeable e.g. by blocked keyboard input. We now allocate a workqueue process exclusive to fw-sbp2. As a side effect, this also increases parallelism of fw-sbp2's login and reconnect work versus fw-core's device discovery and device update work which is performed in the shared workqueue. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-10-17firewire: fw-sbp2: expose module parameter for workaroundsStefan Richter1-12/+54
On rare occasions, the ability to set one of the workaround flags at runtime may save the day. People who experience I/O errors with firewire-sbp2 while the old sbp2 driver worked for them should try workarounds=1 and report to the devel mailinglist whether that improves things. Firewire-sbp2 defaults to the SCSI stack's maximum transfer size per command, while sbp2 limits them to 128 kBytes. Flag 1 accomplishes just that. Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-sbp2: add support for multiple logical units per targetStefan Richter2-256/+324
Fixes "New firewire stack only recognizing half of a chain of drives", https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=242254 Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: fw-sbp2: always enable IRQs before calling command ORB callbackStefan Richter1-2/+3
On IOMMU-less noncoherent architectures, orb->callback will memcpy the whole SCSI command buffer for READ-like SCSI commands. It is therefore friendlier to enable IRQs before the call, like before patch "Add ref-counting for sbp2 orbs". Signed-off-by: Stefan Richter <[email protected]> Acked-by: Kristian Høgsberg <[email protected]>
2007-10-17firewire: fw-core: local variable shadows a global oneStefan Richter1-11/+10
Sparse warned about it although it was apparently harmless: drivers/firewire/fw-cdev.c:624:23: warning: symbol 'interrupt' shadows an earlier one include/asm/hw_irq.h:29:13: originally declared here Signed-off-by: Stefan Richter <[email protected]>
2007-10-17firewire: optimize fw_core_add_address_handlerStefan Richter1-3/+9
Potentially avoids unnecessary loop runs. Guarantee quadlet-aligned starts of address regions. Document the return values. Signed-off-by: Stefan Richter <[email protected]>
2007-10-14fw-cdev __user annotationsAl Viro1-2/+3
Signed-off-by: Al Viro <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2007-10-12Driver core: change add_uevent_var to use a structKay Sievers1-9/+2
This changes the uevent buffer functions to use a struct instead of a long list of parameters. It does no longer require the caller to do the proper buffer termination and size accounting, which is currently wrong in some places. It fixes a known bug where parts of the uevent environment are overwritten because of wrong index calculations. Many thanks to Mathieu Desnoyers for finding bugs and improving the error handling. Signed-off-by: Kay Sievers <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Cornelia Huck <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2007-10-07firewire: point to migration documentStefan Richter1-1/+2
Signed-off-by: Stefan Richter <[email protected]>
2007-09-07firewire: fw-ohci: ignore failure of pci_set_power_state (fix suspend ↵Stefan Richter1-4/+2
regression) Fixes (papers over) "Sleep problems with kernels >= 2.6.21 on powerpc", http://lkml.org/lkml/2007/8/25/155. The issue is that the FireWire controller's pci_dev.current_state of iBook G3 and presumably older PowerBooks is still in PCI_UNKNOWN instead of PCI_D0 when the firewire driver's .suspend method is called. Like it was suggested earlier in http://lkml.org/lkml/2006/10/24/13, we do not fail .suspend anymore if pci_set_power_state failed. Signed-off-by: Stefan Richter <[email protected]>
2007-08-25firewire: Add ref-counting for sbp2 orbs (fix command abortion)Kristian Høgsberg1-9/+40
This handles the case where we get the status write before getting the complete_transaction callback ("status write for unknown orb"). In this case, we just assume that the initial orb pointer transaction succeeded and finish the orb. To prevent the transaction callback from touching freed memory, we ref-count the orb structures. Signed-off-by: Kristian Høgsberg <[email protected]> Signed-off-by: Stefan Richter <[email protected]>
2007-08-25firewire: fix unloading of fw-ohci while devices are attachedStefan Richter1-2/+4
Fix panic in run_timer_softirq right after "modprobe -r firewire-ohci" if a FireWire disk was attached and firewire-sbp2 loaded. Signed-off-by: Stefan Richter <[email protected]>
2007-08-02firewire: fw-core: make two variables staticStefan Richter1-2/+2
Signed-off-by: Stefan Richter <[email protected]>
2007-08-02firewire: fw-ohci: dma_free_coherent needs IRQs enabledStefan Richter1-7/+13
Signed-off-by: Stefan Richter <[email protected]>
2007-08-02firewire: fw-sbp2: set correct maximum payload (fixes CardBus adapters)Stefan Richter2-2/+5
As far as I know, all CardBus FireWire 400 adapters have a maximum payload of 1024 bytes which is less than the speed-dependent limit of 2048 bytes. Fw-sbp2 has to take the host adapter's limit into account. This apparently fixes Juju's incompatibility with my CardBus cards, a NEC based card and a VIA based card. Signed-off-by: Stefan Richter <[email protected]> Acked-by: Kristian Høgsberg <[email protected]>
2007-07-22Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6Linus Torvalds1-1/+1
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (60 commits) [SCSI] libsas: make ATA functions selectable by a config option [SCSI] bsg: unexport sg v3 helper functions [SCSI] bsg: fix bsg_unregister_queue [SCSI] bsg: make class backlinks [SCSI] 3w-9xxx: add support for 9690SA [SCSI] bsg: fix bsg_register_queue error path [SCSI] ESP: Increase ESP_BUS_TIMEOUT to 275. [SCSI] libsas: fix scr_read/write users and update the libata documentation [SCSI] mpt fusion: update Kconfig help [SCSI] scsi_transport_sas: add destructor for bsg [SCSI] iscsi_tcp: buggered kmalloc() [SCSI] qla2xxx: Update version number to 8.02.00-k2. [SCSI] qla2xxx: Add ISP25XX support. [SCSI] qla2xxx: Use pci_try_set_mwi(). [SCSI] qla2xxx: Use PCI-X/PCI-Express read control interfaces. [SCSI] qla2xxx: Re-factor isp_operations to static structures. [SCSI] qla2xxx: Validate mid-layer 'underflow' during check-condition handling. [SCSI] qla2xxx: Correct setting of 'current' and 'supported' speeds during FDMI registration. [SCSI] qla2xxx: Generalize iIDMA support. [SCSI] qla2xxx: Generalize FW-Interface-2 support. ...
2007-07-19[SCSI] Make scsi_host_template::proc_name const char * instead of char *.Kristian Høgsberg1-1/+1
Signed-off-by: Kristian Høgsberg <[email protected]> collapsed with fw-sbp2 patch "Drop cast to non-const char * in host template initialization." from Kristian Høgsberg Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: James Bottomley <[email protected]>
2007-07-18firewire: fw-sbp2: convert to new SCSI data buffer accessorsStefan Richter1-9/+7
Signed-off-by: Stefan Richter <[email protected]>
2007-07-18firewire: fix memory leak of fw_request instancesStefan Richter2-1/+7
Found and debugged by Jay Fenlason <[email protected]>. The bug was especially noticeable with direct I/O over fw-sbp2. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-07-18firewire: remove bogus check in fw_core_handle_requestStefan Richter1-5/+0
This check is bogus: - Maximum asynchronous payload size for S800...S3200 is 4096. - The p->payload_length is totally uninteresting. Only the request->length of the subsequently allocated and initialized struct fw_request is of significance. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-07-18firewire: fw-ohci: fix "scheduling while atomic"Stefan Richter1-1/+1
context_stop is called by bus_reset_tasklet, among else. Signed-off-by: Stefan Richter <[email protected]>
2007-07-18firewire: fw-ohci: flush MMIO write before msleepStefan Richter1-0/+1
Signed-off-by: Stefan Richter <[email protected]>
2007-07-10firewire: fw-sbp2: fix DMA mapping of management ORBsStefan Richter1-12/+9
The CPU must not touch the buffer after it was DMA-mapped. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-07-10firewire: fw-sbp2: fix DMA mapping of command ORBsStefan Richter1-9/+6
The CPU must not touch the buffer after it was DMA-mapped. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-07-10firewire: fw-sbp2: fix DMA mapping of S/G tablesStefan Richter1-11/+8
- The CPU must not touch the buffer after it was DMA-mapped. - The size argument of dma_unmap_single(...page_table...) was bogus. - Move a comment closer to the code to which it refers to. Signed-off-by: Stefan Richter <[email protected]> Signed-off-by: Kristian Høgsberg <[email protected]>
2007-07-10firewire: fw-sbp2: add a boundary checkStefan Richter1-0/+5
Add rudimentary check for the case that the page table overflows due to merging of s/g elements by the IOMMU. This would have lead to overwriting of arbitrary memory. After this change I expect that an offending command will be unsuccessfully retried until the scsi_device is taken offline by SCSI core. It's a border case and not worth to implement a recovery strategy. Signed-off-by: Stefan Richter <[email protected]> Acked-by: Kristian Høgsberg <[email protected]>
2007-07-10firewire: fw-sbp2: correctly align page tablesStefan Richter1-1/+1
This is required per SBP-2 clause 5.2. Signed-off-by: Stefan Richter <[email protected]> Acked-by: Kristian Høgsberg <[email protected]>
2007-07-10firewire: fw-sbp2: memset wants string.hStefan Richter1-0/+1
Signed-off-by: Stefan Richter <[email protected]> Acked-by: Kristian Høgsberg <[email protected]>