• Home
  • Raw
  • Download

Lines Matching refs:card

149 static void check_batteries(struct cardinfo *card);
151 static int get_userbit(struct cardinfo *card, int bit) in get_userbit() argument
155 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in get_userbit()
159 static int set_userbit(struct cardinfo *card, int bit, unsigned char state) in set_userbit() argument
163 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
168 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_userbit()
176 static void set_led(struct cardinfo *card, int shift, unsigned char state) in set_led() argument
180 led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
187 writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL); in set_led()
192 static void dump_regs(struct cardinfo *card) in dump_regs() argument
197 p = card->csr_remap; in dump_regs()
209 static void dump_dmastat(struct cardinfo *card, unsigned int dmastat) in dump_dmastat() argument
211 dev_printk(KERN_DEBUG, &card->dev->dev, "DMAstat - "); in dump_dmastat()
253 static void mm_start_io(struct cardinfo *card) in mm_start_io() argument
264 page = &card->mm_pages[card->Active]; in mm_start_io()
266 card->Active, page->headcnt, page->cnt - 1); in mm_start_io()
275 set_led(card, LED_REMOVE, LED_ON); in mm_start_io()
278 writel(0, card->csr_remap + DMA_PCI_ADDR); in mm_start_io()
279 writel(0, card->csr_remap + DMA_PCI_ADDR + 4); in mm_start_io()
281 writel(0, card->csr_remap + DMA_LOCAL_ADDR); in mm_start_io()
282 writel(0, card->csr_remap + DMA_LOCAL_ADDR + 4); in mm_start_io()
284 writel(0, card->csr_remap + DMA_TRANSFER_SIZE); in mm_start_io()
285 writel(0, card->csr_remap + DMA_TRANSFER_SIZE + 4); in mm_start_io()
287 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR); in mm_start_io()
288 writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR + 4); in mm_start_io()
292 card->csr_remap + DMA_DESCRIPTOR_ADDR); in mm_start_io()
296 card->csr_remap + DMA_DESCRIPTOR_ADDR + 4); in mm_start_io()
300 card->csr_remap + DMA_STATUS_CTRL); in mm_start_io()
303 static int add_bio(struct cardinfo *card);
305 static void activate(struct cardinfo *card) in activate() argument
314 while (add_bio(card)) in activate()
317 if (card->Active == -1 && in activate()
318 card->mm_pages[card->Ready].cnt > 0) { in activate()
319 card->Active = card->Ready; in activate()
320 card->Ready = 1-card->Ready; in activate()
321 mm_start_io(card); in activate()
324 } while (card->Active == -1 && add_bio(card)); in activate()
340 static int add_bio(struct cardinfo *card) in add_bio() argument
352 bio = card->currentbio; in add_bio()
353 if (!bio && card->bio) { in add_bio()
354 card->currentbio = card->bio; in add_bio()
355 card->current_idx = card->bio->bi_idx; in add_bio()
356 card->current_sector = card->bio->bi_sector; in add_bio()
357 card->bio = card->bio->bi_next; in add_bio()
358 if (card->bio == NULL) in add_bio()
359 card->biotail = &card->bio; in add_bio()
360 card->currentbio->bi_next = NULL; in add_bio()
365 idx = card->current_idx; in add_bio()
368 if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE) in add_bio()
373 dma_handle = pci_map_page(card->dev, in add_bio()
380 p = &card->mm_pages[card->Ready]; in add_bio()
394 desc->local_addr = cpu_to_le64(card->current_sector << 9); in add_bio()
410 card->current_sector += (len >> 9); in add_bio()
412 card->current_idx = idx; in add_bio()
414 card->currentbio = NULL; in add_bio()
429 struct cardinfo *card = (struct cardinfo *)data; in process_page() local
430 unsigned int dma_status = card->dma_status; in process_page()
432 spin_lock_bh(&card->lock); in process_page()
433 if (card->Active < 0) in process_page()
435 page = &card->mm_pages[card->Active]; in process_page()
457 pci_unmap_page(card->dev, desc->data_dma_handle, in process_page()
464 dev_printk(KERN_WARNING, &card->dev->dev, in process_page()
468 dump_dmastat(card, control); in process_page()
471 card->init_size) { in process_page()
472 card->init_size += le32_to_cpu(desc->transfer_size) >> 9; in process_page()
473 if (card->init_size >> 1 >= card->mm_size) { in process_page()
474 dev_printk(KERN_INFO, &card->dev->dev, in process_page()
476 set_userbit(card, MEMORY_INITIALIZED, 1); in process_page()
489 set_led(card, LED_REMOVE, LED_OFF); in process_page()
491 if (card->check_batteries) { in process_page()
492 card->check_batteries = 0; in process_page()
493 check_batteries(card); in process_page()
497 card->Active = -1; in process_page()
498 activate(card); in process_page()
502 mm_start_io(card); in process_page()
505 spin_unlock_bh(&card->lock); in process_page()
518 struct cardinfo *card = cb->data; in mm_unplug() local
520 spin_lock_irq(&card->lock); in mm_unplug()
521 activate(card); in mm_unplug()
522 spin_unlock_irq(&card->lock); in mm_unplug()
526 static int mm_check_plugged(struct cardinfo *card) in mm_check_plugged() argument
528 return !!blk_check_plugged(mm_unplug, card, sizeof(struct blk_plug_cb)); in mm_check_plugged()
533 struct cardinfo *card = q->queuedata; in mm_make_request() local
537 spin_lock_irq(&card->lock); in mm_make_request()
538 *card->biotail = bio; in mm_make_request()
540 card->biotail = &bio->bi_next; in mm_make_request()
541 if (bio->bi_rw & REQ_SYNC || !mm_check_plugged(card)) in mm_make_request()
542 activate(card); in mm_make_request()
543 spin_unlock_irq(&card->lock); in mm_make_request()
550 struct cardinfo *card = (struct cardinfo *) __card; in mm_interrupt() local
556 dma_status = le32_to_cpu(readl(card->csr_remap + DMA_STATUS_CTRL)); in mm_interrupt()
564 if (card->flags & UM_FLAG_NO_BYTE_STATUS) in mm_interrupt()
566 card->csr_remap + DMA_STATUS_CTRL); in mm_interrupt()
569 card->csr_remap + DMA_STATUS_CTRL + 2); in mm_interrupt()
577 stat = readb(card->csr_remap + MEMCTRLCMD_ERRSTATUS); in mm_interrupt()
579 data_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
581 data_log2 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
583 addr_log1 = le32_to_cpu(readl(card->csr_remap + in mm_interrupt()
585 addr_log2 = readb(card->csr_remap + ERROR_ADDR_LOG + 4); in mm_interrupt()
587 count = readb(card->csr_remap + ERROR_COUNT); in mm_interrupt()
588 syndrome = readb(card->csr_remap + ERROR_SYNDROME); in mm_interrupt()
589 check = readb(card->csr_remap + ERROR_CHECK); in mm_interrupt()
591 dump_dmastat(card, dma_status); in mm_interrupt()
594 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()
604 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
608 writeb(0, card->csr_remap + ERROR_COUNT); in mm_interrupt()
612 dev_printk(KERN_ERR, &card->dev->dev, in mm_interrupt()
614 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
615 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
619 dev_printk(KERN_ERR, &card->dev->dev, 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, "SYSTEM ERROR\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, "TARGET 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 dev_printk(KERN_ERR, &card->dev->dev, "MASTER ABORT\n"); in mm_interrupt()
639 pci_read_config_word(card->dev, PCI_STATUS, &cfg_status); in mm_interrupt()
640 pci_write_config_word(card->dev, PCI_STATUS, cfg_status); in mm_interrupt()
644 card->dma_status = dma_status; in mm_interrupt()
645 tasklet_schedule(&card->tasklet); in mm_interrupt()
658 static void set_fault_to_battery_status(struct cardinfo *card) in set_fault_to_battery_status() argument
660 if (card->battery[0].good && card->battery[1].good) in set_fault_to_battery_status()
661 set_led(card, LED_FAULT, LED_OFF); in set_fault_to_battery_status()
662 else if (card->battery[0].warned || card->battery[1].warned) in set_fault_to_battery_status()
663 set_led(card, LED_FAULT, LED_ON); in set_fault_to_battery_status()
664 else if (!card->battery[0].good && !card->battery[1].good) in set_fault_to_battery_status()
665 set_led(card, LED_FAULT, LED_FLASH_7_0); in set_fault_to_battery_status()
667 set_led(card, LED_FAULT, LED_FLASH_3_5); in set_fault_to_battery_status()
672 static int check_battery(struct cardinfo *card, int battery, int status) in check_battery() argument
674 if (status != card->battery[battery].good) { in check_battery()
675 card->battery[battery].good = !card->battery[battery].good; in check_battery()
676 card->battery[battery].last_change = jiffies; in check_battery()
678 if (card->battery[battery].good) { in check_battery()
679 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
681 card->battery[battery].warned = 0; in check_battery()
683 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
687 } else if (!card->battery[battery].good && in check_battery()
688 !card->battery[battery].warned && in check_battery()
689 time_after_eq(jiffies, card->battery[battery].last_change + in check_battery()
691 dev_printk(KERN_ERR, &card->dev->dev, in check_battery()
693 card->battery[battery].warned = 1; in check_battery()
701 static void check_batteries(struct cardinfo *card) in check_batteries() argument
710 status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in check_batteries()
712 dev_printk(KERN_DEBUG, &card->dev->dev, in check_batteries()
717 ret1 = check_battery(card, 0, !(status & BATTERY_1_FAILURE)); in check_batteries()
718 ret2 = check_battery(card, 1, !(status & BATTERY_2_FAILURE)); in check_batteries()
721 set_fault_to_battery_status(card); in check_batteries()
730 struct cardinfo *card = &cards[i]; in check_all_batteries() local
731 spin_lock_bh(&card->lock); in check_all_batteries()
732 if (card->Active >= 0) in check_all_batteries()
733 card->check_batteries = 1; in check_all_batteries()
735 check_batteries(card); in check_all_batteries()
736 spin_unlock_bh(&card->lock); in check_all_batteries()
765 struct cardinfo *card = disk->private_data; in mm_revalidate() local
766 set_capacity(disk, card->mm_size << 1); in mm_revalidate()
772 struct cardinfo *card = bdev->bd_disk->private_data; in mm_getgeo() local
773 int size = card->mm_size * (1024 / MM_HARDSECT); in mm_getgeo()
795 struct cardinfo *card = &cards[num_cards]; in mm_pci_probe() local
814 card->dev = dev; in mm_pci_probe()
832 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
837 card->csr_remap = ioremap_nocache(csr_base, csr_len); in mm_pci_probe()
838 if (!card->csr_remap) { in mm_pci_probe()
839 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
846 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
848 csr_base, card->csr_remap, csr_len); in mm_pci_probe()
850 switch (card->dev->device) { in mm_pci_probe()
852 card->flags |= UM_FLAG_NO_BYTE_STATUS | UM_FLAG_NO_BATTREG; in mm_pci_probe()
857 card->flags |= UM_FLAG_NO_BYTE_STATUS; in mm_pci_probe()
862 card->flags |= UM_FLAG_NO_BYTE_STATUS | in mm_pci_probe()
872 if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != magic_number) { in mm_pci_probe()
873 dev_printk(KERN_ERR, &card->dev->dev, "Magic number invalid\n"); in mm_pci_probe()
878 card->mm_pages[0].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
880 &card->mm_pages[0].page_dma); in mm_pci_probe()
881 card->mm_pages[1].desc = pci_alloc_consistent(card->dev, in mm_pci_probe()
883 &card->mm_pages[1].page_dma); in mm_pci_probe()
884 if (card->mm_pages[0].desc == NULL || in mm_pci_probe()
885 card->mm_pages[1].desc == NULL) { in mm_pci_probe()
886 dev_printk(KERN_ERR, &card->dev->dev, "alloc failed\n"); in mm_pci_probe()
889 reset_page(&card->mm_pages[0]); in mm_pci_probe()
890 reset_page(&card->mm_pages[1]); in mm_pci_probe()
891 card->Ready = 0; /* page 0 is ready */ in mm_pci_probe()
892 card->Active = -1; /* no page is active */ in mm_pci_probe()
893 card->bio = NULL; in mm_pci_probe()
894 card->biotail = &card->bio; in mm_pci_probe()
896 card->queue = blk_alloc_queue(GFP_KERNEL); in mm_pci_probe()
897 if (!card->queue) in mm_pci_probe()
900 blk_queue_make_request(card->queue, mm_make_request); in mm_pci_probe()
901 card->queue->queue_lock = &card->lock; in mm_pci_probe()
902 card->queue->queuedata = card; in mm_pci_probe()
904 tasklet_init(&card->tasklet, process_page, (unsigned long)card); in mm_pci_probe()
906 card->check_batteries = 0; in mm_pci_probe()
908 mem_present = readb(card->csr_remap + MEMCTRLSTATUS_MEMORY); in mm_pci_probe()
911 card->mm_size = 1024 * 128; in mm_pci_probe()
914 card->mm_size = 1024 * 256; in mm_pci_probe()
917 card->mm_size = 1024 * 512; in mm_pci_probe()
920 card->mm_size = 1024 * 1024; in mm_pci_probe()
923 card->mm_size = 1024 * 2048; in mm_pci_probe()
926 card->mm_size = 0; in mm_pci_probe()
931 set_led(card, LED_REMOVE, LED_OFF); in mm_pci_probe()
932 set_led(card, LED_FAULT, LED_OFF); in mm_pci_probe()
934 batt_status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY); in mm_pci_probe()
936 card->battery[0].good = !(batt_status & BATTERY_1_FAILURE); in mm_pci_probe()
937 card->battery[1].good = !(batt_status & BATTERY_2_FAILURE); in mm_pci_probe()
938 card->battery[0].last_change = card->battery[1].last_change = jiffies; in mm_pci_probe()
940 if (card->flags & UM_FLAG_NO_BATT) in mm_pci_probe()
941 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
942 "Size %d KB\n", card->mm_size); in mm_pci_probe()
944 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
946 card->mm_size, in mm_pci_probe()
948 card->battery[0].good ? "OK" : "FAILURE", in mm_pci_probe()
950 card->battery[1].good ? "OK" : "FAILURE"); in mm_pci_probe()
952 set_fault_to_battery_status(card); in mm_pci_probe()
965 card)) { in mm_pci_probe()
966 dev_printk(KERN_ERR, &card->dev->dev, in mm_pci_probe()
972 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
975 spin_lock_init(&card->lock); in mm_pci_probe()
977 pci_set_drvdata(dev, card); in mm_pci_probe()
992 if (!get_userbit(card, MEMORY_INITIALIZED)) { in mm_pci_probe()
993 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
995 card->init_size = 0; in mm_pci_probe()
997 dev_printk(KERN_INFO, &card->dev->dev, in mm_pci_probe()
999 card->init_size = card->mm_size; in mm_pci_probe()
1003 writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL); in mm_pci_probe()
1009 if (card->mm_pages[0].desc) in mm_pci_probe()
1010 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1011 card->mm_pages[0].desc, in mm_pci_probe()
1012 card->mm_pages[0].page_dma); in mm_pci_probe()
1013 if (card->mm_pages[1].desc) in mm_pci_probe()
1014 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_probe()
1015 card->mm_pages[1].desc, in mm_pci_probe()
1016 card->mm_pages[1].page_dma); in mm_pci_probe()
1018 iounmap(card->csr_remap); in mm_pci_probe()
1028 struct cardinfo *card = pci_get_drvdata(dev); in mm_pci_remove() local
1030 tasklet_kill(&card->tasklet); in mm_pci_remove()
1031 free_irq(dev->irq, card); in mm_pci_remove()
1032 iounmap(card->csr_remap); in mm_pci_remove()
1034 if (card->mm_pages[0].desc) in mm_pci_remove()
1035 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1036 card->mm_pages[0].desc, in mm_pci_remove()
1037 card->mm_pages[0].page_dma); in mm_pci_remove()
1038 if (card->mm_pages[1].desc) in mm_pci_remove()
1039 pci_free_consistent(card->dev, PAGE_SIZE*2, in mm_pci_remove()
1040 card->mm_pages[1].desc, in mm_pci_remove()
1041 card->mm_pages[1].page_dma); in mm_pci_remove()
1042 blk_cleanup_queue(card->queue); in mm_pci_remove()