Lines Matching refs:socket
69 static int yenta_probe_cb_irq(struct yenta_socket *socket);
70 static unsigned int yenta_probe_irq(struct yenta_socket *socket,
84 static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
86 u32 val = readl(socket->base + reg);
87 debug("%04x %08x\n", socket, reg, val);
91 static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
93 debug("%04x %08x\n", socket, reg, val);
94 writel(val, socket->base + reg);
95 readl(socket->base + reg); /* avoid problems with PCI write posting */
98 static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
101 pci_read_config_byte(socket->dev, offset, &val);
102 debug("%04x %02x\n", socket, offset, val);
106 static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
109 pci_read_config_word(socket->dev, offset, &val);
110 debug("%04x %04x\n", socket, offset, val);
114 static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
117 pci_read_config_dword(socket->dev, offset, &val);
118 debug("%04x %08x\n", socket, offset, val);
122 static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
124 debug("%04x %02x\n", socket, offset, val);
125 pci_write_config_byte(socket->dev, offset, val);
128 static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
130 debug("%04x %04x\n", socket, offset, val);
131 pci_write_config_word(socket->dev, offset, val);
134 static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
136 debug("%04x %08x\n", socket, offset, val);
137 pci_write_config_dword(socket->dev, offset, val);
140 static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
142 u8 val = readb(socket->base + 0x800 + reg);
143 debug("%04x %02x\n", socket, reg, val);
147 static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
150 val = readb(socket->base + 0x800 + reg);
151 val |= readb(socket->base + 0x800 + reg + 1) << 8;
152 debug("%04x %04x\n", socket, reg, val);
156 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
158 debug("%04x %02x\n", socket, reg, val);
159 writeb(val, socket->base + 0x800 + reg);
160 readb(socket->base + 0x800 + reg); /* PCI write posting... */
163 static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
165 debug("%04x %04x\n", socket, reg, val);
166 writeb(val, socket->base + 0x800 + reg);
167 writeb(val >> 8, socket->base + 0x800 + reg + 1);
170 readb(socket->base + 0x800 + reg);
171 readb(socket->base + 0x800 + reg + 1);
176 struct yenta_socket *socket = dev_get_drvdata(yentadev);
184 val = cb_readl(socket, i);
198 val = exca_readb(socket, i);
213 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
215 u32 state = cb_readl(socket, CB_SOCKET_STATE);
229 u8 status = exca_readb(socket, I365_STATUS);
231 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
246 static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
249 if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
250 (socket->flags & YENTA_16BIT_POWER_EXCA)) {
252 reg = old = exca_readb(socket, I365_POWER);
256 if (socket->flags & YENTA_16BIT_POWER_DF) {
298 exca_writeb(socket, I365_POWER, reg);
323 if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
324 cb_writel(socket, CB_SOCKET_CONTROL, reg);
330 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
335 yenta_set_power(socket, state);
337 socket->io_irq = state->io_irq;
338 bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
339 if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
344 intr = exca_readb(socket, I365_INTCTL);
346 if (!socket->dev->irq) {
347 intr |= socket->cb_irq ? socket->cb_irq : state->io_irq;
350 exca_writeb(socket, I365_INTCTL, intr);
354 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
357 if (state->io_irq != socket->dev->irq) {
361 exca_writeb(socket, I365_INTCTL, reg);
363 reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
369 if (exca_readb(socket, I365_POWER) != reg)
370 exca_writeb(socket, I365_POWER, reg);
373 reg = exca_readb(socket, I365_CSCINT);
387 exca_writeb(socket, I365_CSCINT, reg);
388 exca_readb(socket, I365_CSC);
392 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
394 cb_writel(socket, CB_SOCKET_EVENT, -1);
395 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
397 /* if powering up: do it as the last step when the socket is configured */
399 yenta_set_power(socket, state);
405 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
415 addr = exca_readb(socket, I365_ADDRWIN);
420 exca_writeb(socket, I365_ADDRWIN, addr);
423 exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
424 exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
426 ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
433 exca_writeb(socket, I365_IOCTL, ioctl);
436 exca_writeb(socket, I365_ADDRWIN, addr | enable);
442 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
449 pcibios_resource_to_bus(socket->dev->bus, ®ion, mem->res);
461 addr = exca_readb(socket, I365_ADDRWIN);
464 exca_writeb(socket, I365_ADDRWIN, addr);
467 exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
474 exca_writew(socket, I365_MEM(map) + I365_W_START, word);
490 exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
497 exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
500 exca_writeb(socket, I365_ADDRWIN, addr | enable);
509 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
514 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
515 cb_writel(socket, CB_SOCKET_EVENT, cb_event);
517 csc = exca_readb(socket, I365_CSC);
524 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
533 pcmcia_parse_events(&socket->socket, events);
540 struct yenta_socket *socket = from_timer(socket, t, poll_timer);
542 yenta_interrupt(0, (void *)socket);
543 socket->poll_timer.expires = jiffies + HZ;
544 add_timer(&socket->poll_timer);
547 static void yenta_clear_maps(struct yenta_socket *socket)
554 yenta_set_socket(&socket->socket, &dead_socket);
557 yenta_set_io_map(&socket->socket, &io);
561 yenta_set_mem_map(&socket->socket, &mem);
566 static void yenta_interrogate(struct yenta_socket *socket)
570 state = cb_readl(socket, CB_SOCKET_STATE);
574 cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
580 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
582 exca_writeb(socket, I365_GBLCTL, 0x00);
583 exca_writeb(socket, I365_GENCTL, 0x00);
586 yenta_interrogate(socket);
588 yenta_clear_maps(socket);
590 if (socket->type && socket->type->sock_init)
591 socket->type->sock_init(socket);
594 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
601 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
604 cb_writel(socket, CB_SOCKET_MASK, 0x0);
670 static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
676 pci_bus_for_each_resource(socket->dev->bus, root, i) {
690 static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
692 struct pci_dev *dev = socket->dev;
710 region.start = config_readl(socket, addr_start) & mask;
711 region.end = config_readl(socket, addr_end) | ~mask;
722 if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
723 (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
724 (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
728 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
729 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
730 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
735 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
736 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
737 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
748 static void yenta_free_res(struct yenta_socket *socket, int nr)
750 struct pci_dev *dev = socket->dev;
763 static void yenta_allocate_resources(struct yenta_socket *socket)
766 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_0_WINDOW,
769 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_1_WINDOW,
772 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_0_WINDOW,
775 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_1_WINDOW,
779 pci_setup_cardbus(socket->dev->subordinate);
786 static void yenta_free_resources(struct yenta_socket *socket)
788 yenta_free_res(socket, PCI_CB_BRIDGE_IO_0_WINDOW);
789 yenta_free_res(socket, PCI_CB_BRIDGE_IO_1_WINDOW);
790 yenta_free_res(socket, PCI_CB_BRIDGE_MEM_0_WINDOW);
791 yenta_free_res(socket, PCI_CB_BRIDGE_MEM_1_WINDOW);
805 /* we don't want a dying socket registered */
806 pcmcia_unregister_socket(&sock->socket);
924 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
935 cb_writel(socket, CB_SOCKET_EVENT, -1);
936 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
937 reg = exca_readb(socket, I365_CSCINT);
938 exca_writeb(socket, I365_CSCINT, 0);
943 exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
944 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
946 cb_writel(socket, CB_SOCKET_EVENT, -1);
948 cb_writel(socket, CB_SOCKET_MASK, 0);
949 exca_writeb(socket, I365_CSCINT, reg);
966 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
971 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
972 cb_writel(socket, CB_SOCKET_EVENT, -1);
973 csc = exca_readb(socket, I365_CSC);
976 socket->probe_status = 1;
984 static int yenta_probe_cb_irq(struct yenta_socket *socket)
988 if (!socket->cb_irq)
991 socket->probe_status = 0;
993 if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
994 dev_warn(&socket->dev->dev,
1000 if (!socket->dev->irq)
1001 reg = exca_readb(socket, I365_CSCINT);
1002 exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);
1003 cb_writel(socket, CB_SOCKET_EVENT, -1);
1004 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
1005 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
1010 cb_writel(socket, CB_SOCKET_MASK, 0);
1011 exca_writeb(socket, I365_CSCINT, reg);
1012 cb_writel(socket, CB_SOCKET_EVENT, -1);
1013 exca_readb(socket, I365_CSC);
1015 free_irq(socket->cb_irq, socket);
1017 return (int) socket->probe_status;
1026 static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
1028 socket->socket.pci_irq = socket->cb_irq;
1030 socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
1032 socket->socket.irq_mask = 0;
1034 dev_info(&socket->dev->dev, "ISA IRQ mask 0x%04x, PCI irq %d\n",
1035 socket->socket.irq_mask, socket->cb_irq);
1041 static void yenta_config_init(struct yenta_socket *socket)
1044 struct pci_dev *dev = socket->dev;
1047 pcibios_resource_to_bus(socket->dev->bus, ®ion, &dev->resource[0]);
1049 config_writel(socket, CB_LEGACY_MODE_BASE, 0);
1050 config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
1051 config_writew(socket, PCI_COMMAND,
1058 config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
1059 config_writeb(socket, PCI_LATENCY_TIMER, 168);
1060 config_writel(socket, PCI_PRIMARY_BUS,
1072 bridge = config_readw(socket, CB_BRIDGE_CONTROL);
1075 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
1154 * socket information structure..
1158 struct yenta_socket *socket;
1171 socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
1172 if (!socket)
1176 socket->socket.ops = ¥ta_socket_operations;
1177 socket->socket.resource_ops = &pccard_nonstatic_ops;
1178 socket->socket.dev.parent = &dev->dev;
1179 socket->socket.driver_data = socket;
1180 socket->socket.owner = THIS_MODULE;
1181 socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
1182 socket->socket.map_size = 0x1000;
1183 socket->socket.cb_dev = dev;
1186 socket->dev = dev;
1187 pci_set_drvdata(dev, socket);
1211 socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
1212 if (!socket->base) {
1224 yenta_config_init(socket);
1227 cb_writel(socket, CB_SOCKET_MASK, 0x0);
1230 yenta_allocate_resources(socket);
1232 socket->cb_irq = dev->irq;
1237 socket->type = &cardbus_type[id->driver_data];
1239 ret = socket->type->override(socket);
1246 if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
1248 socket->cb_irq = 0; /* But zero is a valid IRQ number. */
1249 timer_setup(&socket->poll_timer, yenta_interrupt_wrapper, 0);
1250 mod_timer(&socket->poll_timer, jiffies + HZ);
1252 "no PCI IRQ, CardBus support disabled for this socket.\n");
1256 socket->socket.features |= SS_CAP_CARDBUS;
1260 yenta_interrogate(socket);
1261 yenta_get_socket_capabilities(socket, isa_interrupts);
1263 cb_readl(socket, CB_SOCKET_STATE));
1268 ret = pcmcia_register_socket(&socket->socket);
1281 pcmcia_unregister_socket(&socket->socket);
1283 if (socket->cb_irq)
1284 free_irq(socket->cb_irq, socket);
1286 del_timer_sync(&socket->poll_timer);
1288 iounmap(socket->base);
1289 yenta_free_resources(socket);
1296 kfree(socket);
1304 struct yenta_socket *socket = pci_get_drvdata(pdev);
1306 if (!socket)
1309 if (socket->type && socket->type->save_state)
1310 socket->type->save_state(socket);
1313 pci_read_config_dword(pdev, 16*4, &socket->saved_state[0]);
1314 pci_read_config_dword(pdev, 17*4, &socket->saved_state[1]);
1323 struct yenta_socket *socket = pci_get_drvdata(pdev);
1326 if (!socket)
1329 pci_write_config_dword(pdev, 16*4, socket->saved_state[0]);
1330 pci_write_config_dword(pdev, 17*4, socket->saved_state[1]);
1338 if (socket->type && socket->type->restore_state)
1339 socket->type->restore_state(socket);