Lines Matching refs:card

148 static void check_batteries(struct cardinfo *card);
150 static int get_userbit(struct cardinfo *card, int bit) in get_userbit() argument
154 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in get_userbit()
158 static int set_userbit(struct cardinfo *card, int bit, unsigned char state) in set_userbit() argument
162 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
167 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
175 static void set_led(struct cardinfo *card, int shift, unsigned char state) in set_led() argument
179 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
186 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
191 static void dump_regs(struct cardinfo *card) in dump_regs() argument
196 p = card->csr_remap; in dump_regs()
208 static void dump_dmastat(struct cardinfo *card, unsigned int dmastat) in dump_dmastat() argument
210 dev_printk(KERN_DEBUG, &card->dev->dev, "DMAstat - "); in dump_dmastat()
252 static void mm_start_io(struct cardinfo *card) in mm_start_io() argument
263 page = &card->mm_pages[card->Active]; in mm_start_io()
265 card->Active, page->headcnt, page->cnt - 1); in mm_start_io()
274 set_led(card, LED_REMOVE, LED_ON); in mm_start_io()
277 writel(0, card->csr_remap + DMA_PCI_ADDR); in mm_start_io()
278 writel(0, card->csr_remap + DMA_PCI_ADDR + 4); in mm_start_io()
280 writel(0, card->csr_remap + DMA_LOCAL_ADDR); in mm_start_io()
281 writel(0, card->csr_remap + DMA_LOCAL_ADDR + 4); in mm_start_io()
283 writel(0, card->csr_remap + DMA_TRANSFER_SIZE); in mm_start_io()
284 writel(0, card->csr_remap + DMA_TRANSFER_SIZE + 4); in mm_start_io()
286 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR); in mm_start_io()
287 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR + 4); in mm_start_io()
291 card->csr_remap + DMA_DESCRIPTOR_ADDR); in mm_start_io()
295 card->csr_remap + DMA_DESCRIPTOR_ADDR + 4); in mm_start_io()
299 card->csr_remap + DMA_STATUS_CTRL); in mm_start_io()
302 static int add_bio(struct cardinfo *card);
304 static void activate(struct cardinfo *card) in activate() argument
313 while (add_bio(card)) in activate()
316 if (card->Active == -1 && in activate()
317 card->mm_pages[card->Ready].cnt > 0) { in activate()
318 card->Active = card->Ready; in activate()
319 card->Ready = 1-card->Ready; in activate()
320 mm_start_io(card); in activate()
323 } while (card->Active == -1 && add_bio(card)); in activate()
339 static int add_bio(struct cardinfo *card) in add_bio() argument
349 bio = card->currentbio; in add_bio()
350 if (!bio && card->bio) { in add_bio()
351 card->currentbio = card->bio; in add_bio()
352 card->current_iter = card->bio->bi_iter; in add_bio()
353 card->bio = card->bio->bi_next; in add_bio()
354 if (card->bio == NULL) in add_bio()
355 card->biotail = &card->bio; in add_bio()
356 card->currentbio->bi_next = NULL; in add_bio()
363 if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE) in add_bio()
366 vec = bio_iter_iovec(bio, card->current_iter); in add_bio()
368 dma_handle = pci_map_page(card->dev, in add_bio()
375 p = &card->mm_pages[card->Ready]; in add_bio()
379 p->iter = card->current_iter; in add_bio()
389 desc->local_addr = cpu_to_le64(card->current_iter.bi_sector << 9); in add_bio()
406 bio_advance_iter(bio, &card->current_iter, vec.bv_len); in add_bio()
407 if (!card->current_iter.bi_size) in add_bio()
408 card->currentbio = NULL; in add_bio()
423 struct cardinfo *card = (struct cardinfo *)data; in process_page() local
424 unsigned int dma_status = card->dma_status; in process_page()
426 spin_lock_bh(&card->lock); in process_page()
427 if (card->Active < 0) in process_page()
429 page = &card->mm_pages[card->Active]; in process_page()
453 pci_unmap_page(card->dev, desc->data_dma_handle, in process_page()
460 dev_printk(KERN_WARNING, &card->dev->dev, in process_page()
464 dump_dmastat(card, control); in process_page()
467 card->init_size) { in process_page()
468 card->init_size += le32_to_cpu(desc->transfer_size) >> 9; in process_page()
469 if (card->init_size >> 1 >= card->mm_size) { in process_page()
470 dev_printk(KERN_INFO, &card->dev->dev, in process_page()
472 set_userbit(card, MEMORY_INITIALIZED, 1); in process_page()
485 set_led(card, LED_REMOVE, LED_OFF); in process_page()
487 if (card->check_batteries) { in process_page()
488 card->check_batteries = 0; in process_page()
489 check_batteries(card); in process_page()
493 card->Active = -1; in process_page()
494 activate(card); in process_page()
498 mm_start_io(card); in process_page()
501 spin_unlock_bh(&card->lock); in process_page()
514 struct cardinfo *card = cb->data; in mm_unplug() local
516 spin_lock_irq(&card->lock); in mm_unplug()
517 activate(card); in mm_unplug()
518 spin_unlock_irq(&card->lock); in mm_unplug()
522 static int mm_check_plugged(struct cardinfo *card) in mm_check_plugged() argument
524 return !!blk_check_plugged(mm_unplug, card, sizeof(struct blk_plug_cb)); in mm_check_plugged()
529 struct cardinfo *card = q->queuedata; in mm_make_request() local
534 spin_lock_irq(&card->lock); in mm_make_request()
535 *card->biotail = bio; in mm_make_request()
537 card->biotail = &bio->bi_next; in mm_make_request()
538 if (bio->bi_rw & REQ_SYNC || !mm_check_plugged(card)) in mm_make_request()
539 activate(card); in mm_make_request()
540 spin_unlock_irq(&card->lock); in mm_make_request()
547 struct cardinfo *card = (struct cardinfo *) __card; in mm_interrupt() local
553 dma_status = le32_to_cpu(readl(card->csr_remap + DMA_STATUS_CTRL)); in mm_interrupt()
561 if (card->flags & UM_FLAG_NO_BYTE_STATUS) in mm_interrupt()
563 card->csr_remap + DMA_STATUS_CTRL); in mm_interrupt()
566 card->csr_remap + DMA_STATUS_CTRL + 2); in mm_interrupt()
574 stat = readb(card->csr_remap + MEMCTRLCMD_ERRSTATUS); in mm_interrupt()
576 data_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
578 data_log2 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
580 addr_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
582 addr_log2 = readb(card->csr_remap + ERROR_ADDR_LOG + 4); in mm_interrupt()
584 count = readb(card->csr_remap + ERROR_COUNT); in mm_interrupt()
585 syndrome = readb(card->csr_remap + ERROR_SYNDROME); in mm_interrupt()
586 check = readb(card->csr_remap + ERROR_CHECK); in mm_interrupt()
588 dump_dmastat(card, dma_status); in mm_interrupt()
591 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
595 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
598 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
601 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
605 writeb(0, card->csr_remap + ERROR_COUNT); in mm_interrupt()
609 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
611 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
612 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
616 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
618 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
619 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
623 dev_printk(KERN_ERR, &card->dev->dev, "SYSTEM ERROR\n"); in mm_interrupt()
624 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
625 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
629 dev_printk(KERN_ERR, &card->dev->dev, "TARGET ABORT\n"); in mm_interrupt()
630 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
631 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
635 dev_printk(KERN_ERR, &card->dev->dev, "MASTER ABORT\n"); in mm_interrupt()
636 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
637 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
641 card->dma_status = dma_status; in mm_interrupt()
642 tasklet_schedule(&card->tasklet); in mm_interrupt()
655 static void set_fault_to_battery_status(struct cardinfo *card) in set_fault_to_battery_status() argument
657 if (card->battery[0].good && card->battery[1].good) in set_fault_to_battery_status()
658 set_led(card, LED_FAULT, LED_OFF); in set_fault_to_battery_status()
659 else if (card->battery[0].warned || card->battery[1].warned) in set_fault_to_battery_status()
660 set_led(card, LED_FAULT, LED_ON); in set_fault_to_battery_status()
661 else if (!card->battery[0].good && !card->battery[1].good) in set_fault_to_battery_status()
662 set_led(card, LED_FAULT, LED_FLASH_7_0); in set_fault_to_battery_status()
664 set_led(card, LED_FAULT, LED_FLASH_3_5); in set_fault_to_battery_status()
669 static int check_battery(struct cardinfo *card, int battery, int status) in check_battery() argument
671 if (status != card->battery[battery].good) { in check_battery()
672 card->battery[battery].good = !card->battery[battery].good; in check_battery()
673 card->battery[battery].last_change = jiffies; in check_battery()
675 if (card->battery[battery].good) { in check_battery()
676 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
678 card->battery[battery].warned = 0; in check_battery()
680 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
684 } else if (!card->battery[battery].good && in check_battery()
685 !card->battery[battery].warned && in check_battery()
686 time_after_eq(jiffies, card->battery[battery].last_change + in check_battery()
688 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
690 card->battery[battery].warned = 1; in check_battery()
698 static void check_batteries(struct cardinfo *card) in check_batteries() argument
707 status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in check_batteries()
709 dev_printk(KERN_DEBUG, &card->dev->dev, in check_batteries()
714 ret1 = check_battery(card, 0, !(status & BATTERY_1_FAILURE)); in check_batteries()
715 ret2 = check_battery(card, 1, !(status & BATTERY_2_FAILURE)); in check_batteries()
718 set_fault_to_battery_status(card); in check_batteries()
727 struct cardinfo *card = &cards[i]; in check_all_batteries() local
728 spin_lock_bh(&card->lock); in check_all_batteries()
729 if (card->Active >= 0) in check_all_batteries()
730 card->check_batteries = 1; in check_all_batteries()
732 check_batteries(card); in check_all_batteries()
733 spin_unlock_bh(&card->lock); in check_all_batteries()
762 struct cardinfo *card = disk->private_data; in mm_revalidate() local
763 set_capacity(disk, card->mm_size << 1); in mm_revalidate()
769 struct cardinfo *card = bdev->bd_disk->private_data; in mm_getgeo() local
770 int size = card->mm_size * (1024 / MM_HARDSECT); in mm_getgeo()
792 struct cardinfo *card = &cards[num_cards]; in mm_pci_probe() local
811 card->dev = dev; in mm_pci_probe()
829 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
834 card->csr_remap = ioremap_nocache(csr_base, csr_len); in mm_pci_probe()
835 if (!card->csr_remap) { in mm_pci_probe()
836 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
843 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
845 csr_base, card->csr_remap, csr_len); in mm_pci_probe()
847 switch (card->dev->device) { in mm_pci_probe()
849 card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; in mm_pci_probe()
854 card->flags |= UM_FLAG_NO_BYTE_STATUS; in mm_pci_probe()
859 card->flags |= UM_FLAG_NO_BYTE_STATUS | in mm_pci_probe()
869 if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { in mm_pci_probe()
870 dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); in mm_pci_probe()
875 card->mm_pages[0].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
877 &card->mm_pages[0].page_dma); in mm_pci_probe()
878 card->mm_pages[1].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
880 &card->mm_pages[1].page_dma); in mm_pci_probe()
881 if (card->mm_pages[0].desc == NULL || in mm_pci_probe()
882 card->mm_pages[1].desc == NULL) { in mm_pci_probe()
883 dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); in mm_pci_probe()
886 reset_page(&card->mm_pages[0]); in mm_pci_probe()
887 reset_page(&card->mm_pages[1]); in mm_pci_probe()
888 card->Ready = 0; /* page 0 is ready */ in mm_pci_probe()
889 card->Active = -1; /* no page is active */ in mm_pci_probe()
890 card->bio = NULL; in mm_pci_probe()
891 card->biotail = &card->bio; in mm_pci_probe()
893 card->queue = blk_alloc_queue(GFP_KERNEL); in mm_pci_probe()
894 if (!card->queue) in mm_pci_probe()
897 blk_queue_make_request(card->queue, mm_make_request); in mm_pci_probe()
898 card->queue->queue_lock = &card->lock; in mm_pci_probe()
899 card->queue->queuedata = card; in mm_pci_probe()
901 tasklet_init(&card->tasklet, process_page, (unsigned long)card); in mm_pci_probe()
903 card->check_batteries = 0; in mm_pci_probe()
905 mem_present = readb(card->csr_remap + MEMCTRLSTATUS_MEMORY); in mm_pci_probe()
908 card->mm_size = 1024 * 128; in mm_pci_probe()
911 card->mm_size = 1024 * 256; in mm_pci_probe()
914 card->mm_size = 1024 * 512; in mm_pci_probe()
917 card->mm_size = 1024 * 1024; in mm_pci_probe()
920 card->mm_size = 1024 * 2048; in mm_pci_probe()
923 card->mm_size = 0; in mm_pci_probe()
928 set_led(card, LED_REMOVE, LED_OFF); in mm_pci_probe()
929 set_led(card, LED_FAULT, LED_OFF); in mm_pci_probe()
931 batt_status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in mm_pci_probe()
933 card->battery[0].good = !(batt_status & BATTERY_1_FAILURE); in mm_pci_probe()
934 card->battery[1].good = !(batt_status & BATTERY_2_FAILURE); in mm_pci_probe()
935 card->battery[0].last_change = card->battery[1].last_change = jiffies; in mm_pci_probe()
937 if (card->flags & UM_FLAG_NO_BATT) in mm_pci_probe()
938 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
939 "Size %d KB\n", card->mm_size); in mm_pci_probe()
941 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
943 card->mm_size, in mm_pci_probe()
945 card->battery[0].good ? "OK" : "FAILURE", in mm_pci_probe()
947 card->battery[1].good ? "OK" : "FAILURE"); in mm_pci_probe()
949 set_fault_to_battery_status(card); in mm_pci_probe()
962 card)) { in mm_pci_probe()
963 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
969 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
972 spin_lock_init(&card->lock); in mm_pci_probe()
974 pci_set_drvdata(dev, card); in mm_pci_probe()
989 if (!get_userbit(card, MEMORY_INITIALIZED)) { in mm_pci_probe()
990 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
992 card->init_size = 0; in mm_pci_probe()
994 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
996 card->init_size = card->mm_size; in mm_pci_probe()
1000 writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL); in mm_pci_probe()
1006 if (card->mm_pages[0].desc) in mm_pci_probe()
1007 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1008 card->mm_pages[0].desc, in mm_pci_probe()
1009 card->mm_pages[0].page_dma); in mm_pci_probe()
1010 if (card->mm_pages[1].desc) in mm_pci_probe()
1011 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1012 card->mm_pages[1].desc, in mm_pci_probe()
1013 card->mm_pages[1].page_dma); in mm_pci_probe()
1015 iounmap(card->csr_remap); in mm_pci_probe()
1025 struct cardinfo *card = pci_get_drvdata(dev); in mm_pci_remove() local
1027 tasklet_kill(&card->tasklet); in mm_pci_remove()
1028 free_irq(dev->irq, card); in mm_pci_remove()
1029 iounmap(card->csr_remap); in mm_pci_remove()
1031 if (card->mm_pages[0].desc) in mm_pci_remove()
1032 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1033 card->mm_pages[0].desc, in mm_pci_remove()
1034 card->mm_pages[0].page_dma); in mm_pci_remove()
1035 if (card->mm_pages[1].desc) in mm_pci_remove()
1036 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1037 card->mm_pages[1].desc, in mm_pci_remove()
1038 card->mm_pages[1].page_dma); in mm_pci_remove()
1039 blk_cleanup_queue(card->queue); in mm_pci_remove()