Commit Graph

67 Commits

Author SHA1 Message Date
thorpej
a963286f8d More wdc_channel structure member namespace cleanup:
- channel -> ch_channel
- wdc -> ch_wdc
2004-01-03 22:56:52 +00:00
thorpej
5bd80d8373 Rename "struct channel_softc" to "struct wdc_channel". 2004-01-03 01:50:52 +00:00
thorpej
527c829fa0 Rename:
- wdc_xfer to ata_xfer
- channel_queue to ata_queue
and move them to <dev/ata/atavar.h> so they can be used by non-wdc ATA
controllers.  Clean up the member names of these structures while at it.
2004-01-01 17:18:53 +00:00
fvdl
6242a54566 There are some cards that map the ATA control and IDE DMA registers
in a different fashion. Individually, they have the same functionality,
but their layout is different. An example of such a chipset is
the Promise 203xx.

To be able to deal with this, transform the cmd and dma bus_space handles
into an array of handles, each seperately created with bus_space_subregion.
The code generated by using the extra indirection shouldn't change much,
since the extra indirection is negated by having the offset calculation
already done in bus_space_subregion. E.g.

	bus_space_write_4(tag, handle, offset, value)

becomes

	bus_space_write_4(tag, handles[offset], 0, value)

Reviewed by Manuel Bouyer. Tested on wdc_isa, wdc_pcmcia, viaide, piixide (i386)
and on cmdide (sparc64).
2003-11-27 23:02:40 +00:00
briggs
8cfe8cd526 After discussion between mycroft and enami, restore the WDC_PCMCIA_ATTACH
flag and use it to avoid an extra power cycle during the probe process.
2003-10-23 03:56:36 +00:00
briggs
0fd0bfe35a enami noted that my last fix was not correct. Simplify the code some (and
make it more correct) by removing a flag to track wdc attachment.  Disable
the function after wdcattach() is called, and remove a conditional when
enabling the function in wdc_pcmcia_enable().
2003-10-22 15:03:04 +00:00
briggs
1e810e3178 Since we enable the pcmcia function on attach, disable it on the detach. 2003-10-22 07:48:25 +00:00
bouyer
99d6009c2a 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.
2003-10-08 10:58:12 +00:00
mycroft
eefae40298 Hide the use of config_interrupts() in one place. 2003-09-25 19:29:48 +00:00
mycroft
f9d629fb93 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.
2003-09-23 09:19:22 +00:00
bouyer
c6beeca692 Since we can't detect ghost drives in the wdc back-end, resurect
WDC_CAPABILITY_SINGLE_DRIVE.
2003-09-21 11:14:00 +00:00
mycroft
d40837608f 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.
2003-09-19 21:35:56 +00:00
matt
374319260c Don't free chqueue since it's no longer malloc'ed. 2003-03-30 02:06:29 +00:00
ichiro
26d61dcb91 add product TOSHIBA PA2673U CBIDE2 (IODATA OEM) 2003-03-27 12:19:44 +00:00
matt
d641dc322f Don't malloc channel_queue, put it in the softc instead. 2003-03-22 20:09:35 +00:00
thorpej
b75a007d9f Add trailing ; to CFATTACH_DECL. 2002-10-02 16:51:16 +00:00
thorpej
71adb76f75 Use CFATTACH_DECL(). 2002-09-30 21:57:46 +00:00
thorpej
f818766afe Declare all cfattach structures const. 2002-09-27 20:31:45 +00:00
lukem
06de426449 SIMPLEQ rototill:
- implement SIMPLEQ_REMOVE(head, elm, type, field).  whilst it's O(n),
  this mirrors the functionality of SLIST_REMOVE() (the other
  singly-linked list type) and FreeBSD's STAILQ_REMOVE()
- remove the unnecessary elm arg from SIMPLEQ_REMOVE_HEAD().
  this mirrors the functionality of SLIST_REMOVE_HEAD() (the other
  singly-linked list type) and FreeBSD's STAILQ_REMOVE_HEAD()
- remove notes about SIMPLEQ not supporting arbitrary element removal
- use SIMPLEQ_FOREACH() instead of home-grown for loops
- use SIMPLEQ_EMPTY() appropriately
- use SIMPLEQ_*() instead of accessing sqh_first,sqh_last,sqe_next directly
- reorder manual page; be consistent about how the types are listed
- other minor cleanups
2002-06-01 23:50:52 +00:00
martin
a35450fe90 Backout previous. While it fixes half of the problem for me, it is not
the right fix.
2002-03-31 13:27:32 +00:00
martin
6d37025002 Establish/disestablish the interrupt handler when enabling/disabling the
controller - no matter if we are called from attach or not.
This makes my FreeCOM CD drive work at first attach (PR 13480).

