PERFORCE change 167116 for review
Alexander Motin
mav at FreeBSD.org
Sat Aug 8 21:56:26 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167116
Change 167116 by mav at mav_mavbook on 2009/08/08 21:55:55
Remove most of request->dev references from low-level drivers code,
preparing ground for creating CAM wrapper.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#20 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.h#16 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-dma.c#12 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-lowlevel.c#11 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-pci.c#13 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-queue.c#15 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-sata.c#5 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-ahci.c#7 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-intel.c#7 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-marvell.c#6 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-promise.c#6 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-serverworks.c#5 edit
.. //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-siliconimage.c#6 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#20 (text+ko) ====
@@ -802,10 +802,10 @@
void
ata_modify_if_48bit(struct ata_request *request)
{
- struct ata_channel *ch = device_get_softc(device_get_parent(request->dev));
+ struct ata_channel *ch = device_get_softc(request->parent);
struct ata_device *atadev = device_get_softc(request->dev);
- atadev->flags &= ~ATA_D_48BIT_ACTIVE;
+ request->flags &= ~ATA_R_48BIT;
if (((request->u.ata.lba + request->u.ata.count) >= ATA_MAX_28BIT_LBA ||
request->u.ata.count > 256) &&
@@ -879,7 +879,7 @@
default:
return;
}
- atadev->flags |= ATA_D_48BIT_ACTIVE;
+ request->flags |= ATA_R_48BIT;
}
else if (atadev->param.support.command2 & ATA_SUPPORT_ADDRESS48) {
@@ -897,7 +897,7 @@
default:
return;
}
- atadev->flags |= ATA_D_48BIT_ACTIVE;
+ request->flags |= ATA_R_48BIT;
}
}
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.h#16 (text+ko) ====
@@ -355,6 +355,7 @@
struct ata_request {
device_t dev; /* device handle */
device_t parent; /* channel handle */
+ int unit; /* physical unit */
union {
struct {
u_int8_t command; /* command reg */
@@ -380,6 +381,7 @@
#define ATA_R_DMA 0x00000010
#define ATA_R_QUIET 0x00000020
#define ATA_R_TIMEOUT 0x00000040
+#define ATA_R_48BIT 0x00000080
#define ATA_R_ORDERED 0x00000100
#define ATA_R_AT_HEAD 0x00000200
@@ -440,7 +442,6 @@
#define ATA_D_USE_CHS 0x0001
#define ATA_D_MEDIA_CHANGED 0x0002
#define ATA_D_ENC_PRESENT 0x0004
-#define ATA_D_48BIT_ACTIVE 0x0008
};
/* structure for holding DMA Physical Region Descriptors (PRD) entries */
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-dma.c#12 (text+ko) ====
@@ -256,37 +256,36 @@
ata_dmaload(struct ata_request *request, void *addr, int *entries)
{
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
struct ata_dmasetprd_args dspa;
int error;
ATA_DEBUG_RQ(request, "dmaload");
if (request->dma) {
- device_printf(request->dev,
+ device_printf(request->parent,
"FAILURE - already active DMA on this device\n");
return EIO;
}
if (!request->bytecount) {
- device_printf(request->dev,
+ device_printf(request->parent,
"FAILURE - zero length DMA transfer attempted\n");
return EIO;
}
if (((uintptr_t)(request->data) & (ch->dma.alignment - 1)) ||
(request->bytecount & (ch->dma.alignment - 1))) {
- device_printf(request->dev,
+ device_printf(request->parent,
"FAILURE - non aligned DMA transfer attempted\n");
return EIO;
}
if (request->bytecount > ch->dma.max_iosize) {
- device_printf(request->dev,
+ device_printf(request->parent,
"FAILURE - oversized DMA transfer attempt %d > %d\n",
request->bytecount, ch->dma.max_iosize);
return EIO;
}
/* set our slot, unit for simplicity XXX SOS NCQ will change that */
- request->dma = &ch->dma.slot[atadev->unit];
+ request->dma = &ch->dma.slot[request->unit];
if (addr)
dspa.dmatab = addr;
@@ -297,7 +296,7 @@
request->data, request->bytecount,
ch->dma.setprd, &dspa, BUS_DMA_NOWAIT)) ||
(error = dspa.error)) {
- device_printf(request->dev, "FAILURE - load data\n");
+ device_printf(request->parent, "FAILURE - load data\n");
goto error;
}
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-lowlevel.c#11 (text+ko) ====
@@ -47,7 +47,7 @@
/* prototypes */
static int ata_generic_status(device_t dev);
-static int ata_wait(struct ata_channel *ch, struct ata_device *, u_int8_t);
+static int ata_wait(struct ata_channel *ch, int unit, u_int8_t);
static void ata_pio_read(struct ata_request *, int);
static void ata_pio_write(struct ata_request *, int);
static void ata_tf_read(struct ata_request *);
@@ -77,7 +77,6 @@
ata_begin_transaction(struct ata_request *request)
{
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
int dummy, error;
ATA_DEBUG_RQ(request, "begin transaction");
@@ -101,7 +100,7 @@
/* issue command */
if (ch->hw.command(request)) {
- device_printf(request->dev, "error issuing %s command\n",
+ device_printf(request->parent, "error issuing %s command\n",
ata_cmd2str(request));
request->result = EIO;
goto begin_finished;
@@ -122,8 +121,8 @@
/* if write command output the data */
if (write) {
- if (ata_wait(ch, atadev, (ATA_S_READY | ATA_S_DRQ)) < 0) {
- device_printf(request->dev,
+ if (ata_wait(ch, request->unit, (ATA_S_READY | ATA_S_DRQ)) < 0) {
+ device_printf(request->parent,
"timeout waiting for write DRQ\n");
request->result = EIO;
goto begin_finished;
@@ -137,14 +136,14 @@
case ATA_R_DMA:
/* check sanity, setup SG list and DMA engine */
if ((error = ch->dma.load(request, NULL, &dummy))) {
- device_printf(request->dev, "setting up DMA failed\n");
+ device_printf(request->parent, "setting up DMA failed\n");
request->result = error;
goto begin_finished;
}
/* issue command */
if (ch->hw.command(request)) {
- device_printf(request->dev, "error issuing %s command\n",
+ device_printf(request->parent, "error issuing %s command\n",
ata_cmd2str(request));
request->result = EIO;
goto begin_finished;
@@ -152,7 +151,7 @@
/* start DMA engine */
if (ch->dma.start && ch->dma.start(request)) {
- device_printf(request->dev, "error starting DMA\n");
+ device_printf(request->parent, "error starting DMA\n");
request->result = EIO;
goto begin_finished;
}
@@ -162,7 +161,7 @@
case ATA_R_ATAPI:
/* is this just a POLL DSC command ? */
if (request->u.atapi.ccb[0] == ATAPI_POLL_DSC) {
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit));
DELAY(10);
if (!(ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_DSC))
request->result = EBUSY;
@@ -171,7 +170,7 @@
/* start ATAPI operation */
if (ch->hw.command(request)) {
- device_printf(request->dev, "error issuing ATA PACKET command\n");
+ device_printf(request->parent, "error issuing ATA PACKET command\n");
request->result = EIO;
goto begin_finished;
}
@@ -181,7 +180,7 @@
case ATA_R_ATAPI|ATA_R_DMA:
/* is this just a POLL DSC command ? */
if (request->u.atapi.ccb[0] == ATAPI_POLL_DSC) {
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit));
DELAY(10);
if (!(ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_DSC))
request->result = EBUSY;
@@ -190,14 +189,14 @@
/* check sanity, setup SG list and DMA engine */
if ((error = ch->dma.load(request, NULL, &dummy))) {
- device_printf(request->dev, "setting up DMA failed\n");
+ device_printf(request->parent, "setting up DMA failed\n");
request->result = error;
goto begin_finished;
}
/* start ATAPI operation */
if (ch->hw.command(request)) {
- device_printf(request->dev, "error issuing ATA PACKET command\n");
+ device_printf(request->parent, "error issuing ATA PACKET command\n");
request->result = EIO;
goto begin_finished;
}
@@ -266,8 +265,8 @@
if (request->u.ata.command != ATA_ATAPI_IDENTIFY)
flags |= ATA_S_READY;
- if (ata_wait(ch, atadev, flags) < 0) {
- device_printf(request->dev,
+ if (ata_wait(ch, request->unit, flags) < 0) {
+ device_printf(request->parent,
"timeout waiting for read DRQ\n");
request->result = EIO;
goto end_finished;
@@ -290,8 +289,8 @@
if (request->flags & ATA_R_WRITE) {
/* if we get an error here we are done with the HW */
- if (ata_wait(ch, atadev, (ATA_S_READY | ATA_S_DRQ)) < 0) {
- device_printf(request->dev,
+ if (ata_wait(ch, request->unit, (ATA_S_READY | ATA_S_DRQ)) < 0) {
+ device_printf(request->parent,
"timeout waiting for write DRQ\n");
request->status = ATA_IDX_INB(ch, ATA_STATUS);
goto end_finished;
@@ -347,7 +346,7 @@
DELAY(10);
if (!(request->status & ATA_S_DRQ)) {
- device_printf(request->dev, "command interrupt without DRQ\n");
+ device_printf(request->parent, "command interrupt without DRQ\n");
request->status = ATA_S_ERROR;
goto end_finished;
}
@@ -360,7 +359,7 @@
case ATAPI_P_WRITE:
if (request->flags & ATA_R_READ) {
request->status = ATA_S_ERROR;
- device_printf(request->dev,
+ device_printf(request->parent,
"%s trying to write on read buffer\n",
ata_cmd2str(request));
goto end_finished;
@@ -378,7 +377,7 @@
case ATAPI_P_READ:
if (request->flags & ATA_R_WRITE) {
request->status = ATA_S_ERROR;
- device_printf(request->dev,
+ device_printf(request->parent,
"%s trying to read on write buffer\n",
ata_cmd2str(request));
goto end_finished;
@@ -393,7 +392,7 @@
goto end_continue;
case ATAPI_P_DONEDRQ:
- device_printf(request->dev,
+ device_printf(request->parent,
"WARNING - %s DONEDRQ non conformant device\n",
ata_cmd2str(request));
if (request->flags & ATA_R_READ) {
@@ -415,7 +414,7 @@
goto end_finished;
default:
- device_printf(request->dev, "unknown transfer phase\n");
+ device_printf(request->parent, "unknown transfer phase\n");
request->status = ATA_S_ERROR;
}
@@ -603,7 +602,7 @@
}
static int
-ata_wait(struct ata_channel *ch, struct ata_device *atadev, u_int8_t mask)
+ata_wait(struct ata_channel *ch, int unit, u_int8_t mask)
{
u_int8_t status;
int timeout = 0;
@@ -616,7 +615,7 @@
/* if drive fails status, reselect the drive and try again */
if (status == 0xff) {
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(unit));
timeout += 1000;
DELAY(1000);
continue;
@@ -660,11 +659,11 @@
struct ata_device *atadev = device_get_softc(request->dev);
/* select device */
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit));
/* ready to issue command ? */
- if (ata_wait(ch, atadev, 0) < 0) {
- device_printf(request->dev, "timeout waiting to issue command\n");
+ if (ata_wait(ch, request->unit, 0) < 0) {
+ device_printf(request->parent, "timeout waiting to issue command\n");
return -1;
}
@@ -702,7 +701,7 @@
DELAY(20);
}
if (timeout <= 0) {
- device_printf(request->dev, "timeout waiting for ATAPI ready\n");
+ device_printf(request->parent, "timeout waiting for ATAPI ready\n");
request->result = EIO;
return -1;
}
@@ -728,9 +727,8 @@
ata_tf_read(struct ata_request *request)
{
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_4BIT | ATA_A_HOB);
request->u.ata.count = (ATA_IDX_INB(ch, ATA_COUNT) << 8);
request->u.ata.lba =
@@ -760,7 +758,7 @@
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature >> 8);
ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count >> 8);
@@ -771,7 +769,7 @@
ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 40);
ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(request->unit));
}
else {
ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
@@ -793,7 +791,7 @@
(request->u.ata.lba / (sectors * heads)));
ATA_IDX_OUTB(ch, ATA_CYL_MSB,
(request->u.ata.lba / (sectors * heads)) >> 8);
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit) |
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit) |
(((request->u.ata.lba% (sectors * heads)) /
sectors) & 0xf));
}
@@ -802,7 +800,7 @@
ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
ATA_IDX_OUTB(ch, ATA_DRIVE,
- ATA_D_IBM | ATA_D_LBA | ATA_DEV(atadev->unit) |
+ ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
((request->u.ata.lba >> 24) & 0x0f));
}
}
@@ -825,7 +823,7 @@
size / sizeof(int32_t));
if (request->transfersize < length) {
- device_printf(request->dev, "WARNING - %s read data overrun %d>%d\n",
+ device_printf(request->parent, "WARNING - %s read data overrun %d>%d\n",
ata_cmd2str(request), length, request->transfersize);
for (resid = request->transfersize; resid < length;
resid += sizeof(int16_t))
@@ -850,7 +848,7 @@
size / sizeof(int32_t));
if (request->transfersize < length) {
- device_printf(request->dev, "WARNING - %s write data underrun %d>%d\n",
+ device_printf(request->parent, "WARNING - %s write data underrun %d>%d\n",
ata_cmd2str(request), length, request->transfersize);
for (resid = request->transfersize; resid < length;
resid += sizeof(int16_t))
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-pci.c#13 (text+ko) ====
@@ -477,7 +477,7 @@
ch->dma.flags &= ~ATA_DMA_ACTIVE;
ATA_IDX_OUTB(ch, ATA_BMSTAT_PORT, ATA_BMSTAT_INTERRUPT | ATA_BMSTAT_ERROR);
if ((request = ch->running)) {
- device_printf(request->dev, "DMA reset calling unload\n");
+ device_printf(dev, "DMA reset calling unload\n");
ch->dma.unload(request);
}
}
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-queue.c#15 (text+ko) ====
@@ -52,10 +52,12 @@
ata_queue_request(struct ata_request *request)
{
struct ata_channel *ch;
+ struct ata_device *atadev = device_get_softc(request->dev);
/* treat request as virgin (this might be an ATA_R_REQUEUE) */
request->result = request->status = request->error = 0;
+ request->unit = atadev->unit;
/* check that the device is still valid */
if (!(request->parent = device_get_parent(request->dev))) {
request->result = ENXIO;
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-sata.c#5 (text+ko) ====
@@ -246,11 +246,10 @@
int
ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis)
{
- struct ata_device *atadev = device_get_softc(request->dev);
if (request->flags & ATA_R_ATAPI) {
fis[0] = 0x27; /* host to device */
- fis[1] = 0x80 | (atadev->unit & 0x0f);
+ fis[1] = 0x80 | (request->unit & 0x0f);
fis[2] = ATA_PACKET_CMD;
if (request->flags & (ATA_R_READ | ATA_R_WRITE))
fis[3] = ATA_F_DMA;
@@ -265,14 +264,14 @@
else {
ata_modify_if_48bit(request);
fis[0] = 0x27; /* host to device */
- fis[1] = 0x80 | (atadev->unit & 0x0f);
+ fis[1] = 0x80 | (request->unit & 0x0f);
fis[2] = request->u.ata.command;
fis[3] = request->u.ata.feature;
fis[4] = request->u.ata.lba;
fis[5] = request->u.ata.lba >> 8;
fis[6] = request->u.ata.lba >> 16;
fis[7] = ATA_D_LBA;
- if (!(atadev->flags & ATA_D_48BIT_ACTIVE))
+ if (!(request->flags & ATA_R_48BIT))
fis[7] |= (ATA_D_IBM | (request->u.ata.lba >> 24 & 0x0f));
fis[8] = request->u.ata.lba >> 24;
fis[9] = request->u.ata.lba >> 32;
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-ahci.c#7 (text+ko) ====
@@ -385,13 +385,12 @@
static int
ata_ahci_begin_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
struct ata_ahci_cmd_tab *ctp;
struct ata_ahci_cmd_list *clp;
int offset = ch->unit << 7;
- int port = atadev->unit & 0x0f;
+ int port = request->unit & 0x0f;
int entries = 0;
int fis_size;
@@ -401,7 +400,7 @@
/* setup the FIS for this request */
if (!(fis_size = ata_ahci_setup_fis(ctp, request))) {
- device_printf(request->dev, "setting up SATA FIS failed\n");
+ device_printf(request->parent, "setting up SATA FIS failed\n");
request->result = EIO;
return ATA_OP_FINISHED;
}
@@ -409,7 +408,7 @@
/* if request moves data setup and load SG list */
if (request->flags & (ATA_R_READ | ATA_R_WRITE)) {
if (ch->dma.load(request, ctp->prd_tab, &entries)) {
- device_printf(request->dev, "setting up DMA failed\n");
+ device_printf(request->parent, "setting up DMA failed\n");
request->result = EIO;
return ATA_OP_FINISHED;
}
@@ -476,7 +475,7 @@
static int
ata_ahci_end_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_ahci_cmd_list *clp;
u_int32_t tf_data;
@@ -495,13 +494,12 @@
/* on control commands read back registers to the request struct */
if (request->flags & ATA_R_CONTROL) {
- struct ata_device *atadev = device_get_softc(request->dev);
u_int8_t *fis = ch->dma.work + ATA_AHCI_FB_OFFSET + 0x40;
request->u.ata.count = fis[12] | ((u_int16_t)fis[13] << 8);
request->u.ata.lba = fis[4] | ((u_int64_t)fis[5] << 8) |
((u_int64_t)fis[6] << 16);
- if (atadev->flags & ATA_D_48BIT_ACTIVE)
+ if (request->flags & ATA_R_48BIT)
request->u.ata.lba |= ((u_int64_t)fis[8] << 24) |
((u_int64_t)fis[9] << 32) |
((u_int64_t)fis[10] << 40);
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-intel.c#7 (text+ko) ====
@@ -466,10 +466,10 @@
static void
ata_intel_31244_tf_write(struct ata_request *request)
{
- struct ata_channel *ch = device_get_softc(device_get_parent(request->dev));
+ struct ata_channel *ch = device_get_softc(request->parent);
struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
ATA_IDX_OUTW(ch, ATA_COUNT, request->u.ata.count);
ATA_IDX_OUTW(ch, ATA_SECTOR, ((request->u.ata.lba >> 16) & 0xff00) |
@@ -478,7 +478,7 @@
((request->u.ata.lba >> 8) & 0x00ff));
ATA_IDX_OUTW(ch, ATA_CYL_MSB, ((request->u.ata.lba >> 32) & 0xff00) |
((request->u.ata.lba >> 16) & 0x00ff));
- ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(request->unit));
}
else {
ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
@@ -499,7 +499,7 @@
(request->u.ata.lba / (sectors * heads)));
ATA_IDX_OUTB(ch, ATA_CYL_MSB,
(request->u.ata.lba / (sectors * heads)) >> 8);
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit) |
+ ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit) |
(((request->u.ata.lba% (sectors * heads)) /
sectors) & 0xf));
}
@@ -508,7 +508,7 @@
ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
ATA_IDX_OUTB(ch, ATA_DRIVE,
- ATA_D_IBM | ATA_D_LBA | ATA_DEV(atadev->unit) |
+ ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
((request->u.ata.lba >> 24) & 0x0f));
}
}
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-marvell.c#6 (text+ko) ====
@@ -340,7 +340,7 @@
static int
ata_marvell_edma_begin_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
u_int32_t req_in;
u_int8_t *bytep;
@@ -364,7 +364,7 @@
/* check sanity, setup SG list and DMA engine */
if ((error = ch->dma.load(request, NULL, NULL))) {
- device_printf(request->dev, "setting up DMA failed\n");
+ device_printf(request->parent, "setting up DMA failed\n");
request->result = error;
return ATA_OP_FINISHED;
}
@@ -430,7 +430,7 @@
static int
ata_marvell_edma_end_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
int offset = (ch->unit > 3 ? 0x30014 : 0x20014);
u_int32_t icr = ATA_INL(ctlr->r_res1, offset);
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-promise.c#6 (text+ko) ====
@@ -387,11 +387,10 @@
static int
ata_promise_dmastart(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_OUTB(ctlr->r_res1, 0x11,
ATA_INB(ctlr->r_res1, 0x11) | (ch->unit ? 0x08 : 0x02));
ATA_OUTL(ctlr->r_res1, ch->unit ? 0x24 : 0x20,
@@ -411,12 +410,11 @@
static int
ata_promise_dmastop(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
int error;
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_OUTB(ctlr->r_res1, 0x11,
ATA_INB(ctlr->r_res1, 0x11) & ~(ch->unit ? 0x08 : 0x02));
ATA_OUTL(ctlr->r_res1, ch->unit ? 0x24 : 0x20, 0);
@@ -682,9 +680,8 @@
static int
ata_promise_mio_command(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
u_int32_t *wordp = (u_int32_t *)ch->dma.work;
@@ -693,7 +690,7 @@
if ((ctlr->chip->cfg2 == PR_SATA2) ||
((ctlr->chip->cfg2 == PR_CMBO2) && (ch->unit < 2))) {
/* set portmultiplier port */
- ATA_OUTB(ctlr->r_res2, 0x4e8 + (ch->unit << 8), atadev->unit & 0x0f);
+ ATA_OUTB(ctlr->r_res2, 0x4e8 + (ch->unit << 8), request->unit & 0x0f);
}
/* XXX SOS add ATAPI commands support later */
@@ -1051,7 +1048,7 @@
static int
ata_promise_sx4_command(struct ata_request *request)
{
- device_t gparent = GRANDPARENT(request->dev);
+ device_t gparent = device_get_parent(request->parent);
struct ata_pci_controller *ctlr = device_get_softc(gparent);
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_dma_prdentry *prd;
@@ -1158,15 +1155,14 @@
static int
ata_promise_apkt(u_int8_t *bytep, struct ata_request *request)
{
- struct ata_device *atadev = device_get_softc(request->dev);
int i = 12;
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_REG | ATA_PDC_WAIT_NBUSY|ATA_DRIVE;
- bytep[i++] = ATA_D_IBM | ATA_D_LBA | ATA_DEV(atadev->unit);
+ bytep[i++] = ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit);
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_CTL;
bytep[i++] = ATA_A_4BIT;
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
bytep[i++] = ATA_PDC_2B | ATA_PDC_WRITE_REG | ATA_FEATURE;
bytep[i++] = request->u.ata.feature >> 8;
bytep[i++] = request->u.ata.feature;
@@ -1183,7 +1179,7 @@
bytep[i++] = request->u.ata.lba >> 40;
bytep[i++] = request->u.ata.lba >> 16;
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_REG | ATA_DRIVE;
- bytep[i++] = ATA_D_LBA | ATA_DEV(atadev->unit);
+ bytep[i++] = ATA_D_LBA | ATA_DEV(request->unit);
}
else {
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_REG | ATA_FEATURE;
@@ -1197,8 +1193,7 @@
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_REG | ATA_CYL_MSB;
bytep[i++] = request->u.ata.lba >> 16;
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_REG | ATA_DRIVE;
- bytep[i++] = (atadev->flags & ATA_D_USE_CHS ? 0 : ATA_D_LBA) |
- ATA_D_IBM | ATA_DEV(atadev->unit) |
+ bytep[i++] = ATA_D_LBA | ATA_D_IBM | ATA_DEV(request->unit) |
((request->u.ata.lba >> 24)&0xf);
}
bytep[i++] = ATA_PDC_1B | ATA_PDC_WRITE_END | ATA_COMMAND;
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-serverworks.c#5 (text+ko) ====
@@ -228,9 +228,8 @@
ata_serverworks_tf_read(struct ata_request *request)
{
struct ata_channel *ch = device_get_softc(request->parent);
- struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
u_int16_t temp;
request->u.ata.count = ATA_IDX_INW(ch, ATA_COUNT);
@@ -259,7 +258,7 @@
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_device *atadev = device_get_softc(request->dev);
- if (atadev->flags & ATA_D_48BIT_ACTIVE) {
+ if (request->flags & ATA_R_48BIT) {
ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
ATA_IDX_OUTW(ch, ATA_COUNT, request->u.ata.count);
ATA_IDX_OUTW(ch, ATA_SECTOR, ((request->u.ata.lba >> 16) & 0xff00) |
@@ -268,7 +267,7 @@
((request->u.ata.lba >> 8) & 0x00ff));
ATA_IDX_OUTW(ch, ATA_CYL_MSB, ((request->u.ata.lba >> 32) & 0xff00) |
((request->u.ata.lba >> 16) & 0x00ff));
- ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(atadev->unit));
+ ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(request->unit));
}
else {
ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
@@ -289,7 +288,7 @@
(request->u.ata.lba / (sectors * heads)));
ATA_IDX_OUTW(ch, ATA_CYL_MSB,
(request->u.ata.lba / (sectors * heads)) >> 8);
- ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(atadev->unit) |
+ ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit) |
(((request->u.ata.lba% (sectors * heads)) /
sectors) & 0xf));
}
@@ -298,7 +297,7 @@
ATA_IDX_OUTW(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
ATA_IDX_OUTW(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
ATA_IDX_OUTW(ch, ATA_DRIVE,
- ATA_D_IBM | ATA_D_LBA | ATA_DEV(atadev->unit) |
+ ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
((request->u.ata.lba >> 24) & 0x0f));
}
}
==== //depot/projects/scottl-camlock/src/sys/dev/ata/chipsets/ata-siliconimage.c#6 (text+ko) ====
@@ -542,7 +542,7 @@
static int
ata_siiprb_begin_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_siiprb_command *prb;
struct ata_siiprb_dma_prdentry *prd;
@@ -564,7 +564,7 @@
/* setup the FIS for this request */
if (!ata_request2fis_h2d(request, &prb->fis[0])) {
- device_printf(request->dev, "setting up SATA FIS failed\n");
+ device_printf(request->parent, "setting up SATA FIS failed\n");
request->result = EIO;
return ATA_OP_FINISHED;
}
@@ -590,7 +590,7 @@
/* if request moves data setup and load SG list */
if (request->flags & (ATA_R_READ | ATA_R_WRITE)) {
if (ch->dma.load(request, prd, NULL)) {
- device_printf(request->dev, "setting up DMA failed\n");
+ device_printf(request->parent, "setting up DMA failed\n");
request->result = EIO;
return ATA_OP_FINISHED;
}
@@ -613,7 +613,7 @@
static int
ata_siiprb_end_transaction(struct ata_request *request)
{
- struct ata_pci_controller *ctlr=device_get_softc(GRANDPARENT(request->dev));
+ struct ata_pci_controller *ctlr=device_get_softc(device_get_parent(request->parent));
struct ata_channel *ch = device_get_softc(request->parent);
struct ata_siiprb_command *prb;
int offset = ch->unit * 0x2000;
@@ -659,12 +659,10 @@
/* on control commands read back registers to the request struct */
if (request->flags & ATA_R_CONTROL) {
- struct ata_device *atadev = device_get_softc(request->dev);
-
request->u.ata.count = prb->fis[12] | ((u_int16_t)prb->fis[13] << 8);
request->u.ata.lba = prb->fis[4] | ((u_int64_t)prb->fis[5] << 8) |
((u_int64_t)prb->fis[6] << 16);
- if (atadev->flags & ATA_D_48BIT_ACTIVE)
+ if (request->flags & ATA_R_48BIT)
request->u.ata.lba |= ((u_int64_t)prb->fis[8] << 24) |
((u_int64_t)prb->fis[9] << 32) |
((u_int64_t)prb->fis[10] << 40);
More information about the p4-projects
mailing list