Lines Matching refs:pinstance
140 struct pmcraid_instance *pinstance; in pmcraid_slave_alloc() local
146 pinstance = shost_priv(scsi_dev->host); in pmcraid_slave_alloc()
148 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_slave_alloc()
155 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
156 list_for_each_entry(temp, &pinstance->used_res_q, queue) { in pmcraid_slave_alloc()
193 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
360 struct pmcraid_instance *pinstance in pmcraid_get_free_cmd() argument
367 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
369 if (!list_empty(&pinstance->free_cmd_pool)) { in pmcraid_get_free_cmd()
370 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
374 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
391 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd() local
394 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
395 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
396 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
407 static u32 pmcraid_read_interrupts(struct pmcraid_instance *pinstance) in pmcraid_read_interrupts() argument
409 return (pinstance->interrupt_mode) ? in pmcraid_read_interrupts()
410 ioread32(pinstance->int_regs.ioa_host_msix_interrupt_reg) : in pmcraid_read_interrupts()
411 ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_read_interrupts()
424 struct pmcraid_instance *pinstance, in pmcraid_disable_interrupts() argument
428 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
431 iowrite32(intrs, pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_disable_interrupts()
432 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
433 ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
435 if (!pinstance->interrupt_mode) { in pmcraid_disable_interrupts()
437 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
438 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
452 struct pmcraid_instance *pinstance, in pmcraid_enable_interrupts() argument
455 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
458 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
460 if (!pinstance->interrupt_mode) { in pmcraid_enable_interrupts()
462 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
463 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
467 ioread32(pinstance->int_regs.global_interrupt_mask_reg), in pmcraid_enable_interrupts()
468 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg)); in pmcraid_enable_interrupts()
480 struct pmcraid_instance *pinstance in pmcraid_clr_trans_op() argument
485 if (!pinstance->interrupt_mode) { in pmcraid_clr_trans_op()
487 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
488 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
490 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
491 ioread32(pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
494 if (pinstance->reset_cmd != NULL) { in pmcraid_clr_trans_op()
495 del_timer(&pinstance->reset_cmd->timer); in pmcraid_clr_trans_op()
497 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
498 pinstance->reset_cmd->cmd_done(pinstance->reset_cmd); in pmcraid_clr_trans_op()
500 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
513 static void pmcraid_reset_type(struct pmcraid_instance *pinstance) in pmcraid_reset_type() argument
519 mask = ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_reset_type()
520 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_reset_type()
521 alerts = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_type()
527 pinstance->ioa_hard_reset = 1; in pmcraid_reset_type()
532 pinstance->ioa_unit_check = 1; in pmcraid_reset_type()
545 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done() local
550 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_bist_done()
562 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
564 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
576 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist() local
581 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
582 doorbells = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
583 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_start_bist()
602 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done() local
603 u32 status = ioread32(pinstance->ioa_status); in pmcraid_reset_alert_done()
613 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
615 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
638 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert() local
648 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_reset_alert()
662 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
664 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
668 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_reset_alert()
686 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler() local
689 dev_info(&pinstance->pdev->dev, in pmcraid_timeout_handler()
699 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
700 if (!pinstance->ioa_reset_in_progress) { in pmcraid_timeout_handler()
701 pinstance->ioa_reset_attempts = 0; in pmcraid_timeout_handler()
702 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
708 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_timeout_handler()
714 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
715 pinstance->ioa_reset_in_progress = 1; in pmcraid_timeout_handler()
719 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
732 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
737 if (pinstance->scn.ioa_state != PMC_DEVICE_EVENT_RESET_START && in pmcraid_timeout_handler()
738 pinstance->scn.ioa_state != PMC_DEVICE_EVENT_SHUTDOWN_START) in pmcraid_timeout_handler()
739 pmcraid_notify_ioastate(pinstance, in pmcraid_timeout_handler()
742 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_timeout_handler()
743 scsi_block_requests(pinstance->host); in pmcraid_timeout_handler()
745 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
821 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done() local
832 dma_unmap_single(&pinstance->pdev->dev, cmd->sense_buffer_dma, in pmcraid_erp_done()
856 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command() local
864 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
865 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
866 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
867 atomic_inc(&pinstance->outstanding_cmds); in _pmcraid_fire_command()
871 iowrite32(le64_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), pinstance->ioarrin); in _pmcraid_fire_command()
918 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done() local
921 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
923 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
972 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done() local
982 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
983 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_get_fwversion_done()
985 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1003 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion() local
1027 ioadl->address = cpu_to_le64(pinstance->inq_data_baddr); in pmcraid_get_fwversion()
1043 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq() local
1046 __be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]); in pmcraid_identify_hrrq()
1053 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1119 struct pmcraid_instance *pinstance, in pmcraid_init_hcam() argument
1131 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1141 dma = pinstance->ccn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1142 hcam = &pinstance->ccn; in pmcraid_init_hcam()
1146 dma = pinstance->ldn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1147 hcam = &pinstance->ldn; in pmcraid_init_hcam()
1188 static void pmcraid_send_hcam(struct pmcraid_instance *pinstance, u8 type) in pmcraid_send_hcam() argument
1190 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam()
1239 struct pmcraid_instance *pinstance; in pmcraid_cancel_hcam() local
1242 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1244 &pinstance->ldn : &pinstance->ccn; in pmcraid_cancel_hcam()
1389 struct pmcraid_instance *pinstance, in pmcraid_notify_aen() argument
1398 aen_msg->hostno = (pinstance->host->unique_id << 16 | in pmcraid_notify_aen()
1399 MINOR(pinstance->cdev.dev)); in pmcraid_notify_aen()
1458 static int pmcraid_notify_ccn(struct pmcraid_instance *pinstance) in pmcraid_notify_ccn() argument
1460 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ccn()
1461 pinstance->ccn.msg, in pmcraid_notify_ccn()
1462 le32_to_cpu(pinstance->ccn.hcam->data_len) + in pmcraid_notify_ccn()
1473 static int pmcraid_notify_ldn(struct pmcraid_instance *pinstance) in pmcraid_notify_ldn() argument
1475 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ldn()
1476 pinstance->ldn.msg, in pmcraid_notify_ldn()
1477 le32_to_cpu(pinstance->ldn.hcam->data_len) + in pmcraid_notify_ldn()
1489 static void pmcraid_notify_ioastate(struct pmcraid_instance *pinstance, u32 evt) in pmcraid_notify_ioastate() argument
1491 pinstance->scn.ioa_state = evt; in pmcraid_notify_ioastate()
1492 pmcraid_notify_aen(pinstance, in pmcraid_notify_ioastate()
1493 &pinstance->scn.msg, in pmcraid_notify_ioastate()
1505 static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance) in pmcraid_handle_config_change() argument
1519 ccn_hcam = (struct pmcraid_hcam_ccn *)pinstance->ccn.hcam; in pmcraid_handle_config_change()
1521 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_handle_config_change()
1525 le32_to_cpu(pinstance->ccn.hcam->ilid), in pmcraid_handle_config_change()
1526 pinstance->ccn.hcam->op_code, in pmcraid_handle_config_change()
1527 (le32_to_cpu(pinstance->ccn.hcam->timestamp1) | in pmcraid_handle_config_change()
1528 ((le32_to_cpu(pinstance->ccn.hcam->timestamp2) & 0xffffffffLL) << 32)), in pmcraid_handle_config_change()
1529 pinstance->ccn.hcam->notification_type, in pmcraid_handle_config_change()
1530 pinstance->ccn.hcam->notification_lost, in pmcraid_handle_config_change()
1531 pinstance->ccn.hcam->flags, in pmcraid_handle_config_change()
1532 pinstance->host->unique_id, in pmcraid_handle_config_change()
1545 if (pinstance->ccn.hcam->notification_lost) { in pmcraid_handle_config_change()
1546 cfgcmd = pmcraid_get_free_cmd(pinstance); in pmcraid_handle_config_change()
1549 pinstance->reinit_cfg_table = 1; in pmcraid_handle_config_change()
1561 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1569 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1570 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_handle_config_change()
1583 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1592 if (list_empty(&pinstance->free_res_q)) { in pmcraid_handle_config_change()
1593 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1596 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_handle_config_change()
1598 pmcraid_send_hcam(pinstance, in pmcraid_handle_config_change()
1600 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_handle_config_change()
1605 res = list_entry(pinstance->free_res_q.next, in pmcraid_handle_config_change()
1611 list_add_tail(&res->queue, &pinstance->used_res_q); in pmcraid_handle_config_change()
1614 memcpy(&res->cfg_entry, cfg_entry, pinstance->config_table_entry_size); in pmcraid_handle_config_change()
1616 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1626 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1629 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_handle_config_change()
1633 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1635 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1641 pmcraid_notify_ccn(pinstance); in pmcraid_handle_config_change()
1643 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1692 static void pmcraid_handle_error_log(struct pmcraid_instance *pinstance) in pmcraid_handle_error_log() argument
1697 hcam_ldn = (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_handle_error_log()
1701 pinstance->ldn.hcam->ilid, in pmcraid_handle_error_log()
1702 pinstance->ldn.hcam->op_code, in pmcraid_handle_error_log()
1703 pinstance->ldn.hcam->notification_type, in pmcraid_handle_error_log()
1704 pinstance->ldn.hcam->notification_lost, in pmcraid_handle_error_log()
1705 pinstance->ldn.hcam->flags, in pmcraid_handle_error_log()
1706 pinstance->ldn.hcam->overlay_id); in pmcraid_handle_error_log()
1709 if (pinstance->ldn.hcam->notification_type != in pmcraid_handle_error_log()
1713 if (pinstance->ldn.hcam->notification_lost == in pmcraid_handle_error_log()
1715 dev_info(&pinstance->pdev->dev, "Error notifications lost\n"); in pmcraid_handle_error_log()
1721 dev_info(&pinstance->pdev->dev, in pmcraid_handle_error_log()
1724 pinstance->host, in pmcraid_handle_error_log()
1743 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn() local
1747 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1755 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ccn()
1758 dev_info(&pinstance->pdev->dev, in pmcraid_process_ccn()
1760 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1761 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_process_ccn()
1762 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1764 pmcraid_handle_config_change(pinstance); in pmcraid_process_ccn()
1779 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn() local
1781 (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_process_ldn()
1787 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1795 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ldn()
1798 pmcraid_handle_error_log(pinstance); in pmcraid_process_ldn()
1800 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_process_ldn()
1802 pmcraid_initiate_reset(pinstance); in pmcraid_process_ldn()
1803 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_process_ldn()
1808 pinstance->timestamp_error = 1; in pmcraid_process_ldn()
1812 dev_info(&pinstance->pdev->dev, in pmcraid_process_ldn()
1817 pmcraid_notify_ldn(pinstance); in pmcraid_process_ldn()
1819 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1832 static void pmcraid_register_hcams(struct pmcraid_instance *pinstance) in pmcraid_register_hcams() argument
1834 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_register_hcams()
1835 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_register_hcams()
1844 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams() local
1851 atomic_set(&pinstance->ccn.ignore, 1); in pmcraid_unregister_hcams()
1852 atomic_set(&pinstance->ldn.ignore, 1); in pmcraid_unregister_hcams()
1858 if ((pinstance->force_ioa_reset && !pinstance->ioa_bringdown) || in pmcraid_unregister_hcams()
1859 pinstance->ioa_unit_check) { in pmcraid_unregister_hcams()
1860 pinstance->force_ioa_reset = 0; in pmcraid_unregister_hcams()
1861 pinstance->ioa_unit_check = 0; in pmcraid_unregister_hcams()
1862 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_unregister_hcams()
1882 static int pmcraid_reset_enable_ioa(struct pmcraid_instance *pinstance) in pmcraid_reset_enable_ioa() argument
1886 pmcraid_reinit_buffers(pinstance); in pmcraid_reset_enable_ioa()
1887 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_reset_enable_ioa()
1889 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_reset_enable_ioa()
1892 if (!pinstance->interrupt_mode) { in pmcraid_reset_enable_ioa()
1894 pinstance->int_regs. in pmcraid_reset_enable_ioa()
1897 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_reset_enable_ioa()
1914 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset() local
1939 if (pinstance->interrupt_mode) { in pmcraid_soft_reset()
1941 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1942 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1945 iowrite32(doorbell, pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1946 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1947 int_reg = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_soft_reset()
1950 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1962 static void pmcraid_get_dump(struct pmcraid_instance *pinstance) in pmcraid_get_dump() argument
1979 static void pmcraid_fail_outstanding_cmds(struct pmcraid_instance *pinstance) in pmcraid_fail_outstanding_cmds() argument
1987 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
1988 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
1991 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_fail_outstanding_cmds()
2029 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_fail_outstanding_cmds()
2030 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2033 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2053 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset() local
2056 pinstance->ioa_reset_in_progress = 1; in pmcraid_ioa_reset()
2058 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2060 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2064 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2066 switch (pinstance->ioa_state) { in pmcraid_ioa_reset()
2082 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_ioa_reset()
2083 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2091 scsi_block_requests(pinstance->host); in pmcraid_ioa_reset()
2097 if (pinstance->ioa_hard_reset == 0) { in pmcraid_ioa_reset()
2098 if (ioread32(pinstance->ioa_status) & in pmcraid_ioa_reset()
2101 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2105 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2112 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2123 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_ioa_reset()
2128 pinstance->ioa_reset_attempts++; in pmcraid_ioa_reset()
2131 if (pinstance->ioa_reset_attempts > PMCRAID_RESET_ATTEMPTS) { in pmcraid_ioa_reset()
2132 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2134 pinstance->ioa_state = IOA_STATE_DEAD; in pmcraid_ioa_reset()
2136 if (pinstance->ioa_bringdown) in pmcraid_ioa_reset()
2137 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2140 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2149 pci_restore_state(pinstance->pdev); in pmcraid_ioa_reset()
2152 pmcraid_fail_outstanding_cmds(pinstance); in pmcraid_ioa_reset()
2155 if (pinstance->ioa_unit_check) { in pmcraid_ioa_reset()
2157 pinstance->ioa_unit_check = 0; in pmcraid_ioa_reset()
2158 pmcraid_get_dump(pinstance); in pmcraid_ioa_reset()
2159 pinstance->ioa_reset_attempts--; in pmcraid_ioa_reset()
2160 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2169 if (pinstance->ioa_bringdown) { in pmcraid_ioa_reset()
2171 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2172 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2173 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_ioa_reset()
2174 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2182 if (pmcraid_reset_enable_ioa(pinstance)) { in pmcraid_ioa_reset()
2183 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2188 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2199 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2212 pinstance->ioa_state = IOA_STATE_OPERATIONAL; in pmcraid_ioa_reset()
2223 if (pinstance->ioa_shutdown_type == SHUTDOWN_NONE && in pmcraid_ioa_reset()
2224 pinstance->force_ioa_reset == 0) { in pmcraid_ioa_reset()
2225 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2229 if (pinstance->ioa_shutdown_type != SHUTDOWN_NONE) in pmcraid_ioa_reset()
2230 pinstance->ioa_state = IOA_STATE_IN_BRINGDOWN; in pmcraid_ioa_reset()
2243 pinstance->ioa_reset_in_progress = 0; in pmcraid_ioa_reset()
2244 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2245 pinstance->reset_cmd = NULL; in pmcraid_ioa_reset()
2246 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2247 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2253 if (pinstance->ioa_state == IOA_STATE_OPERATIONAL) in pmcraid_ioa_reset()
2254 pmcraid_register_hcams(pinstance); in pmcraid_ioa_reset()
2256 wake_up_all(&pinstance->reset_wait_q); in pmcraid_ioa_reset()
2273 static void pmcraid_initiate_reset(struct pmcraid_instance *pinstance) in pmcraid_initiate_reset() argument
2280 if (!pinstance->ioa_reset_in_progress) { in pmcraid_initiate_reset()
2281 scsi_block_requests(pinstance->host); in pmcraid_initiate_reset()
2282 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2289 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_initiate_reset()
2290 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2291 pinstance->force_ioa_reset = 1; in pmcraid_initiate_reset()
2292 pmcraid_notify_ioastate(pinstance, in pmcraid_initiate_reset()
2313 struct pmcraid_instance *pinstance, in pmcraid_reset_reload() argument
2322 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2324 if (pinstance->ioa_reset_in_progress) { in pmcraid_reset_reload()
2327 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2329 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2330 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2332 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2334 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_reload()
2339 if (pinstance->ioa_state == target_state) { in pmcraid_reset_reload()
2346 scsi_block_requests(pinstance->host); in pmcraid_reset_reload()
2347 reset_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_reload()
2354 pinstance->ioa_bringdown = 1; in pmcraid_reset_reload()
2356 pinstance->ioa_shutdown_type = shutdown_type; in pmcraid_reset_reload()
2357 pinstance->reset_cmd = reset_cmd; in pmcraid_reset_reload()
2358 pinstance->force_ioa_reset = reset; in pmcraid_reset_reload()
2361 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2363 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2364 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2367 scsi_unblock_requests(pinstance->host); in pmcraid_reset_reload()
2368 return pinstance->ioa_state != target_state; in pmcraid_reset_reload()
2371 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2383 static int pmcraid_reset_bringdown(struct pmcraid_instance *pinstance) in pmcraid_reset_bringdown() argument
2385 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringdown()
2398 static int pmcraid_reset_bringup(struct pmcraid_instance *pinstance) in pmcraid_reset_bringup() argument
2400 pmcraid_notify_ioastate(pinstance, PMC_DEVICE_EVENT_RESET_START); in pmcraid_reset_bringup()
2402 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringup()
2580 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler() local
2628 scsi_report_bus_reset(pinstance->host, in pmcraid_error_handler()
2699 struct pmcraid_instance *pinstance; in pmcraid_reset_device() local
2705 pinstance = in pmcraid_reset_device()
2719 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2720 if (pinstance->ioa_reset_in_progress || in pmcraid_reset_device()
2721 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_device()
2722 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2733 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2736 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2765 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2855 struct pmcraid_instance *pinstance; in pmcraid_abort_cmd() local
2857 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2859 cancel_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_abort_cmd()
2935 struct pmcraid_instance *pinstance; in pmcraid_eh_abort_handler() local
2944 pinstance = in pmcraid_eh_abort_handler()
2960 spin_lock_irqsave(pinstance->host->host_lock, host_lock_flags); in pmcraid_eh_abort_handler()
2962 if (pinstance->ioa_reset_in_progress || in pmcraid_eh_abort_handler()
2963 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_eh_abort_handler()
2964 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
2974 spin_lock_irqsave(&pinstance->pending_pool_lock, pending_lock_flags); in pmcraid_eh_abort_handler()
2975 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
2983 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_eh_abort_handler()
2992 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3058 struct pmcraid_instance *pinstance = in pmcraid_eh_host_reset_handler() local
3067 if (atomic_read(&pinstance->outstanding_cmds) <= in pmcraid_eh_host_reset_handler()
3073 dev_err(&pinstance->pdev->dev, in pmcraid_eh_host_reset_handler()
3075 return pmcraid_reset_bringup(pinstance) == 0 ? SUCCESS : FAILED; in pmcraid_eh_host_reset_handler()
3136 struct pmcraid_instance *pinstance, in pmcraid_build_ioadl() argument
3199 struct pmcraid_instance *pinstance; in pmcraid_queuecommand_lck() local
3206 pinstance = in pmcraid_queuecommand_lck()
3208 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_queuecommand_lck()
3215 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_queuecommand_lck()
3223 if (pinstance->ioa_reset_in_progress) in pmcraid_queuecommand_lck()
3236 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3254 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_queuecommand_lck()
3255 pinstance->num_hrrq; in pmcraid_queuecommand_lck()
3276 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3280 scsi_cmd->cmnd[0], pinstance->host->unique_id, in pmcraid_queuecommand_lck()
3308 struct pmcraid_instance *pinstance; in DEF_SCSI_QCMD() local
3314 pinstance = container_of(inode->i_cdev, struct pmcraid_instance, cdev); in DEF_SCSI_QCMD()
3315 filep->private_data = pinstance; in DEF_SCSI_QCMD()
3328 struct pmcraid_instance *pinstance; in pmcraid_chr_fasync() local
3331 pinstance = filep->private_data; in pmcraid_chr_fasync()
3332 mutex_lock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3333 rc = fasync_helper(fd, filep, mode, &pinstance->aen_queue); in pmcraid_chr_fasync()
3334 mutex_unlock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3351 struct pmcraid_instance *pinstance, in pmcraid_ioctl_driver() argument
3361 pmcraid_reset_bringup(pinstance); in pmcraid_ioctl_driver()
3418 struct pmcraid_instance *pinstance = NULL; in pmcraid_chr_ioctl() local
3438 pinstance = filep->private_data; in pmcraid_chr_ioctl()
3440 if (!pinstance) { in pmcraid_chr_ioctl()
3450 retval = pmcraid_ioctl_driver(pinstance, cmd, in pmcraid_chr_ioctl()
3494 struct pmcraid_instance *pinstance = in pmcraid_show_log_level() local
3496 return snprintf(buf, PAGE_SIZE, "%d\n", pinstance->current_log_level); in pmcraid_show_log_level()
3517 struct pmcraid_instance *pinstance; in pmcraid_store_log_level() local
3527 pinstance = (struct pmcraid_instance *)shost->hostdata; in pmcraid_store_log_level()
3528 pinstance->current_log_level = val; in pmcraid_store_log_level()
3585 struct pmcraid_instance *pinstance = in pmcraid_show_adapter_id() local
3587 u32 adapter_id = (pinstance->pdev->bus->number << 8) | in pmcraid_show_adapter_id()
3588 pinstance->pdev->devfn; in pmcraid_show_adapter_id()
3593 adapter_id, MINOR(pinstance->cdev.dev), aen_group); in pmcraid_show_adapter_id()
3650 struct pmcraid_instance *pinstance; in pmcraid_isr_msix() local
3657 pinstance = hrrq_vector->drv_inst; in pmcraid_isr_msix()
3661 intrs_val = pmcraid_read_interrupts(pinstance); in pmcraid_isr_msix()
3663 ((ioread32(pinstance->int_regs.host_ioa_interrupt_reg) in pmcraid_isr_msix()
3672 pinstance->ioa_unit_check = 1; in pmcraid_isr_msix()
3676 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_isr_msix()
3678 pmcraid_initiate_reset(pinstance); in pmcraid_isr_msix()
3680 pinstance->host->host_lock, in pmcraid_isr_msix()
3688 pmcraid_clr_trans_op(pinstance); in pmcraid_isr_msix()
3695 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
3696 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
3702 tasklet_schedule(&(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr_msix()
3719 struct pmcraid_instance *pinstance; in pmcraid_isr() local
3732 pinstance = hrrq_vector->drv_inst; in pmcraid_isr()
3734 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_isr()
3746 pinstance->ioa_unit_check = 1; in pmcraid_isr()
3749 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
3753 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
3754 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
3755 pmcraid_initiate_reset(pinstance); in pmcraid_isr()
3756 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
3763 pmcraid_clr_trans_op(pinstance); in pmcraid_isr()
3766 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
3768 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
3771 &(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr()
3790 struct pmcraid_instance *pinstance; in pmcraid_worker_function() local
3799 pinstance = container_of(workp, struct pmcraid_instance, worker_q); in pmcraid_worker_function()
3801 if (!atomic_read(&pinstance->expose_resources)) in pmcraid_worker_function()
3804 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_worker_function()
3806 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
3807 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
3815 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_worker_function()
3819 pinstance->host->host_lock, in pmcraid_worker_function()
3824 &pinstance->free_res_q); in pmcraid_worker_function()
3826 &pinstance->resource_lock, in pmcraid_worker_function()
3830 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
3835 pinstance->host->host_lock, in pmcraid_worker_function()
3841 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
3865 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_worker_function()
3867 scsi_add_device(pinstance->host, bus, target, lun); in pmcraid_worker_function()
3868 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
3873 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
3887 struct pmcraid_instance *pinstance; in pmcraid_tasklet_function() local
3896 pinstance = hrrq_vector->drv_inst; in pmcraid_tasklet_function()
3898 lockp = &(pinstance->hrrq_lock[id]); in pmcraid_tasklet_function()
3908 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
3911 pinstance->host_toggle_bit[id]) { in pmcraid_tasklet_function()
3916 if (pinstance->hrrq_curr[id] < pinstance->hrrq_end[id]) { in pmcraid_tasklet_function()
3917 pinstance->hrrq_curr[id]++; in pmcraid_tasklet_function()
3919 pinstance->hrrq_curr[id] = pinstance->hrrq_start[id]; in pmcraid_tasklet_function()
3920 pinstance->host_toggle_bit[id] ^= 1u; in pmcraid_tasklet_function()
3926 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
3930 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
3933 spin_lock_irqsave(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
3936 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
3939 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_tasklet_function()
3942 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_tasklet_function()
3945 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_tasklet_function()
3952 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
3969 void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_unregister_interrupt_handler() argument
3971 struct pci_dev *pdev = pinstance->pdev; in pmcraid_unregister_interrupt_handler()
3974 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_unregister_interrupt_handler()
3975 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_unregister_interrupt_handler()
3977 pinstance->interrupt_mode = 0; in pmcraid_unregister_interrupt_handler()
3989 pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_register_interrupt_handler() argument
3991 struct pci_dev *pdev = pinstance->pdev; in pmcraid_register_interrupt_handler()
4013 struct pmcraid_isr_param *vec = &pinstance->hrrq_vector[i]; in pmcraid_register_interrupt_handler()
4016 vec->drv_inst = pinstance; in pmcraid_register_interrupt_handler()
4023 pinstance->num_hrrq = num_hrrq; in pmcraid_register_interrupt_handler()
4025 pinstance->interrupt_mode = 1; in pmcraid_register_interrupt_handler()
4027 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4028 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4035 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_register_interrupt_handler()
4049 pmcraid_release_cmd_blocks(struct pmcraid_instance *pinstance, int max_index) in pmcraid_release_cmd_blocks() argument
4053 kmem_cache_free(pinstance->cmd_cachep, pinstance->cmd_list[i]); in pmcraid_release_cmd_blocks()
4054 pinstance->cmd_list[i] = NULL; in pmcraid_release_cmd_blocks()
4056 kmem_cache_destroy(pinstance->cmd_cachep); in pmcraid_release_cmd_blocks()
4057 pinstance->cmd_cachep = NULL; in pmcraid_release_cmd_blocks()
4073 struct pmcraid_instance *pinstance, in pmcraid_release_control_blocks() argument
4079 if (pinstance->control_pool == NULL) in pmcraid_release_control_blocks()
4083 dma_pool_free(pinstance->control_pool, in pmcraid_release_control_blocks()
4084 pinstance->cmd_list[i]->ioa_cb, in pmcraid_release_control_blocks()
4085 pinstance->cmd_list[i]->ioa_cb_bus_addr); in pmcraid_release_control_blocks()
4086 pinstance->cmd_list[i]->ioa_cb = NULL; in pmcraid_release_control_blocks()
4087 pinstance->cmd_list[i]->ioa_cb_bus_addr = 0; in pmcraid_release_control_blocks()
4089 dma_pool_destroy(pinstance->control_pool); in pmcraid_release_control_blocks()
4090 pinstance->control_pool = NULL; in pmcraid_release_control_blocks()
4102 static int pmcraid_allocate_cmd_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_cmd_blocks() argument
4106 sprintf(pinstance->cmd_pool_name, "pmcraid_cmd_pool_%d", in pmcraid_allocate_cmd_blocks()
4107 pinstance->host->unique_id); in pmcraid_allocate_cmd_blocks()
4110 pinstance->cmd_cachep = kmem_cache_create( in pmcraid_allocate_cmd_blocks()
4111 pinstance->cmd_pool_name, in pmcraid_allocate_cmd_blocks()
4114 if (!pinstance->cmd_cachep) in pmcraid_allocate_cmd_blocks()
4118 pinstance->cmd_list[i] = in pmcraid_allocate_cmd_blocks()
4119 kmem_cache_alloc(pinstance->cmd_cachep, GFP_KERNEL); in pmcraid_allocate_cmd_blocks()
4120 if (!pinstance->cmd_list[i]) { in pmcraid_allocate_cmd_blocks()
4121 pmcraid_release_cmd_blocks(pinstance, i); in pmcraid_allocate_cmd_blocks()
4138 static int pmcraid_allocate_control_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_control_blocks() argument
4142 sprintf(pinstance->ctl_pool_name, "pmcraid_control_pool_%d", in pmcraid_allocate_control_blocks()
4143 pinstance->host->unique_id); in pmcraid_allocate_control_blocks()
4145 pinstance->control_pool = in pmcraid_allocate_control_blocks()
4146 dma_pool_create(pinstance->ctl_pool_name, in pmcraid_allocate_control_blocks()
4147 &pinstance->pdev->dev, in pmcraid_allocate_control_blocks()
4151 if (!pinstance->control_pool) in pmcraid_allocate_control_blocks()
4155 pinstance->cmd_list[i]->ioa_cb = in pmcraid_allocate_control_blocks()
4157 pinstance->control_pool, in pmcraid_allocate_control_blocks()
4159 &(pinstance->cmd_list[i]->ioa_cb_bus_addr)); in pmcraid_allocate_control_blocks()
4161 if (!pinstance->cmd_list[i]->ioa_cb) { in pmcraid_allocate_control_blocks()
4162 pmcraid_release_control_blocks(pinstance, i); in pmcraid_allocate_control_blocks()
4178 pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex) in pmcraid_release_host_rrqs() argument
4183 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_host_rrqs()
4185 pinstance->hrrq_start[i], in pmcraid_release_host_rrqs()
4186 pinstance->hrrq_start_bus_addr[i]); in pmcraid_release_host_rrqs()
4189 pinstance->hrrq_start[i] = NULL; in pmcraid_release_host_rrqs()
4190 pinstance->hrrq_start_bus_addr[i] = 0; in pmcraid_release_host_rrqs()
4191 pinstance->host_toggle_bit[i] = 0; in pmcraid_release_host_rrqs()
4202 static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance) in pmcraid_allocate_host_rrqs() argument
4208 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_allocate_host_rrqs()
4209 pinstance->hrrq_start[i] = in pmcraid_allocate_host_rrqs()
4210 dma_alloc_coherent(&pinstance->pdev->dev, buffer_size, in pmcraid_allocate_host_rrqs()
4211 &pinstance->hrrq_start_bus_addr[i], in pmcraid_allocate_host_rrqs()
4213 if (!pinstance->hrrq_start[i]) { in pmcraid_allocate_host_rrqs()
4216 pmcraid_release_host_rrqs(pinstance, i); in pmcraid_allocate_host_rrqs()
4220 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_allocate_host_rrqs()
4221 pinstance->hrrq_end[i] = in pmcraid_allocate_host_rrqs()
4222 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_allocate_host_rrqs()
4223 pinstance->host_toggle_bit[i] = 1; in pmcraid_allocate_host_rrqs()
4224 spin_lock_init(&pinstance->hrrq_lock[i]); in pmcraid_allocate_host_rrqs()
4237 static void pmcraid_release_hcams(struct pmcraid_instance *pinstance) in pmcraid_release_hcams() argument
4239 if (pinstance->ccn.msg != NULL) { in pmcraid_release_hcams()
4240 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_hcams()
4243 pinstance->ccn.msg, in pmcraid_release_hcams()
4244 pinstance->ccn.baddr); in pmcraid_release_hcams()
4246 pinstance->ccn.msg = NULL; in pmcraid_release_hcams()
4247 pinstance->ccn.hcam = NULL; in pmcraid_release_hcams()
4248 pinstance->ccn.baddr = 0; in pmcraid_release_hcams()
4251 if (pinstance->ldn.msg != NULL) { in pmcraid_release_hcams()
4252 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_hcams()
4255 pinstance->ldn.msg, in pmcraid_release_hcams()
4256 pinstance->ldn.baddr); in pmcraid_release_hcams()
4258 pinstance->ldn.msg = NULL; in pmcraid_release_hcams()
4259 pinstance->ldn.hcam = NULL; in pmcraid_release_hcams()
4260 pinstance->ldn.baddr = 0; in pmcraid_release_hcams()
4271 static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance) in pmcraid_allocate_hcams() argument
4273 pinstance->ccn.msg = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_hcams()
4276 &pinstance->ccn.baddr, GFP_KERNEL); in pmcraid_allocate_hcams()
4278 pinstance->ldn.msg = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_hcams()
4281 &pinstance->ldn.baddr, GFP_KERNEL); in pmcraid_allocate_hcams()
4283 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) { in pmcraid_allocate_hcams()
4284 pmcraid_release_hcams(pinstance); in pmcraid_allocate_hcams()
4286 pinstance->ccn.hcam = in pmcraid_allocate_hcams()
4287 (void *)pinstance->ccn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4288 pinstance->ldn.hcam = in pmcraid_allocate_hcams()
4289 (void *)pinstance->ldn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4291 atomic_set(&pinstance->ccn.ignore, 0); in pmcraid_allocate_hcams()
4292 atomic_set(&pinstance->ldn.ignore, 0); in pmcraid_allocate_hcams()
4295 return (pinstance->ldn.msg == NULL) ? -ENOMEM : 0; in pmcraid_allocate_hcams()
4305 static void pmcraid_release_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_config_buffers() argument
4307 if (pinstance->cfg_table != NULL && in pmcraid_release_config_buffers()
4308 pinstance->cfg_table_bus_addr != 0) { in pmcraid_release_config_buffers()
4309 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_config_buffers()
4311 pinstance->cfg_table, in pmcraid_release_config_buffers()
4312 pinstance->cfg_table_bus_addr); in pmcraid_release_config_buffers()
4313 pinstance->cfg_table = NULL; in pmcraid_release_config_buffers()
4314 pinstance->cfg_table_bus_addr = 0; in pmcraid_release_config_buffers()
4317 if (pinstance->res_entries != NULL) { in pmcraid_release_config_buffers()
4321 list_del(&pinstance->res_entries[i].queue); in pmcraid_release_config_buffers()
4322 kfree(pinstance->res_entries); in pmcraid_release_config_buffers()
4323 pinstance->res_entries = NULL; in pmcraid_release_config_buffers()
4326 pmcraid_release_hcams(pinstance); in pmcraid_release_config_buffers()
4336 static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_allocate_config_buffers() argument
4340 pinstance->res_entries = in pmcraid_allocate_config_buffers()
4345 if (NULL == pinstance->res_entries) { in pmcraid_allocate_config_buffers()
4351 list_add_tail(&pinstance->res_entries[i].queue, in pmcraid_allocate_config_buffers()
4352 &pinstance->free_res_q); in pmcraid_allocate_config_buffers()
4354 pinstance->cfg_table = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_config_buffers()
4356 &pinstance->cfg_table_bus_addr, in pmcraid_allocate_config_buffers()
4359 if (NULL == pinstance->cfg_table) { in pmcraid_allocate_config_buffers()
4361 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4365 if (pmcraid_allocate_hcams(pinstance)) { in pmcraid_allocate_config_buffers()
4367 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4382 static void pmcraid_init_tasklets(struct pmcraid_instance *pinstance) in pmcraid_init_tasklets() argument
4385 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_init_tasklets()
4386 tasklet_init(&pinstance->isr_tasklet[i], in pmcraid_init_tasklets()
4388 (unsigned long)&pinstance->hrrq_vector[i]); in pmcraid_init_tasklets()
4399 static void pmcraid_kill_tasklets(struct pmcraid_instance *pinstance) in pmcraid_kill_tasklets() argument
4402 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_kill_tasklets()
4403 tasklet_kill(&pinstance->isr_tasklet[i]); in pmcraid_kill_tasklets()
4414 static void pmcraid_release_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_buffers() argument
4416 pmcraid_release_config_buffers(pinstance); in pmcraid_release_buffers()
4417 pmcraid_release_control_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4418 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4419 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_release_buffers()
4421 if (pinstance->inq_data != NULL) { in pmcraid_release_buffers()
4422 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_buffers()
4424 pinstance->inq_data, in pmcraid_release_buffers()
4425 pinstance->inq_data_baddr); in pmcraid_release_buffers()
4427 pinstance->inq_data = NULL; in pmcraid_release_buffers()
4428 pinstance->inq_data_baddr = 0; in pmcraid_release_buffers()
4431 if (pinstance->timestamp_data != NULL) { in pmcraid_release_buffers()
4432 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_buffers()
4434 pinstance->timestamp_data, in pmcraid_release_buffers()
4435 pinstance->timestamp_data_baddr); in pmcraid_release_buffers()
4437 pinstance->timestamp_data = NULL; in pmcraid_release_buffers()
4438 pinstance->timestamp_data_baddr = 0; in pmcraid_release_buffers()
4455 static int pmcraid_init_buffers(struct pmcraid_instance *pinstance) in pmcraid_init_buffers() argument
4459 if (pmcraid_allocate_host_rrqs(pinstance)) { in pmcraid_init_buffers()
4461 pinstance->num_hrrq); in pmcraid_init_buffers()
4465 if (pmcraid_allocate_config_buffers(pinstance)) { in pmcraid_init_buffers()
4467 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4471 if (pmcraid_allocate_cmd_blocks(pinstance)) { in pmcraid_init_buffers()
4473 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
4474 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4478 if (pmcraid_allocate_control_blocks(pinstance)) { in pmcraid_init_buffers()
4480 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
4481 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_init_buffers()
4482 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4487 pinstance->inq_data = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_init_buffers()
4489 &pinstance->inq_data_baddr, GFP_KERNEL); in pmcraid_init_buffers()
4490 if (pinstance->inq_data == NULL) { in pmcraid_init_buffers()
4492 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
4497 pinstance->timestamp_data = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_init_buffers()
4499 &pinstance->timestamp_data_baddr, in pmcraid_init_buffers()
4501 if (pinstance->timestamp_data == NULL) { in pmcraid_init_buffers()
4504 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
4514 struct pmcraid_cmd *cmdp = pinstance->cmd_list[i]; in pmcraid_init_buffers()
4516 cmdp->drv_inst = pinstance; in pmcraid_init_buffers()
4517 list_add_tail(&cmdp->free_list, &pinstance->free_cmd_pool); in pmcraid_init_buffers()
4529 static void pmcraid_reinit_buffers(struct pmcraid_instance *pinstance) in pmcraid_reinit_buffers() argument
4534 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_reinit_buffers()
4535 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_reinit_buffers()
4536 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_reinit_buffers()
4537 pinstance->hrrq_end[i] = in pmcraid_reinit_buffers()
4538 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_reinit_buffers()
4539 pinstance->host_toggle_bit[i] = 1; in pmcraid_reinit_buffers()
4555 struct pmcraid_instance *pinstance = in pmcraid_init_instance() local
4558 pinstance->host = host; in pmcraid_init_instance()
4559 pinstance->pdev = pdev; in pmcraid_init_instance()
4562 pinstance->mapped_dma_addr = mapped_pci_addr; in pmcraid_init_instance()
4566 struct pmcraid_chip_details *chip_cfg = pinstance->chip_cfg; in pmcraid_init_instance()
4567 struct pmcraid_interrupts *pint_regs = &pinstance->int_regs; in pmcraid_init_instance()
4569 pinstance->ioarrin = mapped_pci_addr + chip_cfg->ioarrin; in pmcraid_init_instance()
4585 pinstance->mailbox = mapped_pci_addr + chip_cfg->mailbox; in pmcraid_init_instance()
4586 pinstance->ioa_status = mapped_pci_addr + chip_cfg->ioastatus; in pmcraid_init_instance()
4595 pinstance->ioa_reset_attempts = 0; in pmcraid_init_instance()
4596 init_waitqueue_head(&pinstance->reset_wait_q); in pmcraid_init_instance()
4598 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_init_instance()
4599 atomic_set(&pinstance->last_message_id, 0); in pmcraid_init_instance()
4600 atomic_set(&pinstance->expose_resources, 0); in pmcraid_init_instance()
4602 INIT_LIST_HEAD(&pinstance->free_res_q); in pmcraid_init_instance()
4603 INIT_LIST_HEAD(&pinstance->used_res_q); in pmcraid_init_instance()
4604 INIT_LIST_HEAD(&pinstance->free_cmd_pool); in pmcraid_init_instance()
4605 INIT_LIST_HEAD(&pinstance->pending_cmd_pool); in pmcraid_init_instance()
4607 spin_lock_init(&pinstance->free_pool_lock); in pmcraid_init_instance()
4608 spin_lock_init(&pinstance->pending_pool_lock); in pmcraid_init_instance()
4609 spin_lock_init(&pinstance->resource_lock); in pmcraid_init_instance()
4610 mutex_init(&pinstance->aen_queue_lock); in pmcraid_init_instance()
4613 INIT_WORK(&pinstance->worker_q, pmcraid_worker_function); in pmcraid_init_instance()
4616 pinstance->current_log_level = pmcraid_log_level; in pmcraid_init_instance()
4619 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_init_instance()
4620 pinstance->reset_cmd = NULL; in pmcraid_init_instance()
4635 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_shutdown() local
4636 pmcraid_reset_bringdown(pinstance); in pmcraid_shutdown()
4668 static int pmcraid_setup_chrdev(struct pmcraid_instance *pinstance) in pmcraid_setup_chrdev() argument
4674 cdev_init(&pinstance->cdev, &pmcraid_fops); in pmcraid_setup_chrdev()
4675 pinstance->cdev.owner = THIS_MODULE; in pmcraid_setup_chrdev()
4677 error = cdev_add(&pinstance->cdev, MKDEV(pmcraid_major, minor), 1); in pmcraid_setup_chrdev()
4695 static void pmcraid_release_chrdev(struct pmcraid_instance *pinstance) in pmcraid_release_chrdev() argument
4697 pmcraid_release_minor(MINOR(pinstance->cdev.dev)); in pmcraid_release_chrdev()
4699 MKDEV(pmcraid_major, MINOR(pinstance->cdev.dev))); in pmcraid_release_chrdev()
4700 cdev_del(&pinstance->cdev); in pmcraid_release_chrdev()
4712 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_remove() local
4715 pmcraid_release_chrdev(pinstance); in pmcraid_remove()
4718 scsi_remove_host(pinstance->host); in pmcraid_remove()
4721 scsi_block_requests(pinstance->host); in pmcraid_remove()
4726 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_remove()
4727 flush_work(&pinstance->worker_q); in pmcraid_remove()
4729 pmcraid_kill_tasklets(pinstance); in pmcraid_remove()
4730 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_remove()
4731 pmcraid_release_buffers(pinstance); in pmcraid_remove()
4732 iounmap(pinstance->mapped_dma_addr); in pmcraid_remove()
4734 scsi_host_put(pinstance->host); in pmcraid_remove()
4749 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_suspend() local
4752 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_suspend()
4753 pmcraid_kill_tasklets(pinstance); in pmcraid_suspend()
4754 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_suspend()
4768 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_resume() local
4769 struct Scsi_Host *host = pinstance->host; in pmcraid_resume()
4784 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
4785 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_resume()
4786 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_resume()
4795 pmcraid_init_tasklets(pinstance); in pmcraid_resume()
4796 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_resume()
4801 pinstance->ioa_hard_reset = 1; in pmcraid_resume()
4806 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_resume()
4815 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
4816 pmcraid_kill_tasklets(pinstance); in pmcraid_resume()
4817 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_resume()
4834 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset() local
4837 spin_lock_irqsave(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
4839 spin_unlock_irqrestore(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
4840 scsi_unblock_requests(pinstance->host); in pmcraid_complete_ioa_reset()
4841 schedule_work(&pinstance->worker_q); in pmcraid_complete_ioa_reset()
4895 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp() local
4903 pinstance->timestamp_data->timestamp[0] = (__u8)(timestamp); in pmcraid_set_timestamp()
4904 pinstance->timestamp_data->timestamp[1] = (__u8)((timestamp) >> 8); in pmcraid_set_timestamp()
4905 pinstance->timestamp_data->timestamp[2] = (__u8)((timestamp) >> 16); in pmcraid_set_timestamp()
4906 pinstance->timestamp_data->timestamp[3] = (__u8)((timestamp) >> 24); in pmcraid_set_timestamp()
4907 pinstance->timestamp_data->timestamp[4] = (__u8)((timestamp) >> 32); in pmcraid_set_timestamp()
4908 pinstance->timestamp_data->timestamp[5] = (__u8)((timestamp) >> 40); in pmcraid_set_timestamp()
4929 ioadl->address = cpu_to_le64(pinstance->timestamp_data_baddr); in pmcraid_set_timestamp()
4932 if (!pinstance->timestamp_error) { in pmcraid_set_timestamp()
4933 pinstance->timestamp_error = 0; in pmcraid_set_timestamp()
4958 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table() local
4966 if (pinstance->cfg_table->flags & MICROCODE_UPDATE_REQUIRED) in pmcraid_init_res_table()
4969 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_init_res_table()
4975 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
4977 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) in pmcraid_init_res_table()
4980 for (i = 0; i < le16_to_cpu(pinstance->cfg_table->num_entries); i++) { in pmcraid_init_res_table()
4981 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_init_res_table()
4983 cfgte = &pinstance->cfg_table->entries[i]; in pmcraid_init_res_table()
4986 &pinstance->cfg_table->entries_ext[i]; in pmcraid_init_res_table()
5001 &pinstance->used_res_q); in pmcraid_init_res_table()
5010 if (list_empty(&pinstance->free_res_q)) { in pmcraid_init_res_table()
5016 res = list_entry(pinstance->free_res_q.next, in pmcraid_init_res_table()
5022 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5030 pinstance->config_table_entry_size); in pmcraid_init_res_table()
5047 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5049 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_init_res_table()
5054 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5072 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg() local
5075 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_querycfg()
5077 pinstance->config_table_entry_size = in pmcraid_querycfg()
5080 pinstance->config_table_entry_size = in pmcraid_querycfg()
5106 ioadl->address = cpu_to_le64(pinstance->cfg_table_bus_addr); in pmcraid_querycfg()
5126 struct pmcraid_instance *pinstance; in pmcraid_probe() local
5208 pinstance = (struct pmcraid_instance *)host->hostdata; in pmcraid_probe()
5209 memset(pinstance, 0, sizeof(*pinstance)); in pmcraid_probe()
5211 pinstance->chip_cfg = in pmcraid_probe()
5221 pci_set_drvdata(pdev, pinstance); in pmcraid_probe()
5224 rc = pci_save_state(pinstance->pdev); in pmcraid_probe()
5231 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_probe()
5233 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_probe()
5240 pmcraid_init_tasklets(pinstance); in pmcraid_probe()
5243 rc = pmcraid_init_buffers(pinstance); in pmcraid_probe()
5251 pmcraid_reset_type(pinstance); in pmcraid_probe()
5253 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_probe()
5259 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_probe()
5266 rc = scsi_add_host(pinstance->host, &pdev->dev); in pmcraid_probe()
5272 scsi_scan_host(pinstance->host); in pmcraid_probe()
5274 rc = pmcraid_setup_chrdev(pinstance); in pmcraid_probe()
5285 atomic_set(&pinstance->expose_resources, 1); in pmcraid_probe()
5286 schedule_work(&pinstance->worker_q); in pmcraid_probe()
5293 pmcraid_release_buffers(pinstance); in pmcraid_probe()
5296 pmcraid_kill_tasklets(pinstance); in pmcraid_probe()
5297 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_probe()