| .. | .. |
|---|
| 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); |
|---|