Lines Matching full:adapter
149 pvscsi_dev(const struct pvscsi_adapter *adapter) in pvscsi_dev() argument
151 return &(adapter->dev->dev); in pvscsi_dev()
155 pvscsi_find_context(const struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) in pvscsi_find_context() argument
159 end = &adapter->cmd_map[adapter->req_depth]; in pvscsi_find_context()
160 for (ctx = adapter->cmd_map; ctx < end; ctx++) in pvscsi_find_context()
168 pvscsi_acquire_context(struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) in pvscsi_acquire_context() argument
172 if (list_empty(&adapter->cmd_pool)) in pvscsi_acquire_context()
175 ctx = list_first_entry(&adapter->cmd_pool, struct pvscsi_ctx, list); in pvscsi_acquire_context()
182 static void pvscsi_release_context(struct pvscsi_adapter *adapter, in pvscsi_release_context() argument
187 list_add(&ctx->list, &adapter->cmd_pool); in pvscsi_release_context()
195 static u64 pvscsi_map_context(const struct pvscsi_adapter *adapter, in pvscsi_map_context() argument
198 return ctx - adapter->cmd_map + 1; in pvscsi_map_context()
202 pvscsi_get_context(const struct pvscsi_adapter *adapter, u64 context) in pvscsi_get_context() argument
204 return &adapter->cmd_map[context - 1]; in pvscsi_get_context()
207 static void pvscsi_reg_write(const struct pvscsi_adapter *adapter, in pvscsi_reg_write() argument
210 writel(val, adapter->mmioBase + offset); in pvscsi_reg_write()
213 static u32 pvscsi_reg_read(const struct pvscsi_adapter *adapter, u32 offset) in pvscsi_reg_read() argument
215 return readl(adapter->mmioBase + offset); in pvscsi_reg_read()
218 static u32 pvscsi_read_intr_status(const struct pvscsi_adapter *adapter) in pvscsi_read_intr_status() argument
220 return pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_INTR_STATUS); in pvscsi_read_intr_status()
223 static void pvscsi_write_intr_status(const struct pvscsi_adapter *adapter, in pvscsi_write_intr_status() argument
226 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_STATUS, val); in pvscsi_write_intr_status()
229 static void pvscsi_unmask_intr(const struct pvscsi_adapter *adapter) in pvscsi_unmask_intr() argument
234 if (adapter->use_msg) in pvscsi_unmask_intr()
237 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, intr_bits); in pvscsi_unmask_intr()
240 static void pvscsi_mask_intr(const struct pvscsi_adapter *adapter) in pvscsi_mask_intr() argument
242 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, 0); in pvscsi_mask_intr()
245 static void pvscsi_write_cmd_desc(const struct pvscsi_adapter *adapter, in pvscsi_write_cmd_desc() argument
252 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, cmd); in pvscsi_write_cmd_desc()
254 pvscsi_reg_write(adapter, in pvscsi_write_cmd_desc()
258 static void pvscsi_abort_cmd(const struct pvscsi_adapter *adapter, in pvscsi_abort_cmd() argument
264 cmd.context = pvscsi_map_context(adapter, ctx); in pvscsi_abort_cmd()
266 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ABORT_CMD, &cmd, sizeof(cmd)); in pvscsi_abort_cmd()
269 static void pvscsi_kick_rw_io(const struct pvscsi_adapter *adapter) in pvscsi_kick_rw_io() argument
271 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_RW_IO, 0); in pvscsi_kick_rw_io()
274 static void pvscsi_process_request_ring(const struct pvscsi_adapter *adapter) in pvscsi_process_request_ring() argument
276 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_NON_RW_IO, 0); in pvscsi_process_request_ring()
287 static void pvscsi_kick_io(const struct pvscsi_adapter *adapter, in pvscsi_kick_io() argument
291 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_kick_io()
293 if (!adapter->use_req_threshold || in pvscsi_kick_io()
295 pvscsi_kick_rw_io(adapter); in pvscsi_kick_io()
297 pvscsi_process_request_ring(adapter); in pvscsi_kick_io()
301 static void ll_adapter_reset(const struct pvscsi_adapter *adapter) in ll_adapter_reset() argument
303 dev_dbg(pvscsi_dev(adapter), "Adapter Reset on %p\n", adapter); in ll_adapter_reset()
305 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ADAPTER_RESET, NULL, 0); in ll_adapter_reset()
308 static void ll_bus_reset(const struct pvscsi_adapter *adapter) in ll_bus_reset() argument
310 dev_dbg(pvscsi_dev(adapter), "Resetting bus on %p\n", adapter); in ll_bus_reset()
312 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_BUS, NULL, 0); in ll_bus_reset()
315 static void ll_device_reset(const struct pvscsi_adapter *adapter, u32 target) in ll_device_reset() argument
319 dev_dbg(pvscsi_dev(adapter), "Resetting device: target=%u\n", target); in ll_device_reset()
323 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_DEVICE, in ll_device_reset()
347 static int pvscsi_map_buffers(struct pvscsi_adapter *adapter, in pvscsi_map_buffers() argument
373 ctx->sglPA = dma_map_single(&adapter->dev->dev, in pvscsi_map_buffers()
375 if (dma_mapping_error(&adapter->dev->dev, ctx->sglPA)) { in pvscsi_map_buffers()
390 ctx->dataPA = dma_map_single(&adapter->dev->dev, sg, bufflen, in pvscsi_map_buffers()
392 if (dma_mapping_error(&adapter->dev->dev, ctx->dataPA)) { in pvscsi_map_buffers()
414 static void pvscsi_unmap_buffers(const struct pvscsi_adapter *adapter, in pvscsi_unmap_buffers() argument
429 dma_unmap_single(&adapter->dev->dev, ctx->sglPA, in pvscsi_unmap_buffers()
434 dma_unmap_single(&adapter->dev->dev, ctx->dataPA, in pvscsi_unmap_buffers()
438 dma_unmap_single(&adapter->dev->dev, ctx->sensePA, in pvscsi_unmap_buffers()
442 static int pvscsi_allocate_rings(struct pvscsi_adapter *adapter) in pvscsi_allocate_rings() argument
444 adapter->rings_state = dma_alloc_coherent(&adapter->dev->dev, PAGE_SIZE, in pvscsi_allocate_rings()
445 &adapter->ringStatePA, GFP_KERNEL); in pvscsi_allocate_rings()
446 if (!adapter->rings_state) in pvscsi_allocate_rings()
449 adapter->req_pages = min(PVSCSI_MAX_NUM_PAGES_REQ_RING, in pvscsi_allocate_rings()
451 adapter->req_depth = adapter->req_pages in pvscsi_allocate_rings()
453 adapter->req_ring = dma_alloc_coherent(&adapter->dev->dev, in pvscsi_allocate_rings()
454 adapter->req_pages * PAGE_SIZE, &adapter->reqRingPA, in pvscsi_allocate_rings()
456 if (!adapter->req_ring) in pvscsi_allocate_rings()
459 adapter->cmp_pages = min(PVSCSI_MAX_NUM_PAGES_CMP_RING, in pvscsi_allocate_rings()
461 adapter->cmp_ring = dma_alloc_coherent(&adapter->dev->dev, in pvscsi_allocate_rings()
462 adapter->cmp_pages * PAGE_SIZE, &adapter->cmpRingPA, in pvscsi_allocate_rings()
464 if (!adapter->cmp_ring) in pvscsi_allocate_rings()
467 BUG_ON(!IS_ALIGNED(adapter->ringStatePA, PAGE_SIZE)); in pvscsi_allocate_rings()
468 BUG_ON(!IS_ALIGNED(adapter->reqRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
469 BUG_ON(!IS_ALIGNED(adapter->cmpRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
471 if (!adapter->use_msg) in pvscsi_allocate_rings()
474 adapter->msg_pages = min(PVSCSI_MAX_NUM_PAGES_MSG_RING, in pvscsi_allocate_rings()
476 adapter->msg_ring = dma_alloc_coherent(&adapter->dev->dev, in pvscsi_allocate_rings()
477 adapter->msg_pages * PAGE_SIZE, &adapter->msgRingPA, in pvscsi_allocate_rings()
479 if (!adapter->msg_ring) in pvscsi_allocate_rings()
481 BUG_ON(!IS_ALIGNED(adapter->msgRingPA, PAGE_SIZE)); in pvscsi_allocate_rings()
486 static void pvscsi_setup_all_rings(const struct pvscsi_adapter *adapter) in pvscsi_setup_all_rings() argument
492 cmd.ringsStatePPN = adapter->ringStatePA >> PAGE_SHIFT; in pvscsi_setup_all_rings()
493 cmd.reqRingNumPages = adapter->req_pages; in pvscsi_setup_all_rings()
494 cmd.cmpRingNumPages = adapter->cmp_pages; in pvscsi_setup_all_rings()
496 base = adapter->reqRingPA; in pvscsi_setup_all_rings()
497 for (i = 0; i < adapter->req_pages; i++) { in pvscsi_setup_all_rings()
502 base = adapter->cmpRingPA; in pvscsi_setup_all_rings()
503 for (i = 0; i < adapter->cmp_pages; i++) { in pvscsi_setup_all_rings()
508 memset(adapter->rings_state, 0, PAGE_SIZE); in pvscsi_setup_all_rings()
509 memset(adapter->req_ring, 0, adapter->req_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
510 memset(adapter->cmp_ring, 0, adapter->cmp_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
512 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_RINGS, in pvscsi_setup_all_rings()
515 if (adapter->use_msg) { in pvscsi_setup_all_rings()
518 cmd_msg.numPages = adapter->msg_pages; in pvscsi_setup_all_rings()
520 base = adapter->msgRingPA; in pvscsi_setup_all_rings()
521 for (i = 0; i < adapter->msg_pages; i++) { in pvscsi_setup_all_rings()
525 memset(adapter->msg_ring, 0, adapter->msg_pages * PAGE_SIZE); in pvscsi_setup_all_rings()
527 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_MSG_RING, in pvscsi_setup_all_rings()
543 static void pvscsi_complete_request(struct pvscsi_adapter *adapter, in pvscsi_complete_request() argument
552 ctx = pvscsi_get_context(adapter, e->context); in pvscsi_complete_request()
555 pvscsi_unmap_buffers(adapter, ctx); in pvscsi_complete_request()
558 pvscsi_release_context(adapter, ctx); in pvscsi_complete_request()
656 static void pvscsi_process_completion_ring(struct pvscsi_adapter *adapter) in pvscsi_process_completion_ring() argument
658 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_completion_ring()
659 struct PVSCSIRingCmpDesc *ring = adapter->cmp_ring; in pvscsi_process_completion_ring()
672 pvscsi_complete_request(adapter, e); in pvscsi_process_completion_ring()
687 static int pvscsi_queue_ring(struct pvscsi_adapter *adapter, in pvscsi_queue_ring() argument
695 s = adapter->rings_state; in pvscsi_queue_ring()
714 e = adapter->req_ring + (s->reqProdIdx & MASK(req_entries)); in pvscsi_queue_ring()
722 ctx->sensePA = dma_map_single(&adapter->dev->dev, in pvscsi_queue_ring()
725 if (dma_mapping_error(&adapter->dev->dev, ctx->sensePA)) { in pvscsi_queue_ring()
752 if (pvscsi_map_buffers(adapter, ctx, cmd, e) != 0) { in pvscsi_queue_ring()
754 dma_unmap_single(&adapter->dev->dev, ctx->sensePA, in pvscsi_queue_ring()
762 e->context = pvscsi_map_context(adapter, ctx); in pvscsi_queue_ring()
774 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_queue_lck() local
779 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_queue_lck()
781 ctx = pvscsi_acquire_context(adapter, cmd); in pvscsi_queue_lck()
782 if (!ctx || pvscsi_queue_ring(adapter, ctx, cmd) != 0) { in pvscsi_queue_lck()
784 pvscsi_release_context(adapter, ctx); in pvscsi_queue_lck()
785 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_queue_lck()
795 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_queue_lck()
797 pvscsi_kick_io(adapter, op); in pvscsi_queue_lck()
806 struct pvscsi_adapter *adapter = shost_priv(cmd->device->host); in DEF_SCSI_QCMD() local
814 adapter->host->host_no, cmd); in DEF_SCSI_QCMD()
816 spin_lock_irqsave(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
822 pvscsi_process_completion_ring(adapter); in DEF_SCSI_QCMD()
828 ctx = pvscsi_find_context(adapter, cmd); in DEF_SCSI_QCMD()
840 pvscsi_abort_cmd(adapter, ctx); in DEF_SCSI_QCMD()
841 spin_unlock_irqrestore(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
844 spin_lock_irqsave(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
866 spin_unlock_irqrestore(&adapter->hw_lock, flags); in DEF_SCSI_QCMD()
876 static void pvscsi_reset_all(struct pvscsi_adapter *adapter) in pvscsi_reset_all() argument
880 for (i = 0; i < adapter->req_depth; i++) { in pvscsi_reset_all()
881 struct pvscsi_ctx *ctx = &adapter->cmd_map[i]; in pvscsi_reset_all()
886 pvscsi_unmap_buffers(adapter, ctx); in pvscsi_reset_all()
888 pvscsi_release_context(adapter, ctx); in pvscsi_reset_all()
898 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_host_reset() local
904 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_host_reset()
906 use_msg = adapter->use_msg; in pvscsi_host_reset()
909 adapter->use_msg = false; in pvscsi_host_reset()
910 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_host_reset()
916 flush_workqueue(adapter->workqueue); in pvscsi_host_reset()
917 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_host_reset()
926 pvscsi_process_request_ring(adapter); in pvscsi_host_reset()
928 ll_adapter_reset(adapter); in pvscsi_host_reset()
931 * Now process any completions. Note we do this AFTER adapter reset, in pvscsi_host_reset()
937 pvscsi_process_completion_ring(adapter); in pvscsi_host_reset()
939 pvscsi_reset_all(adapter); in pvscsi_host_reset()
940 adapter->use_msg = use_msg; in pvscsi_host_reset()
941 pvscsi_setup_all_rings(adapter); in pvscsi_host_reset()
942 pvscsi_unmask_intr(adapter); in pvscsi_host_reset()
944 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_host_reset()
952 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_bus_reset() local
963 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_bus_reset()
965 pvscsi_process_request_ring(adapter); in pvscsi_bus_reset()
966 ll_bus_reset(adapter); in pvscsi_bus_reset()
967 pvscsi_process_completion_ring(adapter); in pvscsi_bus_reset()
969 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_bus_reset()
977 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_device_reset() local
988 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_device_reset()
990 pvscsi_process_request_ring(adapter); in pvscsi_device_reset()
991 ll_device_reset(adapter, cmd->device->id); in pvscsi_device_reset()
992 pvscsi_process_completion_ring(adapter); in pvscsi_device_reset()
994 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_device_reset()
1003 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_info() local
1006 sprintf(buf, "VMware PVSCSI storage adapter rev %d, req/cmp/msg rings: " in pvscsi_info()
1007 "%u/%u/%u pages, cmd_per_lun=%u", adapter->rev, in pvscsi_info()
1008 adapter->req_pages, adapter->cmp_pages, adapter->msg_pages, in pvscsi_info()
1016 .name = "VMware PVSCSI Host Adapter",
1031 static void pvscsi_process_msg(const struct pvscsi_adapter *adapter, in pvscsi_process_msg() argument
1034 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_msg()
1035 struct Scsi_Host *host = adapter->host; in pvscsi_process_msg()
1060 scsi_add_device(adapter->host, desc->bus, in pvscsi_process_msg()
1089 static int pvscsi_msg_pending(const struct pvscsi_adapter *adapter) in pvscsi_msg_pending() argument
1091 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_msg_pending()
1096 static void pvscsi_process_msg_ring(const struct pvscsi_adapter *adapter) in pvscsi_process_msg_ring() argument
1098 struct PVSCSIRingsState *s = adapter->rings_state; in pvscsi_process_msg_ring()
1099 struct PVSCSIRingMsgDesc *ring = adapter->msg_ring; in pvscsi_process_msg_ring()
1102 while (pvscsi_msg_pending(adapter)) { in pvscsi_process_msg_ring()
1107 pvscsi_process_msg(adapter, e); in pvscsi_process_msg_ring()
1115 struct pvscsi_adapter *adapter; in pvscsi_msg_workqueue_handler() local
1117 adapter = container_of(data, struct pvscsi_adapter, work); in pvscsi_msg_workqueue_handler()
1119 pvscsi_process_msg_ring(adapter); in pvscsi_msg_workqueue_handler()
1122 static int pvscsi_setup_msg_workqueue(struct pvscsi_adapter *adapter) in pvscsi_setup_msg_workqueue() argument
1129 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, in pvscsi_setup_msg_workqueue()
1132 if (pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_COMMAND_STATUS) == -1) in pvscsi_setup_msg_workqueue()
1136 "vmw_pvscsi_wq_%u", adapter->host->host_no); in pvscsi_setup_msg_workqueue()
1138 adapter->workqueue = create_singlethread_workqueue(name); in pvscsi_setup_msg_workqueue()
1139 if (!adapter->workqueue) { in pvscsi_setup_msg_workqueue()
1143 INIT_WORK(&adapter->work, pvscsi_msg_workqueue_handler); in pvscsi_setup_msg_workqueue()
1148 static bool pvscsi_setup_req_threshold(struct pvscsi_adapter *adapter, in pvscsi_setup_req_threshold() argument
1156 pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, in pvscsi_setup_req_threshold()
1158 val = pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_COMMAND_STATUS); in pvscsi_setup_req_threshold()
1168 pvscsi_write_cmd_desc(adapter, in pvscsi_setup_req_threshold()
1171 return pvscsi_reg_read(adapter, in pvscsi_setup_req_threshold()
1178 struct pvscsi_adapter *adapter = devp; in pvscsi_isr() local
1181 spin_lock_irqsave(&adapter->hw_lock, flags); in pvscsi_isr()
1182 pvscsi_process_completion_ring(adapter); in pvscsi_isr()
1183 if (adapter->use_msg && pvscsi_msg_pending(adapter)) in pvscsi_isr()
1184 queue_work(adapter->workqueue, &adapter->work); in pvscsi_isr()
1185 spin_unlock_irqrestore(&adapter->hw_lock, flags); in pvscsi_isr()
1192 struct pvscsi_adapter *adapter = devp; in pvscsi_shared_isr() local
1193 u32 val = pvscsi_read_intr_status(adapter); in pvscsi_shared_isr()
1201 static void pvscsi_free_sgls(const struct pvscsi_adapter *adapter) in pvscsi_free_sgls() argument
1203 struct pvscsi_ctx *ctx = adapter->cmd_map; in pvscsi_free_sgls()
1206 for (i = 0; i < adapter->req_depth; ++i, ++ctx) in pvscsi_free_sgls()
1210 static void pvscsi_shutdown_intr(struct pvscsi_adapter *adapter) in pvscsi_shutdown_intr() argument
1212 free_irq(pci_irq_vector(adapter->dev, 0), adapter); in pvscsi_shutdown_intr()
1213 pci_free_irq_vectors(adapter->dev); in pvscsi_shutdown_intr()
1216 static void pvscsi_release_resources(struct pvscsi_adapter *adapter) in pvscsi_release_resources() argument
1218 if (adapter->workqueue) in pvscsi_release_resources()
1219 destroy_workqueue(adapter->workqueue); in pvscsi_release_resources()
1221 if (adapter->mmioBase) in pvscsi_release_resources()
1222 pci_iounmap(adapter->dev, adapter->mmioBase); in pvscsi_release_resources()
1224 pci_release_regions(adapter->dev); in pvscsi_release_resources()
1226 if (adapter->cmd_map) { in pvscsi_release_resources()
1227 pvscsi_free_sgls(adapter); in pvscsi_release_resources()
1228 kfree(adapter->cmd_map); in pvscsi_release_resources()
1231 if (adapter->rings_state) in pvscsi_release_resources()
1232 dma_free_coherent(&adapter->dev->dev, PAGE_SIZE, in pvscsi_release_resources()
1233 adapter->rings_state, adapter->ringStatePA); in pvscsi_release_resources()
1235 if (adapter->req_ring) in pvscsi_release_resources()
1236 dma_free_coherent(&adapter->dev->dev, in pvscsi_release_resources()
1237 adapter->req_pages * PAGE_SIZE, in pvscsi_release_resources()
1238 adapter->req_ring, adapter->reqRingPA); in pvscsi_release_resources()
1240 if (adapter->cmp_ring) in pvscsi_release_resources()
1241 dma_free_coherent(&adapter->dev->dev, in pvscsi_release_resources()
1242 adapter->cmp_pages * PAGE_SIZE, in pvscsi_release_resources()
1243 adapter->cmp_ring, adapter->cmpRingPA); in pvscsi_release_resources()
1245 if (adapter->msg_ring) in pvscsi_release_resources()
1246 dma_free_coherent(&adapter->dev->dev, in pvscsi_release_resources()
1247 adapter->msg_pages * PAGE_SIZE, in pvscsi_release_resources()
1248 adapter->msg_ring, adapter->msgRingPA); in pvscsi_release_resources()
1264 static int pvscsi_allocate_sg(struct pvscsi_adapter *adapter) in pvscsi_allocate_sg() argument
1269 ctx = adapter->cmd_map; in pvscsi_allocate_sg()
1272 for (i = 0; i < adapter->req_depth; ++i, ++ctx) { in pvscsi_allocate_sg()
1292 * maximum number of targets on the adapter. In case of
1295 static u32 pvscsi_get_max_targets(struct pvscsi_adapter *adapter) in pvscsi_get_max_targets() argument
1304 dev = pvscsi_dev(adapter); in pvscsi_get_max_targets()
1305 config_page = dma_alloc_coherent(&adapter->dev->dev, PAGE_SIZE, in pvscsi_get_max_targets()
1329 pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_CONFIG, &cmd, sizeof cmd); in pvscsi_get_max_targets()
1340 dma_free_coherent(&adapter->dev->dev, PAGE_SIZE, config_page, in pvscsi_get_max_targets()
1349 struct pvscsi_adapter *adapter; in pvscsi_probe() local
1372 * targets on the adapter, after that we will switch to the real in pvscsi_probe()
1375 adapter = &adapter_temp; in pvscsi_probe()
1376 memset(adapter, 0, sizeof(*adapter)); in pvscsi_probe()
1377 adapter->dev = pdev; in pvscsi_probe()
1378 adapter->rev = pdev->revision; in pvscsi_probe()
1397 "vmw_pvscsi: adapter has no suitable MMIO region\n"); in pvscsi_probe()
1401 adapter->mmioBase = pci_iomap(pdev, i, PVSCSI_MEM_SPACE_SIZE); in pvscsi_probe()
1403 if (!adapter->mmioBase) { in pvscsi_probe()
1416 max_id = pvscsi_get_max_targets(adapter); in pvscsi_probe()
1445 adapter = shost_priv(host); in pvscsi_probe()
1446 memset(adapter, 0, sizeof(*adapter)); in pvscsi_probe()
1447 adapter->dev = pdev; in pvscsi_probe()
1448 adapter->host = host; in pvscsi_probe()
1450 * Copy back what we already have to the allocated adapter struct. in pvscsi_probe()
1452 adapter->rev = adapter_temp.rev; in pvscsi_probe()
1453 adapter->mmioBase = adapter_temp.mmioBase; in pvscsi_probe()
1455 spin_lock_init(&adapter->hw_lock); in pvscsi_probe()
1463 ll_adapter_reset(adapter); in pvscsi_probe()
1465 adapter->use_msg = pvscsi_setup_msg_workqueue(adapter); in pvscsi_probe()
1467 error = pvscsi_allocate_rings(adapter); in pvscsi_probe()
1474 * From this point on we should reset the adapter if anything goes in pvscsi_probe()
1477 pvscsi_setup_all_rings(adapter); in pvscsi_probe()
1479 adapter->cmd_map = kcalloc(adapter->req_depth, in pvscsi_probe()
1481 if (!adapter->cmd_map) { in pvscsi_probe()
1487 INIT_LIST_HEAD(&adapter->cmd_pool); in pvscsi_probe()
1488 for (i = 0; i < adapter->req_depth; i++) { in pvscsi_probe()
1489 struct pvscsi_ctx *ctx = adapter->cmd_map + i; in pvscsi_probe()
1490 list_add(&ctx->list, &adapter->cmd_pool); in pvscsi_probe()
1493 error = pvscsi_allocate_sg(adapter); in pvscsi_probe()
1504 error = pci_alloc_irq_vectors(adapter->dev, 1, 1, irq_flag); in pvscsi_probe()
1508 adapter->use_req_threshold = pvscsi_setup_req_threshold(adapter, true); in pvscsi_probe()
1510 adapter->use_req_threshold ? "en" : "dis"); in pvscsi_probe()
1512 if (adapter->dev->msix_enabled || adapter->dev->msi_enabled) { in pvscsi_probe()
1514 adapter->dev->msix_enabled ? "-X" : ""); in pvscsi_probe()
1516 0, "vmw_pvscsi", adapter); in pvscsi_probe()
1520 IRQF_SHARED, "vmw_pvscsi", adapter); in pvscsi_probe()
1537 adapter->rev, host->host_no); in pvscsi_probe()
1539 pvscsi_unmask_intr(adapter); in pvscsi_probe()
1546 ll_adapter_reset(adapter); in pvscsi_probe()
1548 pvscsi_shutdown_intr(adapter); in pvscsi_probe()
1549 pvscsi_release_resources(adapter); in pvscsi_probe()
1557 pvscsi_shutdown_intr(adapter); in pvscsi_probe()
1558 pvscsi_release_resources(adapter); in pvscsi_probe()
1562 static void __pvscsi_shutdown(struct pvscsi_adapter *adapter) in __pvscsi_shutdown() argument
1564 pvscsi_mask_intr(adapter); in __pvscsi_shutdown()
1566 if (adapter->workqueue) in __pvscsi_shutdown()
1567 flush_workqueue(adapter->workqueue); in __pvscsi_shutdown()
1569 pvscsi_shutdown_intr(adapter); in __pvscsi_shutdown()
1571 pvscsi_process_request_ring(adapter); in __pvscsi_shutdown()
1572 pvscsi_process_completion_ring(adapter); in __pvscsi_shutdown()
1573 ll_adapter_reset(adapter); in __pvscsi_shutdown()
1579 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_shutdown() local
1581 __pvscsi_shutdown(adapter); in pvscsi_shutdown()
1587 struct pvscsi_adapter *adapter = shost_priv(host); in pvscsi_remove() local
1591 __pvscsi_shutdown(adapter); in pvscsi_remove()
1592 pvscsi_release_resources(adapter); in pvscsi_remove()