]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'suspend' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
authorJesse Barnes <jbarnes@hobbes.lan>
Thu, 12 Jun 2008 19:06:58 +0000 (12:06 -0700)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Thu, 12 Jun 2008 19:06:58 +0000 (12:06 -0700)
1  2 
MAINTAINERS
drivers/pci/pci-acpi.c
drivers/pci/pci.c
drivers/pci/pci.h

diff --combined MAINTAINERS
index 89db949bcd800f702a3684f0a6b06e30a0ae9f57,e3560df4608e1b180b01c8b56a12bf78ead79bb2..02a85ab7387d632e3f9aed6f45c820b63dd8b25b
@@@ -248,7 -248,7 +248,7 @@@ S: Supporte
  ACPI PCI HOTPLUG DRIVER
  P:    Kristen Carlson Accardi
  M:    kristen.c.accardi@intel.com
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  ACPI THERMAL DRIVER
@@@ -1134,21 -1134,21 +1134,21 @@@ COMPACTPCI HOTPLUG COR
  P:    Scott Murray
  M:    scottm@somanetworks.com
  M:    scott@spiteful.org
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER
  P:    Scott Murray
  M:    scottm@somanetworks.com
  M:    scott@spiteful.org
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  COMPACTPCI HOTPLUG GENERIC DRIVER
  P:    Scott Murray
  M:    scottm@somanetworks.com
  M:    scott@spiteful.org
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  COMPUTONE INTELLIPORT MULTIPORT CARD
@@@ -3177,7 -3177,7 +3177,7 @@@ S:      Supporte
  PCIE HOTPLUG DRIVER
  P:    Kristen Carlson Accardi
  M:    kristen.c.accardi@intel.com
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  PCMCIA SUBSYSTEM
@@@ -3658,13 -3658,6 +3658,6 @@@ M:     romieu@fr.zoreil.co
  L:    netdev@vger.kernel.org
  S:    Maintained
  
- SIS 5513 IDE CONTROLLER DRIVER
- P:    Lionel Bouton
- M:    Lionel.Bouton@inet6.fr
- W:    http://inet6.dyn.dhs.org/sponsoring/sis5513/index.html
- W:    http://gyver.homeip.net/sis5513/index.html
- S:    Maintained
  SIS 900/7016 FAST ETHERNET DRIVER
  P:    Daniele Venzano
  M:    venza@brownhat.org
