• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/pcmcia/

Lines Matching refs:socket

52 static int yenta_probe_cb_irq(struct yenta_socket *socket);
65 static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
67 u32 val = readl(socket->base + reg);
68 debug("%p %04x %08x\n", socket, reg, val);
72 static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
74 debug("%p %04x %08x\n", socket, reg, val);
75 writel(val, socket->base + reg);
76 readl(socket->base + reg); /* avoid problems with PCI write posting */
79 static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
82 pci_read_config_byte(socket->dev, offset, &val);
83 debug("%p %04x %02x\n", socket, offset, val);
87 static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
90 pci_read_config_word(socket->dev, offset, &val);
91 debug("%p %04x %04x\n", socket, offset, val);
95 static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
98 pci_read_config_dword(socket->dev, offset, &val);
99 debug("%p %04x %08x\n", socket, offset, val);
103 static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
105 debug("%p %04x %02x\n", socket, offset, val);
106 pci_write_config_byte(socket->dev, offset, val);
109 static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
111 debug("%p %04x %04x\n", socket, offset, val);
112 pci_write_config_word(socket->dev, offset, val);
115 static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
117 debug("%p %04x %08x\n", socket, offset, val);
118 pci_write_config_dword(socket->dev, offset, val);
121 static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
123 u8 val = readb(socket->base + 0x800 + reg);
124 debug("%p %04x %02x\n", socket, reg, val);
128 static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
131 val = readb(socket->base + 0x800 + reg);
132 val |= readb(socket->base + 0x800 + reg + 1) << 8;
133 debug("%p %04x %04x\n", socket, reg, val);
137 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
139 debug("%p %04x %02x\n", socket, reg, val);
140 writeb(val, socket->base + 0x800 + reg);
141 readb(socket->base + 0x800 + reg); /* PCI write posting... */
144 static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
146 debug("%p %04x %04x\n", socket, reg, val);
147 writeb(val, socket->base + 0x800 + reg);
148 writeb(val >> 8, socket->base + 0x800 + reg + 1);
151 readb(socket->base + 0x800 + reg);
152 readb(socket->base + 0x800 + reg + 1);
158 struct yenta_socket *socket = pci_get_drvdata(dev);
166 val = cb_readl(socket, i);
180 val = exca_readb(socket, i);
195 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
197 u32 state = cb_readl(socket, CB_SOCKET_STATE);
211 u8 status = exca_readb(socket, I365_STATUS);
213 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
228 static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
231 if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
232 (socket->flags & YENTA_16BIT_POWER_EXCA)) {
234 reg = old = exca_readb(socket, I365_POWER);
238 if (socket->flags & YENTA_16BIT_POWER_DF) {
262 exca_writeb(socket, I365_POWER, reg);
275 if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
276 cb_writel(socket, CB_SOCKET_CONTROL, reg);
282 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
287 yenta_set_power(socket, state);
289 socket->io_irq = state->io_irq;
290 bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
291 if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
296 intr = exca_readb(socket, I365_INTCTL);
298 if (!socket->cb_irq) {
302 exca_writeb(socket, I365_INTCTL, intr);
306 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
309 if (state->io_irq != socket->cb_irq) {
313 exca_writeb(socket, I365_INTCTL, reg);
315 reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
319 if (exca_readb(socket, I365_POWER) != reg)
320 exca_writeb(socket, I365_POWER, reg);
331 exca_writeb(socket, I365_CSCINT, reg);
332 exca_readb(socket, I365_CSC);
336 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
338 cb_writel(socket, CB_SOCKET_EVENT, -1);
339 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
341 /* if powering up: do it as the last step when the socket is configured */
343 yenta_set_power(socket, state);
349 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
359 addr = exca_readb(socket, I365_ADDRWIN);
364 exca_writeb(socket, I365_ADDRWIN, addr);
367 exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
368 exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
370 ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
374 exca_writeb(socket, I365_IOCTL, ioctl);
377 exca_writeb(socket, I365_ADDRWIN, addr | enable);
383 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
390 pcibios_resource_to_bus(socket->dev, &region, mem->res);
402 addr = exca_readb(socket, I365_ADDRWIN);
405 exca_writeb(socket, I365_ADDRWIN, addr);
408 exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
415 exca_writew(socket, I365_MEM(map) + I365_W_START, word);
424 exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
431 exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
434 exca_writeb(socket, I365_ADDRWIN, addr | enable);
443 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
448 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
449 cb_writel(socket, CB_SOCKET_EVENT, cb_event);
451 csc = exca_readb(socket, I365_CSC);
458 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
467 pcmcia_parse_events(&socket->socket, events);
474 struct yenta_socket *socket = (struct yenta_socket *) data;
476 yenta_interrupt(0, (void *)socket);
477 socket->poll_timer.expires = jiffies + HZ;
478 add_timer(&socket->poll_timer);
481 static void yenta_clear_maps(struct yenta_socket *socket)
488 yenta_set_socket(&socket->socket, &dead_socket);
491 yenta_set_io_map(&socket->socket, &io);
495 yenta_set_mem_map(&socket->socket, &mem);
500 static void yenta_interrogate(struct yenta_socket *socket)
504 state = cb_readl(socket, CB_SOCKET_STATE);
508 cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
514 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
516 exca_writeb(socket, I365_GBLCTL, 0x00);
517 exca_writeb(socket, I365_GENCTL, 0x00);
520 yenta_interrogate(socket);
522 yenta_clear_maps(socket);
524 if (socket->type && socket->type->sock_init)
525 socket->type->sock_init(socket);
528 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
535 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
538 cb_writel(socket, CB_SOCKET_MASK, 0x0);
604 static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
609 struct resource * root = socket->dev->bus->resource[i];
623 static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
629 res = socket->dev->resource + PCI_BRIDGE_RESOURCES + nr;
639 res->name = socket->dev->subordinate->name;
642 region.start = config_readl(socket, addr_start) & mask;
643 region.end = config_readl(socket, addr_end) | ~mask;
645 pcibios_bus_to_resource(socket->dev, res, &region);
646 root = pci_find_parent_resource(socket->dev, res);
650 pci_name(socket->dev), nr);
654 if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
655 (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
656 (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
660 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
661 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
662 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
667 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
668 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
669 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
674 pci_name(socket->dev), type);
682 static void yenta_allocate_resources(struct yenta_socket *socket)
685 program += yenta_allocate_res(socket, 0, IORESOURCE_IO,
687 program += yenta_allocate_res(socket, 1, IORESOURCE_IO,
689 program += yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
691 program += yenta_allocate_res(socket, 3, IORESOURCE_MEM,
694 pci_setup_cardbus(socket->dev->subordinate);
701 static void yenta_free_resources(struct yenta_socket *socket)
706 res = socket->dev->resource + PCI_BRIDGE_RESOURCES + i;
724 /* we don't want a dying socket registered */
725 pcmcia_unregister_socket(&sock->socket);
856 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
866 cb_writel(socket, CB_SOCKET_EVENT, -1);
867 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
868 exca_writeb(socket, I365_CSCINT, 0);
873 exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
874 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
876 cb_writel(socket, CB_SOCKET_EVENT, -1);
878 cb_writel(socket, CB_SOCKET_MASK, 0);
879 exca_writeb(socket, I365_CSCINT, 0);
896 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
901 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
902 cb_writel(socket, CB_SOCKET_EVENT, -1);
903 csc = exca_readb(socket, I365_CSC);
906 socket->probe_status = 1;
914 static int yenta_probe_cb_irq(struct yenta_socket *socket)
916 if (!socket->cb_irq)
919 socket->probe_status = 0;
921 if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
927 exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);
928 cb_writel(socket, CB_SOCKET_EVENT, -1);
929 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
930 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
935 cb_writel(socket, CB_SOCKET_MASK, 0);
936 exca_writeb(socket, I365_CSCINT, 0);
937 cb_writel(socket, CB_SOCKET_EVENT, -1);
938 exca_readb(socket, I365_CSC);
940 free_irq(socket->cb_irq, socket);
942 return (int) socket->probe_status;
951 static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
953 socket->socket.pci_irq = socket->cb_irq;
955 socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
957 socket->socket.irq_mask = 0;
960 socket->socket.irq_mask, socket->cb_irq);
966 static void yenta_config_init(struct yenta_socket *socket)
969 struct pci_dev *dev = socket->dev;
972 pcibios_resource_to_bus(socket->dev, &region, &dev->resource[0]);
974 config_writel(socket, CB_LEGACY_MODE_BASE, 0);
975 config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
976 config_writew(socket, PCI_COMMAND,
982 config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
983 config_writeb(socket, PCI_LATENCY_TIMER, 168);
984 config_writel(socket, PCI_PRIMARY_BUS,
996 bridge = config_readw(socket, CB_BRIDGE_CONTROL);
999 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
1076 * socket information structure..
1080 struct yenta_socket *socket;
1094 socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
1095 if (!socket)
1099 socket->socket.ops = &yenta_socket_operations;
1100 socket->socket.resource_ops = &pccard_nonstatic_ops;
1101 socket->socket.dev.parent = &dev->dev;
1102 socket->socket.driver_data = socket;
1103 socket->socket.owner = THIS_MODULE;
1104 socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
1105 socket->socket.map_size = 0x1000;
1106 socket->socket.cb_dev = dev;
1109 socket->dev = dev;
1110 pci_set_drvdata(dev, socket);
1134 socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
1135 if (!socket->base) {
1147 yenta_config_init(socket);
1150 cb_writel(socket, CB_SOCKET_MASK, 0x0);
1153 yenta_allocate_resources(socket);
1155 socket->cb_irq = dev->irq;
1160 socket->type = &cardbus_type[id->driver_data];
1162 ret = socket->type->override(socket);
1169 if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
1171 socket->cb_irq = 0; /* But zero is a valid IRQ number. */
1172 init_timer(&socket->poll_timer);
1173 socket->poll_timer.function = yenta_interrupt_wrapper;
1174 socket->poll_timer.data = (unsigned long)socket;
1175 socket->poll_timer.expires = jiffies + HZ;
1176 add_timer(&socket->poll_timer);
1177 printk(KERN_INFO "Yenta: no PCI IRQ, CardBus support disabled for this socket.\n"
1180 socket->socket.features |= SS_CAP_CARDBUS;
1184 yenta_interrogate(socket);
1185 yenta_get_socket_capabilities(socket, isa_interrupts);
1186 printk(KERN_INFO "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
1191 ret = pcmcia_register_socket(&socket->socket);
1199 pcmcia_unregister_socket(&socket->socket);
1203 iounmap(socket->base);
1209 kfree(socket);
1217 struct yenta_socket *socket = pci_get_drvdata(dev);
1222 if (socket) {
1223 if (socket->type && socket->type->save_state)
1224 socket->type->save_state(socket);
1227 pci_read_config_dword(dev, 16*4, &socket->saved_state[0]);
1228 pci_read_config_dword(dev, 17*4, &socket->saved_state[1]);
1245 struct yenta_socket *socket = pci_get_drvdata(dev);
1247 if (socket) {
1252 pci_write_config_dword(dev, 16*4, socket->saved_state[0]);
1253 pci_write_config_dword(dev, 17*4, socket->saved_state[1]);
1261 if (socket->type && socket->type->restore_state)
1262 socket->type->restore_state(socket);