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
348 bio = card->currentbio; in add_bio()
349 if (!bio && card->bio) { in add_bio()
350 card->currentbio = card->bio; in add_bio()
351 card->current_iter = card->bio->bi_iter; in add_bio()
352 card->bio = card->bio->bi_next; in add_bio()
353 if (card->bio == NULL) in add_bio()
354 card->biotail = &card->bio; in add_bio()
355 card->currentbio->bi_next = NULL; in add_bio()
361 if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE) in add_bio()
364 vec = bio_iter_iovec(bio, card->current_iter); in add_bio()
366 dma_handle = pci_map_page(card->dev, in add_bio()
373 p = &card->mm_pages[card->Ready]; in add_bio()
377 p->iter = card->current_iter; in add_bio()
387 desc->local_addr = cpu_to_le64(card->current_iter.bi_sector << 9); in add_bio()
404 bio_advance_iter(bio, &card->current_iter, vec.bv_len); in add_bio()
405 if (!card->current_iter.bi_size) in add_bio()
406 card->currentbio = NULL; in add_bio()
421 struct cardinfo *card = (struct cardinfo *)data; in process_page() local
422 unsigned int dma_status = card->dma_status; in process_page()
424 spin_lock_bh(&card->lock); in process_page()
425 if (card->Active < 0) in process_page()
427 page = &card->mm_pages[card->Active]; in process_page()
451 pci_unmap_page(card->dev, desc->data_dma_handle, in process_page()
458 dev_printk(KERN_WARNING, &card->dev->dev, in process_page()
462 dump_dmastat(card, control); in process_page()
465 card->init_size) { in process_page()
466 card->init_size += le32_to_cpu(desc->transfer_size) >> 9; in process_page()
467 if (card->init_size >> 1 >= card->mm_size) { in process_page()
468 dev_printk(KERN_INFO, &card->dev->dev, in process_page()
470 set_userbit(card, MEMORY_INITIALIZED, 1); in process_page()
483 set_led(card, LED_REMOVE, LED_OFF); in process_page()
485 if (card->check_batteries) { in process_page()
486 card->check_batteries = 0; in process_page()
487 check_batteries(card); in process_page()
491 card->Active = -1; in process_page()
492 activate(card); in process_page()
496 mm_start_io(card); in process_page()
499 spin_unlock_bh(&card->lock); in process_page()
512 struct cardinfo *card = cb->data; in mm_unplug() local
514 spin_lock_irq(&card->lock); in mm_unplug()
515 activate(card); in mm_unplug()
516 spin_unlock_irq(&card->lock); in mm_unplug()
520 static int mm_check_plugged(struct cardinfo *card) in mm_check_plugged() argument
522 return !!blk_check_plugged(mm_unplug, card, sizeof(struct blk_plug_cb)); in mm_check_plugged()
527 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 (op_is_sync(bio->bi_opf) || !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()
761 struct cardinfo *card = disk->private_data; in mm_revalidate() local
762 set_capacity(disk, card->mm_size << 1); in mm_revalidate()
768 struct cardinfo *card = bdev->bd_disk->private_data; in mm_getgeo() local
769 int size = card->mm_size * (1024 / MM_HARDSECT); in mm_getgeo()
791 struct cardinfo *card = &cards[num_cards]; in mm_pci_probe() local
810 card->dev = dev; in mm_pci_probe()
828 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
833 card->csr_remap = ioremap_nocache(csr_base, csr_len); in mm_pci_probe()
834 if (!card->csr_remap) { in mm_pci_probe()
835 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
842 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
844 csr_base, card->csr_remap, csr_len); in mm_pci_probe()
846 switch (card->dev->device) { in mm_pci_probe()
848 card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; in mm_pci_probe()
853 card->flags |= UM_FLAG_NO_BYTE_STATUS; in mm_pci_probe()
858 card->flags |= UM_FLAG_NO_BYTE_STATUS | in mm_pci_probe()
868 if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { in mm_pci_probe()
869 dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); in mm_pci_probe()
874 card->mm_pages[0].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
876 &card->mm_pages[0].page_dma); in mm_pci_probe()
877 card->mm_pages[1].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
879 &card->mm_pages[1].page_dma); in mm_pci_probe()
880 if (card->mm_pages[0].desc == NULL || in mm_pci_probe()
881 card->mm_pages[1].desc == NULL) { in mm_pci_probe()
882 dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); in mm_pci_probe()
885 reset_page(&card->mm_pages[0]); in mm_pci_probe()
886 reset_page(&card->mm_pages[1]); in mm_pci_probe()
887 card->Ready = 0; /* page 0 is ready */ in mm_pci_probe()
888 card->Active = -1; /* no page is active */ in mm_pci_probe()
889 card->bio = NULL; in mm_pci_probe()
890 card->biotail = &card->bio; in mm_pci_probe()
891 spin_lock_init(&card->lock); in mm_pci_probe()
893 card->queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE, in mm_pci_probe()
894 &card->lock); in mm_pci_probe()
895 if (!card->queue) in mm_pci_probe()
898 blk_queue_make_request(card->queue, mm_make_request); 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 pci_set_drvdata(dev, card); in mm_pci_probe()
987 if (!get_userbit(card, MEMORY_INITIALIZED)) { in mm_pci_probe()
988 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
990 card->init_size = 0; in mm_pci_probe()
992 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
994 card->init_size = card->mm_size; in mm_pci_probe()
998 writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL); in mm_pci_probe()
1004 if (card->mm_pages[0].desc) in mm_pci_probe()
1005 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1006 card->mm_pages[0].desc, in mm_pci_probe()
1007 card->mm_pages[0].page_dma); in mm_pci_probe()
1008 if (card->mm_pages[1].desc) in mm_pci_probe()
1009 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1010 card->mm_pages[1].desc, in mm_pci_probe()
1011 card->mm_pages[1].page_dma); in mm_pci_probe()
1013 iounmap(card->csr_remap); in mm_pci_probe()
1023 struct cardinfo *card = pci_get_drvdata(dev); in mm_pci_remove() local
1025 tasklet_kill(&card->tasklet); in mm_pci_remove()
1026 free_irq(dev->irq, card); in mm_pci_remove()
1027 iounmap(card->csr_remap); in mm_pci_remove()
1029 if (card->mm_pages[0].desc) in mm_pci_remove()
1030 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1031 card->mm_pages[0].desc, in mm_pci_remove()
1032 card->mm_pages[0].page_dma); in mm_pci_remove()
1033 if (card->mm_pages[1].desc) in mm_pci_remove()
1034 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1035 card->mm_pages[1].desc, in mm_pci_remove()
1036 card->mm_pages[1].page_dma); in mm_pci_remove()
1037 blk_cleanup_queue(card->queue); in mm_pci_remove()