Lines Matching refs:dev

124 	struct rtsx_dev *dev = host_to_rtsx(srb->device->host);  in queuecommand_lck()  local
125 struct rtsx_chip *chip = dev->chip; in queuecommand_lck()
129 dev_err(&dev->pci->dev, "Error: chip->srb = %p\n", in queuecommand_lck()
136 dev_info(&dev->pci->dev, "Fail command during disconnect\n"); in queuecommand_lck()
144 complete(&dev->cmnd_ready); in queuecommand_lck()
159 struct rtsx_dev *dev = host_to_rtsx(host); in DEF_SCSI_QCMD() local
160 struct rtsx_chip *chip = dev->chip; in DEF_SCSI_QCMD()
167 dev_info(&dev->pci->dev, "-- nothing to abort\n"); in DEF_SCSI_QCMD()
176 wait_for_completion(&dev->notify); in DEF_SCSI_QCMD()
232 static int rtsx_acquire_irq(struct rtsx_dev *dev) in rtsx_acquire_irq() argument
234 struct rtsx_chip *chip = dev->chip; in rtsx_acquire_irq()
236 dev_info(&dev->pci->dev, "%s: chip->msi_en = %d, pci->irq = %d\n", in rtsx_acquire_irq()
237 __func__, chip->msi_en, dev->pci->irq); in rtsx_acquire_irq()
239 if (request_irq(dev->pci->irq, rtsx_interrupt, in rtsx_acquire_irq()
241 CR_DRIVER_NAME, dev)) { in rtsx_acquire_irq()
242 dev_err(&dev->pci->dev, in rtsx_acquire_irq()
244 dev->pci->irq); in rtsx_acquire_irq()
248 dev->irq = dev->pci->irq; in rtsx_acquire_irq()
249 pci_intx(dev->pci, !chip->msi_en); in rtsx_acquire_irq()
260 struct rtsx_dev *dev = pci_get_drvdata(pci); in rtsx_suspend() local
263 if (!dev) in rtsx_suspend()
267 mutex_lock(&dev->dev_mutex); in rtsx_suspend()
269 chip = dev->chip; in rtsx_suspend()
273 if (dev->irq >= 0) { in rtsx_suspend()
274 free_irq(dev->irq, (void *)dev); in rtsx_suspend()
275 dev->irq = -1; in rtsx_suspend()
284 mutex_unlock(&dev->dev_mutex); in rtsx_suspend()
292 struct rtsx_dev *dev = pci_get_drvdata(pci); in rtsx_resume() local
295 if (!dev) in rtsx_resume()
298 chip = dev->chip; in rtsx_resume()
301 mutex_lock(&dev->dev_mutex); in rtsx_resume()
310 if (rtsx_acquire_irq(dev) < 0) { in rtsx_resume()
312 mutex_unlock(&dev->dev_mutex); in rtsx_resume()
320 mutex_unlock(&dev->dev_mutex); in rtsx_resume()
327 struct rtsx_dev *dev = pci_get_drvdata(pci); in rtsx_shutdown() local
330 if (!dev) in rtsx_shutdown()
333 chip = dev->chip; in rtsx_shutdown()
337 if (dev->irq >= 0) { in rtsx_shutdown()
338 free_irq(dev->irq, (void *)dev); in rtsx_shutdown()
339 dev->irq = -1; in rtsx_shutdown()
350 struct rtsx_dev *dev = __dev; in rtsx_control_thread() local
351 struct rtsx_chip *chip = dev->chip; in rtsx_control_thread()
352 struct Scsi_Host *host = rtsx_to_host(dev); in rtsx_control_thread()
355 if (wait_for_completion_interruptible(&dev->cmnd_ready)) in rtsx_control_thread()
359 mutex_lock(&dev->dev_mutex); in rtsx_control_thread()
363 dev_info(&dev->pci->dev, "-- rtsx-control exiting\n"); in rtsx_control_thread()
364 mutex_unlock(&dev->dev_mutex); in rtsx_control_thread()
383 dev_err(&dev->pci->dev, "UNKNOWN data direction\n"); in rtsx_control_thread()
389 dev_err(&dev->pci->dev, "Bad target number (%d:%d)\n", in rtsx_control_thread()
394 dev_err(&dev->pci->dev, "Bad LUN (%d:%d)\n", in rtsx_control_thread()
416 dev_err(&dev->pci->dev, "scsi command aborted\n"); in rtsx_control_thread()
420 complete(&dev->notify); in rtsx_control_thread()
430 mutex_unlock(&dev->dev_mutex); in rtsx_control_thread()
447 kthread_complete_and_exit(&dev->control_exit, 0); in rtsx_control_thread()
452 struct rtsx_dev *dev = __dev; in rtsx_polling_thread() local
453 struct rtsx_chip *chip = dev->chip; in rtsx_polling_thread()
470 mutex_lock(&dev->dev_mutex); in rtsx_polling_thread()
474 dev_info(&dev->pci->dev, "-- rtsx-polling exiting\n"); in rtsx_polling_thread()
475 mutex_unlock(&dev->dev_mutex); in rtsx_polling_thread()
479 mutex_unlock(&dev->dev_mutex); in rtsx_polling_thread()
484 mutex_lock(&dev->dev_mutex); in rtsx_polling_thread()
489 mutex_unlock(&dev->dev_mutex); in rtsx_polling_thread()
492 kthread_complete_and_exit(&dev->polling_exit, 0); in rtsx_polling_thread()
500 struct rtsx_dev *dev = dev_id; in rtsx_interrupt() local
505 if (dev) in rtsx_interrupt()
506 chip = dev->chip; in rtsx_interrupt()
513 spin_lock(&dev->reg_lock); in rtsx_interrupt()
517 spin_unlock(&dev->reg_lock); in rtsx_interrupt()
525 if (dev->check_card_cd) { in rtsx_interrupt()
526 if (!(dev->check_card_cd & status)) { in rtsx_interrupt()
528 dev->trans_result = TRANS_RESULT_FAIL; in rtsx_interrupt()
529 if (dev->done) in rtsx_interrupt()
530 complete(dev->done); in rtsx_interrupt()
539 dev->trans_result = TRANS_RESULT_FAIL; in rtsx_interrupt()
540 if (dev->done) in rtsx_interrupt()
541 complete(dev->done); in rtsx_interrupt()
543 dev->trans_result = TRANS_RESULT_OK; in rtsx_interrupt()
544 if (dev->done) in rtsx_interrupt()
545 complete(dev->done); in rtsx_interrupt()
547 dev->trans_result = TRANS_NOT_READY; in rtsx_interrupt()
548 if (dev->done && dev->trans_state == STATE_TRANS_SG) in rtsx_interrupt()
549 complete(dev->done); in rtsx_interrupt()
554 spin_unlock(&dev->reg_lock); in rtsx_interrupt()
559 static void rtsx_release_resources(struct rtsx_dev *dev) in rtsx_release_resources() argument
561 dev_info(&dev->pci->dev, "-- %s\n", __func__); in rtsx_release_resources()
567 dev_info(&dev->pci->dev, "-- sending exit command to thread\n"); in rtsx_release_resources()
568 complete(&dev->cmnd_ready); in rtsx_release_resources()
569 if (dev->ctl_thread) in rtsx_release_resources()
570 wait_for_completion(&dev->control_exit); in rtsx_release_resources()
571 if (dev->polling_thread) in rtsx_release_resources()
572 wait_for_completion(&dev->polling_exit); in rtsx_release_resources()
576 if (dev->rtsx_resv_buf) { in rtsx_release_resources()
577 dev->chip->host_cmds_ptr = NULL; in rtsx_release_resources()
578 dev->chip->host_sg_tbl_ptr = NULL; in rtsx_release_resources()
581 if (dev->irq > 0) in rtsx_release_resources()
582 free_irq(dev->irq, (void *)dev); in rtsx_release_resources()
583 if (dev->chip->msi_en) in rtsx_release_resources()
584 pci_free_irq_vectors(dev->pci); in rtsx_release_resources()
585 if (dev->remap_addr) in rtsx_release_resources()
586 iounmap(dev->remap_addr); in rtsx_release_resources()
588 rtsx_release_chip(dev->chip); in rtsx_release_resources()
589 kfree(dev->chip); in rtsx_release_resources()
596 static void quiesce_and_remove_host(struct rtsx_dev *dev) in quiesce_and_remove_host() argument
598 struct Scsi_Host *host = rtsx_to_host(dev); in quiesce_and_remove_host()
599 struct rtsx_chip *chip = dev->chip; in quiesce_and_remove_host()
605 mutex_lock(&dev->dev_mutex); in quiesce_and_remove_host()
609 mutex_unlock(&dev->dev_mutex); in quiesce_and_remove_host()
610 wake_up(&dev->delay_wait); in quiesce_and_remove_host()
611 wait_for_completion(&dev->scanning_done); in quiesce_and_remove_host()
621 mutex_lock(&dev->dev_mutex); in quiesce_and_remove_host()
625 scsi_done(dev->chip->srb); in quiesce_and_remove_host()
629 mutex_unlock(&dev->dev_mutex); in quiesce_and_remove_host()
636 static void release_everything(struct rtsx_dev *dev) in release_everything() argument
638 rtsx_release_resources(dev); in release_everything()
644 scsi_host_put(rtsx_to_host(dev)); in release_everything()
650 struct rtsx_dev *dev = __dev; in rtsx_scan_thread() local
651 struct rtsx_chip *chip = dev->chip; in rtsx_scan_thread()
655 dev_info(&dev->pci->dev, in rtsx_scan_thread()
659 (dev->delay_wait, in rtsx_scan_thread()
666 scsi_scan_host(rtsx_to_host(dev)); in rtsx_scan_thread()
667 dev_info(&dev->pci->dev, "%s: device scan complete\n", in rtsx_scan_thread()
673 kthread_complete_and_exit(&dev->scanning_done, 0); in rtsx_scan_thread()
782 struct rtsx_dev *dev; in rtsx_probe() local
786 dev_dbg(&pci->dev, "Realtek PCI-E card reader detected\n"); in rtsx_probe()
790 dev_err(&pci->dev, "PCI enable device failed!\n"); in rtsx_probe()
796 dev_err(&pci->dev, "PCI request regions for %s failed!\n", in rtsx_probe()
805 host = scsi_host_alloc(&rtsx_host_template, sizeof(*dev)); in rtsx_probe()
807 dev_err(&pci->dev, "Unable to allocate the scsi host\n"); in rtsx_probe()
812 dev = host_to_rtsx(host); in rtsx_probe()
813 memset(dev, 0, sizeof(struct rtsx_dev)); in rtsx_probe()
815 dev->chip = kzalloc(sizeof(*dev->chip), GFP_KERNEL); in rtsx_probe()
816 if (!dev->chip) { in rtsx_probe()
821 spin_lock_init(&dev->reg_lock); in rtsx_probe()
822 mutex_init(&dev->dev_mutex); in rtsx_probe()
823 init_completion(&dev->cmnd_ready); in rtsx_probe()
824 init_completion(&dev->control_exit); in rtsx_probe()
825 init_completion(&dev->polling_exit); in rtsx_probe()
826 init_completion(&dev->notify); in rtsx_probe()
827 init_completion(&dev->scanning_done); in rtsx_probe()
828 init_waitqueue_head(&dev->delay_wait); in rtsx_probe()
830 dev->pci = pci; in rtsx_probe()
831 dev->irq = -1; in rtsx_probe()
833 dev_info(&pci->dev, "Resource length: 0x%x\n", in rtsx_probe()
835 dev->addr = pci_resource_start(pci, 0); in rtsx_probe()
836 dev->remap_addr = ioremap(dev->addr, pci_resource_len(pci, 0)); in rtsx_probe()
837 if (!dev->remap_addr) { in rtsx_probe()
838 dev_err(&pci->dev, "ioremap error\n"); in rtsx_probe()
847 dev_info(&pci->dev, "Original address: 0x%lx, remapped address: 0x%lx\n", in rtsx_probe()
848 (unsigned long)(dev->addr), (unsigned long)(dev->remap_addr)); in rtsx_probe()
850 dev->rtsx_resv_buf = dmam_alloc_coherent(&pci->dev, RTSX_RESV_BUF_LEN, in rtsx_probe()
851 &dev->rtsx_resv_buf_addr, in rtsx_probe()
853 if (!dev->rtsx_resv_buf) { in rtsx_probe()
854 dev_err(&pci->dev, "alloc dma buffer fail\n"); in rtsx_probe()
858 dev->chip->host_cmds_ptr = dev->rtsx_resv_buf; in rtsx_probe()
859 dev->chip->host_cmds_addr = dev->rtsx_resv_buf_addr; in rtsx_probe()
860 dev->chip->host_sg_tbl_ptr = dev->rtsx_resv_buf + HOST_CMDS_BUF_LEN; in rtsx_probe()
861 dev->chip->host_sg_tbl_addr = dev->rtsx_resv_buf_addr + in rtsx_probe()
864 dev->chip->rtsx = dev; in rtsx_probe()
866 rtsx_init_options(dev->chip); in rtsx_probe()
868 dev_info(&pci->dev, "pci->irq = %d\n", pci->irq); in rtsx_probe()
870 if (dev->chip->msi_en) { in rtsx_probe()
872 dev->chip->msi_en = 0; in rtsx_probe()
875 if (rtsx_acquire_irq(dev) < 0) { in rtsx_probe()
881 synchronize_irq(dev->irq); in rtsx_probe()
883 rtsx_init_chip(dev->chip); in rtsx_probe()
890 host->max_lun = dev->chip->max_lun; in rtsx_probe()
893 th = kthread_run(rtsx_control_thread, dev, CR_DRIVER_NAME); in rtsx_probe()
895 dev_err(&pci->dev, "Unable to start control thread\n"); in rtsx_probe()
899 dev->ctl_thread = th; in rtsx_probe()
901 err = scsi_add_host(host, &pci->dev); in rtsx_probe()
903 dev_err(&pci->dev, "Unable to add the scsi host\n"); in rtsx_probe()
908 th = kthread_run(rtsx_scan_thread, dev, "rtsx-scan"); in rtsx_probe()
910 dev_err(&pci->dev, "Unable to start the device-scanning thread\n"); in rtsx_probe()
911 complete(&dev->scanning_done); in rtsx_probe()
917 th = kthread_run(rtsx_polling_thread, dev, "rtsx-polling"); in rtsx_probe()
919 dev_err(&pci->dev, "Unable to start the device-polling thread\n"); in rtsx_probe()
923 dev->polling_thread = th; in rtsx_probe()
925 pci_set_drvdata(pci, dev); in rtsx_probe()
931 quiesce_and_remove_host(dev); in rtsx_probe()
933 complete(&dev->cmnd_ready); in rtsx_probe()
934 wait_for_completion(&dev->control_exit); in rtsx_probe()
936 free_irq(dev->irq, (void *)dev); in rtsx_probe()
937 rtsx_release_chip(dev->chip); in rtsx_probe()
939 dev->chip->host_cmds_ptr = NULL; in rtsx_probe()
940 dev->chip->host_sg_tbl_ptr = NULL; in rtsx_probe()
941 if (dev->chip->msi_en) in rtsx_probe()
942 pci_free_irq_vectors(dev->pci); in rtsx_probe()
944 iounmap(dev->remap_addr); in rtsx_probe()
946 kfree(dev->chip); in rtsx_probe()
948 dev_err(&pci->dev, "%s failed\n", __func__); in rtsx_probe()
957 struct rtsx_dev *dev = pci_get_drvdata(pci); in rtsx_remove() local
959 quiesce_and_remove_host(dev); in rtsx_remove()
960 release_everything(dev); in rtsx_remove()