Lines Matching +full:interrupt +full:- +full:map
2 * Driver for Intel I82092AA PCI-PCMCIA bridge.
7 * Loosly based on i82365.c from the pcmcia-cs package
15 #include <linux/interrupt.h>
101 ret = -EIO; in i82092aa_pci_probe()
107 ret = -EBUSY; in i82092aa_pci_probe()
117 sockets[i].socket.pci_irq = dev->irq; in i82092aa_pci_probe()
132 configbyte = 0xFF; /* bitmask, one bit per event, 1 = PCI interrupt, 0 = ISA interrupt */ in i82092aa_pci_probe()
133 pci_write_config_byte(dev, 0x50, configbyte); /* PCI Interrupt Routing Register */ in i82092aa_pci_probe()
135 /* Register the interrupt handler */ in i82092aa_pci_probe()
136 dprintk(KERN_DEBUG "Requesting interrupt %i \n",dev->irq); in i82092aa_pci_probe()
137 …if ((ret = request_irq(dev->irq, i82092aa_interrupt, IRQF_SHARED, "i82092aa", i82092aa_interrupt))… in i82092aa_pci_probe()
138 printk(KERN_ERR "i82092aa: Failed to register IRQ %d, aborting\n", dev->irq); in i82092aa_pci_probe()
145 sockets[i].socket.dev.parent = &dev->dev; in i82092aa_pci_probe()
159 for (i--;i>=0;i--) { in i82092aa_pci_probe()
163 free_irq(dev->irq, i82092aa_interrupt); in i82092aa_pci_probe()
177 free_irq(dev->irq, i82092aa_interrupt); in i82092aa_pci_remove()
301 /* Interrupt handler functionality */
316 printk(KERN_ERR "i82092aa: infinite eventloop in interrupt \n"); in i82092aa_interrupt()
413 io.map = i; in i82092aa_init()
417 mem.map = i; in i82092aa_init()
427 unsigned int sock = container_of(socket, struct socket_info, socket)->number; in i82092aa_get_status()
440 /* Also notice the inverse-logic on the bits */ in i82092aa_get_status()
470 unsigned int sock = container_of(socket, struct socket_info, socket)->number; in i82092aa_set_socket()
482 if (!(state->flags & SS_RESET)) /* The reset bit has "inverse" logic */ in i82092aa_set_socket()
484 if (state->flags & SS_IOCARD) in i82092aa_set_socket()
487 indirect_write(sock,I365_INTCTL,reg); /* IGENC, Interrupt and General Control Register */ in i82092aa_set_socket()
493 if (state->flags & SS_PWR_AUTO) { in i82092aa_set_socket()
497 if (state->flags & SS_OUTPUT_ENA) { in i82092aa_set_socket()
502 switch (state->Vcc) { in i82092aa_set_socket()
510 printk("i82092aa: i82092aa_set_socket called with invalid VCC power value: %i ", state->Vcc); in i82092aa_set_socket()
512 return -EINVAL; in i82092aa_set_socket()
516 switch (state->Vpp) { in i82092aa_set_socket()
529 printk("i82092aa: i82092aa_set_socket called with invalid VPP power value: %i ", state->Vcc); in i82092aa_set_socket()
531 return -EINVAL; in i82092aa_set_socket()
537 /* Enable specific interrupt events */ in i82092aa_set_socket()
540 if (state->csc_mask & SS_DETECT) { in i82092aa_set_socket()
543 if (state->flags & SS_IOCARD) { in i82092aa_set_socket()
544 if (state->csc_mask & SS_STSCHG) in i82092aa_set_socket()
547 if (state->csc_mask & SS_BATDEAD) in i82092aa_set_socket()
549 if (state->csc_mask & SS_BATWARN) in i82092aa_set_socket()
551 if (state->csc_mask & SS_READY) in i82092aa_set_socket()
567 unsigned int sock = container_of(socket, struct socket_info, socket)->number; in i82092aa_set_io_map()
568 unsigned char map, ioctl; in i82092aa_set_io_map() local
572 map = io->map; in i82092aa_set_io_map()
575 if (map > 1) { in i82092aa_set_io_map()
576 leave("i82092aa_set_io_map with invalid map"); in i82092aa_set_io_map()
577 return -EINVAL; in i82092aa_set_io_map()
579 if ((io->start > 0xffff) || (io->stop > 0xffff) || (io->stop < io->start)){ in i82092aa_set_io_map()
581 return -EINVAL; in i82092aa_set_io_map()
585 if (indirect_read(sock, I365_ADDRWIN) & I365_ENA_IO(map)) in i82092aa_set_io_map()
586 indirect_resetbit(sock, I365_ADDRWIN, I365_ENA_IO(map)); in i82092aa_set_io_map()
588 /* printk("set_io_map: Setting range to %x - %x \n",io->start,io->stop); */ in i82092aa_set_io_map()
591 indirect_write16(sock,I365_IO(map)+I365_W_START,io->start); in i82092aa_set_io_map()
592 indirect_write16(sock,I365_IO(map)+I365_W_STOP,io->stop); in i82092aa_set_io_map()
594 ioctl = indirect_read(sock,I365_IOCTL) & ~I365_IOCTL_MASK(map); in i82092aa_set_io_map()
596 if (io->flags & (MAP_16BIT|MAP_AUTOSZ)) in i82092aa_set_io_map()
597 ioctl |= I365_IOCTL_16BIT(map); in i82092aa_set_io_map()
602 if (io->flags & MAP_ACTIVE) in i82092aa_set_io_map()
603 indirect_setbit(sock,I365_ADDRWIN,I365_ENA_IO(map)); in i82092aa_set_io_map()
612 unsigned int sock = sock_info->number; in i82092aa_set_mem_map()
615 unsigned char map; in i82092aa_set_mem_map() local
619 pcibios_resource_to_bus(sock_info->dev, ®ion, mem->res); in i82092aa_set_mem_map()
621 map = mem->map; in i82092aa_set_mem_map()
622 if (map > 4) { in i82092aa_set_mem_map()
623 leave("i82092aa_set_mem_map: invalid map"); in i82092aa_set_mem_map()
624 return -EINVAL; in i82092aa_set_mem_map()
628 if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) || in i82092aa_set_mem_map()
629 (mem->speed > 1000) ) { in i82092aa_set_mem_map()
631 printk("invalid mem map for socket %i: %llx to %llx with a " in i82092aa_set_mem_map()
636 mem->card_start); in i82092aa_set_mem_map()
637 return -EINVAL; in i82092aa_set_mem_map()
641 if (indirect_read(sock, I365_ADDRWIN) & I365_ENA_MEM(map)) in i82092aa_set_mem_map()
642 indirect_resetbit(sock, I365_ADDRWIN, I365_ENA_MEM(map)); in i82092aa_set_mem_map()
645 …_mem_map: Setting map %i range to %x - %x on socket %i, speed is %i, active = %i \n",map, region.s… in i82092aa_set_mem_map()
648 base = I365_MEM(map); in i82092aa_set_mem_map()
650 if (mem->flags & MAP_16BIT) in i82092aa_set_mem_map()
652 if (mem->flags & MAP_0WS) in i82092aa_set_mem_map()
659 switch (to_cycles(mem->speed)) { in i82092aa_set_mem_map()
677 i = ((mem->card_start - region.start) >> 12) & 0x3fff; in i82092aa_set_mem_map()
678 if (mem->flags & MAP_WRPROT) in i82092aa_set_mem_map()
680 if (mem->flags & MAP_ATTRIB) { in i82092aa_set_mem_map()
689 if (mem->flags & MAP_ACTIVE) in i82092aa_set_mem_map()
690 indirect_setbit(sock, I365_ADDRWIN, I365_ENA_MEM(map)); in i82092aa_set_mem_map()