|
@@ -1265,34 +1265,17 @@ static inline int ata_link_active(struct ata_link *link)
|
|
|
return ata_tag_valid(link->active_tag) || link->sactive;
|
|
|
}
|
|
|
|
|
|
-static inline struct ata_link *ata_port_first_link(struct ata_port *ap)
|
|
|
-{
|
|
|
- if (sata_pmp_attached(ap))
|
|
|
- return ap->pmp_link;
|
|
|
- return &ap->link;
|
|
|
-}
|
|
|
-
|
|
|
-static inline struct ata_link *ata_port_next_link(struct ata_link *link)
|
|
|
-{
|
|
|
- struct ata_port *ap = link->ap;
|
|
|
-
|
|
|
- if (ata_is_host_link(link)) {
|
|
|
- if (!sata_pmp_attached(ap))
|
|
|
- return NULL;
|
|
|
- return ap->pmp_link;
|
|
|
- }
|
|
|
-
|
|
|
- if (++link < ap->nr_pmp_links + ap->pmp_link)
|
|
|
- return link;
|
|
|
- return NULL;
|
|
|
-}
|
|
|
+extern struct ata_link *__ata_port_next_link(struct ata_port *ap,
|
|
|
+ struct ata_link *link,
|
|
|
+ bool dev_only);
|
|
|
|
|
|
-#define __ata_port_for_each_link(lk, ap) \
|
|
|
- for ((lk) = &(ap)->link; (lk); (lk) = ata_port_next_link(lk))
|
|
|
+#define __ata_port_for_each_link(link, ap) \
|
|
|
+ for ((link) = __ata_port_next_link((ap), NULL, false); (link); \
|
|
|
+ (link) = __ata_port_next_link((ap), (link), false))
|
|
|
|
|
|
#define ata_port_for_each_link(link, ap) \
|
|
|
- for ((link) = ata_port_first_link(ap); (link); \
|
|
|
- (link) = ata_port_next_link(link))
|
|
|
+ for ((link) = __ata_port_next_link((ap), NULL, true); (link); \
|
|
|
+ (link) = __ata_port_next_link((ap), (link), true))
|
|
|
|
|
|
#define ata_link_for_each_dev(dev, link) \
|
|
|
for ((dev) = (link)->device; \
|