Something is wrong with the detach code; it won't work on second attach
and will panic on second detach - but that has to wait until the kids
took care of some easter eggs.
2002-03-31 07:19:03 +00:00
simonb
c37d15083b Fix a tyop in a comment. 2002-01-29 00:31:55 +00:00
soren
3faa83dcb4 To make dev/pcmcia work on platforms with 64-bit bus_addr_t and
32-bit bus_size_t (sparc), change the pcmcia_mem_map(9) offsetp
argument to bus_size_t as it is used as a bus_space offset.
2001-12-16 17:53:17 +00:00
lukem
ab5d9d2b0c add RCSIDs 2001-11-13 07:24:43 +00:00
christos
d9b3639de6 quirk for panasonic adapter. 2001-10-14 19:21:45 +00:00
bouyer
937a7a3ed9 Pull up the thorpej_scsipi branch to main branch.
This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
  ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
  to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
  peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
  recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
  scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
  (no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
  set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
  the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
  will be requeued, or a REQUEST SENSE will be sent as appropriate.

Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
2001-04-25 17:53:04 +00:00
uch
c567a80bdc CF memory mapped addressing mode. http://www.compactflash.org/cfspc1_4.pdf 2001-03-08 15:20:57 +00:00
jdolecek
522f569810 make some more constant arrays 'const' 2001-02-21 21:39:52 +00:00
takemura
1c518d67a0 Add WDC_CAPABILITY_SINGLE_DRIVE to ignore secound drive. Wdc on pcmcia will
be attached with this flag.
Some CF Card (for ex. IBM MicroDrive and SanDisk) doesn't seem to implement
drive select command. In this case, you can't eliminate ghost drive properly.
So you should use this flag to ignore the ghost by force.
2001-01-06 14:55:49 +00:00
sato
4e15bd1d3a add Novac PCMCIA-IDE Card(Card for HD530P PCMCIA-IDE Box).
No vendor ID, no product ID, and the wpp_cis_info is 'PCMCIA', 'PnPIDE'.
2000-12-27 10:41:00 +00:00
haya
22be9ab855 Add IO Data CBIDE2 ata interface card. 2000-12-20 09:56:34 +00:00
abs
cf699a23e5 Add a 'value engineered' generic pcmcia CD-ROM drive, badged 'AMACOM'.
No vendor ID, no product ID, and the wpp_cis_info is 'PCMCIA', 'CD-ROM'.
I'd be encouraged at some progress towards 'generic devices', except
someone else is bound to produce something that identifies the same, but
requires a quirk. Can I go back to my sparc now?
Make two other comments consistent while here.
2000-12-18 17:21:11 +00:00
haya
a4df364077 METHOD CHANGE: Use CIS_FUNCE data which is decoded by pcmcia_cis.c,
instead of decode cis tuple by itself.  This change leads to suppress
one power-cycling.
2000-10-25 09:32:11 +00:00
abs
c9355a957c Add the pccard controller for a Toshiba Portege drive. No vendor ID, no
product ID, and in this temporary loan, no bleeding power supply so it
can only probe the controller and not the drive. Still, its something.
2000-07-20 23:20:01 +00:00
mrg
261538ecac remove include of <vm/vm.h> 2000-06-28 16:39:25 +00:00
bouyer
3b69a8011b make it compile again after ATAPI changes. 2000-04-01 17:52:14 +00:00
enami
158df7b6f1 Don't establish an interrupt if attach is in progress. Anyway, current wdc
and its children doesn't require interrupt on attach.
2000-02-21 03:55:22 +00:00
enami
9267b8f018 Remove unnecessary includes. 2000-02-05 04:41:49 +00:00
enami
730f15bb19 Free resources on attach failure. 2000-02-04 09:31:07 +00:00
enami
19aa9f2cbb The workaround for Hagiwara SYS-COM Compact Flash card is no longer necessary. 2000-02-01 06:48:15 +00:00
enami
7acb650645 - fix comment style/indentaion.
- add comment to refer aic_pcmcia_enable.
2000-01-24 23:14:23 +00:00
augustss
903e37734d Add EXP Computer Inc. PCMCIA controller.
From Brad Spencer <brad@anduin.eldar.org> in PR 9140.
2000-01-08 07:34:49 +00:00
sommerfeld
d4cc45ba08 Fix hot-swapping for controllers which grab two ranges of port space.
(if the mapping of the second range succeeded, it would forget about
the window of the second address range, causing a subsequent insertion
event to fail..).

My Sony PCGA-CD51 now hot-swaps a lot better now.
1999-12-09 03:22:41 +00:00
soren
6f6045c97d Regen. 1999-11-27 01:03:33 +00:00
takemura
cad52c9e08 Add a entry for Mobile Dock 2, which is 2.5" HDD adapter. 1999-11-21 10:13:08 +00:00
enami
a2369d8e97 Cancel active transfers on aic/wdc detach.
Also makes LS-120 drive works for me again.
1999-10-20 15:22:24 +00:00
enami
67e874d814 Allow to detach wdc, atapibus, wd and cd. 1999-09-23 11:04:29 +00:00
enami
99024b0423 print newline. 1999-09-22 10:03:37 +00:00
abs
ab9ab83d05 Add ID for IBM 'PCMCIA Portable CD-ROM Drive'. We only have one of these and it
may be broken (it choked under Windows), but it at least now probes.
1999-02-19 21:49:43 +00:00
bouyer
47ab212504 Rename pio_mode, etc ... to PIO_cap, etc ... for consistency with the
ata_drive_datas struct. Suggested by Soren S. Jorvan.
1998-12-03 18:24:30 +00:00