Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 68138
b: refs/heads/master
c: d0df8b5
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Oct 12, 2007
1 parent f498b8c commit ab6534b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 633273a3ed1cf37ced90475b0f95cf81deab04f1
refs/heads/master: d0df8b5d0fb547a3351c2a4b1ded7f7cde5d713a
36 changes: 32 additions & 4 deletions trunk/drivers/ata/libata-acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,40 @@ static int is_pci_dev(struct device *dev)
return (dev->bus == &pci_bus_type);
}

static void ata_acpi_associate_sata_port(struct ata_port *ap)
/**
* ata_acpi_associate_sata_port - associate SATA port with ACPI objects
* @ap: target SATA port
*
* Look up ACPI objects associated with @ap and initialize acpi_handle
* fields of @ap, the port and devices accordingly.
*
* LOCKING:
* EH context.
*
* RETURNS:
* 0 on success, -errno on failure.
*/
void ata_acpi_associate_sata_port(struct ata_port *ap)
{
acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA));

if (!ap->nr_pmp_links) {
acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT);

ap->link.device->acpi_handle =
acpi_get_child(ap->host->acpi_handle, adr);
} else {
struct ata_link *link;

ap->link.device->acpi_handle = NULL;

ap->link.device->acpi_handle =
acpi_get_child(ap->host->acpi_handle, adr);
ata_port_for_each_link(link, ap) {
acpi_integer adr = SATA_ADR(ap->port_no, link->pmp);

link->device->acpi_handle =
acpi_get_child(ap->host->acpi_handle, adr);
}
}
}

static void ata_acpi_associate_ide_port(struct ata_port *ap)
Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/ata/libata-pmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,8 @@ int sata_pmp_attach(struct ata_device *dev)
ata_port_for_each_link(tlink, ap)
sata_link_init_spd(tlink);

ata_acpi_associate_sata_port(ap);

return 0;

fail:
Expand Down Expand Up @@ -646,6 +648,8 @@ static void sata_pmp_detach(struct ata_device *dev)
ap->nr_pmp_links = 0;
link->pmp = 0;
spin_unlock_irqrestore(ap->lock, flags);

ata_acpi_associate_sata_port(ap);
}

/**
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/ata/libata.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,13 @@ extern struct ata_port *ata_port_alloc(struct ata_host *host);

/* libata-acpi.c */
#ifdef CONFIG_ATA_ACPI
extern void ata_acpi_associate_sata_port(struct ata_port *ap);
extern void ata_acpi_associate(struct ata_host *host);
extern int ata_acpi_on_suspend(struct ata_port *ap);
extern void ata_acpi_on_resume(struct ata_port *ap);
extern int ata_acpi_on_devcfg(struct ata_device *adev);
#else
static inline void ata_acpi_associate_sata_port(struct ata_port *ap) { }
static inline void ata_acpi_associate(struct ata_host *host) { }
static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; }
static inline void ata_acpi_on_resume(struct ata_port *ap) { }
Expand Down

0 comments on commit ab6534b

Please sign in to comment.