Lines Matching refs:pinstance

155 	struct pmcraid_instance *pinstance;  in pmcraid_slave_alloc()  local
161 pinstance = shost_priv(scsi_dev->host); in pmcraid_slave_alloc()
163 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_slave_alloc()
170 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
171 list_for_each_entry(temp, &pinstance->used_res_q, queue) { in pmcraid_slave_alloc()
208 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
375 struct pmcraid_instance *pinstance in pmcraid_get_free_cmd() argument
382 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
384 if (!list_empty(&pinstance->free_cmd_pool)) { in pmcraid_get_free_cmd()
385 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
389 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
406 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd() local
409 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
410 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
411 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
422 static u32 pmcraid_read_interrupts(struct pmcraid_instance *pinstance) in pmcraid_read_interrupts() argument
424 return (pinstance->interrupt_mode) ? in pmcraid_read_interrupts()
425 ioread32(pinstance->int_regs.ioa_host_msix_interrupt_reg) : in pmcraid_read_interrupts()
426 ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_read_interrupts()
439 struct pmcraid_instance *pinstance, in pmcraid_disable_interrupts() argument
443 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
446 iowrite32(intrs, pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_disable_interrupts()
447 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
448 ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
450 if (!pinstance->interrupt_mode) { in pmcraid_disable_interrupts()
452 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
453 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
467 struct pmcraid_instance *pinstance, in pmcraid_enable_interrupts() argument
471 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
474 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
476 if (!pinstance->interrupt_mode) { in pmcraid_enable_interrupts()
478 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
479 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
483 ioread32(pinstance->int_regs.global_interrupt_mask_reg), in pmcraid_enable_interrupts()
484 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg)); in pmcraid_enable_interrupts()
496 struct pmcraid_instance *pinstance in pmcraid_clr_trans_op() argument
501 if (!pinstance->interrupt_mode) { in pmcraid_clr_trans_op()
503 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
504 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
506 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
507 ioread32(pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
510 if (pinstance->reset_cmd != NULL) { in pmcraid_clr_trans_op()
511 del_timer(&pinstance->reset_cmd->timer); in pmcraid_clr_trans_op()
513 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
514 pinstance->reset_cmd->cmd_done(pinstance->reset_cmd); in pmcraid_clr_trans_op()
516 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
529 static void pmcraid_reset_type(struct pmcraid_instance *pinstance) in pmcraid_reset_type() argument
535 mask = ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_reset_type()
536 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_reset_type()
537 alerts = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_type()
543 pinstance->ioa_hard_reset = 1; in pmcraid_reset_type()
548 pinstance->ioa_unit_check = 1; in pmcraid_reset_type()
563 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done() local
568 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_bist_done()
580 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
582 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
594 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist() local
599 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
600 doorbells = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
601 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_start_bist()
620 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done() local
621 u32 status = ioread32(pinstance->ioa_status); in pmcraid_reset_alert_done()
631 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
633 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
656 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert() local
666 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_reset_alert()
680 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
682 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
686 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_reset_alert()
704 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler() local
707 dev_info(&pinstance->pdev->dev, in pmcraid_timeout_handler()
717 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
718 if (!pinstance->ioa_reset_in_progress) { in pmcraid_timeout_handler()
719 pinstance->ioa_reset_attempts = 0; in pmcraid_timeout_handler()
720 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
726 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_timeout_handler()
732 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
733 pinstance->ioa_reset_in_progress = 1; in pmcraid_timeout_handler()
737 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
750 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
755 if (pinstance->scn.ioa_state != PMC_DEVICE_EVENT_RESET_START && in pmcraid_timeout_handler()
756 pinstance->scn.ioa_state != PMC_DEVICE_EVENT_SHUTDOWN_START) in pmcraid_timeout_handler()
757 pmcraid_notify_ioastate(pinstance, in pmcraid_timeout_handler()
760 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_timeout_handler()
761 scsi_block_requests(pinstance->host); in pmcraid_timeout_handler()
763 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
839 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done() local
856 pci_free_consistent(pinstance->pdev, in pmcraid_erp_done()
881 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command() local
889 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
890 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
891 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
892 atomic_inc(&pinstance->outstanding_cmds); in _pmcraid_fire_command()
896 iowrite32(le64_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), pinstance->ioarrin); in _pmcraid_fire_command()
943 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done() local
946 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
948 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
998 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done() local
1008 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1009 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_get_fwversion_done()
1011 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1029 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion() local
1053 ioadl->address = cpu_to_le64(pinstance->inq_data_baddr); in pmcraid_get_fwversion()
1069 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq() local
1072 __be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]); in pmcraid_identify_hrrq()
1079 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1145 struct pmcraid_instance *pinstance, in pmcraid_init_hcam() argument
1157 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1167 dma = pinstance->ccn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1168 hcam = &pinstance->ccn; in pmcraid_init_hcam()
1172 dma = pinstance->ldn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1173 hcam = &pinstance->ldn; in pmcraid_init_hcam()
1214 static void pmcraid_send_hcam(struct pmcraid_instance *pinstance, u8 type) in pmcraid_send_hcam() argument
1216 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam()
1265 struct pmcraid_instance *pinstance; in pmcraid_cancel_hcam() local
1268 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1270 &pinstance->ldn : &pinstance->ccn; in pmcraid_cancel_hcam()
1416 struct pmcraid_instance *pinstance, in pmcraid_notify_aen() argument
1426 aen_msg->hostno = (pinstance->host->unique_id << 16 | in pmcraid_notify_aen()
1427 MINOR(pinstance->cdev.dev)); in pmcraid_notify_aen()
1486 static int pmcraid_notify_ccn(struct pmcraid_instance *pinstance) in pmcraid_notify_ccn() argument
1488 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ccn()
1489 pinstance->ccn.msg, in pmcraid_notify_ccn()
1490 le32_to_cpu(pinstance->ccn.hcam->data_len) + in pmcraid_notify_ccn()
1501 static int pmcraid_notify_ldn(struct pmcraid_instance *pinstance) in pmcraid_notify_ldn() argument
1503 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ldn()
1504 pinstance->ldn.msg, in pmcraid_notify_ldn()
1505 le32_to_cpu(pinstance->ldn.hcam->data_len) + in pmcraid_notify_ldn()
1517 static void pmcraid_notify_ioastate(struct pmcraid_instance *pinstance, u32 evt) in pmcraid_notify_ioastate() argument
1519 pinstance->scn.ioa_state = evt; in pmcraid_notify_ioastate()
1520 pmcraid_notify_aen(pinstance, in pmcraid_notify_ioastate()
1521 &pinstance->scn.msg, in pmcraid_notify_ioastate()
1533 static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance) in pmcraid_handle_config_change() argument
1547 ccn_hcam = (struct pmcraid_hcam_ccn *)pinstance->ccn.hcam; in pmcraid_handle_config_change()
1549 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_handle_config_change()
1553 le32_to_cpu(pinstance->ccn.hcam->ilid), in pmcraid_handle_config_change()
1554 pinstance->ccn.hcam->op_code, in pmcraid_handle_config_change()
1555 (le32_to_cpu(pinstance->ccn.hcam->timestamp1) | in pmcraid_handle_config_change()
1556 ((le32_to_cpu(pinstance->ccn.hcam->timestamp2) & 0xffffffffLL) << 32)), in pmcraid_handle_config_change()
1557 pinstance->ccn.hcam->notification_type, in pmcraid_handle_config_change()
1558 pinstance->ccn.hcam->notification_lost, in pmcraid_handle_config_change()
1559 pinstance->ccn.hcam->flags, in pmcraid_handle_config_change()
1560 pinstance->host->unique_id, in pmcraid_handle_config_change()
1573 if (pinstance->ccn.hcam->notification_lost) { in pmcraid_handle_config_change()
1574 cfgcmd = pmcraid_get_free_cmd(pinstance); in pmcraid_handle_config_change()
1577 pinstance->reinit_cfg_table = 1; in pmcraid_handle_config_change()
1589 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1597 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1598 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_handle_config_change()
1611 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1620 if (list_empty(&pinstance->free_res_q)) { in pmcraid_handle_config_change()
1621 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1624 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_handle_config_change()
1626 pmcraid_send_hcam(pinstance, in pmcraid_handle_config_change()
1628 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_handle_config_change()
1633 res = list_entry(pinstance->free_res_q.next, in pmcraid_handle_config_change()
1639 list_add_tail(&res->queue, &pinstance->used_res_q); in pmcraid_handle_config_change()
1642 memcpy(&res->cfg_entry, cfg_entry, pinstance->config_table_entry_size); in pmcraid_handle_config_change()
1644 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1654 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1657 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_handle_config_change()
1661 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1663 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1669 pmcraid_notify_ccn(pinstance); in pmcraid_handle_config_change()
1671 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1720 static void pmcraid_handle_error_log(struct pmcraid_instance *pinstance) in pmcraid_handle_error_log() argument
1725 hcam_ldn = (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_handle_error_log()
1729 pinstance->ldn.hcam->ilid, in pmcraid_handle_error_log()
1730 pinstance->ldn.hcam->op_code, in pmcraid_handle_error_log()
1731 pinstance->ldn.hcam->notification_type, in pmcraid_handle_error_log()
1732 pinstance->ldn.hcam->notification_lost, in pmcraid_handle_error_log()
1733 pinstance->ldn.hcam->flags, in pmcraid_handle_error_log()
1734 pinstance->ldn.hcam->overlay_id); in pmcraid_handle_error_log()
1737 if (pinstance->ldn.hcam->notification_type != in pmcraid_handle_error_log()
1741 if (pinstance->ldn.hcam->notification_lost == in pmcraid_handle_error_log()
1743 dev_info(&pinstance->pdev->dev, "Error notifications lost\n"); in pmcraid_handle_error_log()
1749 dev_info(&pinstance->pdev->dev, in pmcraid_handle_error_log()
1752 pinstance->host, in pmcraid_handle_error_log()
1771 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn() local
1775 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1783 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ccn()
1786 dev_info(&pinstance->pdev->dev, in pmcraid_process_ccn()
1788 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1789 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_process_ccn()
1790 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1792 pmcraid_handle_config_change(pinstance); in pmcraid_process_ccn()
1808 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn() local
1810 (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_process_ldn()
1816 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1824 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ldn()
1827 pmcraid_handle_error_log(pinstance); in pmcraid_process_ldn()
1829 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_process_ldn()
1831 pmcraid_initiate_reset(pinstance); in pmcraid_process_ldn()
1832 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_process_ldn()
1837 pinstance->timestamp_error = 1; in pmcraid_process_ldn()
1841 dev_info(&pinstance->pdev->dev, in pmcraid_process_ldn()
1846 pmcraid_notify_ldn(pinstance); in pmcraid_process_ldn()
1848 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1861 static void pmcraid_register_hcams(struct pmcraid_instance *pinstance) in pmcraid_register_hcams() argument
1863 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_register_hcams()
1864 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_register_hcams()
1873 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams() local
1880 atomic_set(&pinstance->ccn.ignore, 1); in pmcraid_unregister_hcams()
1881 atomic_set(&pinstance->ldn.ignore, 1); in pmcraid_unregister_hcams()
1887 if ((pinstance->force_ioa_reset && !pinstance->ioa_bringdown) || in pmcraid_unregister_hcams()
1888 pinstance->ioa_unit_check) { in pmcraid_unregister_hcams()
1889 pinstance->force_ioa_reset = 0; in pmcraid_unregister_hcams()
1890 pinstance->ioa_unit_check = 0; in pmcraid_unregister_hcams()
1891 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_unregister_hcams()
1911 static int pmcraid_reset_enable_ioa(struct pmcraid_instance *pinstance) in pmcraid_reset_enable_ioa() argument
1915 pmcraid_reinit_buffers(pinstance); in pmcraid_reset_enable_ioa()
1916 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_reset_enable_ioa()
1918 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_reset_enable_ioa()
1921 if (!pinstance->interrupt_mode) { in pmcraid_reset_enable_ioa()
1923 pinstance->int_regs. in pmcraid_reset_enable_ioa()
1926 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_reset_enable_ioa()
1943 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset() local
1968 if (pinstance->interrupt_mode) { in pmcraid_soft_reset()
1970 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1971 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1974 iowrite32(doorbell, pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1975 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1976 int_reg = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_soft_reset()
1979 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1991 static void pmcraid_get_dump(struct pmcraid_instance *pinstance) in pmcraid_get_dump() argument
2008 static void pmcraid_fail_outstanding_cmds(struct pmcraid_instance *pinstance) in pmcraid_fail_outstanding_cmds() argument
2016 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2017 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
2020 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_fail_outstanding_cmds()
2058 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_fail_outstanding_cmds()
2059 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2062 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2082 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset() local
2085 pinstance->ioa_reset_in_progress = 1; in pmcraid_ioa_reset()
2087 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2089 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2093 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2095 switch (pinstance->ioa_state) { in pmcraid_ioa_reset()
2111 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_ioa_reset()
2112 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2120 scsi_block_requests(pinstance->host); in pmcraid_ioa_reset()
2126 if (pinstance->ioa_hard_reset == 0) { in pmcraid_ioa_reset()
2127 if (ioread32(pinstance->ioa_status) & in pmcraid_ioa_reset()
2130 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2134 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2141 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2152 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_ioa_reset()
2157 pinstance->ioa_reset_attempts++; in pmcraid_ioa_reset()
2160 if (pinstance->ioa_reset_attempts > PMCRAID_RESET_ATTEMPTS) { in pmcraid_ioa_reset()
2161 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2163 pinstance->ioa_state = IOA_STATE_DEAD; in pmcraid_ioa_reset()
2165 if (pinstance->ioa_bringdown) in pmcraid_ioa_reset()
2166 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2169 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2178 pci_restore_state(pinstance->pdev); in pmcraid_ioa_reset()
2181 pmcraid_fail_outstanding_cmds(pinstance); in pmcraid_ioa_reset()
2184 if (pinstance->ioa_unit_check) { in pmcraid_ioa_reset()
2186 pinstance->ioa_unit_check = 0; in pmcraid_ioa_reset()
2187 pmcraid_get_dump(pinstance); in pmcraid_ioa_reset()
2188 pinstance->ioa_reset_attempts--; in pmcraid_ioa_reset()
2189 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2198 if (pinstance->ioa_bringdown) { in pmcraid_ioa_reset()
2200 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2201 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2202 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_ioa_reset()
2203 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2211 if (pmcraid_reset_enable_ioa(pinstance)) { in pmcraid_ioa_reset()
2212 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2217 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2228 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2241 pinstance->ioa_state = IOA_STATE_OPERATIONAL; in pmcraid_ioa_reset()
2252 if (pinstance->ioa_shutdown_type == SHUTDOWN_NONE && in pmcraid_ioa_reset()
2253 pinstance->force_ioa_reset == 0) { in pmcraid_ioa_reset()
2254 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2258 if (pinstance->ioa_shutdown_type != SHUTDOWN_NONE) in pmcraid_ioa_reset()
2259 pinstance->ioa_state = IOA_STATE_IN_BRINGDOWN; in pmcraid_ioa_reset()
2272 pinstance->ioa_reset_in_progress = 0; in pmcraid_ioa_reset()
2273 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2274 pinstance->reset_cmd = NULL; in pmcraid_ioa_reset()
2275 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2276 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2282 if (pinstance->ioa_state == IOA_STATE_OPERATIONAL) in pmcraid_ioa_reset()
2283 pmcraid_register_hcams(pinstance); in pmcraid_ioa_reset()
2285 wake_up_all(&pinstance->reset_wait_q); in pmcraid_ioa_reset()
2302 static void pmcraid_initiate_reset(struct pmcraid_instance *pinstance) in pmcraid_initiate_reset() argument
2309 if (!pinstance->ioa_reset_in_progress) { in pmcraid_initiate_reset()
2310 scsi_block_requests(pinstance->host); in pmcraid_initiate_reset()
2311 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2318 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_initiate_reset()
2319 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2320 pinstance->force_ioa_reset = 1; in pmcraid_initiate_reset()
2321 pmcraid_notify_ioastate(pinstance, in pmcraid_initiate_reset()
2342 struct pmcraid_instance *pinstance, in pmcraid_reset_reload() argument
2351 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2353 if (pinstance->ioa_reset_in_progress) { in pmcraid_reset_reload()
2356 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2358 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2359 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2361 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2363 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_reload()
2368 if (pinstance->ioa_state == target_state) { in pmcraid_reset_reload()
2375 scsi_block_requests(pinstance->host); in pmcraid_reset_reload()
2376 reset_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_reload()
2383 pinstance->ioa_bringdown = 1; in pmcraid_reset_reload()
2385 pinstance->ioa_shutdown_type = shutdown_type; in pmcraid_reset_reload()
2386 pinstance->reset_cmd = reset_cmd; in pmcraid_reset_reload()
2387 pinstance->force_ioa_reset = reset; in pmcraid_reset_reload()
2390 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2392 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2393 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2396 scsi_unblock_requests(pinstance->host); in pmcraid_reset_reload()
2397 return pinstance->ioa_state != target_state; in pmcraid_reset_reload()
2400 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2412 static int pmcraid_reset_bringdown(struct pmcraid_instance *pinstance) in pmcraid_reset_bringdown() argument
2414 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringdown()
2427 static int pmcraid_reset_bringup(struct pmcraid_instance *pinstance) in pmcraid_reset_bringup() argument
2429 pmcraid_notify_ioastate(pinstance, PMC_DEVICE_EVENT_RESET_START); in pmcraid_reset_bringup()
2431 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringup()
2611 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler() local
2659 scsi_report_bus_reset(pinstance->host, in pmcraid_error_handler()
2730 struct pmcraid_instance *pinstance; in pmcraid_reset_device() local
2736 pinstance = in pmcraid_reset_device()
2750 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2751 if (pinstance->ioa_reset_in_progress || in pmcraid_reset_device()
2752 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_device()
2753 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2764 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2767 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2796 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2886 struct pmcraid_instance *pinstance; in pmcraid_abort_cmd() local
2889 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2892 cancel_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_abort_cmd()
2968 struct pmcraid_instance *pinstance; in pmcraid_eh_abort_handler() local
2977 pinstance = in pmcraid_eh_abort_handler()
2993 spin_lock_irqsave(pinstance->host->host_lock, host_lock_flags); in pmcraid_eh_abort_handler()
2995 if (pinstance->ioa_reset_in_progress || in pmcraid_eh_abort_handler()
2996 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_eh_abort_handler()
2997 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3007 spin_lock_irqsave(&pinstance->pending_pool_lock, pending_lock_flags); in pmcraid_eh_abort_handler()
3008 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
3016 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_eh_abort_handler()
3025 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3091 struct pmcraid_instance *pinstance = in pmcraid_eh_host_reset_handler() local
3100 if (atomic_read(&pinstance->outstanding_cmds) <= in pmcraid_eh_host_reset_handler()
3106 dev_err(&pinstance->pdev->dev, in pmcraid_eh_host_reset_handler()
3108 return pmcraid_reset_bringup(pinstance) == 0 ? SUCCESS : FAILED; in pmcraid_eh_host_reset_handler()
3169 struct pmcraid_instance *pinstance, in pmcraid_build_ioadl() argument
3354 struct pmcraid_instance *pinstance; in pmcraid_queuecommand_lck() local
3361 pinstance = in pmcraid_queuecommand_lck()
3363 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_queuecommand_lck()
3371 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_queuecommand_lck()
3379 if (pinstance->ioa_reset_in_progress) in pmcraid_queuecommand_lck()
3392 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3410 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_queuecommand_lck()
3411 pinstance->num_hrrq; in pmcraid_queuecommand_lck()
3432 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3436 scsi_cmd->cmnd[0], pinstance->host->unique_id, in pmcraid_queuecommand_lck()
3464 struct pmcraid_instance *pinstance; in DEF_SCSI_QCMD() local
3470 pinstance = container_of(inode->i_cdev, struct pmcraid_instance, cdev); in DEF_SCSI_QCMD()
3471 filep->private_data = pinstance; in DEF_SCSI_QCMD()
3484 struct pmcraid_instance *pinstance; in pmcraid_chr_fasync() local
3487 pinstance = filep->private_data; in pmcraid_chr_fasync()
3488 mutex_lock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3489 rc = fasync_helper(fd, filep, mode, &pinstance->aen_queue); in pmcraid_chr_fasync()
3490 mutex_unlock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3595 struct pmcraid_instance *pinstance, in pmcraid_ioctl_passthrough() argument
3616 if (pinstance->ioa_reset_in_progress) { in pmcraid_ioctl_passthrough()
3618 pinstance->reset_wait_q, in pmcraid_ioctl_passthrough()
3619 !pinstance->ioa_reset_in_progress, in pmcraid_ioctl_passthrough()
3629 if (pinstance->ioa_state != IOA_STATE_OPERATIONAL) { in pmcraid_ioctl_passthrough()
3680 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_ioctl_passthrough()
3715 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_ioctl_passthrough()
3716 pinstance->num_hrrq; in pmcraid_ioctl_passthrough()
3754 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3756 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3780 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3782 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3867 struct pmcraid_instance *pinstance, in pmcraid_ioctl_driver() argument
3877 pmcraid_reset_bringup(pinstance); in pmcraid_ioctl_driver()
3934 struct pmcraid_instance *pinstance = NULL; in pmcraid_chr_ioctl() local
3954 pinstance = filep->private_data; in pmcraid_chr_ioctl()
3956 if (!pinstance) { in pmcraid_chr_ioctl()
3969 scsi_block_requests(pinstance->host); in pmcraid_chr_ioctl()
3971 retval = pmcraid_ioctl_passthrough(pinstance, cmd, in pmcraid_chr_ioctl()
3975 scsi_unblock_requests(pinstance->host); in pmcraid_chr_ioctl()
3980 retval = pmcraid_ioctl_driver(pinstance, cmd, in pmcraid_chr_ioctl()
4025 struct pmcraid_instance *pinstance = in pmcraid_show_log_level() local
4027 return snprintf(buf, PAGE_SIZE, "%d\n", pinstance->current_log_level); in pmcraid_show_log_level()
4047 struct pmcraid_instance *pinstance; in pmcraid_store_log_level() local
4057 pinstance = (struct pmcraid_instance *)shost->hostdata; in pmcraid_store_log_level()
4058 pinstance->current_log_level = val; in pmcraid_store_log_level()
4113 struct pmcraid_instance *pinstance = in pmcraid_show_adapter_id() local
4115 u32 adapter_id = (pinstance->pdev->bus->number << 8) | in pmcraid_show_adapter_id()
4116 pinstance->pdev->devfn; in pmcraid_show_adapter_id()
4121 adapter_id, MINOR(pinstance->cdev.dev), aen_group); in pmcraid_show_adapter_id()
4178 struct pmcraid_instance *pinstance; in pmcraid_isr_msix() local
4185 pinstance = hrrq_vector->drv_inst; in pmcraid_isr_msix()
4189 intrs_val = pmcraid_read_interrupts(pinstance); in pmcraid_isr_msix()
4191 ((ioread32(pinstance->int_regs.host_ioa_interrupt_reg) in pmcraid_isr_msix()
4200 pinstance->ioa_unit_check = 1; in pmcraid_isr_msix()
4204 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_isr_msix()
4206 pmcraid_initiate_reset(pinstance); in pmcraid_isr_msix()
4208 pinstance->host->host_lock, in pmcraid_isr_msix()
4216 pmcraid_clr_trans_op(pinstance); in pmcraid_isr_msix()
4223 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4224 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4230 tasklet_schedule(&(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr_msix()
4247 struct pmcraid_instance *pinstance; in pmcraid_isr() local
4260 pinstance = hrrq_vector->drv_inst; in pmcraid_isr()
4262 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_isr()
4274 pinstance->ioa_unit_check = 1; in pmcraid_isr()
4277 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4281 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4282 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4283 pmcraid_initiate_reset(pinstance); in pmcraid_isr()
4284 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4291 pmcraid_clr_trans_op(pinstance); in pmcraid_isr()
4294 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4296 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4299 &(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr()
4318 struct pmcraid_instance *pinstance; in pmcraid_worker_function() local
4327 pinstance = container_of(workp, struct pmcraid_instance, worker_q); in pmcraid_worker_function()
4329 if (!atomic_read(&pinstance->expose_resources)) in pmcraid_worker_function()
4332 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_worker_function()
4334 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4335 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4343 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_worker_function()
4347 pinstance->host->host_lock, in pmcraid_worker_function()
4352 &pinstance->free_res_q); in pmcraid_worker_function()
4354 &pinstance->resource_lock, in pmcraid_worker_function()
4358 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4363 pinstance->host->host_lock, in pmcraid_worker_function()
4369 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4393 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_worker_function()
4395 scsi_add_device(pinstance->host, bus, target, lun); in pmcraid_worker_function()
4396 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4401 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4415 struct pmcraid_instance *pinstance; in pmcraid_tasklet_function() local
4424 pinstance = hrrq_vector->drv_inst; in pmcraid_tasklet_function()
4426 lockp = &(pinstance->hrrq_lock[id]); in pmcraid_tasklet_function()
4436 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4439 pinstance->host_toggle_bit[id]) { in pmcraid_tasklet_function()
4444 if (pinstance->hrrq_curr[id] < pinstance->hrrq_end[id]) { in pmcraid_tasklet_function()
4445 pinstance->hrrq_curr[id]++; in pmcraid_tasklet_function()
4447 pinstance->hrrq_curr[id] = pinstance->hrrq_start[id]; in pmcraid_tasklet_function()
4448 pinstance->host_toggle_bit[id] ^= 1u; in pmcraid_tasklet_function()
4454 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4458 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
4461 spin_lock_irqsave(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4464 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4467 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_tasklet_function()
4470 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_tasklet_function()
4473 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_tasklet_function()
4480 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4497 void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_unregister_interrupt_handler() argument
4499 struct pci_dev *pdev = pinstance->pdev; in pmcraid_unregister_interrupt_handler()
4502 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_unregister_interrupt_handler()
4503 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_unregister_interrupt_handler()
4505 pinstance->interrupt_mode = 0; in pmcraid_unregister_interrupt_handler()
4517 pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_register_interrupt_handler() argument
4519 struct pci_dev *pdev = pinstance->pdev; in pmcraid_register_interrupt_handler()
4541 struct pmcraid_isr_param *vec = &pinstance->hrrq_vector[i]; in pmcraid_register_interrupt_handler()
4544 vec->drv_inst = pinstance; in pmcraid_register_interrupt_handler()
4551 pinstance->num_hrrq = num_hrrq; in pmcraid_register_interrupt_handler()
4553 pinstance->interrupt_mode = 1; in pmcraid_register_interrupt_handler()
4555 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4556 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4563 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_register_interrupt_handler()
4577 pmcraid_release_cmd_blocks(struct pmcraid_instance *pinstance, int max_index) in pmcraid_release_cmd_blocks() argument
4581 kmem_cache_free(pinstance->cmd_cachep, pinstance->cmd_list[i]); in pmcraid_release_cmd_blocks()
4582 pinstance->cmd_list[i] = NULL; in pmcraid_release_cmd_blocks()
4584 kmem_cache_destroy(pinstance->cmd_cachep); in pmcraid_release_cmd_blocks()
4585 pinstance->cmd_cachep = NULL; in pmcraid_release_cmd_blocks()
4601 struct pmcraid_instance *pinstance, in pmcraid_release_control_blocks() argument
4607 if (pinstance->control_pool == NULL) in pmcraid_release_control_blocks()
4611 dma_pool_free(pinstance->control_pool, in pmcraid_release_control_blocks()
4612 pinstance->cmd_list[i]->ioa_cb, in pmcraid_release_control_blocks()
4613 pinstance->cmd_list[i]->ioa_cb_bus_addr); in pmcraid_release_control_blocks()
4614 pinstance->cmd_list[i]->ioa_cb = NULL; in pmcraid_release_control_blocks()
4615 pinstance->cmd_list[i]->ioa_cb_bus_addr = 0; in pmcraid_release_control_blocks()
4617 dma_pool_destroy(pinstance->control_pool); in pmcraid_release_control_blocks()
4618 pinstance->control_pool = NULL; in pmcraid_release_control_blocks()
4630 static int pmcraid_allocate_cmd_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_cmd_blocks() argument
4634 sprintf(pinstance->cmd_pool_name, "pmcraid_cmd_pool_%d", in pmcraid_allocate_cmd_blocks()
4635 pinstance->host->unique_id); in pmcraid_allocate_cmd_blocks()
4638 pinstance->cmd_cachep = kmem_cache_create( in pmcraid_allocate_cmd_blocks()
4639 pinstance->cmd_pool_name, in pmcraid_allocate_cmd_blocks()
4642 if (!pinstance->cmd_cachep) in pmcraid_allocate_cmd_blocks()
4646 pinstance->cmd_list[i] = in pmcraid_allocate_cmd_blocks()
4647 kmem_cache_alloc(pinstance->cmd_cachep, GFP_KERNEL); in pmcraid_allocate_cmd_blocks()
4648 if (!pinstance->cmd_list[i]) { in pmcraid_allocate_cmd_blocks()
4649 pmcraid_release_cmd_blocks(pinstance, i); in pmcraid_allocate_cmd_blocks()
4666 static int pmcraid_allocate_control_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_control_blocks() argument
4670 sprintf(pinstance->ctl_pool_name, "pmcraid_control_pool_%d", in pmcraid_allocate_control_blocks()
4671 pinstance->host->unique_id); in pmcraid_allocate_control_blocks()
4673 pinstance->control_pool = in pmcraid_allocate_control_blocks()
4674 dma_pool_create(pinstance->ctl_pool_name, in pmcraid_allocate_control_blocks()
4675 &pinstance->pdev->dev, in pmcraid_allocate_control_blocks()
4679 if (!pinstance->control_pool) in pmcraid_allocate_control_blocks()
4683 pinstance->cmd_list[i]->ioa_cb = in pmcraid_allocate_control_blocks()
4685 pinstance->control_pool, in pmcraid_allocate_control_blocks()
4687 &(pinstance->cmd_list[i]->ioa_cb_bus_addr)); in pmcraid_allocate_control_blocks()
4689 if (!pinstance->cmd_list[i]->ioa_cb) { in pmcraid_allocate_control_blocks()
4690 pmcraid_release_control_blocks(pinstance, i); in pmcraid_allocate_control_blocks()
4693 memset(pinstance->cmd_list[i]->ioa_cb, 0, in pmcraid_allocate_control_blocks()
4708 pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex) in pmcraid_release_host_rrqs() argument
4713 pci_free_consistent(pinstance->pdev, in pmcraid_release_host_rrqs()
4715 pinstance->hrrq_start[i], in pmcraid_release_host_rrqs()
4716 pinstance->hrrq_start_bus_addr[i]); in pmcraid_release_host_rrqs()
4719 pinstance->hrrq_start[i] = NULL; in pmcraid_release_host_rrqs()
4720 pinstance->hrrq_start_bus_addr[i] = 0; in pmcraid_release_host_rrqs()
4721 pinstance->host_toggle_bit[i] = 0; in pmcraid_release_host_rrqs()
4732 static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance) in pmcraid_allocate_host_rrqs() argument
4738 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_allocate_host_rrqs()
4739 pinstance->hrrq_start[i] = in pmcraid_allocate_host_rrqs()
4741 pinstance->pdev, in pmcraid_allocate_host_rrqs()
4743 &(pinstance->hrrq_start_bus_addr[i])); in pmcraid_allocate_host_rrqs()
4745 if (!pinstance->hrrq_start[i]) { in pmcraid_allocate_host_rrqs()
4748 pmcraid_release_host_rrqs(pinstance, i); in pmcraid_allocate_host_rrqs()
4752 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_allocate_host_rrqs()
4753 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_allocate_host_rrqs()
4754 pinstance->hrrq_end[i] = in pmcraid_allocate_host_rrqs()
4755 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_allocate_host_rrqs()
4756 pinstance->host_toggle_bit[i] = 1; in pmcraid_allocate_host_rrqs()
4757 spin_lock_init(&pinstance->hrrq_lock[i]); in pmcraid_allocate_host_rrqs()
4770 static void pmcraid_release_hcams(struct pmcraid_instance *pinstance) in pmcraid_release_hcams() argument
4772 if (pinstance->ccn.msg != NULL) { in pmcraid_release_hcams()
4773 pci_free_consistent(pinstance->pdev, in pmcraid_release_hcams()
4776 pinstance->ccn.msg, in pmcraid_release_hcams()
4777 pinstance->ccn.baddr); in pmcraid_release_hcams()
4779 pinstance->ccn.msg = NULL; in pmcraid_release_hcams()
4780 pinstance->ccn.hcam = NULL; in pmcraid_release_hcams()
4781 pinstance->ccn.baddr = 0; in pmcraid_release_hcams()
4784 if (pinstance->ldn.msg != NULL) { in pmcraid_release_hcams()
4785 pci_free_consistent(pinstance->pdev, in pmcraid_release_hcams()
4788 pinstance->ldn.msg, in pmcraid_release_hcams()
4789 pinstance->ldn.baddr); in pmcraid_release_hcams()
4791 pinstance->ldn.msg = NULL; in pmcraid_release_hcams()
4792 pinstance->ldn.hcam = NULL; in pmcraid_release_hcams()
4793 pinstance->ldn.baddr = 0; in pmcraid_release_hcams()
4804 static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance) in pmcraid_allocate_hcams() argument
4806 pinstance->ccn.msg = pci_alloc_consistent( in pmcraid_allocate_hcams()
4807 pinstance->pdev, in pmcraid_allocate_hcams()
4810 &(pinstance->ccn.baddr)); in pmcraid_allocate_hcams()
4812 pinstance->ldn.msg = pci_alloc_consistent( in pmcraid_allocate_hcams()
4813 pinstance->pdev, in pmcraid_allocate_hcams()
4816 &(pinstance->ldn.baddr)); in pmcraid_allocate_hcams()
4818 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) { in pmcraid_allocate_hcams()
4819 pmcraid_release_hcams(pinstance); in pmcraid_allocate_hcams()
4821 pinstance->ccn.hcam = in pmcraid_allocate_hcams()
4822 (void *)pinstance->ccn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4823 pinstance->ldn.hcam = in pmcraid_allocate_hcams()
4824 (void *)pinstance->ldn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4826 atomic_set(&pinstance->ccn.ignore, 0); in pmcraid_allocate_hcams()
4827 atomic_set(&pinstance->ldn.ignore, 0); in pmcraid_allocate_hcams()
4830 return (pinstance->ldn.msg == NULL) ? -ENOMEM : 0; in pmcraid_allocate_hcams()
4840 static void pmcraid_release_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_config_buffers() argument
4842 if (pinstance->cfg_table != NULL && in pmcraid_release_config_buffers()
4843 pinstance->cfg_table_bus_addr != 0) { in pmcraid_release_config_buffers()
4844 pci_free_consistent(pinstance->pdev, in pmcraid_release_config_buffers()
4846 pinstance->cfg_table, in pmcraid_release_config_buffers()
4847 pinstance->cfg_table_bus_addr); in pmcraid_release_config_buffers()
4848 pinstance->cfg_table = NULL; in pmcraid_release_config_buffers()
4849 pinstance->cfg_table_bus_addr = 0; in pmcraid_release_config_buffers()
4852 if (pinstance->res_entries != NULL) { in pmcraid_release_config_buffers()
4856 list_del(&pinstance->res_entries[i].queue); in pmcraid_release_config_buffers()
4857 kfree(pinstance->res_entries); in pmcraid_release_config_buffers()
4858 pinstance->res_entries = NULL; in pmcraid_release_config_buffers()
4861 pmcraid_release_hcams(pinstance); in pmcraid_release_config_buffers()
4871 static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_allocate_config_buffers() argument
4875 pinstance->res_entries = in pmcraid_allocate_config_buffers()
4880 if (NULL == pinstance->res_entries) { in pmcraid_allocate_config_buffers()
4886 list_add_tail(&pinstance->res_entries[i].queue, in pmcraid_allocate_config_buffers()
4887 &pinstance->free_res_q); in pmcraid_allocate_config_buffers()
4889 pinstance->cfg_table = in pmcraid_allocate_config_buffers()
4890 pci_alloc_consistent(pinstance->pdev, in pmcraid_allocate_config_buffers()
4892 &pinstance->cfg_table_bus_addr); in pmcraid_allocate_config_buffers()
4894 if (NULL == pinstance->cfg_table) { in pmcraid_allocate_config_buffers()
4896 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4900 if (pmcraid_allocate_hcams(pinstance)) { in pmcraid_allocate_config_buffers()
4902 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4917 static void pmcraid_init_tasklets(struct pmcraid_instance *pinstance) in pmcraid_init_tasklets() argument
4920 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_init_tasklets()
4921 tasklet_init(&pinstance->isr_tasklet[i], in pmcraid_init_tasklets()
4923 (unsigned long)&pinstance->hrrq_vector[i]); in pmcraid_init_tasklets()
4934 static void pmcraid_kill_tasklets(struct pmcraid_instance *pinstance) in pmcraid_kill_tasklets() argument
4937 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_kill_tasklets()
4938 tasklet_kill(&pinstance->isr_tasklet[i]); in pmcraid_kill_tasklets()
4949 static void pmcraid_release_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_buffers() argument
4951 pmcraid_release_config_buffers(pinstance); in pmcraid_release_buffers()
4952 pmcraid_release_control_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4953 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4954 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_release_buffers()
4956 if (pinstance->inq_data != NULL) { in pmcraid_release_buffers()
4957 pci_free_consistent(pinstance->pdev, in pmcraid_release_buffers()
4959 pinstance->inq_data, in pmcraid_release_buffers()
4960 pinstance->inq_data_baddr); in pmcraid_release_buffers()
4962 pinstance->inq_data = NULL; in pmcraid_release_buffers()
4963 pinstance->inq_data_baddr = 0; in pmcraid_release_buffers()
4966 if (pinstance->timestamp_data != NULL) { in pmcraid_release_buffers()
4967 pci_free_consistent(pinstance->pdev, in pmcraid_release_buffers()
4969 pinstance->timestamp_data, in pmcraid_release_buffers()
4970 pinstance->timestamp_data_baddr); in pmcraid_release_buffers()
4972 pinstance->timestamp_data = NULL; in pmcraid_release_buffers()
4973 pinstance->timestamp_data_baddr = 0; in pmcraid_release_buffers()
4990 static int pmcraid_init_buffers(struct pmcraid_instance *pinstance) in pmcraid_init_buffers() argument
4994 if (pmcraid_allocate_host_rrqs(pinstance)) { in pmcraid_init_buffers()
4996 pinstance->num_hrrq); in pmcraid_init_buffers()
5000 if (pmcraid_allocate_config_buffers(pinstance)) { in pmcraid_init_buffers()
5002 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5006 if (pmcraid_allocate_cmd_blocks(pinstance)) { in pmcraid_init_buffers()
5008 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
5009 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5013 if (pmcraid_allocate_control_blocks(pinstance)) { in pmcraid_init_buffers()
5015 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
5016 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_init_buffers()
5017 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5022 pinstance->inq_data = pci_alloc_consistent( in pmcraid_init_buffers()
5023 pinstance->pdev, in pmcraid_init_buffers()
5025 &pinstance->inq_data_baddr); in pmcraid_init_buffers()
5027 if (pinstance->inq_data == NULL) { in pmcraid_init_buffers()
5029 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
5034 pinstance->timestamp_data = pci_alloc_consistent( in pmcraid_init_buffers()
5035 pinstance->pdev, in pmcraid_init_buffers()
5037 &pinstance->timestamp_data_baddr); in pmcraid_init_buffers()
5039 if (pinstance->timestamp_data == NULL) { in pmcraid_init_buffers()
5042 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
5052 struct pmcraid_cmd *cmdp = pinstance->cmd_list[i]; in pmcraid_init_buffers()
5054 cmdp->drv_inst = pinstance; in pmcraid_init_buffers()
5055 list_add_tail(&cmdp->free_list, &pinstance->free_cmd_pool); in pmcraid_init_buffers()
5067 static void pmcraid_reinit_buffers(struct pmcraid_instance *pinstance) in pmcraid_reinit_buffers() argument
5072 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_reinit_buffers()
5073 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_reinit_buffers()
5074 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_reinit_buffers()
5075 pinstance->hrrq_end[i] = in pmcraid_reinit_buffers()
5076 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_reinit_buffers()
5077 pinstance->host_toggle_bit[i] = 1; in pmcraid_reinit_buffers()
5093 struct pmcraid_instance *pinstance = in pmcraid_init_instance() local
5096 pinstance->host = host; in pmcraid_init_instance()
5097 pinstance->pdev = pdev; in pmcraid_init_instance()
5100 pinstance->mapped_dma_addr = mapped_pci_addr; in pmcraid_init_instance()
5104 struct pmcraid_chip_details *chip_cfg = pinstance->chip_cfg; in pmcraid_init_instance()
5105 struct pmcraid_interrupts *pint_regs = &pinstance->int_regs; in pmcraid_init_instance()
5107 pinstance->ioarrin = mapped_pci_addr + chip_cfg->ioarrin; in pmcraid_init_instance()
5123 pinstance->mailbox = mapped_pci_addr + chip_cfg->mailbox; in pmcraid_init_instance()
5124 pinstance->ioa_status = mapped_pci_addr + chip_cfg->ioastatus; in pmcraid_init_instance()
5133 pinstance->ioa_reset_attempts = 0; in pmcraid_init_instance()
5134 init_waitqueue_head(&pinstance->reset_wait_q); in pmcraid_init_instance()
5136 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_init_instance()
5137 atomic_set(&pinstance->last_message_id, 0); in pmcraid_init_instance()
5138 atomic_set(&pinstance->expose_resources, 0); in pmcraid_init_instance()
5140 INIT_LIST_HEAD(&pinstance->free_res_q); in pmcraid_init_instance()
5141 INIT_LIST_HEAD(&pinstance->used_res_q); in pmcraid_init_instance()
5142 INIT_LIST_HEAD(&pinstance->free_cmd_pool); in pmcraid_init_instance()
5143 INIT_LIST_HEAD(&pinstance->pending_cmd_pool); in pmcraid_init_instance()
5145 spin_lock_init(&pinstance->free_pool_lock); in pmcraid_init_instance()
5146 spin_lock_init(&pinstance->pending_pool_lock); in pmcraid_init_instance()
5147 spin_lock_init(&pinstance->resource_lock); in pmcraid_init_instance()
5148 mutex_init(&pinstance->aen_queue_lock); in pmcraid_init_instance()
5151 INIT_WORK(&pinstance->worker_q, pmcraid_worker_function); in pmcraid_init_instance()
5154 pinstance->current_log_level = pmcraid_log_level; in pmcraid_init_instance()
5157 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_init_instance()
5158 pinstance->reset_cmd = NULL; in pmcraid_init_instance()
5173 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_shutdown() local
5174 pmcraid_reset_bringdown(pinstance); in pmcraid_shutdown()
5206 static int pmcraid_setup_chrdev(struct pmcraid_instance *pinstance) in pmcraid_setup_chrdev() argument
5212 cdev_init(&pinstance->cdev, &pmcraid_fops); in pmcraid_setup_chrdev()
5213 pinstance->cdev.owner = THIS_MODULE; in pmcraid_setup_chrdev()
5215 error = cdev_add(&pinstance->cdev, MKDEV(pmcraid_major, minor), 1); in pmcraid_setup_chrdev()
5233 static void pmcraid_release_chrdev(struct pmcraid_instance *pinstance) in pmcraid_release_chrdev() argument
5235 pmcraid_release_minor(MINOR(pinstance->cdev.dev)); in pmcraid_release_chrdev()
5237 MKDEV(pmcraid_major, MINOR(pinstance->cdev.dev))); in pmcraid_release_chrdev()
5238 cdev_del(&pinstance->cdev); in pmcraid_release_chrdev()
5250 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_remove() local
5253 pmcraid_release_chrdev(pinstance); in pmcraid_remove()
5256 scsi_remove_host(pinstance->host); in pmcraid_remove()
5259 scsi_block_requests(pinstance->host); in pmcraid_remove()
5264 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_remove()
5265 flush_work(&pinstance->worker_q); in pmcraid_remove()
5267 pmcraid_kill_tasklets(pinstance); in pmcraid_remove()
5268 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_remove()
5269 pmcraid_release_buffers(pinstance); in pmcraid_remove()
5270 iounmap(pinstance->mapped_dma_addr); in pmcraid_remove()
5272 scsi_host_put(pinstance->host); in pmcraid_remove()
5288 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_suspend() local
5291 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_suspend()
5292 pmcraid_kill_tasklets(pinstance); in pmcraid_suspend()
5293 pci_set_drvdata(pinstance->pdev, pinstance); in pmcraid_suspend()
5294 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_suspend()
5310 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_resume() local
5311 struct Scsi_Host *host = pinstance->host; in pmcraid_resume()
5339 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5340 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_resume()
5341 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_resume()
5350 pmcraid_init_tasklets(pinstance); in pmcraid_resume()
5351 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_resume()
5356 pinstance->ioa_hard_reset = 1; in pmcraid_resume()
5361 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_resume()
5370 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5371 pmcraid_kill_tasklets(pinstance); in pmcraid_resume()
5372 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_resume()
5397 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset() local
5400 spin_lock_irqsave(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5402 spin_unlock_irqrestore(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5403 scsi_unblock_requests(pinstance->host); in pmcraid_complete_ioa_reset()
5404 schedule_work(&pinstance->worker_q); in pmcraid_complete_ioa_reset()
5458 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp() local
5466 pinstance->timestamp_data->timestamp[0] = (__u8)(timestamp); in pmcraid_set_timestamp()
5467 pinstance->timestamp_data->timestamp[1] = (__u8)((timestamp) >> 8); in pmcraid_set_timestamp()
5468 pinstance->timestamp_data->timestamp[2] = (__u8)((timestamp) >> 16); in pmcraid_set_timestamp()
5469 pinstance->timestamp_data->timestamp[3] = (__u8)((timestamp) >> 24); in pmcraid_set_timestamp()
5470 pinstance->timestamp_data->timestamp[4] = (__u8)((timestamp) >> 32); in pmcraid_set_timestamp()
5471 pinstance->timestamp_data->timestamp[5] = (__u8)((timestamp) >> 40); in pmcraid_set_timestamp()
5492 ioadl->address = cpu_to_le64(pinstance->timestamp_data_baddr); in pmcraid_set_timestamp()
5495 if (!pinstance->timestamp_error) { in pmcraid_set_timestamp()
5496 pinstance->timestamp_error = 0; in pmcraid_set_timestamp()
5521 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table() local
5529 if (pinstance->cfg_table->flags & MICROCODE_UPDATE_REQUIRED) in pmcraid_init_res_table()
5532 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_init_res_table()
5538 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5540 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) in pmcraid_init_res_table()
5543 for (i = 0; i < le16_to_cpu(pinstance->cfg_table->num_entries); i++) { in pmcraid_init_res_table()
5544 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_init_res_table()
5546 cfgte = &pinstance->cfg_table->entries[i]; in pmcraid_init_res_table()
5549 &pinstance->cfg_table->entries_ext[i]; in pmcraid_init_res_table()
5564 &pinstance->used_res_q); in pmcraid_init_res_table()
5573 if (list_empty(&pinstance->free_res_q)) { in pmcraid_init_res_table()
5579 res = list_entry(pinstance->free_res_q.next, in pmcraid_init_res_table()
5585 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5593 pinstance->config_table_entry_size); in pmcraid_init_res_table()
5610 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5612 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_init_res_table()
5617 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5635 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg() local
5638 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_querycfg()
5640 pinstance->config_table_entry_size = in pmcraid_querycfg()
5643 pinstance->config_table_entry_size = in pmcraid_querycfg()
5669 ioadl->address = cpu_to_le64(pinstance->cfg_table_bus_addr); in pmcraid_querycfg()
5689 struct pmcraid_instance *pinstance; in pmcraid_probe() local
5771 pinstance = (struct pmcraid_instance *)host->hostdata; in pmcraid_probe()
5772 memset(pinstance, 0, sizeof(*pinstance)); in pmcraid_probe()
5774 pinstance->chip_cfg = in pmcraid_probe()
5784 pci_set_drvdata(pdev, pinstance); in pmcraid_probe()
5787 rc = pci_save_state(pinstance->pdev); in pmcraid_probe()
5794 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_probe()
5796 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_probe()
5803 pmcraid_init_tasklets(pinstance); in pmcraid_probe()
5806 rc = pmcraid_init_buffers(pinstance); in pmcraid_probe()
5814 pmcraid_reset_type(pinstance); in pmcraid_probe()
5816 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_probe()
5822 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_probe()
5829 rc = scsi_add_host(pinstance->host, &pdev->dev); in pmcraid_probe()
5835 scsi_scan_host(pinstance->host); in pmcraid_probe()
5837 rc = pmcraid_setup_chrdev(pinstance); in pmcraid_probe()
5848 atomic_set(&pinstance->expose_resources, 1); in pmcraid_probe()
5849 schedule_work(&pinstance->worker_q); in pmcraid_probe()
5856 pmcraid_release_buffers(pinstance); in pmcraid_probe()
5859 pmcraid_kill_tasklets(pinstance); in pmcraid_probe()
5860 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_probe()