Lines Matching refs:card
145 static void check_batteries(struct cardinfo *card);
147 static int get_userbit(struct cardinfo *card, int bit) in get_userbit() argument
151 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in get_userbit()
155 static int set_userbit(struct cardinfo *card, int bit, unsigned char state) in set_userbit() argument
159 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
164 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
172 static void set_led(struct cardinfo *card, int shift, unsigned char state) in set_led() argument
176 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
183 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
188 static void dump_regs(struct cardinfo *card) in dump_regs() argument
193 p = card->csr_remap; in dump_regs()
205 static void dump_dmastat(struct cardinfo *card, unsigned int dmastat) in dump_dmastat() argument
207 dev_printk(KERN_DEBUG, &card->dev->dev, "DMAstat - "); in dump_dmastat()
249 static void mm_start_io(struct cardinfo *card) in mm_start_io() argument
260 page = &card->mm_pages[card->Active]; in mm_start_io()
262 card->Active, page->headcnt, page->cnt - 1); in mm_start_io()
271 set_led(card, LED_REMOVE, LED_ON); in mm_start_io()
274 writel(0, card->csr_remap + DMA_PCI_ADDR); in mm_start_io()
275 writel(0, card->csr_remap + DMA_PCI_ADDR + 4); in mm_start_io()
277 writel(0, card->csr_remap + DMA_LOCAL_ADDR); in mm_start_io()
278 writel(0, card->csr_remap + DMA_LOCAL_ADDR + 4); in mm_start_io()
280 writel(0, card->csr_remap + DMA_TRANSFER_SIZE); in mm_start_io()
281 writel(0, card->csr_remap + DMA_TRANSFER_SIZE + 4); in mm_start_io()
283 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR); in mm_start_io()
284 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR + 4); in mm_start_io()
288 card->csr_remap + DMA_DESCRIPTOR_ADDR); in mm_start_io()
292 card->csr_remap + DMA_DESCRIPTOR_ADDR + 4); in mm_start_io()
296 card->csr_remap + DMA_STATUS_CTRL); in mm_start_io()
299 static int add_bio(struct cardinfo *card);
301 static void activate(struct cardinfo *card) in activate() argument
310 while (add_bio(card)) in activate()
313 if (card->Active == -1 && in activate()
314 card->mm_pages[card->Ready].cnt > 0) { in activate()
315 card->Active = card->Ready; in activate()
316 card->Ready = 1-card->Ready; in activate()
317 mm_start_io(card); in activate()
320 } while (card->Active == -1 && add_bio(card)); in activate()
336 static int add_bio(struct cardinfo *card) in add_bio() argument
345 bio = card->currentbio; in add_bio()
346 if (!bio && card->bio) { in add_bio()
347 card->currentbio = card->bio; in add_bio()
348 card->current_iter = card->bio->bi_iter; in add_bio()
349 card->bio = card->bio->bi_next; in add_bio()
350 if (card->bio == NULL) in add_bio()
351 card->biotail = &card->bio; in add_bio()
352 card->currentbio->bi_next = NULL; in add_bio()
358 if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE) in add_bio()
361 vec = bio_iter_iovec(bio, card->current_iter); in add_bio()
363 dma_handle = dma_map_page(&card->dev->dev, in add_bio()
370 p = &card->mm_pages[card->Ready]; in add_bio()
374 p->iter = card->current_iter; in add_bio()
384 desc->local_addr = cpu_to_le64(card->current_iter.bi_sector << 9); in add_bio()
401 bio_advance_iter(bio, &card->current_iter, vec.bv_len); in add_bio()
402 if (!card->current_iter.bi_size) in add_bio()
403 card->currentbio = NULL; in add_bio()
418 struct cardinfo *card = (struct cardinfo *)data; in process_page() local
419 unsigned int dma_status = card->dma_status; in process_page()
421 spin_lock(&card->lock); in process_page()
422 if (card->Active < 0) in process_page()
424 page = &card->mm_pages[card->Active]; in process_page()
448 dma_unmap_page(&card->dev->dev, desc->data_dma_handle, in process_page()
455 dev_printk(KERN_WARNING, &card->dev->dev, in process_page()
459 dump_dmastat(card, control); in process_page()
462 card->init_size) { in process_page()
463 card->init_size += le32_to_cpu(desc->transfer_size) >> 9; in process_page()
464 if (card->init_size >> 1 >= card->mm_size) { in process_page()
465 dev_printk(KERN_INFO, &card->dev->dev, in process_page()
467 set_userbit(card, MEMORY_INITIALIZED, 1); in process_page()
480 set_led(card, LED_REMOVE, LED_OFF); in process_page()
482 if (card->check_batteries) { in process_page()
483 card->check_batteries = 0; in process_page()
484 check_batteries(card); in process_page()
488 card->Active = -1; in process_page()
489 activate(card); in process_page()
493 mm_start_io(card); in process_page()
496 spin_unlock(&card->lock); in process_page()
509 struct cardinfo *card = cb->data; in mm_unplug() local
511 spin_lock_irq(&card->lock); in mm_unplug()
512 activate(card); in mm_unplug()
513 spin_unlock_irq(&card->lock); in mm_unplug()
517 static int mm_check_plugged(struct cardinfo *card) in mm_check_plugged() argument
519 return !!blk_check_plugged(mm_unplug, card, sizeof(struct blk_plug_cb)); in mm_check_plugged()
524 struct cardinfo *card = bio->bi_disk->private_data; in mm_submit_bio() local
532 spin_lock_irq(&card->lock); in mm_submit_bio()
533 *card->biotail = bio; in mm_submit_bio()
535 card->biotail = &bio->bi_next; in mm_submit_bio()
536 if (op_is_sync(bio->bi_opf) || !mm_check_plugged(card)) in mm_submit_bio()
537 activate(card); in mm_submit_bio()
538 spin_unlock_irq(&card->lock); in mm_submit_bio()
545 struct cardinfo *card = (struct cardinfo *) __card; in mm_interrupt() local
551 dma_status = le32_to_cpu(readl(card->csr_remap + DMA_STATUS_CTRL)); in mm_interrupt()
559 if (card->flags & UM_FLAG_NO_BYTE_STATUS) in mm_interrupt()
561 card->csr_remap + DMA_STATUS_CTRL); in mm_interrupt()
564 card->csr_remap + DMA_STATUS_CTRL + 2); in mm_interrupt()
572 stat = readb(card->csr_remap + MEMCTRLCMD_ERRSTATUS); in mm_interrupt()
574 data_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
576 data_log2 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
578 addr_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
580 addr_log2 = readb(card->csr_remap + ERROR_ADDR_LOG + 4); in mm_interrupt()
582 count = readb(card->csr_remap + ERROR_COUNT); in mm_interrupt()
583 syndrome = readb(card->csr_remap + ERROR_SYNDROME); in mm_interrupt()
584 check = readb(card->csr_remap + ERROR_CHECK); in mm_interrupt()
586 dump_dmastat(card, dma_status); in mm_interrupt()
589 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
593 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
596 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
599 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
603 writeb(0, card->csr_remap + ERROR_COUNT); in mm_interrupt()
607 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
609 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
610 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
614 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
616 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
617 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
621 dev_printk(KERN_ERR, &card->dev->dev, "SYSTEM ERROR\n"); in mm_interrupt()
622 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
623 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
627 dev_printk(KERN_ERR, &card->dev->dev, "TARGET ABORT\n"); in mm_interrupt()
628 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
629 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
633 dev_printk(KERN_ERR, &card->dev->dev, "MASTER ABORT\n"); in mm_interrupt()
634 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
635 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
639 card->dma_status = dma_status; in mm_interrupt()
640 tasklet_schedule(&card->tasklet); in mm_interrupt()
653 static void set_fault_to_battery_status(struct cardinfo *card) in set_fault_to_battery_status() argument
655 if (card->battery[0].good && card->battery[1].good) in set_fault_to_battery_status()
656 set_led(card, LED_FAULT, LED_OFF); in set_fault_to_battery_status()
657 else if (card->battery[0].warned || card->battery[1].warned) in set_fault_to_battery_status()
658 set_led(card, LED_FAULT, LED_ON); in set_fault_to_battery_status()
659 else if (!card->battery[0].good && !card->battery[1].good) in set_fault_to_battery_status()
660 set_led(card, LED_FAULT, LED_FLASH_7_0); in set_fault_to_battery_status()
662 set_led(card, LED_FAULT, LED_FLASH_3_5); in set_fault_to_battery_status()
667 static int check_battery(struct cardinfo *card, int battery, int status) in check_battery() argument
669 if (status != card->battery[battery].good) { in check_battery()
670 card->battery[battery].good = !card->battery[battery].good; in check_battery()
671 card->battery[battery].last_change = jiffies; in check_battery()
673 if (card->battery[battery].good) { in check_battery()
674 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
676 card->battery[battery].warned = 0; in check_battery()
678 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
682 } else if (!card->battery[battery].good && in check_battery()
683 !card->battery[battery].warned && in check_battery()
684 time_after_eq(jiffies, card->battery[battery].last_change + in check_battery()
686 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
688 card->battery[battery].warned = 1; in check_battery()
696 static void check_batteries(struct cardinfo *card) in check_batteries() argument
705 status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in check_batteries()
707 dev_printk(KERN_DEBUG, &card->dev->dev, in check_batteries()
712 ret1 = check_battery(card, 0, !(status & BATTERY_1_FAILURE)); in check_batteries()
713 ret2 = check_battery(card, 1, !(status & BATTERY_2_FAILURE)); in check_batteries()
716 set_fault_to_battery_status(card); in check_batteries()
725 struct cardinfo *card = &cards[i]; in check_all_batteries() local
726 spin_lock_bh(&card->lock); in check_all_batteries()
727 if (card->Active >= 0) in check_all_batteries()
728 card->check_batteries = 1; in check_all_batteries()
730 check_batteries(card); in check_all_batteries()
731 spin_unlock_bh(&card->lock); in check_all_batteries()
759 struct cardinfo *card = disk->private_data; in mm_revalidate() local
760 set_capacity(disk, card->mm_size << 1); in mm_revalidate()
766 struct cardinfo *card = bdev->bd_disk->private_data; in mm_getgeo() local
767 int size = card->mm_size * (1024 / MM_HARDSECT); in mm_getgeo()
790 struct cardinfo *card = &cards[num_cards]; in mm_pci_probe() local
809 card->dev = dev; in mm_pci_probe()
827 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
832 card->csr_remap = ioremap(csr_base, csr_len); in mm_pci_probe()
833 if (!card->csr_remap) { in mm_pci_probe()
834 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
841 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
843 csr_base, card->csr_remap, csr_len); in mm_pci_probe()
845 switch (card->dev->device) { in mm_pci_probe()
847 card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; in mm_pci_probe()
852 card->flags |= UM_FLAG_NO_BYTE_STATUS; in mm_pci_probe()
857 card->flags |= UM_FLAG_NO_BYTE_STATUS | in mm_pci_probe()
867 if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { in mm_pci_probe()
868 dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); in mm_pci_probe()
873 card->mm_pages[0].desc = dma_alloc_coherent(&card->dev->dev, in mm_pci_probe()
874 PAGE_SIZE * 2, &card->mm_pages[0].page_dma, GFP_KERNEL); in mm_pci_probe()
875 card->mm_pages[1].desc = dma_alloc_coherent(&card->dev->dev, in mm_pci_probe()
876 PAGE_SIZE * 2, &card->mm_pages[1].page_dma, GFP_KERNEL); in mm_pci_probe()
877 if (card->mm_pages[0].desc == NULL || in mm_pci_probe()
878 card->mm_pages[1].desc == NULL) { in mm_pci_probe()
879 dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); in mm_pci_probe()
883 reset_page(&card->mm_pages[0]); in mm_pci_probe()
884 reset_page(&card->mm_pages[1]); in mm_pci_probe()
885 card->Ready = 0; /* page 0 is ready */ in mm_pci_probe()
886 card->Active = -1; /* no page is active */ in mm_pci_probe()
887 card->bio = NULL; in mm_pci_probe()
888 card->biotail = &card->bio; in mm_pci_probe()
889 spin_lock_init(&card->lock); in mm_pci_probe()
891 card->queue = blk_alloc_queue(NUMA_NO_NODE); in mm_pci_probe()
892 if (!card->queue) { in mm_pci_probe()
897 tasklet_init(&card->tasklet, process_page, (unsigned long)card); in mm_pci_probe()
899 card->check_batteries = 0; in mm_pci_probe()
901 mem_present = readb(card->csr_remap + MEMCTRLSTATUS_MEMORY); in mm_pci_probe()
904 card->mm_size = 1024 * 128; in mm_pci_probe()
907 card->mm_size = 1024 * 256; in mm_pci_probe()
910 card->mm_size = 1024 * 512; in mm_pci_probe()
913 card->mm_size = 1024 * 1024; in mm_pci_probe()
916 card->mm_size = 1024 * 2048; in mm_pci_probe()
919 card->mm_size = 0; in mm_pci_probe()
924 set_led(card, LED_REMOVE, LED_OFF); in mm_pci_probe()
925 set_led(card, LED_FAULT, LED_OFF); in mm_pci_probe()
927 batt_status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in mm_pci_probe()
929 card->battery[0].good = !(batt_status & BATTERY_1_FAILURE); in mm_pci_probe()
930 card->battery[1].good = !(batt_status & BATTERY_2_FAILURE); in mm_pci_probe()
931 card->battery[0].last_change = card->battery[1].last_change = jiffies; in mm_pci_probe()
933 if (card->flags & UM_FLAG_NO_BATT) in mm_pci_probe()
934 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
935 "Size %d KB\n", card->mm_size); in mm_pci_probe()
937 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
939 card->mm_size, in mm_pci_probe()
941 card->battery[0].good ? "OK" : "FAILURE", in mm_pci_probe()
943 card->battery[1].good ? "OK" : "FAILURE"); in mm_pci_probe()
945 set_fault_to_battery_status(card); in mm_pci_probe()
958 card)) { in mm_pci_probe()
959 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
965 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
968 pci_set_drvdata(dev, card); in mm_pci_probe()
983 if (!get_userbit(card, MEMORY_INITIALIZED)) { in mm_pci_probe()
984 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
986 card->init_size = 0; in mm_pci_probe()
988 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
990 card->init_size = card->mm_size; in mm_pci_probe()
994 writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL); in mm_pci_probe()
1000 if (card->mm_pages[0].desc) in mm_pci_probe()
1001 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_probe()
1002 card->mm_pages[0].desc, in mm_pci_probe()
1003 card->mm_pages[0].page_dma); in mm_pci_probe()
1004 if (card->mm_pages[1].desc) in mm_pci_probe()
1005 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_probe()
1006 card->mm_pages[1].desc, in mm_pci_probe()
1007 card->mm_pages[1].page_dma); in mm_pci_probe()
1009 iounmap(card->csr_remap); in mm_pci_probe()
1019 struct cardinfo *card = pci_get_drvdata(dev); in mm_pci_remove() local
1021 tasklet_kill(&card->tasklet); in mm_pci_remove()
1022 free_irq(dev->irq, card); in mm_pci_remove()
1023 iounmap(card->csr_remap); in mm_pci_remove()
1025 if (card->mm_pages[0].desc) in mm_pci_remove()
1026 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_remove()
1027 card->mm_pages[0].desc, in mm_pci_remove()
1028 card->mm_pages[0].page_dma); in mm_pci_remove()
1029 if (card->mm_pages[1].desc) in mm_pci_remove()
1030 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_remove()
1031 card->mm_pages[1].desc, in mm_pci_remove()
1032 card->mm_pages[1].page_dma); in mm_pci_remove()
1033 blk_cleanup_queue(card->queue); in mm_pci_remove()