/** * isci_register_sas_ha() - This method initializes various lldd * specific members of the sas_ha struct and calls the libsas * sas_register_ha() function. * @isci_host: This parameter specifies the lldd specific wrapper for the * libsas sas_ha struct. * * This method returns an error code indicating sucess or failure. The user * should check for possible memory allocation error return otherwise, a zero * indicates success. */ static int isci_register_sas_ha(struct isci_host *isci_host) { int i; struct sas_ha_struct *sas_ha = &(isci_host->sas_ha); struct asd_sas_phy **sas_phys; struct asd_sas_port **sas_ports; sas_phys = devm_kzalloc(&isci_host->pdev->dev, SCI_MAX_PHYS * sizeof(void *), GFP_KERNEL); if (!sas_phys) return -ENOMEM; sas_ports = devm_kzalloc(&isci_host->pdev->dev, SCI_MAX_PORTS * sizeof(void *), GFP_KERNEL); if (!sas_ports) return -ENOMEM; /*----------------- Libsas Initialization Stuff---------------------- * Set various fields in the sas_ha struct: */ sas_ha->sas_ha_name = DRV_NAME; sas_ha->lldd_module = THIS_MODULE; sas_ha->sas_addr = &isci_host->phys[0].sas_addr[0]; /* set the array of phy and port structs. */ for (i = 0; i < SCI_MAX_PHYS; i++) { sas_phys[i] = &isci_host->phys[i].sas_phy; sas_ports[i] = &isci_host->ports[i].sas_port; } sas_ha->sas_phy = sas_phys; sas_ha->sas_port = sas_ports; sas_ha->num_phys = SCI_MAX_PHYS; sas_ha->lldd_queue_size = ISCI_CAN_QUEUE_VAL; sas_ha->lldd_max_execute_num = 1; sas_ha->strict_wide_ports = 1; sas_register_ha(sas_ha); return 0; }
/** * isci_register_sas_ha() - This method initializes various lldd * specific members of the sas_ha struct and calls the libsas * sas_register_ha() function. * @isci_host: This parameter specifies the lldd specific wrapper for the * libsas sas_ha struct. * * This method returns an error code indicating success or failure. The user * should check for possible memory allocation error return otherwise, a zero * indicates success. */ static int isci_register_sas_ha(struct isci_host *isci_host) { int i; struct sas_ha_struct *sas_ha = &(isci_host->sas_ha); struct asd_sas_phy **sas_phys; struct asd_sas_port **sas_ports; sas_phys = devm_kzalloc(&isci_host->pdev->dev, SCI_MAX_PHYS * sizeof(void *), GFP_KERNEL); if (!sas_phys) return -ENOMEM; sas_ports = devm_kzalloc(&isci_host->pdev->dev, SCI_MAX_PORTS * sizeof(void *), GFP_KERNEL); if (!sas_ports) return -ENOMEM; sas_ha->sas_ha_name = DRV_NAME; sas_ha->lldd_module = THIS_MODULE; sas_ha->sas_addr = &isci_host->phys[0].sas_addr[0]; for (i = 0; i < SCI_MAX_PHYS; i++) { sas_phys[i] = &isci_host->phys[i].sas_phy; sas_ports[i] = &isci_host->sas_ports[i]; } sas_ha->sas_phy = sas_phys; sas_ha->sas_port = sas_ports; sas_ha->num_phys = SCI_MAX_PHYS; sas_ha->lldd_queue_size = ISCI_CAN_QUEUE_VAL; sas_ha->lldd_max_execute_num = 1; sas_ha->strict_wide_ports = 1; sas_register_ha(sas_ha); return 0; }