Lines Matching full:adapter
143 pvscsi_dev(const struct pvscsi_adapter *adapter) in pvscsi_dev() argument
145 return &(adapter->dev->dev); in pvscsi_dev()
149 pvscsi_find_context(const struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) in pvscsi_find_context() argument
153 end = &adapter->cmd_map[adapter->req_depth]; in pvscsi_find_context()
154 for (ctx = adapter->cmd_map; ctx < end; ctx++) in pvscsi_find_context()
162 pvscsi_acquire_context(struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) in pvscsi_acquire_context() argument
166 if (list_empty(&adapter->cmd_pool)) in pvscsi_acquire_context()
169 ctx = list_first_entry(&adapter->cmd_pool, struct pvscsi_ctx, list); in pvscsi_acquire_context()
176 static void pvscsi_release_context(struct pvscsi_adapter *adapter, in pvscsi_release_context() argument
180 list_add(&ctx->list, &adapter->cmd_pool); in pvscsi_release_context()
188 static u64 pvscsi_map_context(const struct pvscsi_adapter *adapter, in pvscsi_map_context() argument
191 return ctx - adapter->cmd_map + 1; in pvscsi_map_context()
195 pvscsi_get_context(const struct pvscsi_adapter *adapter, u64 context) in pvscsi_get_context() argument
197 return &adapter->cmd_map[context - 1]; in pvscsi_get_context()
200 static void pvscsi_reg_write(const struct pvscsi_adapter *adapter, in pvscsi_reg_write() argument
203 writel(val, adapter->mmioBase + offset); in pvscsi_reg_write()
206 static u32 pvscsi_reg_read(const struct pvscsi_adapter *adapter, u32 offset) in pvscsi_reg_read() argument
208 return readl(adapter->mmioBase + offset); in pvscsi_reg_read()
211 static u32 pvscsi_read_intr_status(const struct pvscsi_adapter *adapter) in pvscsi_read_intr_status() argument
213 return pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_INTR_STATUS); in pvscsi_read_intr_status()
216 static void pvscsi_write_intr_status(const struct pvscsi_adapter *adapter, in pvscsi_write_intr_status() argument
219 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_STATUS, val); in pvscsi_write_intr_status()
222 static void pvscsi_unmask_intr(const struct pvscsi_adapter *adapter) in pvscsi_unmask_intr() argument
227 if (adapter->use_msg) in pvscsi_unmask_intr()
230 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, intr_bits); in pvscsi_unmask_intr()
233 static void pvscsi_mask_intr(const struct pvscsi_adapter *adapter) in pvscsi_mask_intr() argument
235 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, 0); in pvscsi_mask_intr()
238 static void pvscsi_write_cmd_desc(const struct pvscsi_adapter *adapter, in pvscsi_write_cmd_desc() argument
245 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, cmd); in pvscsi_write_cmd_desc()
247 pvscsi_reg_write(adapter, in pvscsi_write_cmd_desc()
251 static void pvscsi_abort_cmd(const struct pvscsi_adapter *adapter, in pvscsi_abort_cmd() argument
257 cmd.context = pvscsi_map_context(adapter, ctx); in pvscsi_abort_cmd()
259 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ABORT_CMD, &cmd, sizeof(cmd)); in pvscsi_abort_cmd()
262 static void pvscsi_kick_rw_io(const struct pvscsi_adapter *adapter) in pvscsi_kick_rw_io() argument
264 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_RW_IO, 0); in pvscsi_kick_rw_io()
267 static void pvscsi_process_request_ring(const struct pvscsi_adapter *adapter) in pvscsi_process_request_ring() argument
269 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_NON_RW_IO, 0); in pvscsi_process_request_ring()
280 static void pvscsi_kick_io(const struct pvscsi_adapter *adapter, in pvscsi_kick_io() argument
284 pvscsi_kick_rw_io(adapter); in pvscsi_kick_io()
286 pvscsi_process_request_ring(adapter); in pvscsi_kick_io()
289 static void ll_adapter_reset(const struct pvscsi_adapter *adapter) in ll_adapter_reset() argument
291 dev_dbg(pvscsi_dev(adapter), "Adapter Reset on %p\n", adapter); in ll_adapter_reset()
293 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ADAPTER_RESET, NULL, 0); in ll_adapter_reset()
296 static void ll_bus_reset(const struct pvscsi_adapter *adapter) in ll_bus_reset() argument
298 dev_dbg(pvscsi_dev(adapter), "Reseting bus on %p\n", adapter); in ll_bus_reset()
300 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_BUS, NULL, 0); in ll_bus_reset()
303 static void ll_device_reset(const struct pvscsi_adapter *adapter, u32 target) in ll_device_reset() argument
307 dev_dbg(pvscsi_dev(adapter), "Reseting device: target=%u\n", target); in ll_device_reset()
311 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_DEVICE, in ll_device_reset()
335 static void pvscsi_map_buffers(struct pvscsi_adapter *adapter, in pvscsi_map_buffers() argument
356 ctx->sglPA = pci_map_single(adapter->dev, ctx->sgl, in pvscsi_map_buffers()
366 ctx->dataPA = pci_map_single(adapter->dev, sg, bufflen, in pvscsi_map_buffers()
372 static void pvscsi_unmap_buffers(const struct pvscsi_adapter *adapter, in pvscsi_unmap_buffers() argument
387 pci_unmap_single(adapter->dev, ctx->sglPA, in pvscsi_unmap_buffers()
392 pci_unmap_single(adapter->dev, ctx->dataPA, bufflen, in pvscsi_unmap_buffers()
396 pci_unmap_single(adapter->dev, ctx->sensePA, in pvscsi_unmap_buffers()
400 static int __devinit pvscsi_allocate_rings(struct pvscsi_adapter *adapter) in pvscsi_allocate_rings() argument
402 adapter->rings_state = pci_alloc_consistent(adapter->dev, PAGE_SIZE, in pvscsi_allocate_rings()
403 &adapter->ringStatePA); in pvscsi_allocate_rings()
404 if (!adapter->rings_state) in pvscsi_allocate_rings()
407 adapter->req_pages = min(PVSCSI_MAX_NUM_PAGES_REQ_RING, in pvscsi_allocate_rings()
409 adapter->req_depth = adapter->req_pages in pvscsi_allocate_rings()
411 adapter->req_ring = pci_alloc_consistent(adapter->dev, in pvscsi_allocate_rings()
412 adapter->req_pages * PAGE_SIZE, in pvscsi_allocate_rings()
413 &adapter->reqRingPA); in pvscsi_allocate_rings()
414 if (!adapter->req_ring) in pvscsi_allocate_rings()
417 adapter->cmp_pages = min(PVSCSI_MAX_NUM_PAGES_CMP_RING, in pvscsi_allocate_rings()
419 adapter->cmp_ring = pci_alloc_consistent(adapter->dev, in pvscsi_allocate_rings()
420 adapter->cmp_pages * PAGE_SIZE, in pvscsi_allocate_rings()
421 &adapter->cmpRingPA); in pvscsi_allocate_rings()
422 if (!adapter->cmp_ring) in pvscsi_allocate_rings()
425 BUG_ON(!IS_ALIGNED(adapter->ringStatePA, PAGE_SIZE)); in pvscsi_allocate_rings()
426 BUG_ON(!IS_ALIGNED(adapter->reqRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
427 BUG_ON(!IS_ALIGNED(adapter->cmpRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
429 if (!adapter->use_msg) in pvscsi_allocate_rings()
432 adapter->msg_pages = min(PVSCSI_MAX_NUM_PAGES_MSG_RING, in pvscsi_allocate_rings()
434 adapter->msg_ring = pci_alloc_consistent(adapter->dev, in pvscsi_allocate_rings()
435 adapter->msg_pages * PAGE_SIZE, in pvscsi_allocate_rings()
436 &adapter->msgRingPA); in pvscsi_allocate_rings()
437 if (!adapter->msg_ring) in pvscsi_allocate_rings()
439 BUG_ON(!IS_ALIGNED(adapter->msgRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
444 static void pvscsi_setup_all_rings(const struct pvscsi_adapter *adapter) in pvscsi_setup_all_rings() argument
450 cmd.ringsStatePPN = adapter->ringStatePA >> PAGE_SHIFT; in pvscsi_setup_all_rings()
451 cmd.reqRingNumPages = adapter->req_pages; in pvscsi_setup_all_rings()
452 cmd.cmpRingNumPages = adapter->cmp_pages; in pvscsi_setup_all_rings()
454 base = adapter->reqRingPA; in pvscsi_setup_all_rings()
455 for (i = 0; i < adapter->req_pages; i++) { in pvscsi_setup_all_rings()
460 base = adapter->cmpRingPA; in pvscsi_setup_all_rings()
461 for (i = 0; i < adapter->cmp_pages; i++) { in pvscsi_setup_all_rings()
466 memset(adapter->rings_state, 0, PAGE_SIZE); in pvscsi_setup_all_rings()
467 memset(adapter->req_ring, 0, adapter->req_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
468 memset(adapter->cmp_ring, 0, adapter->cmp_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
470 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_RINGS, in pvscsi_setup_all_rings()
473 if (adapter->use_msg) { in pvscsi_setup_all_rings()
476 cmd_msg.numPages = adapter->msg_pages; in pvscsi_setup_all_rings()
478 base = adapter->msgRingPA; in pvscsi_setup_all_rings()
479 for (i = 0; i < adapter->msg_pages; i++) { in pvscsi_setup_all_rings()
483 memset(adapter->msg_ring, 0, adapter->msg_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
485 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_MSG_RING, in pvscsi_setup_all_rings()
494 static void pvscsi_complete_request(struct pvscsi_adapter *adapter, in pvscsi_complete_request() argument
502 ctx = pvscsi_get_context(adapter, e->context); in pvscsi_complete_request()
504 pvscsi_unmap_buffers(adapter, ctx); in pvscsi_complete_request()
505 pvscsi_release_context(adapter, ctx); in pvscsi_complete_request()
588 static void pvscsi_process_completion_ring(struct pvscsi_adapter *adapter) in pvscsi_process_completion_ring() argument
590 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_completion_ring()
591 struct PVSCSIRingCmpDesc *ring = adapter->cmp_ring; in pvscsi_process_completion_ring()
604 pvscsi_complete_request(adapter, e); in pvscsi_process_completion_ring()
619 static int pvscsi_queue_ring(struct pvscsi_adapter *adapter, in pvscsi_queue_ring() argument
627 s = adapter->rings_state; in pvscsi_queue_ring()
646 e = adapter->req_ring + (s->reqProdIdx & MASK(req_entries)); in pvscsi_queue_ring()
654 ctx->sensePA = pci_map_single(adapter->dev, cmd->sense_buffer, in pvscsi_queue_ring()
682 pvscsi_map_buffers(adapter, ctx, cmd, e); in pvscsi_queue_ring()
684 e->context = pvscsi_map_context(adapter, ctx); in pvscsi_queue_ring()
696 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_queue_lck() local
700 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_queue_lck()
702 ctx = pvscsi_acquire_context(adapter, cmd); in pvscsi_queue_lck()
703 if (!ctx || pvscsi_queue_ring(adapter, ctx, cmd) != 0) { in pvscsi_queue_lck()
705 pvscsi_release_context(adapter, ctx); in pvscsi_queue_lck()
706 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_queue_lck()
715 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_queue_lck()
717 pvscsi_kick_io(adapter, cmd->cmnd[0]); in pvscsi_queue_lck()
726 struct pvscsi_adapter *adapter = shost_priv(cmd->device->host); in DEF_SCSI_QCMD() local
731 adapter->host->host_no, cmd); in DEF_SCSI_QCMD()
733 spin_lock_irqsave(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
739 pvscsi_process_completion_ring(adapter); in DEF_SCSI_QCMD()
745 ctx = pvscsi_find_context(adapter, cmd); in DEF_SCSI_QCMD()
751 pvscsi_abort_cmd(adapter, ctx); in DEF_SCSI_QCMD()
753 pvscsi_process_completion_ring(adapter); in DEF_SCSI_QCMD()
756 spin_unlock_irqrestore(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
766 static void pvscsi_reset_all(struct pvscsi_adapter *adapter) in pvscsi_reset_all() argument
770 for (i = 0; i < adapter->req_depth; i++) { in pvscsi_reset_all()
771 struct pvscsi_ctx *ctx = &adapter->cmd_map[i]; in pvscsi_reset_all()
776 pvscsi_unmap_buffers(adapter, ctx); in pvscsi_reset_all()
777 pvscsi_release_context(adapter, ctx); in pvscsi_reset_all()
787 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_host_reset() local
793 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_host_reset()
795 use_msg = adapter->use_msg; in pvscsi_host_reset()
798 adapter->use_msg = 0; in pvscsi_host_reset()
799 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_host_reset()
805 flush_workqueue(adapter->workqueue); in pvscsi_host_reset()
806 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_host_reset()
815 pvscsi_process_request_ring(adapter); in pvscsi_host_reset()
817 ll_adapter_reset(adapter); in pvscsi_host_reset()
820 * Now process any completions. Note we do this AFTER adapter reset, in pvscsi_host_reset()
826 pvscsi_process_completion_ring(adapter); in pvscsi_host_reset()
828 pvscsi_reset_all(adapter); in pvscsi_host_reset()
829 adapter->use_msg = use_msg; in pvscsi_host_reset()
830 pvscsi_setup_all_rings(adapter); in pvscsi_host_reset()
831 pvscsi_unmask_intr(adapter); in pvscsi_host_reset()
833 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_host_reset()
841 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_bus_reset() local
852 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_bus_reset()
854 pvscsi_process_request_ring(adapter); in pvscsi_bus_reset()
855 ll_bus_reset(adapter); in pvscsi_bus_reset()
856 pvscsi_process_completion_ring(adapter); in pvscsi_bus_reset()
858 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_bus_reset()
866 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_device_reset() local
877 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_device_reset()
879 pvscsi_process_request_ring(adapter); in pvscsi_device_reset()
880 ll_device_reset(adapter, cmd->device->id); in pvscsi_device_reset()
881 pvscsi_process_completion_ring(adapter); in pvscsi_device_reset()
883 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_device_reset()
892 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_info() local
895 sprintf(buf, "VMware PVSCSI storage adapter rev %d, req/cmp/msg rings: " in pvscsi_info()
896 "%u/%u/%u pages, cmd_per_lun=%u", adapter->rev, in pvscsi_info()
897 adapter->req_pages, adapter->cmp_pages, adapter->msg_pages, in pvscsi_info()
905 .name = "VMware PVSCSI Host Adapter",
920 static void pvscsi_process_msg(const struct pvscsi_adapter *adapter, in pvscsi_process_msg() argument
923 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_msg()
924 struct Scsi_Host *host = adapter->host; in pvscsi_process_msg()
949 scsi_add_device(adapter->host, desc->bus, in pvscsi_process_msg()
978 static int pvscsi_msg_pending(const struct pvscsi_adapter *adapter) in pvscsi_msg_pending() argument
980 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_msg_pending()
985 static void pvscsi_process_msg_ring(const struct pvscsi_adapter *adapter) in pvscsi_process_msg_ring() argument
987 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_msg_ring()
988 struct PVSCSIRingMsgDesc *ring = adapter->msg_ring; in pvscsi_process_msg_ring()
991 while (pvscsi_msg_pending(adapter)) { in pvscsi_process_msg_ring()
996 pvscsi_process_msg(adapter, e); in pvscsi_process_msg_ring()
1004 struct pvscsi_adapter *adapter; in pvscsi_msg_workqueue_handler() local
1006 adapter = container_of(data, struct pvscsi_adapter, work); in pvscsi_msg_workqueue_handler()
1008 pvscsi_process_msg_ring(adapter); in pvscsi_msg_workqueue_handler()
1011 static int pvscsi_setup_msg_workqueue(struct pvscsi_adapter *adapter) in pvscsi_setup_msg_workqueue() argument
1018 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, in pvscsi_setup_msg_workqueue()
1021 if (pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_COMMAND_STATUS) == -1) in pvscsi_setup_msg_workqueue()
1025 "vmw_pvscsi_wq_%u", adapter->host->host_no); in pvscsi_setup_msg_workqueue()
1027 adapter->workqueue = create_singlethread_workqueue(name); in pvscsi_setup_msg_workqueue()
1028 if (!adapter->workqueue) { in pvscsi_setup_msg_workqueue()
1032 INIT_WORK(&adapter->work, pvscsi_msg_workqueue_handler); in pvscsi_setup_msg_workqueue()
1039 struct pvscsi_adapter *adapter = devp; in pvscsi_isr() local
1042 if (adapter->use_msi || adapter->use_msix) in pvscsi_isr()
1045 u32 val = pvscsi_read_intr_status(adapter); in pvscsi_isr()
1054 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_isr()
1056 pvscsi_process_completion_ring(adapter); in pvscsi_isr()
1057 if (adapter->use_msg && pvscsi_msg_pending(adapter)) in pvscsi_isr()
1058 queue_work(adapter->workqueue, &adapter->work); in pvscsi_isr()
1060 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_isr()
1066 static void pvscsi_free_sgls(const struct pvscsi_adapter *adapter) in pvscsi_free_sgls() argument
1068 struct pvscsi_ctx *ctx = adapter->cmd_map; in pvscsi_free_sgls()
1071 for (i = 0; i < adapter->req_depth; ++i, ++ctx) in pvscsi_free_sgls()
1075 static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter, in pvscsi_setup_msix() argument
1081 ret = pci_enable_msix(adapter->dev, &entry, 1); in pvscsi_setup_msix()
1090 static void pvscsi_shutdown_intr(struct pvscsi_adapter *adapter) in pvscsi_shutdown_intr() argument
1092 if (adapter->irq) { in pvscsi_shutdown_intr()
1093 free_irq(adapter->irq, adapter); in pvscsi_shutdown_intr()
1094 adapter->irq = 0; in pvscsi_shutdown_intr()
1096 if (adapter->use_msi) { in pvscsi_shutdown_intr()
1097 pci_disable_msi(adapter->dev); in pvscsi_shutdown_intr()
1098 adapter->use_msi = 0; in pvscsi_shutdown_intr()
1099 } else if (adapter->use_msix) { in pvscsi_shutdown_intr()
1100 pci_disable_msix(adapter->dev); in pvscsi_shutdown_intr()
1101 adapter->use_msix = 0; in pvscsi_shutdown_intr()
1105 static void pvscsi_release_resources(struct pvscsi_adapter *adapter) in pvscsi_release_resources() argument
1107 pvscsi_shutdown_intr(adapter); in pvscsi_release_resources()
1109 if (adapter->workqueue) in pvscsi_release_resources()
1110 destroy_workqueue(adapter->workqueue); in pvscsi_release_resources()
1112 if (adapter->mmioBase) in pvscsi_release_resources()
1113 pci_iounmap(adapter->dev, adapter->mmioBase); in pvscsi_release_resources()
1115 pci_release_regions(adapter->dev); in pvscsi_release_resources()
1117 if (adapter->cmd_map) { in pvscsi_release_resources()
1118 pvscsi_free_sgls(adapter); in pvscsi_release_resources()
1119 kfree(adapter->cmd_map); in pvscsi_release_resources()
1122 if (adapter->rings_state) in pvscsi_release_resources()
1123 pci_free_consistent(adapter->dev, PAGE_SIZE, in pvscsi_release_resources()
1124 adapter->rings_state, adapter->ringStatePA); in pvscsi_release_resources()
1126 if (adapter->req_ring) in pvscsi_release_resources()
1127 pci_free_consistent(adapter->dev, in pvscsi_release_resources()
1128 adapter->req_pages * PAGE_SIZE, in pvscsi_release_resources()
1129 adapter->req_ring, adapter->reqRingPA); in pvscsi_release_resources()
1131 if (adapter->cmp_ring) in pvscsi_release_resources()
1132 pci_free_consistent(adapter->dev, in pvscsi_release_resources()
1133 adapter->cmp_pages * PAGE_SIZE, in pvscsi_release_resources()
1134 adapter->cmp_ring, adapter->cmpRingPA); in pvscsi_release_resources()
1136 if (adapter->msg_ring) in pvscsi_release_resources()
1137 pci_free_consistent(adapter->dev, in pvscsi_release_resources()
1138 adapter->msg_pages * PAGE_SIZE, in pvscsi_release_resources()
1139 adapter->msg_ring, adapter->msgRingPA); in pvscsi_release_resources()
1155 static int __devinit pvscsi_allocate_sg(struct pvscsi_adapter *adapter) in pvscsi_allocate_sg() argument
1160 ctx = adapter->cmd_map; in pvscsi_allocate_sg()
1163 for (i = 0; i < adapter->req_depth; ++i, ++ctx) { in pvscsi_allocate_sg()
1184 struct pvscsi_adapter *adapter; in pvscsi_probe() local
1217 adapter = shost_priv(host); in pvscsi_probe()
1218 memset(adapter, 0, sizeof(*adapter)); in pvscsi_probe()
1219 adapter->dev = pdev; in pvscsi_probe()
1220 adapter->host = host; in pvscsi_probe()
1222 spin_lock_init(&adapter->hw_lock); in pvscsi_probe()
1229 adapter->rev = pdev->revision; in pvscsi_probe()
1248 "vmw_pvscsi: adapter has no suitable MMIO region\n"); in pvscsi_probe()
1252 adapter->mmioBase = pci_iomap(pdev, i, PVSCSI_MEM_SPACE_SIZE); in pvscsi_probe()
1254 if (!adapter->mmioBase) { in pvscsi_probe()
1264 ll_adapter_reset(adapter); in pvscsi_probe()
1266 adapter->use_msg = pvscsi_setup_msg_workqueue(adapter); in pvscsi_probe()
1268 error = pvscsi_allocate_rings(adapter); in pvscsi_probe()
1275 * From this point on we should reset the adapter if anything goes in pvscsi_probe()
1278 pvscsi_setup_all_rings(adapter); in pvscsi_probe()
1280 adapter->cmd_map = kcalloc(adapter->req_depth, in pvscsi_probe()
1282 if (!adapter->cmd_map) { in pvscsi_probe()
1288 INIT_LIST_HEAD(&adapter->cmd_pool); in pvscsi_probe()
1289 for (i = 0; i < adapter->req_depth; i++) { in pvscsi_probe()
1290 struct pvscsi_ctx *ctx = adapter->cmd_map + i; in pvscsi_probe()
1291 list_add(&ctx->list, &adapter->cmd_pool); in pvscsi_probe()
1294 error = pvscsi_allocate_sg(adapter); in pvscsi_probe()
1301 pvscsi_setup_msix(adapter, &adapter->irq) == 0) { in pvscsi_probe()
1303 adapter->use_msix = 1; in pvscsi_probe()
1306 adapter->use_msi = 1; in pvscsi_probe()
1307 adapter->irq = pdev->irq; in pvscsi_probe()
1310 adapter->irq = pdev->irq; in pvscsi_probe()
1314 error = request_irq(adapter->irq, pvscsi_isr, flags, in pvscsi_probe()
1315 "vmw_pvscsi", adapter); in pvscsi_probe()
1319 adapter->irq = 0; in pvscsi_probe()
1331 adapter->rev, host->host_no); in pvscsi_probe()
1333 pvscsi_unmask_intr(adapter); in pvscsi_probe()
1340 ll_adapter_reset(adapter); in pvscsi_probe()
1342 pvscsi_release_resources(adapter); in pvscsi_probe()
1352 static void __pvscsi_shutdown(struct pvscsi_adapter *adapter) in __pvscsi_shutdown() argument
1354 pvscsi_mask_intr(adapter); in __pvscsi_shutdown()
1356 if (adapter->workqueue) in __pvscsi_shutdown()
1357 flush_workqueue(adapter->workqueue); in __pvscsi_shutdown()
1359 pvscsi_shutdown_intr(adapter); in __pvscsi_shutdown()
1361 pvscsi_process_request_ring(adapter); in __pvscsi_shutdown()
1362 pvscsi_process_completion_ring(adapter); in __pvscsi_shutdown()
1363 ll_adapter_reset(adapter); in __pvscsi_shutdown()
1369 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_shutdown() local
1371 __pvscsi_shutdown(adapter); in pvscsi_shutdown()
1377 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_remove() local
1381 __pvscsi_shutdown(adapter); in pvscsi_remove()
1382 pvscsi_release_resources(adapter); in pvscsi_remove()