scsi: megaraid_sas: Rework code to get PD and LD list
During FW init, combine the code to get the PD and LD list from FW into a single function. This patch is in preparation for adding support for HOST_DEVICE_LIST DCMD. Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
7c429da45c
Коммит
daa0681118
|
@ -5319,6 +5319,33 @@ fallback:
|
|||
instance->reply_map[cpu] = cpu % instance->msix_vectors;
|
||||
}
|
||||
|
||||
/**
|
||||
* megasas_get_device_list - Get the PD and LD device list from FW.
|
||||
* @instance: Adapter soft state
|
||||
* @return: Success or failure
|
||||
*
|
||||
* Issue DCMDs to Firmware to get the PD and LD list.
|
||||
*/
|
||||
static
|
||||
int megasas_get_device_list(struct megasas_instance *instance)
|
||||
{
|
||||
memset(instance->pd_list, 0,
|
||||
(MEGASAS_MAX_PD * sizeof(struct megasas_pd_list)));
|
||||
memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS);
|
||||
|
||||
if (megasas_get_pd_list(instance) < 0) {
|
||||
dev_err(&instance->pdev->dev, "failed to get PD list\n");
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
if (megasas_ld_list_query(instance,
|
||||
MR_LD_QUERY_TYPE_EXPOSED_TO_HOST)) {
|
||||
dev_err(&instance->pdev->dev, "failed to get LD list\n");
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/**
|
||||
* megasas_init_fw - Initializes the FW
|
||||
* @instance: Adapter soft state
|
||||
|
@ -5571,18 +5598,13 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
|
||||
megasas_setup_jbod_map(instance);
|
||||
|
||||
/** for passthrough
|
||||
* the following function will get the PD LIST.
|
||||
*/
|
||||
memset(instance->pd_list, 0,
|
||||
(MEGASAS_MAX_PD * sizeof(struct megasas_pd_list)));
|
||||
if (megasas_get_pd_list(instance) < 0) {
|
||||
dev_err(&instance->pdev->dev, "failed to get PD list\n");
|
||||
if (megasas_get_device_list(instance) != SUCCESS) {
|
||||
dev_err(&instance->pdev->dev,
|
||||
"%s: megasas_get_device_list failed\n",
|
||||
__func__);
|
||||
goto fail_get_ld_pd_list;
|
||||
}
|
||||
|
||||
memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS);
|
||||
|
||||
/* stream detection initialization */
|
||||
if (instance->adapter_type >= VENTURA_SERIES) {
|
||||
fusion->stream_detect_by_ld =
|
||||
|
@ -5612,10 +5634,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
}
|
||||
}
|
||||
|
||||
if (megasas_ld_list_query(instance,
|
||||
MR_LD_QUERY_TYPE_EXPOSED_TO_HOST))
|
||||
goto fail_get_ld_pd_list;
|
||||
|
||||
/*
|
||||
* Compute the max allowed sectors per IO: The controller info has two
|
||||
* limits on max sectors. Driver should use the minimum of these two.
|
||||
|
|
Загрузка…
Ссылка в новой задаче