diff options
author | Tejun Heo <htejun@gmail.com> | 2007-08-06 05:36:22 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-10-12 14:55:30 -0400 |
commit | 9af5c9c97dc9d599281778864c72b385f0c63341 (patch) | |
tree | 8359986bd42c4a9a5b1993078aa9ee4c7971ac3d /drivers/ata/sata_inic162x.c | |
parent | 640fdb504941fa2b9f6f274716fc9f97f2bf6bff (diff) |
libata-link: introduce ata_link
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: Tejun Heo <htejun@gmail.com>
Cc: James Bottomley <James.Bottomley@SteelEye.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/sata_inic162x.c')
-rw-r--r-- | drivers/ata/sata_inic162x.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index fdbed8ecdfc2..3c0ef7a2f2fe 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
@@ -285,7 +285,7 @@ static void inic_irq_clear(struct ata_port *ap) | |||
285 | static void inic_host_intr(struct ata_port *ap) | 285 | static void inic_host_intr(struct ata_port *ap) |
286 | { | 286 | { |
287 | void __iomem *port_base = inic_port_base(ap); | 287 | void __iomem *port_base = inic_port_base(ap); |
288 | struct ata_eh_info *ehi = &ap->eh_info; | 288 | struct ata_eh_info *ehi = &ap->link.eh_info; |
289 | u8 irq_stat; | 289 | u8 irq_stat; |
290 | 290 | ||
291 | /* fetch and clear irq */ | 291 | /* fetch and clear irq */ |
@@ -293,7 +293,8 @@ static void inic_host_intr(struct ata_port *ap) | |||
293 | writeb(irq_stat, port_base + PORT_IRQ_STAT); | 293 | writeb(irq_stat, port_base + PORT_IRQ_STAT); |
294 | 294 | ||
295 | if (likely(!(irq_stat & PIRQ_ERR))) { | 295 | if (likely(!(irq_stat & PIRQ_ERR))) { |
296 | struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->active_tag); | 296 | struct ata_queued_cmd *qc = |
297 | ata_qc_from_tag(ap, ap->link.active_tag); | ||
297 | 298 | ||
298 | if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) { | 299 | if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) { |
299 | ata_chk_status(ap); /* clear ATA interrupt */ | 300 | ata_chk_status(ap); /* clear ATA interrupt */ |
@@ -421,7 +422,7 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class, | |||
421 | { | 422 | { |
422 | void __iomem *port_base = inic_port_base(ap); | 423 | void __iomem *port_base = inic_port_base(ap); |
423 | void __iomem *idma_ctl = port_base + PORT_IDMA_CTL; | 424 | void __iomem *idma_ctl = port_base + PORT_IDMA_CTL; |
424 | const unsigned long *timing = sata_ehc_deb_timing(&ap->eh_context); | 425 | const unsigned long *timing = sata_ehc_deb_timing(&ap->link.eh_context); |
425 | u16 val; | 426 | u16 val; |
426 | int rc; | 427 | int rc; |
427 | 428 | ||