Home | History | Annotate | Download | only in pci
History log of /src/sys/dev/pci/pciide.c
RevisionDateAuthorComments
 1.219  06-Nov-2010  jakllsch branches: 1.219.18;
Rework pciide(4) detachment to take the legacy interrupt mapping into
consideration and avoid future code duplication.

Ports wanting to enable detachment of controllers with compatibility-mapped
channels will need to supply a pciide_machdep_compat_intr_disestablish()
function.
 1.218  05-Nov-2010  jakllsch pciide(4): Sprinkle static, add detachment support.
 1.217  19-Oct-2009  bouyer branches: 1.217.2; 1.217.4;
Remove closes 3 & 4 from my licence. Lots of thanks to Soren Jacobsen
for the booring work !
 1.216  18-Mar-2008  cube branches: 1.216.4;
Split device_t and softc for ATA devices, as well as wd(4). Other
cosmetic changes where appropriate.
 1.215  16-Nov-2006  christos branches: 1.215.24; 1.215.44; 1.215.48;
__unused removal on arguments; approved by core.
 1.214  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.213  11-Dec-2005  christos branches: 1.213.20; 1.213.22;
merge ktrace-lwp.
 1.212  27-Feb-2005  perry branches: 1.212.4;
nuke trailing whitespace
 1.211  04-Feb-2005  perry de-__P
 1.210  17-Sep-2004  enami branches: 1.210.4; 1.210.6;
Whitespace nit.
 1.209  08-Oct-2003  bouyer Split pciide in per-chip family driver, as proposed in
http://mail-index.netbsd.org/tech-kern/2003/09/25/0007.html
We now have:
acardide* at pci? dev ? function ? # Acard IDE controllers
aceride* at pci? dev ? function ? # Acer Lab IDE controllers
cmdide* at pci? dev ? function ? # CMD tech IDE controllers
cypide* at pci? dev ? function ? # Cypress IDE controllers
hptide* at pci? dev ? function ? # Triones/HighPoint IDE controllers
optiide* at pci? dev ? function ? # Opti IDE controllers
piixide* at pci? dev ? function ? # Intel IDE controllers
pdcide* at pci? dev ? function ? # Promise IDE controllers
siside* at pci? dev ? function ? # SiS IDE controllers
slide* at pci? dev ? function ? # Symphony Labs IDE controllers
viaide* at pci? dev ? function ? # VIA/AMD/Nvidia IDE controllers
pciide* at pci? dev ? function ? flags 0x0000 # GENERIC pciide driver

serverworks driver not commited yet; there are still copyright issues about
it.
 1.208  08-Oct-2003  bouyer Make the ATA mid-layer appears as atabus, as proposed in
http://mail-index.netbsd.org/tech-kern/2003/09/25/0006.html
This adds a device (atabus) between IDE controllers and wd or atapibus, to
have each ATA channel show up in the device tree. Later there will be atabus
devices in /dev, so that we can do IOCTL on them.
Each atabus has its own kernel thread, to handle operations that needs polling,
e.g. reset and others.

Device probing on each bus it defered to the atabus thread creation.
This allows to do the reset and basic device probes in parallel, which reduce
boot time on systems with several pciide controllers.
 1.207  05-Oct-2003  bouyer Remove references to University of California from my copyright notices.
 1.206  25-Sep-2003  mycroft Hide the use of config_interrupts() in one place.
 1.205  23-Sep-2003  mycroft Fix more probe delay and/or failure problems:
1) Don't wait for DRQ on an IDENTIFY command -- if it's not set when we see
BSY clear, abort the command and ignore the drive. (Do this by testing
for DRQ in the read/write cases in __wdccommand_intr().)
2) Don't wait for DRQ to deassert when we finish an IDENTIFY (or any other
non-block command that reads data) -- we don't do this for block I/O, and
empirically it doesn't clear on my CF cards at all, causing a pointless 1s
delay.
3) Add comments to some of the delay()s, and add missing ones in wdcreset()
and the WDCC_RECAL in the so-called "pre-ATA" probe.
4) Slightly simplify the reset sequence -- we were doing an extra I/O.
5) Modify the register writability test to make sure that registers are not
overlapped -- this can happen in some weird cases with a missing device 1.
6) Check the error register value after the reset -- if it's not 01h or 81h,
as appropriate (see ATA spec), punt.
Tested with a number of ATA-only, ATAPI-only, mixed ATA-ATAPI, CF, and IDE
disk configurations.

Also remove the SINGLE_DRIVE nonsense again.
 1.204  21-Sep-2003  bouyer Ops, remove a line that escaped out of my local tree.
 1.203  21-Sep-2003  bouyer The return value from pciide_mapregs_* are ignored; make them return void.
Re-add support for HPT366 in compat mode.
 1.202  21-Sep-2003  bouyer Since we can't detect ghost drives in the wdc back-end, resurect
WDC_CAPABILITY_SINGLE_DRIVE.
 1.201  20-Sep-2003  enami Make sure the message from pciide_chipen() starts at the beginning of line.
 1.200  19-Sep-2003  mycroft 1) Use config_interrupts() to attach IDE and ATAPI drives. This eliminates
most polling.
2) Clean up some goofiness in pciide -- get rid of the whole "candisable" path
(it's gratuitous) and simplify the code by calling pciide_map_compat_intr(),
*_set_modes() and wdc_print_modes() from central locations.
3) Add a register writability and register ghost test to eliminate phantom
drives more quickly.
 1.199  17-Sep-2003  bouyer Add back support for the legacy VT8237 IDE controller.
This wasn't an error, on this chipset we have the SATA controller on function
0 of the IDE controller, not the pcib bridge.
Fix provided by Stephen Degler.
 1.198  15-Sep-2003  bouyer Add support for Intel 82801EB Serial ATA. Not tested with a drive yet,
Matthias Scheler tested that the controller attaches properly.
 1.197  15-Sep-2003  bouyer Add support for VIA 8237 Serial ATA. From Stephen Degler in kern/22727,
with some cleanup by me.
 1.196  17-Aug-2003  bouyer Add support for VIA VT8237 (KT600) IDE controller. From Stephen Degler in
PR port-i386/22453.
 1.195  10-Aug-2003  bouyer Corect offset for the promise "magic registers" (it depends on channel number).
This makes cable detect work properly for newer promise (pdc268 and newer).
 1.194  28-Jun-2003  bouyer branches: 1.194.2;
Correct setup of General Purpose Register for PDC20265 (Ultra/100) and newer.
From Andreas Johansson in private mail.
 1.193  28-Jun-2003  bouyer Add support for ICH5, from Quentin Garnier in private mail.
 1.192  17-May-2003  thorpej * Use aprint*().
* Add Ultra/133 to wdc_print_modes().
 1.191  28-Apr-2003  nakayama Make DMA mode works on Promise Ultra66/100 with 48-bit LBA drives.
Ok'ed by bouyer in tech-kern@netbsd.org.
 1.190  19-Apr-2003  christos PR/21236: Simon Hitzemann: Fix missing space in error format. While I am
there make a single copy of the error string instead of 6 and share it.
 1.189  05-Apr-2003  kent Add '(ICH3)' to the names of 82801CA for consistency with other 82801xx names
 1.188  04-Apr-2003  kent Support for ICH4M IDE Controller
 1.187  20-Mar-2003  thorpej Add support for the Silicon Image SATALink 3112 Serial ATA controller.
 1.186  19-Mar-2003  thorpej Fix pasto.
 1.185  18-Mar-2003  thorpej Add register definitions for the Intel i31244 Serial ATA controller.
 1.184  18-Mar-2003  thorpej Add very basic support for the Intel i31244 Serial ATA controller.
We only support legacy (i.e. PCI IDE compatible) mode, for now. Also
note that DMA is disabled for rev 0 chips unless explicitly enabled
with PCIIDE_I31244_ENABLEDMA.
 1.183  15-Mar-2003  bouyer Ops, I commited the previous change (improved SiS support) from thr wrong tree.
Sync with the latest diff I made available, and also include changes from
kern/20710 which is much better than the hack I've done.
 1.182  14-Mar-2003  bouyer Rework SiS support: more controller supported (up to Ultra/133) and better
support for the older ones.
Information for this work extracted from Soeren Schmidt's FreeBSD driver.
 1.181  28-Feb-2003  enami Match ServerWorks CSB6 IDE controller.
 1.180  27-Jan-2003  thorpej Experimental support for RAID volumes configured by ATA "RAID" controllers.
Such RAID controllers are actually just IDE controllers with a BIOS that
can create RAID volumes and write the configuration info to config blocks
on the disks. The BIOS can do I/O to these volumes, and the OS must
understand the config blocks and implement RAID in software in order to be
able to use these volumes.

