aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2005-04-13 07:14:17 +0000
committerSøren Schmidt <sos@FreeBSD.org>2005-04-13 07:14:17 +0000
commitd5514ba3654f094c7c80de227375c7a5f75000f9 (patch)
tree12fa8249eea69efd18e2cd9984312ea0494071b7 /sys/dev/ata
parenta10392470195b1aa52ea9efe2af02abfd41bc267 (diff)
Notes
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-card.c19
-rw-r--r--sys/dev/ata/ata-cbus.c11
-rw-r--r--sys/dev/ata/ata-isa.c14
3 files changed, 40 insertions, 4 deletions
diff --git a/sys/dev/ata/ata-card.c b/sys/dev/ata/ata-card.c
index 8615ddea9c71..42906decd8cf 100644
--- a/sys/dev/ata/ata-card.c
+++ b/sys/dev/ata/ata-card.c
@@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$");
#include <dev/pccard/pccard_cis.h>
#include <dev/pccard/pccardreg.h>
#include <dev/pccard/pccardvar.h>
+#include <ata_if.h>
#include "pccarddevs.h"
@@ -154,16 +155,28 @@ ata_pccard_detach(device_t dev)
return 0;
}
+static void
+ata_pccard_setmode(device_t parent, device_t dev)
+{
+ struct ata_device *atadev = device_get_softc(dev);
+ int mode = atadev->mode;
+
+ atadev->mode = ata_limit_mode(atadev, mode, ATA_PIO_MAX);
+}
+
static device_method_t ata_pccard_methods[] = {
/* device interface */
- DEVMETHOD(device_probe, pccard_compat_probe),
- DEVMETHOD(device_attach, pccard_compat_attach),
- DEVMETHOD(device_detach, ata_pccard_detach),
+ DEVMETHOD(device_probe, pccard_compat_probe),
+ DEVMETHOD(device_attach, pccard_compat_attach),
+ DEVMETHOD(device_detach, ata_pccard_detach),
/* card interface */
DEVMETHOD(card_compat_match, ata_pccard_match),
DEVMETHOD(card_compat_probe, ata_pccard_probe),
DEVMETHOD(card_compat_attach, ata_attach),
+
+ /* ATA methods */
+ DEVMETHOD(ata_setmode, ata_pccard_setmode),
{ 0, 0 }
};
diff --git a/sys/dev/ata/ata-cbus.c b/sys/dev/ata/ata-cbus.c
index ac26664d54d6..d534a5427fe1 100644
--- a/sys/dev/ata/ata-cbus.c
+++ b/sys/dev/ata/ata-cbus.c
@@ -332,6 +332,15 @@ ata_cbuschannel_banking(device_t dev, int flags)
return res;
}
+static void
+ata_cbus_setmode(device_t parent, device_t dev)
+{
+ struct ata_device *atadev = device_get_softc(dev);
+ int mode = atadev->mode;
+
+ atadev->mode = ata_limit_mode(atadev, mode, ATA_PIO_MAX);
+}
+
static device_method_t ata_cbuschannel_methods[] = {
/* device interface */
DEVMETHOD(device_probe, ata_cbuschannel_probe),
@@ -342,7 +351,7 @@ static device_method_t ata_cbuschannel_methods[] = {
/* ATA methods */
DEVMETHOD(ata_locking, ata_cbuschannel_banking),
-
+ DEVMETHOD(ata_setmode, ata_cbus_setmode),
{ 0, 0 }
};
diff --git a/sys/dev/ata/ata-isa.c b/sys/dev/ata/ata-isa.c
index a6c50f9f1dfd..2e8acda69db9 100644
--- a/sys/dev/ata/ata-isa.c
+++ b/sys/dev/ata/ata-isa.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <sys/rman.h>
#include <isa/isavar.h>
#include <dev/ata/ata-all.h>
+#include <ata_if.h>
/* local vars */
static struct isa_pnp_id ata_ids[] = {
@@ -109,12 +110,25 @@ ata_isa_probe(device_t dev)
return ata_probe(dev);
}
+static void
+ata_isa_setmode(device_t parent, device_t dev)
+{
+ struct ata_device *atadev = device_get_softc(dev);
+ int mode = atadev->mode;
+
+ atadev->mode = ata_limit_mode(atadev, mode, ATA_PIO_MAX);
+}
+
+
static device_method_t ata_isa_methods[] = {
/* device interface */
DEVMETHOD(device_probe, ata_isa_probe),
DEVMETHOD(device_attach, ata_attach),
DEVMETHOD(device_suspend, ata_suspend),
DEVMETHOD(device_resume, ata_resume),
+
+ /* ATA methods */
+ DEVMETHOD(ata_setmode, ata_isa_setmode),
{ 0, 0 }
};