Lines Matching defs:ctrl_info
69 static void pqi_take_ctrl_offline(struct pqi_ctrl_info *ctrl_info,
72 static int pqi_scan_scsi_devices(struct pqi_ctrl_info *ctrl_info);
74 static void pqi_start_io(struct pqi_ctrl_info *ctrl_info,
77 static int pqi_submit_raid_request_synchronous(struct pqi_ctrl_info *ctrl_info,
80 static int pqi_aio_submit_io(struct pqi_ctrl_info *ctrl_info,
84 static int pqi_aio_submit_r1_write_io(struct pqi_ctrl_info *ctrl_info,
88 static int pqi_aio_submit_r56_write_io(struct pqi_ctrl_info *ctrl_info,
92 static void pqi_ofa_ctrl_quiesce(struct pqi_ctrl_info *ctrl_info);
93 static void pqi_ofa_ctrl_unquiesce(struct pqi_ctrl_info *ctrl_info);
94 static int pqi_ofa_ctrl_restart(struct pqi_ctrl_info *ctrl_info, unsigned int delay_secs);
95 static void pqi_ofa_setup_host_buffer(struct pqi_ctrl_info *ctrl_info);
96 static void pqi_ofa_free_host_buffer(struct pqi_ctrl_info *ctrl_info);
97 static int pqi_ofa_host_memory_update(struct pqi_ctrl_info *ctrl_info);
98 static int pqi_device_wait_for_pending_io(struct pqi_ctrl_info *ctrl_info,
100 static void pqi_fail_all_outstanding_requests(struct pqi_ctrl_info *ctrl_info);
247 static inline bool pqi_ctrl_offline(struct pqi_ctrl_info *ctrl_info)
249 return !ctrl_info->controller_online;
252 static inline void pqi_check_ctrl_health(struct pqi_ctrl_info *ctrl_info)
254 if (ctrl_info->controller_online)
255 if (!sis_is_firmware_running(ctrl_info))
256 pqi_take_ctrl_offline(ctrl_info, PQI_FIRMWARE_KERNEL_NOT_UP);
267 static inline enum pqi_ctrl_mode pqi_get_ctrl_mode(struct pqi_ctrl_info *ctrl_info)
269 return sis_read_driver_scratch(ctrl_info) & PQI_DRIVER_SCRATCH_PQI_MODE ? PQI_MODE : SIS_MODE;
272 static inline void pqi_save_ctrl_mode(struct pqi_ctrl_info *ctrl_info,
277 driver_scratch = sis_read_driver_scratch(ctrl_info);
284 sis_write_driver_scratch(ctrl_info, driver_scratch);
287 static inline bool pqi_is_fw_triage_supported(struct pqi_ctrl_info *ctrl_info)
289 return (sis_read_driver_scratch(ctrl_info) & PQI_DRIVER_SCRATCH_FW_TRIAGE_SUPPORTED) != 0;
292 static inline void pqi_save_fw_triage_setting(struct pqi_ctrl_info *ctrl_info, bool is_supported)
296 driver_scratch = sis_read_driver_scratch(ctrl_info);
303 sis_write_driver_scratch(ctrl_info, driver_scratch);
306 static inline void pqi_ctrl_block_scan(struct pqi_ctrl_info *ctrl_info)
308 ctrl_info->scan_blocked = true;
309 mutex_lock(&ctrl_info->scan_mutex);
312 static inline void pqi_ctrl_unblock_scan(struct pqi_ctrl_info *ctrl_info)
314 ctrl_info->scan_blocked = false;
315 mutex_unlock(&ctrl_info->scan_mutex);
318 static inline bool pqi_ctrl_scan_blocked(struct pqi_ctrl_info *ctrl_info)
320 return ctrl_info->scan_blocked;
323 static inline void pqi_ctrl_block_device_reset(struct pqi_ctrl_info *ctrl_info)
325 mutex_lock(&ctrl_info->lun_reset_mutex);
328 static inline void pqi_ctrl_unblock_device_reset(struct pqi_ctrl_info *ctrl_info)
330 mutex_unlock(&ctrl_info->lun_reset_mutex);
333 static inline void pqi_scsi_block_requests(struct pqi_ctrl_info *ctrl_info)
339 shost = ctrl_info->scsi_host;
353 static inline void pqi_scsi_unblock_requests(struct pqi_ctrl_info *ctrl_info)
355 scsi_unblock_requests(ctrl_info->scsi_host);
358 static inline void pqi_ctrl_busy(struct pqi_ctrl_info *ctrl_info)
360 atomic_inc(&ctrl_info->num_busy_threads);
363 static inline void pqi_ctrl_unbusy(struct pqi_ctrl_info *ctrl_info)
365 atomic_dec(&ctrl_info->num_busy_threads);
368 static inline bool pqi_ctrl_blocked(struct pqi_ctrl_info *ctrl_info)
370 return ctrl_info->block_requests;
373 static inline void pqi_ctrl_block_requests(struct pqi_ctrl_info *ctrl_info)
375 ctrl_info->block_requests = true;
378 static inline void pqi_ctrl_unblock_requests(struct pqi_ctrl_info *ctrl_info)
380 ctrl_info->block_requests = false;
381 wake_up_all(&ctrl_info->block_requests_wait);
384 static void pqi_wait_if_ctrl_blocked(struct pqi_ctrl_info *ctrl_info)
386 if (!pqi_ctrl_blocked(ctrl_info))
389 atomic_inc(&ctrl_info->num_blocked_threads);
390 wait_event(ctrl_info->block_requests_wait,
391 !pqi_ctrl_blocked(ctrl_info));
392 atomic_dec(&ctrl_info->num_blocked_threads);
397 static inline void pqi_ctrl_wait_until_quiesced(struct pqi_ctrl_info *ctrl_info)
407 while (atomic_read(&ctrl_info->num_busy_threads) >
408 atomic_read(&ctrl_info->num_blocked_threads)) {
410 dev_warn(&ctrl_info->pci_dev->dev,
420 dev_warn(&ctrl_info->pci_dev->dev,
430 static inline void pqi_ctrl_ofa_start(struct pqi_ctrl_info *ctrl_info)
432 mutex_lock(&ctrl_info->ofa_mutex);
435 static inline void pqi_ctrl_ofa_done(struct pqi_ctrl_info *ctrl_info)
437 mutex_unlock(&ctrl_info->ofa_mutex);
440 static inline void pqi_wait_until_ofa_finished(struct pqi_ctrl_info *ctrl_info)
442 mutex_lock(&ctrl_info->ofa_mutex);
443 mutex_unlock(&ctrl_info->ofa_mutex);
446 static inline bool pqi_ofa_in_progress(struct pqi_ctrl_info *ctrl_info)
448 return mutex_is_locked(&ctrl_info->ofa_mutex);
492 static inline void pqi_schedule_rescan_worker_with_delay(struct pqi_ctrl_info *ctrl_info,
495 if (pqi_ctrl_offline(ctrl_info))
498 schedule_delayed_work(&ctrl_info->rescan_work, delay);
501 static inline void pqi_schedule_rescan_worker(struct pqi_ctrl_info *ctrl_info)
503 pqi_schedule_rescan_worker_with_delay(ctrl_info, 0);
508 static inline void pqi_schedule_rescan_worker_delayed(struct pqi_ctrl_info *ctrl_info)
510 pqi_schedule_rescan_worker_with_delay(ctrl_info, PQI_RESCAN_WORK_DELAY);
513 static inline void pqi_cancel_rescan_worker(struct pqi_ctrl_info *ctrl_info)
515 cancel_delayed_work_sync(&ctrl_info->rescan_work);
518 static inline u32 pqi_read_heartbeat_counter(struct pqi_ctrl_info *ctrl_info)
520 if (!ctrl_info->heartbeat_counter)
523 return readl(ctrl_info->heartbeat_counter);
526 static inline u8 pqi_read_soft_reset_status(struct pqi_ctrl_info *ctrl_info)
528 return readb(ctrl_info->soft_reset_status);
531 static inline void pqi_clear_soft_reset_status(struct pqi_ctrl_info *ctrl_info)
535 status = pqi_read_soft_reset_status(ctrl_info);
537 writeb(status, ctrl_info->soft_reset_status);
607 static int pqi_build_raid_path_request(struct pqi_ctrl_info *ctrl_info,
643 if (ctrl_info->rpl_extended_format_4_5_supported)
648 cdb[1] = ctrl_info->ciss_report_log_flags;
694 dev_err(&ctrl_info->pci_dev->dev, "unknown command 0x%c\n", cmd);
713 return pqi_map_single(ctrl_info->pci_dev, &request->sg_descriptors[0],
725 static inline struct pqi_io_request *pqi_alloc_io_request(struct pqi_ctrl_info *ctrl_info, struct scsi_cmnd *scmd)
734 io_request = &ctrl_info->io_request_pool[i];
747 io_request = &ctrl_info->io_request_pool[ctrl_info->scsi_ml_can_queue + i];
766 static int pqi_send_scsi_raid_request(struct pqi_ctrl_info *ctrl_info, u8 cmd,
774 rc = pqi_build_raid_path_request(ctrl_info, &request, cmd, scsi3addr,
779 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, error_info);
781 pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
788 static inline int pqi_send_ctrl_raid_request(struct pqi_ctrl_info *ctrl_info,
791 return pqi_send_scsi_raid_request(ctrl_info, cmd, RAID_CTLR_LUNID,
795 static inline int pqi_send_ctrl_raid_with_error(struct pqi_ctrl_info *ctrl_info,
799 return pqi_send_scsi_raid_request(ctrl_info, cmd, RAID_CTLR_LUNID,
803 static inline int pqi_identify_controller(struct pqi_ctrl_info *ctrl_info,
806 return pqi_send_ctrl_raid_request(ctrl_info, BMIC_IDENTIFY_CONTROLLER,
810 static inline int pqi_sense_subsystem_info(struct pqi_ctrl_info *ctrl_info,
813 return pqi_send_ctrl_raid_request(ctrl_info,
818 static inline int pqi_scsi_inquiry(struct pqi_ctrl_info *ctrl_info,
821 return pqi_send_scsi_raid_request(ctrl_info, INQUIRY, scsi3addr,
825 static int pqi_identify_physical_device(struct pqi_ctrl_info *ctrl_info,
834 rc = pqi_build_raid_path_request(ctrl_info, &request,
844 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
846 pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
882 static int pqi_get_advanced_raid_bypass_config(struct pqi_ctrl_info *ctrl_info)
893 rc = pqi_build_raid_path_request(ctrl_info, &request, BMIC_SENSE_FEATURE, RAID_CTLR_LUNID,
901 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
903 pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1, dir);
922 ctrl_info->max_transfer_encrypted_sas_sata =
926 ctrl_info->max_transfer_encrypted_nvme =
930 ctrl_info->max_write_raid_5_6 =
934 ctrl_info->max_write_raid_1_10_2drive =
938 ctrl_info->max_write_raid_1_10_3drive =
948 static int pqi_flush_cache(struct pqi_ctrl_info *ctrl_info,
960 rc = pqi_send_ctrl_raid_request(ctrl_info, SA_FLUSH_CACHE, flush_cache,
968 int pqi_csmi_smp_passthru(struct pqi_ctrl_info *ctrl_info,
972 return pqi_send_ctrl_raid_with_error(ctrl_info, BMIC_CSMI_PASSTHRU,
978 static int pqi_set_diag_rescan(struct pqi_ctrl_info *ctrl_info)
987 rc = pqi_send_ctrl_raid_request(ctrl_info, BMIC_SENSE_DIAG_OPTIONS,
994 rc = pqi_send_ctrl_raid_request(ctrl_info, BMIC_SET_DIAG_OPTIONS, diag,
1003 static inline int pqi_write_host_wellness(struct pqi_ctrl_info *ctrl_info,
1006 return pqi_send_ctrl_raid_request(ctrl_info, BMIC_WRITE_HOST_WELLNESS,
1024 struct pqi_ctrl_info *ctrl_info)
1052 rc = pqi_write_host_wellness(ctrl_info, buffer, buffer_length);
1073 struct pqi_ctrl_info *ctrl_info)
1115 rc = pqi_write_host_wellness(ctrl_info, buffer, buffer_length);
1127 struct pqi_ctrl_info *ctrl_info;
1129 ctrl_info = container_of(to_delayed_work(work), struct pqi_ctrl_info,
1132 rc = pqi_write_current_time_to_host_wellness(ctrl_info);
1134 dev_warn(&ctrl_info->pci_dev->dev,
1137 schedule_delayed_work(&ctrl_info->update_time_work,
1141 static inline void pqi_schedule_update_time_worker(struct pqi_ctrl_info *ctrl_info)
1143 schedule_delayed_work(&ctrl_info->update_time_work, 0);
1146 static inline void pqi_cancel_update_time_worker(struct pqi_ctrl_info *ctrl_info)
1148 cancel_delayed_work_sync(&ctrl_info->update_time_work);
1151 static inline int pqi_report_luns(struct pqi_ctrl_info *ctrl_info, u8 cmd, void *buffer,
1154 return pqi_send_ctrl_raid_request(ctrl_info, cmd, buffer, buffer_length);
1157 static int pqi_report_phys_logical_luns(struct pqi_ctrl_info *ctrl_info, u8 cmd, void **buffer)
1172 rc = pqi_report_luns(ctrl_info, cmd, report_lun_header, sizeof(*report_lun_header));
1192 rc = pqi_report_luns(ctrl_info, cmd, lun_data, lun_data_length);
1218 static inline int pqi_report_phys_luns(struct pqi_ctrl_info *ctrl_info, void **buffer)
1229 rc = pqi_report_phys_logical_luns(ctrl_info, CISS_REPORT_PHYS, &rpl_list);
1233 if (ctrl_info->rpl_extended_format_4_5_supported) {
1240 dev_err(&ctrl_info->pci_dev->dev,
1245 dev_warn(&ctrl_info->pci_dev->dev,
1279 static inline int pqi_report_logical_luns(struct pqi_ctrl_info *ctrl_info, void **buffer)
1281 return pqi_report_phys_logical_luns(ctrl_info, CISS_REPORT_LOG, buffer);
1284 static int pqi_get_device_lists(struct pqi_ctrl_info *ctrl_info,
1295 rc = pqi_report_phys_luns(ctrl_info, (void **)physdev_list);
1297 dev_err(&ctrl_info->pci_dev->dev,
1300 rc = pqi_report_logical_luns(ctrl_info, (void **)logdev_list);
1302 dev_err(&ctrl_info->pci_dev->dev,
1394 static void pqi_get_raid_level(struct pqi_ctrl_info *ctrl_info,
1405 rc = pqi_scsi_inquiry(ctrl_info, device->scsi3addr,
1418 static int pqi_validate_raid_map(struct pqi_ctrl_info *ctrl_info,
1458 dev_warn(&ctrl_info->pci_dev->dev,
1466 static int pqi_get_raid_map(struct pqi_ctrl_info *ctrl_info,
1477 rc = pqi_send_scsi_raid_request(ctrl_info, CISS_GET_RAID_MAP,
1492 rc = pqi_send_scsi_raid_request(ctrl_info, CISS_GET_RAID_MAP,
1499 dev_warn(&ctrl_info->pci_dev->dev,
1508 rc = pqi_validate_raid_map(ctrl_info, device, raid_map);
1522 static void pqi_set_max_transfer_encrypted(struct pqi_ctrl_info *ctrl_info,
1525 if (!ctrl_info->lv_drive_type_mix_valid) {
1539 ctrl_info->max_transfer_encrypted_sas_sata;
1543 ctrl_info->max_transfer_encrypted_nvme;
1549 min(ctrl_info->max_transfer_encrypted_sas_sata,
1550 ctrl_info->max_transfer_encrypted_nvme);
1555 static void pqi_get_raid_bypass_status(struct pqi_ctrl_info *ctrl_info,
1566 rc = pqi_scsi_inquiry(ctrl_info, device->scsi3addr,
1580 pqi_get_raid_map(ctrl_info, device) == 0) {
1584 pqi_set_max_transfer_encrypted(ctrl_info, device);
1595 static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info,
1609 rc = pqi_scsi_inquiry(ctrl_info, device->scsi3addr,
1637 static int pqi_get_physical_device_info(struct pqi_ctrl_info *ctrl_info,
1645 rc = pqi_identify_physical_device(ctrl_info, device,
1689 static int pqi_get_logical_device_info(struct pqi_ctrl_info *ctrl_info,
1700 rc = pqi_scsi_inquiry(ctrl_info, device->scsi3addr, 0, buffer, 64);
1717 pqi_get_raid_level(ctrl_info, device);
1718 pqi_get_raid_bypass_status(ctrl_info, device);
1719 pqi_get_volume_status(ctrl_info, device);
1744 static int pqi_get_device_info_phys_logical(struct pqi_ctrl_info *ctrl_info,
1754 rc = pqi_get_logical_device_info(ctrl_info, device);
1756 rc = pqi_get_physical_device_info(ctrl_info, device, id_phys);
1761 static int pqi_get_device_info(struct pqi_ctrl_info *ctrl_info,
1767 rc = pqi_get_device_info_phys_logical(ctrl_info, device, id_phys);
1775 static void pqi_show_volume_status(struct pqi_ctrl_info *ctrl_info,
1872 dev_info(&ctrl_info->pci_dev->dev,
1874 ctrl_info->scsi_host->host_no,
1880 struct pqi_ctrl_info *ctrl_info;
1882 ctrl_info = container_of(to_delayed_work(work), struct pqi_ctrl_info,
1885 pqi_scan_scsi_devices(ctrl_info);
1888 static int pqi_add_device(struct pqi_ctrl_info *ctrl_info,
1894 rc = scsi_add_device(ctrl_info->scsi_host, device->bus,
1897 rc = pqi_add_sas_device(ctrl_info->sas_host, device);
1904 static inline void pqi_remove_device(struct pqi_ctrl_info *ctrl_info, struct pqi_scsi_dev *device)
1910 rc = pqi_device_wait_for_pending_io(ctrl_info, device, lun,
1913 dev_err(&ctrl_info->pci_dev->dev,
1915 ctrl_info->scsi_host->host_no, device->bus,
1930 static struct pqi_scsi_dev *pqi_find_scsi_dev(struct pqi_ctrl_info *ctrl_info,
1935 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry)
1959 static enum pqi_find_result pqi_scsi_find_entry(struct pqi_ctrl_info *ctrl_info,
1964 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry) {
1989 static void pqi_dev_info(struct pqi_ctrl_info *ctrl_info,
1996 "%d:%d:", ctrl_info->scsi_host->host_no, device->bus);
2047 dev_info(&ctrl_info->pci_dev->dev, "%s %s\n", action, buffer);
2069 static void pqi_scsi_update_device(struct pqi_ctrl_info *ctrl_info,
2135 static inline void pqi_fixup_botched_add(struct pqi_ctrl_info *ctrl_info,
2140 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
2142 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
2179 static void pqi_update_device_list(struct pqi_ctrl_info *ctrl_info,
2199 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
2202 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry)
2208 find_result = pqi_scsi_find_entry(ctrl_info, device,
2219 pqi_scsi_update_device(ctrl_info, matching_device, device);
2239 list_for_each_entry_safe(device, next, &ctrl_info->scsi_device_list,
2255 &ctrl_info->scsi_device_list);
2262 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
2269 if (pqi_ofa_in_progress(ctrl_info)) {
2273 pqi_ctrl_unblock_device_reset(ctrl_info);
2274 pqi_scsi_unblock_requests(ctrl_info);
2280 pqi_dev_info(ctrl_info, "offline", device);
2281 pqi_show_volume_status(ctrl_info, device);
2283 pqi_dev_info(ctrl_info, "removed", device);
2286 pqi_remove_device(ctrl_info, device);
2295 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry) {
2299 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
2302 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
2305 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
2313 rc = pqi_add_device(ctrl_info, device);
2315 pqi_dev_info(ctrl_info, "added", device);
2317 dev_warn(&ctrl_info->pci_dev->dev,
2319 ctrl_info->scsi_host->host_no,
2322 pqi_fixup_botched_add(ctrl_info, device);
2371 static int pqi_update_scsi_devices(struct pqi_ctrl_info *ctrl_info)
2395 rc = pqi_get_device_lists(ctrl_info, &physdev_list, &logdev_list);
2422 dev_warn(&ctrl_info->pci_dev->dev, "%s\n",
2441 ctrl_info->lv_drive_type_mix_valid = true;
2449 dev_warn(&ctrl_info->pci_dev->dev, "%s\n", out_of_memory_msg);
2457 dev_warn(&ctrl_info->pci_dev->dev, "%s\n",
2510 rc = pqi_get_device_info(ctrl_info, device, id_phys);
2512 dev_warn(&ctrl_info->pci_dev->dev, "%s\n",
2518 dev_warn(&ctrl_info->pci_dev->dev,
2523 dev_warn(&ctrl_info->pci_dev->dev,
2556 pqi_update_device_list(ctrl_info, new_device_list, num_valid_devices);
2575 static int pqi_scan_scsi_devices(struct pqi_ctrl_info *ctrl_info)
2580 if (pqi_ctrl_offline(ctrl_info))
2583 mutex_acquired = mutex_trylock(&ctrl_info->scan_mutex);
2586 if (pqi_ctrl_scan_blocked(ctrl_info))
2588 pqi_schedule_rescan_worker_delayed(ctrl_info);
2592 rc = pqi_update_scsi_devices(ctrl_info);
2593 if (rc && !pqi_ctrl_scan_blocked(ctrl_info))
2594 pqi_schedule_rescan_worker_delayed(ctrl_info);
2596 mutex_unlock(&ctrl_info->scan_mutex);
2603 struct pqi_ctrl_info *ctrl_info;
2605 ctrl_info = shost_to_hba(shost);
2607 pqi_scan_scsi_devices(ctrl_info);
2615 struct pqi_ctrl_info *ctrl_info;
2617 ctrl_info = shost_priv(shost);
2619 return !mutex_is_locked(&ctrl_info->scan_mutex);
2646 static bool pqi_aio_raid_level_supported(struct pqi_ctrl_info *ctrl_info,
2655 if (rmd->is_write && (!ctrl_info->enable_r1_writes ||
2656 rmd->data_length > ctrl_info->max_write_raid_1_10_2drive))
2660 if (rmd->is_write && (!ctrl_info->enable_r1_writes ||
2661 rmd->data_length > ctrl_info->max_write_raid_1_10_3drive))
2665 if (rmd->is_write && (!ctrl_info->enable_r5_writes ||
2666 rmd->data_length > ctrl_info->max_write_raid_5_6))
2670 if (rmd->is_write && (!ctrl_info->enable_r6_writes ||
2671 rmd->data_length > ctrl_info->max_write_raid_5_6))
2730 static int pci_get_aio_common_raid_map_values(struct pqi_ctrl_info *ctrl_info,
2964 static int pqi_raid_bypass_submit_scsi_cmd(struct pqi_ctrl_info *ctrl_info,
2982 if (!pqi_aio_raid_level_supported(ctrl_info, &rmd))
2990 rc = pci_get_aio_common_raid_map_values(ctrl_info, &rmd, raid_map);
3047 return pqi_aio_submit_r1_write_io(ctrl_info, scmd, queue_group,
3051 return pqi_aio_submit_r56_write_io(ctrl_info, scmd, queue_group,
3056 return pqi_aio_submit_io(ctrl_info, scmd, rmd.aio_handle,
3075 static int pqi_wait_for_pqi_mode_ready(struct pqi_ctrl_info *ctrl_info)
3082 pqi_registers = ctrl_info->pqi_registers;
3091 dev_err(&ctrl_info->pci_dev->dev,
3103 dev_err(&ctrl_info->pci_dev->dev,
3115 dev_err(&ctrl_info->pci_dev->dev,
3136 struct pqi_ctrl_info *ctrl_info;
3144 ctrl_info = shost_to_hba(sdev->host);
3145 pqi_schedule_rescan_worker(ctrl_info);
3146 dev_err(&ctrl_info->pci_dev->dev, "re-scanning %s scsi %d:%d:%d:%d\n",
3147 path, ctrl_info->scsi_host->host_no, device->bus,
3222 struct pqi_ctrl_info *ctrl_info = shost_to_hba(scmd->device->host);
3229 ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun);
3237 sshdr.ascq, ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun);
3362 static int pqi_interpret_task_management_response(struct pqi_ctrl_info *ctrl_info,
3384 dev_err(&ctrl_info->pci_dev->dev,
3390 static inline void pqi_invalid_response(struct pqi_ctrl_info *ctrl_info,
3393 pqi_take_ctrl_offline(ctrl_info, ctrl_shutdown_reason);
3396 static int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info, struct pqi_queue_group *queue_group)
3410 if (oq_pi >= ctrl_info->num_elements_per_oq) {
3411 pqi_invalid_response(ctrl_info, PQI_IO_PI_OUT_OF_RANGE);
3412 dev_err(&ctrl_info->pci_dev->dev,
3414 oq_pi, ctrl_info->num_elements_per_oq - 1, oq_ci);
3425 if (request_id >= ctrl_info->max_io_slots) {
3426 pqi_invalid_response(ctrl_info, PQI_INVALID_REQ_ID);
3427 dev_err(&ctrl_info->pci_dev->dev,
3429 request_id, ctrl_info->max_io_slots - 1, oq_pi, oq_ci);
3433 io_request = &ctrl_info->io_request_pool[request_id];
3435 pqi_invalid_response(ctrl_info, PQI_UNMATCHED_REQ_ID);
3436 dev_err(&ctrl_info->pci_dev->dev,
3456 io_request->status = pqi_interpret_task_management_response(ctrl_info,
3465 io_request->error_info = ctrl_info->error_buffer +
3471 pqi_invalid_response(ctrl_info, PQI_UNEXPECTED_IU_TYPE);
3472 dev_err(&ctrl_info->pci_dev->dev,
3484 oq_ci = (oq_ci + 1) % ctrl_info->num_elements_per_oq;
3508 static void pqi_send_event_ack(struct pqi_ctrl_info *ctrl_info,
3517 queue_group = &ctrl_info->queue_groups[PQI_DEFAULT_QUEUE_GROUP];
3527 ctrl_info->num_elements_per_iq))
3533 if (pqi_ctrl_offline(ctrl_info))
3542 iq_pi = (iq_pi + 1) % ctrl_info->num_elements_per_iq;
3554 static void pqi_acknowledge_event(struct pqi_ctrl_info *ctrl_info,
3568 pqi_send_event_ack(ctrl_info, &request, sizeof(request));
3575 struct pqi_ctrl_info *ctrl_info)
3583 status = pqi_read_soft_reset_status(ctrl_info);
3590 if (!sis_is_firmware_running(ctrl_info))
3594 dev_warn(&ctrl_info->pci_dev->dev,
3603 static void pqi_process_soft_reset(struct pqi_ctrl_info *ctrl_info)
3609 if (ctrl_info->soft_reset_handshake_supported)
3610 reset_status = pqi_poll_for_soft_reset_status(ctrl_info);
3621 dev_info(&ctrl_info->pci_dev->dev,
3623 sis_soft_reset(ctrl_info);
3626 ctrl_info->pqi_mode_enabled = false;
3627 pqi_save_ctrl_mode(ctrl_info, SIS_MODE);
3628 rc = pqi_ofa_ctrl_restart(ctrl_info, delay_secs);
3629 pqi_ofa_free_host_buffer(ctrl_info);
3630 pqi_ctrl_ofa_done(ctrl_info);
3631 dev_info(&ctrl_info->pci_dev->dev,
3636 dev_info(&ctrl_info->pci_dev->dev,
3638 if (ctrl_info->soft_reset_handshake_supported)
3639 pqi_clear_soft_reset_status(ctrl_info);
3640 pqi_ofa_free_host_buffer(ctrl_info);
3641 pqi_ctrl_ofa_done(ctrl_info);
3642 pqi_ofa_ctrl_unquiesce(ctrl_info);
3647 dev_err(&ctrl_info->pci_dev->dev,
3650 pqi_ofa_free_host_buffer(ctrl_info);
3651 pqi_ctrl_ofa_done(ctrl_info);
3652 pqi_ofa_ctrl_unquiesce(ctrl_info);
3653 pqi_take_ctrl_offline(ctrl_info, PQI_OFA_RESPONSE_TIMEOUT);
3660 struct pqi_ctrl_info *ctrl_info;
3662 ctrl_info = container_of(work, struct pqi_ctrl_info, ofa_memory_alloc_work);
3664 pqi_ctrl_ofa_start(ctrl_info);
3665 pqi_ofa_setup_host_buffer(ctrl_info);
3666 pqi_ofa_host_memory_update(ctrl_info);
3671 struct pqi_ctrl_info *ctrl_info;
3674 ctrl_info = container_of(work, struct pqi_ctrl_info, ofa_quiesce_work);
3676 event = &ctrl_info->events[pqi_event_type_to_event_index(PQI_EVENT_TYPE_OFA)];
3678 pqi_ofa_ctrl_quiesce(ctrl_info);
3679 pqi_acknowledge_event(ctrl_info, event);
3680 pqi_process_soft_reset(ctrl_info);
3683 static bool pqi_ofa_process_event(struct pqi_ctrl_info *ctrl_info,
3692 dev_info(&ctrl_info->pci_dev->dev,
3694 schedule_work(&ctrl_info->ofa_memory_alloc_work);
3697 dev_info(&ctrl_info->pci_dev->dev,
3699 schedule_work(&ctrl_info->ofa_quiesce_work);
3703 dev_info(&ctrl_info->pci_dev->dev,
3705 ctrl_info->ofa_cancel_reason);
3706 pqi_ofa_free_host_buffer(ctrl_info);
3707 pqi_ctrl_ofa_done(ctrl_info);
3710 dev_err(&ctrl_info->pci_dev->dev,
3719 static void pqi_mark_volumes_for_rescan(struct pqi_ctrl_info *ctrl_info)
3724 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
3726 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry) {
3731 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
3734 static void pqi_disable_raid_bypass(struct pqi_ctrl_info *ctrl_info)
3739 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
3741 list_for_each_entry(device, &ctrl_info->scsi_device_list, scsi_device_list_entry)
3745 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
3752 struct pqi_ctrl_info *ctrl_info;
3756 ctrl_info = container_of(work, struct pqi_ctrl_info, event_work);
3758 pqi_ctrl_busy(ctrl_info);
3759 pqi_wait_if_ctrl_blocked(ctrl_info);
3760 if (pqi_ctrl_offline(ctrl_info))
3764 event = ctrl_info->events;
3769 ack_event = pqi_ofa_process_event(ctrl_info, event);
3774 pqi_mark_volumes_for_rescan(ctrl_info);
3776 pqi_disable_raid_bypass(ctrl_info);
3779 pqi_acknowledge_event(ctrl_info, event);
3787 pqi_schedule_rescan_worker_with_delay(ctrl_info,
3791 pqi_ctrl_unbusy(ctrl_info);
3800 struct pqi_ctrl_info *ctrl_info = from_timer(ctrl_info, t, heartbeat_timer);
3802 pqi_check_ctrl_health(ctrl_info);
3803 if (pqi_ctrl_offline(ctrl_info))
3806 num_interrupts = atomic_read(&ctrl_info->num_interrupts);
3807 heartbeat_count = pqi_read_heartbeat_counter(ctrl_info);
3809 if (num_interrupts == ctrl_info->previous_num_interrupts) {
3810 if (heartbeat_count == ctrl_info->previous_heartbeat_count) {
3811 dev_err(&ctrl_info->pci_dev->dev,
3814 pqi_take_ctrl_offline(ctrl_info, PQI_NO_HEARTBEAT);
3818 ctrl_info->previous_num_interrupts = num_interrupts;
3821 ctrl_info->previous_heartbeat_count = heartbeat_count;
3822 mod_timer(&ctrl_info->heartbeat_timer,
3826 static void pqi_start_heartbeat_timer(struct pqi_ctrl_info *ctrl_info)
3828 if (!ctrl_info->heartbeat_counter)
3831 ctrl_info->previous_num_interrupts =
3832 atomic_read(&ctrl_info->num_interrupts);
3833 ctrl_info->previous_heartbeat_count =
3834 pqi_read_heartbeat_counter(ctrl_info);
3836 ctrl_info->heartbeat_timer.expires =
3838 add_timer(&ctrl_info->heartbeat_timer);
3841 static inline void pqi_stop_heartbeat_timer(struct pqi_ctrl_info *ctrl_info)
3843 del_timer_sync(&ctrl_info->heartbeat_timer);
3846 static void pqi_ofa_capture_event_payload(struct pqi_ctrl_info *ctrl_info,
3851 ctrl_info->ofa_bytes_requested =
3855 ctrl_info->ofa_cancel_reason =
3861 static int pqi_process_event_intr(struct pqi_ctrl_info *ctrl_info)
3871 event_queue = &ctrl_info->event_queue;
3878 pqi_invalid_response(ctrl_info, PQI_EVENT_PI_OUT_OF_RANGE);
3879 dev_err(&ctrl_info->pci_dev->dev,
3894 event = &ctrl_info->events[event_index];
3901 pqi_ofa_capture_event_payload(ctrl_info, event, response);
3910 schedule_work(&ctrl_info->event_work);
3918 static inline void pqi_configure_legacy_intx(struct pqi_ctrl_info *ctrl_info, bool enable_intx)
3924 pqi_registers = ctrl_info->pqi_registers;
3936 static void pqi_change_irq_mode(struct pqi_ctrl_info *ctrl_info,
3939 switch (ctrl_info->irq_mode) {
3945 pqi_configure_legacy_intx(ctrl_info, true);
3946 sis_enable_intx(ctrl_info);
3955 pqi_configure_legacy_intx(ctrl_info, false);
3956 sis_enable_msix(ctrl_info);
3961 pqi_configure_legacy_intx(ctrl_info, false);
3968 sis_enable_msix(ctrl_info);
3971 pqi_configure_legacy_intx(ctrl_info, true);
3972 sis_enable_intx(ctrl_info);
3980 ctrl_info->irq_mode = new_mode;
3985 static inline bool pqi_is_valid_irq(struct pqi_ctrl_info *ctrl_info)
3990 switch (ctrl_info->irq_mode) {
3995 intx_status = readl(&ctrl_info->pqi_registers->legacy_intx_status);
4012 struct pqi_ctrl_info *ctrl_info;
4018 ctrl_info = queue_group->ctrl_info;
4020 if (!pqi_is_valid_irq(ctrl_info))
4023 num_io_responses_handled = pqi_process_io_intr(ctrl_info, queue_group);
4027 if (irq == ctrl_info->event_irq) {
4028 num_events_handled = pqi_process_event_intr(ctrl_info);
4036 atomic_inc(&ctrl_info->num_interrupts);
4038 pqi_start_io(ctrl_info, queue_group, RAID_PATH, NULL);
4039 pqi_start_io(ctrl_info, queue_group, AIO_PATH, NULL);
4045 static int pqi_request_irqs(struct pqi_ctrl_info *ctrl_info)
4047 struct pci_dev *pci_dev = ctrl_info->pci_dev;
4051 ctrl_info->event_irq = pci_irq_vector(pci_dev, 0);
4053 for (i = 0; i < ctrl_info->num_msix_vectors_enabled; i++) {
4055 DRIVER_NAME_SHORT, &ctrl_info->queue_groups[i]);
4062 ctrl_info->num_msix_vectors_initialized++;
4068 static void pqi_free_irqs(struct pqi_ctrl_info *ctrl_info)
4072 for (i = 0; i < ctrl_info->num_msix_vectors_initialized; i++)
4073 free_irq(pci_irq_vector(ctrl_info->pci_dev, i),
4074 &ctrl_info->queue_groups[i]);
4076 ctrl_info->num_msix_vectors_initialized = 0;
4079 static int pqi_enable_msix_interrupts(struct pqi_ctrl_info *ctrl_info)
4087 num_vectors_enabled = pci_alloc_irq_vectors(ctrl_info->pci_dev,
4088 PQI_MIN_MSIX_VECTORS, ctrl_info->num_queue_groups,
4091 dev_err(&ctrl_info->pci_dev->dev,
4097 ctrl_info->num_msix_vectors_enabled = num_vectors_enabled;
4098 ctrl_info->irq_mode = IRQ_MODE_MSIX;
4102 static void pqi_disable_msix_interrupts(struct pqi_ctrl_info *ctrl_info)
4104 if (ctrl_info->num_msix_vectors_enabled) {
4105 pci_free_irq_vectors(ctrl_info->pci_dev);
4106 ctrl_info->num_msix_vectors_enabled = 0;
4110 static int pqi_alloc_operational_queues(struct pqi_ctrl_info *ctrl_info)
4126 ctrl_info->num_elements_per_iq;
4129 ctrl_info->num_elements_per_oq;
4130 num_inbound_queues = ctrl_info->num_queue_groups * 2;
4131 num_outbound_queues = ctrl_info->num_queue_groups;
4132 num_queue_indexes = (ctrl_info->num_queue_groups * 3) + 1;
4164 ctrl_info->queue_memory_base =
4165 dma_alloc_coherent(&ctrl_info->pci_dev->dev, alloc_length,
4166 &ctrl_info->queue_memory_base_dma_handle,
4169 if (!ctrl_info->queue_memory_base)
4172 ctrl_info->queue_memory_length = alloc_length;
4174 element_array = PTR_ALIGN(ctrl_info->queue_memory_base,
4177 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
4178 queue_group = &ctrl_info->queue_groups[i];
4181 ctrl_info->queue_memory_base_dma_handle +
4182 (element_array - ctrl_info->queue_memory_base);
4188 ctrl_info->queue_memory_base_dma_handle +
4189 (element_array - ctrl_info->queue_memory_base);
4195 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
4196 queue_group = &ctrl_info->queue_groups[i];
4199 ctrl_info->queue_memory_base_dma_handle +
4200 (element_array - ctrl_info->queue_memory_base);
4206 ctrl_info->event_queue.oq_element_array = element_array;
4207 ctrl_info->event_queue.oq_element_array_bus_addr =
4208 ctrl_info->queue_memory_base_dma_handle +
4209 (element_array - ctrl_info->queue_memory_base);
4216 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
4217 queue_group = &ctrl_info->queue_groups[i];
4220 ctrl_info->queue_memory_base_dma_handle +
4222 (void __iomem *)ctrl_info->queue_memory_base);
4228 ctrl_info->queue_memory_base_dma_handle +
4230 (void __iomem *)ctrl_info->queue_memory_base);
4236 ctrl_info->queue_memory_base_dma_handle +
4238 (void __iomem *)ctrl_info->queue_memory_base);
4244 ctrl_info->event_queue.oq_pi = next_queue_index;
4245 ctrl_info->event_queue.oq_pi_bus_addr =
4246 ctrl_info->queue_memory_base_dma_handle +
4248 (void __iomem *)ctrl_info->queue_memory_base);
4253 static void pqi_init_operational_queues(struct pqi_ctrl_info *ctrl_info)
4263 for (i = 0; i < ctrl_info->num_queue_groups; i++)
4264 ctrl_info->queue_groups[i].ctrl_info = ctrl_info;
4271 ctrl_info->event_queue.oq_id = next_oq_id++;
4272 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
4273 ctrl_info->queue_groups[i].iq_id[RAID_PATH] = next_iq_id++;
4274 ctrl_info->queue_groups[i].iq_id[AIO_PATH] = next_iq_id++;
4275 ctrl_info->queue_groups[i].oq_id = next_oq_id++;
4282 ctrl_info->event_queue.int_msg_num = 0;
4283 for (i = 0; i < ctrl_info->num_queue_groups; i++)
4284 ctrl_info->queue_groups[i].int_msg_num = i;
4286 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
4287 spin_lock_init(&ctrl_info->queue_groups[i].submit_lock[0]);
4288 spin_lock_init(&ctrl_info->queue_groups[i].submit_lock[1]);
4289 INIT_LIST_HEAD(&ctrl_info->queue_groups[i].request_list[0]);
4290 INIT_LIST_HEAD(&ctrl_info->queue_groups[i].request_list[1]);
4294 static int pqi_alloc_admin_queues(struct pqi_ctrl_info *ctrl_info)
4303 ctrl_info->admin_queue_memory_base =
4304 dma_alloc_coherent(&ctrl_info->pci_dev->dev, alloc_length,
4305 &ctrl_info->admin_queue_memory_base_dma_handle,
4308 if (!ctrl_info->admin_queue_memory_base)
4311 ctrl_info->admin_queue_memory_length = alloc_length;
4313 admin_queues = &ctrl_info->admin_queues;
4314 admin_queues_aligned = PTR_ALIGN(ctrl_info->admin_queue_memory_base,
4326 ctrl_info->admin_queue_memory_base_dma_handle +
4328 ctrl_info->admin_queue_memory_base);
4330 ctrl_info->admin_queue_memory_base_dma_handle +
4332 ctrl_info->admin_queue_memory_base);
4334 ctrl_info->admin_queue_memory_base_dma_handle +
4336 (void __iomem *)ctrl_info->admin_queue_memory_base);
4338 ctrl_info->admin_queue_memory_base_dma_handle +
4340 (void __iomem *)ctrl_info->admin_queue_memory_base);
4348 static int pqi_create_admin_queues(struct pqi_ctrl_info *ctrl_info)
4356 pqi_registers = ctrl_info->pqi_registers;
4357 admin_queues = &ctrl_info->admin_queues;
4391 admin_queues->iq_pi = ctrl_info->iomem_base +
4394 admin_queues->oq_ci = ctrl_info->iomem_base +
4401 static void pqi_submit_admin_request(struct pqi_ctrl_info *ctrl_info,
4408 admin_queues = &ctrl_info->admin_queues;
4428 static int pqi_poll_for_admin_response(struct pqi_ctrl_info *ctrl_info,
4436 admin_queues = &ctrl_info->admin_queues;
4446 dev_err(&ctrl_info->pci_dev->dev,
4450 if (!sis_is_firmware_running(ctrl_info))
4465 static void pqi_start_io(struct pqi_ctrl_info *ctrl_info,
4504 ctrl_info->num_elements_per_iq))
4514 ctrl_info->num_elements_per_iq - iq_pi;
4528 ctrl_info->num_elements_per_iq;
4547 static int pqi_wait_for_completion_io(struct pqi_ctrl_info *ctrl_info,
4559 pqi_check_ctrl_health(ctrl_info);
4560 if (pqi_ctrl_offline(ctrl_info)) {
4605 static int pqi_submit_raid_request_synchronous(struct pqi_ctrl_info *ctrl_info,
4615 if (down_interruptible(&ctrl_info->sync_request_sem))
4618 down(&ctrl_info->sync_request_sem);
4621 pqi_ctrl_busy(ctrl_info);
4627 pqi_wait_if_ctrl_blocked(ctrl_info);
4629 if (pqi_ctrl_offline(ctrl_info)) {
4634 io_request = pqi_alloc_io_request(ctrl_info, NULL);
4650 pqi_start_io(ctrl_info, &ctrl_info->queue_groups[PQI_DEFAULT_QUEUE_GROUP], RAID_PATH,
4653 pqi_wait_for_completion_io(ctrl_info, &wait);
4667 pqi_ctrl_unbusy(ctrl_info);
4668 up(&ctrl_info->sync_request_sem);
4693 struct pqi_ctrl_info *ctrl_info,
4699 pqi_submit_admin_request(ctrl_info, request);
4701 rc = pqi_poll_for_admin_response(ctrl_info, response);
4709 static int pqi_report_device_capability(struct pqi_ctrl_info *ctrl_info)
4731 rc = pqi_map_single(ctrl_info->pci_dev,
4738 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request, &response);
4740 pqi_pci_unmap(ctrl_info->pci_dev,
4752 ctrl_info->max_inbound_queues =
4754 ctrl_info->max_elements_per_iq =
4756 ctrl_info->max_iq_element_length =
4759 ctrl_info->max_outbound_queues =
4761 ctrl_info->max_elements_per_oq =
4763 ctrl_info->max_oq_element_length =
4770 ctrl_info->max_inbound_iu_length_per_firmware =
4773 ctrl_info->inbound_spanning_supported =
4775 ctrl_info->outbound_spanning_supported =
4784 static int pqi_validate_device_capability(struct pqi_ctrl_info *ctrl_info)
4786 if (ctrl_info->max_iq_element_length <
4788 dev_err(&ctrl_info->pci_dev->dev,
4790 ctrl_info->max_iq_element_length,
4795 if (ctrl_info->max_oq_element_length <
4797 dev_err(&ctrl_info->pci_dev->dev,
4799 ctrl_info->max_oq_element_length,
4804 if (ctrl_info->max_inbound_iu_length_per_firmware <
4806 dev_err(&ctrl_info->pci_dev->dev,
4808 ctrl_info->max_inbound_iu_length_per_firmware,
4813 if (!ctrl_info->inbound_spanning_supported) {
4814 dev_err(&ctrl_info->pci_dev->dev,
4819 if (ctrl_info->outbound_spanning_supported) {
4820 dev_err(&ctrl_info->pci_dev->dev,
4828 static int pqi_create_event_queue(struct pqi_ctrl_info *ctrl_info)
4835 event_queue = &ctrl_info->event_queue;
4860 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request,
4865 event_queue->oq_ci = ctrl_info->iomem_base +
4873 static int pqi_create_queue_group(struct pqi_ctrl_info *ctrl_info,
4881 queue_group = &ctrl_info->queue_groups[group_number];
4899 put_unaligned_le16(ctrl_info->num_elements_per_iq,
4905 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request,
4908 dev_err(&ctrl_info->pci_dev->dev,
4913 queue_group->iq_pi[RAID_PATH] = ctrl_info->iomem_base +
4934 put_unaligned_le16(ctrl_info->num_elements_per_iq,
4940 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request,
4943 dev_err(&ctrl_info->pci_dev->dev,
4948 queue_group->iq_pi[AIO_PATH] = ctrl_info->iomem_base +
4968 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request,
4971 dev_err(&ctrl_info->pci_dev->dev,
4990 put_unaligned_le16(ctrl_info->num_elements_per_oq,
4998 rc = pqi_submit_admin_request_synchronous(ctrl_info, &request,
5001 dev_err(&ctrl_info->pci_dev->dev,
5006 queue_group->oq_ci = ctrl_info->iomem_base +
5014 static int pqi_create_queues(struct pqi_ctrl_info *ctrl_info)
5019 rc = pqi_create_event_queue(ctrl_info);
5021 dev_err(&ctrl_info->pci_dev->dev,
5026 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
5027 rc = pqi_create_queue_group(ctrl_info, i);
5029 dev_err(&ctrl_info->pci_dev->dev,
5031 i, ctrl_info->num_queue_groups);
5042 static int pqi_configure_events(struct pqi_ctrl_info *ctrl_info,
5065 rc = pqi_map_single(ctrl_info->pci_dev,
5072 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
5074 pqi_pci_unmap(ctrl_info->pci_dev,
5085 put_unaligned_le16(ctrl_info->event_queue.oq_id,
5100 rc = pqi_map_single(ctrl_info->pci_dev,
5107 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
5109 pqi_pci_unmap(ctrl_info->pci_dev,
5119 static inline int pqi_enable_events(struct pqi_ctrl_info *ctrl_info)
5121 return pqi_configure_events(ctrl_info, true);
5124 static void pqi_free_all_io_requests(struct pqi_ctrl_info *ctrl_info)
5131 if (!ctrl_info->io_request_pool)
5134 dev = &ctrl_info->pci_dev->dev;
5135 sg_chain_buffer_length = ctrl_info->sg_chain_buffer_length;
5136 io_request = ctrl_info->io_request_pool;
5138 for (i = 0; i < ctrl_info->max_io_slots; i++) {
5148 kfree(ctrl_info->io_request_pool);
5149 ctrl_info->io_request_pool = NULL;
5152 static inline int pqi_alloc_error_buffer(struct pqi_ctrl_info *ctrl_info)
5154 ctrl_info->error_buffer = dma_alloc_coherent(&ctrl_info->pci_dev->dev,
5155 ctrl_info->error_buffer_length,
5156 &ctrl_info->error_buffer_dma_handle,
5158 if (!ctrl_info->error_buffer)
5164 static int pqi_alloc_io_resources(struct pqi_ctrl_info *ctrl_info)
5173 ctrl_info->io_request_pool = kcalloc(ctrl_info->max_io_slots,
5174 sizeof(ctrl_info->io_request_pool[0]), GFP_KERNEL);
5176 if (!ctrl_info->io_request_pool) {
5177 dev_err(&ctrl_info->pci_dev->dev,
5182 dev = &ctrl_info->pci_dev->dev;
5183 sg_chain_buffer_length = ctrl_info->sg_chain_buffer_length;
5184 io_request = ctrl_info->io_request_pool;
5186 for (i = 0; i < ctrl_info->max_io_slots; i++) {
5187 io_request->iu = kmalloc(ctrl_info->max_inbound_iu_length, GFP_KERNEL);
5190 dev_err(&ctrl_info->pci_dev->dev,
5200 dev_err(&ctrl_info->pci_dev->dev,
5214 pqi_free_all_io_requests(ctrl_info);
5224 static void pqi_calculate_io_resources(struct pqi_ctrl_info *ctrl_info)
5229 ctrl_info->scsi_ml_can_queue =
5230 ctrl_info->max_outstanding_requests - PQI_RESERVED_IO_SLOTS;
5231 ctrl_info->max_io_slots = ctrl_info->max_outstanding_requests;
5233 ctrl_info->error_buffer_length =
5234 ctrl_info->max_io_slots * PQI_ERROR_BUFFER_ELEMENT_LENGTH;
5237 max_transfer_size = min(ctrl_info->max_transfer_size,
5240 max_transfer_size = min(ctrl_info->max_transfer_size,
5248 max_sg_entries = min(ctrl_info->max_sg_entries, max_sg_entries);
5252 ctrl_info->sg_chain_buffer_length =
5255 ctrl_info->sg_tablesize = max_sg_entries;
5256 ctrl_info->max_sectors = max_transfer_size / 512;
5259 static void pqi_calculate_queue_resources(struct pqi_ctrl_info *ctrl_info)
5271 max_queue_groups = min(ctrl_info->max_inbound_queues / 2,
5272 ctrl_info->max_outbound_queues - 1);
5276 num_queue_groups = min(num_cpus, ctrl_info->max_msix_vectors);
5280 ctrl_info->num_queue_groups = num_queue_groups;
5286 ctrl_info->max_inbound_iu_length =
5287 (ctrl_info->max_inbound_iu_length_per_firmware /
5292 (ctrl_info->max_inbound_iu_length /
5299 ctrl_info->max_elements_per_iq);
5303 ctrl_info->max_elements_per_oq);
5305 ctrl_info->num_elements_per_iq = num_elements_per_iq;
5306 ctrl_info->num_elements_per_oq = num_elements_per_oq;
5308 ctrl_info->max_sg_per_iu =
5309 ((ctrl_info->max_inbound_iu_length -
5314 ctrl_info->max_sg_per_r56_iu =
5315 ((ctrl_info->max_inbound_iu_length -
5370 static int pqi_build_raid_sg_list(struct pqi_ctrl_info *ctrl_info,
5395 ctrl_info->max_sg_per_iu, &chained);
5406 static int pqi_build_aio_r1_sg_list(struct pqi_ctrl_info *ctrl_info,
5432 ctrl_info->max_sg_per_iu, &chained);
5444 static int pqi_build_aio_r56_sg_list(struct pqi_ctrl_info *ctrl_info,
5468 ctrl_info->max_sg_per_r56_iu, &chained);
5480 static int pqi_build_aio_sg_list(struct pqi_ctrl_info *ctrl_info,
5506 ctrl_info->max_sg_per_iu, &chained);
5529 static int pqi_raid_submit_io(struct pqi_ctrl_info *ctrl_info,
5538 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5596 dev_err(&ctrl_info->pci_dev->dev,
5602 rc = pqi_build_raid_sg_list(ctrl_info, request, scmd, io_request);
5608 pqi_start_io(ctrl_info, queue_group, RAID_PATH, io_request);
5613 static inline int pqi_raid_submit_scsi_cmd(struct pqi_ctrl_info *ctrl_info,
5621 return pqi_raid_submit_io(ctrl_info, device, scmd, queue_group, io_high_prio);
5628 struct pqi_ctrl_info *ctrl_info;
5643 ctrl_info = shost_to_hba(scmd->device->host);
5644 if (pqi_ctrl_offline(ctrl_info))
5666 static inline int pqi_aio_submit_scsi_cmd(struct pqi_ctrl_info *ctrl_info,
5674 return pqi_aio_submit_io(ctrl_info, scmd, device->aio_handle,
5679 static int pqi_aio_submit_io(struct pqi_ctrl_info *ctrl_info,
5689 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5707 if (!raid_bypass && ctrl_info->multi_lun_device_supported)
5728 dev_err(&ctrl_info->pci_dev->dev,
5744 rc = pqi_build_aio_sg_list(ctrl_info, request, scmd, io_request);
5750 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
5755 static int pqi_aio_submit_r1_write_io(struct pqi_ctrl_info *ctrl_info,
5764 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5805 rc = pqi_build_aio_r1_sg_list(ctrl_info, r1_request, scmd, io_request);
5811 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
5816 static int pqi_aio_submit_r56_write_io(struct pqi_ctrl_info *ctrl_info,
5825 io_request = pqi_alloc_io_request(ctrl_info, scmd);
5872 rc = pqi_build_aio_r56_sg_list(ctrl_info, r56_request, scmd, io_request);
5878 pqi_start_io(ctrl_info, queue_group, AIO_PATH, io_request);
5883 static inline u16 pqi_get_hw_queue(struct pqi_ctrl_info *ctrl_info,
5928 static bool pqi_is_parity_write_stream(struct pqi_ctrl_info *ctrl_info,
5939 if (!ctrl_info->enable_stream_detection)
5960 if ((device->raid_level == SA_RAID_5 && !ctrl_info->enable_r5_writes) ||
5961 (device->raid_level == SA_RAID_6 && !ctrl_info->enable_r6_writes))
6006 struct pqi_ctrl_info *ctrl_info;
6027 ctrl_info = shost_to_hba(shost);
6029 if (pqi_ctrl_offline(ctrl_info) || pqi_device_in_remove(device)) {
6035 if (pqi_ctrl_blocked(ctrl_info) || pqi_device_in_reset(device, lun)) {
6046 hw_queue = pqi_get_hw_queue(ctrl_info, scmd);
6047 queue_group = &ctrl_info->queue_groups[hw_queue];
6053 !pqi_is_parity_write_stream(ctrl_info, scmd)) {
6054 rc = pqi_raid_bypass_submit_scsi_cmd(ctrl_info, device, scmd, queue_group);
6061 rc = pqi_raid_submit_scsi_cmd(ctrl_info, device, scmd, queue_group);
6064 rc = pqi_aio_submit_scsi_cmd(ctrl_info, device, scmd, queue_group);
6066 rc = pqi_raid_submit_scsi_cmd(ctrl_info, device, scmd, queue_group);
6078 static unsigned int pqi_queued_io_count(struct pqi_ctrl_info *ctrl_info)
6089 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
6090 queue_group = &ctrl_info->queue_groups[i];
6102 static unsigned int pqi_nonempty_inbound_queue_count(struct pqi_ctrl_info *ctrl_info)
6113 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
6114 queue_group = &ctrl_info->queue_groups[i];
6128 static int pqi_wait_until_inbound_queues_empty(struct pqi_ctrl_info *ctrl_info)
6141 queued_io_count = pqi_queued_io_count(ctrl_info);
6142 nonempty_inbound_queue_count = pqi_nonempty_inbound_queue_count(ctrl_info);
6145 pqi_check_ctrl_health(ctrl_info);
6146 if (pqi_ctrl_offline(ctrl_info))
6149 dev_warn(&ctrl_info->pci_dev->dev,
6159 dev_warn(&ctrl_info->pci_dev->dev,
6166 static void pqi_fail_io_queued_for_device(struct pqi_ctrl_info *ctrl_info,
6178 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
6179 queue_group = &ctrl_info->queue_groups[i];
6215 static int pqi_device_wait_for_pending_io(struct pqi_ctrl_info *ctrl_info,
6227 if (ctrl_info->ctrl_removal_state != PQI_CTRL_GRACEFUL_REMOVAL) {
6228 pqi_check_ctrl_health(ctrl_info);
6229 if (pqi_ctrl_offline(ctrl_info))
6234 dev_err(&ctrl_info->pci_dev->dev,
6236 ctrl_info->scsi_host->host_no, device->bus, device->target,
6241 dev_warn(&ctrl_info->pci_dev->dev,
6243 ctrl_info->scsi_host->host_no, device->bus, device->target,
6263 static int pqi_wait_for_lun_reset_completion(struct pqi_ctrl_info *ctrl_info,
6279 pqi_check_ctrl_health(ctrl_info);
6280 if (pqi_ctrl_offline(ctrl_info)) {
6287 dev_warn(&ctrl_info->pci_dev->dev,
6289 ctrl_info->scsi_host->host_no, device->bus, device->target, lun, wait_secs, cmds_outstanding);
6297 static int pqi_lun_reset(struct pqi_ctrl_info *ctrl_info, struct pqi_scsi_dev *device, u8 lun)
6304 io_request = pqi_alloc_io_request(ctrl_info, NULL);
6317 if (!pqi_is_logical_device(device) && ctrl_info->multi_lun_device_supported)
6320 if (ctrl_info->tmf_iu_timeout_supported)
6323 pqi_start_io(ctrl_info, &ctrl_info->queue_groups[PQI_DEFAULT_QUEUE_GROUP], RAID_PATH,
6326 rc = pqi_wait_for_lun_reset_completion(ctrl_info, device, lun, &wait);
6340 static int pqi_lun_reset_with_retries(struct pqi_ctrl_info *ctrl_info, struct pqi_scsi_dev *device, u8 lun)
6348 reset_rc = pqi_lun_reset(ctrl_info, device, lun);
6357 wait_rc = pqi_device_wait_for_pending_io(ctrl_info, device, lun, timeout_msecs);
6364 static int pqi_device_reset(struct pqi_ctrl_info *ctrl_info, struct pqi_scsi_dev *device, u8 lun)
6368 pqi_ctrl_block_requests(ctrl_info);
6369 pqi_ctrl_wait_until_quiesced(ctrl_info);
6370 pqi_fail_io_queued_for_device(ctrl_info, device, lun);
6371 rc = pqi_wait_until_inbound_queues_empty(ctrl_info);
6373 pqi_ctrl_unblock_requests(ctrl_info);
6377 rc = pqi_lun_reset_with_retries(ctrl_info, device, lun);
6383 static int pqi_device_reset_handler(struct pqi_ctrl_info *ctrl_info, struct pqi_scsi_dev *device, u8 lun, struct scsi_cmnd *scmd, u8 scsi_opcode)
6387 mutex_lock(&ctrl_info->lun_reset_mutex);
6389 dev_err(&ctrl_info->pci_dev->dev,
6391 ctrl_info->scsi_host->host_no, device->bus, device->target, lun, scmd, scsi_opcode);
6393 pqi_check_ctrl_health(ctrl_info);
6394 if (pqi_ctrl_offline(ctrl_info))
6397 rc = pqi_device_reset(ctrl_info, device, lun);
6399 dev_err(&ctrl_info->pci_dev->dev,
6401 ctrl_info->scsi_host->host_no, device->bus, device->target, lun,
6404 mutex_unlock(&ctrl_info->lun_reset_mutex);
6412 struct pqi_ctrl_info *ctrl_info;
6417 ctrl_info = shost_to_hba(shost);
6421 return pqi_device_reset_handler(ctrl_info, device, (u8)scmd->device->lun, scmd, scsi_opcode);
6432 pqi_device_reset_handler(tmf_work->ctrl_info, tmf_work->device, tmf_work->lun, scmd, tmf_work->scsi_opcode);
6438 struct pqi_ctrl_info *ctrl_info;
6444 ctrl_info = shost_to_hba(shost);
6447 dev_err(&ctrl_info->pci_dev->dev,
6452 dev_err(&ctrl_info->pci_dev->dev,
6462 tmf_work->ctrl_info = ctrl_info;
6471 dev_err(&ctrl_info->pci_dev->dev,
6484 struct pqi_ctrl_info *ctrl_info;
6488 ctrl_info = shost_to_hba(sdev->host);
6490 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
6495 device = pqi_find_device_by_sas_rphy(ctrl_info, rphy);
6506 device = pqi_find_scsi_dev(ctrl_info, sdev_channel(sdev),
6527 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
6534 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
6536 if (!ctrl_info->disable_managed_interrupts)
6538 ctrl_info->pci_dev, 0);
6566 struct pqi_ctrl_info *ctrl_info;
6571 ctrl_info = shost_to_hba(sdev->host);
6573 mutex_acquired = mutex_trylock(&ctrl_info->scan_mutex);
6579 mutex_unlock(&ctrl_info->scan_mutex);
6585 mutex_unlock(&ctrl_info->scan_mutex);
6589 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
6591 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
6593 mutex_unlock(&ctrl_info->scan_mutex);
6595 pqi_dev_info(ctrl_info, "removed", device);
6599 static int pqi_getpciinfo_ioctl(struct pqi_ctrl_info *ctrl_info, void __user *arg)
6609 pci_dev = ctrl_info->pci_dev;
6709 static int pqi_passthru_ioctl(struct pqi_ctrl_info *ctrl_info, void __user *arg)
6720 if (pqi_ctrl_offline(ctrl_info))
6722 if (pqi_ofa_in_progress(ctrl_info) && pqi_ctrl_blocked(ctrl_info))
6793 rc = pqi_map_single(ctrl_info->pci_dev,
6804 if (ctrl_info->raid_iu_timeout_supported)
6807 rc = pqi_submit_raid_request_synchronous(ctrl_info, &request.header,
6811 pqi_pci_unmap(ctrl_info->pci_dev, request.sg_descriptors, 1,
6856 struct pqi_ctrl_info *ctrl_info;
6858 ctrl_info = shost_to_hba(sdev->host);
6864 rc = pqi_scan_scsi_devices(ctrl_info);
6867 rc = pqi_getpciinfo_ioctl(ctrl_info, arg);
6873 rc = pqi_passthru_ioctl(ctrl_info, arg);
6887 struct pqi_ctrl_info *ctrl_info;
6890 ctrl_info = shost_to_hba(shost);
6892 return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->firmware_version);
6905 struct pqi_ctrl_info *ctrl_info;
6908 ctrl_info = shost_to_hba(shost);
6910 return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->serial_number);
6917 struct pqi_ctrl_info *ctrl_info;
6920 ctrl_info = shost_to_hba(shost);
6922 return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->model);
6929 struct pqi_ctrl_info *ctrl_info;
6932 ctrl_info = shost_to_hba(shost);
6934 return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->vendor);
6991 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
6994 ctrl_info->enable_stream_detection);
7001 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
7010 ctrl_info->enable_stream_detection = set_stream_detection;
7019 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
7021 return scnprintf(buffer, 10, "%x\n", ctrl_info->enable_r5_writes);
7028 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
7037 ctrl_info->enable_r5_writes = set_r5_writes;
7046 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
7048 return scnprintf(buffer, 10, "%x\n", ctrl_info->enable_r6_writes);
7055 struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
7064 ctrl_info->enable_r6_writes = set_r6_writes;
7104 struct pqi_ctrl_info *ctrl_info;
7111 ctrl_info = shost_to_hba(sdev->host);
7113 if (pqi_ctrl_offline(ctrl_info))
7116 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7120 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7129 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7143 struct pqi_ctrl_info *ctrl_info;
7150 ctrl_info = shost_to_hba(sdev->host);
7152 if (pqi_ctrl_offline(ctrl_info))
7155 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7159 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7165 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7175 struct pqi_ctrl_info *ctrl_info;
7188 ctrl_info = shost_to_hba(sdev->host);
7190 if (pqi_ctrl_offline(ctrl_info))
7193 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7197 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7214 ctrl_info->scsi_host->host_no,
7253 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7261 struct pqi_ctrl_info *ctrl_info;
7268 ctrl_info = shost_to_hba(sdev->host);
7270 if (pqi_ctrl_offline(ctrl_info))
7273 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7277 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7283 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7291 struct pqi_ctrl_info *ctrl_info;
7297 ctrl_info = shost_to_hba(sdev->host);
7299 if (pqi_ctrl_offline(ctrl_info))
7302 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7306 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7314 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7322 struct pqi_ctrl_info *ctrl_info;
7329 ctrl_info = shost_to_hba(sdev->host);
7331 if (pqi_ctrl_offline(ctrl_info))
7334 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7338 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7347 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7355 struct pqi_ctrl_info *ctrl_info;
7362 ctrl_info = shost_to_hba(sdev->host);
7364 if (pqi_ctrl_offline(ctrl_info))
7367 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7371 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7377 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7385 struct pqi_ctrl_info *ctrl_info;
7392 ctrl_info = shost_to_hba(sdev->host);
7394 if (pqi_ctrl_offline(ctrl_info))
7397 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7401 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7407 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7416 struct pqi_ctrl_info *ctrl_info;
7426 ctrl_info = shost_to_hba(sdev->host);
7428 spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags);
7433 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7438 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7444 spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, flags);
7453 struct pqi_ctrl_info *ctrl_info;
7456 ctrl_info = shost_to_hba(sdev->host);
7458 return scnprintf(buffer, PAGE_SIZE, "%d\n", ctrl_info->numa_node);
7507 static int pqi_register_scsi(struct pqi_ctrl_info *ctrl_info)
7512 shost = scsi_host_alloc(&pqi_driver_template, sizeof(ctrl_info));
7514 dev_err(&ctrl_info->pci_dev->dev, "scsi_host_alloc failed\n");
7525 shost->max_sectors = ctrl_info->max_sectors;
7526 shost->can_queue = ctrl_info->scsi_ml_can_queue;
7528 shost->sg_tablesize = ctrl_info->sg_tablesize;
7530 shost->irq = pci_irq_vector(ctrl_info->pci_dev, 0);
7532 shost->nr_hw_queues = ctrl_info->num_queue_groups;
7534 shost->hostdata[0] = (unsigned long)ctrl_info;
7536 rc = scsi_add_host(shost, &ctrl_info->pci_dev->dev);
7538 dev_err(&ctrl_info->pci_dev->dev, "scsi_add_host failed\n");
7542 rc = pqi_add_sas_host(shost, ctrl_info);
7544 dev_err(&ctrl_info->pci_dev->dev, "add SAS host failed\n");
7548 ctrl_info->scsi_host = shost;
7560 static void pqi_unregister_scsi(struct pqi_ctrl_info *ctrl_info)
7564 pqi_delete_sas_host(ctrl_info);
7566 shost = ctrl_info->scsi_host;
7574 static int pqi_wait_for_pqi_reset_completion(struct pqi_ctrl_info *ctrl_info)
7582 pqi_registers = ctrl_info->pqi_registers;
7591 if (!sis_is_firmware_running(ctrl_info)) {
7604 static int pqi_reset(struct pqi_ctrl_info *ctrl_info)
7609 if (ctrl_info->pqi_reset_quiesce_supported) {
7610 rc = sis_pqi_reset_quiesce(ctrl_info);
7612 dev_err(&ctrl_info->pci_dev->dev,
7622 writel(reset_reg.all_bits, &ctrl_info->pqi_registers->device_reset);
7624 rc = pqi_wait_for_pqi_reset_completion(ctrl_info);
7626 dev_err(&ctrl_info->pci_dev->dev,
7632 static int pqi_get_ctrl_serial_number(struct pqi_ctrl_info *ctrl_info)
7641 rc = pqi_sense_subsystem_info(ctrl_info, sense_info);
7645 memcpy(ctrl_info->serial_number, sense_info->ctrl_serial_number,
7647 ctrl_info->serial_number[sizeof(sense_info->ctrl_serial_number)] = '\0';
7655 static int pqi_get_ctrl_product_details(struct pqi_ctrl_info *ctrl_info)
7664 rc = pqi_identify_controller(ctrl_info, identify);
7670 memcpy(ctrl_info->firmware_version,
7674 memcpy(ctrl_info->firmware_version,
7677 ctrl_info->firmware_version
7679 snprintf(ctrl_info->firmware_version +
7680 strlen(ctrl_info->firmware_version),
7681 sizeof(ctrl_info->firmware_version) -
7687 memcpy(ctrl_info->model, identify->product_id,
7689 ctrl_info->model[sizeof(identify->product_id)] = '\0';
7691 memcpy(ctrl_info->vendor, identify->vendor_id,
7693 ctrl_info->vendor[sizeof(identify->vendor_id)] = '\0';
7695 dev_info(&ctrl_info->pci_dev->dev,
7696 "Firmware version: %s\n", ctrl_info->firmware_version);
7705 struct pqi_ctrl_info *ctrl_info;
7758 static int pqi_config_table_update(struct pqi_ctrl_info *ctrl_info,
7775 return pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
7778 static int pqi_enable_firmware_features(struct pqi_ctrl_info *ctrl_info,
7805 return pqi_config_table_update(ctrl_info,
7815 void (*feature_status)(struct pqi_ctrl_info *ctrl_info,
7819 static void pqi_firmware_feature_status(struct pqi_ctrl_info *ctrl_info,
7823 dev_info(&ctrl_info->pci_dev->dev, "%s not supported by controller\n",
7829 dev_info(&ctrl_info->pci_dev->dev,
7834 dev_err(&ctrl_info->pci_dev->dev, "failed to enable %s\n",
7838 static void pqi_ctrl_update_feature_flags(struct pqi_ctrl_info *ctrl_info,
7843 ctrl_info->enable_r1_writes = firmware_feature->enabled;
7846 ctrl_info->enable_r5_writes = firmware_feature->enabled;
7849 ctrl_info->enable_r6_writes = firmware_feature->enabled;
7852 ctrl_info->soft_reset_handshake_supported =
7854 pqi_read_soft_reset_status(ctrl_info);
7857 ctrl_info->raid_iu_timeout_supported = firmware_feature->enabled;
7860 ctrl_info->tmf_iu_timeout_supported = firmware_feature->enabled;
7863 ctrl_info->firmware_triage_supported = firmware_feature->enabled;
7864 pqi_save_fw_triage_setting(ctrl_info, firmware_feature->enabled);
7867 ctrl_info->rpl_extended_format_4_5_supported = firmware_feature->enabled;
7870 ctrl_info->multi_lun_device_supported = firmware_feature->enabled;
7874 pqi_firmware_feature_status(ctrl_info, firmware_feature);
7877 static inline void pqi_firmware_feature_update(struct pqi_ctrl_info *ctrl_info,
7881 firmware_feature->feature_status(ctrl_info, firmware_feature);
7983 struct pqi_ctrl_info *ctrl_info;
7989 ctrl_info = section_info->ctrl_info;
8000 pqi_firmware_feature_update(ctrl_info,
8015 rc = pqi_enable_firmware_features(ctrl_info, firmware_features,
8018 dev_err(&ctrl_info->pci_dev->dev,
8023 pqi_firmware_feature_update(ctrl_info,
8037 pqi_firmware_feature_update(ctrl_info,
8066 static void pqi_ctrl_reset_config(struct pqi_ctrl_info *ctrl_info)
8068 ctrl_info->heartbeat_counter = NULL;
8069 ctrl_info->soft_reset_status = NULL;
8070 ctrl_info->soft_reset_handshake_supported = false;
8071 ctrl_info->enable_r1_writes = false;
8072 ctrl_info->enable_r5_writes = false;
8073 ctrl_info->enable_r6_writes = false;
8074 ctrl_info->raid_iu_timeout_supported = false;
8075 ctrl_info->tmf_iu_timeout_supported = false;
8076 ctrl_info->firmware_triage_supported = false;
8077 ctrl_info->rpl_extended_format_4_5_supported = false;
8078 ctrl_info->multi_lun_device_supported = false;
8081 static int pqi_process_config_table(struct pqi_ctrl_info *ctrl_info)
8092 table_length = ctrl_info->config_table_length;
8098 dev_err(&ctrl_info->pci_dev->dev,
8107 table_iomem_addr = ctrl_info->iomem_base + ctrl_info->config_table_offset;
8111 section_info.ctrl_info = ctrl_info;
8128 dev_warn(&ctrl_info->pci_dev->dev,
8131 ctrl_info->heartbeat_counter =
8138 ctrl_info->soft_reset_status =
8164 static int pqi_revert_to_sis_mode(struct pqi_ctrl_info *ctrl_info)
8168 pqi_change_irq_mode(ctrl_info, IRQ_MODE_NONE);
8169 rc = pqi_reset(ctrl_info);
8172 rc = sis_reenable_sis_mode(ctrl_info);
8174 dev_err(&ctrl_info->pci_dev->dev,
8178 pqi_save_ctrl_mode(ctrl_info, SIS_MODE);
8188 static int pqi_force_sis_mode(struct pqi_ctrl_info *ctrl_info)
8190 if (!sis_is_firmware_running(ctrl_info))
8193 if (pqi_get_ctrl_mode(ctrl_info) == SIS_MODE)
8196 if (sis_is_kernel_up(ctrl_info)) {
8197 pqi_save_ctrl_mode(ctrl_info, SIS_MODE);
8201 return pqi_revert_to_sis_mode(ctrl_info);
8219 static int pqi_ctrl_init(struct pqi_ctrl_info *ctrl_info)
8225 if (pqi_is_fw_triage_supported(ctrl_info)) {
8226 rc = sis_wait_for_fw_triage_completion(ctrl_info);
8230 sis_soft_reset(ctrl_info);
8233 rc = pqi_force_sis_mode(ctrl_info);
8242 rc = sis_wait_for_ctrl_ready(ctrl_info);
8245 dev_err(&ctrl_info->pci_dev->dev,
8257 rc = sis_get_ctrl_properties(ctrl_info);
8259 dev_err(&ctrl_info->pci_dev->dev,
8264 rc = sis_get_pqi_capabilities(ctrl_info);
8266 dev_err(&ctrl_info->pci_dev->dev,
8271 product_id = sis_get_product_id(ctrl_info);
8272 ctrl_info->product_id = (u8)product_id;
8273 ctrl_info->product_revision = (u8)(product_id >> 8);
8276 if (ctrl_info->max_outstanding_requests >
8278 ctrl_info->max_outstanding_requests =
8281 if (ctrl_info->max_outstanding_requests >
8283 ctrl_info->max_outstanding_requests =
8287 pqi_calculate_io_resources(ctrl_info);
8289 rc = pqi_alloc_error_buffer(ctrl_info);
8291 dev_err(&ctrl_info->pci_dev->dev,
8301 rc = sis_init_base_struct_addr(ctrl_info);
8303 dev_err(&ctrl_info->pci_dev->dev,
8309 rc = pqi_wait_for_pqi_mode_ready(ctrl_info);
8311 dev_err(&ctrl_info->pci_dev->dev,
8317 ctrl_info->pqi_mode_enabled = true;
8318 pqi_save_ctrl_mode(ctrl_info, PQI_MODE);
8320 rc = pqi_alloc_admin_queues(ctrl_info);
8322 dev_err(&ctrl_info->pci_dev->dev,
8327 rc = pqi_create_admin_queues(ctrl_info);
8329 dev_err(&ctrl_info->pci_dev->dev,
8334 rc = pqi_report_device_capability(ctrl_info);
8336 dev_err(&ctrl_info->pci_dev->dev,
8341 rc = pqi_validate_device_capability(ctrl_info);
8345 pqi_calculate_queue_resources(ctrl_info);
8347 rc = pqi_enable_msix_interrupts(ctrl_info);
8351 if (ctrl_info->num_msix_vectors_enabled < ctrl_info->num_queue_groups) {
8352 ctrl_info->max_msix_vectors =
8353 ctrl_info->num_msix_vectors_enabled;
8354 pqi_calculate_queue_resources(ctrl_info);
8357 rc = pqi_alloc_io_resources(ctrl_info);
8361 rc = pqi_alloc_operational_queues(ctrl_info);
8363 dev_err(&ctrl_info->pci_dev->dev,
8368 pqi_init_operational_queues(ctrl_info);
8370 rc = pqi_create_queues(ctrl_info);
8374 rc = pqi_request_irqs(ctrl_info);
8378 pqi_change_irq_mode(ctrl_info, IRQ_MODE_MSIX);
8380 ctrl_info->controller_online = true;
8382 rc = pqi_process_config_table(ctrl_info);
8386 pqi_start_heartbeat_timer(ctrl_info);
8388 if (ctrl_info->enable_r5_writes || ctrl_info->enable_r6_writes) {
8389 rc = pqi_get_advanced_raid_bypass_config(ctrl_info);
8391 dev_err(&ctrl_info->pci_dev->dev,
8395 ctrl_info->ciss_report_log_flags |=
8399 rc = pqi_enable_events(ctrl_info);
8401 dev_err(&ctrl_info->pci_dev->dev,
8407 rc = pqi_register_scsi(ctrl_info);
8411 rc = pqi_get_ctrl_product_details(ctrl_info);
8413 dev_err(&ctrl_info->pci_dev->dev,
8418 rc = pqi_get_ctrl_serial_number(ctrl_info);
8420 dev_err(&ctrl_info->pci_dev->dev,
8425 rc = pqi_set_diag_rescan(ctrl_info);
8427 dev_err(&ctrl_info->pci_dev->dev,
8432 rc = pqi_write_driver_version_to_host_wellness(ctrl_info);
8434 dev_err(&ctrl_info->pci_dev->dev,
8439 pqi_schedule_update_time_worker(ctrl_info);
8441 pqi_scan_scsi_devices(ctrl_info);
8446 static void pqi_reinit_queues(struct pqi_ctrl_info *ctrl_info)
8452 admin_queues = &ctrl_info->admin_queues;
8457 for (i = 0; i < ctrl_info->num_queue_groups; i++) {
8458 ctrl_info->queue_groups[i].iq_pi_copy[RAID_PATH] = 0;
8459 ctrl_info->queue_groups[i].iq_pi_copy[AIO_PATH] = 0;
8460 ctrl_info->queue_groups[i].oq_ci_copy = 0;
8462 writel(0, ctrl_info->queue_groups[i].iq_ci[RAID_PATH]);
8463 writel(0, ctrl_info->queue_groups[i].iq_ci[AIO_PATH]);
8464 writel(0, ctrl_info->queue_groups[i].oq_pi);
8467 event_queue = &ctrl_info->event_queue;
8472 static int pqi_ctrl_init_resume(struct pqi_ctrl_info *ctrl_info)
8476 rc = pqi_force_sis_mode(ctrl_info);
8484 rc = sis_wait_for_ctrl_ready_resume(ctrl_info);
8492 rc = sis_get_ctrl_properties(ctrl_info);
8494 dev_err(&ctrl_info->pci_dev->dev,
8499 rc = sis_get_pqi_capabilities(ctrl_info);
8501 dev_err(&ctrl_info->pci_dev->dev,
8511 rc = sis_init_base_struct_addr(ctrl_info);
8513 dev_err(&ctrl_info->pci_dev->dev,
8519 rc = pqi_wait_for_pqi_mode_ready(ctrl_info);
8521 dev_err(&ctrl_info->pci_dev->dev,
8527 ctrl_info->pqi_mode_enabled = true;
8528 pqi_save_ctrl_mode(ctrl_info, PQI_MODE);
8530 pqi_reinit_queues(ctrl_info);
8532 rc = pqi_create_admin_queues(ctrl_info);
8534 dev_err(&ctrl_info->pci_dev->dev,
8539 rc = pqi_create_queues(ctrl_info);
8543 pqi_change_irq_mode(ctrl_info, IRQ_MODE_MSIX);
8545 ctrl_info->controller_online = true;
8546 pqi_ctrl_unblock_requests(ctrl_info);
8548 pqi_ctrl_reset_config(ctrl_info);
8550 rc = pqi_process_config_table(ctrl_info);
8554 pqi_start_heartbeat_timer(ctrl_info);
8556 if (ctrl_info->enable_r5_writes || ctrl_info->enable_r6_writes) {
8557 rc = pqi_get_advanced_raid_bypass_config(ctrl_info);
8559 dev_err(&ctrl_info->pci_dev->dev,
8563 ctrl_info->ciss_report_log_flags |=
8567 rc = pqi_enable_events(ctrl_info);
8569 dev_err(&ctrl_info->pci_dev->dev,
8574 rc = pqi_get_ctrl_product_details(ctrl_info);
8576 dev_err(&ctrl_info->pci_dev->dev,
8581 rc = pqi_set_diag_rescan(ctrl_info);
8583 dev_err(&ctrl_info->pci_dev->dev,
8588 rc = pqi_write_driver_version_to_host_wellness(ctrl_info);
8590 dev_err(&ctrl_info->pci_dev->dev,
8595 if (pqi_ofa_in_progress(ctrl_info))
8596 pqi_ctrl_unblock_scan(ctrl_info);
8598 pqi_scan_scsi_devices(ctrl_info);
8613 static int pqi_pci_init(struct pqi_ctrl_info *ctrl_info)
8618 rc = pci_enable_device(ctrl_info->pci_dev);
8620 dev_err(&ctrl_info->pci_dev->dev,
8630 rc = dma_set_mask_and_coherent(&ctrl_info->pci_dev->dev, mask);
8632 dev_err(&ctrl_info->pci_dev->dev, "failed to set DMA mask\n");
8636 rc = pci_request_regions(ctrl_info->pci_dev, DRIVER_NAME_SHORT);
8638 dev_err(&ctrl_info->pci_dev->dev,
8643 ctrl_info->iomem_base = ioremap(pci_resource_start(
8644 ctrl_info->pci_dev, 0),
8645 pci_resource_len(ctrl_info->pci_dev, 0));
8646 if (!ctrl_info->iomem_base) {
8647 dev_err(&ctrl_info->pci_dev->dev,
8656 rc = pqi_set_pcie_completion_timeout(ctrl_info->pci_dev,
8659 dev_err(&ctrl_info->pci_dev->dev,
8665 pci_set_master(ctrl_info->pci_dev);
8667 ctrl_info->registers = ctrl_info->iomem_base;
8668 ctrl_info->pqi_registers = &ctrl_info->registers->pqi_registers;
8670 pci_set_drvdata(ctrl_info->pci_dev, ctrl_info);
8675 pci_release_regions(ctrl_info->pci_dev);
8677 pci_disable_device(ctrl_info->pci_dev);
8682 static void pqi_cleanup_pci_init(struct pqi_ctrl_info *ctrl_info)
8684 iounmap(ctrl_info->iomem_base);
8685 pci_release_regions(ctrl_info->pci_dev);
8686 if (pci_is_enabled(ctrl_info->pci_dev))
8687 pci_disable_device(ctrl_info->pci_dev);
8688 pci_set_drvdata(ctrl_info->pci_dev, NULL);
8693 struct pqi_ctrl_info *ctrl_info;
8695 ctrl_info = kzalloc_node(sizeof(struct pqi_ctrl_info),
8697 if (!ctrl_info)
8700 mutex_init(&ctrl_info->scan_mutex);
8701 mutex_init(&ctrl_info->lun_reset_mutex);
8702 mutex_init(&ctrl_info->ofa_mutex);
8704 INIT_LIST_HEAD(&ctrl_info->scsi_device_list);
8705 spin_lock_init(&ctrl_info->scsi_device_list_lock);
8707 INIT_WORK(&ctrl_info->event_work, pqi_event_worker);
8708 atomic_set(&ctrl_info->num_interrupts, 0);
8710 INIT_DELAYED_WORK(&ctrl_info->rescan_work, pqi_rescan_worker);
8711 INIT_DELAYED_WORK(&ctrl_info->update_time_work, pqi_update_time_worker);
8713 timer_setup(&ctrl_info->heartbeat_timer, pqi_heartbeat_timer_handler, 0);
8714 INIT_WORK(&ctrl_info->ctrl_offline_work, pqi_ctrl_offline_worker);
8716 INIT_WORK(&ctrl_info->ofa_memory_alloc_work, pqi_ofa_memory_alloc_worker);
8717 INIT_WORK(&ctrl_info->ofa_quiesce_work, pqi_ofa_quiesce_worker);
8719 sema_init(&ctrl_info->sync_request_sem,
8721 init_waitqueue_head(&ctrl_info->block_requests_wait);
8723 ctrl_info->ctrl_id = atomic_inc_return(&pqi_controller_count) - 1;
8724 ctrl_info->irq_mode = IRQ_MODE_NONE;
8725 ctrl_info->max_msix_vectors = PQI_MAX_MSIX_VECTORS;
8727 ctrl_info->ciss_report_log_flags = CISS_REPORT_LOG_FLAG_UNIQUE_LUN_ID;
8728 ctrl_info->max_transfer_encrypted_sas_sata =
8730 ctrl_info->max_transfer_encrypted_nvme =
8732 ctrl_info->max_write_raid_5_6 = PQI_DEFAULT_MAX_WRITE_RAID_5_6;
8733 ctrl_info->max_write_raid_1_10_2drive = ~0;
8734 ctrl_info->max_write_raid_1_10_3drive = ~0;
8735 ctrl_info->disable_managed_interrupts = pqi_disable_managed_interrupts;
8737 return ctrl_info;
8740 static inline void pqi_free_ctrl_info(struct pqi_ctrl_info *ctrl_info)
8742 kfree(ctrl_info);
8745 static void pqi_free_interrupts(struct pqi_ctrl_info *ctrl_info)
8747 pqi_free_irqs(ctrl_info);
8748 pqi_disable_msix_interrupts(ctrl_info);
8751 static void pqi_free_ctrl_resources(struct pqi_ctrl_info *ctrl_info)
8753 pqi_free_interrupts(ctrl_info);
8754 if (ctrl_info->queue_memory_base)
8755 dma_free_coherent(&ctrl_info->pci_dev->dev,
8756 ctrl_info->queue_memory_length,
8757 ctrl_info->queue_memory_base,
8758 ctrl_info->queue_memory_base_dma_handle);
8759 if (ctrl_info->admin_queue_memory_base)
8760 dma_free_coherent(&ctrl_info->pci_dev->dev,
8761 ctrl_info->admin_queue_memory_length,
8762 ctrl_info->admin_queue_memory_base,
8763 ctrl_info->admin_queue_memory_base_dma_handle);
8764 pqi_free_all_io_requests(ctrl_info);
8765 if (ctrl_info->error_buffer)
8766 dma_free_coherent(&ctrl_info->pci_dev->dev,
8767 ctrl_info->error_buffer_length,
8768 ctrl_info->error_buffer,
8769 ctrl_info->error_buffer_dma_handle);
8770 if (ctrl_info->iomem_base)
8771 pqi_cleanup_pci_init(ctrl_info);
8772 pqi_free_ctrl_info(ctrl_info);
8775 static void pqi_remove_ctrl(struct pqi_ctrl_info *ctrl_info)
8777 ctrl_info->controller_online = false;
8778 pqi_stop_heartbeat_timer(ctrl_info);
8779 pqi_ctrl_block_requests(ctrl_info);
8780 pqi_cancel_rescan_worker(ctrl_info);
8781 pqi_cancel_update_time_worker(ctrl_info);
8782 if (ctrl_info->ctrl_removal_state == PQI_CTRL_SURPRISE_REMOVAL) {
8783 pqi_fail_all_outstanding_requests(ctrl_info);
8784 ctrl_info->pqi_mode_enabled = false;
8786 pqi_unregister_scsi(ctrl_info);
8787 if (ctrl_info->pqi_mode_enabled)
8788 pqi_revert_to_sis_mode(ctrl_info);
8789 pqi_free_ctrl_resources(ctrl_info);
8792 static void pqi_ofa_ctrl_quiesce(struct pqi_ctrl_info *ctrl_info)
8794 pqi_ctrl_block_scan(ctrl_info);
8795 pqi_scsi_block_requests(ctrl_info);
8796 pqi_ctrl_block_device_reset(ctrl_info);
8797 pqi_ctrl_block_requests(ctrl_info);
8798 pqi_ctrl_wait_until_quiesced(ctrl_info);
8799 pqi_stop_heartbeat_timer(ctrl_info);
8802 static void pqi_ofa_ctrl_unquiesce(struct pqi_ctrl_info *ctrl_info)
8804 pqi_start_heartbeat_timer(ctrl_info);
8805 pqi_ctrl_unblock_requests(ctrl_info);
8806 pqi_ctrl_unblock_device_reset(ctrl_info);
8807 pqi_scsi_unblock_requests(ctrl_info);
8808 pqi_ctrl_unblock_scan(ctrl_info);
8811 static int pqi_ofa_alloc_mem(struct pqi_ctrl_info *ctrl_info, u32 total_size, u32 chunk_size)
8820 ofap = ctrl_info->pqi_ofa_mem_virt_addr;
8826 ctrl_info->pqi_ofa_chunk_virt_addr = kmalloc_array(sg_count, sizeof(void *), GFP_KERNEL);
8827 if (!ctrl_info->pqi_ofa_chunk_virt_addr)
8830 dev = &ctrl_info->pci_dev->dev;
8833 ctrl_info->pqi_ofa_chunk_virt_addr[i] =
8835 if (!ctrl_info->pqi_ofa_chunk_virt_addr[i])
8852 ctrl_info->pqi_ofa_chunk_virt_addr[i],
8855 kfree(ctrl_info->pqi_ofa_chunk_virt_addr);
8861 static int pqi_ofa_alloc_host_buffer(struct pqi_ctrl_info *ctrl_info)
8867 if (ctrl_info->ofa_bytes_requested == 0)
8870 total_size = PAGE_ALIGN(ctrl_info->ofa_bytes_requested);
8875 if (pqi_ofa_alloc_mem(ctrl_info, total_size, chunk_size) == 0)
8884 static void pqi_ofa_setup_host_buffer(struct pqi_ctrl_info *ctrl_info)
8889 dev = &ctrl_info->pci_dev->dev;
8892 &ctrl_info->pqi_ofa_mem_dma_handle, GFP_KERNEL);
8896 ctrl_info->pqi_ofa_mem_virt_addr = ofap;
8898 if (pqi_ofa_alloc_host_buffer(ctrl_info) < 0) {
8901 dma_free_coherent(dev, sizeof(*ofap), ofap, ctrl_info->pqi_ofa_mem_dma_handle);
8902 ctrl_info->pqi_ofa_mem_virt_addr = NULL;
8910 static void pqi_ofa_free_host_buffer(struct pqi_ctrl_info *ctrl_info)
8918 ofap = ctrl_info->pqi_ofa_mem_virt_addr;
8922 dev = &ctrl_info->pci_dev->dev;
8934 ctrl_info->pqi_ofa_chunk_virt_addr[i],
8937 kfree(ctrl_info->pqi_ofa_chunk_virt_addr);
8941 ctrl_info->pqi_ofa_mem_dma_handle);
8942 ctrl_info->pqi_ofa_mem_virt_addr = NULL;
8945 static int pqi_ofa_host_memory_update(struct pqi_ctrl_info *ctrl_info)
8959 ofap = ctrl_info->pqi_ofa_mem_virt_addr;
8966 put_unaligned_le64((u64)ctrl_info->pqi_ofa_mem_dma_handle,
8972 return pqi_submit_raid_request_synchronous(ctrl_info, &request.header, 0, NULL);
8975 static int pqi_ofa_ctrl_restart(struct pqi_ctrl_info *ctrl_info, unsigned int delay_secs)
8979 return pqi_ctrl_init_resume(ctrl_info);
8987 static void pqi_fail_all_outstanding_requests(struct pqi_ctrl_info *ctrl_info)
8994 for (i = 0; i < ctrl_info->max_io_slots; i++) {
8995 io_request = &ctrl_info->io_request_pool[i];
9019 static void pqi_take_ctrl_offline_deferred(struct pqi_ctrl_info *ctrl_info)
9022 pqi_stop_heartbeat_timer(ctrl_info);
9023 pqi_free_interrupts(ctrl_info);
9024 pqi_cancel_rescan_worker(ctrl_info);
9025 pqi_cancel_update_time_worker(ctrl_info);
9026 pqi_ctrl_wait_until_quiesced(ctrl_info);
9027 pqi_fail_all_outstanding_requests(ctrl_info);
9028 pqi_ctrl_unblock_requests(ctrl_info);
9033 struct pqi_ctrl_info *ctrl_info;
9035 ctrl_info = container_of(work, struct pqi_ctrl_info, ctrl_offline_work);
9036 pqi_take_ctrl_offline_deferred(ctrl_info);
9085 static void pqi_take_ctrl_offline(struct pqi_ctrl_info *ctrl_info,
9088 if (!ctrl_info->controller_online)
9091 ctrl_info->controller_online = false;
9092 ctrl_info->pqi_mode_enabled = false;
9093 pqi_ctrl_block_requests(ctrl_info);
9095 sis_shutdown_ctrl(ctrl_info, ctrl_shutdown_reason);
9096 pci_disable_device(ctrl_info->pci_dev);
9097 dev_err(&ctrl_info->pci_dev->dev,
9100 schedule_work(&ctrl_info->ctrl_offline_work);
9121 struct pqi_ctrl_info *ctrl_info;
9145 ctrl_info = pqi_alloc_ctrl_info(node);
9146 if (!ctrl_info) {
9151 ctrl_info->numa_node = node;
9153 ctrl_info->pci_dev = pci_dev;
9155 rc = pqi_pci_init(ctrl_info);
9159 rc = pqi_ctrl_init(ctrl_info);
9166 pqi_remove_ctrl(ctrl_info);
9173 struct pqi_ctrl_info *ctrl_info;
9177 ctrl_info = pci_get_drvdata(pci_dev);
9178 if (!ctrl_info)
9181 pci_read_config_word(ctrl_info->pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
9183 ctrl_info->ctrl_removal_state = PQI_CTRL_SURPRISE_REMOVAL;
9185 ctrl_info->ctrl_removal_state = PQI_CTRL_GRACEFUL_REMOVAL;
9187 if (ctrl_info->ctrl_removal_state == PQI_CTRL_GRACEFUL_REMOVAL) {
9188 rc = pqi_flush_cache(ctrl_info, RESTART);
9194 pqi_remove_ctrl(ctrl_info);
9197 static void pqi_crash_if_pending_command(struct pqi_ctrl_info *ctrl_info)
9203 for (i = 0; i < ctrl_info->max_io_slots; i++) {
9204 io_request = &ctrl_info->io_request_pool[i];
9216 struct pqi_ctrl_info *ctrl_info;
9219 ctrl_info = pci_get_drvdata(pci_dev);
9220 if (!ctrl_info) {
9226 pqi_wait_until_ofa_finished(ctrl_info);
9228 pqi_scsi_block_requests(ctrl_info);
9229 pqi_ctrl_block_device_reset(ctrl_info);
9230 pqi_ctrl_block_requests(ctrl_info);
9231 pqi_ctrl_wait_until_quiesced(ctrl_info);
9242 rc = pqi_flush_cache(ctrl_info, shutdown_event);
9247 pqi_crash_if_pending_command(ctrl_info);
9248 pqi_reset(ctrl_info);
9310 struct pqi_ctrl_info *ctrl_info;
9313 ctrl_info = pci_get_drvdata(pci_dev);
9315 pqi_wait_until_ofa_finished(ctrl_info);
9317 pqi_ctrl_block_scan(ctrl_info);
9318 pqi_scsi_block_requests(ctrl_info);
9319 pqi_ctrl_block_device_reset(ctrl_info);
9320 pqi_ctrl_block_requests(ctrl_info);
9321 pqi_ctrl_wait_until_quiesced(ctrl_info);
9327 pqi_flush_cache(ctrl_info, shutdown_event);
9330 pqi_stop_heartbeat_timer(ctrl_info);
9331 pqi_crash_if_pending_command(ctrl_info);
9332 pqi_free_irqs(ctrl_info);
9334 ctrl_info->controller_online = false;
9335 ctrl_info->pqi_mode_enabled = false;
9349 struct pqi_ctrl_info *ctrl_info;
9352 ctrl_info = pci_get_drvdata(pci_dev);
9354 rc = pqi_request_irqs(ctrl_info);
9358 pqi_ctrl_unblock_device_reset(ctrl_info);
9359 pqi_ctrl_unblock_requests(ctrl_info);
9360 pqi_scsi_unblock_requests(ctrl_info);
9361 pqi_ctrl_unblock_scan(ctrl_info);
9365 return pqi_ctrl_init_resume(ctrl_info);
9377 struct pqi_ctrl_info *ctrl_info;
9380 ctrl_info = pci_get_drvdata(pci_dev);
9382 rc = pqi_request_irqs(ctrl_info);
9386 ctrl_info->controller_online = true;
9387 ctrl_info->pqi_mode_enabled = true;
9389 pqi_ctrl_unblock_device_reset(ctrl_info);
9390 pqi_ctrl_unblock_requests(ctrl_info);
9391 pqi_scsi_unblock_requests(ctrl_info);
9392 pqi_ctrl_unblock_scan(ctrl_info);
9400 struct pqi_ctrl_info *ctrl_info;
9404 ctrl_info = pci_get_drvdata(pci_dev);
9407 pqi_flush_cache(ctrl_info, shutdown_event);