Commit Graph

732 Commits

Author SHA1 Message Date
Søren Schmidt
6230b63c5a Do at better job at unit numbering. 2004-04-30 18:49:03 +00:00
Søren Schmidt
ad452ba45c Spring cleanup of macros 2004-04-30 16:21:34 +00:00
Søren Schmidt
1e311c1849 Reduce the time spent looking for devices on channels that return
what looks like garbage.
2004-04-27 15:52:08 +00:00
Søren Schmidt
1b7cfe4458 Use pci_get_progif to decide if this is one of the primary/secondary
channels. This also work when PCI native mode has been selected
(patch for /sys/dev/pci/pci.c needed for that) since pci_get_progif
uses the saved value for progif, not the one stored after we may have
changed from legacy mode to native PCI mode.
2004-04-27 12:54:59 +00:00
Søren Schmidt
494377df3d Try the simplify determining what is ata0 and ata1.
Remove the PCI native addressing code, it eed to be run before we even
have control in the ATA driver and should be moved to the pci code.
2004-04-24 16:32:06 +00:00
Søren Schmidt
3b53326f69 Change setup for SiS device to allow PCI native mode. 2004-04-24 15:54:20 +00:00
Søren Schmidt
4ee3fbe86b Make the test for ATA PCI legacy addressing mode more robust.
Add code (currently ifdef'd out) to allow ATA PCI native addressing.
Fix the altio offset for ATA PCI devices.
2004-04-21 20:03:26 +00:00
Søren Schmidt
470fcc93b9 Do not pre-allocate resources for BAR's on ATA MASTERDEV's thats on
the standard ATA primary and secondary addresses.

Reintroduce the size 1 ALTIO space so that we can have both ATA and
floppies back working.
2004-04-20 20:57:29 +00:00
Søren Schmidt
9036df118c Move a verbose printf before the first exit so we get a chance
to see what was there.
2004-04-19 18:29:43 +00:00
Søren Schmidt
f2972d7eb8 Add support for the Promise command sequencer present on all modern Promise
controllers (PDC203** PDC206**).

This also adds preliminary support for the Promise SX4/SX4000 but *only*
as a "normal" Promise ATA controller (ATA RAID's are supported though
but only RAID0, RAID1 and RAID0+1).

This cuts off yet another 5-8% of the command overhead on promise controllers,
making them the fastest we have ever had support for.

Work is now continuing to add support for this in ATA RAID, to accellerate
ATA RAID quite a bit on these controllers, and especially the SX4/SX4000
series as they have quite a few tricks in there..

This commit also adds a few fixes to the SATA code needed for proper support.
2004-04-13 09:44:20 +00:00
Nate Lawson
5f96beb9e0 Convert callers to the new bus_alloc_resource_any(9) API.
Submitted by:	Mark Santcroos <marks@ripe.net>
Reviewed by:	imp, dfr, bde
2004-03-17 17:50:55 +00:00
Søren Schmidt
b47183d51a Update the SiS support to distinguish older southbridges better. 2004-03-16 16:23:28 +00:00
Søren Schmidt
498e55436a Add support for detaching PCI controllers.
This adds support for cardbus ATA/SATA controllers. I get roughly the
same transfer speeds as on true PCI controllers. Nice to be able to add
a couble of "real" disks to a laptop :)
2004-03-15 12:03:48 +00:00
Søren Schmidt
ba18e26520 Add yet another VIA pci id. 2004-03-11 14:08:11 +00:00
Søren Schmidt
c5df0d743e Only setup sii_reset on sii311[24]. 2004-03-04 16:39:59 +00:00
Thomas Quinot
71fe368a83 Use auto-sense data provided by the lowlevel ATA code. 2004-03-04 15:37:39 +00:00
Søren Schmidt
f0aafe7d84 If being verbose in the autosense code, print the original error. 2004-03-02 16:16:54 +00:00
Søren Schmidt
37baea5bd5 Report the original command on failures that causes auto sense.
Keep the ATA_R_QUIET flag if set during autosense.
2004-03-02 14:05:12 +00:00
Søren Schmidt
c4c0e4fc3b Fix getting progress data for some device in yet another way.
Take advantage of the new autosense logic.
2004-03-02 14:03:43 +00:00
Søren Schmidt
e7c9858a8f Remember to mtx_destroy mutexes. 2004-03-01 13:17:07 +00:00
Søren Schmidt
9a19089d86 Rearrange sense_key and sense_data to get alignment right.
Submitted by: Marcel
2004-02-29 09:35:29 +00:00
Søren Schmidt
dc7485d940 Issue a request sense command automagically when ATAPI commands fail
with a valid sense key.
2004-02-28 17:47:27 +00:00
Søren Schmidt
1c342d89ce Add support for the sii3512 SATA chip. 2004-02-25 09:55:49 +00:00
Poul-Henning Kamp
dc08ffec87 Device megapatch 4/6:
Introduce d_version field in struct cdevsw, this must always be
initialized to D_VERSION.

