![Dan Williams](/assets/img/avatar_default.png)
ata devices are always scanned after ssp. Prior to the ata error handling reworks libsas would tend to scan devices in ascending expander phy order. Restore this ordering by deferring ssp discovery to a DISCE_PROBE event, and keep the probe order consistent with the discovery order, not the placement of sata devices. Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
/*
|
|
* Support for SATA devices on Serial Attached SCSI (SAS) controllers
|
|
*
|
|
* Copyright (C) 2006 IBM Corporation
|
|
*
|
|
* Written by: Darrick J. Wong <djwong@us.ibm.com>, IBM Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA
|
|
*
|
|
*/
|
|
|
|
#ifndef _SAS_ATA_H_
|
|
#define _SAS_ATA_H_
|
|
|
|
#include <linux/libata.h>
|
|
#include <scsi/libsas.h>
|
|
|
|
#ifdef CONFIG_SCSI_SAS_ATA
|
|
|
|
static inline int dev_is_sata(struct domain_device *dev)
|
|
{
|
|
return dev->dev_type == SATA_DEV || dev->dev_type == SATA_PM ||
|
|
dev->dev_type == SATA_PM_PORT || dev->dev_type == SATA_PENDING;
|
|
}
|
|
|
|
int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy);
|
|
int sas_ata_init_host_and_port(struct domain_device *found_dev,
|
|
struct scsi_target *starget);
|
|
|
|
void sas_ata_task_abort(struct sas_task *task);
|
|
void sas_ata_strategy_handler(struct Scsi_Host *shost);
|
|
void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q,
|
|
struct list_head *done_q);
|
|
void sas_ata_schedule_reset(struct domain_device *dev);
|
|
void sas_ata_wait_eh(struct domain_device *dev);
|
|
#else
|
|
|
|
|
|
static inline int dev_is_sata(struct domain_device *dev)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline int sas_ata_init_host_and_port(struct domain_device *found_dev,
|
|
struct scsi_target *starget)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline void sas_ata_task_abort(struct sas_task *task)
|
|
{
|
|
}
|
|
|
|
static inline void sas_ata_strategy_handler(struct Scsi_Host *shost)
|
|
{
|
|
}
|
|
|
|
static inline void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q,
|
|
struct list_head *done_q)
|
|
{
|
|
}
|
|
|
|
static inline void sas_ata_schedule_reset(struct domain_device *dev)
|
|
{
|
|
}
|
|
|
|
static inline void sas_ata_wait_eh(struct domain_device *dev)
|
|
{
|
|
}
|
|
|
|
static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SAS_ATA_H_ */
|