#include <linux/scatterlist.h>
#include <linux/slab.h>
#include <linux/async.h>
#include <linux/export.h>
#include <scsi/sas_ata.h>
#include "sas_internal.h"
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_tcq.h>
#include <scsi/scsi.h>
#include <scsi/scsi_transport.h>
#include <scsi/scsi_transport_sas.h>
#include "scsi_sas_internal.h"
#include "scsi_transport_api.h"
#include <scsi/scsi_eh.h>
static enum ata_completion_errors sas_to_ata_err(struct task_status_struct *ts)
{ … }
static void sas_ata_task_done(struct sas_task *task)
{ … }
static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
__must_hold(ap->lock)
{ … }
static void sas_ata_qc_fill_rtf(struct ata_queued_cmd *qc)
{ … }
static struct sas_internal *dev_to_sas_internal(struct domain_device *dev)
{ … }
static int sas_get_ata_command_set(struct domain_device *dev)
{ … }
int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
{ … }
static int sas_ata_clear_pending(struct domain_device *dev, struct ex_phy *phy)
{ … }
int smp_ata_check_ready_type(struct ata_link *link)
{ … }
EXPORT_SYMBOL_GPL(…);
static int smp_ata_check_ready(struct ata_link *link)
{ … }
static int local_ata_check_ready(struct ata_link *link)
{ … }
static int sas_ata_printk(const char *level, const struct domain_device *ddev,
const char *fmt, ...)
{ … }
static int sas_ata_wait_after_reset(struct domain_device *dev, unsigned long deadline)
{ … }
static int sas_ata_hard_reset(struct ata_link *link, unsigned int *class,
unsigned long deadline)
{ … }
static void sas_ata_internal_abort(struct sas_task *task)
{ … }
static void sas_ata_post_internal(struct ata_queued_cmd *qc)
{ … }
static void sas_ata_set_dmamode(struct ata_port *ap, struct ata_device *ata_dev)
{ … }
static void sas_ata_sched_eh(struct ata_port *ap)
{ … }
void sas_ata_end_eh(struct ata_port *ap)
{ … }
static int sas_ata_prereset(struct ata_link *link, unsigned long deadline)
{ … }
static struct ata_port_operations sas_sata_ops = …;
int sas_ata_init(struct domain_device *found_dev)
{ … }
void sas_ata_task_abort(struct sas_task *task)
{ … }
void sas_probe_sata(struct asd_sas_port *port)
{ … }
int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id)
{ … }
static void sas_ata_flush_pm_eh(struct asd_sas_port *port, const char *func)
{ … }
void sas_suspend_sata(struct asd_sas_port *port)
{ … }
void sas_resume_sata(struct asd_sas_port *port)
{ … }
int sas_discover_sata(struct domain_device *dev)
{ … }
static void async_sas_ata_eh(void *data, async_cookie_t cookie)
{ … }
void sas_ata_strategy_handler(struct Scsi_Host *shost)
{ … }
void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q)
{ … }
void sas_ata_schedule_reset(struct domain_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
void sas_ata_wait_eh(struct domain_device *dev)
{ … }
void sas_ata_device_link_abort(struct domain_device *device, bool force_reset)
{ … }
EXPORT_SYMBOL_GPL(…);
int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id)
{ … }
EXPORT_SYMBOL_GPL(…);
static ssize_t sas_ncq_prio_supported_show(struct device *device,
struct device_attribute *attr,
char *buf)
{ … }
static struct device_attribute dev_attr_sas_ncq_prio_supported = …;
static ssize_t sas_ncq_prio_enable_show(struct device *device,
struct device_attribute *attr,
char *buf)
{ … }
static ssize_t sas_ncq_prio_enable_store(struct device *device,
struct device_attribute *attr,
const char *buf, size_t len)
{ … }
static struct device_attribute dev_attr_sas_ncq_prio_enable = …;
static struct attribute *sas_ata_sdev_attrs[] = …;
static umode_t sas_ata_attr_is_visible(struct kobject *kobj,
struct attribute *attr, int i)
{ … }
const struct attribute_group sas_ata_sdev_attr_group = …;
EXPORT_SYMBOL_GPL(…);