diff options
author | sos <sos@FreeBSD.org> | 2005-04-29 11:30:03 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2005-04-29 11:30:03 +0000 |
commit | 44e51c4adc8a1316838a9c81e1cd004d4153f2df (patch) | |
tree | 34e4ea41ed82100a76d3d7871c6eaf678311334c /sys/dev/ata/ata-lowlevel.c | |
parent | cc6dd6e0642fedbd23cee68f6ad2dab807e4f717 (diff) | |
download | FreeBSD-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.c | 138 |
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; -} |