mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 09:14:19 +08:00
d377f415dd
This patch prepares for converting SAM status codes into an enum. Without this patch converting SAM status codes into an enumeration type would trigger complaints about enum type mismatches for the SAS code. Link: https://lore.kernel.org/r/20210524025457.11299-2-bvanassche@acm.org Cc: Hannes Reinecke <hare@suse.com> Cc: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Cc: Jason Yan <yanaijie@huawei.com> Reviewed-by: John Garry <john.garry@huawei.com> Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> Acked-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
39 lines
1.1 KiB
C
39 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
#include "sas_internal.h"
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/export.h>
|
|
#include <scsi/sas.h>
|
|
#include <scsi/libsas.h>
|
|
|
|
/* fill task_status_struct based on SSP response frame */
|
|
void sas_ssp_task_response(struct device *dev, struct sas_task *task,
|
|
struct ssp_response_iu *iu)
|
|
{
|
|
struct task_status_struct *tstat = &task->task_status;
|
|
|
|
tstat->resp = SAS_TASK_COMPLETE;
|
|
|
|
if (iu->datapres == 0)
|
|
tstat->stat = iu->status;
|
|
else if (iu->datapres == 1)
|
|
tstat->stat = iu->resp_data[3];
|
|
else if (iu->datapres == 2) {
|
|
tstat->stat = SAS_SAM_STAT_CHECK_CONDITION;
|
|
tstat->buf_valid_size =
|
|
min_t(int, SAS_STATUS_BUF_SIZE,
|
|
be32_to_cpu(iu->sense_data_len));
|
|
memcpy(tstat->buf, iu->sense_data, tstat->buf_valid_size);
|
|
|
|
if (iu->status != SAM_STAT_CHECK_CONDITION)
|
|
dev_warn(dev, "dev %016llx sent sense data, but stat(0x%x) is not CHECK CONDITION\n",
|
|
SAS_ADDR(task->dev->sas_addr), iu->status);
|
|
}
|
|
else
|
|
/* when datapres contains corrupt/unknown value... */
|
|
tstat->stat = SAS_SAM_STAT_CHECK_CONDITION;
|
|
}
|
|
EXPORT_SYMBOL_GPL(sas_ssp_task_response);
|
|
|