Flip sense of D_NOGIANT flag to D_NEEDGIANT, this involves removing
four D_NOGIANT flags and adding 145 D_NEEDGIANT flags.
2004-02-21 21:10:55 +00:00
Søren Schmidt
056b9907de Dont alloc size 0 buffers. 2004-02-21 18:30:03 +00:00
Søren Schmidt
73f8099662 Check both PORTEN and MEMEN for enabled HW. 2004-02-21 18:21:13 +00:00
Søren Schmidt
0c7ab1146f Only register interrupt as seen if it was a real HW interrupt. 2004-02-21 16:55:10 +00:00
Poul-Henning Kamp
0b7ed341e1 Change the disk(9) API in order to make device removal more robust.
Previously the "struct disk" were owned by the device driver and this
gave us problems when the device disappared and the users of that device
were not immediately disappearing.

Now the struct disk is allocate with a new call, disk_alloc() and owned
by geom_disk and just abandonned by the device driver when disk_create()
is called.

Unfortunately, this results in a ton of "s/\./->/" changes to device
drivers.

Since I'm doing the sweep anyway, a couple of other API improvements
have been carried out at the same time:

The Giant awareness flag has been flipped from DISKFLAG_NOGIANT to
DISKFLAG_NEEDSGIANT

A version number have been added to disk_create() so that we can detect,
report and ignore binary drivers with old ABI in the future.

Manual page update to follow shortly.
2004-02-18 21:36:53 +00:00
Søren Schmidt
3b270fcfe8 Dont use the bio_taskqueue if we are in timeout.
Use taskqueue_thread rather than taskqueue_swi (maybe we should have
a taskqueue_ata).
2004-02-17 19:24:11 +00:00
Thomas Quinot
a0e1020523 (atapi_cb): Reenable automatic retrieve of sense data on error, making
it asynchronous to avoid incorrect use of ata_atapicmd within an
 ATAPI callback.

Tested by:	harti
2004-02-11 10:14:08 +00:00
Søren Schmidt
fb94df0e92 Commit simple workarounf for the "LiteOn" hang on boot problem.
This allows the system to boot so I can get the world out of
my mailbox and get some work done to figure out what this mess
is all about.
2004-02-06 11:36:50 +00:00
Søren Schmidt
b8f6dec455 Move the enabling of interrupt back to where it was some time ago.
This apparently was what broke the boot with some devices (liteon).
2004-02-02 15:49:01 +00:00
Søren Schmidt
6595b49405 Fix support for the Promise TX4 on amd64.
Somehow the bridge on there shows up with another PCI id than
it does on x86, no idea why...
2004-02-02 14:05:57 +00:00
Søren Schmidt
367d380b54 Be more robust in the probe. We dont want to get into a loop with
reinitting when we try to identify devices. If they dont interrupt
on identify we retry once. If this fails we simply ignore that device.
2004-01-30 19:16:08 +00:00
Søren Schmidt
f279a36c6e Cleanups/cosmetics. 2004-01-29 15:03:01 +00:00
Søren Schmidt
175352f07c Fix for those lost interrupts on probe on lots of controller types.
Note to self, just because an idea is good, it doesn't apply everywhere.
2004-01-28 21:54:40 +00:00
Søren Schmidt
816994ccc8 Use the biotask functionality in GEOM to put finished requests on
instead of taskqueue_swi. This shaves from 1 to 10% of the overhead.

