1. 11 7月, 2008 1 次提交
    • T
      libata-acpi: filter out DIPM enable · b344991a
      Tejun Heo 提交于
      Some BIOSen enable DIPM via _GTF which causes command timeouts under
      certain configuration.  This didn't occur on 2.6.25 because 2.6.25
      defaulted to SRST, so _GTF wasn't executed during boot probe, so ahci
      host reset disabled DIPM and as _GTF wasn't executed after SRST, DIPM
      wasn't enabled.  On 2.6.26, hardreset is used during probe and after
      probe _GTF is executed enabling DIPM and thus the failures.
      
      This patch could theoretically disable DIPM on machines which used to
      have it enabled on 2.6.25 but AFAIK ahci is currently the only driver
      which uses SATA ACPI hierarchy (_SDD) and as the host reset would have
      always disabled DIPM, this shouldn't happen.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      b344991a
  2. 04 6月, 2008 1 次提交
    • H
      [libata] ACPI: Properly handle bay devices in dock stations · 664d080c
      Holger Macht 提交于
      * Differentiate between bay devices in dock stations and others:
      
       - When an ACPI_NOTIFY_EJECT_REQUEST appears, just signal uevent to
         userspace (that is when the optional eject button on a bay device is
         pressed/pulled) giving the possibility to unmount file systems and to
         clean up. Also, only send uevent in case we get an EJECT_REQUEST
         without doing anything else. In other cases, you'll get an add/remove
         event because libata attaches/detaches the device.
      
       - In case of a dock event, which in turn signals an
         ACPI_NOTIFY_EJECT_REQUEST, immediately detach the device, because it
         may already have been gone
      
      * In case of an ACPI_NOTIFY_DEVICE/BUS_CHECK, evaluate _STA to check if
        the device has been plugged or unplugged. If plugged, hotplug it, if
        unplugged, just signal event to userspace
        (initial patch by Matthew Garrett <mjg59@srcf.ucam.org>)
      
      * Call ACPI _EJ0 for detached devices
      Signed-off-by: NHolger Macht <hmacht@suse.de>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      664d080c
  3. 20 5月, 2008 2 次提交
    • J
      drivers/ata: trim trailing whitespace · c85665ff
      Jeff Garzik 提交于
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      c85665ff
    • M
      Fixups to ATA ACPI hotplug · ae6c23c4
      Matthew Garrett 提交于
      The libata-acpi.c code currently accepts hotplug messages from both the
      port and the device. This does not match the behaviour of the bay
      driver, and may result in confusion when two hotplug requests are
      received for the same device. This patch limits the hotplug notification
      to removable ACPI devices, which in turn allows it to use the _STA
      method to determine whether the device has been removed or inserted.
      On removal, devices are marked as detached. On insertion, a hotplug scan
      is started. This should avoid lockups caused by the ata layer attempting
      to scan devices which have been removed. The uevent sending is moved
      outside the spinlock in order to avoid a warning generated by it firing
      when interrupts are disabled.
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      ae6c23c4
  4. 25 4月, 2008 1 次提交
  5. 18 4月, 2008 2 次提交
    • S
      ata-acpi: don't call _GTF for disabled drive · 48feb3c4
      Shaohua Li 提交于
      I got below log after a S3 resume in a ASUS A6VC laptop. The system has
      only one IDE drive. It appears there is no reason calling _GTF for
      disabled drive.
      
      ACPI Error (dsopcode-0483): Attempt to CreateField of length zero [20070126]
      ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.RATA] (Node df822a7c), AE_AML_OPERAND_VALUE
      ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.CHN1.DRV0._GTF] (Node df822bd0), AE_AML_OPERAND_VALUE
      ata2.00: _GTF evaluation failed (AE 0x3006)
      ACPI Error (dsopcode-0483): Attempt to CreateField of length zero [20070126]
      ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.RATA] (Node df822a7c), AE_AML_OPERAND_VALUE
      ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.IDE0.CHN1.DRV1._GTF] (Node df822b94), AE_AML_OPERAND_VALUE
      ata2.01: _GTF evaluation failed (AE 0x3006)
      Signed-off-by: NShaohua Li <shaohua.li@intel.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      48feb3c4
    • T
      libata: implement PMP helpers · 071f44b1
      Tejun Heo 提交于
      Implement helpers to test whether PMP is supported, attached and
      determine pmp number to use when issuing SRST to a link.  While at it,
      move ata_is_host_link() so that it's together with the two new PMP
      helpers.
      
      This change simplifies LLDs and helps making PMP support optional.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      071f44b1
  6. 17 3月, 2008 1 次提交
    • T
      libata-acpi: improve dock event handling · 233f1120
      Tejun Heo 提交于
      Improve ACPI hotplug handling such that dock event is handled properly.
      
      * Register handlers for dock events.
      
      * Directly detach device on EJECT_REQUEST instead of signaling hotplug
        event.  This prevents libata from accessing severed controller
        and/or device.
      
      * While at it, use named constants for ACPI events and move uevent
        signaling inside host lock.
      
      Original patch and testing by Holger Macht.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Holger Macht <hmacht@suse.de>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      233f1120
  7. 11 3月, 2008 1 次提交
  8. 23 1月, 2008 5 次提交
  9. 18 12月, 2007 7 次提交
    • T
      libata-acpi: implement _GTF command filtering · 3264a8d8
      Tejun Heo 提交于
      Implement _GTF command filtering which can be controlled by
      libata.acpi_filter kernel parameter.  Currently SETXFER and LOCK
      commands are filtered.
      
      libata configures transfer mode by itself and _GTF SETXFER commands
      can potentially disrupt device configuration.  _GTM/_STM mechanism
      can't handle hotplugging too well and when _GTF is executed,
      controller is in PIO0 rather than the mode _STM configured.
      
      Note that detecting SET MAX LOCK requires looking at the previous
      command.  This adds a bit to code complexity.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      3264a8d8
    • T
      libata-acpi: improve _GTF execution error handling and reporting · 0e8634bf
      Tejun Heo 提交于
      As _GTF commands can't transfer data, device error never signals
      transfer error.  It indicates that the device vetoed the operation, so
      it's meaningless to retry.
      
      This patch makes libata-acpi to report and continue on device errors
      when executing _GTF commands.  Also commands rejected by device don't
      contribute to the number of _GTF commands executed.
      
      While at it, update _GTF execution reporting such that all successful
      commands are logged at KERN_DEBUG and rename taskfile_load_raw() to
      ata_acpi_run_tf() for consistency.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      0e8634bf
    • T
      libata-acpi: improve ACPI disabling · 66fa7f21
      Tejun Heo 提交于
      * If _GTF evalution fails, it's pointless to retry.  If nothing else
        is wrong, just ignore the error.
      
      * After disabling ACPI, return success iff the number of executed _GTF
        command equals zero.  Otherwise, tell EH to retry.  This change
        fixes bogus 1 return bug where ata_acpi_on_devcfg() expects the
        caller to reload IDENTIFY data and continue but the caller
        interprets it as an error.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      66fa7f21
    • T
      libata-acpi: implement dev->gtf_cache and evaluate _GTF right after _STM during resume · 398e0782
      Tejun Heo 提交于
      On certain implementations, _GTF evaluation depends on preceding _STM
      and both can be pretty picky about the configuration.  Using _GTM
      result cached during controller initialization satisfies the most
      neurotic _STM implementation.  However, libata evaluates _GTF after
      reset during device configuration and the hardware state can be
      different from what _GTF expects and can cause evaluation failure.
      
      This patch adds dev->gtf_cache and updates ata_dev_get_GTF() such that
      it uses the cached value if available.  Cache is cleared with a call
      to ata_acpi_clear_gtf().
      
      Because for SATA ACPI nodes _GTF must be evaluated after _SDD which
      can't be done till IDENTIFY is complete, _GTF caching from
      ata_acpi_on_resume() is used only for IDE ACPI nodes.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      398e0782
    • T
      libata-acpi: implement and use ata_acpi_init_gtm() · c05e6ff0
      Tejun Heo 提交于
      _GTM fetches currently configured transfer mode while _STM configures
      controller according to _GTM parameter and prepares transfer mode
      configuration TFs for _GTF.  In many cases _GTM and _STM
      implementations are quite brittle and can't cope with configuration
      changed by libata.
      
      libata does not depend on ATA ACPI to configure devices.  The only
      reason libata performs _GTM and _STM are to make _GTF evaluation
      succeed and libata also doesn't care about how _GTF TFs configure
      transfer mode.  It overrides that configuration anyway, so from
      libata's POV, it doesn't matter what value is feeded to _STM as long
      as evaluation succeeds for _STM and following _GTF.
      
      This patch adds dev->__acpi_init_gtm and store initial _GTM values on
      host initialization before modified by reset and mode configuration.
      If the field is valid, ata_acpi_init_gtm() returns pointer to the
      saved _GTM structure; otherwise, NULL.
      
      This saved value is used for _STM during resume and peek at
      BIOS/firmware programmed initial timing for later use.  The accessor
      is there to make building w/o ACPI easy as dev->__acpi_init doesn't
      exist if ACPI is not enabled.
      
      On driver detach, the initial BIOS configuration is restored by
      executing _STM with the initial _GTM values such that the next driver
      can also use the initial BIOS configured values.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      c05e6ff0
    • T
      libata-acpi: add new hooks ata_acpi_dissociate() and ata_acpi_on_disable() · 562f0c2d
      Tejun Heo 提交于
      Add two hooks - ata_acpi_dissociate() which is called during driver
      detach after the whole host is shutdown and ata_acpi_on_disable()
      which is called when a device is disabled.
      Signed-off-by: NTejun heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      562f0c2d
    • T
      libata-acpi: adjust constness in ata_acpi_gtm/stm() parameters · 0d02f0b2
      Tejun Heo 提交于
      * No internal function uses const ata_port.  Drop const from @ap.
      
      * Make ata_acpi_stm() copy @stm before using it and change @stm to
        const.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      0d02f0b2
  10. 10 11月, 2007 1 次提交
  11. 24 10月, 2007 1 次提交
  12. 13 10月, 2007 7 次提交
    • T
      libata: add @timeout to ata_exec_internal[_sg]() · 2b789108
      Tejun Heo 提交于
      Add @timeout argument to ata_exec_internal[_sg]().  If 0, default
      timeout ata_probe_timeout is used.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      2b789108
    • A
      libata-core: Expose gtm methods for driver use · badff03d
      Alan Cox 提交于
      Talk to the dark side our driver has to, yes. Much misleading is the
      data. Store it in a structure we do so that it may be parsed.
      Signed-off-by: NAlan Cox <alan@redhat.com>
      --
      Whats small, old and shouts phrases out of order across mountains ?
      Yodla..
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      badff03d
    • M
      libata: Integrate ACPI-based PATA/SATA hotplug - version 5 · 237d8440
      Matthew Garrett 提交于
      Modern laptops with hotswap bays still tend to utilise a PATA interface
      on a SATA bridge, generally with the host controller in some legacy
      emulation mode rather than AHCI. This means that the existing hotplug
      code in libata is unable to work. The ACPI specification states that
      these devices can send notifications when hotswapped, which avoids the
      need to obtain notification from the controller. This patch uses the
      existing libata-acpi code and simply registers a notification in order
      to trigger a rescan whenever the firmware signals an event.
      Signed-off-by: NMatthew Garrett <mjg59@srcf.ucam.org>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      237d8440
    • T
      libata-pmp: extend ACPI support to cover PMP · d0df8b5d
      Tejun Heo 提交于
      Extend ata_acpi_associate_sata_port() such that it can handle PMP and
      call it when PMP is attached and detached.
      
      Build breakage when !CONFIG_ATA_ACPI was spotted and fixed by Petr
      Vandrovec.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Petr Vandrovec <petr@vandrovec.name>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      d0df8b5d
    • A
      [libata] add ACPI cable detect API · e1ddb4b6
      Alan Cox 提交于
      Combined from two Alan Cox patches:
      
      1) libata: ACPI checks for 80wire cable
      
      We can use the ACPI mode information with several drivers as a hint to
      cable type. If the ACPI mode set by the BIOS is faster than UDMA33 then
      we know the BIOS thinks there are 80wire cables. If it doesn't set such a
      mode or it has no ACPI method then we get no further information and can
      rely on existing approaches
      
      Introduce the function headers needed. Null it out for non ACPI boxes
      Signed-off-by: NAlan Cox <alan@redhat.com>
      
      2) libata: ACPI checks for 80wire cable
      
      Provide actual methods for checking if the ACPI support thinks the cable
      is 80wire, or doesn't know
      Signed-off-by: NAlan Cox <alan@redhat.com>
      
      Combined into a single changeset and
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      e1ddb4b6
    • T
      libata-link: implement and use link/device iterators · f58229f8
      Tejun Heo 提交于
      Multiple links and different number of devices per link should be
      considered to iterate over links and devices.  This patch implements
      and uses link and device iterators - ata_port_for_each_link() and
      ata_link_for_each_dev() - and ata_link_max_devices().
      
      This change makes a lot of functions iterate over only possible
      devices instead of from dev 0 to dev ATA_MAX_DEVICES.  All such
      changes have been examined and nothing should be broken.
      
      While at it, add a separating comment before device helpers to
      distinguish them better from link helpers and others.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      f58229f8
    • T
      libata-link: introduce ata_link · 9af5c9c9
      Tejun Heo 提交于
      Introduce ata_link.  It abstracts PHY and sits between ata_port and
      ata_device.  This new level of abstraction is necessary to support
      SATA Port Multiplier, which basically adds a bunch of links (PHYs) to
      a ATA host port.  Fields related to command execution, spd_limit and
      EH are per-link and thus moved to ata_link.
      
      This patch only defines the host link.  Multiple link handling will be
      added later.  Also, a lot of ap->link derefences are added but many of
      them will be removed as each part is converted to deal directly with
      ata_link instead of ata_port.
      
      This patch introduces no behavior change.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: James Bottomley <James.Bottomley@SteelEye.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      9af5c9c9
  13. 10 7月, 2007 6 次提交
    • T
      libata-acpi: implement _GTM/_STM support · 64578a3d
      Tejun Heo 提交于
      Implement _GTM/_STM support.  acpi_gtm is added to ata_port which
      stores _GTM parameters over suspend/resume cycle.  A new hook
      ata_acpi_on_suspend() is responsible for storing _GTM parameters
      during suspend.  _STM is executed in ata_acpi_on_resume().  With this
      change, invoking _GTF is safe on IDE hierarchy and acpi_sata check
      before _GTF is removed.
      
      ata_acpi_gtm() and ata_acpi_stm() implementation is taken from Alan
      Cox's pata_acpi implementation.  ata_acpi_gtm() is fixed such that the
      result parameter is not shifted by sizeof(union acpi_object).
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      64578a3d
    • T
      libata-acpi: remove redundant checks · e5fa24df
      Tejun Heo 提交于
      Remove remaining unnecessary feature and status checks.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      e5fa24df
    • T
      libata: reimplement ACPI invocation · 6746544c
      Tejun Heo 提交于
      This patch reimplements ACPI invocation such that, instead of
      exporting ACPI details to the rest of libata, ACPI event handlers -
      ata_acpi_on_resume() and ata_acpi_on_devcfg() - are used.  These two
      functions are responsible for determining whether specific ACPI method
      is used and when.
      
      On resume, _GTF is scheduled by setting ATA_DFLAG_ACPI_PENDING device
      flag.  This is done this way to avoid performing the action on wrong
      device device (device swapping while suspended).
      
      On every ata_dev_configure(), ata_acpi_on_devcfg() is called, which
      performs _SDD and _GTF.  _GTF is performed only after resuming and, if
      SATA, hardreset as the ACPI spec specifies.  As _GTF may contain
      arbitrary commands, IDENTIFY page is re-read after _GTF taskfiles are
      executed.
      
      If one of ACPI methods fails, ata_acpi_on_devcfg() retries on the
      first failure.  If it fails again on the second try, ACPI is disabled
      on the device.  Note that successful configuration clears ACPI failed
      status.
      
      With all feature checks moved to the above two functions,
      do_drive_set_taskfiles() is trivial and thus collapsed into
      ata_acpi_exec_tfs(), which is now static and converted to return the
      number of executed taskfiles to be used by ata_acpi_on_resume().  As
      failures are handled properly, ata_acpi_push_id() now returns -errno
      on errors instead of unconditional zero.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      6746544c
    • T
      libata-acpi: miscellaneous cleanups · 69b16a5f
      Tejun Heo 提交于
      * Add missing LOCKING: and RETURNS: to function comment.
      
      * Don't conditionalize warning messages with ata_msg_probe().  Print
        directly with KERN_WARNING.
      
      * Drop duplicate debug messages.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      69b16a5f
    • T
      libata-acpi: clean up ata_acpi_exec_tfs() · 4700c4bc
      Tejun Heo 提交于
      This patch cleans up ata_acpi_exec_tfs() and its friends.
      
      * Rename taskfile_array to ata_acpi_gtf and make it __packed as it's
        used as argument to ACPI method, and use pointer to ata_acpi_gtf and
        number of taskfiles to represent _GTF taskfiles instead of a pointer
        casted into unsigned long and byte count.  This makes argument
        re-checking in do_drive_set_taskfiles() unnecessary.
      
      * Pointer in void * not in unsigned long.
      
      * Clean up do_drive_get_GTF() error handling and make
        do_drive_get_GTF() return number of taskfiles on success, 0 if _GTF
        doesn't exist or doesn't contain valid ata.  -errno on other errors.
      
      * Remove superflous check for acpi->buffer.pointer.
      
      * Update taskfile_load_raw() such that printed messages look similar
        to the messages printed by ata_eh_report().
      
      * s/do_drive_get_GTF/ata_dev_get_GTF/
        s/do_drive_set_taskfiles/ata_dev_set_taskfiles/
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      4700c4bc
    • T
      libata-acpi: implement ata_acpi_associate() · fafbae87
      Tejun Heo 提交于
      * Add acpi_handle to ata_host and ata_port.  Rename
        ata_device->obj_handle to ->acpi_handle and move it above such that
        it doesn't get cleared on reconfiguration.
      
      * Replace ACPI node association which ata_acpi_associate() which is
        called once during host initialization.  Unlike the previous
        implementation, ata_acpi_associate() uses ATA_FLAG_ACPI_SATA to
        choose between IDE or SATA ACPI hierarchy and uses simple child look
        up instead of recursive walk to match the nodes.  This is way safer
        and simpler.  Please read the following message for more info.
      
        http://article.gmane.org/gmane.linux.ide/17554Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      fafbae87
  14. 16 5月, 2007 1 次提交
    • T
      libata-acpi: add ATA_FLAG_ACPI_SATA port flag · 3cadbcc0
      Tejun Heo 提交于
      Whether a controller needs IDE or SATA ACPI hierarchy is determined by
      the programming interface of the controller not by whether the
      controller is SATA or PATA, or it supports slave device or not.  This
      patch adds ATA_FLAG_ACPI_SATA port flags which tells libata-acpi that
      the port needs SATA ACPI nodes, and sets the flag for ahci and
      sata_sil24.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      3cadbcc0
  15. 12 5月, 2007 1 次提交
  16. 10 5月, 2007 1 次提交
  17. 28 3月, 2007 1 次提交