.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * mm.c - Micro Memory(tm) PCI memory board block device driver - v2.3 |
---|
3 | 4 | * |
---|
.. | .. |
---|
7 | 8 | * |
---|
8 | 9 | * This driver for the Micro Memory PCI Memory Module with Battery Backup |
---|
9 | 10 | * is Copyright Micro Memory Inc 2001-2002. All rights reserved. |
---|
10 | | - * |
---|
11 | | - * This driver is released to the public under the terms of the |
---|
12 | | - * GNU GENERAL PUBLIC LICENSE version 2 |
---|
13 | | - * See the file COPYING for details. |
---|
14 | 11 | * |
---|
15 | 12 | * This driver provides a standard block device interface for Micro Memory(tm) |
---|
16 | 13 | * PCI based RAM boards. |
---|
.. | .. |
---|
363 | 360 | |
---|
364 | 361 | vec = bio_iter_iovec(bio, card->current_iter); |
---|
365 | 362 | |
---|
366 | | - dma_handle = pci_map_page(card->dev, |
---|
| 363 | + dma_handle = dma_map_page(&card->dev->dev, |
---|
367 | 364 | vec.bv_page, |
---|
368 | 365 | vec.bv_offset, |
---|
369 | 366 | vec.bv_len, |
---|
370 | 367 | bio_op(bio) == REQ_OP_READ ? |
---|
371 | | - PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); |
---|
| 368 | + DMA_FROM_DEVICE : DMA_TO_DEVICE); |
---|
372 | 369 | |
---|
373 | 370 | p = &card->mm_pages[card->Ready]; |
---|
374 | 371 | desc = &p->desc[p->cnt]; |
---|
.. | .. |
---|
421 | 418 | struct cardinfo *card = (struct cardinfo *)data; |
---|
422 | 419 | unsigned int dma_status = card->dma_status; |
---|
423 | 420 | |
---|
424 | | - spin_lock_bh(&card->lock); |
---|
| 421 | + spin_lock(&card->lock); |
---|
425 | 422 | if (card->Active < 0) |
---|
426 | 423 | goto out_unlock; |
---|
427 | 424 | page = &card->mm_pages[card->Active]; |
---|
.. | .. |
---|
448 | 445 | page->iter = page->bio->bi_iter; |
---|
449 | 446 | } |
---|
450 | 447 | |
---|
451 | | - pci_unmap_page(card->dev, desc->data_dma_handle, |
---|
| 448 | + dma_unmap_page(&card->dev->dev, desc->data_dma_handle, |
---|
452 | 449 | vec.bv_len, |
---|
453 | 450 | (control & DMASCR_TRANSFER_READ) ? |
---|
454 | | - PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); |
---|
| 451 | + DMA_TO_DEVICE : DMA_FROM_DEVICE); |
---|
455 | 452 | if (control & DMASCR_HARD_ERROR) { |
---|
456 | 453 | /* error */ |
---|
457 | 454 | bio->bi_status = BLK_STS_IOERR; |
---|
.. | .. |
---|
496 | 493 | mm_start_io(card); |
---|
497 | 494 | } |
---|
498 | 495 | out_unlock: |
---|
499 | | - spin_unlock_bh(&card->lock); |
---|
| 496 | + spin_unlock(&card->lock); |
---|
500 | 497 | |
---|
501 | 498 | while (return_bio) { |
---|
502 | 499 | struct bio *bio = return_bio; |
---|
.. | .. |
---|
522 | 519 | return !!blk_check_plugged(mm_unplug, card, sizeof(struct blk_plug_cb)); |
---|
523 | 520 | } |
---|
524 | 521 | |
---|
525 | | -static blk_qc_t mm_make_request(struct request_queue *q, struct bio *bio) |
---|
| 522 | +static blk_qc_t mm_submit_bio(struct bio *bio) |
---|
526 | 523 | { |
---|
527 | | - struct cardinfo *card = q->queuedata; |
---|
| 524 | + struct cardinfo *card = bio->bi_disk->private_data; |
---|
| 525 | + |
---|
528 | 526 | pr_debug("mm_make_request %llu %u\n", |
---|
529 | 527 | (unsigned long long)bio->bi_iter.bi_sector, |
---|
530 | 528 | bio->bi_iter.bi_size); |
---|
531 | 529 | |
---|
532 | | - blk_queue_split(q, &bio); |
---|
| 530 | + blk_queue_split(&bio); |
---|
533 | 531 | |
---|
534 | 532 | spin_lock_irq(&card->lock); |
---|
535 | 533 | *card->biotail = bio; |
---|
.. | .. |
---|
781 | 779 | |
---|
782 | 780 | static const struct block_device_operations mm_fops = { |
---|
783 | 781 | .owner = THIS_MODULE, |
---|
| 782 | + .submit_bio = mm_submit_bio, |
---|
784 | 783 | .getgeo = mm_getgeo, |
---|
785 | 784 | .revalidate_disk = mm_revalidate, |
---|
786 | 785 | }; |
---|
787 | 786 | |
---|
788 | 787 | static int mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) |
---|
789 | 788 | { |
---|
790 | | - int ret = -ENODEV; |
---|
| 789 | + int ret; |
---|
791 | 790 | struct cardinfo *card = &cards[num_cards]; |
---|
792 | 791 | unsigned char mem_present; |
---|
793 | 792 | unsigned char batt_status; |
---|
.. | .. |
---|
817 | 816 | dev_printk(KERN_INFO, &dev->dev, |
---|
818 | 817 | "Micro Memory(tm) controller found (PCI Mem Module (Battery Backup))\n"); |
---|
819 | 818 | |
---|
820 | | - if (pci_set_dma_mask(dev, DMA_BIT_MASK(64)) && |
---|
821 | | - pci_set_dma_mask(dev, DMA_BIT_MASK(32))) { |
---|
| 819 | + if (dma_set_mask(&dev->dev, DMA_BIT_MASK(64)) && |
---|
| 820 | + dma_set_mask(&dev->dev, DMA_BIT_MASK(32))) { |
---|
822 | 821 | dev_printk(KERN_WARNING, &dev->dev, "NO suitable DMA found\n"); |
---|
823 | 822 | return -ENOMEM; |
---|
824 | 823 | } |
---|
.. | .. |
---|
830 | 829 | goto failed_req_csr; |
---|
831 | 830 | } |
---|
832 | 831 | |
---|
833 | | - card->csr_remap = ioremap_nocache(csr_base, csr_len); |
---|
| 832 | + card->csr_remap = ioremap(csr_base, csr_len); |
---|
834 | 833 | if (!card->csr_remap) { |
---|
835 | 834 | dev_printk(KERN_ERR, &card->dev->dev, |
---|
836 | 835 | "Unable to remap memory region\n"); |
---|
.. | .. |
---|
871 | 870 | goto failed_magic; |
---|
872 | 871 | } |
---|
873 | 872 | |
---|
874 | | - card->mm_pages[0].desc = pci_alloc_consistent(card->dev, |
---|
875 | | - PAGE_SIZE * 2, |
---|
876 | | - &card->mm_pages[0].page_dma); |
---|
877 | | - card->mm_pages[1].desc = pci_alloc_consistent(card->dev, |
---|
878 | | - PAGE_SIZE * 2, |
---|
879 | | - &card->mm_pages[1].page_dma); |
---|
| 873 | + card->mm_pages[0].desc = dma_alloc_coherent(&card->dev->dev, |
---|
| 874 | + PAGE_SIZE * 2, &card->mm_pages[0].page_dma, GFP_KERNEL); |
---|
| 875 | + card->mm_pages[1].desc = dma_alloc_coherent(&card->dev->dev, |
---|
| 876 | + PAGE_SIZE * 2, &card->mm_pages[1].page_dma, GFP_KERNEL); |
---|
880 | 877 | if (card->mm_pages[0].desc == NULL || |
---|
881 | 878 | card->mm_pages[1].desc == NULL) { |
---|
882 | 879 | dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); |
---|
| 880 | + ret = -ENOMEM; |
---|
883 | 881 | goto failed_alloc; |
---|
884 | 882 | } |
---|
885 | 883 | reset_page(&card->mm_pages[0]); |
---|
.. | .. |
---|
890 | 888 | card->biotail = &card->bio; |
---|
891 | 889 | spin_lock_init(&card->lock); |
---|
892 | 890 | |
---|
893 | | - card->queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE, |
---|
894 | | - &card->lock); |
---|
895 | | - if (!card->queue) |
---|
| 891 | + card->queue = blk_alloc_queue(NUMA_NO_NODE); |
---|
| 892 | + if (!card->queue) { |
---|
| 893 | + ret = -ENOMEM; |
---|
896 | 894 | goto failed_alloc; |
---|
897 | | - |
---|
898 | | - blk_queue_make_request(card->queue, mm_make_request); |
---|
899 | | - card->queue->queuedata = card; |
---|
| 895 | + } |
---|
900 | 896 | |
---|
901 | 897 | tasklet_init(&card->tasklet, process_page, (unsigned long)card); |
---|
902 | 898 | |
---|
.. | .. |
---|
1002 | 998 | failed_req_irq: |
---|
1003 | 999 | failed_alloc: |
---|
1004 | 1000 | if (card->mm_pages[0].desc) |
---|
1005 | | - pci_free_consistent(card->dev, PAGE_SIZE*2, |
---|
1006 | | - card->mm_pages[0].desc, |
---|
1007 | | - card->mm_pages[0].page_dma); |
---|
| 1001 | + dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, |
---|
| 1002 | + card->mm_pages[0].desc, |
---|
| 1003 | + card->mm_pages[0].page_dma); |
---|
1008 | 1004 | if (card->mm_pages[1].desc) |
---|
1009 | | - pci_free_consistent(card->dev, PAGE_SIZE*2, |
---|
1010 | | - card->mm_pages[1].desc, |
---|
1011 | | - card->mm_pages[1].page_dma); |
---|
| 1005 | + dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, |
---|
| 1006 | + card->mm_pages[1].desc, |
---|
| 1007 | + card->mm_pages[1].page_dma); |
---|
1012 | 1008 | failed_magic: |
---|
1013 | 1009 | iounmap(card->csr_remap); |
---|
1014 | 1010 | failed_remap_csr: |
---|
.. | .. |
---|
1027 | 1023 | iounmap(card->csr_remap); |
---|
1028 | 1024 | |
---|
1029 | 1025 | if (card->mm_pages[0].desc) |
---|
1030 | | - pci_free_consistent(card->dev, PAGE_SIZE*2, |
---|
| 1026 | + dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, |
---|
1031 | 1027 | card->mm_pages[0].desc, |
---|
1032 | 1028 | card->mm_pages[0].page_dma); |
---|
1033 | 1029 | if (card->mm_pages[1].desc) |
---|
1034 | | - pci_free_consistent(card->dev, PAGE_SIZE*2, |
---|
| 1030 | + dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, |
---|
1035 | 1031 | card->mm_pages[1].desc, |
---|
1036 | 1032 | card->mm_pages[1].page_dma); |
---|
1037 | 1033 | blk_cleanup_queue(card->queue); |
---|