summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-lowlevel.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2005-04-29 11:30:03 +0000
committersos <sos@FreeBSD.org>2005-04-29 11:30:03 +0000
commit44e51c4adc8a1316838a9c81e1cd004d4153f2df (patch)
tree34e4ea41ed82100a76d3d7871c6eaf678311334c /sys/dev/ata/ata-lowlevel.c
parentcc6dd6e0642fedbd23cee68f6ad2dab807e4f717 (diff)
downloadFreeBSD-src-44e51c4adc8a1316838a9c81e1cd004d4153f2df.zip
FreeBSD-src-44e51c4adc8a1316838a9c81e1cd004d4153f2df.tar.gz
Now that probing is working in the new fashion, we need to go back to
having ata_getparm issue an ata_request and not fool around with the HW on its own. Needed for new HW support.
Diffstat (limited to 'sys/dev/ata/ata-lowlevel.c')
-rw-r--r--sys/dev/ata/ata-lowlevel.c138
1 files changed, 0 insertions, 138 deletions
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index a723fa9..7974e38 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -54,100 +54,6 @@ static int ata_end_transaction(struct ata_request *);
static int ata_wait(struct ata_channel *ch, struct ata_device *, u_int8_t);
static void ata_pio_read(struct ata_request *, int);
static void ata_pio_write(struct ata_request *, int);
-static void bswap(int8_t *, int);
-static void btrim(int8_t *, int);
-static void bpack(int8_t *, int8_t *, int);
-
-/* get device parameter page from device */
-int
-ata_getparam(device_t parent, struct ata_device *atadev, u_int8_t command)
-{
- struct ata_channel *ch = device_get_softc(parent);
- int error = 0, retry = 0;
-
- do {
- if (retry++ > 4) {
- if (bootverbose)
- printf("ata%d-%s: %s-identify retries exceeded\n", ch->unit,
- atadev->unit == ATA_MASTER ? "master" : "slave",
- command == ATA_ATAPI_IDENTIFY ? "ATAPI" : "ATA");
- error = ENXIO;
- break;
- }
-
- /* select device */
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | atadev->unit);
-
- /* wait a bit to let slow devices settle */
- DELAY(100);
-
- /* disable interrupt */
- ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_4BIT | ATA_A_IDS);
-
- /* ready to issue command ? */
- if ((error = ata_wait(ch, atadev, 0)) < 0) {
- printf("ata%d-%s: timeout sending %s-identify error=%d\n",
- device_get_unit(parent),
- atadev->unit == ATA_MASTER ? "master" : "slave",
- command == ATA_ATAPI_IDENTIFY ? "ATAPI" : "ATA", error);
- error = ENXIO;
- break;
- }
-
- /* select device */
- ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | atadev->unit);
-
- /* issue command */
- ATA_IDX_OUTB(ch, ATA_COMMAND, command);
-
- } while (ata_wait(ch, atadev, ATA_S_DRQ));
-
- if (!error) {
- ATA_IDX_INSW_STRM(ch, ATA_DATA, (void *)&atadev->param,
- sizeof(struct ata_params)/sizeof(int16_t));
- ATA_IDX_INB(ch, ATA_STATUS);
- }
-
- if (!error && (isprint(atadev->param.model[0]) ||
- isprint(atadev->param.model[1]))) {
- struct ata_params *atacap = &atadev->param;
-#if BYTE_ORDER == BIG_ENDIAN
- int16_t *ptr;
-
- for (ptr = (int16_t *)atacap;
- ptr < (int16_t *)atacap + sizeof(struct ata_params)/2; ptr++) {
- *ptr = bswap16(*ptr);
- }
-#endif
- if (!(!strncmp(atacap->model, "FX", 2) ||
- !strncmp(atacap->model, "NEC", 3) ||
- !strncmp(atacap->model, "Pioneer", 7) ||
- !strncmp(atacap->model, "SHARP", 5))) {
- bswap(atacap->model, sizeof(atacap->model));
- bswap(atacap->revision, sizeof(atacap->revision));
- bswap(atacap->serial, sizeof(atacap->serial));
- }
- btrim(atacap->model, sizeof(atacap->model));
- bpack(atacap->model, atacap->model, sizeof(atacap->model));
- btrim(atacap->revision, sizeof(atacap->revision));
- bpack(atacap->revision, atacap->revision, sizeof(atacap->revision));
- btrim(atacap->serial, sizeof(atacap->serial));
- bpack(atacap->serial, atacap->serial, sizeof(atacap->serial));
- if (bootverbose)
- printf("ata%d-%s: pio=%s wdma=%s udma=%s cable=%s wire\n",
- ch->unit, atadev->unit == ATA_MASTER ? "master":"slave",
- ata_mode2str(ata_pmode(atacap)),
- ata_mode2str(ata_wmode(atacap)),
- ata_mode2str(ata_umode(atacap)),
- (atacap->hwres & ATA_CABLE_ID) ? "80":"40");
- }
- else {
- if (!error)
- error = ENXIO;
- }
-
- return error;
-}
/*
* low level ATA functions
@@ -948,47 +854,3 @@ ata_pio_write(struct ata_request *request, int length)
ATA_IDX_OUTW(ch, ATA_DATA, 0);
}
}
-
-static void
-bswap(int8_t *buf, int len)
-{
- u_int16_t *ptr = (u_int16_t*)(buf + len);
-
- while (--ptr >= (u_int16_t*)buf)
- *ptr = ntohs(*ptr);
-}
-
-static void
-btrim(int8_t *buf, int len)
-{
- int8_t *ptr;
-
- for (ptr = buf; ptr < buf+len; ++ptr)
- if (!*ptr || *ptr == '_')
- *ptr = ' ';
- for (ptr = buf + len - 1; ptr >= buf && *ptr == ' '; --ptr)
- *ptr = 0;
-}
-
-static void
-bpack(int8_t *src, int8_t *dst, int len)
-{
- int i, j, blank;
-
- for (i = j = blank = 0 ; i < len; i++) {
- if (blank && src[i] == ' ') continue;
- if (blank && src[i] != ' ') {
- dst[j++] = src[i];
- blank = 0;
- continue;
- }
- if (src[i] == ' ') {
- blank = 1;
- if (i == 0)
- continue;
- }
- dst[j++] = src[i];
- }
- if (j < len)
- dst[j] = 0x00;
-}
OpenPOWER on IntegriCloud