1. 25 3月, 2008 1 次提交
    • T
      libata: assume no device is attached if both IDENTIFYs are aborted · 1ffc151f
      Tejun Heo 提交于
      This is to fix bugzilla #10254.  QSI cdrom attached to pata_sis as
      secondary master appears as phantom device for the slave.
      Interestingly, instead of not setting DRQ after IDENTIFY which
      triggers NODEV_HINT, it aborts both IDENTIFY and IDENTIFY PACKET which
      makes EH retry.
      
      Modify EH such that it assumes no device is attached if both flavors
      of IDENTIFY are aborted by the device.  There really isn't much point
      in retrying when the device actively aborts the commands.
      
      While at it, convert NODEV detection message to ata_dev_printk() to
      help debugging obscure detection problems.
      
      This problem was reported by Jan Bücken.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Jan Bücken <jb.faq@gmx.de>
      Acked-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      1ffc151f
  2. 11 3月, 2008 2 次提交
  3. 26 2月, 2008 2 次提交
  4. 24 2月, 2008 4 次提交
  5. 21 2月, 2008 1 次提交
    • T
      libata: implement libata.force module parameter · 33267325
      Tejun Heo 提交于
      This patch implements libata.force module parameter which can
      selectively override ATA port, link and device configurations
      including cable type, SATA PHY SPD limit, transfer mode and NCQ.
      
      For example, you can say "use 1.5Gbps for all fan-out ports attached
      to the second port but allow 3.0Gbps for the PMP device itself, oh,
      the device attached to the third fan-out port chokes on NCQ and
      shouldn't go over UDMA4" by the following.
      
       libata.force=2:1.5g,2.15:3.0g,2.03:noncq,udma4
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      33267325
  6. 19 2月, 2008 4 次提交
    • J
      libata: implement drain buffers · fa2fc7f4
      James Bottomley 提交于
      This just updates the libata slave configure routine to take advantage
      of the block layer drain buffers.  It also adjusts the size lengths in
      the atapi code to add the drain buffer to the DMA length so the driver
      knows it can rely on it.
      
      I suspect I should also be checking for AHCI as well as ATA_DEV_ATAPI,
      but I couldn't see how to do that easily.
      
      tj: * atapi_drain_needed() added such that draining is applied to only
            misc ATAPI commands.
          * q->bounce_gfp used when allocating drain buffer.
          * Now duplicate ATAPI PIO drain logic dropped.
          * ata_dev_printk() used instead of sdev_printk().
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      fa2fc7f4
    • J
      libata: eliminate the home grown dma padding in favour of · dde20207
      James Bottomley 提交于
      that provided by the block layer
      
      ATA requires that all DMA transfers begin and end on word boundaries.
      Because of this, a large amount of machinery grew up in ide to adjust
      scatterlists on this basis.  However, as of 2.5, the block layer has a
      dma_alignment variable which ensures both the beginning and length of a
      DMA transfer are aligned on the dma_alignment boundary.  Although the
      block layer does adjust the beginning of the transfer to ensure this
      happens, it doesn't actually adjust the length, it merely makes sure
      that space is allocated for transfers beyond the declared length.  The
      upshot of this is that scatterlists may be padded to any size between
      the actual length and the length adjusted to the dma_alignment safely
      knowing that memory is allocated in this region.
      
      Right at the moment, SCSI takes the default dma_aligment which is on a
      512 byte boundary.  Note that this aligment only applies to transfers
      coming in from user space.  However, since all kernel allocations are
      automatically aligned on a minimum of 32 byte boundaries, it is safe to
      adjust them in this manner as well.
      
      tj: * Adjusting sg after padding is done in block layer.  Make libata
            set queue alignment correctly for ATAPI devices and drop broken
            sg mangling from ata_sg_setup().
          * Use request->raw_data_len for ATAPI transfer chunk size.
          * Killed qc->raw_nbytes.
          * Separated out killing qc->n_iter.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      dde20207
    • T
      libata: update ATAPI overflow draining · 56c819df
      Tejun Heo 提交于
      For misc ATAPI commands which transfer variable length data to the
      host, overflow can occur due to application or hardware bug.  Such
      overflows can be ignored safely as long as overflow data is properly
      drained.  libata HSM implementation has this implemented in
      __atapi_pio_bytes() and recently updated for 2.6.24-rc but it requires
      further improvements.  Improve drain logic such that...
      
      * Report overflow errors using ehi desc mechanism instead of printing
        directly.
      
      * Properly calculate the number of bytes to be drained considering
        actual number of consumed bytes for partial draining.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Acked-by: NAlbert Lee <albertcc@tw.ibm.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      56c819df
    • M
      ide/libata: ST310211A has buggy HPA too · b152fcd3
      Mikko Rapeli 提交于
      Signed-off-by: NMikko Rapeli <mikko.rapeli@teleca.com>
      Tested-by: NBart Champagne <bart@as35701.net>
      Cc: Jeff Garzik <jgarzik@pobox.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      b152fcd3
  7. 16 2月, 2008 1 次提交
  8. 12 2月, 2008 1 次提交
  9. 06 2月, 2008 1 次提交
  10. 03 2月, 2008 1 次提交
  11. 29 1月, 2008 1 次提交
  12. 23 1月, 2008 21 次提交
    • T
      libata: factor out ata_pci_activate_sff_host() from ata_pci_one() · 4e6b79fa
      Tejun Heo 提交于
      Factor out ata_pci_activate_sff_host() from ata_pci_one().  This does
      about the same thing as ata_host_activate() but needs to be separate
      because SFF controllers use different and multiple IRQs in legacy
      mode.
      
      This will be used to make SFF LLD initialization more flexible.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      4e6b79fa
    • A
      libata annotations and fixes · 4ca4e439
      Al Viro 提交于
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      4ca4e439
    • J
      libata: make ata_port_queue_task() an internal function · 442eacc3
      Jeff Garzik 提交于
      ata_port_queue_task() served a single user:  ata_pio_task()
      
      Rename to ata_pio_queue_task() and un-export it, as nobody outside of
      libata-core.c uses it.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      442eacc3
    • A
      libata/pata_it821x: Improve handling of poorly compatible emulations · c5038fc0
      Alan Cox 提交于
      Some it821x RAID firmwares return 0 for the err return off both devices.
      A similar issue occurs with the slave returning 0 not 1 if you plug a
      gigabyte sata ramdisk into a controller that fakes two SATA ports as
      master/slave on an SFF channel.
      
      The patch does the following
      
      - Allow the 'failed diagnostics' case on both master and slave
      - Move the HORKAGE_DIAGNOSTIC check after ->dev_config
      
      This second change also allows IT821x to fix up a problem where we report
      drive diagnostic failures when in fact the drive is fine but the
      microcontroller firmware doesn't appear to get it right. IT821x clears
      the flag again to avoid giving the user bogus warnings about their disk.
      
      The other IT821x change is a bit ugly, we slightly abuse the cable type
      hook to fiddle with the identify data for the devices. We could add a new
      hook for this but as we have only one offender and no more seeming likely
      it seems better to keep libata-core clean.
      
      Please let this sit in -mm briefly, just in case the relaxed checking
      breaks some other emulated interface.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c5038fc0
    • T
      libata: make qc->nbytes include extra buffers · 0bcc65ad
      Tejun Heo 提交于
      qc->nbytes didn't use to include extra buffers setup by libata core
      layer and my be odd.  This patch makes qc->nbytes include any extra
      buffers setup by libata core layer and guaranteed to be aligned on 4
      byte boundary.
      
      This value is to be used to program the host controller.  As this
      represents the actual length of buffer available to the controller and
      the controller must be able to deal with short transfers for ATAPI
      commands which can transfer variable length, this shouldn't break any
      controllers while making problems like rounding-down and controllers
      choking up on odd transfer bytes much less likely.
      
      The unmodified value is stored in new field qc->raw_nbytes.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      0bcc65ad
    • T
      libata: convert to chained sg · ff2aeb1e
      Tejun Heo 提交于
      libata used private sg iterator to handle padding sg.  Now that sg can
      be chained, padding can be handled using standard sg ops.  Convert to
      chained sg.
      
      * s/qc->__sg/qc->sg/
      
      * s/qc->pad_sgent/qc->extra_sg[]/.  Because chaining consumes one sg
        entry.  There need to be two extra sg entries.  The renaming is also
        for future addition of other extra sg entries.
      
      * Padding setup is moved into ata_sg_setup_extra() which is organized
        in a way that future addition of other extra sg entries is easy.
      
      * qc->orig_n_elem is unused and removed.
      
      * qc->n_elem now contains the number of sg entries that LLDs should
        map.  qc->mapped_n_elem is added to carry the original number of
        mapped sgs for unmapping.
      
      * The last sg of the original sg list is used to chain to extra sg
        list.  The original last sg is pointed to by qc->last_sg and the
        content is stored in qc->saved_last_sg.  It's restored during
        ata_sg_clean().
      
      * All sg walking code has been updated.  Unnecessary assertions and
        checks for conditions the core layer already guarantees are removed.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      ff2aeb1e
    • T
      libata: change ATA_QCFLAG_DMAMAP semantics · f92a2636
      Tejun Heo 提交于
      ATA_QCFLAG_DMAMAP was a bit peculiar in that it got set during qc
      initialization and cleared if DMA mapping wasn't necessary.  Make it
      more straight forward by making the following changes.
      
      * Don't set it during initialization.  Set it after DMA is actually
        mapped.
      
      * Add BUG_ON() to guarantee that there is data to transfer if DMAMAP
        is set.  This always holds for the current code.  The BUG_ON() is
        for docummentation and sanity check.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      f92a2636
    • T
      libata: kill non-sg DMA interface · 001102d7
      Tejun Heo 提交于
      With atapi_request_sense() converted to use sg, there's no user of
      non-sg interface.  Kill non-sg interface.
      
      * ATA_QCFLAG_SINGLE and ATA_QCFLAG_SG are removed.  ATA_QCFLAG_DMAMAP
        is used instead.  (this way no LLD change is necessary)
      
      * qc->buf_virt is removed.
      
      * ata_sg_init_one() and ata_sg_setup_one() are removed.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Rusty Russel <rusty@rustcorp.com.au>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      001102d7
    • T
      libata: update ->data_xfer hook for ATAPI · 55dba312
      Tejun Heo 提交于
      Depending on how many bytes are transferred as a unit, PIO data
      transfer may consume more bytes than requested.  Knowing how much
      data is consumed is necessary to determine how much is left for
      draining.  This patch update ->data_xfer such that it returns the
      number of consumed bytes.
      
      While at it, it also makes the following changes.
      
      * s/adev/dev/
      * use READ/WRITE constants for rw indication
      * misc clean ups
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      55dba312
    • T
      libata: rename ATA_PROT_ATAPI_* to ATAPI_PROT_* · 0dc36888
      Tejun Heo 提交于
      ATA_PROT_ATAPI_* are ugly and naming schemes between ATA_PROT_* and
      ATA_PROT_ATAPI_* are inconsistent causing confusion.  Rename them to
      ATAPI_PROT_* and make them consistent with ATA counterpart.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      0dc36888
    • A
      libata: zero xfer length on ATAPI data xfer IRQ is HSM violation · 0106372d
      Albert Lee 提交于
      Treat zero xfer length as HSM violation.  While at it, add
      unlikely()'s to ATAPI ireason and transfer length checks.
      
      tj: Formatted patch and added unlikely()'s.
      Signed-off-by: NAlbert Lee <albertcc@tw.ibm.com>
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      0106372d
    • T
      libata: convert NCQ test in ata_qc_issue() to ata_is_ncq() · 1973a023
      Tejun Heo 提交于
      I missed one while converting to ata_is_*() protocol test helpers.
      Convert it.  Pointed out by Jeff Garzik.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      1973a023
    • T
      libata: implement ata_timing_cycle2mode() and use it in libata-acpi and pata_acpi · a0f79b92
      Tejun Heo 提交于
      libata-acpi is using separate timing tables for transfer modes
      although libata-core has the complete ata_timing table.  Implement
      ata_timing_cycle2mode() to look for matching mode given transfer type
      and cycle duration and use it in libata-acpi and pata_acpi to replace
      private timing tables.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      a0f79b92
    • T
      libata: add ATA_CBL_PATA_IGN · c88f90c3
      Tejun Heo 提交于
      ATA_CBL_PATA_UNK indicates that the cable type can't be determined
      from the host side and might be either 80c or 40c.  libata applies
      drive or other generic limit in this case.  However, there are
      controllers where both host and drive side detections are
      misimplemented and the driver has to rely solely on private method -
      peeking BIOS or ACPI configuration or using some other private
      mechanism.
      
      This patch adds ATA_CBL_PATA_IGN which tells libata to ignore the
      cable type completely and just let the LLD determine the transfer mode
      via host transfer mode masks and ->mode_filter().
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      c88f90c3
    • T
      libata: xfer_mask is unsigned long not unsigned int · 7dc951ae
      Tejun Heo 提交于
      Jeff says xfer_mask is unsigned long not unsigned int.  Convert all
      xfermask fields and handling functions to deal with unsigned longs.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      7dc951ae
    • T
      libata: kill ata_id_to_dma_mode() · 9d3501ab
      Tejun Heo 提交于
      ata_id_to_dma_mode() isn't quite generic.  The function is basically
      privately implemented ata_id_xfermask() combined with hardcoded mode
      printing and configuration which are specific to ata_generic.
      
      Kill the function and open code it in generic_set_mode() using generic
      xfermode handling functions.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      9d3501ab
    • T
      libata: clean up xfermode / PATA timing related stuff · 70cd071e
      Tejun Heo 提交于
      * s/ATA_BITS_(PIO|MWDMA|UDMA)/ATA_NR_\1_MODES/g
      
      * Consistently use 0xff to indicate invalid transfer mode (0x00 is
        valid for PIO_SLOW).
      
      * Make ata_xfer_mode2mask() return proper mode mask instead of just
        the highest bit.
      
      * Sort ata_timing table in increasing xfermode order and update
        ata_timing_find_mode() accordingly.
      
      This patch doesn't introduce any behavior change.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      70cd071e
    • T
      libata: export xfermode / PATA timing related functions · 6357357c
      Tejun Heo 提交于
      Export the following xfermode related functions.
      
      * ata_pack_xfermask()
      * ata_unpack_xfermask()
      * ata_xfer_mask2mode()
      * ata_xfer_mode2mask()
      * ata_xfer_mode2shift()
      * ata_mode_string()
      * ata_id_xfermask()
      * ata_timing_find_mode()
      
      These functions will be used later by LLD updates.  While at it,
      change unsigned short @speed to u8 @xfer_mode in
      ata_timing_find_mode() for consistency.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      6357357c
    • T
      libata: implement ATA_DFLAG_DUBIOUS_XFER · 00115e0f
      Tejun Heo 提交于
      ATA_DFLAG_DUBIOUS_XFER is set whenever data transfer speed or method
      changes and gets cleared when data transfer command succeeds in the
      newly configured transfer mode.
      
      This will be used to improve speed down logic.
      
      Signed-off-by: Tejun Heo <htejun@gmail.com<
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      00115e0f
    • T
      libata: move ata_set_mode() to libata-eh.c · 6f1d1e3a
      Tejun Heo 提交于
      Move ata_set_mode() to libata-eh.c.  ata_set_mode() is surely an EH
      action and will be more tightly coupled with the rest of error
      handling.  Move it to libata-eh.c.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      6f1d1e3a
    • T
      libata: implement protocol tests · 405e66b3
      Tejun Heo 提交于
      Implement protocol tests - ata_is_atapi(), ata_is_nodata(),
      ata_is_pio(), ata_is_dma(), ata_is_ncq() and ata_is_data() and use
      them to replace is_atapi_taskfile() and hard coded protocol tests.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      405e66b3