@@@ -3815,7 -3808,7 +3808,7 @@@ S:      Maintaine
  SHPC HOTPLUG DRIVER
  P:    Kristen Carlson Accardi
  M:    kristen.c.accardi@intel.com
 -L:    pcihpd-discuss@lists.sourceforge.net
 +L:    linux-pci@vger.kernel.org
  S:    Supported
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE DRIVER
diff --combined drivers/pci/pci-acpi.c
index 5f96b869a5662eb077203e56270b335744b4fdc1,dab9d471914c3dacd3fd6f165ed8bd1a6ca60c56..056ea80ee27a6bf6ca0be58cf2321c323901dd89
  
  struct acpi_osc_data {
        acpi_handle handle;
 -      u32 ctrlset_buf[3];
 -      u32 global_ctrlsets;
 +      u32 support_set;
 +      u32 control_set;
 +      int is_queried;
 +      u32 query_result;
        struct list_head sibiling;
  };
  static LIST_HEAD(acpi_osc_data_list);
  
 +struct acpi_osc_args {
 +      u32 capbuf[3];
 +      u32 query_result;
 +};
 +
  static struct acpi_osc_data *acpi_get_osc_data(acpi_handle handle)
  {
        struct acpi_osc_data *data;
        return data;
  }
  
 -static u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
 +static u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40,
 +                        0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
  
 -static acpi_status  
 -acpi_query_osc (
 -      acpi_handle     handle,
 -      u32             level,
 -      void            *context,
 -      void            **retval )
 +static acpi_status acpi_run_osc(acpi_handle handle,
 +                              struct acpi_osc_args *osc_args)
  {
 -      acpi_status             status;
 -      struct acpi_object_list input;
 -      union acpi_object       in_params[4];
 -      struct acpi_buffer      output = {ACPI_ALLOCATE_BUFFER, NULL};
 -      union acpi_object       *out_obj;
 -      u32                     osc_dw0;
 -      acpi_status *ret_status = (acpi_status *)retval;
 -      struct acpi_osc_data *osc_data;
 -      u32 flags = (unsigned long)context, temp;
 -      acpi_handle tmp;
 -
 -      status = acpi_get_handle(handle, "_OSC", &tmp);
 -      if (ACPI_FAILURE(status))
 -              return status;
 -
 -      osc_data = acpi_get_osc_data(handle);
 -      if (!osc_data) {
 -              printk(KERN_ERR "acpi osc data array is full\n");
 -              return AE_ERROR;
 -      }
 -
 -      osc_data->ctrlset_buf[OSC_SUPPORT_TYPE] |= (flags & OSC_SUPPORT_MASKS);
 -
 -      /* do _OSC query for all possible controls */
 -      temp = osc_data->ctrlset_buf[OSC_CONTROL_TYPE];
 -      osc_data->ctrlset_buf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
 -      osc_data->ctrlset_buf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS;
 +      acpi_status status;
 +      struct acpi_object_list input;
 +      union acpi_object in_params[4];
 +      struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
 +      union acpi_object *out_obj;
 +      u32 osc_dw0, flags = osc_args->capbuf[OSC_QUERY_TYPE];
  
        /* Setting up input parameters */
        input.count = 4;
        in_params[2].integer.value      = 3;
        in_params[3].type               = ACPI_TYPE_BUFFER;
        in_params[3].buffer.length      = 12;
 -      in_params[3].buffer.pointer     = (u8 *)osc_data->ctrlset_buf;
 +      in_params[3].buffer.pointer     = (u8 *)osc_args->capbuf;
  
        status = acpi_evaluate_object(handle, "_OSC", &input, &output);
        if (ACPI_FAILURE(status))
 -              goto out_nofree;
 -      out_obj = output.pointer;
 +              return status;
  
 +      out_obj = output.pointer;
        if (out_obj->type != ACPI_TYPE_BUFFER) {
 -              printk(KERN_DEBUG  
 -                      "Evaluate _OSC returns wrong type\n");
 +              printk(KERN_DEBUG "Evaluate _OSC returns wrong type\n");
                status = AE_TYPE;
 -              goto query_osc_out;
 +              goto out_kfree;
        }
 -      osc_dw0 = *((u32 *) out_obj->buffer.pointer);
 +      osc_dw0 = *((u32 *)out_obj->buffer.pointer);
        if (osc_dw0) {
                if (osc_dw0 & OSC_REQUEST_ERROR)
                        printk(KERN_DEBUG "_OSC request fails\n"); 
                if (osc_dw0 & OSC_INVALID_REVISION_ERROR)
                        printk(KERN_DEBUG "_OSC invalid revision\n"); 
                if (osc_dw0 & OSC_CAPABILITIES_MASK_ERROR) {
 -                      /* Update Global Control Set */
 -                      osc_data->global_ctrlsets =
 -                              *((u32 *)(out_obj->buffer.pointer + 8));
 -                      status = AE_OK;
 -                      goto query_osc_out;
 +                      if (flags & OSC_QUERY_ENABLE)
 +                              goto out_success;
 +                      printk(KERN_DEBUG "_OSC FW not grant req. control\n");
 +                      status = AE_SUPPORT;
 +                      goto out_kfree;
                }
                status = AE_ERROR;
 -              goto query_osc_out;
 +              goto out_kfree;
        }
 -
 -      /* Update Global Control Set */
 -      osc_data->global_ctrlsets = *((u32 *)(out_obj->buffer.pointer + 8));
 +out_success:
 +      if (flags & OSC_QUERY_ENABLE)
 +              osc_args->query_result =
 +                      *((u32 *)(out_obj->buffer.pointer + 8));
        status = AE_OK;
  
 -query_osc_out:
 +out_kfree:
        kfree(output.pointer);
 -out_nofree:
 -      *ret_status = status;
 -
 -      osc_data->ctrlset_buf[OSC_QUERY_TYPE] = !OSC_QUERY_ENABLE;
 -      osc_data->ctrlset_buf[OSC_CONTROL_TYPE] = temp;
 -      if (ACPI_FAILURE(status)) {
 -              /* no osc support at all */
 -              osc_data->ctrlset_buf[OSC_SUPPORT_TYPE] = 0;
 -      }
 -
        return status;
  }
  
 -
 -static acpi_status  
 -acpi_run_osc (
 -      acpi_handle     handle,
 -      void            *context)
 +static acpi_status acpi_query_osc(acpi_handle handle,
 +                                u32 level, void *context, void **retval)
  {
 -      acpi_status             status;
 -      struct acpi_object_list input;
 -      union acpi_object       in_params[4];
 -      struct acpi_buffer      output = {ACPI_ALLOCATE_BUFFER, NULL};
 -      union acpi_object       *out_obj;
 -      u32                     osc_dw0;
 -
 -      /* Setting up input parameters */
 -      input.count = 4;
 -      input.pointer = in_params;
 -      in_params[0].type               = ACPI_TYPE_BUFFER;
 -      in_params[0].buffer.length      = 16;
 -      in_params[0].buffer.pointer     = OSC_UUID;
 -      in_params[1].type               = ACPI_TYPE_INTEGER;
 -      in_params[1].integer.value      = 1;
 -      in_params[2].type               = ACPI_TYPE_INTEGER;
 -      in_params[2].integer.value      = 3;
 -      in_params[3].type               = ACPI_TYPE_BUFFER;
 -      in_params[3].buffer.length      = 12;
 -      in_params[3].buffer.pointer     = (u8 *)context;
 +      acpi_status status;
 +      struct acpi_osc_data *osc_data;
 +      u32 flags = (unsigned long)context, support_set;
 +      acpi_handle tmp;
 +      struct acpi_osc_args osc_args;
  
 -      status = acpi_evaluate_object(handle, "_OSC", &input, &output);
 -      if (ACPI_FAILURE (status))
 +      status = acpi_get_handle(handle, "_OSC", &tmp);
 +      if (ACPI_FAILURE(status))
                return status;
  
 -      out_obj = output.pointer;
 -      if (out_obj->type != ACPI_TYPE_BUFFER) {
 -              printk(KERN_DEBUG  
 -                      "Evaluate _OSC returns wrong type\n");
 -              status = AE_TYPE;
 -              goto run_osc_out;
 +      osc_data = acpi_get_osc_data(handle);
 +      if (!osc_data) {
 +              printk(KERN_ERR "acpi osc data array is full\n");
 +              return AE_ERROR;
        }
 -      osc_dw0 = *((u32 *) out_obj->buffer.pointer);
 -      if (osc_dw0) {
 -              if (osc_dw0 & OSC_REQUEST_ERROR)
 -                      printk(KERN_DEBUG "_OSC request fails\n"); 
 -              if (osc_dw0 & OSC_INVALID_UUID_ERROR)
 -                      printk(KERN_DEBUG "_OSC invalid UUID\n"); 
 -              if (osc_dw0 & OSC_INVALID_REVISION_ERROR)
 -                      printk(KERN_DEBUG "_OSC invalid revision\n"); 
 -              if (osc_dw0 & OSC_CAPABILITIES_MASK_ERROR) {
 -                      printk(KERN_DEBUG "_OSC FW not grant req. control\n");
 -                      status = AE_SUPPORT;
 -                      goto run_osc_out;
 -              }
 -              status = AE_ERROR;
 -              goto run_osc_out;
 +
 +      /* do _OSC query for all possible controls */
 +      support_set = osc_data->support_set | (flags & OSC_SUPPORT_MASKS);
 +      osc_args.capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
 +      osc_args.capbuf[OSC_SUPPORT_TYPE] = support_set;
 +      osc_args.capbuf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS;
 +
 +      status = acpi_run_osc(handle, &osc_args);
 +      if (ACPI_SUCCESS(status)) {
 +              osc_data->support_set = support_set;
 +              osc_data->query_result = osc_args.query_result;
 +              osc_data->is_queried = 1;
        }
 -      status = AE_OK;
  
 -run_osc_out:
 -      kfree(output.pointer);
        return status;
  }
  
   **/
  acpi_status __pci_osc_support_set(u32 flags, const char *hid)
  {
 -      acpi_status retval = AE_NOT_FOUND;
 -
 -      if (!(flags & OSC_SUPPORT_MASKS)) {
 +      if (!(flags & OSC_SUPPORT_MASKS))
                return AE_TYPE;
 -      }
 -      acpi_get_devices(hid,
 -                      acpi_query_osc,
 -                      (void *)(unsigned long)flags,
 -                      (void **) &retval );
 +
 +      acpi_get_devices(hid, acpi_query_osc,
 +                       (void *)(unsigned long)flags, NULL);
        return AE_OK;
  }
  
   **/
  acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
  {
 -      acpi_status     status;
 -      u32             ctrlset;
 +      acpi_status status;
 +      u32 ctrlset, control_set;
        acpi_handle tmp;
        struct acpi_osc_data *osc_data;
 +      struct acpi_osc_args osc_args;
  
        status = acpi_get_handle(handle, "_OSC", &tmp);
        if (ACPI_FAILURE(status))
        }
  
        ctrlset = (flags & OSC_CONTROL_MASKS);
 -      if (!ctrlset) {
 +      if (!ctrlset)
                return AE_TYPE;
 -      }
 -      if (osc_data->ctrlset_buf[OSC_SUPPORT_TYPE] &&
 -              ((osc_data->global_ctrlsets & ctrlset) != ctrlset)) {
 +
 +      if (osc_data->is_queried &&
 +          ((osc_data->query_result & ctrlset) != ctrlset))
                return AE_SUPPORT;
 -      }
 -      osc_data->ctrlset_buf[OSC_CONTROL_TYPE] |= ctrlset;
 -      status = acpi_run_osc(handle, osc_data->ctrlset_buf);
 -      if (ACPI_FAILURE (status)) {
 -              osc_data->ctrlset_buf[OSC_CONTROL_TYPE] &= ~ctrlset;
 -      }
 -      
 +
 +      control_set = osc_data->control_set | ctrlset;
 +      osc_args.capbuf[OSC_QUERY_TYPE] = 0;
 +      osc_args.capbuf[OSC_SUPPORT_TYPE] = osc_data->support_set;
 +      osc_args.capbuf[OSC_CONTROL_TYPE] = control_set;
 +      status = acpi_run_osc(handle, &osc_args);
 +      if (ACPI_SUCCESS(status))
 +              osc_data->control_set = control_set;
 +
        return status;
  }
  EXPORT_SYMBOL(pci_osc_control_set);
   *    choose highest power _SxD or any lower power
   */
  
- static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev,
-       pm_message_t state)
+ static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev)
  {
        int acpi_state;
  
-       acpi_state = acpi_pm_device_sleep_state(&pdev->dev,
-               device_may_wakeup(&pdev->dev), NULL);
+       acpi_state = acpi_pm_device_sleep_state(&pdev->dev, NULL);
        if (acpi_state < 0)
                return PCI_POWER_ERROR;
  
diff --combined drivers/pci/pci.c
index 15beaf48407fb76404e4021387264a79732e442d,75c60239cadd035d967677d60e662b5a23e360fe..7869f8f75c9e97d01ae6161d635c01d99076df20
@@@ -1,4 -1,6 +1,4 @@@
  /*
 - *    $Id: pci.c,v 1.91 1999/01/21 13:34:01 davem Exp $
 - *
   *    PCI Bus Services, see include/linux/pci.h for further explanation.
   *
   *    Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
@@@ -506,7 -508,7 +506,7 @@@ pci_set_power_state(struct pci_dev *dev
        return 0;
  }
  
- pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
+ pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev);
   
  /**
   * pci_choose_state - Choose the power state of a PCI device
@@@ -526,7 -528,7 +526,7 @@@ pci_power_t pci_choose_state(struct pci
                return PCI_D0;
  
        if (platform_pci_choose_state) {
-               ret = platform_pci_choose_state(dev, state);
+               ret = platform_pci_choose_state(dev);
                if (ret != PCI_POWER_ERROR)
                        return ret;
        }
diff --combined drivers/pci/pci.h
index e1d7bbf079b428f71ffefacb7ec5594998f97779,ff30b3c91aad4c15edb58a1ecf536390962512a4..e0eff35825a6ec33cbb4562ae9cb42b666db8a98
@@@ -6,8 -6,7 +6,7 @@@ extern void pci_remove_sysfs_dev_files(
  extern void pci_cleanup_rom(struct pci_dev *dev);
  
  /* Firmware callbacks */
- extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev,
-                                               pm_message_t state);
+ extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev);
  extern int (*platform_pci_set_power_state)(struct pci_dev *dev,
                                                pci_power_t state);
  
@@@ -106,16 -105,3 +105,16 @@@ pci_match_one_device(const struct pci_d
  }
  
  struct pci_dev *pci_find_upstream_pcie_bridge(struct pci_dev *pdev);
 +
 +/* PCI slot sysfs helper code */
 +#define to_pci_slot(s) container_of(s, struct pci_slot, kobj)
 +
 +extern struct kset *pci_slots_kset;
 +
 +struct pci_slot_attribute {
 +      struct attribute attr;
 +      ssize_t (*show)(struct pci_slot *, char *);
 +      ssize_t (*store)(struct pci_slot *, const char *, size_t);
 +};
 +#define to_pci_slot_attr(s) container_of(s, struct pci_slot_attribute, attr)
 +