Only SPAN (simple concatenation) and RAID0 are supported at this time,
and writing back config blocks is also not supported at this time. Currently,
only the Promise configuration scheme is supported, although supporting
the Highpoint scheme should not be too difficult.

In any case, this is sufficient to use the Promise RAID0 volume (thus
preserving the win2k AS installation) on this new Intel server I have.

Thanks to Soren Schmidt for doing the work in FreeBSD; it made this
task much easier. The config block parsing code is adapted from his
work.
 1.179  25-Jan-2003  thorpej Add a couple more Promise ATA133 controllers.
 1.178  24-Jan-2003  thorpej * Enable Ultra133 on the NVIDIA nForce 2.
* Make sure to test for PCI_VENDOR_AMD before testing for any
AMD products.
 1.177  24-Jan-2003  thorpej Add support for the NVIDIA nForce ATA100 and nForce2 ATA133
IDE controllers, which are more-or-less compatible with the
AMD controllers.

XXX Need to determine the correct timing value for the nForce2
XXX at Ultra133, so we cap it at Ultra100, for now.
 1.176  26-Dec-2002  matt Recognize Promise Serial ATA/150 TX2plus
 1.175  20-Nov-2002  bouyer For sis_setup_channel, acer_setup_channel, hpt_setup_channel,
pdc202xx_setup_channel, pdc20268_setup_channel:
Properly compute the address of the DMA control register for channel 1.
I think the controllers ignore these bits, I suspect it's only there so that
the BIOS can tell the OS is has configured DMA, but better be correct.
Thanks to Alexander Yurchenko for pointing this out.
 1.174  05-Oct-2002  kent Add support for VIA VT8235
 1.173  02-Oct-2002  thorpej Add trailing ; to CFATTACH_DECL.
 1.172  30-Sep-2002  thorpej Use CFATTACH_DECL().
 1.171  27-Sep-2002  thorpej Declare all cfattach structures const.
 1.170  27-Sep-2002  provos remove trailing \n in panic(). approved perry.
 1.169  15-Sep-2002  bouyer Fix typo in comment. From Alexander Yurchenko <grange@rt.mipt.ru>
 1.168  25-Aug-2002  bouyer Support Ultra/133 on promise controllers that can do it.
 1.167  25-Aug-2002  bouyer Correct setup for Ultra133 capable VIA chipsets, From Matthias Drochner
on current-users, with cross-check and some improvement from linux-2.4.19
and FreeBSD-current.
Also don't set the APO_UDMA_CLK66 bit for Ultra/100 capable chipset, and
support Ultra/133 for the VT8233A.
 1.166  23-Aug-2002  bouyer Add support for HPT372. From sdegler@kashmir.degler.net in kern/17908,
with some improvement from me, and from FreeBSD.
 1.165  23-Aug-2002  bouyer Add support for Promise Ultra133TX2 and Ultra133TX2v2, from FreeBSD and
stephen@degler.net in kern/17509.
 1.164  10-Aug-2002  toshii Use UDMA/100 on SiS745 chipset.
 1.163  30-Jul-2002  bouyer Add support for the 82801DB ICH4 IDE controller, from kern/17757 by
Andreas Wrede <andreas@planix.com>
 1.162  26-Jul-2002  wiz Spell '[Rr]ight' correctly. From Jim Bernard.
 1.161  26-Jul-2002  onoe Add support of Silicon Image 0680 Ultra ATA/133 ATA Controller.
It's ugly that all register values are written in numeric, but I can't
find any definition of the registers to be written in literal.
 1.160  22-Jul-2002  bouyer Ops, this had already been commited by cjs.
Still, call the controller ATA133, even though we use it at ATA100 for now ...
 1.159  22-Jul-2002  bouyer Add VIA VT8233A support (at Ultra/100 until someone can test 133 for me).
From Ryo HAYASAKA, PR kern/17206.
 1.158  10-Jun-2002  cjs Recognise the VT8233A ATA100 controller and use Ultra-DMA mode 5 with it.
 1.157  09-Jun-2002  taca Add support for VIA Technologies's VT8231 IDE Controller to ATA/100.
 1.156  08-Jun-2002  bouyer Ops, use the proper setup_channel() function for promise adapters.
Using pdc202xx_setup_channel() for PDC20268 and newer is wrong, and will
cause trap trying to read from a non-existent register on some arches
(e.g. macppc).
pointed out by Makoto Fujiwara on port-macppc.
 1.155  04-Jun-2002  fvdl AMD 8111 DMA support.
 1.154  01-Jun-2002  bouyer Remove the "set south-bridge's enable bit" code. It doens't seems to make
any difference for rev 0xc3 controllers, and hang on 0xc4 controllers.
Fixes kern/16954
 1.153  19-May-2002  bouyer branches: 1.153.2;
Add support for HPT374. Submited by Matthew Rezny in kern/16897, with
minor adjustements by me.
 1.152  24-Apr-2002  aymeric branches: 1.152.2;
OPTi changes:
o keep WDC_CAPABILITY_DATA32 regardless of the version of the chip.
o correct typo to disable DMA correctly
 1.151  23-Apr-2002  bouyer More copyright fixes, pointed out by Thomas. Thanks !
 1.150  14-Apr-2002  bouyer bus_space_unmap() ctl_baseioh instead of ctl_ioh for the native case.
Pointed out by enami, and should fix kern/16307.
 1.149  12-Apr-2002  mycroft Add support for the ServerWorks OSB4 and CSB5 chipsets.
