Lines Matching refs:pinstance
140 struct pmcraid_instance *pinstance; in pmcraid_slave_alloc() local
146 pinstance = shost_priv(scsi_dev->host); in pmcraid_slave_alloc()
148 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_slave_alloc()
155 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
156 list_for_each_entry(temp, &pinstance->used_res_q, queue) { in pmcraid_slave_alloc()
193 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_slave_alloc()
360 struct pmcraid_instance *pinstance in pmcraid_get_free_cmd() argument
367 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
369 if (!list_empty(&pinstance->free_cmd_pool)) { in pmcraid_get_free_cmd()
370 cmd = list_entry(pinstance->free_cmd_pool.next, in pmcraid_get_free_cmd()
374 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_get_free_cmd()
391 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_return_cmd() local
394 spin_lock_irqsave(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
395 list_add_tail(&cmd->free_list, &pinstance->free_cmd_pool); in pmcraid_return_cmd()
396 spin_unlock_irqrestore(&pinstance->free_pool_lock, lock_flags); in pmcraid_return_cmd()
407 static u32 pmcraid_read_interrupts(struct pmcraid_instance *pinstance) in pmcraid_read_interrupts() argument
409 return (pinstance->interrupt_mode) ? in pmcraid_read_interrupts()
410 ioread32(pinstance->int_regs.ioa_host_msix_interrupt_reg) : in pmcraid_read_interrupts()
411 ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_read_interrupts()
424 struct pmcraid_instance *pinstance, in pmcraid_disable_interrupts() argument
428 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
431 iowrite32(intrs, pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_disable_interrupts()
432 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
433 ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_disable_interrupts()
435 if (!pinstance->interrupt_mode) { in pmcraid_disable_interrupts()
437 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
438 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_disable_interrupts()
452 struct pmcraid_instance *pinstance, in pmcraid_enable_interrupts() argument
456 u32 gmask = ioread32(pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
459 iowrite32(nmask, pinstance->int_regs.global_interrupt_mask_reg); in pmcraid_enable_interrupts()
461 if (!pinstance->interrupt_mode) { in pmcraid_enable_interrupts()
463 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
464 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_enable_interrupts()
468 ioread32(pinstance->int_regs.global_interrupt_mask_reg), in pmcraid_enable_interrupts()
469 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg)); in pmcraid_enable_interrupts()
481 struct pmcraid_instance *pinstance in pmcraid_clr_trans_op() argument
486 if (!pinstance->interrupt_mode) { in pmcraid_clr_trans_op()
488 pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
489 ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_clr_trans_op()
491 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
492 ioread32(pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_clr_trans_op()
495 if (pinstance->reset_cmd != NULL) { in pmcraid_clr_trans_op()
496 del_timer(&pinstance->reset_cmd->timer); in pmcraid_clr_trans_op()
498 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
499 pinstance->reset_cmd->cmd_done(pinstance->reset_cmd); in pmcraid_clr_trans_op()
501 pinstance->host->host_lock, lock_flags); in pmcraid_clr_trans_op()
514 static void pmcraid_reset_type(struct pmcraid_instance *pinstance) in pmcraid_reset_type() argument
520 mask = ioread32(pinstance->int_regs.ioa_host_interrupt_mask_reg); in pmcraid_reset_type()
521 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_reset_type()
522 alerts = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_type()
528 pinstance->ioa_hard_reset = 1; in pmcraid_reset_type()
533 pinstance->ioa_unit_check = 1; in pmcraid_reset_type()
548 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_bist_done() local
553 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_bist_done()
565 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
567 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_bist_done()
579 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_start_bist() local
584 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
585 doorbells = ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_start_bist()
586 intrs = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_start_bist()
605 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert_done() local
606 u32 status = ioread32(pinstance->ioa_status); in pmcraid_reset_alert_done()
616 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
618 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_alert_done()
641 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_reset_alert() local
651 rc = pci_read_config_word(pinstance->pdev, PCI_COMMAND, &pci_reg); in pmcraid_reset_alert()
665 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
667 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_reset_alert()
671 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_reset_alert()
689 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_timeout_handler() local
692 dev_info(&pinstance->pdev->dev, in pmcraid_timeout_handler()
702 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
703 if (!pinstance->ioa_reset_in_progress) { in pmcraid_timeout_handler()
704 pinstance->ioa_reset_attempts = 0; in pmcraid_timeout_handler()
705 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_timeout_handler()
711 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_timeout_handler()
717 pinstance->reset_cmd = cmd; in pmcraid_timeout_handler()
718 pinstance->ioa_reset_in_progress = 1; in pmcraid_timeout_handler()
722 if (pinstance->reset_cmd != cmd) { in pmcraid_timeout_handler()
735 if (cmd == pinstance->reset_cmd) in pmcraid_timeout_handler()
740 if (pinstance->scn.ioa_state != PMC_DEVICE_EVENT_RESET_START && in pmcraid_timeout_handler()
741 pinstance->scn.ioa_state != PMC_DEVICE_EVENT_SHUTDOWN_START) in pmcraid_timeout_handler()
742 pmcraid_notify_ioastate(pinstance, in pmcraid_timeout_handler()
745 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_timeout_handler()
746 scsi_block_requests(pinstance->host); in pmcraid_timeout_handler()
748 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_timeout_handler()
824 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_erp_done() local
835 dma_unmap_single(&pinstance->pdev->dev, cmd->sense_buffer_dma, in pmcraid_erp_done()
859 struct pmcraid_instance *pinstance = cmd->drv_inst; in _pmcraid_fire_command() local
867 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
868 list_add_tail(&cmd->free_list, &pinstance->pending_cmd_pool); in _pmcraid_fire_command()
869 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in _pmcraid_fire_command()
870 atomic_inc(&pinstance->outstanding_cmds); in _pmcraid_fire_command()
874 iowrite32(le64_to_cpu(cmd->ioa_cb->ioarcb.ioarcb_bus_addr), pinstance->ioarrin); in _pmcraid_fire_command()
921 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_shutdown_done() local
924 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
926 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioa_shutdown_done()
976 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion_done() local
986 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
987 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_get_fwversion_done()
989 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_get_fwversion_done()
1007 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_get_fwversion() local
1031 ioadl->address = cpu_to_le64(pinstance->inq_data_baddr); in pmcraid_get_fwversion()
1047 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_identify_hrrq() local
1050 __be64 hrrq_addr = cpu_to_be64(pinstance->hrrq_start_bus_addr[index]); in pmcraid_identify_hrrq()
1057 if (cmd->hrrq_index < pinstance->num_hrrq) { in pmcraid_identify_hrrq()
1123 struct pmcraid_instance *pinstance, in pmcraid_init_hcam() argument
1135 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_init_hcam()
1145 dma = pinstance->ccn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1146 hcam = &pinstance->ccn; in pmcraid_init_hcam()
1150 dma = pinstance->ldn.baddr + PMCRAID_AEN_HDR_SIZE; in pmcraid_init_hcam()
1151 hcam = &pinstance->ldn; in pmcraid_init_hcam()
1192 static void pmcraid_send_hcam(struct pmcraid_instance *pinstance, u8 type) in pmcraid_send_hcam() argument
1194 struct pmcraid_cmd *cmd = pmcraid_init_hcam(pinstance, type); in pmcraid_send_hcam()
1243 struct pmcraid_instance *pinstance; in pmcraid_cancel_hcam() local
1246 pinstance = cmd->drv_inst; in pmcraid_cancel_hcam()
1248 &pinstance->ldn : &pinstance->ccn; in pmcraid_cancel_hcam()
1394 struct pmcraid_instance *pinstance, in pmcraid_notify_aen() argument
1404 aen_msg->hostno = (pinstance->host->unique_id << 16 | in pmcraid_notify_aen()
1405 MINOR(pinstance->cdev.dev)); in pmcraid_notify_aen()
1464 static int pmcraid_notify_ccn(struct pmcraid_instance *pinstance) in pmcraid_notify_ccn() argument
1466 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ccn()
1467 pinstance->ccn.msg, in pmcraid_notify_ccn()
1468 le32_to_cpu(pinstance->ccn.hcam->data_len) + in pmcraid_notify_ccn()
1479 static int pmcraid_notify_ldn(struct pmcraid_instance *pinstance) in pmcraid_notify_ldn() argument
1481 return pmcraid_notify_aen(pinstance, in pmcraid_notify_ldn()
1482 pinstance->ldn.msg, in pmcraid_notify_ldn()
1483 le32_to_cpu(pinstance->ldn.hcam->data_len) + in pmcraid_notify_ldn()
1495 static void pmcraid_notify_ioastate(struct pmcraid_instance *pinstance, u32 evt) in pmcraid_notify_ioastate() argument
1497 pinstance->scn.ioa_state = evt; in pmcraid_notify_ioastate()
1498 pmcraid_notify_aen(pinstance, in pmcraid_notify_ioastate()
1499 &pinstance->scn.msg, in pmcraid_notify_ioastate()
1511 static void pmcraid_handle_config_change(struct pmcraid_instance *pinstance) in pmcraid_handle_config_change() argument
1525 ccn_hcam = (struct pmcraid_hcam_ccn *)pinstance->ccn.hcam; in pmcraid_handle_config_change()
1527 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_handle_config_change()
1531 le32_to_cpu(pinstance->ccn.hcam->ilid), in pmcraid_handle_config_change()
1532 pinstance->ccn.hcam->op_code, in pmcraid_handle_config_change()
1533 (le32_to_cpu(pinstance->ccn.hcam->timestamp1) | in pmcraid_handle_config_change()
1534 ((le32_to_cpu(pinstance->ccn.hcam->timestamp2) & 0xffffffffLL) << 32)), in pmcraid_handle_config_change()
1535 pinstance->ccn.hcam->notification_type, in pmcraid_handle_config_change()
1536 pinstance->ccn.hcam->notification_lost, in pmcraid_handle_config_change()
1537 pinstance->ccn.hcam->flags, in pmcraid_handle_config_change()
1538 pinstance->host->unique_id, in pmcraid_handle_config_change()
1551 if (pinstance->ccn.hcam->notification_lost) { in pmcraid_handle_config_change()
1552 cfgcmd = pmcraid_get_free_cmd(pinstance); in pmcraid_handle_config_change()
1555 pinstance->reinit_cfg_table = 1; in pmcraid_handle_config_change()
1567 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1575 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1576 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_handle_config_change()
1589 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1598 if (list_empty(&pinstance->free_res_q)) { in pmcraid_handle_config_change()
1599 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_handle_config_change()
1602 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_handle_config_change()
1604 pmcraid_send_hcam(pinstance, in pmcraid_handle_config_change()
1606 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_handle_config_change()
1611 res = list_entry(pinstance->free_res_q.next, in pmcraid_handle_config_change()
1617 list_add_tail(&res->queue, &pinstance->used_res_q); in pmcraid_handle_config_change()
1620 memcpy(&res->cfg_entry, cfg_entry, pinstance->config_table_entry_size); in pmcraid_handle_config_change()
1622 if (pinstance->ccn.hcam->notification_type == in pmcraid_handle_config_change()
1632 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1635 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_handle_config_change()
1639 schedule_work(&pinstance->worker_q); in pmcraid_handle_config_change()
1641 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_handle_config_change()
1647 pmcraid_notify_ccn(pinstance); in pmcraid_handle_config_change()
1649 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_handle_config_change()
1698 static void pmcraid_handle_error_log(struct pmcraid_instance *pinstance) in pmcraid_handle_error_log() argument
1703 hcam_ldn = (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_handle_error_log()
1707 pinstance->ldn.hcam->ilid, in pmcraid_handle_error_log()
1708 pinstance->ldn.hcam->op_code, in pmcraid_handle_error_log()
1709 pinstance->ldn.hcam->notification_type, in pmcraid_handle_error_log()
1710 pinstance->ldn.hcam->notification_lost, in pmcraid_handle_error_log()
1711 pinstance->ldn.hcam->flags, in pmcraid_handle_error_log()
1712 pinstance->ldn.hcam->overlay_id); in pmcraid_handle_error_log()
1715 if (pinstance->ldn.hcam->notification_type != in pmcraid_handle_error_log()
1719 if (pinstance->ldn.hcam->notification_lost == in pmcraid_handle_error_log()
1721 dev_info(&pinstance->pdev->dev, "Error notifications lost\n"); in pmcraid_handle_error_log()
1727 dev_info(&pinstance->pdev->dev, in pmcraid_handle_error_log()
1730 pinstance->host, in pmcraid_handle_error_log()
1749 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ccn() local
1753 pinstance->ccn.cmd = NULL; in pmcraid_process_ccn()
1761 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ccn()
1764 dev_info(&pinstance->pdev->dev, in pmcraid_process_ccn()
1766 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1767 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_process_ccn()
1768 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_process_ccn()
1770 pmcraid_handle_config_change(pinstance); in pmcraid_process_ccn()
1786 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_process_ldn() local
1788 (struct pmcraid_hcam_ldn *)pinstance->ldn.hcam; in pmcraid_process_ldn()
1794 pinstance->ldn.cmd = NULL; in pmcraid_process_ldn()
1802 atomic_read(&pinstance->ccn.ignore) == 1) { in pmcraid_process_ldn()
1805 pmcraid_handle_error_log(pinstance); in pmcraid_process_ldn()
1807 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_process_ldn()
1809 pmcraid_initiate_reset(pinstance); in pmcraid_process_ldn()
1810 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_process_ldn()
1815 pinstance->timestamp_error = 1; in pmcraid_process_ldn()
1819 dev_info(&pinstance->pdev->dev, in pmcraid_process_ldn()
1824 pmcraid_notify_ldn(pinstance); in pmcraid_process_ldn()
1826 cmd = pmcraid_init_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_process_ldn()
1839 static void pmcraid_register_hcams(struct pmcraid_instance *pinstance) in pmcraid_register_hcams() argument
1841 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_CONFIG_CHANGE); in pmcraid_register_hcams()
1842 pmcraid_send_hcam(pinstance, PMCRAID_HCAM_CODE_LOG_DATA); in pmcraid_register_hcams()
1851 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_unregister_hcams() local
1858 atomic_set(&pinstance->ccn.ignore, 1); in pmcraid_unregister_hcams()
1859 atomic_set(&pinstance->ldn.ignore, 1); in pmcraid_unregister_hcams()
1865 if ((pinstance->force_ioa_reset && !pinstance->ioa_bringdown) || in pmcraid_unregister_hcams()
1866 pinstance->ioa_unit_check) { in pmcraid_unregister_hcams()
1867 pinstance->force_ioa_reset = 0; in pmcraid_unregister_hcams()
1868 pinstance->ioa_unit_check = 0; in pmcraid_unregister_hcams()
1869 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_unregister_hcams()
1889 static int pmcraid_reset_enable_ioa(struct pmcraid_instance *pinstance) in pmcraid_reset_enable_ioa() argument
1893 pmcraid_reinit_buffers(pinstance); in pmcraid_reset_enable_ioa()
1894 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_reset_enable_ioa()
1896 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_reset_enable_ioa()
1899 if (!pinstance->interrupt_mode) { in pmcraid_reset_enable_ioa()
1901 pinstance->int_regs. in pmcraid_reset_enable_ioa()
1904 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_reset_enable_ioa()
1921 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_soft_reset() local
1946 if (pinstance->interrupt_mode) { in pmcraid_soft_reset()
1948 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1949 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1952 iowrite32(doorbell, pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_soft_reset()
1953 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1954 int_reg = ioread32(pinstance->int_regs.ioa_host_interrupt_reg); in pmcraid_soft_reset()
1957 ioread32(pinstance->int_regs.host_ioa_interrupt_reg), in pmcraid_soft_reset()
1969 static void pmcraid_get_dump(struct pmcraid_instance *pinstance) in pmcraid_get_dump() argument
1986 static void pmcraid_fail_outstanding_cmds(struct pmcraid_instance *pinstance) in pmcraid_fail_outstanding_cmds() argument
1994 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
1995 list_for_each_entry_safe(cmd, temp, &pinstance->pending_cmd_pool, in pmcraid_fail_outstanding_cmds()
1998 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_fail_outstanding_cmds()
2036 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_fail_outstanding_cmds()
2037 spin_lock_irqsave(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2040 spin_unlock_irqrestore(&pinstance->pending_pool_lock, lock_flags); in pmcraid_fail_outstanding_cmds()
2060 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_ioa_reset() local
2063 pinstance->ioa_reset_in_progress = 1; in pmcraid_ioa_reset()
2065 if (pinstance->reset_cmd != cmd) { in pmcraid_ioa_reset()
2067 pinstance->reset_cmd = cmd; in pmcraid_ioa_reset()
2071 pinstance->ioa_state, cmd); in pmcraid_ioa_reset()
2073 switch (pinstance->ioa_state) { in pmcraid_ioa_reset()
2089 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_ioa_reset()
2090 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2098 scsi_block_requests(pinstance->host); in pmcraid_ioa_reset()
2104 if (pinstance->ioa_hard_reset == 0) { in pmcraid_ioa_reset()
2105 if (ioread32(pinstance->ioa_status) & in pmcraid_ioa_reset()
2108 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2112 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2119 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2130 pinstance->ioa_state = IOA_STATE_IN_HARD_RESET; in pmcraid_ioa_reset()
2135 pinstance->ioa_reset_attempts++; in pmcraid_ioa_reset()
2138 if (pinstance->ioa_reset_attempts > PMCRAID_RESET_ATTEMPTS) { in pmcraid_ioa_reset()
2139 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2141 pinstance->ioa_state = IOA_STATE_DEAD; in pmcraid_ioa_reset()
2143 if (pinstance->ioa_bringdown) in pmcraid_ioa_reset()
2144 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2147 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2156 pci_restore_state(pinstance->pdev); in pmcraid_ioa_reset()
2159 pmcraid_fail_outstanding_cmds(pinstance); in pmcraid_ioa_reset()
2162 if (pinstance->ioa_unit_check) { in pmcraid_ioa_reset()
2164 pinstance->ioa_unit_check = 0; in pmcraid_ioa_reset()
2165 pmcraid_get_dump(pinstance); in pmcraid_ioa_reset()
2166 pinstance->ioa_reset_attempts--; in pmcraid_ioa_reset()
2167 pinstance->ioa_state = IOA_STATE_IN_RESET_ALERT; in pmcraid_ioa_reset()
2176 if (pinstance->ioa_bringdown) { in pmcraid_ioa_reset()
2178 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2179 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2180 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_ioa_reset()
2181 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2189 if (pmcraid_reset_enable_ioa(pinstance)) { in pmcraid_ioa_reset()
2190 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2195 pinstance->ioa_state = IOA_STATE_IN_SOFT_RESET; in pmcraid_ioa_reset()
2206 pinstance->ioa_state = IOA_STATE_IN_BRINGUP; in pmcraid_ioa_reset()
2219 pinstance->ioa_state = IOA_STATE_OPERATIONAL; in pmcraid_ioa_reset()
2230 if (pinstance->ioa_shutdown_type == SHUTDOWN_NONE && in pmcraid_ioa_reset()
2231 pinstance->force_ioa_reset == 0) { in pmcraid_ioa_reset()
2232 pmcraid_notify_ioastate(pinstance, in pmcraid_ioa_reset()
2236 if (pinstance->ioa_shutdown_type != SHUTDOWN_NONE) in pmcraid_ioa_reset()
2237 pinstance->ioa_state = IOA_STATE_IN_BRINGDOWN; in pmcraid_ioa_reset()
2250 pinstance->ioa_reset_in_progress = 0; in pmcraid_ioa_reset()
2251 pinstance->ioa_reset_attempts = 0; in pmcraid_ioa_reset()
2252 pinstance->reset_cmd = NULL; in pmcraid_ioa_reset()
2253 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_ioa_reset()
2254 pinstance->ioa_bringdown = 0; in pmcraid_ioa_reset()
2260 if (pinstance->ioa_state == IOA_STATE_OPERATIONAL) in pmcraid_ioa_reset()
2261 pmcraid_register_hcams(pinstance); in pmcraid_ioa_reset()
2263 wake_up_all(&pinstance->reset_wait_q); in pmcraid_ioa_reset()
2280 static void pmcraid_initiate_reset(struct pmcraid_instance *pinstance) in pmcraid_initiate_reset() argument
2287 if (!pinstance->ioa_reset_in_progress) { in pmcraid_initiate_reset()
2288 scsi_block_requests(pinstance->host); in pmcraid_initiate_reset()
2289 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_initiate_reset()
2296 pinstance->ioa_shutdown_type = SHUTDOWN_NONE; in pmcraid_initiate_reset()
2297 pinstance->reset_cmd = cmd; in pmcraid_initiate_reset()
2298 pinstance->force_ioa_reset = 1; in pmcraid_initiate_reset()
2299 pmcraid_notify_ioastate(pinstance, in pmcraid_initiate_reset()
2320 struct pmcraid_instance *pinstance, in pmcraid_reset_reload() argument
2329 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2331 if (pinstance->ioa_reset_in_progress) { in pmcraid_reset_reload()
2334 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2336 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2337 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2339 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2341 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_reload()
2346 if (pinstance->ioa_state == target_state) { in pmcraid_reset_reload()
2353 scsi_block_requests(pinstance->host); in pmcraid_reset_reload()
2354 reset_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_reload()
2361 pinstance->ioa_bringdown = 1; in pmcraid_reset_reload()
2363 pinstance->ioa_shutdown_type = shutdown_type; in pmcraid_reset_reload()
2364 pinstance->reset_cmd = reset_cmd; in pmcraid_reset_reload()
2365 pinstance->force_ioa_reset = reset; in pmcraid_reset_reload()
2368 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2370 wait_event(pinstance->reset_wait_q, in pmcraid_reset_reload()
2371 !pinstance->ioa_reset_in_progress); in pmcraid_reset_reload()
2374 scsi_unblock_requests(pinstance->host); in pmcraid_reset_reload()
2375 return pinstance->ioa_state != target_state; in pmcraid_reset_reload()
2378 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_reload()
2390 static int pmcraid_reset_bringdown(struct pmcraid_instance *pinstance) in pmcraid_reset_bringdown() argument
2392 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringdown()
2405 static int pmcraid_reset_bringup(struct pmcraid_instance *pinstance) in pmcraid_reset_bringup() argument
2407 pmcraid_notify_ioastate(pinstance, PMC_DEVICE_EVENT_RESET_START); in pmcraid_reset_bringup()
2409 return pmcraid_reset_reload(pinstance, in pmcraid_reset_bringup()
2587 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_error_handler() local
2635 scsi_report_bus_reset(pinstance->host, in pmcraid_error_handler()
2706 struct pmcraid_instance *pinstance; in pmcraid_reset_device() local
2712 pinstance = in pmcraid_reset_device()
2726 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2727 if (pinstance->ioa_reset_in_progress || in pmcraid_reset_device()
2728 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_reset_device()
2729 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2740 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_reset_device()
2743 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2772 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_reset_device()
2862 struct pmcraid_instance *pinstance; in pmcraid_abort_cmd() local
2864 pinstance = (struct pmcraid_instance *)cmd->drv_inst; in pmcraid_abort_cmd()
2866 cancel_cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_abort_cmd()
2942 struct pmcraid_instance *pinstance; in pmcraid_eh_abort_handler() local
2951 pinstance = in pmcraid_eh_abort_handler()
2967 spin_lock_irqsave(pinstance->host->host_lock, host_lock_flags); in pmcraid_eh_abort_handler()
2969 if (pinstance->ioa_reset_in_progress || in pmcraid_eh_abort_handler()
2970 pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_eh_abort_handler()
2971 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
2981 spin_lock_irqsave(&pinstance->pending_pool_lock, pending_lock_flags); in pmcraid_eh_abort_handler()
2982 list_for_each_entry(cmd, &pinstance->pending_cmd_pool, free_list) { in pmcraid_eh_abort_handler()
2990 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_eh_abort_handler()
2999 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_eh_abort_handler()
3065 struct pmcraid_instance *pinstance = in pmcraid_eh_host_reset_handler() local
3074 if (atomic_read(&pinstance->outstanding_cmds) <= in pmcraid_eh_host_reset_handler()
3080 dev_err(&pinstance->pdev->dev, in pmcraid_eh_host_reset_handler()
3082 return pmcraid_reset_bringup(pinstance) == 0 ? SUCCESS : FAILED; in pmcraid_eh_host_reset_handler()
3143 struct pmcraid_instance *pinstance, in pmcraid_build_ioadl() argument
3328 struct pmcraid_instance *pinstance; in pmcraid_queuecommand_lck() local
3335 pinstance = in pmcraid_queuecommand_lck()
3337 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_queuecommand_lck()
3345 if (pinstance->ioa_state == IOA_STATE_DEAD) { in pmcraid_queuecommand_lck()
3353 if (pinstance->ioa_reset_in_progress) in pmcraid_queuecommand_lck()
3366 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_queuecommand_lck()
3384 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_queuecommand_lck()
3385 pinstance->num_hrrq; in pmcraid_queuecommand_lck()
3406 rc = pmcraid_build_ioadl(pinstance, cmd); in pmcraid_queuecommand_lck()
3410 scsi_cmd->cmnd[0], pinstance->host->unique_id, in pmcraid_queuecommand_lck()
3438 struct pmcraid_instance *pinstance; in DEF_SCSI_QCMD() local
3444 pinstance = container_of(inode->i_cdev, struct pmcraid_instance, cdev); in DEF_SCSI_QCMD()
3445 filep->private_data = pinstance; in DEF_SCSI_QCMD()
3458 struct pmcraid_instance *pinstance; in pmcraid_chr_fasync() local
3461 pinstance = filep->private_data; in pmcraid_chr_fasync()
3462 mutex_lock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3463 rc = fasync_helper(fd, filep, mode, &pinstance->aen_queue); in pmcraid_chr_fasync()
3464 mutex_unlock(&pinstance->aen_queue_lock); in pmcraid_chr_fasync()
3569 struct pmcraid_instance *pinstance, in pmcraid_ioctl_passthrough() argument
3590 if (pinstance->ioa_reset_in_progress) { in pmcraid_ioctl_passthrough()
3592 pinstance->reset_wait_q, in pmcraid_ioctl_passthrough()
3593 !pinstance->ioa_reset_in_progress, in pmcraid_ioctl_passthrough()
3603 if (pinstance->ioa_state != IOA_STATE_OPERATIONAL) { in pmcraid_ioctl_passthrough()
3652 cmd = pmcraid_get_free_cmd(pinstance); in pmcraid_ioctl_passthrough()
3687 ioarcb->hrrq_id = atomic_add_return(1, &(pinstance->last_message_id)) % in pmcraid_ioctl_passthrough()
3688 pinstance->num_hrrq; in pmcraid_ioctl_passthrough()
3726 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3728 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3752 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3754 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_ioctl_passthrough()
3839 struct pmcraid_instance *pinstance, in pmcraid_ioctl_driver() argument
3849 pmcraid_reset_bringup(pinstance); in pmcraid_ioctl_driver()
3906 struct pmcraid_instance *pinstance = NULL; in pmcraid_chr_ioctl() local
3926 pinstance = filep->private_data; in pmcraid_chr_ioctl()
3928 if (!pinstance) { in pmcraid_chr_ioctl()
3941 scsi_block_requests(pinstance->host); in pmcraid_chr_ioctl()
3943 retval = pmcraid_ioctl_passthrough(pinstance, cmd, in pmcraid_chr_ioctl()
3947 scsi_unblock_requests(pinstance->host); in pmcraid_chr_ioctl()
3952 retval = pmcraid_ioctl_driver(pinstance, cmd, in pmcraid_chr_ioctl()
3995 struct pmcraid_instance *pinstance = in pmcraid_show_log_level() local
3997 return snprintf(buf, PAGE_SIZE, "%d\n", pinstance->current_log_level); in pmcraid_show_log_level()
4017 struct pmcraid_instance *pinstance; in pmcraid_store_log_level() local
4027 pinstance = (struct pmcraid_instance *)shost->hostdata; in pmcraid_store_log_level()
4028 pinstance->current_log_level = val; in pmcraid_store_log_level()
4083 struct pmcraid_instance *pinstance = in pmcraid_show_adapter_id() local
4085 u32 adapter_id = (pinstance->pdev->bus->number << 8) | in pmcraid_show_adapter_id()
4086 pinstance->pdev->devfn; in pmcraid_show_adapter_id()
4091 adapter_id, MINOR(pinstance->cdev.dev), aen_group); in pmcraid_show_adapter_id()
4147 struct pmcraid_instance *pinstance; in pmcraid_isr_msix() local
4154 pinstance = hrrq_vector->drv_inst; in pmcraid_isr_msix()
4158 intrs_val = pmcraid_read_interrupts(pinstance); in pmcraid_isr_msix()
4160 ((ioread32(pinstance->int_regs.host_ioa_interrupt_reg) in pmcraid_isr_msix()
4169 pinstance->ioa_unit_check = 1; in pmcraid_isr_msix()
4173 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_isr_msix()
4175 pmcraid_initiate_reset(pinstance); in pmcraid_isr_msix()
4177 pinstance->host->host_lock, in pmcraid_isr_msix()
4185 pmcraid_clr_trans_op(pinstance); in pmcraid_isr_msix()
4192 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4193 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_isr_msix()
4199 tasklet_schedule(&(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr_msix()
4216 struct pmcraid_instance *pinstance; in pmcraid_isr() local
4229 pinstance = hrrq_vector->drv_inst; in pmcraid_isr()
4231 intrs = pmcraid_read_interrupts(pinstance); in pmcraid_isr()
4243 pinstance->ioa_unit_check = 1; in pmcraid_isr()
4246 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4250 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4251 spin_lock_irqsave(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4252 pmcraid_initiate_reset(pinstance); in pmcraid_isr()
4253 spin_unlock_irqrestore(pinstance->host->host_lock, lock_flags); in pmcraid_isr()
4260 pmcraid_clr_trans_op(pinstance); in pmcraid_isr()
4263 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4265 pinstance->int_regs.ioa_host_interrupt_clr_reg); in pmcraid_isr()
4268 &(pinstance->isr_tasklet[hrrq_id])); in pmcraid_isr()
4287 struct pmcraid_instance *pinstance; in pmcraid_worker_function() local
4296 pinstance = container_of(workp, struct pmcraid_instance, worker_q); in pmcraid_worker_function()
4298 if (!atomic_read(&pinstance->expose_resources)) in pmcraid_worker_function()
4301 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_worker_function()
4303 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4304 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4312 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_worker_function()
4316 pinstance->host->host_lock, in pmcraid_worker_function()
4321 &pinstance->free_res_q); in pmcraid_worker_function()
4323 &pinstance->resource_lock, in pmcraid_worker_function()
4327 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4332 pinstance->host->host_lock, in pmcraid_worker_function()
4338 list_for_each_entry(res, &pinstance->used_res_q, queue) { in pmcraid_worker_function()
4362 spin_unlock_irqrestore(&pinstance->resource_lock, in pmcraid_worker_function()
4364 scsi_add_device(pinstance->host, bus, target, lun); in pmcraid_worker_function()
4365 spin_lock_irqsave(&pinstance->resource_lock, in pmcraid_worker_function()
4370 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_worker_function()
4384 struct pmcraid_instance *pinstance; in pmcraid_tasklet_function() local
4393 pinstance = hrrq_vector->drv_inst; in pmcraid_tasklet_function()
4395 lockp = &(pinstance->hrrq_lock[id]); in pmcraid_tasklet_function()
4405 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4408 pinstance->host_toggle_bit[id]) { in pmcraid_tasklet_function()
4413 if (pinstance->hrrq_curr[id] < pinstance->hrrq_end[id]) { in pmcraid_tasklet_function()
4414 pinstance->hrrq_curr[id]++; in pmcraid_tasklet_function()
4416 pinstance->hrrq_curr[id] = pinstance->hrrq_start[id]; in pmcraid_tasklet_function()
4417 pinstance->host_toggle_bit[id] ^= 1u; in pmcraid_tasklet_function()
4423 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4427 cmd = pinstance->cmd_list[cmd_index]; in pmcraid_tasklet_function()
4430 spin_lock_irqsave(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4433 spin_unlock_irqrestore(&pinstance->pending_pool_lock, in pmcraid_tasklet_function()
4436 atomic_dec(&pinstance->outstanding_cmds); in pmcraid_tasklet_function()
4439 spin_lock_irqsave(pinstance->host->host_lock, in pmcraid_tasklet_function()
4442 spin_unlock_irqrestore(pinstance->host->host_lock, in pmcraid_tasklet_function()
4449 resp = le32_to_cpu(*(pinstance->hrrq_curr[id])); in pmcraid_tasklet_function()
4466 void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_unregister_interrupt_handler() argument
4468 struct pci_dev *pdev = pinstance->pdev; in pmcraid_unregister_interrupt_handler()
4471 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_unregister_interrupt_handler()
4472 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_unregister_interrupt_handler()
4474 pinstance->interrupt_mode = 0; in pmcraid_unregister_interrupt_handler()
4486 pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance) in pmcraid_register_interrupt_handler() argument
4488 struct pci_dev *pdev = pinstance->pdev; in pmcraid_register_interrupt_handler()
4510 struct pmcraid_isr_param *vec = &pinstance->hrrq_vector[i]; in pmcraid_register_interrupt_handler()
4513 vec->drv_inst = pinstance; in pmcraid_register_interrupt_handler()
4520 pinstance->num_hrrq = num_hrrq; in pmcraid_register_interrupt_handler()
4522 pinstance->interrupt_mode = 1; in pmcraid_register_interrupt_handler()
4524 pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4525 ioread32(pinstance->int_regs.host_ioa_interrupt_reg); in pmcraid_register_interrupt_handler()
4532 free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]); in pmcraid_register_interrupt_handler()
4546 pmcraid_release_cmd_blocks(struct pmcraid_instance *pinstance, int max_index) in pmcraid_release_cmd_blocks() argument
4550 kmem_cache_free(pinstance->cmd_cachep, pinstance->cmd_list[i]); in pmcraid_release_cmd_blocks()
4551 pinstance->cmd_list[i] = NULL; in pmcraid_release_cmd_blocks()
4553 kmem_cache_destroy(pinstance->cmd_cachep); in pmcraid_release_cmd_blocks()
4554 pinstance->cmd_cachep = NULL; in pmcraid_release_cmd_blocks()
4570 struct pmcraid_instance *pinstance, in pmcraid_release_control_blocks() argument
4576 if (pinstance->control_pool == NULL) in pmcraid_release_control_blocks()
4580 dma_pool_free(pinstance->control_pool, in pmcraid_release_control_blocks()
4581 pinstance->cmd_list[i]->ioa_cb, in pmcraid_release_control_blocks()
4582 pinstance->cmd_list[i]->ioa_cb_bus_addr); in pmcraid_release_control_blocks()
4583 pinstance->cmd_list[i]->ioa_cb = NULL; in pmcraid_release_control_blocks()
4584 pinstance->cmd_list[i]->ioa_cb_bus_addr = 0; in pmcraid_release_control_blocks()
4586 dma_pool_destroy(pinstance->control_pool); in pmcraid_release_control_blocks()
4587 pinstance->control_pool = NULL; in pmcraid_release_control_blocks()
4599 static int pmcraid_allocate_cmd_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_cmd_blocks() argument
4603 sprintf(pinstance->cmd_pool_name, "pmcraid_cmd_pool_%d", in pmcraid_allocate_cmd_blocks()
4604 pinstance->host->unique_id); in pmcraid_allocate_cmd_blocks()
4607 pinstance->cmd_cachep = kmem_cache_create( in pmcraid_allocate_cmd_blocks()
4608 pinstance->cmd_pool_name, in pmcraid_allocate_cmd_blocks()
4611 if (!pinstance->cmd_cachep) in pmcraid_allocate_cmd_blocks()
4615 pinstance->cmd_list[i] = in pmcraid_allocate_cmd_blocks()
4616 kmem_cache_alloc(pinstance->cmd_cachep, GFP_KERNEL); in pmcraid_allocate_cmd_blocks()
4617 if (!pinstance->cmd_list[i]) { in pmcraid_allocate_cmd_blocks()
4618 pmcraid_release_cmd_blocks(pinstance, i); in pmcraid_allocate_cmd_blocks()
4635 static int pmcraid_allocate_control_blocks(struct pmcraid_instance *pinstance) in pmcraid_allocate_control_blocks() argument
4639 sprintf(pinstance->ctl_pool_name, "pmcraid_control_pool_%d", in pmcraid_allocate_control_blocks()
4640 pinstance->host->unique_id); in pmcraid_allocate_control_blocks()
4642 pinstance->control_pool = in pmcraid_allocate_control_blocks()
4643 dma_pool_create(pinstance->ctl_pool_name, in pmcraid_allocate_control_blocks()
4644 &pinstance->pdev->dev, in pmcraid_allocate_control_blocks()
4648 if (!pinstance->control_pool) in pmcraid_allocate_control_blocks()
4652 pinstance->cmd_list[i]->ioa_cb = in pmcraid_allocate_control_blocks()
4654 pinstance->control_pool, in pmcraid_allocate_control_blocks()
4656 &(pinstance->cmd_list[i]->ioa_cb_bus_addr)); in pmcraid_allocate_control_blocks()
4658 if (!pinstance->cmd_list[i]->ioa_cb) { in pmcraid_allocate_control_blocks()
4659 pmcraid_release_control_blocks(pinstance, i); in pmcraid_allocate_control_blocks()
4675 pmcraid_release_host_rrqs(struct pmcraid_instance *pinstance, int maxindex) in pmcraid_release_host_rrqs() argument
4680 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_host_rrqs()
4682 pinstance->hrrq_start[i], in pmcraid_release_host_rrqs()
4683 pinstance->hrrq_start_bus_addr[i]); in pmcraid_release_host_rrqs()
4686 pinstance->hrrq_start[i] = NULL; in pmcraid_release_host_rrqs()
4687 pinstance->hrrq_start_bus_addr[i] = 0; in pmcraid_release_host_rrqs()
4688 pinstance->host_toggle_bit[i] = 0; in pmcraid_release_host_rrqs()
4699 static int pmcraid_allocate_host_rrqs(struct pmcraid_instance *pinstance) in pmcraid_allocate_host_rrqs() argument
4705 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_allocate_host_rrqs()
4706 pinstance->hrrq_start[i] = in pmcraid_allocate_host_rrqs()
4707 dma_alloc_coherent(&pinstance->pdev->dev, buffer_size, in pmcraid_allocate_host_rrqs()
4708 &pinstance->hrrq_start_bus_addr[i], in pmcraid_allocate_host_rrqs()
4710 if (!pinstance->hrrq_start[i]) { in pmcraid_allocate_host_rrqs()
4713 pmcraid_release_host_rrqs(pinstance, i); in pmcraid_allocate_host_rrqs()
4717 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_allocate_host_rrqs()
4718 pinstance->hrrq_end[i] = in pmcraid_allocate_host_rrqs()
4719 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_allocate_host_rrqs()
4720 pinstance->host_toggle_bit[i] = 1; in pmcraid_allocate_host_rrqs()
4721 spin_lock_init(&pinstance->hrrq_lock[i]); in pmcraid_allocate_host_rrqs()
4734 static void pmcraid_release_hcams(struct pmcraid_instance *pinstance) in pmcraid_release_hcams() argument
4736 if (pinstance->ccn.msg != NULL) { in pmcraid_release_hcams()
4737 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_hcams()
4740 pinstance->ccn.msg, in pmcraid_release_hcams()
4741 pinstance->ccn.baddr); in pmcraid_release_hcams()
4743 pinstance->ccn.msg = NULL; in pmcraid_release_hcams()
4744 pinstance->ccn.hcam = NULL; in pmcraid_release_hcams()
4745 pinstance->ccn.baddr = 0; in pmcraid_release_hcams()
4748 if (pinstance->ldn.msg != NULL) { in pmcraid_release_hcams()
4749 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_hcams()
4752 pinstance->ldn.msg, in pmcraid_release_hcams()
4753 pinstance->ldn.baddr); in pmcraid_release_hcams()
4755 pinstance->ldn.msg = NULL; in pmcraid_release_hcams()
4756 pinstance->ldn.hcam = NULL; in pmcraid_release_hcams()
4757 pinstance->ldn.baddr = 0; in pmcraid_release_hcams()
4768 static int pmcraid_allocate_hcams(struct pmcraid_instance *pinstance) in pmcraid_allocate_hcams() argument
4770 pinstance->ccn.msg = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_hcams()
4773 &pinstance->ccn.baddr, GFP_KERNEL); in pmcraid_allocate_hcams()
4775 pinstance->ldn.msg = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_hcams()
4778 &pinstance->ldn.baddr, GFP_KERNEL); in pmcraid_allocate_hcams()
4780 if (pinstance->ldn.msg == NULL || pinstance->ccn.msg == NULL) { in pmcraid_allocate_hcams()
4781 pmcraid_release_hcams(pinstance); in pmcraid_allocate_hcams()
4783 pinstance->ccn.hcam = in pmcraid_allocate_hcams()
4784 (void *)pinstance->ccn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4785 pinstance->ldn.hcam = in pmcraid_allocate_hcams()
4786 (void *)pinstance->ldn.msg + PMCRAID_AEN_HDR_SIZE; in pmcraid_allocate_hcams()
4788 atomic_set(&pinstance->ccn.ignore, 0); in pmcraid_allocate_hcams()
4789 atomic_set(&pinstance->ldn.ignore, 0); in pmcraid_allocate_hcams()
4792 return (pinstance->ldn.msg == NULL) ? -ENOMEM : 0; in pmcraid_allocate_hcams()
4802 static void pmcraid_release_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_config_buffers() argument
4804 if (pinstance->cfg_table != NULL && in pmcraid_release_config_buffers()
4805 pinstance->cfg_table_bus_addr != 0) { in pmcraid_release_config_buffers()
4806 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_config_buffers()
4808 pinstance->cfg_table, in pmcraid_release_config_buffers()
4809 pinstance->cfg_table_bus_addr); in pmcraid_release_config_buffers()
4810 pinstance->cfg_table = NULL; in pmcraid_release_config_buffers()
4811 pinstance->cfg_table_bus_addr = 0; in pmcraid_release_config_buffers()
4814 if (pinstance->res_entries != NULL) { in pmcraid_release_config_buffers()
4818 list_del(&pinstance->res_entries[i].queue); in pmcraid_release_config_buffers()
4819 kfree(pinstance->res_entries); in pmcraid_release_config_buffers()
4820 pinstance->res_entries = NULL; in pmcraid_release_config_buffers()
4823 pmcraid_release_hcams(pinstance); in pmcraid_release_config_buffers()
4833 static int pmcraid_allocate_config_buffers(struct pmcraid_instance *pinstance) in pmcraid_allocate_config_buffers() argument
4837 pinstance->res_entries = in pmcraid_allocate_config_buffers()
4842 if (NULL == pinstance->res_entries) { in pmcraid_allocate_config_buffers()
4848 list_add_tail(&pinstance->res_entries[i].queue, in pmcraid_allocate_config_buffers()
4849 &pinstance->free_res_q); in pmcraid_allocate_config_buffers()
4851 pinstance->cfg_table = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_allocate_config_buffers()
4853 &pinstance->cfg_table_bus_addr, in pmcraid_allocate_config_buffers()
4856 if (NULL == pinstance->cfg_table) { in pmcraid_allocate_config_buffers()
4858 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4862 if (pmcraid_allocate_hcams(pinstance)) { in pmcraid_allocate_config_buffers()
4864 pmcraid_release_config_buffers(pinstance); in pmcraid_allocate_config_buffers()
4879 static void pmcraid_init_tasklets(struct pmcraid_instance *pinstance) in pmcraid_init_tasklets() argument
4882 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_init_tasklets()
4883 tasklet_init(&pinstance->isr_tasklet[i], in pmcraid_init_tasklets()
4885 (unsigned long)&pinstance->hrrq_vector[i]); in pmcraid_init_tasklets()
4896 static void pmcraid_kill_tasklets(struct pmcraid_instance *pinstance) in pmcraid_kill_tasklets() argument
4899 for (i = 0; i < pinstance->num_hrrq; i++) in pmcraid_kill_tasklets()
4900 tasklet_kill(&pinstance->isr_tasklet[i]); in pmcraid_kill_tasklets()
4911 static void pmcraid_release_buffers(struct pmcraid_instance *pinstance) in pmcraid_release_buffers() argument
4913 pmcraid_release_config_buffers(pinstance); in pmcraid_release_buffers()
4914 pmcraid_release_control_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4915 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_release_buffers()
4916 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_release_buffers()
4918 if (pinstance->inq_data != NULL) { in pmcraid_release_buffers()
4919 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_buffers()
4921 pinstance->inq_data, in pmcraid_release_buffers()
4922 pinstance->inq_data_baddr); in pmcraid_release_buffers()
4924 pinstance->inq_data = NULL; in pmcraid_release_buffers()
4925 pinstance->inq_data_baddr = 0; in pmcraid_release_buffers()
4928 if (pinstance->timestamp_data != NULL) { in pmcraid_release_buffers()
4929 dma_free_coherent(&pinstance->pdev->dev, in pmcraid_release_buffers()
4931 pinstance->timestamp_data, in pmcraid_release_buffers()
4932 pinstance->timestamp_data_baddr); in pmcraid_release_buffers()
4934 pinstance->timestamp_data = NULL; in pmcraid_release_buffers()
4935 pinstance->timestamp_data_baddr = 0; in pmcraid_release_buffers()
4952 static int pmcraid_init_buffers(struct pmcraid_instance *pinstance) in pmcraid_init_buffers() argument
4956 if (pmcraid_allocate_host_rrqs(pinstance)) { in pmcraid_init_buffers()
4958 pinstance->num_hrrq); in pmcraid_init_buffers()
4962 if (pmcraid_allocate_config_buffers(pinstance)) { in pmcraid_init_buffers()
4964 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4968 if (pmcraid_allocate_cmd_blocks(pinstance)) { in pmcraid_init_buffers()
4970 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
4971 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4975 if (pmcraid_allocate_control_blocks(pinstance)) { in pmcraid_init_buffers()
4977 pmcraid_release_config_buffers(pinstance); in pmcraid_init_buffers()
4978 pmcraid_release_cmd_blocks(pinstance, PMCRAID_MAX_CMD); in pmcraid_init_buffers()
4979 pmcraid_release_host_rrqs(pinstance, pinstance->num_hrrq); in pmcraid_init_buffers()
4984 pinstance->inq_data = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_init_buffers()
4986 &pinstance->inq_data_baddr, GFP_KERNEL); in pmcraid_init_buffers()
4987 if (pinstance->inq_data == NULL) { in pmcraid_init_buffers()
4989 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
4994 pinstance->timestamp_data = dma_alloc_coherent(&pinstance->pdev->dev, in pmcraid_init_buffers()
4996 &pinstance->timestamp_data_baddr, in pmcraid_init_buffers()
4998 if (pinstance->timestamp_data == NULL) { in pmcraid_init_buffers()
5001 pmcraid_release_buffers(pinstance); in pmcraid_init_buffers()
5011 struct pmcraid_cmd *cmdp = pinstance->cmd_list[i]; in pmcraid_init_buffers()
5013 cmdp->drv_inst = pinstance; in pmcraid_init_buffers()
5014 list_add_tail(&cmdp->free_list, &pinstance->free_cmd_pool); in pmcraid_init_buffers()
5026 static void pmcraid_reinit_buffers(struct pmcraid_instance *pinstance) in pmcraid_reinit_buffers() argument
5031 for (i = 0; i < pinstance->num_hrrq; i++) { in pmcraid_reinit_buffers()
5032 memset(pinstance->hrrq_start[i], 0, buffer_size); in pmcraid_reinit_buffers()
5033 pinstance->hrrq_curr[i] = pinstance->hrrq_start[i]; in pmcraid_reinit_buffers()
5034 pinstance->hrrq_end[i] = in pmcraid_reinit_buffers()
5035 pinstance->hrrq_start[i] + PMCRAID_MAX_CMD - 1; in pmcraid_reinit_buffers()
5036 pinstance->host_toggle_bit[i] = 1; in pmcraid_reinit_buffers()
5052 struct pmcraid_instance *pinstance = in pmcraid_init_instance() local
5055 pinstance->host = host; in pmcraid_init_instance()
5056 pinstance->pdev = pdev; in pmcraid_init_instance()
5059 pinstance->mapped_dma_addr = mapped_pci_addr; in pmcraid_init_instance()
5063 struct pmcraid_chip_details *chip_cfg = pinstance->chip_cfg; in pmcraid_init_instance()
5064 struct pmcraid_interrupts *pint_regs = &pinstance->int_regs; in pmcraid_init_instance()
5066 pinstance->ioarrin = mapped_pci_addr + chip_cfg->ioarrin; in pmcraid_init_instance()
5082 pinstance->mailbox = mapped_pci_addr + chip_cfg->mailbox; in pmcraid_init_instance()
5083 pinstance->ioa_status = mapped_pci_addr + chip_cfg->ioastatus; in pmcraid_init_instance()
5092 pinstance->ioa_reset_attempts = 0; in pmcraid_init_instance()
5093 init_waitqueue_head(&pinstance->reset_wait_q); in pmcraid_init_instance()
5095 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_init_instance()
5096 atomic_set(&pinstance->last_message_id, 0); in pmcraid_init_instance()
5097 atomic_set(&pinstance->expose_resources, 0); in pmcraid_init_instance()
5099 INIT_LIST_HEAD(&pinstance->free_res_q); in pmcraid_init_instance()
5100 INIT_LIST_HEAD(&pinstance->used_res_q); in pmcraid_init_instance()
5101 INIT_LIST_HEAD(&pinstance->free_cmd_pool); in pmcraid_init_instance()
5102 INIT_LIST_HEAD(&pinstance->pending_cmd_pool); in pmcraid_init_instance()
5104 spin_lock_init(&pinstance->free_pool_lock); in pmcraid_init_instance()
5105 spin_lock_init(&pinstance->pending_pool_lock); in pmcraid_init_instance()
5106 spin_lock_init(&pinstance->resource_lock); in pmcraid_init_instance()
5107 mutex_init(&pinstance->aen_queue_lock); in pmcraid_init_instance()
5110 INIT_WORK(&pinstance->worker_q, pmcraid_worker_function); in pmcraid_init_instance()
5113 pinstance->current_log_level = pmcraid_log_level; in pmcraid_init_instance()
5116 pinstance->ioa_state = IOA_STATE_UNKNOWN; in pmcraid_init_instance()
5117 pinstance->reset_cmd = NULL; in pmcraid_init_instance()
5132 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_shutdown() local
5133 pmcraid_reset_bringdown(pinstance); in pmcraid_shutdown()
5165 static int pmcraid_setup_chrdev(struct pmcraid_instance *pinstance) in pmcraid_setup_chrdev() argument
5171 cdev_init(&pinstance->cdev, &pmcraid_fops); in pmcraid_setup_chrdev()
5172 pinstance->cdev.owner = THIS_MODULE; in pmcraid_setup_chrdev()
5174 error = cdev_add(&pinstance->cdev, MKDEV(pmcraid_major, minor), 1); in pmcraid_setup_chrdev()
5192 static void pmcraid_release_chrdev(struct pmcraid_instance *pinstance) in pmcraid_release_chrdev() argument
5194 pmcraid_release_minor(MINOR(pinstance->cdev.dev)); in pmcraid_release_chrdev()
5196 MKDEV(pmcraid_major, MINOR(pinstance->cdev.dev))); in pmcraid_release_chrdev()
5197 cdev_del(&pinstance->cdev); in pmcraid_release_chrdev()
5209 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_remove() local
5212 pmcraid_release_chrdev(pinstance); in pmcraid_remove()
5215 scsi_remove_host(pinstance->host); in pmcraid_remove()
5218 scsi_block_requests(pinstance->host); in pmcraid_remove()
5223 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_remove()
5224 flush_work(&pinstance->worker_q); in pmcraid_remove()
5226 pmcraid_kill_tasklets(pinstance); in pmcraid_remove()
5227 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_remove()
5228 pmcraid_release_buffers(pinstance); in pmcraid_remove()
5229 iounmap(pinstance->mapped_dma_addr); in pmcraid_remove()
5231 scsi_host_put(pinstance->host); in pmcraid_remove()
5247 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_suspend() local
5250 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_suspend()
5251 pmcraid_kill_tasklets(pinstance); in pmcraid_suspend()
5252 pci_set_drvdata(pinstance->pdev, pinstance); in pmcraid_suspend()
5253 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_suspend()
5269 struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); in pmcraid_resume() local
5270 struct Scsi_Host *host = pinstance->host; in pmcraid_resume()
5298 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5299 atomic_set(&pinstance->outstanding_cmds, 0); in pmcraid_resume()
5300 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_resume()
5309 pmcraid_init_tasklets(pinstance); in pmcraid_resume()
5310 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_resume()
5315 pinstance->ioa_hard_reset = 1; in pmcraid_resume()
5320 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_resume()
5329 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_resume()
5330 pmcraid_kill_tasklets(pinstance); in pmcraid_resume()
5331 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_resume()
5356 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_complete_ioa_reset() local
5359 spin_lock_irqsave(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5361 spin_unlock_irqrestore(pinstance->host->host_lock, flags); in pmcraid_complete_ioa_reset()
5362 scsi_unblock_requests(pinstance->host); in pmcraid_complete_ioa_reset()
5363 schedule_work(&pinstance->worker_q); in pmcraid_complete_ioa_reset()
5417 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_set_timestamp() local
5425 pinstance->timestamp_data->timestamp[0] = (__u8)(timestamp); in pmcraid_set_timestamp()
5426 pinstance->timestamp_data->timestamp[1] = (__u8)((timestamp) >> 8); in pmcraid_set_timestamp()
5427 pinstance->timestamp_data->timestamp[2] = (__u8)((timestamp) >> 16); in pmcraid_set_timestamp()
5428 pinstance->timestamp_data->timestamp[3] = (__u8)((timestamp) >> 24); in pmcraid_set_timestamp()
5429 pinstance->timestamp_data->timestamp[4] = (__u8)((timestamp) >> 32); in pmcraid_set_timestamp()
5430 pinstance->timestamp_data->timestamp[5] = (__u8)((timestamp) >> 40); in pmcraid_set_timestamp()
5451 ioadl->address = cpu_to_le64(pinstance->timestamp_data_baddr); in pmcraid_set_timestamp()
5454 if (!pinstance->timestamp_error) { in pmcraid_set_timestamp()
5455 pinstance->timestamp_error = 0; in pmcraid_set_timestamp()
5480 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_init_res_table() local
5488 if (pinstance->cfg_table->flags & MICROCODE_UPDATE_REQUIRED) in pmcraid_init_res_table()
5491 fw_version = be16_to_cpu(pinstance->inq_data->fw_version); in pmcraid_init_res_table()
5497 spin_lock_irqsave(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5499 list_for_each_entry_safe(res, temp, &pinstance->used_res_q, queue) in pmcraid_init_res_table()
5502 for (i = 0; i < le16_to_cpu(pinstance->cfg_table->num_entries); i++) { in pmcraid_init_res_table()
5503 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_init_res_table()
5505 cfgte = &pinstance->cfg_table->entries[i]; in pmcraid_init_res_table()
5508 &pinstance->cfg_table->entries_ext[i]; in pmcraid_init_res_table()
5523 &pinstance->used_res_q); in pmcraid_init_res_table()
5532 if (list_empty(&pinstance->free_res_q)) { in pmcraid_init_res_table()
5538 res = list_entry(pinstance->free_res_q.next, in pmcraid_init_res_table()
5544 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5552 pinstance->config_table_entry_size); in pmcraid_init_res_table()
5569 list_move_tail(&res->queue, &pinstance->used_res_q); in pmcraid_init_res_table()
5571 list_move_tail(&res->queue, &pinstance->free_res_q); in pmcraid_init_res_table()
5576 spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags); in pmcraid_init_res_table()
5594 struct pmcraid_instance *pinstance = cmd->drv_inst; in pmcraid_querycfg() local
5597 if (be16_to_cpu(pinstance->inq_data->fw_version) <= in pmcraid_querycfg()
5599 pinstance->config_table_entry_size = in pmcraid_querycfg()
5602 pinstance->config_table_entry_size = in pmcraid_querycfg()
5628 ioadl->address = cpu_to_le64(pinstance->cfg_table_bus_addr); in pmcraid_querycfg()
5648 struct pmcraid_instance *pinstance; in pmcraid_probe() local
5730 pinstance = (struct pmcraid_instance *)host->hostdata; in pmcraid_probe()
5731 memset(pinstance, 0, sizeof(*pinstance)); in pmcraid_probe()
5733 pinstance->chip_cfg = in pmcraid_probe()
5743 pci_set_drvdata(pdev, pinstance); in pmcraid_probe()
5746 rc = pci_save_state(pinstance->pdev); in pmcraid_probe()
5753 pmcraid_disable_interrupts(pinstance, ~0); in pmcraid_probe()
5755 rc = pmcraid_register_interrupt_handler(pinstance); in pmcraid_probe()
5762 pmcraid_init_tasklets(pinstance); in pmcraid_probe()
5765 rc = pmcraid_init_buffers(pinstance); in pmcraid_probe()
5773 pmcraid_reset_type(pinstance); in pmcraid_probe()
5775 pmcraid_enable_interrupts(pinstance, PMCRAID_PCI_INTERRUPTS); in pmcraid_probe()
5781 if (pmcraid_reset_bringup(pinstance)) { in pmcraid_probe()
5788 rc = scsi_add_host(pinstance->host, &pdev->dev); in pmcraid_probe()
5794 scsi_scan_host(pinstance->host); in pmcraid_probe()
5796 rc = pmcraid_setup_chrdev(pinstance); in pmcraid_probe()
5807 atomic_set(&pinstance->expose_resources, 1); in pmcraid_probe()
5808 schedule_work(&pinstance->worker_q); in pmcraid_probe()
5815 pmcraid_release_buffers(pinstance); in pmcraid_probe()
5818 pmcraid_kill_tasklets(pinstance); in pmcraid_probe()
5819 pmcraid_unregister_interrupt_handler(pinstance); in pmcraid_probe()