Commit 6dbceb8c8083634ed4f5006deac12f0a45e6a7bc

Authored by Bartlomiej Zolnierkiewicz
1 parent 94cd5b62ff

ide-cris: add ->tf_{load,read} methods

Add ->tf_{load,read} methods so cris_ide_{outb,outw,inb,inw}()
can be used directly.

There should be no functional changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

Showing 1 changed file with 87 additions and 0 deletions Side-by-side Diff

drivers/ide/cris/ide-cris.c
... ... @@ -775,6 +775,90 @@
775 775 hw->ack_intr = cris_ide_ack_intr;
776 776 }
777 777  
  778 +static void cris_tf_load(ide_drive_t *drive, ide_task_t *task)
  779 +{
  780 + struct ide_io_ports *io_ports = &drive->hwif->io_ports;
  781 + struct ide_taskfile *tf = &task->tf;
  782 + u8 HIHI = (task->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF;
  783 +
  784 + if (task->tf_flags & IDE_TFLAG_FLAGGED)
  785 + HIHI = 0xFF;
  786 +
  787 + ide_set_irq(drive, 1);
  788 +
  789 + if (task->tf_flags & IDE_TFLAG_OUT_DATA)
  790 + cris_ide_outw((tf->hob_data << 8) | tf->data,
  791 + io_ports->data_addr);
  792 +
  793 + if (task->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE)
  794 + cris_ide_outb(tf->hob_feature, io_ports->feature_addr);
  795 + if (task->tf_flags & IDE_TFLAG_OUT_HOB_NSECT)
  796 + cris_ide_outb(tf->hob_nsect, io_ports->nsect_addr);
  797 + if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAL)
  798 + cris_ide_outb(tf->hob_lbal, io_ports->lbal_addr);
  799 + if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAM)
  800 + cris_ide_outb(tf->hob_lbam, io_ports->lbam_addr);
  801 + if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAH)
  802 + cris_ide_outb(tf->hob_lbah, io_ports->lbah_addr);
  803 +
  804 + if (task->tf_flags & IDE_TFLAG_OUT_FEATURE)
  805 + cris_ide_outb(tf->feature, io_ports->feature_addr);
  806 + if (task->tf_flags & IDE_TFLAG_OUT_NSECT)
  807 + cris_ide_outb(tf->nsect, io_ports->nsect_addr);
  808 + if (task->tf_flags & IDE_TFLAG_OUT_LBAL)
  809 + cris_ide_outb(tf->lbal, io_ports->lbal_addr);
  810 + if (task->tf_flags & IDE_TFLAG_OUT_LBAM)
  811 + cris_ide_outb(tf->lbam, io_ports->lbam_addr);
  812 + if (task->tf_flags & IDE_TFLAG_OUT_LBAH)
  813 + cris_ide_outb(tf->lbah, io_ports->lbah_addr);
  814 +
  815 + if (task->tf_flags & IDE_TFLAG_OUT_DEVICE)
  816 + cris_ide_outb((tf->device & HIHI) | drive->select.all,
  817 + io_ports->device_addr);
  818 +}
  819 +
  820 +static void cris_tf_read(ide_drive_t *drive, ide_task_t *task)
  821 +{
  822 + struct ide_io_ports *io_ports = &drive->hwif->io_ports;
  823 + struct ide_taskfile *tf = &task->tf;
  824 +
  825 + if (task->tf_flags & IDE_TFLAG_IN_DATA) {
  826 + u16 data = cris_ide_inw(io_ports->data_addr);
  827 +
  828 + tf->data = data & 0xff;
  829 + tf->hob_data = (data >> 8) & 0xff;
  830 + }
  831 +
  832 + /* be sure we're looking at the low order bits */
  833 + cris_ide_outb(drive->ctl & ~0x80, io_ports->ctl_addr);
  834 +
  835 + if (task->tf_flags & IDE_TFLAG_IN_NSECT)
  836 + tf->nsect = cris_ide_inb(io_ports->nsect_addr);
  837 + if (task->tf_flags & IDE_TFLAG_IN_LBAL)
  838 + tf->lbal = cris_ide_inb(io_ports->lbal_addr);
  839 + if (task->tf_flags & IDE_TFLAG_IN_LBAM)
  840 + tf->lbam = cris_ide_inb(io_ports->lbam_addr);
  841 + if (task->tf_flags & IDE_TFLAG_IN_LBAH)
  842 + tf->lbah = cris_ide_inb(io_ports->lbah_addr);
  843 + if (task->tf_flags & IDE_TFLAG_IN_DEVICE)
  844 + tf->device = cris_ide_inb(io_ports->device_addr);
  845 +
  846 + if (task->tf_flags & IDE_TFLAG_LBA48) {
  847 + cris_ide_outb(drive->ctl | 0x80, io_ports->ctl_addr);
  848 +
  849 + if (task->tf_flags & IDE_TFLAG_IN_HOB_FEATURE)
  850 + tf->hob_feature = cris_ide_inb(io_ports->feature_addr);
  851 + if (task->tf_flags & IDE_TFLAG_IN_HOB_NSECT)
  852 + tf->hob_nsect = cris_ide_inb(io_ports->nsect_addr);
  853 + if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAL)
  854 + tf->hob_lbal = cris_ide_inb(io_ports->lbal_addr);
  855 + if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAM)
  856 + tf->hob_lbam = cris_ide_inb(io_ports->lbam_addr);
  857 + if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAH)
  858 + tf->hob_lbah = cris_ide_inb(io_ports->lbah_addr);
  859 + }
  860 +}
  861 +
778 862 static const struct ide_port_ops cris_port_ops = {
779 863 .set_pio_mode = cris_set_pio_mode,
780 864 .set_dma_mode = cris_set_dma_mode,
... ... @@ -811,6 +895,9 @@
811 895 continue;
812 896 ide_init_port_data(hwif, hwif->index);
813 897 ide_init_port_hw(hwif, &hw);
  898 +
  899 + hwif->tf_load = cris_tf_load;
  900 + hwif->tf_read = cris_tf_read;
814 901  
815 902 hwif->input_data = cris_input_data;
816 903 hwif->output_data = cris_output_data;