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 = q->queuedata; in mm_make_request() local
531 spin_lock_irq(&card->lock); in mm_make_request()
532 *card->biotail = bio; in mm_make_request()
534 card->biotail = &bio->bi_next; in mm_make_request()
535 if (op_is_sync(bio->bi_opf) || !mm_check_plugged(card)) in mm_make_request()
536 activate(card); in mm_make_request()
537 spin_unlock_irq(&card->lock); in mm_make_request()
544 struct cardinfo *card = (struct cardinfo *) __card; in mm_interrupt() local
550 dma_status = le32_to_cpu(readl(card->csr_remap + DMA_STATUS_CTRL)); in mm_interrupt()
558 if (card->flags & UM_FLAG_NO_BYTE_STATUS) in mm_interrupt()
560 card->csr_remap + DMA_STATUS_CTRL); in mm_interrupt()
563 card->csr_remap + DMA_STATUS_CTRL + 2); in mm_interrupt()
571 stat = readb(card->csr_remap + MEMCTRLCMD_ERRSTATUS); in mm_interrupt()
573 data_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
575 data_log2 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
577 addr_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
579 addr_log2 = readb(card->csr_remap + ERROR_ADDR_LOG + 4); in mm_interrupt()
581 count = readb(card->csr_remap + ERROR_COUNT); in mm_interrupt()
582 syndrome = readb(card->csr_remap + ERROR_SYNDROME); in mm_interrupt()
583 check = readb(card->csr_remap + ERROR_CHECK); in mm_interrupt()
585 dump_dmastat(card, dma_status); in mm_interrupt()
588 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
592 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()
602 writeb(0, card->csr_remap + ERROR_COUNT); in mm_interrupt()
606 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
608 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
609 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
613 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
615 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
616 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
620 dev_printk(KERN_ERR, &card->dev->dev, "SYSTEM ERROR\n"); in mm_interrupt()
621 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
622 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
626 dev_printk(KERN_ERR, &card->dev->dev, "TARGET ABORT\n"); in mm_interrupt()
627 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
628 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
632 dev_printk(KERN_ERR, &card->dev->dev, "MASTER ABORT\n"); in mm_interrupt()
633 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
634 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
638 card->dma_status = dma_status; in mm_interrupt()
639 tasklet_schedule(&card->tasklet); in mm_interrupt()
652 static void set_fault_to_battery_status(struct cardinfo *card) in set_fault_to_battery_status() argument
654 if (card->battery[0].good && card->battery[1].good) in set_fault_to_battery_status()
655 set_led(card, LED_FAULT, LED_OFF); in set_fault_to_battery_status()
656 else if (card->battery[0].warned || card->battery[1].warned) in set_fault_to_battery_status()
657 set_led(card, LED_FAULT, LED_ON); in set_fault_to_battery_status()
658 else if (!card->battery[0].good && !card->battery[1].good) in set_fault_to_battery_status()
659 set_led(card, LED_FAULT, LED_FLASH_7_0); in set_fault_to_battery_status()
661 set_led(card, LED_FAULT, LED_FLASH_3_5); in set_fault_to_battery_status()
666 static int check_battery(struct cardinfo *card, int battery, int status) in check_battery() argument
668 if (status != card->battery[battery].good) { in check_battery()
669 card->battery[battery].good = !card->battery[battery].good; in check_battery()
670 card->battery[battery].last_change = jiffies; in check_battery()
672 if (card->battery[battery].good) { in check_battery()
673 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
675 card->battery[battery].warned = 0; in check_battery()
677 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
681 } else if (!card->battery[battery].good && in check_battery()
682 !card->battery[battery].warned && in check_battery()
683 time_after_eq(jiffies, card->battery[battery].last_change + in check_battery()
685 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
687 card->battery[battery].warned = 1; in check_battery()
695 static void check_batteries(struct cardinfo *card) in check_batteries() argument
704 status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in check_batteries()
706 dev_printk(KERN_DEBUG, &card->dev->dev, in check_batteries()
711 ret1 = check_battery(card, 0, !(status & BATTERY_1_FAILURE)); in check_batteries()
712 ret2 = check_battery(card, 1, !(status & BATTERY_2_FAILURE)); in check_batteries()
715 set_fault_to_battery_status(card); in check_batteries()
724 struct cardinfo *card = &cards[i]; in check_all_batteries() local
725 spin_lock_bh(&card->lock); in check_all_batteries()
726 if (card->Active >= 0) in check_all_batteries()
727 card->check_batteries = 1; in check_all_batteries()
729 check_batteries(card); in check_all_batteries()
730 spin_unlock_bh(&card->lock); in check_all_batteries()
758 struct cardinfo *card = disk->private_data; in mm_revalidate() local
759 set_capacity(disk, card->mm_size << 1); in mm_revalidate()
765 struct cardinfo *card = bdev->bd_disk->private_data; in mm_getgeo() local
766 int size = card->mm_size * (1024 / MM_HARDSECT); in mm_getgeo()
788 struct cardinfo *card = &cards[num_cards]; in mm_pci_probe() local
807 card->dev = dev; in mm_pci_probe()
825 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
830 card->csr_remap = ioremap_nocache(csr_base, csr_len); in mm_pci_probe()
831 if (!card->csr_remap) { in mm_pci_probe()
832 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
839 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
841 csr_base, card->csr_remap, csr_len); in mm_pci_probe()
843 switch (card->dev->device) { in mm_pci_probe()
845 card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; in mm_pci_probe()
850 card->flags |= UM_FLAG_NO_BYTE_STATUS; in mm_pci_probe()
855 card->flags |= UM_FLAG_NO_BYTE_STATUS | in mm_pci_probe()
865 if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { in mm_pci_probe()
866 dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); in mm_pci_probe()
871 card->mm_pages[0].desc = dma_alloc_coherent(&card->dev->dev, in mm_pci_probe()
872 PAGE_SIZE * 2, &card->mm_pages[0].page_dma, GFP_KERNEL); in mm_pci_probe()
873 card->mm_pages[1].desc = dma_alloc_coherent(&card->dev->dev, in mm_pci_probe()
874 PAGE_SIZE * 2, &card->mm_pages[1].page_dma, GFP_KERNEL); in mm_pci_probe()
875 if (card->mm_pages[0].desc == NULL || in mm_pci_probe()
876 card->mm_pages[1].desc == NULL) { in mm_pci_probe()
877 dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); in mm_pci_probe()
880 reset_page(&card->mm_pages[0]); in mm_pci_probe()
881 reset_page(&card->mm_pages[1]); in mm_pci_probe()
882 card->Ready = 0; /* page 0 is ready */ in mm_pci_probe()
883 card->Active = -1; /* no page is active */ in mm_pci_probe()
884 card->bio = NULL; in mm_pci_probe()
885 card->biotail = &card->bio; in mm_pci_probe()
886 spin_lock_init(&card->lock); in mm_pci_probe()
888 card->queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE); in mm_pci_probe()
889 if (!card->queue) in mm_pci_probe()
892 blk_queue_make_request(card->queue, mm_make_request); in mm_pci_probe()
893 card->queue->queuedata = card; in mm_pci_probe()
895 tasklet_init(&card->tasklet, process_page, (unsigned long)card); in mm_pci_probe()
897 card->check_batteries = 0; in mm_pci_probe()
899 mem_present = readb(card->csr_remap + MEMCTRLSTATUS_MEMORY); in mm_pci_probe()
902 card->mm_size = 1024 * 128; in mm_pci_probe()
905 card->mm_size = 1024 * 256; in mm_pci_probe()
908 card->mm_size = 1024 * 512; in mm_pci_probe()
911 card->mm_size = 1024 * 1024; in mm_pci_probe()
914 card->mm_size = 1024 * 2048; in mm_pci_probe()
917 card->mm_size = 0; in mm_pci_probe()
922 set_led(card, LED_REMOVE, LED_OFF); in mm_pci_probe()
923 set_led(card, LED_FAULT, LED_OFF); in mm_pci_probe()
925 batt_status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in mm_pci_probe()
927 card->battery[0].good = !(batt_status & BATTERY_1_FAILURE); in mm_pci_probe()
928 card->battery[1].good = !(batt_status & BATTERY_2_FAILURE); in mm_pci_probe()
929 card->battery[0].last_change = card->battery[1].last_change = jiffies; in mm_pci_probe()
931 if (card->flags & UM_FLAG_NO_BATT) in mm_pci_probe()
932 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
933 "Size %d KB\n", card->mm_size); in mm_pci_probe()
935 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
937 card->mm_size, in mm_pci_probe()
939 card->battery[0].good ? "OK" : "FAILURE", in mm_pci_probe()
941 card->battery[1].good ? "OK" : "FAILURE"); in mm_pci_probe()
943 set_fault_to_battery_status(card); in mm_pci_probe()
956 card)) { in mm_pci_probe()
957 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
963 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
966 pci_set_drvdata(dev, card); in mm_pci_probe()
981 if (!get_userbit(card, MEMORY_INITIALIZED)) { in mm_pci_probe()
982 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
984 card->init_size = 0; in mm_pci_probe()
986 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
988 card->init_size = card->mm_size; in mm_pci_probe()
992 writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL); in mm_pci_probe()
998 if (card->mm_pages[0].desc) in mm_pci_probe()
999 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_probe()
1000 card->mm_pages[0].desc, in mm_pci_probe()
1001 card->mm_pages[0].page_dma); in mm_pci_probe()
1002 if (card->mm_pages[1].desc) in mm_pci_probe()
1003 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_probe()
1004 card->mm_pages[1].desc, in mm_pci_probe()
1005 card->mm_pages[1].page_dma); in mm_pci_probe()
1007 iounmap(card->csr_remap); in mm_pci_probe()
1017 struct cardinfo *card = pci_get_drvdata(dev); in mm_pci_remove() local
1019 tasklet_kill(&card->tasklet); in mm_pci_remove()
1020 free_irq(dev->irq, card); in mm_pci_remove()
1021 iounmap(card->csr_remap); in mm_pci_remove()
1023 if (card->mm_pages[0].desc) in mm_pci_remove()
1024 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_remove()
1025 card->mm_pages[0].desc, in mm_pci_remove()
1026 card->mm_pages[0].page_dma); in mm_pci_remove()
1027 if (card->mm_pages[1].desc) in mm_pci_remove()
1028 dma_free_coherent(&card->dev->dev, PAGE_SIZE * 2, in mm_pci_remove()
1029 card->mm_pages[1].desc, in mm_pci_remove()
1030 card->mm_pages[1].page_dma); in mm_pci_remove()
1031 blk_cleanup_queue(card->queue); in mm_pci_remove()