Lines Matching refs:ch

56 static int ata_wait(struct ata_channel *ch, int unit, u_int8_t);
68 struct ata_channel *ch = device_get_softc(dev);
70 ch->hw.begin_transaction = ata_begin_transaction;
71 ch->hw.end_transaction = ata_end_transaction;
72 ch->hw.status = ata_generic_status;
73 ch->hw.softreset = NULL;
74 ch->hw.command = ata_generic_command;
75 ch->hw.tf_read = ata_tf_read;
76 ch->hw.tf_write = ata_tf_write;
77 ch->hw.pm_read = NULL;
78 ch->hw.pm_write = NULL;
85 struct ata_channel *ch = device_get_softc(request->parent);
91 if ((ch->flags & ATA_NO_ATAPI_DMA) &&
94 if ((ch->flags & ATA_ATAPI_DMA_RO) &&
108 if (ch->hw.command(request)) {
121 request->status = ATA_IDX_INB(ch, ATA_STATUS);
124 request->error = ATA_IDX_INB(ch, ATA_ERROR);
125 ch->hw.tf_read(request);
131 if (ata_wait(ch, request->unit, (ATA_S_READY | ATA_S_DRQ)) < 0) {
145 if ((error = ch->dma.load(request, NULL, &dummy))) {
152 if ((ch->flags & ATA_DMA_BEFORE_CMD) &&
153 ch->dma.start && ch->dma.start(request)) {
160 if (ch->hw.command(request)) {
168 if (!(ch->flags & ATA_DMA_BEFORE_CMD) &&
169 ch->dma.start && ch->dma.start(request)) {
180 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit));
182 if (!(ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_DSC))
188 if (ch->hw.command(request)) {
199 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(request->unit));
201 if (!(ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_DSC))
207 if ((error = ch->dma.load(request, NULL, &dummy))) {
214 if (ch->hw.command(request)) {
221 if (ch->dma.start && ch->dma.start(request)) {
231 if (ch->dma.unload) {
232 ch->dma.unload(request);
246 struct ata_channel *ch = device_get_softc(request->parent);
252 request->status = ATA_IDX_INB(ch, ATA_STATUS);
266 ch->hw.tf_read(request);
271 request->error = ATA_IDX_INB(ch, ATA_ERROR);
284 if (ata_wait(ch, request->unit, flags) < 0) {
308 if (ata_wait(ch, request->unit, (ATA_S_READY | ATA_S_DRQ)) < 0) {
311 request->status = ATA_IDX_INB(ch, ATA_STATUS);
332 if (ch->dma.stop)
333 request->dma->status = ch->dma.stop(request);
337 request->error = ATA_IDX_INB(ch, ATA_ERROR);
346 ch->hw.tf_read(request);
350 ch->dma.unload(request);
357 length = ATA_IDX_INB(ch, ATA_CYL_LSB)|(ATA_IDX_INB(ch, ATA_CYL_MSB)<<8);
363 switch ((ATA_IDX_INB(ch, ATA_IREASON) & (ATA_I_CMD | ATA_I_IN)) |
375 ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (int16_t *)request->u.atapi.ccb,
433 request->error = ATA_IDX_INB(ch, ATA_ERROR);
448 if (ch->dma.stop)
449 request->dma->status = ch->dma.stop(request);
453 request->error = ATA_IDX_INB(ch, ATA_ERROR);
460 ch->dma.unload(request);
480 struct ata_channel *ch = device_get_softc(dev);
487 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(ATA_MASTER));
489 ostat0 = ATA_IDX_INB(ch, ATA_STATUS);
490 if (((ostat0 & 0xf8) != 0xf8 || (ch->flags & ATA_KNOWN_PRESENCE)) &&
497 if (!(ch->flags & ATA_NO_SLAVE)) {
498 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(ATA_SLAVE));
500 ostat1 = ATA_IDX_INB(ch, ATA_STATUS);
501 if (((ostat1 & 0xf8) != 0xf8 || (ch->flags & ATA_KNOWN_PRESENCE)) &&
514 ch->devices = 0;
519 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(ATA_MASTER));
521 ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_IDS | ATA_A_RESET);
523 ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_IDS);
525 ATA_IDX_INB(ch, ATA_ERROR);
530 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(ATA_MASTER));
532 if (ch->flags & ATA_STATUS_IS_LONG)
533 stat0 = ATA_IDX_INL(ch, ATA_STATUS) & 0xff;
535 stat0 = ATA_IDX_INB(ch, ATA_STATUS);
536 err = ATA_IDX_INB(ch, ATA_ERROR);
537 lsb = ATA_IDX_INB(ch, ATA_CYL_LSB);
538 msb = ATA_IDX_INB(ch, ATA_CYL_MSB);
549 ch->devices |= ATA_ATAPI_MASTER;
552 ch->devices |= ATA_ATA_MASTER;
563 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(ATA_SLAVE));
565 if (ch->flags & ATA_STATUS_IS_LONG)
566 stat1 = ATA_IDX_INL(ch, ATA_STATUS) & 0xff;
568 stat1 = ATA_IDX_INB(ch, ATA_STATUS);
569 err = ATA_IDX_INB(ch, ATA_ERROR);
570 lsb = ATA_IDX_INB(ch, ATA_CYL_LSB);
571 msb = ATA_IDX_INB(ch, ATA_CYL_MSB);
582 ch->devices |= ATA_ATAPI_SLAVE;
585 ch->devices |= ATA_ATA_SLAVE;
594 if ((ch->flags & ATA_KNOWN_PRESENCE) == 0 &&
609 stat0, stat1, ch->devices);
616 struct ata_channel *ch = device_get_softc(dev);
618 if (ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_BUSY) {
620 if (ATA_IDX_INB(ch, ATA_ALTSTAT) & ATA_S_BUSY)
627 ata_wait(struct ata_channel *ch, int unit, u_int8_t mask)
636 status = ATA_IDX_INB(ch, ATA_ALTSTAT);
640 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_DEV(unit));
669 status = ATA_IDX_INB(ch, ATA_ALTSTAT);
680 struct ata_channel *ch = device_get_softc(request->parent);
683 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit));
686 if (ata_wait(ch, request->unit, 0) < 0) {
693 ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_4BIT);
701 ATA_IDX_OUTB(ch, ATA_FEATURE, ATA_F_DMA);
702 ATA_IDX_OUTB(ch, ATA_CYL_LSB, 0);
703 ATA_IDX_OUTB(ch, ATA_CYL_MSB, 0);
706 ATA_IDX_OUTB(ch, ATA_FEATURE, 0);
707 ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->transfersize);
708 ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->transfersize >> 8);
710 ATA_IDX_OUTB(ch, ATA_COMMAND, ATA_PACKET_CMD);
717 res = ata_wait(ch, request->unit, 0);
728 int reason = ATA_IDX_INB(ch, ATA_IREASON);
729 int status = ATA_IDX_INB(ch, ATA_STATUS);
747 ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (int16_t *)request->u.atapi.ccb,
751 ch->hw.tf_write(request);
754 ATA_IDX_OUTB(ch, ATA_COMMAND, request->u.ata.command);
762 struct ata_channel *ch = device_get_softc(request->parent);
765 ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_4BIT | ATA_A_HOB);
766 request->u.ata.count = (ATA_IDX_INB(ch, ATA_COUNT) << 8);
768 ((u_int64_t)(ATA_IDX_INB(ch, ATA_SECTOR)) << 24) |
769 ((u_int64_t)(ATA_IDX_INB(ch, ATA_CYL_LSB)) << 32) |
770 ((u_int64_t)(ATA_IDX_INB(ch, ATA_CYL_MSB)) << 40);
772 ATA_IDX_OUTB(ch, ATA_CONTROL, ATA_A_4BIT);
773 request->u.ata.count |= ATA_IDX_INB(ch, ATA_COUNT);
775 (ATA_IDX_INB(ch, ATA_SECTOR) |
776 (ATA_IDX_INB(ch, ATA_CYL_LSB) << 8) |
777 (ATA_IDX_INB(ch, ATA_CYL_MSB) << 16));
780 request->u.ata.count = ATA_IDX_INB(ch, ATA_COUNT);
781 request->u.ata.lba = ATA_IDX_INB(ch, ATA_SECTOR) |
782 (ATA_IDX_INB(ch, ATA_CYL_LSB) << 8) |
783 (ATA_IDX_INB(ch, ATA_CYL_MSB) << 16) |
784 ((ATA_IDX_INB(ch, ATA_DRIVE) & 0xf) << 24);
791 struct ata_channel *ch = device_get_softc(request->parent);
794 ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature >> 8);
795 ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
796 ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count >> 8);
797 ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count);
798 ATA_IDX_OUTB(ch, ATA_SECTOR, request->u.ata.lba >> 24);
799 ATA_IDX_OUTB(ch, ATA_SECTOR, request->u.ata.lba);
800 ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 32);
801 ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
802 ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 40);
803 ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
804 ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(request->unit));
807 ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
808 ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count);
809 ATA_IDX_OUTB(ch, ATA_SECTOR, request->u.ata.lba);
810 ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
811 ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
812 ATA_IDX_OUTB(ch, ATA_DRIVE,
821 struct ata_channel *ch = device_get_softc(request->parent);
864 if (__predict_false((ch->flags & ATA_USE_16BIT) ||
870 ATA_IDX_INW_STRM(ch, ATA_DATA);
876 ATA_IDX_INSW_STRM(ch, ATA_DATA, (void*)addr,
882 ATA_IDX_INW_STRM(ch, ATA_DATA);
886 ATA_IDX_INSL_STRM(ch, ATA_DATA, (void*)addr, size / 4);
900 ATA_IDX_INW(ch, ATA_DATA);
907 struct ata_channel *ch = device_get_softc(request->parent);
943 ATA_IDX_OUTW_STRM(ch, ATA_DATA, *(uint16_t *)&buf);
951 if (__predict_false((ch->flags & ATA_USE_16BIT) ||
958 ATA_IDX_OUTW_STRM(ch, ATA_DATA,
963 ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (void*)addr,
970 ATA_IDX_OUTSL_STRM(ch, ATA_DATA,
983 ATA_IDX_OUTW_STRM(ch, ATA_DATA, *(uint16_t *)&buf);
991 ATA_IDX_OUTW(ch, ATA_DATA, 0);