Note: The code is written a little more cruftily than it should be. It's also
only tested on the OSB4. I'm not sure it even makes sense to have support for
`native' mode, but I put it in just in case.
 1.148  05-Apr-2002  thorpej Reenable DMA on the Symphony/Winbond chips. The lossage I saw was
due to a broken pmap_extract() on ARM.
 1.147  04-Apr-2002  thorpej Hm, Symphony/Winbond support doens't seem to work quite right
yet; disable it for now.
 1.146  03-Apr-2002  thorpej Add bus master DMA support for the Symphony Labs 82C105 PCI IDE
controller. This part is also found in the Winbond 83C553 Southbrige.
 1.145  24-Mar-2002  bouyer Add support for the AMD768. Tested by Murray Armfield <murray@river-styx.org>.
 1.144  29-Jan-2002  bouyer Support Ultra/100 on Intel 830M. From ks@ub.uni-mainz.de on -current-users.
 1.143  28-Jan-2002  bouyer In hpt_pci_intr(): There is interrupt pending once IDEDMA_CTL_ACT is
turned off. It seems that IDEDMA_CTL_INTR is asserted before DMA transfer
is complete, leading to race condition in case of interrupt sharing.
Discovered reading the FreeBSD code.
 1.142  14-Jan-2002  augustss Add 82201CA to the chip table.
 1.141  08-Jan-2002  bouyer Fix typo in comment. Reported by Alexander Yurchenko in private mail.
 1.140  18-Dec-2001  bouyer Ops, a Ultra100>=TX2 is always in native mode !
 1.139  18-Dec-2001  bouyer The CMD0649 has 2 truly independant channel. tested by and patch from
Love <lha@stacken.kth.se>.
I suspect this is true for the 648 too; if someone with a 648 and one device
on each channel could test that all works with one_channel = 1, it would
be great !
 1.138  16-Dec-2001  bouyer dd support for the Promise Ultra100TX2, Promise Ultra100TX2v2 and Ultra133
IDE controllers. In part from OpenBSD via ragge, in part from FreeBSD.
 1.137  13-Dec-2001  bouyer pdc202xx_setup_channel: remove a duplicate line.
 1.136  21-Nov-2001  wiz Explicitly write explicitly without a second e.
 1.135  15-Nov-2001  bouyer Support Ultra/100 on CMD 0649.
 1.134  13-Nov-2001  lukem add RCSID
 1.133  26-Oct-2001  augustss Add Via KT266 as an ATA100 controller.
 1.132  21-Oct-2001  thorpej branches: 1.132.2;
Add a config flag (0x02) that can force DMA to be *disabled* on
chipsets for which it would otherwise be enabled by default.
 1.131  16-Oct-2001  tron Add UDMA/100 support for SiS chipsets 645, 650 and 730.
 1.130  14-Oct-2001  tron Use UDMA/100 on SiS 735 chipset.
 1.129  24-Sep-2001  bouyer Ali M5229 IDE controllers: tweak the rigth 0x79 register (the one from the
pci/isa bridge, not the one from the IDE controller).
 1.128  23-Aug-2001  tsutsui branches: 1.128.2;
Check 80 pins cable in acard_setup_channel() for Acard ATP860.
 1.127  03-Aug-2001  tsutsui Fix some typos in newer ALi M5229 support. Approved by bouyer.
 1.126  01-Aug-2001  tsutsui Remove unused pciide_print() declaration. From OpenBSD.
 1.125  28-Jul-2001  tsutsui Enable the Acard UIDE controllers by default.

My WDC MDMA-only (non-UDMA) drives did not work on the Acard controllers,
but it turns out that the problem was not Acard specific.
These WDC drives do not work on the ESS ISAPnP wdc port nor on
macppc obio wdc port neither, and another Quantum MDMA-only drive
works fine on the Acard.

These WDC drives work fine on my i386 pciide (which is initialized
by the BIOS), so maybe we have to do something in MI wdc to initialize
such drives properly...
 1.124  26-Jul-2001  bouyer Better support for newer ALI M5229 chipsets: support Ultra/66 for rev >= 0xC2,
Ultra/100 for revs >= 0xC4.
The the generic PCIIDE interupt routine for chipsets rev >= 0xC2 in native
mode, it seems that newer chipsets don't have the ACER_CHIDS register :(
From Linux and FreeBSD.
 1.123  23-Jul-2001  bouyer Handle HPT-370A controllers, from skanto@sjk-software.fi (kern/13540) but
with some differences to the original patch: don't assume all controllers with
rev >= HPT370_REV are HPT370, and explicitely print if we have a chip with a
rev the driver does't know.
 1.122  19-Jul-2001  thorpej Use BUS_DMA_READ and BUS_DMA_WRITE in some obvious places.
 1.121  04-Jul-2001  bouyer branches: 1.121.2;
Better fix for rev 1.94 (disable UDMA for SiS controllers with rev 0xd0):
Different chipsets have the same vendor/device/rev ID for the IDE controller,
but only one of them is buggy. So check dev/rev ID of the function 0
(pchb on the buggy one) of the same device to detect the buggy controller.
 1.120  13-Jun-2001  scw Workaround for buggy OPTi pciide chipset revisions, as reported
in PR/11644.
 1.119  08-Jun-2001  simonb For ports that wire up pciide in compatibility mode, have
them define __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH
in pci_machdep.h and pciide_map_compat_intr() only calls
pciide_machdep_compat_intr_establish() if that preprocessor
define exists.

Ports that don't need to do this no longer need to supply a
dummy function.
 1.118  30-May-2001  bouyer Uninitialised variable (from Krister Walfridsson): in acard_chip_map()
drop compatchan and use the real channel number instead.
 1.117  14-May-2001  matt Add latent vendor entries for ServerWorks and Winbond IDE controllers.
No code to use them as yet.
 1.116  06-May-2001  fvdl Add amd766 support. Rename some variables to 7x6 now that it supports
both 756 and 766.
 1.115  06-May-2001  fvdl Add missing break statement.
 1.114  04-May-2001  bouyer Now that we can do it, print "HPT366" or "HPT370" depending on PCI revision.
 1.113  04-May-2001  bouyer Better support for VIA chipsets: look at the product/rev ID of the ISA bridge
to guess the pciide capabilities, rather than trying to guess it by ourselve.
Add preliminary support for the 686b (Ultra/100) guessed from FreeBSD/linux
driver (datasheet not publically available, I contacted via).
Let chip-specific map routine do the autoconf printf if ide_name is NULL
(they may have more details about the controller than we have in pciide_attach)
 1.112  21-Apr-2001  tsutsui Preliminary support for Acard ATP850/860 UDMA PCI IDE controllers.

XXX Currently disabled by default because it has some problems on macppc.
XXX Maybe some more initialization is needed, but there is few information
XXX about the chips.
 1.111  21-Apr-2001  tsutsui space -> tab
 1.110  20-Mar-2001  bouyer Don't set up PDC2xx_SCR the same way for promise Ultra/66 & Ultra/100,
this special setup seems to break some adapters.
Reported by Kazushi Marukawa.
 1.109  20-Mar-2001  bouyer Add BUS_DMA_STREAMING for the data bus_dmamap_load().
 1.108  12-Mar-2001  bouyer Support the Promise Ultra/100 at full speed, and fixes the "bogus intr"
problem some peoples reported for Promise Ultra/100.
Thanks to Chuck Silvers for giving me a Promise Ultra/100 so I could do some
tests.
 1.107  18-Feb-2001  bouyer branches: 1.107.2;
ALi controller: can only do UltraDMA for revs >= 0x20.
From OpenBSD.
 1.106  18-Feb-2001  bouyer Add support for INTEL 82801BAM IDE controller, from OpenBSD.
 1.105  12-Jan-2001  bouyer Fix bug which affects pciide controllers in native mode (found by
Paul Kranenburg, many thanks !): the control register I/O is 4 byte long
although only one is used, but the control register is at offset 2, and not
0 as expected by IC code. Use bus_space_subregion() to get a handle which
points to the control register, and is one byte long.
 1.104  05-Jan-2001  bouyer Run at Ultra/66 on VIA controllers that can do it. PCI vendor/device/revision
is the same for the Ultra/33 and Ultra/66 version, so test writability of
the U66 enable bit (idea from Chris Cappuccio).
Thanks to David Carrel for testings.
 1.103  05-Jan-2001  bouyer Ops, make it compile again.
 1.102  05-Jan-2001  bouyer Add support for Ultra/100 on intel ICH2; from Tomokazu HARADA in kern/11747.
 1.101  05-Jan-2001  bouyer Add support for Ultra/100 on the HPT370
XXX the datasheet for the HPT370 is wrong
While I'm there clear the DRIVE_DMA flag when we're going to use Ultra/DMA
where it was missed, so that wdc_print_modes() only prints what's used.
 1.100  29-Dec-2000  tsutsui s/AP0_UDMA_MASK/APO_UDMA_MASK/
 1.99  28-Dec-2000  sommerfeld Change pci_intr_map to get interrupt source information from a "struct
pci_attach_args *" instead of from four separate parameters which in
all cases were extracted from the same "struct pci_attach_args".

This both simplifies the driver api, and allows for alternate PCI
interrupt mapping schemes, such as one using the tables described in
the Intel Multiprocessor Spec which describe interrupt wirings for
devices behind pci-pci bridges based on the device's location rather
the bridge's location.

Tested on alpha and i386; welcome to 1.5Q
 1.98  21-Dec-2000  mycroft Disable the 16-bit I/O space hack for ALL PROMISE CONTROLLERS.
This code is TOTALLY BROKEN and causes a NULL POINTER DEREFERENCE whenever it
is fired.
 1.97  17-Dec-2000  pk Cast a `bus_addr_t' argument to `u_long' for `%lx' format (XXX..)
 1.96  04-Dec-2000  fvdl Avoid format warnings.
 1.95  30-Nov-2000  thorpej Don't restrict I/O space to 16-bits on the Promise Ultra/33 boards.
Empirical evidence suggests that the board works just fine with
an I/O address >= 0x10000.
 1.94  26-Nov-2000  christos Don't try to use ultra-dma on sis chips with revision 0xd0. It loses
immediately with a lost interrupt on udma mode 2, downgrades to mode 1
at which point it silently corrupts data on high disk activity. This
happens on two out of 3 machines I own that exhibit high disk activity.
 1.93  19-Nov-2000  bouyer Add support for Intel ICH2
 1.92  14-Nov-2000  thorpej NBPG -> PAGE_SIZE
 1.91  08-Nov-2000  matt Make the test for dmareg >= 0x10000 quirked on IDE_16BIT_IOSPACE
 1.90  08-Nov-2000  wrstuden Move guts of pciide_print_modes() to wdc_print_modes() so that non-pciide
wdc drivers (like macppc's obio IDE interface) can use it. Also add
support to both wd attach line and to wdc_print_modes() to print
Ultra/{33,66,100} for respective UDMA modes (From Manuel Bouyer).
 1.89  05-Nov-2000  matt Don't allow use of mapreg is they are at or above 0x10000 in I/O space. (in
other words, if the address uses bits in the top 16 bits, don't use it).
 1.88  04-Oct-2000  bouyer only VT82C586A rev >= 6 supports Ultra-DMA. From OpenBSD.
 1.87  21-Aug-2000  enami Recognize Promise ATA-100 controller as PDC-20262 instead of 20246.
 1.86  21-Aug-2000  enami Match the Promise ATA-100 controller found on the mother board
MS-6321 (MSI 694D Pro). Reported in PR#10756 by Kazuki Sakamoto.
 1.85  09-Aug-2000  drochner recognize the i440MX mobile chipset's IDE interface
 1.84  02-Aug-2000  bouyer PCIIDE_CMD0646U_UDMA->PCIIDE_CMD0646U_ENABLEUDMA for consistency with
PCIIDE_AMD756_ENABLEDMA
defopt PCIIDE_CMD0646U_ENABLEUDMA, PCIIDE_AMD756_ENABLEDMA,
PCIIDE_CMD064x_DISABLE
Fix a typo pointed out by John Hawkinson
 1.83  02-Aug-2000  bouyer Add support for the CMD PCI646U. Linux claims that this driver is brocken
with UDMA, so enable Ultra-DMA only if "options PCIIDE_CMD0646U_UDMA" is set.
 1.82  01-Aug-2000  bouyer Add support for the CMD PCI0646U2, an Ultra/33 version of the 0646.
Note: there's also a PCI0646U, for which I don't have docs for now.
 1.81  27-Jul-2000  bouyer HPT370: clear disable interrupt bit; make it works in Ultra/66 mode.
 1.80  20-Jul-2000  bouyer Make it compile when PCIIDE_AMD756_ENABLEDMA is defined. From kern/10555
by MURATA Shuuichirou.
 1.79  07-Jul-2000  bouyer Use the CMD PCI0648/9 IRQ ACK code for the 0646 too, makes the 0646 works
in native mode.
 1.78  06-Jul-2000  bouyer Work around a bug in AMD756 rev D2, from patches provided by David Sainty:
disable multiword DMA for these chips. multiword DMA can be forced with
options PCIIDE_AMD756_ENABLEDMA on rev D2 chips, but use at your own risk !
While I'm there remove a duplicate allocation of sc_wdcdev.nchannels in HPT
code.
 1.77  05-Jul-2000  bouyer Back out previous, it has to be done in a different way.
 1.76  05-Jul-2000  bouyer Apply patch from David Sainty <David.Sainty@optimation.co.nz>:
Some AMD controllers have a bug which can look up the machine when using DMA, so
disable DMA for some revisions (info provided by AMD).
"options PCIIDE_AMD756_ENABLEDMA" can be used to force DMA on these chips.
 1.75  05-Jul-2000  bouyer HPT: use pciide_channels[i] not pciide_channels[0]. My HPT370 now probes
both channels (but still doesn't work properly; I suspect I got a broken one).
 1.74  04-Jul-2000  enami Match with promise ultra100/ata contoller. I haven't actually test this
contoller with ultra100 drive, but it works at least with ultra66 or more
older drive
 1.73  28-Jun-2000  mrg remove include of <vm/vm.h>. <vm/vm.h> -> <uvm/uvm_extern.h>
 1.72  27-Jun-2000  tron Add special IRQ handler for CMD PCI0648 and PCI0649 taken from the
experimental version of Manuel Bouyer's driver.
 1.71  26-Jun-2000  mrg remove/move more mach vm header files:

<vm/pglist.h> -> <uvm/uvm_pglist.h>
<vm/vm_inherit.h> -> <uvm/uvm_inherit.h>
<vm/vm_kern.h> -> into <uvm/uvm_extern.h>
<vm/vm_object.h> -> nothing
<vm/vm_pager.h> -> into <uvm/uvm_pager.h>

also includes a bunch of <vm/vm_page.h> include removals (due to redudancy
with <vm/vm.h>), and a scattering of other similar headers.
 1.70  26-Jun-2000  bouyer Add support for the CMD PCI0648 and PCI0649 IDE controllers.
Thanks to Matthias Scheler for testing.
 1.69  26-Jun-2000  bouyer Correct 80 pin handling for promise Ultra/66: when the bit is set
we *don't* have a Ultra/66 cable.
 1.68  12-Jun-2000  bouyer branches: 1.68.2;
Shorter description for the HPT366
 1.67  12-Jun-2000  bouyer - add a pciide_irqack() callback, which clears the IDE DMA status bit once
the IRQ has been cleared on the drive.
- use pa->pa_class instead of re-reading PCI_CLASS_REG when possible
- Add support for Highpoint HPT366 and HPT370 (370 untested), based
on patches from Roger Brooks <R.S.Brooks@liverpool.ac.uk> posted on
current-users Mach, 15. Given how Highpoint docs have been wrong for the
366, the 370 is likely to not work.
Thanks to Chris Cappuccio <chris@dqc.org> for sending me the Highpoint
docs, and to Total Archive (http://www.totalarchive.com/) for sending
me hardware.
 1.66  07-Jun-2000  scw The OPTi controller supports a 32-bit dataport after all.
Also detect when the chip is sitting on a 25MHz PCIbus and
set the timing registers accordingly.
 1.65  07-Jun-2000  thorpej Add missing break;
 1.64  06-Jun-2000  thorpej Improve the Cypress name a little.
 1.63  06-Jun-2000  thorpej In pciide_mapreg_dma(), check to see what type the BAR is before
mapping the registers, as suggested by a comment in that function.
 1.62  06-Jun-2000  soren Shorten names of VIA controllers to fit in 80 columns with versions.
 1.61  06-Jun-2000  thorpej Actually program the DMA mode of the drives into the Cypress
controller. Fixes a long-standing problem where IDE DMA wasn't
working on the AlphaPC 164SX.
 1.60  04-Jun-2000  gmcgarry pciiide -> pciide
 1.59  27-May-2000  scw Add support for the OPTi 82c621 PCIIDE controller and its derivatives.
I only have a Compaq laptop on which to test this, so reports of
success/failure in other systems would be welcomed.
 1.58  15-May-2000  bouyer branches: 1.58.2;
Sync my copyrigth notice.
 1.57  12-May-2000  thorpej Print the revision info from the PCI configuration header. From
Dave Sainty, kern/10025.
 1.56  01-Apr-2000  bouyer - DMA code cleanup: pciide_dma_finish() doesn't stop/unload the current DMA op
if an IRQ was not detected, unless the force flag was given. Use this to
detect if the IRQ was for us (closer to shared IRQ for controllers which
don't have their own IRQ handler in pciide.c) and to poll for DMA xfer.
Also makes the timeout recovery code simpler.
- ATAPI cleanup: don't call controller-specific functions from atapiconf.c
(wdc_*), so that it's possible to attach an atapibus to something else
than a wdc/pciide (Hi Lennart :).
Overload struct scsi_adapter with struct atapi_adapter, defined
as struct scsi_adapter + atapi-specific callbacks. scsipi_link still points
to an scsi_adapter, atapi code casts it to atapi_adapter if needed.
Move atapi_softc to atapiconf.h so that it can be used by the underlying
controller code (e.g. atapi_wdc.c).
Add an atapi-specific callback *atapi_probedev(), which probe a drive
in a controller-specific way, allocate the sc_link and fills in the
ataparams if needed. It then calls atapi_probedev() (from atapiconf.c)
to do the generic initialisations and attach the device.
- While I'm there merge and centralise the state definitions in atavar.h.
It should now be possible to use a common ata/atapi routine to set the
drive's modes (will do later).
 1.55  10-Mar-2000  bouyer Don't reset cp->hw_ok ro 0 when cp isn't initialised in cy693_chip_map()
(used only in failure case). Pointed out by Wolfgang Solfrank.
While I'm here correct indentation.
 1.54  09-Mar-2000  soren Move PCIIDE_CHANNEL_NAME macro to pciidereg.h.
 1.53  06-Mar-2000  bouyer Add support for the AMD 756 DMA/UDMA IDE controller, provided in
PR kern/9536 by Dave Sainty.
 1.52  18-Jan-2000  bouyer Clean up revision stuff for the sis. Suggested by Chris Cappuccio.
 1.51  16-Jan-2000  bouyer From chris@openbsd.org:
"Don't enable UDMA modes for revisions of SiS 5513 < 0xd0
The only revisions I know which don't actually support UDMA are 0x09 and below..
But the only revision I know which does support UDMA is 0xd0 (and presumably
above that)"
 1.50  26-Dec-1999  soren Lower-case Bus-Master for consistency.
 1.49  12-Dec-1999  thorpej Use htole32() and le32toh().
 1.48  28-Nov-1999  bouyer Improve Ultra/66 support now that I've got some docs from Promise.
 1.47  13-Nov-1999  soren Export softc.
 1.46  03-Nov-1999  mycroft Fix silly error that caused the secondary channel to be ignored if the primary
channel was disabled.
 1.45  25-Oct-1999  bouyer Add a missing '\n' in the cmd0640 attach printfs.
 1.44  02-Sep-1999  ross branches: 1.44.2; 1.44.4; 1.44.6;
Make it compile.
 1.43  01-Sep-1999  bouyer Don't try to unmap unmapped space in case of failure in
pciide_mapregs_compat(). From OpenBSD.
 1.42  30-Aug-1999  bouyer Add support for Intel 810 chipset (ICH/ICH0).
While I'm there merge back piix_channel_map into piix_chip_map.
 1.41  29-Aug-1999  bouyer Add support for the Promise Ultra/33 and /66 pci IDE controller. In addition to
chip-dependant code this required the following changes:
- Instead of attaching the device in a generic way with some chip-dependant
routines, use a chip-dependant attach routine with some common code
factored out. The code is marginally bigger, but this allows the CMD64x
flag hack to go away.
- For chips that report per-channel 'irq triggered', test this before calling
wdcintr() for the native-pci irq case (compat intr can't be shared),
as wdcintr() has no good way to know if a irq was for it or not, and
ends up with irq loss. XXX for chips that don't have this feature irq sharing
will not work properly !
- add my copyrigth notice (could have been done some time ago I think :)

There are still some issues to be solved with the Promise controller and
ATAPI devices.
Many thanks to Paul Newhouse for shipping me 2 Ultra/33 boards for doing this
work.
 1.40  12-Jul-1999  bouyer Fix typo in a printf, from Soren S. Jorvan.
 1.39  08-Jun-1999  mrg fix a few KNF nits ..
 1.38  27-May-1999  bouyer For the PIIX, make sure the PIO_mode and DMA_mode get reset to the values used
by the controller for all drives.
 1.37  05-May-1999  bouyer Fix the way we compute the mode to use: for multiword DMA, the used mode was
2 less than the one we could really use, so for multiword DMA mode 0 or 1,
the driver tried to use DMA mode 255 or 254 (0 - 2 with a u_int8_t).
 1.36  03-May-1999  ross Protect WDCDEBUG from multiple definitions.
 1.35  28-Apr-1999  thorpej Make PCI IDE DMA work on big-endian systems.
 1.34  06-Apr-1999  bouyer Kill an extra 'pciide0: ' in a printf
 1.33  22-Feb-1999  bouyer branches: 1.33.2;
In cy693_setup_channel(), setup timings for IOR too (they were left to 0,
which is a way too higth timing for some devices). Thanks to Ken Wellsch
for trying the multiple debug kernels until the problem was located.
 1.32  16-Feb-1999  bouyer Correctly compute PIO/DMA mode for sis and acer chips when the drive support
a DMA mode with higther capabilities than PIO mode.
 1.31  02-Feb-1999  bouyer channel_map is called before setup_chip, so whe need to enable the channel
status bits in acer_channel_map().
 1.30  02-Feb-1999  bouyer Support for Acerlab M5229 IDE controller. Thanks to Thilo Manske for testing
the code, and to Takahiro Kambe who run several tests and finally found the
bug by himself :)
 1.29  16-Dec-1998  bouyer Defer mapping of pci interrupt to pciide_mapregs_native(). This way,
the native interrupt shouldn't be mapped if a channel is in native mode,
but disabled.
 1.28  16-Dec-1998  bouyer Rearange the modes setup to allow these to be dyanmically changed. Fill
in the new "set_mode" callback.
 1.27  03-Dec-1998  bouyer Rename pio_mode, etc ... to PIO_cap, etc ... for consistency with the
ata_drive_datas struct. Suggested by Soren S. Jorvan.
 1.26  03-Dec-1998  bouyer Now that vtophy() is no longuer used, re-enable WDCDEBUG, with
wdcdebug_pciide_mask = 0 (so that one can easily patch this variable and give
me more informations :)
 1.25  03-Dec-1998  bouyer add a udma_mode field to wdc_softc, and use it the same way dma_mode is used
(higthest ultra-dma mode supported). There may be a higther ultra-dma mode
defined ...
 1.24  03-Dec-1998  bouyer Use correct register when disabling the second channel.
 1.23  03-Dec-1998  bouyer Restore changes from revision 1.17:
"If a channel has no drives, do *not* unmap its I/O regions.
It's not really safe to use them for anything else, and in legacy mode it
will just cause us to probe the channel again as an ISA device."
 1.22  03-Dec-1998  bouyer Correct a few bogons in the SiS chip initialisation.
 1.21  03-Dec-1998  bouyer Ouh ! Correct the 8-bit PCI registers reading/writing functions: need to
multiply the register offset by 8.
 1.20  02-Dec-1998  bouyer - change drive_flags from u_int8_t to u_int16_t
- keep the modes supported by the drive in struct ata_drive_datas (will be
later used for downgrading the DMA/PIO mode on error)
- use config flags to force/disable PIO/DMA/UDMA modes
- For the CMD PCI0643/6 setup DMA mode to DMA Read multiple.
 1.19  24-Nov-1998  drochner a small optimization for the compat interrupt handling, possible after
channel_softc is within pciide_channel
 1.18  21-Nov-1998  drochner some restructuring, more or less to get support for weird IDE controllers,
eg the Cypress ISA bridge:
-put channel mapping into the chip specific part, unify with
channel_probe() into channel_map()
-use pointer to channel data as function call argument wherever possible
instead of the channel number
-allow the "compat" channel number to differ from the per-controller
channel number - for mapping and interrupt functions
-add support for SiS5598 and Cypress 82C693 chips
Mostly done by Manuel, I only contributed to the first 2 items.
 1.17  17-Nov-1998  mycroft If a channel has no drives, do *not* unmap its I/O regions.
It's not really safe to use them for anything else, and in legacy mode it
will just cause us to probe the channel again as an ISA device.
 1.16  12-Nov-1998  bouyer Force PCI_COMMAND_MASTER_ENABLE if DMA has been setup properly. The BIOS is
supposed to do it but who knows ...
 1.15  11-Nov-1998  bouyer - clearify the boot messages (features supported vs features used). Thanks to
Havard Eidnes for his complains about this :)
- fix some typo in comments
- hoppefully better detection of drives reporting bogus PIO modes.
 1.14  09-Nov-1998  bouyer Support for the CMD PCI064{3,6}. Tested on a 0646 with a
"wd0: PIO mode 4, DMA mode 2, UDMA mode 2" device.
 1.13  22-Oct-1998  bouyer Add config flags for pciide: 0x001 forces the use of DMA when the driver
don't know how to set the controller's modes.
 1.12  20-Oct-1998  bouyer Fix for Apollo DMA mode (not UDMA): DMA mode = PIO mode - 2, not PIO mode + 2 !
 1.11  19-Oct-1998  bouyer Add support for the second flavour of the VIA IDE chip (which has UDMA).
Don't claim DMA support if we don't have explicit support for this chip.
They're to may way to loose when trying to use DMA without configuring the
controller and disks.
 1.10  13-Oct-1998  bouyer pciide.c: don't define WDCDEBUG, so it compiles on alpha. Correct a bogon
in the printing of DMA mode (piix3/4 only)
others: set the debug_mask to 0, so that debug messages are turned off by
default but can be easily turned on.
Reset drive_flags to 0 for unconfigured devices, so that they are ignored
later. For configured devices, reset state to 0 after probe/attach.
 1.9  12-Oct-1998  bouyer Merge bouyer-ide
 1.8  14-Aug-1998  drochner 2 changes to pciide_probe_wdc() (used in compatibility mode to check
if i drive is responding):
-if the reset succeeds, check some registers to make sure there is really
a drive (and not a chipset which echoes back the last written value)
-explicitely select the master before trying to read the master's status
 1.7  08-Jun-1998  thorpej Nuke __BROKEN_INDIRECT_CONFIG.
 1.6  12-Mar-1998  cgd branches: 1.6.2;
when considering attaching compatibility-mode channels, try a quick reset
and see if anything responds. if nothing (that's attributable to the
PCI IDE controller) responds, then that channel either has no devices on
it or has been disabled (via a non-standard mechanism) by the BIOS. If nothing
responds, don't map the compat.-mode interrupt or attach the wdc to that
channel, because the BIOS is likely to assign that IRQ to a different PCI
device. If that happens, the kernel will panic because that device will
try to map the IRQ level-triggered, but the compat interrupt will have been
mapped edge-triggered. (One possible way around this is to map the compat
interrupt edge-triggered, but it's not clear reading the spec that this
is correct or desirable.)
 1.5  06-Mar-1998  cgd reorganize mapping/attachment of wdc channels so that it'll be easier to
insert a check to see whether a channel appears to be enabled. Shouldn't
be necessary, according to the spec, but some PC chipsets allow individual
compatibility channels to be disabled. "I hate PCs."
 1.4  06-Mar-1998  cgd despite the spec, some people map the bus master IDE registers into
memory space. Note that in a comment, but don't try to fix it (for now).
 1.3  04-Mar-1998  cgd clean up a printf
 1.2  04-Mar-1998  cgd slight cleanup (consistency, make a few comments better). add support
for recognizing bus-master DMA interface and mapping the regs (but
still no support for DMA).
 1.1  04-Mar-1998  cgd PCI IDE glue. Right now, just glues 'wdc's to PCI IDE controller
channels. Eventually should do things like support PCI IDE DMA (it _DOES
NOT_ do that now).
 1.6.2.17  05-Oct-1998  bouyer Rename WDC_CAPABILITY_PIO to WDC_CAPABILITY_MODE, as it's used to tell wether
the controller's driver can tell which timing mode it uses. Check this
before setting DMA modes too.
This allow the generic DMA code to work again.
 1.6.2.16  04-Oct-1998  bouyer atavar.h: drv_softc is a struct device * instead of void*, as it's mostly
used for dv_xname
wd.c: convert for drv_softc type change, printf cleanup
wdc.c: always call ata_get_params() (params was used initialised with
non-32bit controllers, leaving to bogus PIO/DMA mode report).
Cleaup of the PIO/DMA mode message.
pciide_piix_reg.h: Fix definition of PIIX_IDETIM_CLEAR (unused before)
pciide.c: add a method do disable a channel on know device. If a channel
doesn't have any drive, we disable it and free its resources if disable
was successfull. This should help with laptops where the second channel
of the PIIX4 is unused but not disabled by BIOS. On such laptops,
irq15 can be used for PCMCIA but it was claimed by pciide.
Misc printf cleanup.
wdc_isa.c: printf cleanup.
 1.6.2.15  02-Oct-1998  bouyer Cleanup a few error message, remove some dead code. Re-add a reset at end of
attach, unless we have WDC_NO_EXTRA_RESETS.
Add support for data32iot/data32ioh from -current: each controller pass
WDC_CAPABILITY_DATA32 if they can do 32bit, and WDC_CAPABILITY_DATA16 if they
can do 16bit. For controller that support both, the usual autodetect
mechanism is still used.
 1.6.2.14  20-Sep-1998  bouyer - always call config_found() from wdcattach(), instead of printing our own
the "not configured" message ourselve. When no atapibus is configured,
use a fake ata_atapi_attach, else call wdc_atapibus_attach(). This way we
don't have to include the whole atapi support in an ata-only config.
- the dma_* function pointers take a 'int flags' as last argument, instead
of an 'int read'. The 2 valid flags are: WDC_DMA_READ (to select read/write)
and WDC_DMA_POLL, to signal interrupt-less mode (for core dumps).
- Reworked wdcprobe() so look more like the old one. A status of 0xff is
interpreted as "no drive" (freebsd does this); this this speed up
the probe for non-IDE machines (a reset timeout has been bumped to 31s,
to match the specs). The probe set ups the drive flags to either ATA or
ATAPI (depend on register signature) or OLD (if register signature don't
match, but a working drive appears to be there). Later the ATA code
will look at the OLD flag to decide wether there is no drive, or an old
(ST506) one if WDC_IDENTIFY fails.
- For known PCI chips, don't use the wdcprobe() heuristic to find wether
a channel is enabled/disabled; use the chip's specific registers for this.
- Clear the command queue when we have a polled command. This allows dumps to
work even if a command was being handled by the controller at panic time.
- Increase the number of available DMA segments by one, as user requests may
not be aligned on a page boundary.
 1.6.2.13  21-Aug-1998  bouyer Sync with -current
 1.6.2.12  13-Aug-1998  bouyer - sync with -current
- full support of CMD PCI0640 chips. This needs a special probe routine, as
this chip doesn't honnor the "PCI_COMMAND_IO_ENABLE" bit. sigh.
- do not map the native pci interrupts if we don't have a native channel.
some chips (e.g. PCI0640) have a valid interrupt value which gets
established, which may prevent the compat channel or some other ISA
device from working properly later.
- b* -> mem*
 1.6.2.11  25-Jun-1998  bouyer Add support for VIA's apollo VP chipset.
 1.6.2.10  17-Jun-1998  bouyer in piix3_4_setup(), drvp is not a pointer to an array, but a pointer to the
rigth element of the array. This was breaking more-or-less badly on configs
with a slave drive on a channel.
 1.6.2.9  13-Jun-1998  bouyer Coorect a comment.
 1.6.2.8  12-Jun-1998  bouyer Correct a bug where the PIO mode would not be set up for the controller,
if UDMA mode is used. Ultra-DMA/33 works !
 1.6.2.7  11-Jun-1998  bouyer pciide: when setting up DMA mode, also enable fast timings for PIO modes
if possible. For ATAPI devices, commands are always send via PIO.
atapi: matain a drive state (like wd drives) and use it to set up the
timings if needed.
 1.6.2.6  10-Jun-1998  bouyer - Fix timing settings for DMA: the controller was always set up to use
DMA mode 0 (compatible).
- The 2 Ultra-dma registers are in fact one 32-bit register.
Change the macros and setup in a way it may now work (but still untested,
thus not enabled by default).
- For DMA mode 1, use a more efficient timing than the one suggested
by intel.
Some work is still needed here to get ATAPI DMA working (should be done soon).
 1.6.2.5  09-Jun-1998  bouyer - sync with trunck
- for the piix, don't set timings for nonexistent drives.
 1.6.2.4  06-Jun-1998  bouyer Renamed pciide_pIIx_reg.h to pciide_piix_reg.h via repository copy,
as suggested by Soren S. Jorvan.
 1.6.2.3  05-Jun-1998  bouyer Disable Ultra DMA for now, as it does not work.
 1.6.2.2  05-Jun-1998  bouyer A few bux fixes (untested):
- If the PIO mode of the controller is unknown, put the drive in the
hightest mode it supports. A drive in a faster mode than the controller
should work.
- Create DMA maps even for unknown controllers in pciide.
 1.6.2.1  04-Jun-1998  bouyer Commit changes to the IDE system in a branch. This allows a better separation
between higth-level and low-level (i.e. registers read/write) and generalize
the queue for all commands. This also add supports for IDE DMA.
 1.33.2.11  14-Aug-2000  he Pull up revision 1.84 (via patch, requested by bouyer):
Change PCIIDE_CMD0646U_UDMA to PCIIDE_CMD0646U_ENABLEUDMA
for consistency with PCIIDE_AMD756_ENABLEDMA.
 1.33.2.10  14-Aug-2000  he Pull up revisions 1.82-1.83 (requested by bouyer):
Add UltraDMA support for the CMD PCI0646U and PCI0646U2 controllers;
normally disabled on PCI0646U due to a chip bug, but can be
enabled with a kernel option.
 1.33.2.9  27-Jul-2000  he Pull up revision 1.81 (requested by bouyer):
Clear the interrupt disable bit of the HPT370, and document HPT370
support.
 1.33.2.8  27-Jul-2000  he Pull up revision 1.80 (requested by bouyer):
Make pciide compile with ``options PCIIDE_AMD756_ENABLEDMA.''
Fixes PR#10555.
 1.33.2.7  23-Jul-2000  he Pull up revision 1.79 (requested by bouyer):
Handle CMD PCI0646 interrupts as for the PCI0648; makes the
PCI0646 work in native mode with shared interrupts.
 1.33.2.6  23-Jul-2000  he Pull up revision 1.74 (requested by bouyer):
Add support for the Promise Ultra/100 PCI IDE controller (in
Ultra/66 mode only).
 1.33.2.5  07-Jul-2000  he Apply patch (requested by bouyer):
Add support for the following PCIIDE controllers:
o AMD 756
o CMD PCI0648 and PCI0649
o Hightpoint HPT366
o OPTi 82c621 (and a few of its derivatives)
o Promise Ultra/33 and Ultra/66
o Intel 82801 (ICH/ICH0)
Also fix PR#10437 (detect more ATAPI devices).
 1.33.2.4  24-Jun-1999  perry pullup 1.37->1.38 (bouyer)
 1.33.2.3  05-May-1999  perry branches: 1.33.2.3.2; 1.33.2.3.4;
pullup 1.36->1.37 (bouyer)
 1.33.2.2  28-Apr-1999  perry sync to 1.35 (thorpej): fixes PCIIDE DMA on big-endian systems
 1.33.2.1  06-Apr-1999  bouyer Kill an extra 'pciide0:' in a printf.
 1.33.2.3.4.1  30-Nov-1999  itojun bring in latest KAME (as of 19991130, KAME/NetBSD141) into kame branch
just for reference purposes.
This commit includes 1.4 -> 1.4.1 sync for kame branch.

The branch does not compile at all (due to the lack of ALTQ and some other
source code). Please do not try to modify the branch, this is just for
referenre purposes.

synchronization to latest KAME will take place on HEAD branch soon.
 1.33.2.3.2.2  02-Aug-1999  thorpej Update from trunk.
 1.33.2.3.2.1  21-Jun-1999  thorpej Sync w/ -current.
 1.44.6.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.44.4.1  15-Nov-1999  fvdl Sync with -current
 1.44.2.9  23-Apr-2001  bouyer Sync with HEAD.
 1.44.2.8  27-Mar-2001  bouyer Sync with HEAD.
 1.44.2.7  12-Mar-2001  bouyer Sync with HEAD.
 1.44.2.6  18-Jan-2001  bouyer Sync with head (for UBC+NFS fixes, mostly).
 1.44.2.5  15-Jan-2001  bouyer req_sense_length is dead.
 1.44.2.4  05-Jan-2001  bouyer Sync with HEAD
 1.44.2.3  08-Dec-2000  bouyer Sync with HEAD.
 1.44.2.2  22-Nov-2000  bouyer Sync with HEAD.
 1.44.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.58.2.1  22-Jun-2000  minoura Sync w/ netbsd-1-5-base.
 1.68.2.33  22-Apr-2002  he Pull up revision 1.150 (requested by bouyer):
Fix use of bus_space_unmap() for the native case. Fixes PR#16307.
 1.68.2.32  25-Mar-2002  he Pull up revision 1.145 (requested by bouyer):
Add support for the pciide part of the AMD-768 chipset.
 1.68.2.31  09-Feb-2002  he Pull up revision 1.143 (requested by bouyer):
In hpt_pci_intr(), accept interrupt only once IDEDMA_CTL_ACT is
turned off. Fixes DMA errors, lost interrupts, and other nasty
errors with some HPT730s in native mode.
 1.68.2.30  06-Feb-2002  he Pull up revisions 1.112,1.118,1.125,1.128 (via patch, requested by tsutsui):
Add support for Acard ATP-850/860 pciide controllers.
 1.68.2.29  05-Jan-2002  he Pull up revision 1.135 (requested by bouyer):
Support Ultra-DMA 100 on the CMD 0649.
 1.68.2.28  13-Nov-2001  he Pull up revision 1.123 (requested by bouyer):
Support HPT-370A controllers. Fixes PR#13540.
 1.68.2.27  13-Nov-2001  he Pull up revision 1.121 (requested by bouyer):
Disable UDMA only for SiS controllers which are really buggy,
not all the ones with revision 0xd0.
 1.68.2.26  29-Jul-2001  he Pull up revision 1.120 (requested by scw):
Workaround for buggy OPTi pciide chipset revisions, as reported
in PR#11644.
 1.68.2.25  02-Jul-2001  jhawk Pull up revision 1.94 (requested by bouyer):
Don't try to use ultra-dma on sis chips with revision 0xd0. It loses
immediately with a lost interrupt on udma mode 2, downgrades to mode 1
at which point it silently corrupts data on high disk activity.
 1.68.2.24  15-May-2001  he Pull up revisions 1.113-1.116 (via patch, requested by bouyer):
Add support for newer VIA pciide controllers.
Add support for the AMD 766 pciide controller.
Properly distinguish between HPT366 and HPT370 controllers.
 1.68.2.23  24-Apr-2001  he Pull up revision 1.110 (requested by bouyer):
Revert setting of PDC2xx_SCR for Promise Ultra/100, it seems to
break with some adapters.
 1.68.2.22  13-Mar-2001  he Pull up revision 1.108 (requested by bouyer):
Support Ultra/100 speed on Promise Ultra/100, and fix ``bogus
intr'' messages generated under some conditions.
 1.68.2.21  26-Feb-2001  he Pull up revision 1.107 (requested by bouyer):
Disable Ultra-DMA on Ali controllers which don't support it.
 1.68.2.20  26-Feb-2001  he Pull up revision 1.106 (requested by bouyer):
Add support for the Intel 82801BAM IDE controller.
 1.68.2.19  04-Feb-2001  he Pull up revision 1.105 (requested by bouyer):
Fix bug which affects pciide controllers in native mode. Main
effect was a non-functionnal IDE controller on some sparc64 and
macppc when booted from IDE disk.
 1.68.2.18  04-Feb-2001  he Pull up revisions 1.102-1.103 (requested by bouyer):
Add support for Ultra/100 on Intel ICH2.
 1.68.2.17  04-Feb-2001  he Pull up revision 1.104 (requested by bouyer):
Run at Ultra/66 on VIA controllers that can do it.
 1.68.2.16  04-Feb-2001  he Pull up revision 1.101 (requested by bouyer):
Add support for Ultra/100 on the HPT370 controller.
 1.68.2.15  15-Dec-2000  he Pull up revision 1.93 (requested by bouyer):
Add support for Intel ICH2 IDE controller.
 1.68.2.14  04-Oct-2000  bouyer Pull up 1.87->1.88, approved by thorpej:
only VT82C586A rev >= 6 supports Ultra-DMA. From OpenBSD.
 1.68.2.13  22-Aug-2000  enami Pullup rev. 1.87 (approved by jhawk):
Recognize Promise ATA-100 controller as PDC-20262 instead of 20246.
 1.68.2.12  22-Aug-2000  enami Pullup rev. 1.86 (approved by jhawk and thorpej):
Match the Promise ATA-100 controller found on the mother board
MS-6321 (MSI 694D Pro). Reported in PR#10756 by Kazuki Sakamoto.
 1.68.2.11  03-Aug-2000  bouyer Pull up (approved by thorpej):
sys/dev/pci/pciide.c 1.82 -> 1.84
sys/dev/pci/pciide_cmd_reg.h 1.8 -> 1.9
sys/dev/pci/files.pci 1.100 -> 1.101
share/man/man4/pciide.4 1.23 -> 1.24

Add support for the CMD PCI646U. Linux claims that this driver is brocken
with UDMA, so enable Ultra-DMA only if "options PCIIDE_CMD0646U_ENABLEUDMA"
is set.
defopt PCIIDE_CMD0646U_ENABLEUDMA, PCIIDE_AMD756_ENABLEDMA,
PCIIDE_CMD064x_DISABLE
Fix a typo pointed out by John Hawkinson
Update documentation.
 1.68.2.10  02-Aug-2000  bouyer Pull up (approved by thorpej):
pciide_cmd_reg.h 1.7 -> 1.8
pciide.c 1.81 -> 1.82
Add supports for the PCI0646U2, Ultra/33 version of the PCI0646.
 1.68.2.9  27-Jul-2000  bouyer Pull up (approved by thorpej):
sys/dev/pci/pciide.c 1.80 -> 1.81
sys/dev/pci/pciide_hpt_reg.h 1.1 -> 1.2
distrib/notes/i386/hardware 1.74 -> 1.75
share/man/man4/pciide.4 1.22 -> 1.23
Make sure the HPT370's interrupts disable bit is cleared. Now that HPT370
supports works, document it.
 1.68.2.8  20-Jul-2000  bouyer Pull up 1.80 (approved by thorpej):
Make is compile when PCIIDE_AMD756_ENABLEDMA is defined; close PR kern/10555.
 1.68.2.7  19-Jul-2000  bouyer Pull up 1.79, approved by thorpej:
Use the CMD PCI0648/9 IRQ ACK code for the 0646 too, makes the 0646 works
in native mode.
 1.68.2.6  07-Jul-2000  bouyer Pull up
pciide.c 1.77 -> 1.78
pciide_amd_reg.h 1.1 -> 1.2
(approved by thorpej): workaround for a bug in some revs of the AMD IDE
controller, which can lock up the machine when multiword DMA is used.
 1.68.2.5  06-Jul-2000  enami Pull up rev. 1.74 (approved by releng-1-5):
Match with promise ultra100/ata contoller. I haven't actually test this
contoller with ultra100 drive, but it works at least with ultra66 or more
older drive
 1.68.2.4  05-Jul-2000  bouyer Pull up rev 1.75, approved by thorpej:
Fix a error where we would always try to attach channel 0 of an HPT controller
(only aftects HPT370, the 366 has only one channel per pciide function).
 1.68.2.3  27-Jun-2000  tron Really pull up revision 1.72.
 1.68.2.2  27-Jun-2000  bouyer Pull up
pciide.c 1.69->1.70, 1.71->1.72
pciide_cmd_reg.h 1.6->1.7
Approved by thorpej:
Add support for the CMD PCI0648/0649 IDE controller.
 1.68.2.1  27-Jun-2000  bouyer Pull up 1.69, approved by thorpej:
Fix promise Ultra/66 cable detection: the Ultra/66 cable detection bit
was interpreted backward.
 1.107.2.20  29-Dec-2002  thorpej Sync with HEAD.
 1.107.2.19  11-Dec-2002  thorpej Sync with HEAD.
 1.107.2.18  18-Oct-2002  nathanw Catch up to -current.
 1.107.2.17  17-Sep-2002  nathanw Catch up to -current.
 1.107.2.16  27-Aug-2002  nathanw Catch up to -current.
 1.107.2.15  13-Aug-2002  nathanw Catch up to -current.
 1.107.2.14  01-Aug-2002  nathanw Catch up to -current.
 1.107.2.13  20-Jun-2002  nathanw Catch up to -current.
 1.107.2.12  17-Apr-2002  nathanw Catch up to -current.
 1.107.2.11  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.107.2.10  28-Feb-2002  nathanw Catch up to -current.
 1.107.2.9  11-Jan-2002  nathanw More catchup.
 1.107.2.8  08-Jan-2002  nathanw Catch up to -current.
 1.107.2.7  14-Nov-2001  nathanw Catch up to -current.
 1.107.2.6  22-Oct-2001  nathanw Catch up to -current.
 1.107.2.5  26-Sep-2001  nathanw Catch up to -current.
Again.
 1.107.2.4  21-Sep-2001  nathanw Catch up to -current.
 1.107.2.3  24-Aug-2001  nathanw Catch up with -current.
 1.107.2.2  21-Jun-2001  nathanw Catch up to -current.
 1.107.2.1  09-Apr-2001  nathanw Catch up with -current.
 1.121.2.7  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.121.2.6  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.121.2.5  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.121.2.4  11-Feb-2002  jdolecek Sync w/ -current.
 1.121.2.3  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.121.2.2  25-Aug-2001  thorpej Merge Aug 24 -current into the kqueue branch.
 1.121.2.1  03-Aug-2001  lukem update to -current
 1.128.2.1  01-Oct-2001  fvdl Catch up with -current.
 1.132.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.152.2.3  29-Aug-2002  gehenna catch up with -current.
 1.152.2.2  20-Jun-2002  gehenna catch up with -current.
 1.152.2.1  30-May-2002  gehenna Catch up with -current.
 1.153.2.17  12-Jul-2004  he Pull up revision 1.187 (via patch, requested by grant in ticket #1720):
Add support for SATALink 3112.
 1.153.2.16  28-Mar-2004  jmc Pullup rev 1.196 via patch (requested by bouyer in ticket #1632)

Add support for VIA VT8237 (KT600) IDE controller. PR#22453
 1.153.2.15  28-Mar-2004  jmc Pullup rev 1.195 (requested by bouyer in ticket #1630)

Correct offset for the promise "magic registers" (it depends on channel number).
This makes cable detect work properly for newer promise (pdc268 and newer).
 1.153.2.14  16-Aug-2003  tron Pull up revision 1.194 (requested by bouyer in ticket #1369):
Correct setup of General Purpose Register for PDC20265 (Ultra/100) and newer.
From Andreas Johansson in private mail.
 1.153.2.13  16-Aug-2003  tron Pull up revision 1.193 via patch (requested by bouyer in ticket #1367):
Add support for ICH5, from Quentin Garnier in private mail.
 1.153.2.12  16-Jun-2003  grant Apply patch (requested by bouyer in ticket #1234):

Rework SiS support: more controller supported (up to Ultra/133) and better
support for the older ones.
Information for this work extracted from Soeren Schmidt's FreeBSD driver.

Ops, I commited the previous change (improved SiS support) from the wrong tree.
Sync with the latest diff I made available, and also include changes from
kern/18015 which is much better than the hack I've done.
 1.153.2.11  28-Apr-2003  tron Pull up revision 1.191 (requested by nakayama in ticket #1275):
Make DMA mode works on Promise Ultra66/100 with 48-bit LBA drives.
Ok'ed by bouyer in tech-kern@netbsd.org.
 1.153.2.10  28-Nov-2002  tron Pull up revision 1.174 (requested by kent in ticket #1019):
Add support for VIA VT8235
 1.153.2.9  01-Nov-2002  tron Pull up revision 1.168 (requested by bouyer in ticket #728):
Support Ultra/133 on promise controllers that can do it.
 1.153.2.8  01-Nov-2002  tron Pull up revision 1.167 (requested by bouyer in ticket #727):
Correct setup for Ultra133 capable VIA chipsets, From Matthias Drochner
on current-users, with cross-check and some improvement from linux-2.4.19
and FreeBSD-current.
Also don't set the APO_UDMA_CLK66 bit for Ultra/100 capable chipset, and
support Ultra/133 for the VT8233A.
 1.153.2.7  01-Nov-2002  tron Pull up revision 1.166 (requested by bouyer in ticket #725):
Add support for HPT372. From sdegler@kashmir.degler.net in kern/17908,
with some improvement from me, and from FreeBSD.
 1.153.2.6  01-Nov-2002  tron Pull up revision 1.165 (requested by bouyer in ticket #724):
Add support for Promise Ultra133TX2 and Ultra133TX2v2, from FreeBSD and
stephen@degler.net in kern/17509.
 1.153.2.5  02-Aug-2002  lukem pull up revisions 1.158-1.160 (requested by bouyer in ticket #603):
1.160:
Ops, this had already been commited by cjs. Still, call the
controller ATA133, even though we use it at ATA100 for now ...
1.159:
Add VIA VT8233A support (at Ultra/100 until someone can test 133 for
me). From Ryo HAYASAKA, PR kern/17206.
1.158:
Recognise the VT8233A ATA100 controller and use Ultra-DMA mode
5 with it.
 1.153.2.4  01-Aug-2002  lukem Pull up revision 1.163 (requested by bouyer in ticket #590):
Add support for the 82801DB ICH4 IDE controller, from kern/17757 by
Andreas Wrede <andreas@planix.com>
 1.153.2.3  10-Jun-2002  tv Pull up revision 1.157 (requested by taca in ticket #228):
Add support for VIA Technologies's VT8231 IDE Controller to ATA/100.
 1.153.2.2  10-Jun-2002  tv Pull up revision 1.156 (requested by bouyer in ticket #214):
Ops, use the proper setup_channel() function for promise adapters.
Using pdc202xx_setup_channel() for PDC20268 and newer is wrong, and will
cause trap trying to read from a non-existent register on some arches
(e.g. macppc).
pointed out by Makoto Fujiwara on port-macppc.
 1.153.2.1  04-Jun-2002  lukem pull up rev 1.154 (requested by bouyer in #129):
Remove the "set south-bridge's enable bit" code. It doens't seems to make
any difference for rev 0xc3 controllers, and hang on 0xc4 controllers.
Fixes kern/16954
 1.194.2.5  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.194.2.4  04-Feb-2005  skrll Sync with HEAD.
 1.194.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.194.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.194.2.1  03-Aug-2004  skrll Sync with HEAD
 1.210.6.2  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.210.6.1  12-Feb-2005  yamt sync with head.
 1.210.4.1  29-Apr-2005  kent sync with -current
 1.212.4.2  24-Mar-2008  yamt sync with head.
 1.212.4.1  30-Dec-2006  yamt sync with head.
 1.213.22.2  10-Dec-2006  yamt sync with head.
 1.213.22.1  22-Oct-2006  yamt sync with head
 1.213.20.1  18-Nov-2006  ad Sync with head.
 1.215.48.1  03-Apr-2008  mjf Sync with HEAD.
 1.215.44.1  24-Mar-2008  keiichi sync with head.
 1.215.24.1  23-Mar-2008  matt sync with HEAD
 1.216.4.1  11-Mar-2010  yamt sync with head
 1.217.4.1  05-Mar-2011  rmind sync with head
 1.217.2.1  06-Nov-2010  uebayasi Sync with HEAD.
 1.219.18.2  09-Oct-2012  bouyer Support transfers of up to MACHINE_MAXPHYS in all pciide variants, and ahci.
wd(4) limits its maxphys depending on the drives's capability (64k sectors
for LBA48, 256 sectors for LBA and 128 sectors for older devices).

I assumed all pciide controllers could do MACHINE_MAXPHYS transfers, but
this may not be true. The capabilities of each controller variants should be
looked at more closely.
 1.219.18.1  12-Sep-2012  tls Initial snapshot of work to eliminate 64K MAXPHYS. Basically works for
physio (I/O to raw devices); needs more doing to get it going with the
filesystems, but it shouldn't damage data.

All work's been done on amd64 so far. Not hard to add support to other
ports. If others want to pitch in, one very helpful thing would be to
sort out when and how IDE disks can do 128K or larger transfers, and
adjust the various PCI IDE (or at least ahcisata) drivers and wd.c
accordingly -- it would make testing much easier. Another very helpful
thing would be to implement a smart minphys() for RAIDframe along the
lines detailed in the MAXPHYS-NOTES file.

RSS XML Feed