Overhaul the locking once more, there was a few possible races that
are now closed.
2004-01-28 20:38:51 +00:00
Søren Schmidt
17cafb29a0 Fix breakage in PIO multisector support. 2004-01-23 10:38:56 +00:00
Søren Schmidt
8a1bddb753 Update the support for the VIA 8237 southbridge. 2004-01-20 16:51:02 +00:00
Søren Schmidt
cedc7194d5 Fix breakage on timeout/retries. The bug cause a sema to be leaked so
that the calling process would newer wakeup.
2004-01-19 15:20:00 +00:00
Ruslan Ermilov
bbc712e6ba Fixed a memory leak. 2004-01-18 17:21:15 +00:00
Søren Schmidt
61016883ad Fix botch in last commit. 2004-01-18 15:58:30 +00:00
Søren Schmidt
7c633af872 Add missing free's. 2004-01-18 10:50:40 +00:00
Søren Schmidt
74a1b9fccf Add support for the Silicon Image 3114 4 channel SATA controller. 2004-01-17 23:34:13 +00:00
Søren Schmidt
5df3ca789c Use UMA instead of plain malloc for getting ATA request storage.
This gives +10% performance on simple tests, so definitly worth it.
A few percent more could be had by not using M_ZERO'd alloc's, but
we then need to clear fields all over the place to be safe, and
that was deemed not worth the trouble (and it makes life dangerous).
2004-01-14 21:26:35 +00:00
Søren Schmidt
ee242ddc36 Fix potential cable detection problem on older CMD chips. 2004-01-14 14:24:36 +00:00
Søren Schmidt
6f595c71c2 Fix ata_getparam to accept the fact that some crappy devices can pose as
both master and slave at the same time confusing the probe code.
2004-01-13 21:35:39 +00:00
Søren Schmidt
45a0b23e06 Always return ENOMEM if ata_request_alloc fails so GEOM can dtrt. 2004-01-12 09:33:10 +00:00
Søren Schmidt
bd234a46da #include sema.h is now required. 2004-01-12 07:16:07 +00:00
Søren Schmidt
a7a120f649 Overhaul of the timeout/reinit framework. This should clear up most
of the leftovers from the old version that really doesn't work anymore.

Add a reset function for host-end of the ATA channel. This is needed
for the SiI3112 in order to whack it back to reality if a device
locks up the SATA interface (thereby preventing that we can reset the
device). The result is that ATA now recovers from the timeouts that
happens with the SiI3112A and more or less all disks based on old
PATA electronics with a Marvell PATA->SATA converter. This includes
lots of the popular SATA dongles and the WDC Raptor disks..
2004-01-11 22:08:34 +00:00
Søren Schmidt
986a964900 Use the saved params for LBA-CHS conversion. Fixes PC98 bug. 2004-01-08 19:17:16 +00:00
Søren Schmidt
608346656f Try to simplify the SiS probe. If SiS stays with the current schema for
new nothbridges we should even find the southbridge and be able to
use it (if its one we know that is).
2003-12-25 19:37:11 +00:00
Søren Schmidt
913bde73c9 Fix the register timings for AMD/VIA/nVidia chipsets. 2003-12-18 17:36:41 +00:00
Søren Schmidt
186939d1f5 Add support for the SiS 661 chipset (using SiS 963 south). 2003-12-18 08:07:05 +00:00
Søren Schmidt
14d7f69797 Fix compilation on 64bit archs. 2003-12-16 19:41:38 +00:00
Søren Schmidt
dd8fa07d07 Print the LBA on failing R/W commands. 2003-12-15 20:43:17 +00:00
Søren Schmidt
b9e240face Finetune last commit, we need to take care of empty channels. 2003-12-10 23:06:24 +00:00
Søren Schmidt
a5cd71ee7b Add back the national support, this was removed by accident earlier. 2003-12-09 19:13:50 +00:00
Søren Schmidt
49373540b9 More errata fixing for the SiI3112A disaster chip:
Serialize access to the SATA channels, the chip messes up if
both channels are used at the same time.

The SiI3112 hereby takes the price as the most crappy SATA chip in
existance by a significant amount.

