Lines Matching refs:pinstance

154 	struct pmcraid_instance *pinstance;  in pmcraid_slave_alloc()  local
160 pinstance = shost_priv(scsi_dev->host); in pmcraid_slave_alloc()
162 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_slave_alloc()
169 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
170 list_for_each_entry(temp, &pinstance->used_res_q, queue) { in pmcraid_slave_alloc()
207 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
374 struct pmcraid_instance *pinstance in pmcraid_get_free_cmd() argument
381 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
383 if (!list_empty(&pinstance->free_cmd_pool)) { in pmcraid_get_free_cmd()
384 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
388 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
405 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd() local
408 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
409 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
410 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
421 static u32 pmcraid_read_interrupts(struct pmcraid_instance *pinstance) in pmcraid_read_interrupts() argument
423 return (pinstance->interrupt_mode) ? in pmcraid_read_interrupts()
424 ioread32(pinstance->int_regs.ioa_host_msix_interrupt_reg) : in pmcraid_read_interrupts()
425 ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_read_interrupts()
438 struct pmcraid_instance *pinstance, in pmcraid_disable_interrupts() argument
442 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
445 iowrite32(intrs, pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_disable_interrupts()
446 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
447 ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
449 if (!pinstance->interrupt_mode) { in pmcraid_disable_interrupts()
451 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
452 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
466 struct pmcraid_instance *pinstance, in pmcraid_enable_interrupts() argument
470 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
473 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
475 if (!pinstance->interrupt_mode) { in pmcraid_enable_interrupts()
477 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
478 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
482 ioread32(pinstance->int_regs.global_interrupt_mask_reg), in pmcraid_enable_interrupts()
483 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg)); in pmcraid_enable_interrupts()
495 struct pmcraid_instance *pinstance in pmcraid_clr_trans_op() argument
500 if (!pinstance->interrupt_mode) { in pmcraid_clr_trans_op()
502 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
503 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
505 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
506 ioread32(pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
509 if (pinstance->reset_cmd != NULL) { in pmcraid_clr_trans_op()
510 del_timer(&pinstance->reset_cmd->timer); in pmcraid_clr_trans_op()
512 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
513 pinstance->reset_cmd->cmd_done(pinstance->reset_cmd); in pmcraid_clr_trans_op()
515 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
528 static void pmcraid_reset_type(struct pmcraid_instance *pinstance) in pmcraid_reset_type() argument
534 mask = ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_reset_type()
535 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_reset_type()
536 alerts = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_type()
542 pinstance->ioa_hard_reset = 1; in pmcraid_reset_type()
547 pinstance->ioa_unit_check = 1; in pmcraid_reset_type()
561 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done() local
566 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_bist_done()
581 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
583 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
595 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist() local
600 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
601 doorbells = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
602 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_start_bist()
621 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done() local
622 u32 status = ioread32(pinstance->ioa_status); in pmcraid_reset_alert_done()
632 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
634 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
659 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert() local
669 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_reset_alert()
685 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
687 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
691 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_reset_alert()
708 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler() local
711 dev_info(&pinstance->pdev->dev, in pmcraid_timeout_handler()
721 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
722 if (!pinstance->ioa_reset_in_progress) { in pmcraid_timeout_handler()
723 pinstance->ioa_reset_attempts = 0; in pmcraid_timeout_handler()
724 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
730 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_timeout_handler()
736 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
737 pinstance->ioa_reset_in_progress = 1; in pmcraid_timeout_handler()
741 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
754 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
759 if (pinstance->scn.ioa_state != PMC_DEVICE_EVENT_RESET_START && in pmcraid_timeout_handler()
760 pinstance->scn.ioa_state != PMC_DEVICE_EVENT_SHUTDOWN_START) in pmcraid_timeout_handler()
761 pmcraid_notify_ioastate(pinstance, in pmcraid_timeout_handler()
764 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_timeout_handler()
765 scsi_block_requests(pinstance->host); in pmcraid_timeout_handler()
767 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
843 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done() local
860 pci_free_consistent(pinstance->pdev, in pmcraid_erp_done()
885 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command() local
893 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
894 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
895 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
896 atomic_inc(&pinstance->outstanding_cmds); in _pmcraid_fire_command()
901 pinstance->ioarrin); in _pmcraid_fire_command()
949 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done() local
952 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
954 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
1004 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done() local
1014 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1015 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_get_fwversion_done()
1017 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1035 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion() local
1059 ioadl->address = cpu_to_le64(pinstance->inq_data_baddr); in pmcraid_get_fwversion()
1075 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq() local
1078 __be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]); in pmcraid_identify_hrrq()
1085 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1151 struct pmcraid_instance *pinstance, in pmcraid_init_hcam() argument
1163 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1173 dma = pinstance->ccn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1174 hcam = &pinstance->ccn; in pmcraid_init_hcam()
1178 dma = pinstance->ldn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1179 hcam = &pinstance->ldn; in pmcraid_init_hcam()
1220 static void pmcraid_send_hcam(struct pmcraid_instance *pinstance, u8 type) in pmcraid_send_hcam() argument
1222 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam()
1270 struct pmcraid_instance *pinstance; in pmcraid_cancel_hcam() local
1273 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1275 &pinstance->ldn : &pinstance->ccn; in pmcraid_cancel_hcam()
1426 struct pmcraid_instance *pinstance, in pmcraid_notify_aen() argument
1436 aen_msg->hostno = (pinstance->host->unique_id << 16 | in pmcraid_notify_aen()
1437 MINOR(pinstance->cdev.dev)); in pmcraid_notify_aen()
1496 static int pmcraid_notify_ccn(struct pmcraid_instance *pinstance) in pmcraid_notify_ccn() argument
1498 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ccn()
1499 pinstance->ccn.msg, in pmcraid_notify_ccn()
1500 pinstance->ccn.hcam->data_len + in pmcraid_notify_ccn()
1511 static int pmcraid_notify_ldn(struct pmcraid_instance *pinstance) in pmcraid_notify_ldn() argument
1513 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ldn()
1514 pinstance->ldn.msg, in pmcraid_notify_ldn()
1515 pinstance->ldn.hcam->data_len + in pmcraid_notify_ldn()
1527 static void pmcraid_notify_ioastate(struct pmcraid_instance *pinstance, u32 evt) in pmcraid_notify_ioastate() argument
1529 pinstance->scn.ioa_state = evt; in pmcraid_notify_ioastate()
1530 pmcraid_notify_aen(pinstance, in pmcraid_notify_ioastate()
1531 &pinstance->scn.msg, in pmcraid_notify_ioastate()
1543 static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance) in pmcraid_handle_config_change() argument
1557 ccn_hcam = (struct pmcraid_hcam_ccn *)pinstance->ccn.hcam; in pmcraid_handle_config_change()
1559 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_handle_config_change()
1563 pinstance->ccn.hcam->ilid, in pmcraid_handle_config_change()
1564 pinstance->ccn.hcam->op_code, in pmcraid_handle_config_change()
1565 ((pinstance->ccn.hcam->timestamp1) | in pmcraid_handle_config_change()
1566 ((pinstance->ccn.hcam->timestamp2 & 0xffffffffLL) << 32)), in pmcraid_handle_config_change()
1567 pinstance->ccn.hcam->notification_type, in pmcraid_handle_config_change()
1568 pinstance->ccn.hcam->notification_lost, in pmcraid_handle_config_change()
1569 pinstance->ccn.hcam->flags, in pmcraid_handle_config_change()
1570 pinstance->host->unique_id, in pmcraid_handle_config_change()
1583 if (pinstance->ccn.hcam->notification_lost) { in pmcraid_handle_config_change()
1584 cfgcmd = pmcraid_get_free_cmd(pinstance); in pmcraid_handle_config_change()
1587 pinstance->reinit_cfg_table = 1; in pmcraid_handle_config_change()
1599 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1612 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1613 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_handle_config_change()
1626 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1635 if (list_empty(&pinstance->free_res_q)) { in pmcraid_handle_config_change()
1636 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1639 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_handle_config_change()
1641 pmcraid_send_hcam(pinstance, in pmcraid_handle_config_change()
1643 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_handle_config_change()
1648 res = list_entry(pinstance->free_res_q.next, in pmcraid_handle_config_change()
1654 list_add_tail(&res->queue, &pinstance->used_res_q); in pmcraid_handle_config_change()
1657 memcpy(&res->cfg_entry, cfg_entry, pinstance->config_table_entry_size); in pmcraid_handle_config_change()
1659 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1669 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1672 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_handle_config_change()
1676 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1678 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1684 pmcraid_notify_ccn(pinstance); in pmcraid_handle_config_change()
1686 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1735 static void pmcraid_handle_error_log(struct pmcraid_instance *pinstance) in pmcraid_handle_error_log() argument
1740 hcam_ldn = (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_handle_error_log()
1744 pinstance->ldn.hcam->ilid, in pmcraid_handle_error_log()
1745 pinstance->ldn.hcam->op_code, in pmcraid_handle_error_log()
1746 pinstance->ldn.hcam->notification_type, in pmcraid_handle_error_log()
1747 pinstance->ldn.hcam->notification_lost, in pmcraid_handle_error_log()
1748 pinstance->ldn.hcam->flags, in pmcraid_handle_error_log()
1749 pinstance->ldn.hcam->overlay_id); in pmcraid_handle_error_log()
1752 if (pinstance->ldn.hcam->notification_type != in pmcraid_handle_error_log()
1756 if (pinstance->ldn.hcam->notification_lost == in pmcraid_handle_error_log()
1758 dev_info(&pinstance->pdev->dev, "Error notifications lost\n"); in pmcraid_handle_error_log()
1764 dev_info(&pinstance->pdev->dev, in pmcraid_handle_error_log()
1767 pinstance->host, in pmcraid_handle_error_log()
1786 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn() local
1790 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1798 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ccn()
1801 dev_info(&pinstance->pdev->dev, in pmcraid_process_ccn()
1803 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1804 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_process_ccn()
1805 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1807 pmcraid_handle_config_change(pinstance); in pmcraid_process_ccn()
1823 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn() local
1825 (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_process_ldn()
1831 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1839 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ldn()
1842 pmcraid_handle_error_log(pinstance); in pmcraid_process_ldn()
1844 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_process_ldn()
1846 pmcraid_initiate_reset(pinstance); in pmcraid_process_ldn()
1847 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_process_ldn()
1852 pinstance->timestamp_error = 1; in pmcraid_process_ldn()
1856 dev_info(&pinstance->pdev->dev, in pmcraid_process_ldn()
1861 pmcraid_notify_ldn(pinstance); in pmcraid_process_ldn()
1863 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1876 static void pmcraid_register_hcams(struct pmcraid_instance *pinstance) in pmcraid_register_hcams() argument
1878 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_register_hcams()
1879 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_register_hcams()
1888 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams() local
1895 atomic_set(&pinstance->ccn.ignore, 1); in pmcraid_unregister_hcams()
1896 atomic_set(&pinstance->ldn.ignore, 1); in pmcraid_unregister_hcams()
1902 if ((pinstance->force_ioa_reset && !pinstance->ioa_bringdown) || in pmcraid_unregister_hcams()
1903 pinstance->ioa_unit_check) { in pmcraid_unregister_hcams()
1904 pinstance->force_ioa_reset = 0; in pmcraid_unregister_hcams()
1905 pinstance->ioa_unit_check = 0; in pmcraid_unregister_hcams()
1906 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_unregister_hcams()
1926 static int pmcraid_reset_enable_ioa(struct pmcraid_instance *pinstance) in pmcraid_reset_enable_ioa() argument
1930 pmcraid_reinit_buffers(pinstance); in pmcraid_reset_enable_ioa()
1931 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_reset_enable_ioa()
1933 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_reset_enable_ioa()
1936 if (!pinstance->interrupt_mode) { in pmcraid_reset_enable_ioa()
1938 pinstance->int_regs. in pmcraid_reset_enable_ioa()
1941 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_reset_enable_ioa()
1958 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset() local
1984 if (pinstance->interrupt_mode) { in pmcraid_soft_reset()
1986 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1987 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1990 iowrite32(doorbell, pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1991 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1992 int_reg = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_soft_reset()
1995 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
2007 static void pmcraid_get_dump(struct pmcraid_instance *pinstance) in pmcraid_get_dump() argument
2024 static void pmcraid_fail_outstanding_cmds(struct pmcraid_instance *pinstance) in pmcraid_fail_outstanding_cmds() argument
2032 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2033 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
2036 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_fail_outstanding_cmds()
2074 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_fail_outstanding_cmds()
2075 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2078 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2098 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset() local
2101 pinstance->ioa_reset_in_progress = 1; in pmcraid_ioa_reset()
2103 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2105 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2109 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2111 switch (pinstance->ioa_state) { in pmcraid_ioa_reset()
2127 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_ioa_reset()
2128 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2136 scsi_block_requests(pinstance->host); in pmcraid_ioa_reset()
2142 if (pinstance->ioa_hard_reset == 0) { in pmcraid_ioa_reset()
2143 if (ioread32(pinstance->ioa_status) & in pmcraid_ioa_reset()
2146 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2150 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2157 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2168 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_ioa_reset()
2173 pinstance->ioa_reset_attempts++; in pmcraid_ioa_reset()
2176 if (pinstance->ioa_reset_attempts > PMCRAID_RESET_ATTEMPTS) { in pmcraid_ioa_reset()
2177 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2179 pinstance->ioa_state = IOA_STATE_DEAD; in pmcraid_ioa_reset()
2181 if (pinstance->ioa_bringdown) in pmcraid_ioa_reset()
2182 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2185 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2194 pci_restore_state(pinstance->pdev); in pmcraid_ioa_reset()
2197 pmcraid_fail_outstanding_cmds(pinstance); in pmcraid_ioa_reset()
2200 if (pinstance->ioa_unit_check) { in pmcraid_ioa_reset()
2202 pinstance->ioa_unit_check = 0; in pmcraid_ioa_reset()
2203 pmcraid_get_dump(pinstance); in pmcraid_ioa_reset()
2204 pinstance->ioa_reset_attempts--; in pmcraid_ioa_reset()
2205 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2214 if (pinstance->ioa_bringdown) { in pmcraid_ioa_reset()
2216 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2217 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2218 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_ioa_reset()
2219 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2227 if (pmcraid_reset_enable_ioa(pinstance)) { in pmcraid_ioa_reset()
2228 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2233 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2244 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2257 pinstance->ioa_state = IOA_STATE_OPERATIONAL; in pmcraid_ioa_reset()
2268 if (pinstance->ioa_shutdown_type == SHUTDOWN_NONE && in pmcraid_ioa_reset()
2269 pinstance->force_ioa_reset == 0) { in pmcraid_ioa_reset()
2270 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2274 if (pinstance->ioa_shutdown_type != SHUTDOWN_NONE) in pmcraid_ioa_reset()
2275 pinstance->ioa_state = IOA_STATE_IN_BRINGDOWN; in pmcraid_ioa_reset()
2288 pinstance->ioa_reset_in_progress = 0; in pmcraid_ioa_reset()
2289 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2290 pinstance->reset_cmd = NULL; in pmcraid_ioa_reset()
2291 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2292 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2298 if (pinstance->ioa_state == IOA_STATE_OPERATIONAL) in pmcraid_ioa_reset()
2299 pmcraid_register_hcams(pinstance); in pmcraid_ioa_reset()
2301 wake_up_all(&pinstance->reset_wait_q); in pmcraid_ioa_reset()
2318 static void pmcraid_initiate_reset(struct pmcraid_instance *pinstance) in pmcraid_initiate_reset() argument
2325 if (!pinstance->ioa_reset_in_progress) { in pmcraid_initiate_reset()
2326 scsi_block_requests(pinstance->host); in pmcraid_initiate_reset()
2327 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2334 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_initiate_reset()
2335 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2336 pinstance->force_ioa_reset = 1; in pmcraid_initiate_reset()
2337 pmcraid_notify_ioastate(pinstance, in pmcraid_initiate_reset()
2358 struct pmcraid_instance *pinstance, in pmcraid_reset_reload() argument
2367 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2369 if (pinstance->ioa_reset_in_progress) { in pmcraid_reset_reload()
2372 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2374 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2375 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2377 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2379 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_reload()
2380 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_reset_reload()
2384 } else if (pinstance->ioa_state == target_state) { in pmcraid_reset_reload()
2391 scsi_block_requests(pinstance->host); in pmcraid_reset_reload()
2392 reset_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_reload()
2396 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_reset_reload()
2402 pinstance->ioa_bringdown = 1; in pmcraid_reset_reload()
2404 pinstance->ioa_shutdown_type = shutdown_type; in pmcraid_reset_reload()
2405 pinstance->reset_cmd = reset_cmd; in pmcraid_reset_reload()
2406 pinstance->force_ioa_reset = reset; in pmcraid_reset_reload()
2409 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2411 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2412 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2415 scsi_unblock_requests(pinstance->host); in pmcraid_reset_reload()
2416 if (pinstance->ioa_state == target_state) in pmcraid_reset_reload()
2431 static int pmcraid_reset_bringdown(struct pmcraid_instance *pinstance) in pmcraid_reset_bringdown() argument
2433 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringdown()
2446 static int pmcraid_reset_bringup(struct pmcraid_instance *pinstance) in pmcraid_reset_bringup() argument
2448 pmcraid_notify_ioastate(pinstance, PMC_DEVICE_EVENT_RESET_START); in pmcraid_reset_bringup()
2450 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringup()
2630 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler() local
2678 scsi_report_bus_reset(pinstance->host, in pmcraid_error_handler()
2749 struct pmcraid_instance *pinstance; in pmcraid_reset_device() local
2755 pinstance = in pmcraid_reset_device()
2769 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2770 if (pinstance->ioa_reset_in_progress || in pmcraid_reset_device()
2771 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_device()
2772 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2783 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2786 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2815 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2905 struct pmcraid_instance *pinstance; in pmcraid_abort_cmd() local
2908 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2911 cancel_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_abort_cmd()
2987 struct pmcraid_instance *pinstance; in pmcraid_eh_abort_handler() local
2996 pinstance = in pmcraid_eh_abort_handler()
3012 spin_lock_irqsave(pinstance->host->host_lock, host_lock_flags); in pmcraid_eh_abort_handler()
3014 if (pinstance->ioa_reset_in_progress || in pmcraid_eh_abort_handler()
3015 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_eh_abort_handler()
3016 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3026 spin_lock_irqsave(&pinstance->pending_pool_lock, pending_lock_flags); in pmcraid_eh_abort_handler()
3027 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
3035 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_eh_abort_handler()
3044 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3110 struct pmcraid_instance *pinstance = in pmcraid_eh_host_reset_handler() local
3119 if (atomic_read(&pinstance->outstanding_cmds) <= in pmcraid_eh_host_reset_handler()
3125 dev_err(&pinstance->pdev->dev, in pmcraid_eh_host_reset_handler()
3127 return pmcraid_reset_bringup(pinstance) == 0 ? SUCCESS : FAILED; in pmcraid_eh_host_reset_handler()
3189 struct pmcraid_instance *pinstance, in pmcraid_build_ioadl() argument
3415 struct pmcraid_instance *pinstance; in pmcraid_queuecommand_lck() local
3422 pinstance = in pmcraid_queuecommand_lck()
3424 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_queuecommand_lck()
3432 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_queuecommand_lck()
3440 if (pinstance->ioa_reset_in_progress) in pmcraid_queuecommand_lck()
3453 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3471 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_queuecommand_lck()
3472 pinstance->num_hrrq; in pmcraid_queuecommand_lck()
3493 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3497 scsi_cmd->cmnd[0], pinstance->host->unique_id, in pmcraid_queuecommand_lck()
3525 struct pmcraid_instance *pinstance; in DEF_SCSI_QCMD() local
3531 pinstance = container_of(inode->i_cdev, struct pmcraid_instance, cdev); in DEF_SCSI_QCMD()
3532 filep->private_data = pinstance; in DEF_SCSI_QCMD()
3545 struct pmcraid_instance *pinstance; in pmcraid_chr_fasync() local
3548 pinstance = filep->private_data; in pmcraid_chr_fasync()
3549 mutex_lock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3550 rc = fasync_helper(fd, filep, mode, &pinstance->aen_queue); in pmcraid_chr_fasync()
3551 mutex_unlock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3656 struct pmcraid_instance *pinstance, in pmcraid_ioctl_passthrough() argument
3677 if (pinstance->ioa_reset_in_progress) { in pmcraid_ioctl_passthrough()
3679 pinstance->reset_wait_q, in pmcraid_ioctl_passthrough()
3680 !pinstance->ioa_reset_in_progress, in pmcraid_ioctl_passthrough()
3690 if (pinstance->ioa_state != IOA_STATE_OPERATIONAL) { in pmcraid_ioctl_passthrough()
3750 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_ioctl_passthrough()
3785 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_ioctl_passthrough()
3786 pinstance->num_hrrq; in pmcraid_ioctl_passthrough()
3827 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3829 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3853 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3855 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3938 struct pmcraid_instance *pinstance, in pmcraid_ioctl_driver() argument
3953 pmcraid_reset_bringup(pinstance); in pmcraid_ioctl_driver()
4024 struct pmcraid_instance *pinstance = NULL; in pmcraid_chr_ioctl() local
4043 pinstance = filep->private_data; in pmcraid_chr_ioctl()
4045 if (!pinstance) { in pmcraid_chr_ioctl()
4058 scsi_block_requests(pinstance->host); in pmcraid_chr_ioctl()
4060 retval = pmcraid_ioctl_passthrough(pinstance, in pmcraid_chr_ioctl()
4066 scsi_unblock_requests(pinstance->host); in pmcraid_chr_ioctl()
4071 retval = pmcraid_ioctl_driver(pinstance, in pmcraid_chr_ioctl()
4118 struct pmcraid_instance *pinstance = in pmcraid_show_log_level() local
4120 return snprintf(buf, PAGE_SIZE, "%d\n", pinstance->current_log_level); in pmcraid_show_log_level()
4140 struct pmcraid_instance *pinstance; in pmcraid_store_log_level() local
4150 pinstance = (struct pmcraid_instance *)shost->hostdata; in pmcraid_store_log_level()
4151 pinstance->current_log_level = val; in pmcraid_store_log_level()
4206 struct pmcraid_instance *pinstance = in pmcraid_show_adapter_id() local
4208 u32 adapter_id = (pinstance->pdev->bus->number << 8) | in pmcraid_show_adapter_id()
4209 pinstance->pdev->devfn; in pmcraid_show_adapter_id()
4214 adapter_id, MINOR(pinstance->cdev.dev), aen_group); in pmcraid_show_adapter_id()
4272 struct pmcraid_instance *pinstance; in pmcraid_isr_msix() local
4279 pinstance = hrrq_vector->drv_inst; in pmcraid_isr_msix()
4283 intrs_val = pmcraid_read_interrupts(pinstance); in pmcraid_isr_msix()
4285 ((ioread32(pinstance->int_regs.host_ioa_interrupt_reg) in pmcraid_isr_msix()
4294 pinstance->ioa_unit_check = 1; in pmcraid_isr_msix()
4298 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_isr_msix()
4300 pmcraid_initiate_reset(pinstance); in pmcraid_isr_msix()
4302 pinstance->host->host_lock, in pmcraid_isr_msix()
4310 pmcraid_clr_trans_op(pinstance); in pmcraid_isr_msix()
4317 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4318 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4324 tasklet_schedule(&(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr_msix()
4341 struct pmcraid_instance *pinstance; in pmcraid_isr() local
4354 pinstance = hrrq_vector->drv_inst; in pmcraid_isr()
4356 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_isr()
4368 pinstance->ioa_unit_check = 1; in pmcraid_isr()
4371 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4375 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4376 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4377 pmcraid_initiate_reset(pinstance); in pmcraid_isr()
4378 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4385 pmcraid_clr_trans_op(pinstance); in pmcraid_isr()
4388 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4390 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4393 &(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr()
4412 struct pmcraid_instance *pinstance; in pmcraid_worker_function() local
4421 pinstance = container_of(workp, struct pmcraid_instance, worker_q); in pmcraid_worker_function()
4423 if (!atomic_read(&pinstance->expose_resources)) in pmcraid_worker_function()
4426 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_worker_function()
4428 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4429 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4437 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_worker_function()
4441 pinstance->host->host_lock, in pmcraid_worker_function()
4446 &pinstance->free_res_q); in pmcraid_worker_function()
4448 &pinstance->resource_lock, in pmcraid_worker_function()
4452 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4457 pinstance->host->host_lock, in pmcraid_worker_function()
4463 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4487 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_worker_function()
4489 scsi_add_device(pinstance->host, bus, target, lun); in pmcraid_worker_function()
4490 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4495 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4509 struct pmcraid_instance *pinstance; in pmcraid_tasklet_function() local
4518 pinstance = hrrq_vector->drv_inst; in pmcraid_tasklet_function()
4520 lockp = &(pinstance->hrrq_lock[id]); in pmcraid_tasklet_function()
4530 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4533 pinstance->host_toggle_bit[id]) { in pmcraid_tasklet_function()
4538 if (pinstance->hrrq_curr[id] < pinstance->hrrq_end[id]) { in pmcraid_tasklet_function()
4539 pinstance->hrrq_curr[id]++; in pmcraid_tasklet_function()
4541 pinstance->hrrq_curr[id] = pinstance->hrrq_start[id]; in pmcraid_tasklet_function()
4542 pinstance->host_toggle_bit[id] ^= 1u; in pmcraid_tasklet_function()
4548 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4552 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
4555 spin_lock_irqsave(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4558 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4561 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_tasklet_function()
4564 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_tasklet_function()
4567 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_tasklet_function()
4574 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4591 void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_unregister_interrupt_handler() argument
4595 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_unregister_interrupt_handler()
4596 free_irq(pinstance->hrrq_vector[i].vector, in pmcraid_unregister_interrupt_handler()
4597 &(pinstance->hrrq_vector[i])); in pmcraid_unregister_interrupt_handler()
4599 if (pinstance->interrupt_mode) { in pmcraid_unregister_interrupt_handler()
4600 pci_disable_msix(pinstance->pdev); in pmcraid_unregister_interrupt_handler()
4601 pinstance->interrupt_mode = 0; in pmcraid_unregister_interrupt_handler()
4613 pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_register_interrupt_handler() argument
4616 struct pci_dev *pdev = pinstance->pdev; in pmcraid_register_interrupt_handler()
4631 pinstance->hrrq_vector[i].hrrq_id = i; in pmcraid_register_interrupt_handler()
4632 pinstance->hrrq_vector[i].drv_inst = pinstance; in pmcraid_register_interrupt_handler()
4633 pinstance->hrrq_vector[i].vector = entries[i].vector; in pmcraid_register_interrupt_handler()
4634 rc = request_irq(pinstance->hrrq_vector[i].vector, in pmcraid_register_interrupt_handler()
4637 &(pinstance->hrrq_vector[i])); in pmcraid_register_interrupt_handler()
4643 &(pinstance->hrrq_vector[j])); in pmcraid_register_interrupt_handler()
4649 pinstance->num_hrrq = num_hrrq; in pmcraid_register_interrupt_handler()
4650 pinstance->interrupt_mode = 1; in pmcraid_register_interrupt_handler()
4652 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4653 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4661 pinstance->hrrq_vector[0].hrrq_id = 0; in pmcraid_register_interrupt_handler()
4662 pinstance->hrrq_vector[0].drv_inst = pinstance; in pmcraid_register_interrupt_handler()
4663 pinstance->hrrq_vector[0].vector = pdev->irq; in pmcraid_register_interrupt_handler()
4664 pinstance->num_hrrq = 1; in pmcraid_register_interrupt_handler()
4667 PMCRAID_DRIVER_NAME, &pinstance->hrrq_vector[0]); in pmcraid_register_interrupt_handler()
4681 pmcraid_release_cmd_blocks(struct pmcraid_instance *pinstance, int max_index) in pmcraid_release_cmd_blocks() argument
4685 kmem_cache_free(pinstance->cmd_cachep, pinstance->cmd_list[i]); in pmcraid_release_cmd_blocks()
4686 pinstance->cmd_list[i] = NULL; in pmcraid_release_cmd_blocks()
4688 kmem_cache_destroy(pinstance->cmd_cachep); in pmcraid_release_cmd_blocks()
4689 pinstance->cmd_cachep = NULL; in pmcraid_release_cmd_blocks()
4705 struct pmcraid_instance *pinstance, in pmcraid_release_control_blocks() argument
4711 if (pinstance->control_pool == NULL) in pmcraid_release_control_blocks()
4715 pci_pool_free(pinstance->control_pool, in pmcraid_release_control_blocks()
4716 pinstance->cmd_list[i]->ioa_cb, in pmcraid_release_control_blocks()
4717 pinstance->cmd_list[i]->ioa_cb_bus_addr); in pmcraid_release_control_blocks()
4718 pinstance->cmd_list[i]->ioa_cb = NULL; in pmcraid_release_control_blocks()
4719 pinstance->cmd_list[i]->ioa_cb_bus_addr = 0; in pmcraid_release_control_blocks()
4721 pci_pool_destroy(pinstance->control_pool); in pmcraid_release_control_blocks()
4722 pinstance->control_pool = NULL; in pmcraid_release_control_blocks()
4734 static int pmcraid_allocate_cmd_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_cmd_blocks() argument
4738 sprintf(pinstance->cmd_pool_name, "pmcraid_cmd_pool_%d", in pmcraid_allocate_cmd_blocks()
4739 pinstance->host->unique_id); in pmcraid_allocate_cmd_blocks()
4742 pinstance->cmd_cachep = kmem_cache_create( in pmcraid_allocate_cmd_blocks()
4743 pinstance->cmd_pool_name, in pmcraid_allocate_cmd_blocks()
4746 if (!pinstance->cmd_cachep) in pmcraid_allocate_cmd_blocks()
4750 pinstance->cmd_list[i] = in pmcraid_allocate_cmd_blocks()
4751 kmem_cache_alloc(pinstance->cmd_cachep, GFP_KERNEL); in pmcraid_allocate_cmd_blocks()
4752 if (!pinstance->cmd_list[i]) { in pmcraid_allocate_cmd_blocks()
4753 pmcraid_release_cmd_blocks(pinstance, i); in pmcraid_allocate_cmd_blocks()
4770 static int pmcraid_allocate_control_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_control_blocks() argument
4774 sprintf(pinstance->ctl_pool_name, "pmcraid_control_pool_%d", in pmcraid_allocate_control_blocks()
4775 pinstance->host->unique_id); in pmcraid_allocate_control_blocks()
4777 pinstance->control_pool = in pmcraid_allocate_control_blocks()
4778 pci_pool_create(pinstance->ctl_pool_name, in pmcraid_allocate_control_blocks()
4779 pinstance->pdev, in pmcraid_allocate_control_blocks()
4783 if (!pinstance->control_pool) in pmcraid_allocate_control_blocks()
4787 pinstance->cmd_list[i]->ioa_cb = in pmcraid_allocate_control_blocks()
4789 pinstance->control_pool, in pmcraid_allocate_control_blocks()
4791 &(pinstance->cmd_list[i]->ioa_cb_bus_addr)); in pmcraid_allocate_control_blocks()
4793 if (!pinstance->cmd_list[i]->ioa_cb) { in pmcraid_allocate_control_blocks()
4794 pmcraid_release_control_blocks(pinstance, i); in pmcraid_allocate_control_blocks()
4797 memset(pinstance->cmd_list[i]->ioa_cb, 0, in pmcraid_allocate_control_blocks()
4812 pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex) in pmcraid_release_host_rrqs() argument
4817 pci_free_consistent(pinstance->pdev, in pmcraid_release_host_rrqs()
4819 pinstance->hrrq_start[i], in pmcraid_release_host_rrqs()
4820 pinstance->hrrq_start_bus_addr[i]); in pmcraid_release_host_rrqs()
4823 pinstance->hrrq_start[i] = NULL; in pmcraid_release_host_rrqs()
4824 pinstance->hrrq_start_bus_addr[i] = 0; in pmcraid_release_host_rrqs()
4825 pinstance->host_toggle_bit[i] = 0; in pmcraid_release_host_rrqs()
4836 static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance) in pmcraid_allocate_host_rrqs() argument
4842 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_allocate_host_rrqs()
4843 pinstance->hrrq_start[i] = in pmcraid_allocate_host_rrqs()
4845 pinstance->pdev, in pmcraid_allocate_host_rrqs()
4847 &(pinstance->hrrq_start_bus_addr[i])); in pmcraid_allocate_host_rrqs()
4849 if (pinstance->hrrq_start[i] == 0) { in pmcraid_allocate_host_rrqs()
4852 pmcraid_release_host_rrqs(pinstance, i); in pmcraid_allocate_host_rrqs()
4856 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_allocate_host_rrqs()
4857 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_allocate_host_rrqs()
4858 pinstance->hrrq_end[i] = in pmcraid_allocate_host_rrqs()
4859 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_allocate_host_rrqs()
4860 pinstance->host_toggle_bit[i] = 1; in pmcraid_allocate_host_rrqs()
4861 spin_lock_init(&pinstance->hrrq_lock[i]); in pmcraid_allocate_host_rrqs()
4874 static void pmcraid_release_hcams(struct pmcraid_instance *pinstance) in pmcraid_release_hcams() argument
4876 if (pinstance->ccn.msg != NULL) { in pmcraid_release_hcams()
4877 pci_free_consistent(pinstance->pdev, in pmcraid_release_hcams()
4880 pinstance->ccn.msg, in pmcraid_release_hcams()
4881 pinstance->ccn.baddr); in pmcraid_release_hcams()
4883 pinstance->ccn.msg = NULL; in pmcraid_release_hcams()
4884 pinstance->ccn.hcam = NULL; in pmcraid_release_hcams()
4885 pinstance->ccn.baddr = 0; in pmcraid_release_hcams()
4888 if (pinstance->ldn.msg != NULL) { in pmcraid_release_hcams()
4889 pci_free_consistent(pinstance->pdev, in pmcraid_release_hcams()
4892 pinstance->ldn.msg, in pmcraid_release_hcams()
4893 pinstance->ldn.baddr); in pmcraid_release_hcams()
4895 pinstance->ldn.msg = NULL; in pmcraid_release_hcams()
4896 pinstance->ldn.hcam = NULL; in pmcraid_release_hcams()
4897 pinstance->ldn.baddr = 0; in pmcraid_release_hcams()
4908 static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance) in pmcraid_allocate_hcams() argument
4910 pinstance->ccn.msg = pci_alloc_consistent( in pmcraid_allocate_hcams()
4911 pinstance->pdev, in pmcraid_allocate_hcams()
4914 &(pinstance->ccn.baddr)); in pmcraid_allocate_hcams()
4916 pinstance->ldn.msg = pci_alloc_consistent( in pmcraid_allocate_hcams()
4917 pinstance->pdev, in pmcraid_allocate_hcams()
4920 &(pinstance->ldn.baddr)); in pmcraid_allocate_hcams()
4922 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) { in pmcraid_allocate_hcams()
4923 pmcraid_release_hcams(pinstance); in pmcraid_allocate_hcams()
4925 pinstance->ccn.hcam = in pmcraid_allocate_hcams()
4926 (void *)pinstance->ccn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4927 pinstance->ldn.hcam = in pmcraid_allocate_hcams()
4928 (void *)pinstance->ldn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4930 atomic_set(&pinstance->ccn.ignore, 0); in pmcraid_allocate_hcams()
4931 atomic_set(&pinstance->ldn.ignore, 0); in pmcraid_allocate_hcams()
4934 return (pinstance->ldn.msg == NULL) ? -ENOMEM : 0; in pmcraid_allocate_hcams()
4944 static void pmcraid_release_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_config_buffers() argument
4946 if (pinstance->cfg_table != NULL && in pmcraid_release_config_buffers()
4947 pinstance->cfg_table_bus_addr != 0) { in pmcraid_release_config_buffers()
4948 pci_free_consistent(pinstance->pdev, in pmcraid_release_config_buffers()
4950 pinstance->cfg_table, in pmcraid_release_config_buffers()
4951 pinstance->cfg_table_bus_addr); in pmcraid_release_config_buffers()
4952 pinstance->cfg_table = NULL; in pmcraid_release_config_buffers()
4953 pinstance->cfg_table_bus_addr = 0; in pmcraid_release_config_buffers()
4956 if (pinstance->res_entries != NULL) { in pmcraid_release_config_buffers()
4960 list_del(&pinstance->res_entries[i].queue); in pmcraid_release_config_buffers()
4961 kfree(pinstance->res_entries); in pmcraid_release_config_buffers()
4962 pinstance->res_entries = NULL; in pmcraid_release_config_buffers()
4965 pmcraid_release_hcams(pinstance); in pmcraid_release_config_buffers()
4975 static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_allocate_config_buffers() argument
4979 pinstance->res_entries = in pmcraid_allocate_config_buffers()
4983 if (NULL == pinstance->res_entries) { in pmcraid_allocate_config_buffers()
4989 list_add_tail(&pinstance->res_entries[i].queue, in pmcraid_allocate_config_buffers()
4990 &pinstance->free_res_q); in pmcraid_allocate_config_buffers()
4992 pinstance->cfg_table = in pmcraid_allocate_config_buffers()
4993 pci_alloc_consistent(pinstance->pdev, in pmcraid_allocate_config_buffers()
4995 &pinstance->cfg_table_bus_addr); in pmcraid_allocate_config_buffers()
4997 if (NULL == pinstance->cfg_table) { in pmcraid_allocate_config_buffers()
4999 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
5003 if (pmcraid_allocate_hcams(pinstance)) { in pmcraid_allocate_config_buffers()
5005 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
5020 static void pmcraid_init_tasklets(struct pmcraid_instance *pinstance) in pmcraid_init_tasklets() argument
5023 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_init_tasklets()
5024 tasklet_init(&pinstance->isr_tasklet[i], in pmcraid_init_tasklets()
5026 (unsigned long)&pinstance->hrrq_vector[i]); in pmcraid_init_tasklets()
5037 static void pmcraid_kill_tasklets(struct pmcraid_instance *pinstance) in pmcraid_kill_tasklets() argument
5040 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_kill_tasklets()
5041 tasklet_kill(&pinstance->isr_tasklet[i]); in pmcraid_kill_tasklets()
5052 static void pmcraid_release_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_buffers() argument
5054 pmcraid_release_config_buffers(pinstance); in pmcraid_release_buffers()
5055 pmcraid_release_control_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
5056 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
5057 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_release_buffers()
5059 if (pinstance->inq_data != NULL) { in pmcraid_release_buffers()
5060 pci_free_consistent(pinstance->pdev, in pmcraid_release_buffers()
5062 pinstance->inq_data, in pmcraid_release_buffers()
5063 pinstance->inq_data_baddr); in pmcraid_release_buffers()
5065 pinstance->inq_data = NULL; in pmcraid_release_buffers()
5066 pinstance->inq_data_baddr = 0; in pmcraid_release_buffers()
5069 if (pinstance->timestamp_data != NULL) { in pmcraid_release_buffers()
5070 pci_free_consistent(pinstance->pdev, in pmcraid_release_buffers()
5072 pinstance->timestamp_data, in pmcraid_release_buffers()
5073 pinstance->timestamp_data_baddr); in pmcraid_release_buffers()
5075 pinstance->timestamp_data = NULL; in pmcraid_release_buffers()
5076 pinstance->timestamp_data_baddr = 0; in pmcraid_release_buffers()
5093 static int pmcraid_init_buffers(struct pmcraid_instance *pinstance) in pmcraid_init_buffers() argument
5097 if (pmcraid_allocate_host_rrqs(pinstance)) { in pmcraid_init_buffers()
5099 pinstance->num_hrrq); in pmcraid_init_buffers()
5103 if (pmcraid_allocate_config_buffers(pinstance)) { in pmcraid_init_buffers()
5105 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5109 if (pmcraid_allocate_cmd_blocks(pinstance)) { in pmcraid_init_buffers()
5111 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
5112 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5116 if (pmcraid_allocate_control_blocks(pinstance)) { in pmcraid_init_buffers()
5118 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
5119 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_init_buffers()
5120 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
5125 pinstance->inq_data = pci_alloc_consistent( in pmcraid_init_buffers()
5126 pinstance->pdev, in pmcraid_init_buffers()
5128 &pinstance->inq_data_baddr); in pmcraid_init_buffers()
5130 if (pinstance->inq_data == NULL) { in pmcraid_init_buffers()
5132 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
5137 pinstance->timestamp_data = pci_alloc_consistent( in pmcraid_init_buffers()
5138 pinstance->pdev, in pmcraid_init_buffers()
5140 &pinstance->timestamp_data_baddr); in pmcraid_init_buffers()
5142 if (pinstance->timestamp_data == NULL) { in pmcraid_init_buffers()
5145 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
5155 struct pmcraid_cmd *cmdp = pinstance->cmd_list[i]; in pmcraid_init_buffers()
5157 cmdp->drv_inst = pinstance; in pmcraid_init_buffers()
5158 list_add_tail(&cmdp->free_list, &pinstance->free_cmd_pool); in pmcraid_init_buffers()
5170 static void pmcraid_reinit_buffers(struct pmcraid_instance *pinstance) in pmcraid_reinit_buffers() argument
5175 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_reinit_buffers()
5176 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_reinit_buffers()
5177 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_reinit_buffers()
5178 pinstance->hrrq_end[i] = in pmcraid_reinit_buffers()
5179 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_reinit_buffers()
5180 pinstance->host_toggle_bit[i] = 1; in pmcraid_reinit_buffers()
5196 struct pmcraid_instance *pinstance = in pmcraid_init_instance() local
5199 pinstance->host = host; in pmcraid_init_instance()
5200 pinstance->pdev = pdev; in pmcraid_init_instance()
5203 pinstance->mapped_dma_addr = mapped_pci_addr; in pmcraid_init_instance()
5207 struct pmcraid_chip_details *chip_cfg = pinstance->chip_cfg; in pmcraid_init_instance()
5208 struct pmcraid_interrupts *pint_regs = &pinstance->int_regs; in pmcraid_init_instance()
5210 pinstance->ioarrin = mapped_pci_addr + chip_cfg->ioarrin; in pmcraid_init_instance()
5226 pinstance->mailbox = mapped_pci_addr + chip_cfg->mailbox; in pmcraid_init_instance()
5227 pinstance->ioa_status = mapped_pci_addr + chip_cfg->ioastatus; in pmcraid_init_instance()
5236 pinstance->ioa_reset_attempts = 0; in pmcraid_init_instance()
5237 init_waitqueue_head(&pinstance->reset_wait_q); in pmcraid_init_instance()
5239 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_init_instance()
5240 atomic_set(&pinstance->last_message_id, 0); in pmcraid_init_instance()
5241 atomic_set(&pinstance->expose_resources, 0); in pmcraid_init_instance()
5243 INIT_LIST_HEAD(&pinstance->free_res_q); in pmcraid_init_instance()
5244 INIT_LIST_HEAD(&pinstance->used_res_q); in pmcraid_init_instance()
5245 INIT_LIST_HEAD(&pinstance->free_cmd_pool); in pmcraid_init_instance()
5246 INIT_LIST_HEAD(&pinstance->pending_cmd_pool); in pmcraid_init_instance()
5248 spin_lock_init(&pinstance->free_pool_lock); in pmcraid_init_instance()
5249 spin_lock_init(&pinstance->pending_pool_lock); in pmcraid_init_instance()
5250 spin_lock_init(&pinstance->resource_lock); in pmcraid_init_instance()
5251 mutex_init(&pinstance->aen_queue_lock); in pmcraid_init_instance()
5254 INIT_WORK(&pinstance->worker_q, pmcraid_worker_function); in pmcraid_init_instance()
5257 pinstance->current_log_level = pmcraid_log_level; in pmcraid_init_instance()
5260 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_init_instance()
5261 pinstance->reset_cmd = NULL; in pmcraid_init_instance()
5276 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_shutdown() local
5277 pmcraid_reset_bringdown(pinstance); in pmcraid_shutdown()
5309 static int pmcraid_setup_chrdev(struct pmcraid_instance *pinstance) in pmcraid_setup_chrdev() argument
5315 cdev_init(&pinstance->cdev, &pmcraid_fops); in pmcraid_setup_chrdev()
5316 pinstance->cdev.owner = THIS_MODULE; in pmcraid_setup_chrdev()
5318 error = cdev_add(&pinstance->cdev, MKDEV(pmcraid_major, minor), 1); in pmcraid_setup_chrdev()
5336 static void pmcraid_release_chrdev(struct pmcraid_instance *pinstance) in pmcraid_release_chrdev() argument
5338 pmcraid_release_minor(MINOR(pinstance->cdev.dev)); in pmcraid_release_chrdev()
5340 MKDEV(pmcraid_major, MINOR(pinstance->cdev.dev))); in pmcraid_release_chrdev()
5341 cdev_del(&pinstance->cdev); in pmcraid_release_chrdev()
5353 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_remove() local
5356 pmcraid_release_chrdev(pinstance); in pmcraid_remove()
5359 scsi_remove_host(pinstance->host); in pmcraid_remove()
5362 scsi_block_requests(pinstance->host); in pmcraid_remove()
5367 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_remove()
5368 flush_work(&pinstance->worker_q); in pmcraid_remove()
5370 pmcraid_kill_tasklets(pinstance); in pmcraid_remove()
5371 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_remove()
5372 pmcraid_release_buffers(pinstance); in pmcraid_remove()
5373 iounmap(pinstance->mapped_dma_addr); in pmcraid_remove()
5375 scsi_host_put(pinstance->host); in pmcraid_remove()
5391 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_suspend() local
5394 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_suspend()
5395 pmcraid_kill_tasklets(pinstance); in pmcraid_suspend()
5396 pci_set_drvdata(pinstance->pdev, pinstance); in pmcraid_suspend()
5397 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_suspend()
5413 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_resume() local
5414 struct Scsi_Host *host = pinstance->host; in pmcraid_resume()
5442 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5443 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_resume()
5444 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_resume()
5453 pmcraid_init_tasklets(pinstance); in pmcraid_resume()
5454 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_resume()
5459 pinstance->ioa_hard_reset = 1; in pmcraid_resume()
5464 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_resume()
5473 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5474 pmcraid_kill_tasklets(pinstance); in pmcraid_resume()
5475 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_resume()
5500 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset() local
5503 spin_lock_irqsave(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5505 spin_unlock_irqrestore(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5506 scsi_unblock_requests(pinstance->host); in pmcraid_complete_ioa_reset()
5507 schedule_work(&pinstance->worker_q); in pmcraid_complete_ioa_reset()
5561 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp() local
5572 pinstance->timestamp_data->timestamp[0] = (__u8)(timestamp); in pmcraid_set_timestamp()
5573 pinstance->timestamp_data->timestamp[1] = (__u8)((timestamp) >> 8); in pmcraid_set_timestamp()
5574 pinstance->timestamp_data->timestamp[2] = (__u8)((timestamp) >> 16); in pmcraid_set_timestamp()
5575 pinstance->timestamp_data->timestamp[3] = (__u8)((timestamp) >> 24); in pmcraid_set_timestamp()
5576 pinstance->timestamp_data->timestamp[4] = (__u8)((timestamp) >> 32); in pmcraid_set_timestamp()
5577 pinstance->timestamp_data->timestamp[5] = (__u8)((timestamp) >> 40); in pmcraid_set_timestamp()
5598 ioadl->address = cpu_to_le64(pinstance->timestamp_data_baddr); in pmcraid_set_timestamp()
5601 if (!pinstance->timestamp_error) { in pmcraid_set_timestamp()
5602 pinstance->timestamp_error = 0; in pmcraid_set_timestamp()
5627 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table() local
5635 if (pinstance->cfg_table->flags & MICROCODE_UPDATE_REQUIRED) in pmcraid_init_res_table()
5638 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_init_res_table()
5644 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5646 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) in pmcraid_init_res_table()
5649 for (i = 0; i < pinstance->cfg_table->num_entries; i++) { in pmcraid_init_res_table()
5650 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_init_res_table()
5652 cfgte = &pinstance->cfg_table->entries[i]; in pmcraid_init_res_table()
5655 &pinstance->cfg_table->entries_ext[i]; in pmcraid_init_res_table()
5670 &pinstance->used_res_q); in pmcraid_init_res_table()
5679 if (list_empty(&pinstance->free_res_q)) { in pmcraid_init_res_table()
5685 res = list_entry(pinstance->free_res_q.next, in pmcraid_init_res_table()
5691 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5699 pinstance->config_table_entry_size); in pmcraid_init_res_table()
5716 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5718 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_init_res_table()
5723 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5741 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg() local
5744 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_querycfg()
5746 pinstance->config_table_entry_size = in pmcraid_querycfg()
5749 pinstance->config_table_entry_size = in pmcraid_querycfg()
5775 ioadl->address = cpu_to_le64(pinstance->cfg_table_bus_addr); in pmcraid_querycfg()
5795 struct pmcraid_instance *pinstance; in pmcraid_probe() local
5877 pinstance = (struct pmcraid_instance *)host->hostdata; in pmcraid_probe()
5878 memset(pinstance, 0, sizeof(*pinstance)); in pmcraid_probe()
5880 pinstance->chip_cfg = in pmcraid_probe()
5890 pci_set_drvdata(pdev, pinstance); in pmcraid_probe()
5893 rc = pci_save_state(pinstance->pdev); in pmcraid_probe()
5900 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_probe()
5902 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_probe()
5909 pmcraid_init_tasklets(pinstance); in pmcraid_probe()
5912 rc = pmcraid_init_buffers(pinstance); in pmcraid_probe()
5920 pmcraid_reset_type(pinstance); in pmcraid_probe()
5922 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_probe()
5928 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_probe()
5935 rc = scsi_add_host(pinstance->host, &pdev->dev); in pmcraid_probe()
5941 scsi_scan_host(pinstance->host); in pmcraid_probe()
5943 rc = pmcraid_setup_chrdev(pinstance); in pmcraid_probe()
5954 atomic_set(&pinstance->expose_resources, 1); in pmcraid_probe()
5955 schedule_work(&pinstance->worker_q); in pmcraid_probe()
5962 pmcraid_release_buffers(pinstance); in pmcraid_probe()
5965 pmcraid_kill_tasklets(pinstance); in pmcraid_probe()
5966 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_probe()