lkml.org 
[lkml]   [2010]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 53/68] it8213: convert to ide2libata
    From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Subject: [PATCH] it8213: convert to ide2libata

    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    ---
    drivers/ata/pata_it8213.h | 11 +++
    drivers/ide/it8213.c | 138 +---------------------------------------------
    2 files changed, 13 insertions(+), 136 deletions(-)

    Index: b/drivers/ata/pata_it8213.h
    ===================================================================
    --- a/drivers/ata/pata_it8213.h
    +++ b/drivers/ata/pata_it8213.h
    @@ -141,9 +141,16 @@ static void it8213_set_dmamode(struct at
    ideconf |= u_clock << devid;
    pci_write_config_word(dev, 0x54, ideconf);
    } else {
    - /* MWDMA is driven by the PIO timings. */
    + /* Normal DMA is driven by the PIO timings. */
    +#ifdef __IDE2LIBATA
    + if (speed >= XFER_MW_DMA_0)
    + adev->pio_mode = ata_mwdma_to_pio(speed) + XFER_PIO_0;
    + else
    + adev->pio_mode = XFER_PIO_2; /* for SWDMA2 */
    + it8213_set_timings(ap, adev, adev->pio_mode - XFER_PIO_0, 1);
    +#else
    it8213_set_timings(ap, adev, ata_mwdma_to_pio(speed), 1);
    -
    +#endif
    udma_enable &= ~(1 << devid);
    }
    pci_write_config_byte(dev, 0x48, udma_enable);
    Index: b/drivers/ide/it8213.c
    ===================================================================
    --- a/drivers/ide/it8213.c
    +++ b/drivers/ide/it8213.c
    @@ -15,142 +15,12 @@

    #define DRV_NAME "it8213"

    -/**
    - * it8213_set_pio_mode - set host controller for PIO mode
    - * @hwif: port
    - * @drive: drive
    - *
    - * Set the interface PIO mode.
    - */
    -
    -static void it8213_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
    -{
    - struct pci_dev *dev = to_pci_dev(hwif->dev);
    - int is_slave = drive->dn & 1;
    - int master_port = 0x40;
    - int slave_port = 0x44;
    - unsigned long flags;
    - u16 master_data;
    - u8 slave_data;
    - static DEFINE_SPINLOCK(tune_lock);
    - int control = 0;
    - const u8 pio = drive->pio_mode - XFER_PIO_0;
    -
    - static const u8 timings[][2] = {
    - { 0, 0 },
    - { 0, 0 },
    - { 1, 0 },
    - { 2, 1 },
    - { 2, 3 }, };
    -
    - spin_lock_irqsave(&tune_lock, flags);
    - pci_read_config_word(dev, master_port, &master_data);
    -
    - if (pio > 1)
    - control |= 1; /* Programmable timing on */
    - if (drive->media != ide_disk)
    - control |= 4; /* ATAPI */
    - if (ide_pio_need_iordy(drive, pio))
    - control |= 2; /* IORDY */
    - if (is_slave) {
    - master_data |= 0x4000;
    - master_data &= ~0x0070;
    - master_data = master_data | (control << 4);
    - pci_read_config_byte(dev, slave_port, &slave_data);
    - slave_data = slave_data & 0xf0;
    - slave_data = slave_data | (timings[pio][0] << 2) | timings[pio][1];
    - } else {
    - master_data &= ~0x3307;
    - master_data = master_data | control;
    - master_data = master_data | (timings[pio][0] << 12) | (timings[pio][1] << 8);
    - }
    - pci_write_config_word(dev, master_port, master_data);
    - if (is_slave)
    - pci_write_config_byte(dev, slave_port, slave_data);
    - spin_unlock_irqrestore(&tune_lock, flags);
    -}
    -
    -/**
    - * it8213_set_dma_mode - set host controller for DMA mode
    - * @hwif: port
    - * @drive: drive
    - *
    - * Tune the ITE chipset for the DMA mode.
    - */
    -
    -static void it8213_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive)
    -{
    - struct pci_dev *dev = to_pci_dev(hwif->dev);
    - u8 maslave = 0x40;
    - int a_speed = 3 << (drive->dn * 4);
    - int u_flag = 1 << drive->dn;
    - int v_flag = 0x01 << drive->dn;
    - int w_flag = 0x10 << drive->dn;
    - int u_speed = 0;
    - u16 reg4042, reg4a;
    - u8 reg48, reg54, reg55;
    - const u8 speed = drive->dma_mode;
    -
    - pci_read_config_word(dev, maslave, &reg4042);
    - pci_read_config_byte(dev, 0x48, &reg48);
    - pci_read_config_word(dev, 0x4a, &reg4a);
    - pci_read_config_byte(dev, 0x54, &reg54);
    - pci_read_config_byte(dev, 0x55, &reg55);
    -
    - if (speed >= XFER_UDMA_0) {
    - u8 udma = speed - XFER_UDMA_0;
    -
    - u_speed = min_t(u8, 2 - (udma & 1), udma) << (drive->dn * 4);
    -
    - if (!(reg48 & u_flag))
    - pci_write_config_byte(dev, 0x48, reg48 | u_flag);
    - if (speed >= XFER_UDMA_5)
    - pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
    - else
    - pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
    -
    - if ((reg4a & a_speed) != u_speed)
    - pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
    - if (speed > XFER_UDMA_2) {
    - if (!(reg54 & v_flag))
    - pci_write_config_byte(dev, 0x54, reg54 | v_flag);
    - } else
    - pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
    - } else {
    - const u8 mwdma_to_pio[] = { 0, 3, 4 };
    -
    - if (reg48 & u_flag)
    - pci_write_config_byte(dev, 0x48, reg48 & ~u_flag);
    - if (reg4a & a_speed)
    - pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
    - if (reg54 & v_flag)
    - pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
    - if (reg55 & w_flag)
    - pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
    -
    - if (speed >= XFER_MW_DMA_0)
    - drive->pio_mode =
    - mwdma_to_pio[speed - XFER_MW_DMA_0] + XFER_PIO_0;
    - else
    - drive->pio_mode = XFER_PIO_2; /* for SWDMA2 */
    -
    - it8213_set_pio_mode(hwif, drive);
    - }
    -}
    -
    -static int it8213_cable_detect(ide_hwif_t *hwif)
    -{
    - struct pci_dev *dev = to_pci_dev(hwif->dev);
    - u8 reg42h = 0;
    -
    - pci_read_config_byte(dev, 0x42, &reg42h);
    -
    - return (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
    -}
    +#include <linux/ide2libata.h>
    +#include "../ata/pata_it8213.h"

    static const struct ide_port_ops it8213_port_ops = {
    - .set_pio_mode = it8213_set_pio_mode,
    - .set_dma_mode = it8213_set_dma_mode,
    + .set_pio_mode = it8213_set_piomode,
    + .set_dma_mode = it8213_set_dmamode,
    .cable_detect = it8213_cable_detect,
    };


    \
     
     \ /
      Last update: 2010-01-29 17:29    [W:0.033 / U:58.020 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site