Lines Matching +full:mem +full:- +full:io

2  * Driver for the Cirrus PD6729 PCI-PCMCIA bridge.
18 #include <linux/io.h>
28 MODULE_DESCRIPTION("Driver for the Cirrus PD6729 PCI-PCMCIA bridge");
29 MODULE_AUTHOR("Jun Komuro <komurojun-mbn@nifty.com>");
69 reg += socket->number * 0x40; in indirect_read()
70 port = socket->io_base; in indirect_read()
86 reg = reg + socket->number * 0x40; in indirect_read16()
87 port = socket->io_base; in indirect_read16()
105 reg = reg + socket->number * 0x40; in indirect_write()
106 port = socket->io_base; in indirect_write()
120 reg = reg + socket->number * 0x40; in indirect_setbit()
121 port = socket->io_base; in indirect_setbit()
138 reg = reg + socket->number * 0x40; in indirect_resetbit()
139 port = socket->io_base; in indirect_resetbit()
156 reg = reg + socket->number * 0x40; in indirect_write16()
157 port = socket->io_base; in indirect_write16()
210 /* For IO/CARDS, bit 0 means "read the card" */ in pd6729_interrupt()
242 mod_timer(&socket->poll_timer, jiffies + HZ); in pd6729_interrupt_wrapper()
261 * IO cards have a different meaning of bits 0,1 in pd6729_get_status()
262 * Also notice the inverse-logic on the bits in pd6729_get_status()
265 /* IO card */ in pd6729_get_status()
285 t = (socket->number) ? socket : socket + 1; in pd6729_get_status()
288 *value |= (data & PD67_EXD_VS1(socket->number)) ? 0 : SS_3VCARD; in pd6729_get_status()
305 socket->card_irq = state->io_irq; in pd6729_set_socket()
309 if (!(state->flags & SS_RESET)) in pd6729_set_socket()
311 if (state->flags & SS_IOCARD) in pd6729_set_socket()
321 if (state->flags & SS_PWR_AUTO) { in pd6729_set_socket()
322 dev_dbg(&sock->dev, "Auto power\n"); in pd6729_set_socket()
325 if (state->flags & SS_OUTPUT_ENA) { in pd6729_set_socket()
326 dev_dbg(&sock->dev, "Power Enabled\n"); in pd6729_set_socket()
330 switch (state->Vcc) { in pd6729_set_socket()
334 dev_dbg(&sock->dev, in pd6729_set_socket()
336 socket->number); in pd6729_set_socket()
341 dev_dbg(&sock->dev, in pd6729_set_socket()
343 socket->number); in pd6729_set_socket()
348 dev_dbg(&sock->dev, in pd6729_set_socket()
350 "value: %i\n", state->Vcc); in pd6729_set_socket()
351 return -EINVAL; in pd6729_set_socket()
354 switch (state->Vpp) { in pd6729_set_socket()
356 dev_dbg(&sock->dev, "not setting Vpp on socket %i\n", in pd6729_set_socket()
357 socket->number); in pd6729_set_socket()
361 dev_dbg(&sock->dev, "setting Vpp to Vcc for socket %i\n", in pd6729_set_socket()
362 socket->number); in pd6729_set_socket()
366 dev_dbg(&sock->dev, "setting Vpp to 12.0\n"); in pd6729_set_socket()
370 dev_dbg(&sock->dev, "pd6729: pd6729_set_socket called with " in pd6729_set_socket()
371 "invalid VPP power value: %i\n", state->Vpp); in pd6729_set_socket()
372 return -EINVAL; in pd6729_set_socket()
391 if (state->csc_mask & SS_DETECT) in pd6729_set_socket()
394 if (state->flags & SS_IOCARD) { in pd6729_set_socket()
395 if (state->csc_mask & SS_STSCHG) in pd6729_set_socket()
398 if (state->csc_mask & SS_BATDEAD) in pd6729_set_socket()
400 if (state->csc_mask & SS_BATWARN) in pd6729_set_socket()
402 if (state->csc_mask & SS_READY) in pd6729_set_socket()
413 reg |= socket->card_irq; in pd6729_set_socket()
423 struct pccard_io_map *io) in pd6729_set_io_map() argument
429 map = io->map; in pd6729_set_io_map()
433 dev_dbg(&sock->dev, "pd6729_set_io_map with invalid map\n"); in pd6729_set_io_map()
434 return -EINVAL; in pd6729_set_io_map()
441 /* dev_dbg(&sock->dev, "set_io_map: Setting range to %x - %x\n", in pd6729_set_io_map()
442 io->start, io->stop);*/ in pd6729_set_io_map()
445 indirect_write16(socket, I365_IO(map)+I365_W_START, io->start); in pd6729_set_io_map()
446 indirect_write16(socket, I365_IO(map)+I365_W_STOP, io->stop); in pd6729_set_io_map()
450 if (io->flags & MAP_0WS) in pd6729_set_io_map()
452 if (io->flags & MAP_16BIT) in pd6729_set_io_map()
454 if (io->flags & MAP_AUTOSZ) in pd6729_set_io_map()
460 if (io->flags & MAP_ACTIVE) in pd6729_set_io_map()
467 struct pccard_mem_map *mem) in pd6729_set_mem_map() argument
474 map = mem->map; in pd6729_set_mem_map()
476 dev_warn(&sock->dev, "invalid map requested\n"); in pd6729_set_mem_map()
477 return -EINVAL; in pd6729_set_mem_map()
480 if ((mem->res->start > mem->res->end) || (mem->speed > 1000)) { in pd6729_set_mem_map()
481 dev_warn(&sock->dev, "invalid invalid address / speed\n"); in pd6729_set_mem_map()
482 return -EINVAL; in pd6729_set_mem_map()
491 i = (mem->res->start >> 12) & 0x0fff; in pd6729_set_mem_map()
492 if (mem->flags & MAP_16BIT) in pd6729_set_mem_map()
494 if (mem->flags & MAP_0WS) in pd6729_set_mem_map()
500 i = (mem->res->end >> 12) & 0x0fff; in pd6729_set_mem_map()
501 switch (to_cycles(mem->speed)) { in pd6729_set_mem_map()
519 indirect_write(socket, PD67_EXT_DATA, mem->res->start >> 24); in pd6729_set_mem_map()
523 i = ((mem->card_start - mem->res->start) >> 12) & 0x3fff; in pd6729_set_mem_map()
524 if (mem->flags & MAP_WRPROT) in pd6729_set_mem_map()
526 if (mem->flags & MAP_ATTRIB) { in pd6729_set_mem_map()
527 /* dev_dbg(&sock->dev, "requesting attribute memory for " in pd6729_set_mem_map()
528 "socket %i\n", socket->number);*/ in pd6729_set_mem_map()
531 /* dev_dbg(&sock->dev, "requesting normal memory for " in pd6729_set_mem_map()
532 "socket %i\n", socket->number);*/ in pd6729_set_mem_map()
537 if (mem->flags & MAP_ACTIVE) in pd6729_set_mem_map()
547 pccard_io_map io = { 0, 0, 0, 0, 1 }; in pd6729_init() local
548 pccard_mem_map mem = { .res = &res, }; in pd6729_init() local
552 io.map = i; in pd6729_init()
553 pd6729_set_io_map(sock, &io); in pd6729_init()
556 mem.map = i; in pd6729_init()
557 pd6729_set_mem_map(sock, &mem); in pd6729_init()
575 pr_devel("-> hit on irq %d\n", irq); in pd6729_test()
586 return -1; in pd6729_check_irq()
613 printk("%s%d", ((mask & ((1<<i)-1)) ? "," : ""), i); in pd6729_isa_scan()
634 dev_warn(&dev->dev, "failed to kzalloc socket.\n"); in pd6729_pci_probe()
635 return -ENOMEM; in pd6729_pci_probe()
640 dev_warn(&dev->dev, "failed to enable pci_device.\n"); in pd6729_pci_probe()
645 dev_warn(&dev->dev, "refusing to load the driver as the " in pd6729_pci_probe()
647 ret = -ENOMEM; in pd6729_pci_probe()
651 dev_info(&dev->dev, "Cirrus PD6729 PCI to PCMCIA Bridge at 0x%llx " in pd6729_pci_probe()
653 (unsigned long long)pci_resource_start(dev, 0), dev->irq); in pd6729_pci_probe()
660 dev_dbg(&dev->dev, "pd6729: Enabling PCI_COMMAND_MEMORY.\n"); in pd6729_pci_probe()
667 dev_warn(&dev->dev, "pci request region failed.\n"); in pd6729_pci_probe()
671 if (dev->irq == NO_IRQ) in pd6729_pci_probe()
676 dev_warn(&dev->dev, "no ISA interrupt is available.\n"); in pd6729_pci_probe()
677 ret = -ENODEV; in pd6729_pci_probe()
686 socket[i].socket.pci_irq = dev->irq; in pd6729_pci_probe()
694 socket[i].socket.dev.parent = &dev->dev; in pd6729_pci_probe()
701 ret = request_irq(dev->irq, pd6729_interrupt, IRQF_SHARED, in pd6729_pci_probe()
704 dev_err(&dev->dev, "Failed to register irq %d\n", in pd6729_pci_probe()
705 dev->irq); in pd6729_pci_probe()
710 timer_setup(&socket->poll_timer, pd6729_interrupt_wrapper, 0); in pd6729_pci_probe()
711 mod_timer(&socket->poll_timer, jiffies + HZ); in pd6729_pci_probe()
717 dev_warn(&dev->dev, "pcmcia_register_socket failed.\n"); in pd6729_pci_probe()
728 free_irq(dev->irq, socket); in pd6729_pci_probe()
730 timer_shutdown_sync(&socket->poll_timer); in pd6729_pci_probe()
755 free_irq(dev->irq, socket); in pd6729_pci_remove()
757 timer_shutdown_sync(&socket->poll_timer); in pd6729_pci_remove()