diff options
author | Tejun Heo <htejun@gmail.com> | 2007-08-06 05:36:23 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-10-12 14:55:31 -0400 |
commit | 8989805d6d176aa32c0e9a68a536aa4c8ef5231c (patch) | |
tree | 9111bf6a881ab6c90aac9953b678ab62bb6c2d3b /drivers | |
parent | dbd826168d6267a26cf20cd233f6730f8d8047d6 (diff) |
libata-link: add PMP links
Add link->pmp, ap->nr_pmp_links, ap->pmp_link[], and implement/update
link helpers.
printk helpers are updated such that port and link are identifed as
'ataP:' if no PMP is attached, while device is identified as
'ataP.DD:'. If PMP is attached, they become 'ataP:', 'ataP.LL:' and
'ataP.LL' - ie. link and device are identified their PMP number.
If PPM is attached (ap->nr_pmp_links != 0), ata_for_each_link()
iterates over PMP links, while __ata_for_each_link() iterates over the
host link + PMP links. If PMP is not attached (ap->nr_pmp_links ==
0), both iterate over only the host link.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/libata-core.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index dcae590cc9b4..af9c0ab600dc 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -6064,13 +6064,14 @@ void ata_dev_init(struct ata_device *dev) | |||
6064 | * ata_link_init - Initialize an ata_link structure | 6064 | * ata_link_init - Initialize an ata_link structure |
6065 | * @ap: ATA port link is attached to | 6065 | * @ap: ATA port link is attached to |
6066 | * @link: Link structure to initialize | 6066 | * @link: Link structure to initialize |
6067 | * @pmp: Port multiplier port number | ||
6067 | * | 6068 | * |
6068 | * Initialize @link. | 6069 | * Initialize @link. |
6069 | * | 6070 | * |
6070 | * LOCKING: | 6071 | * LOCKING: |
6071 | * Kernel thread context (may sleep) | 6072 | * Kernel thread context (may sleep) |
6072 | */ | 6073 | */ |
6073 | static void ata_link_init(struct ata_port *ap, struct ata_link *link) | 6074 | static void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp) |
6074 | { | 6075 | { |
6075 | int i; | 6076 | int i; |
6076 | 6077 | ||
@@ -6078,6 +6079,7 @@ static void ata_link_init(struct ata_port *ap, struct ata_link *link) | |||
6078 | memset(link, 0, offsetof(struct ata_link, device[0])); | 6079 | memset(link, 0, offsetof(struct ata_link, device[0])); |
6079 | 6080 | ||
6080 | link->ap = ap; | 6081 | link->ap = ap; |
6082 | link->pmp = pmp; | ||
6081 | link->active_tag = ATA_TAG_POISON; | 6083 | link->active_tag = ATA_TAG_POISON; |
6082 | link->hw_sata_spd_limit = UINT_MAX; | 6084 | link->hw_sata_spd_limit = UINT_MAX; |
6083 | 6085 | ||
@@ -6173,7 +6175,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host) | |||
6173 | 6175 | ||
6174 | ap->cbl = ATA_CBL_NONE; | 6176 | ap->cbl = ATA_CBL_NONE; |
6175 | 6177 | ||
6176 | ata_link_init(ap, &ap->link); | 6178 | ata_link_init(ap, &ap->link, 0); |
6177 | 6179 | ||
6178 | #ifdef ATA_IRQ_TRAP | 6180 | #ifdef ATA_IRQ_TRAP |
6179 | ap->stats.unhandled_irq = 1; | 6181 | ap->stats.unhandled_irq = 1; |