Commit daa06811 authored by Shivasharan S's avatar Shivasharan S Committed by Martin K. Petersen

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: default avatarShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7c429da4
...@@ -5319,6 +5319,33 @@ static void megasas_setup_reply_map(struct megasas_instance *instance) ...@@ -5319,6 +5319,33 @@ static void megasas_setup_reply_map(struct megasas_instance *instance)
instance->reply_map[cpu] = cpu % instance->msix_vectors; 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 * megasas_init_fw - Initializes the FW
* @instance: Adapter soft state * @instance: Adapter soft state
...@@ -5571,18 +5598,13 @@ static int megasas_init_fw(struct megasas_instance *instance) ...@@ -5571,18 +5598,13 @@ static int megasas_init_fw(struct megasas_instance *instance)
megasas_setup_jbod_map(instance); megasas_setup_jbod_map(instance);
/** for passthrough if (megasas_get_device_list(instance) != SUCCESS) {
* the following function will get the PD LIST. dev_err(&instance->pdev->dev,
*/ "%s: megasas_get_device_list failed\n",
memset(instance->pd_list, 0, __func__);
(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");
goto fail_get_ld_pd_list; goto fail_get_ld_pd_list;
} }
memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS);
/* stream detection initialization */ /* stream detection initialization */
if (instance->adapter_type >= VENTURA_SERIES) { if (instance->adapter_type >= VENTURA_SERIES) {
fusion->stream_detect_by_ld = fusion->stream_detect_by_ld =
...@@ -5612,10 +5634,6 @@ static int megasas_init_fw(struct megasas_instance *instance) ...@@ -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 * Compute the max allowed sectors per IO: The controller info has two
* limits on max sectors. Driver should use the minimum of these two. * limits on max sectors. Driver should use the minimum of these two.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment