summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-disk.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2001-02-06 16:44:25 +0000
committersos <sos@FreeBSD.org>2001-02-06 16:44:25 +0000
commit4793d374a0033084a4f9740552e348cfc927d67d (patch)
tree8bc04e5eb148942dcd6b0b92a9d6c20c296a27c1 /sys/dev/ata/ata-disk.c
parent68da07f7352180f928c486026cdadea9fb3f4254 (diff)
downloadFreeBSD-src-4793d374a0033084a4f9740552e348cfc927d67d.zip
FreeBSD-src-4793d374a0033084a4f9740552e348cfc927d67d.tar.gz
Introduce busspace instead of the good old in/out instructions.
Not pretty but it works (I hope)...
Diffstat (limited to 'sys/dev/ata/ata-disk.c')
-rw-r--r--sys/dev/ata/ata-disk.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 444ec21..d834b95 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -44,6 +44,7 @@
#include <vm/pmap.h>
#include <machine/md_var.h>
#include <machine/bus.h>
+#include <sys/rman.h>
#include <dev/ata/ata-all.h>
#include <dev/ata/ata-disk.h>
#include <dev/ata/ata-raid.h>
@@ -457,7 +458,7 @@ ad_transfer(struct ad_request *request)
/* if ATA bus RELEASE check for SERVICE */
if (adp->flags & AD_F_TAG_ENABLED &&
- inb(adp->controller->ioaddr + ATA_IREASON) & ATA_I_RELEASE){
+ ATA_INB(adp->controller->r_io, ATA_IREASON) & ATA_I_RELEASE) {
return ad_service(adp, 1);
}
}
@@ -524,13 +525,13 @@ ad_transfer(struct ad_request *request)
/* output the data */
if (adp->controller->flags & ATA_USE_16BIT)
- outsw(adp->controller->ioaddr + ATA_DATA,
- (void *)((uintptr_t)request->data + request->donecount),
- request->currentsize / sizeof(int16_t));
+ ATA_OUTSW(adp->controller->r_io, ATA_DATA,
+ (void *)((uintptr_t)request->data + request->donecount),
+ request->currentsize / sizeof(int16_t));
else
- outsl(adp->controller->ioaddr + ATA_DATA,
- (void *)((uintptr_t)request->data + request->donecount),
- request->currentsize / sizeof(int32_t));
+ ATA_OUTSL(adp->controller->r_io, ATA_DATA,
+ (void *)((uintptr_t)request->data + request->donecount),
+ request->currentsize / sizeof(int32_t));
return ATA_OP_CONTINUES;
transfer_failed:
@@ -576,7 +577,7 @@ ad_interrupt(struct ad_request *request)
/* did any real errors happen ? */
if ((adp->controller->status & ATA_S_ERROR) ||
(request->flags & ADR_F_DMA_USED && dma_stat & ATA_BMSTAT_ERROR)) {
- adp->controller->error = inb(adp->controller->ioaddr + ATA_ERROR);
+ adp->controller->error = ATA_INB(adp->controller->r_io, ATA_ERROR);
diskerr(request->bp,
(adp->controller->error & ATA_E_ICRC) ? "UDMA ICRC" : "hard",
request->blockaddr + (request->donecount / DEV_BSIZE),
@@ -636,13 +637,13 @@ ad_interrupt(struct ad_request *request)
else {
/* data ready, read in */
if (adp->controller->flags & ATA_USE_16BIT)
- insw(adp->controller->ioaddr + ATA_DATA,
- (void *)((uintptr_t)request->data + request->donecount),
- request->currentsize / sizeof(int16_t));
+ ATA_INSW(adp->controller->r_io, ATA_DATA,
+ (void *)((uintptr_t)request->data + request->donecount),
+ request->currentsize / sizeof(int16_t));
else
- insl(adp->controller->ioaddr + ATA_DATA,
- (void *)((uintptr_t)request->data + request->donecount),
- request->currentsize / sizeof(int32_t));
+ ATA_INSL(adp->controller->r_io, ATA_DATA,
+ (void *)((uintptr_t)request->data + request->donecount),
+ request->currentsize / sizeof(int32_t));
}
}
@@ -709,12 +710,12 @@ ad_service(struct ad_softc *adp, int change)
if (device != adp->unit &&
((struct ad_softc *)
(adp->controller->dev_softc[ATA_DEV(device)]))->outstanding > 0) {
- outb(adp->controller->ioaddr + ATA_DRIVE, ATA_D_IBM | device);
+ ATA_OUTB(adp->controller->r_io, ATA_DRIVE, ATA_D_IBM | device);
adp = adp->controller->dev_softc[ATA_DEV(device)];
DELAY(1);
}
}
- adp->controller->status = inb(adp->controller->altioaddr);
+ adp->controller->status = ATA_INB(adp->controller->r_altio, ATA_ALTSTAT);
/* do we have a SERVICE request from the drive ? */
if (adp->flags & AD_F_TAG_ENABLED &&
@@ -742,12 +743,12 @@ ad_service(struct ad_softc *adp, int change)
/* setup the transfer environment when ready */
if (ata_wait(adp->controller, adp->unit, ATA_S_READY)) {
printf("ad%d: problem issueing SERVICE tag=%d s=0x%02x e=0x%02x\n",
- adp->lun, inb(adp->controller->ioaddr + ATA_COUNT) >> 3,
+ adp->lun, ATA_INB(adp->controller->r_io, ATA_COUNT) >> 3,
adp->controller->status, adp->controller->error);
ad_invalidatequeue(adp, NULL);
return ATA_OP_FINISHED;
}
- tag = inb(adp->controller->ioaddr + ATA_COUNT) >> 3;
+ tag = ATA_INB(adp->controller->r_io, ATA_COUNT) >> 3;
if (!(request = adp->tags[tag])) {
printf("ad%d: no request for this tag=%d??\n", adp->lun, tag);
ad_invalidatequeue(adp, NULL);
OpenPOWER on IntegriCloud