My advise to our userbase is to avoid this chip like the plague...
2003-12-08 09:22:20 +00:00
Søren Schmidt
ea828b0636 Fix more problems with the Silicon Image 3112A:
Setup decent transfer mode defaults as some BIOS's seem to put in
things that it *knows* doesn't work.
(Note to BIOS writers: stop doing that nonsense, we will get things
working with your crappy HW anyways, and then recommend users to buy
someone else's products that "just works", thankyou.. )

Limit the device transfer mode to ATA100/UDMA5 on generic SATA.
 Since we dont know if the user is using a pure SATA device or an
old PATA drive with a SATA converter dongle, we need to limit the
speed used here to cover up the problems with Marvell ATA-SATA bridges
used in lots of SATA products.

This workaround is enabled for all detectable SATA controllers as they
seem to have semilar problems here. One notable exception is all the
Promise pdc2037x chips which just always work (cudos to Promise!).
2003-12-08 08:27:52 +00:00
Søren Schmidt
85dd785ec8 Try a little harder to catch when fixate finishes.
On the <QSI CD-RW/DVD-ROM SBW-242> that failed causing burncd to
wait forever...
2003-12-07 23:15:22 +00:00
Scott Long
21cbd69b19 Fix a potential problem with atapi-cam where an incorrect flag is passed
into the ata queueing layer.

Approved by:	re
2003-12-05 01:02:46 +00:00
Søren Schmidt
b4485f7a3c Fix for the missing slave problem.
Approved by: re@
2003-12-03 15:32:53 +00:00
Søren Schmidt
019446db3a Fix modesetting on ISA only systems.
Approved by: re@
2003-12-03 13:40:26 +00:00
Søren Schmidt
ccd50c4818 Fix ata-card.
The altio resource magic no longer worked probably due to other changes
in the kernel. Redo that part so it also fits better into ATAng.
Fix detach so it doesn't panic the system when a pccard device is
yanked.

Approved by: re@
2003-11-30 16:27:59 +00:00
Søren Schmidt
b437f21e88 Workaround for errata on early versions of the sii3112.
Approved by: re@
2003-11-28 19:01:28 +00:00
Søren Schmidt
bf0d5626ce Correct the former patch, I accidently committed the wrong version.
Approved by: re@
2003-11-24 14:54:41 +00:00
Søren Schmidt
61058204d5 Fix panic on certain failed configs.
Approved by: re@
2003-11-24 14:22:30 +00:00
Søren Schmidt
62104e9446 Be less noisy when GEOM probes around during boot if drive contains
invalid media (ie empty CD/DVD)

Approved by: re@
2003-11-24 14:20:19 +00:00
Søren Schmidt
c08809df49 Fix support for the cmd646 chip.
Spotted by: tmm
reviewed by: re@
2003-11-21 22:58:56 +00:00
Søren Schmidt
f584b21960 Add support for the SiS964 ATA/SATA southbridge.
This could not have been done without the support from kuriyama.

Approved by: re@
2003-11-18 15:27:28 +00:00
Søren Schmidt
d7536ac93e Work around the problem that some CDROM drives might return different
TOC's for the same media!! that borks up GEOM.
Although this looks like bad HW the following patch removes the
chance for GEOM panic'ing.

Approved by: re@
2003-11-18 15:23:37 +00:00
Søren Schmidt
1bebf0fbc9 Centralise mode setting. Instead of doing it in all subdrivers, do
it in ata-all.c where it belongs.

Prime controller HW by always setting PIO mode first in attach.
2003-11-11 14:55:36 +00:00
Søren Schmidt
b25f2bc835 Update the dump code to flush buffers at the end of the dump
to avoid loosing evt cached data.
2003-11-11 07:49:45 +00:00
Scott Long
65b5d09597 Free the ata_request struct after we are done using it. This should stop
the memory leak seen when using ATAPICAM.
2003-11-09 20:46:08 +00:00
Søren Schmidt
35e67f571f Fix typo in breaking up requests to size limit.
Found by: Peter Edwards <pmedwards@eircom.net>
2003-11-09 10:11:15 +00:00
Søren Schmidt
aeb1d7b554 Remove the NOGIANT flag again, it was premature. 2003-11-08 09:56:34 +00:00
Søren Schmidt
8bea451207 Better attempt at fooling GEOM into working with burnable media. 2003-11-07 08:31:09 +00:00
Søren Schmidt
c851b49b9b Pull ataraid out from under giant.
Use the right bio_* fields for internal stuff.
2003-11-05 15:41:20 +00:00
Dag-Erling Smørgrav
9e4826180a Move sysctl declarations next to the corresponding tunable declarations.
Add a sysctl declaration for hw.ata.atapi_dma, which had gone MIA (though
setting it in loader.conf still worked, it was not visible at runtime)

Approved by:	sos
2003-11-03 09:25:02 +00:00
Søren Schmidt
12146c454b Fix burning of CD's that got broken by the GEOM'ification.
GEOM was not designed to handle media that does not have
a size. Blank CD's are of that type, so cheat and set the
media size to -1. This allows burning to work, but makes
GEOM issue outofrange reads that makes the ATAPI subsystem
spew out a few warnings. GEOM should be tought about this.

GEOM was not designed to handle changing the sectorsize
between opens. Writing multitack CD's with both audio and
data tracks needs to change sector size on the fly. We
cheat here and stuff the current sectorsize into GEOM
private internals. GEOM should grow some clean way for this.
2003-11-02 22:24:47 +00:00
Søren Schmidt
375e076b12 On ATA control commands return the registers in the request. 2003-11-02 22:04:53 +00:00
Søren Schmidt
908e9ae3ec GEOM'ify atapi-cd. Original patch by phk, subtle changes by me. 2003-11-01 09:44:33 +00:00
Søren Schmidt
db6c46469e Fix cable detection on AMD chips. 2003-11-01 09:30:15 +00:00
Søren Schmidt
f969ea6912 Add support for the VIA 8237 (both PATA and SATA part).
Cleanup the SATA support a bit now we are here anyways.
2003-10-30 13:16:21 +00:00
Søren Schmidt
60279a3808 Cleanup the interrupt code that deals with the busmaster bits. 2003-10-28 21:08:14 +00:00
Søren Schmidt
45f13b849c This should allow us to boot with DMA enabled on unknown PCI ATA
chipsets, well at least newer ones...
2003-10-28 19:01:48 +00:00
Søren Schmidt
4788059c5e Properly unload the DMA SG list on errors. 2003-10-21 19:25:20 +00:00
Søren Schmidt
80344be509 Fix the DMA problem that most severely hit on the DS3112a SATA chip
in connection with Marvell based SATA->PATA dongles.

The problem was caused by a combination of things working
together to make it hard to spot...

The ATA driver has always started the ATA command, then build
the SG list for DMA and then finally started the DMA engine.
While this is according to specs, it poses a potential
problem as some controllers apparently do not allow for unlimitted
time between starting the ATA command and starting the DMA engine.

At about the same time as ATAng was committed there were lots
of other changes applied, some of which was locking in parts
that causes the busdma load functions to take significantly
longer to load the SG list.

This pushed the time spent between starting the ATA command and
starting the DMA engine over the hill for some controllers
(especially the Silicon Image DS3112a) and caused what looked
like lost interrupts.

The solution is to get all the SG list work or rather all
busdma related stuff done before we even try to start anything.

This has the nice side effect of seperating busdma out the
way it should be, so the working of the ATA machinery is not
cluttered up with busdma droppings, making the code easier
to read and understand.
2003-10-21 19:20:37 +00:00
Mike Silbersack
184dcdc7c8 Change all SYSCTLS which are readonly and have a related TUNABLE
from CTLFLAG_RD to CTLFLAG_RDTUN so that sysctl(8) can provide
more useful error messages.
2003-10-21 18:28:36 +00:00
Søren Schmidt
c3093074c4 Up the alignment requirement of the SC1100 to 16 bytes, it has all the bugs and then some of its Cyrix inheritance.
Set the max_iosize for the Cyrix to 63K as the SC1100.
2003-10-21 08:53:29 +00:00
Søren Schmidt
a89ec7140f If just gcc could make up its mind... 2003-10-20 14:28:37 +00:00
Søren Schmidt
2e7deb2b86 Only return valid DMA error bits. 2003-10-20 13:45:11 +00:00
Søren Schmidt
5b2b2eba16 Up delay from 10 to 100ms after reset, this helps some slow devices
get their act together before we start probing.
2003-10-20 13:44:33 +00:00
Søren Schmidt
87efd6d017 Only announce ECC errors when its only that. 2003-10-20 13:32:42 +00:00
Poul-Henning Kamp
3a71ca7daa No need to initialize bio_pblkno from bio_blkno, disksort uses bio_offset. 2003-10-18 17:24:51 +00:00
Søren Schmidt
a827a5ff6a Reintroduce the "recovered from lost interrupt" code, but in a new
(hopefully) panic safe way.

Why the interrupts are lost is still a mystery, to me at least.
2003-10-14 16:53:13 +00:00
Søren Schmidt
ffd08d59ae Redo the code that handles eject/close. 2003-10-12 13:11:57 +00:00
Søren Schmidt
15749e8d06 Avoid potential race on ATA_R_DONE. 2003-10-12 12:38:03 +00:00
Søren Schmidt
c4c8a3e041 Put devices into sleep mode (ie spin down) on detach. 2003-10-12 12:37:11 +00:00