Drop 'size' argument from bio_endio and bi_end_io
[deliverable/linux.git] / drivers / block / umem.c
index 6f5d6203d725a510eb4f82dc2ab7a82409b03549..be7fac86725e21c27957ea9f5737fa68b87a59fd 100644 (file)
@@ -105,12 +105,6 @@ struct cardinfo {
        unsigned long   csr_base;
        unsigned char   __iomem *csr_remap;
        unsigned long   csr_len;
-#ifdef CONFIG_MM_MAP_MEMORY
-       unsigned long   mem_base;
-       unsigned char   __iomem *mem_remap;
-       unsigned long   mem_len;
-#endif
-
        unsigned int    win_size; /* PCI window size */
        unsigned int    mm_size;  /* size in kbytes */
 
@@ -119,14 +113,17 @@ struct cardinfo {
                                    * have been written
                                    */
        struct bio      *bio, *currentbio, **biotail;
+       int             current_idx;
+       sector_t        current_sector;
 
-       request_queue_t *queue;
+       struct request_queue *queue;
 
        struct mm_page {
                dma_addr_t              page_dma;
                struct mm_dma_desc      *desc;
                int                     cnt, headcnt;
                struct bio              *bio, **biotail;
+               int                     idx;
        } mm_pages[2];
 #define DESC_PER_PAGE ((PAGE_SIZE*2)/sizeof(struct mm_dma_desc))
 
@@ -363,7 +360,7 @@ static inline void reset_page(struct mm_page *page)
        page->biotail = & page->bio;
 }
 
-static void mm_unplug_device(request_queue_t *q)
+static void mm_unplug_device(struct request_queue *q)
 {
        struct cardinfo *card = q->queuedata;
        unsigned long flags;
@@ -386,12 +383,16 @@ static int add_bio(struct cardinfo *card)
        dma_addr_t dma_handle;
        int offset;
        struct bio *bio;
+       struct bio_vec *vec;
+       int idx;
        int rw;
        int len;
 
        bio = card->currentbio;
        if (!bio && card->bio) {
                card->currentbio = card->bio;
+               card->current_idx = card->bio->bi_idx;
+               card->current_sector = card->bio->bi_sector;
                card->bio = card->bio->bi_next;
                if (card->bio == NULL)
                        card->biotail = &card->bio;
@@ -400,15 +401,17 @@ static int add_bio(struct cardinfo *card)
        }
        if (!bio)
                return 0;
+       idx = card->current_idx;
 
        rw = bio_rw(bio);
        if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE)
                return 0;
 
-       len = bio_iovec(bio)->bv_len;
-       dma_handle = pci_map_page(card->dev, 
-                                 bio_page(bio),
-                                 bio_offset(bio),
+       vec = bio_iovec_idx(bio, idx);
+       len = vec->bv_len;
+       dma_handle = pci_map_page(card->dev,
+                                 vec->bv_page,
+                                 vec->bv_offset,
                                  len,
                                  (rw==READ) ?
                                  PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE);
@@ -416,6 +419,8 @@ static int add_bio(struct cardinfo *card)
        p = &card->mm_pages[card->Ready];
        desc = &p->desc[p->cnt];
        p->cnt++;
+       if (p->bio == NULL)
+               p->idx = idx;
        if ((p->biotail) != &bio->bi_next) {
                *(p->biotail) = bio;
                p->biotail = &(bio->bi_next);
@@ -425,7 +430,7 @@ static int add_bio(struct cardinfo *card)
        desc->data_dma_handle = dma_handle;
 
        desc->pci_addr = cpu_to_le64((u64)desc->data_dma_handle);
-       desc->local_addr= cpu_to_le64(bio->bi_sector << 9);
+       desc->local_addr = cpu_to_le64(card->current_sector << 9);
        desc->transfer_size = cpu_to_le32(len);
        offset = ( ((char*)&desc->sem_control_bits) - ((char*)p->desc));
        desc->sem_addr = cpu_to_le64((u64)(p->page_dma+offset));
@@ -441,10 +446,10 @@ static int add_bio(struct cardinfo *card)
                desc->control_bits |= cpu_to_le32(DMASCR_TRANSFER_READ);
        desc->sem_control_bits = desc->control_bits;
 
-       bio->bi_sector += (len>>9);
-       bio->bi_size -= len;
-       bio->bi_idx++;
-       if (bio->bi_idx >= bio->bi_vcnt) 
+       card->current_sector += (len >> 9);
+       idx++;
+       card->current_idx = idx;
+       if (idx >= bio->bi_vcnt)
                card->currentbio = NULL;
 
        return 1;
@@ -480,10 +485,12 @@ static void process_page(unsigned long data)
                        last=1; 
                }
                page->headcnt++;
-               idx = bio->bi_phys_segments;
-               bio->bi_phys_segments++;
-               if (bio->bi_phys_segments >= bio->bi_vcnt)
+               idx = page->idx;
+               page->idx++;
+               if (page->idx >= bio->bi_vcnt) {
                        page->bio = bio->bi_next;
+                       page->idx = page->bio->bi_idx;
+               }
 
                pci_unmap_page(card->dev, desc->data_dma_handle, 
                               bio_iovec_idx(bio,idx)->bv_len,
@@ -538,7 +545,7 @@ static void process_page(unsigned long data)
 
                return_bio = bio->bi_next;
                bio->bi_next = NULL;
-               bio_endio(bio, bio->bi_size, 0);
+               bio_endio(bio, 0);
        }
 }
 
@@ -547,13 +554,12 @@ static void process_page(unsigned long data)
 --                              mm_make_request
 -----------------------------------------------------------------------------------
 */
-static int mm_make_request(request_queue_t *q, struct bio *bio)
+static int mm_make_request(struct request_queue *q, struct bio *bio)
 {
        struct cardinfo *card = q->queuedata;
        pr_debug("mm_make_request %llu %u\n",
                 (unsigned long long)bio->bi_sector, bio->bi_size);
 
-       bio->bi_phys_segments = bio->bi_idx; /* count of completed segments*/
        spin_lock_irq(&card->lock);
        *card->biotail = bio;
        bio->bi_next = NULL;
@@ -872,10 +878,6 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
 
        card->csr_base = pci_resource_start(dev, 0);
        card->csr_len  = pci_resource_len(dev, 0);
-#ifdef CONFIG_MM_MAP_MEMORY
-       card->mem_base = pci_resource_start(dev, 1);
-       card->mem_len  = pci_resource_len(dev, 1);
-#endif
 
        printk(KERN_INFO "Micro Memory(tm) controller #%d found at %02x:%02x (PCI Mem Module (Battery Backup))\n",
               card->card_number, dev->bus->number, dev->devfn);
@@ -903,27 +905,6 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
        printk(KERN_INFO "MM%d: CSR 0x%08lx -> 0x%p (0x%lx)\n", card->card_number,
               card->csr_base, card->csr_remap, card->csr_len);
 
-#ifdef CONFIG_MM_MAP_MEMORY
-       if (!request_mem_region(card->mem_base, card->mem_len, "Micro Memory")) {
-               printk(KERN_ERR "MM%d: Unable to request memory region\n", card->card_number);
-               ret = -ENOMEM;
-
-               goto failed_req_mem;
-       }
-
-       if (!(card->mem_remap = ioremap(card->mem_base, cards->mem_len))) {
-               printk(KERN_ERR "MM%d: Unable to remap memory region\n", card->card_number);
-               ret = -ENOMEM;
-
-               goto failed_remap_mem;
-       }
-
-       printk(KERN_INFO "MM%d: MEM 0x%8lx -> 0x%8lx (0x%lx)\n", card->card_number,
-              card->mem_base, card->mem_remap, card->mem_len);
-#else
-       printk(KERN_INFO "MM%d: MEM area not remapped (CONFIG_MM_MAP_MEMORY not set)\n",
-              card->card_number);
-#endif
        switch(card->dev->device) {
        case 0x5415:
                card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG;
@@ -1091,12 +1072,6 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_i
                                    card->mm_pages[1].desc,
                                    card->mm_pages[1].page_dma);
  failed_magic:
-#ifdef CONFIG_MM_MAP_MEMORY
-       iounmap(card->mem_remap);
- failed_remap_mem:
-       release_mem_region(card->mem_base, card->mem_len);
- failed_req_mem:
-#endif
        iounmap(card->csr_remap);
  failed_remap_csr:
        release_mem_region(card->csr_base, card->csr_len);
@@ -1116,10 +1091,6 @@ static void mm_pci_remove(struct pci_dev *dev)
        tasklet_kill(&card->tasklet);
        iounmap(card->csr_remap);
        release_mem_region(card->csr_base, card->csr_len);
-#ifdef CONFIG_MM_MAP_MEMORY
-       iounmap(card->mem_remap);
-       release_mem_region(card->mem_base, card->mem_len);
-#endif
        free_irq(card->irq, card);
 
        if (card->mm_pages[0].desc)
@@ -1133,23 +1104,18 @@ static void mm_pci_remove(struct pci_dev *dev)
        blk_cleanup_queue(card->queue);
 }
 
-static const struct pci_device_id mm_pci_ids[] = { {
-       .vendor =       PCI_VENDOR_ID_MICRO_MEMORY,
-       .device =       PCI_DEVICE_ID_MICRO_MEMORY_5415CN,
-       }, {
-       .vendor =       PCI_VENDOR_ID_MICRO_MEMORY,
-       .device =       PCI_DEVICE_ID_MICRO_MEMORY_5425CN,
-       }, {
-       .vendor =       PCI_VENDOR_ID_MICRO_MEMORY,
-       .device =       PCI_DEVICE_ID_MICRO_MEMORY_6155,
-       }, {
+static const struct pci_device_id mm_pci_ids[] = {
+    {PCI_DEVICE(PCI_VENDOR_ID_MICRO_MEMORY,PCI_DEVICE_ID_MICRO_MEMORY_5415CN)},
+    {PCI_DEVICE(PCI_VENDOR_ID_MICRO_MEMORY,PCI_DEVICE_ID_MICRO_MEMORY_5425CN)},
+    {PCI_DEVICE(PCI_VENDOR_ID_MICRO_MEMORY,PCI_DEVICE_ID_MICRO_MEMORY_6155)},
+    {
        .vendor =       0x8086,
        .device =       0xB555,
        .subvendor=     0x1332,
        .subdevice=     0x5460,
        .class  =       0x050000,
        .class_mask=    0,
-       }, { /* end: all zeroes */ }
+    }, { /* end: all zeroes */ }
 };
 
 MODULE_DEVICE_TABLE(pci, mm_pci_ids);
This page took 0.064478 seconds and 5 git commands to generate.