PERFORCE change 171334 for review
Alexander Motin
mav at FreeBSD.org
Thu Dec 3 15:46:55 UTC 2009
http://p4web.freebsd.org/chv.cgi?CH=171334
Change 171334 by mav at mav_mavbook on 2009/12/03 15:46:47
Migrate powerpc ATA controllers to the new world order.
Submitted by: nwitehorn@
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_dbdma.c#2 edit
.. //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_kauai.c#7 edit
.. //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_macio.c#6 edit
.. //depot/projects/scottl-camlock/src/sys/powerpc/psim/ata_iobus.c#6 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_dbdma.c#2 (text+ko) ====
@@ -204,7 +204,6 @@
ata_dbdma_load(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_dbdma_dmaload_args args;
int error;
@@ -230,7 +229,7 @@
return EIO;
}
- request->dma = &ch->dma.slot[atadev->unit];
+ request->dma = &ch->dma.slot[0];
if ((error = bus_dmamap_load(request->dma->data_tag,
request->dma->data_map, request->data, request->bytecount,
==== //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_kauai.c#7 (text+ko) ====
@@ -85,7 +85,7 @@
*/
static int ata_kauai_probe(device_t dev);
static int ata_kauai_attach(device_t dev);
-static void ata_kauai_setmode(device_t parent, device_t dev);
+static int ata_kauai_setmode(device_t dev, int target, int mode);
static int ata_kauai_begin_transaction(struct ata_request *request);
static device_method_t ata_kauai_methods[] = {
@@ -307,34 +307,26 @@
return ata_attach(dev);
}
-static void
-ata_kauai_setmode(device_t parent, device_t dev)
+static int
+ata_kauai_setmode(device_t dev, int target, int mode)
{
- struct ata_device *atadev = device_get_softc(dev);
- struct ata_kauai_softc *sc = device_get_softc(parent);
- uint32_t mode;
+ struct ata_kauai_softc *sc = device_get_softc(dev);
- mode = ata_limit_mode(dev,atadev->mode,
- (sc->shasta) ? ATA_UDMA6 : ATA_UDMA5);
-
- if (ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
- return;
+ mode = min(mode,sc->shasta ? ATA_UDMA6 : ATA_UDMA5);
- atadev->mode = mode;
-
if (sc->shasta) {
switch (mode & ATA_DMA_MASK) {
case ATA_UDMA0:
- sc->udmaconf[atadev->unit]
+ sc->udmaconf[target]
= udma_timing_shasta[mode & ATA_MODE_MASK];
break;
case ATA_WDMA0:
- sc->udmaconf[atadev->unit] = 0;
- sc->wdmaconf[atadev->unit]
+ sc->udmaconf[target] = 0;
+ sc->wdmaconf[target]
= dma_timing_shasta[mode & ATA_MODE_MASK];
break;
default:
- sc->pioconf[atadev->unit]
+ sc->pioconf[target]
= pio_timing_shasta[(mode & ATA_MODE_MASK) -
ATA_PIO0];
break;
@@ -342,32 +334,33 @@
} else {
switch (mode & ATA_DMA_MASK) {
case ATA_UDMA0:
- sc->udmaconf[atadev->unit]
+ sc->udmaconf[target]
= udma_timing_kauai[mode & ATA_MODE_MASK];
break;
case ATA_WDMA0:
- sc->udmaconf[atadev->unit] = 0;
- sc->wdmaconf[atadev->unit]
+ sc->udmaconf[target] = 0;
+ sc->wdmaconf[target]
= dma_timing_kauai[mode & ATA_MODE_MASK];
break;
default:
- sc->pioconf[atadev->unit]
+ sc->pioconf[target]
= pio_timing_kauai[(mode & ATA_MODE_MASK)
- ATA_PIO0];
break;
}
}
+
+ return (mode);
}
static int
ata_kauai_begin_transaction(struct ata_request *request)
{
- struct ata_device *atadev = device_get_softc(request->dev);
struct ata_kauai_softc *sc = device_get_softc(request->parent);
- bus_write_4(sc->sc_memr, UDMA_CONFIG_REG, sc->udmaconf[atadev->unit]);
+ bus_write_4(sc->sc_memr, UDMA_CONFIG_REG, sc->udmaconf[request->unit]);
bus_write_4(sc->sc_memr, PIO_CONFIG_REG,
- sc->wdmaconf[atadev->unit] | sc->pioconf[atadev->unit]);
+ sc->wdmaconf[request->unit] | sc->pioconf[request->unit]);
return ata_begin_transaction(request);
}
==== //depot/projects/scottl-camlock/src/sys/powerpc/powermac/ata_macio.c#6 (text+ko) ====
@@ -111,7 +111,7 @@
* Define the macio ata bus attachment.
*/
static int ata_macio_probe(device_t dev);
-static void ata_macio_setmode(device_t parent, device_t dev);
+static int ata_macio_setmode(device_t dev, int target, int mode);
static int ata_macio_attach(device_t dev);
static int ata_macio_begin_transaction(struct ata_request *request);
@@ -193,7 +193,7 @@
ata_default_registers(dev);
ch->unit = 0;
- ch->flags |= ATA_USE_16BIT;
+ ch->flags |= ATA_USE_16BIT | ATA_NO_ATAPI_DMA;
ata_generic_hw(dev);
return (ata_probe(dev));
@@ -247,26 +247,15 @@
return ata_attach(dev);
}
-static void
-ata_macio_setmode(device_t parent, device_t dev)
+static int
+ata_macio_setmode(device_t dev, int target, int mode)
{
- struct ata_device *atadev = device_get_softc(dev);
- struct ata_macio_softc *sc = device_get_softc(parent);
- int mode = atadev->mode;
+ struct ata_macio_softc *sc = device_get_softc(dev);
int min_cycle = 0, min_active = 0;
int cycle_tick = 0, act_tick = 0, inact_tick = 0, half_tick;
- mode = ata_limit_mode(dev, mode, sc->max_mode);
-
- /* XXX Some controllers don't work correctly with ATAPI DMA */
- if (atadev->param.config & ATA_PROTO_ATAPI)
- mode = ata_limit_mode(dev, mode, ATA_PIO_MAX);
-
- if (ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
- return;
-
- atadev->mode = mode;
+ mode = min(mode, sc->max_mode);
if ((mode & ATA_DMA_MASK) == ATA_UDMA0) {
min_cycle = udma_timings[mode & ATA_MODE_MASK].cycle;
@@ -276,7 +265,7 @@
act_tick = ATA_TIME_TO_TICK(sc->rev,min_active);
/* mask: 0x1ff00000 */
- sc->udmaconf[atadev->unit] =
+ sc->udmaconf[target] =
(cycle_tick << 21) | (act_tick << 25) | 0x100000;
} else if ((mode & ATA_DMA_MASK) == ATA_WDMA0) {
min_cycle = dma_timings[mode & ATA_MODE_MASK].cycle;
@@ -288,7 +277,7 @@
if (sc->rev == 4) {
inact_tick = cycle_tick - act_tick;
/* mask: 0x001ffc00 */
- sc->wdmaconf[atadev->unit] =
+ sc->wdmaconf[target] =
(act_tick << 10) | (inact_tick << 15);
} else {
inact_tick = cycle_tick - act_tick - DMA_REC_OFFSET;
@@ -297,7 +286,7 @@
half_tick = 0; /* XXX */
/* mask: 0xfffff800 */
- sc->wdmaconf[atadev->unit] = (half_tick << 21)
+ sc->wdmaconf[target] = (half_tick << 21)
| (inact_tick << 16) | (act_tick << 11);
}
} else {
@@ -313,7 +302,7 @@
inact_tick = cycle_tick - act_tick;
/* mask: 0x000003ff */
- sc->pioconf[atadev->unit] =
+ sc->pioconf[target] =
(inact_tick << 5) | act_tick;
} else {
if (act_tick < PIO_ACT_MIN)
@@ -324,21 +313,22 @@
inact_tick = PIO_REC_MIN;
/* mask: 0x000007ff */
- sc->pioconf[atadev->unit] =
+ sc->pioconf[target] =
(inact_tick << 5) | act_tick;
}
}
+
+ return (mode);
}
static int
ata_macio_begin_transaction(struct ata_request *request)
{
- struct ata_device *atadev = device_get_softc(request->dev);
struct ata_macio_softc *sc = device_get_softc(request->parent);
bus_write_4(sc->sc_mem, ATA_MACIO_TIMINGREG,
- sc->udmaconf[atadev->unit] | sc->wdmaconf[atadev->unit]
- | sc->pioconf[atadev->unit]);
+ sc->udmaconf[request->unit] | sc->wdmaconf[request->unit]
+ | sc->pioconf[request->unit]);
return ata_begin_transaction(request);
}
==== //depot/projects/scottl-camlock/src/sys/powerpc/psim/ata_iobus.c#6 (text+ko) ====
@@ -210,7 +210,7 @@
*/
static int ata_iobus_sub_probe(device_t dev);
-static void ata_iobus_sub_setmode(device_t parent, device_t dev);
+static int ata_iobus_sub_setmode(device_t dev, int target, int mode);
static device_method_t ata_iobus_sub_methods[] = {
/* Device interface */
@@ -245,11 +245,9 @@
return ata_probe(dev);
}
-static void
-ata_iobus_sub_setmode(device_t parent, device_t dev)
+static int
+ata_iobus_sub_setmode(device_t parent, int target, int mode);
{
- struct ata_device *atadev = device_get_softc(dev);
-
/* Only ever PIO mode here... */
- atadev->mode = ATA_PIO;
+ return (ATA_PIO);
}
More information about the p4-projects
mailing list