Lines Matching full:socket
6 * NEC VRC4173 CARDU driver for Socket Services
43 MODULE_DESCRIPTION("NEC VRC4173 CARDU driver for Socket Services");
56 static inline uint8_t exca_readb(vrc4173_socket_t *socket, uint16_t offset) in exca_readb() argument
58 return readb(socket->base + EXCA_REGS_BASE + offset); in exca_readb()
61 static inline uint16_t exca_readw(vrc4173_socket_t *socket, uint16_t offset) in exca_readw() argument
65 val = readb(socket->base + EXCA_REGS_BASE + offset); in exca_readw()
66 val |= (u16)readb(socket->base + EXCA_REGS_BASE + offset + 1) << 8; in exca_readw()
71 static inline void exca_writeb(vrc4173_socket_t *socket, uint16_t offset, uint8_t val) in exca_writeb() argument
73 writeb(val, socket->base + EXCA_REGS_BASE + offset); in exca_writeb()
76 static inline void exca_writew(vrc4173_socket_t *socket, uint8_t offset, uint16_t val) in exca_writew() argument
78 writeb((u8)val, socket->base + EXCA_REGS_BASE + offset); in exca_writew()
79 writeb((u8)(val >> 8), socket->base + EXCA_REGS_BASE + offset + 1); in exca_writew()
82 static inline uint32_t cardbus_socket_readl(vrc4173_socket_t *socket, u16 offset) in cardbus_socket_readl() argument
84 return readl(socket->base + CARDBUS_SOCKET_REGS_BASE + offset); in cardbus_socket_readl()
87 static inline void cardbus_socket_writel(vrc4173_socket_t *socket, u16 offset, uint32_t val) in cardbus_socket_writel() argument
89 writel(val, socket->base + CARDBUS_SOCKET_REGS_BASE + offset); in cardbus_socket_writel()
124 vrc4173_socket_t *socket = &cardu_sockets[slot]; in cardu_init() local
126 cardu_pciregs_init(socket->dev); in cardu_init()
129 exca_writeb(socket, GLO_CNT, 0); in cardu_init()
131 socket->cap.features |= SS_CAP_PCCARD | SS_CAP_PAGE_REGS; in cardu_init()
132 socket->cap.irq_mask = 0; in cardu_init()
133 socket->cap.map_size = 0x1000; in cardu_init()
134 socket->cap.pci_irq = socket->dev->irq; in cardu_init()
135 socket->events = 0; in cardu_init()
136 spin_lock_init(socket->event_lock); in cardu_init()
139 exca_writeb(socket, CARD_SCI, CARD_DT_EN|RDY_EN|BAT_WAR_EN|BAT_DEAD_EN); in cardu_init()
148 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_register_callback() local
150 socket->handler = handler; in cardu_register_callback()
151 socket->info = info; in cardu_register_callback()
158 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_inquire_socket() local
160 *cap = socket->cap; in cardu_inquire_socket()
167 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_get_status() local
172 status = exca_readb(socket, IF_STATUS); in cardu_get_status()
178 if (exca_readb(socket, INT_GEN_CNT) & CARD_TYPE_IO) { in cardu_get_status()
188 state = cardbus_socket_readl(socket, SKT_PRE_STATE); in cardu_get_status()
228 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_set_socket() local
237 exca_writeb(socket, PWR_CNT, val); in cardu_set_socket()
239 val = exca_readb(socket, INT_GEN_CNT) & CARD_REST0; in cardu_set_socket()
243 exca_writeb(socket, INT_GEN_CNT, val); in cardu_set_socket()
250 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_get_io_map() local
258 io->start = exca_readw(socket, IO_WIN_SA(map)); in cardu_get_io_map()
259 io->stop = exca_readw(socket, IO_WIN_EA(map)); in cardu_get_io_map()
261 ioctl = exca_readb(socket, IO_WIN_CNT); in cardu_get_io_map()
262 window = exca_readb(socket, ADR_WIN_EN); in cardu_get_io_map()
274 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_set_io_map() local
283 window = exca_readb(socket, ADR_WIN_EN); in cardu_set_io_map()
288 exca_writeb(socket, ADR_WIN_EN, window); in cardu_set_io_map()
291 exca_writew(socket, IO_WIN_SA(map), io->start); in cardu_set_io_map()
292 exca_writew(socket, IO_WIN_EA(map), io->stop); in cardu_set_io_map()
294 ioctl = exca_readb(socket, IO_WIN_CNT) & ~IO_WIN_CNT_MASK(map); in cardu_set_io_map()
297 exca_writeb(socket, IO_WIN_CNT, ioctl); in cardu_set_io_map()
300 exca_writeb(socket, ADR_WIN_EN, window | enable); in cardu_set_io_map()
307 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_get_mem_map() local
316 window = exca_readb(socket, ADR_WIN_EN); in cardu_get_mem_map()
319 start = exca_readw(socket, MEM_WIN_SA(map)); in cardu_get_mem_map()
323 stop = exca_readw(socket, MEM_WIN_EA(map)); in cardu_get_mem_map()
326 offset = exca_readw(socket, MEM_WIN_OA(map)); in cardu_get_mem_map()
332 page = exca_readb(socket, MEM_WIN_SAU(map)) << 24; in cardu_get_mem_map()
341 vrc4173_socket_t *socket = &cardu_sockets[sock]; in cardu_set_mem_map() local
356 window = exca_readb(socket, ADR_WIN_EN); in cardu_set_mem_map()
360 exca_writeb(socket, ADR_WIN_EN, window); in cardu_set_mem_map()
363 exca_writeb(socket, MEM_WIN_SAU(map), sys_start >> 24); in cardu_set_mem_map()
367 exca_writew(socket, MEM_WIN_SA(map), value); in cardu_set_mem_map()
370 exca_writew(socket, MEM_WIN_EA(map), value); in cardu_set_mem_map()
375 exca_writew(socket, MEM_WIN_OA(map), value); in cardu_set_mem_map()
378 exca_writeb(socket, ADR_WIN_EN, window | enable); in cardu_set_mem_map()
402 vrc4173_socket_t *socket = (vrc4173_socket_t *)data; in cardu_bh() local
405 spin_lock_irq(&socket->event_lock); in cardu_bh()
406 events = socket->events; in cardu_bh()
407 socket->events = 0; in cardu_bh()
408 spin_unlock_irq(&socket->event_lock); in cardu_bh()
410 if (socket->handler) in cardu_bh()
411 socket->handler(socket->info, events); in cardu_bh()
414 static uint16_t get_events(vrc4173_socket_t *socket) in get_events() argument
419 status = exca_readb(socket, IF_STATUS); in get_events()
420 csc = exca_readb(socket, CARD_SC); in get_events()
428 if (exca_readb(socket, INT_GEN_CNT) & CARD_TYPE_IO) { in get_events()
445 vrc4173_socket_t *socket = (vrc4173_socket_t *)dev_id; in cardu_interrupt() local
448 INIT_WORK(&socket->tq_work, cardu_bh, socket); in cardu_interrupt()
450 events = get_events(socket); in cardu_interrupt()
452 spin_lock(&socket->event_lock); in cardu_interrupt()
453 socket->events |= events; in cardu_interrupt()
454 spin_unlock(&socket->event_lock); in cardu_interrupt()
455 schedule_work(&socket->tq_work); in cardu_interrupt()
462 vrc4173_socket_t *socket; in vrc4173_cardu_probe() local
467 socket = &cardu_sockets[slot]; in vrc4173_cardu_probe()
468 if (socket->noprobe != 0) in vrc4173_cardu_probe()
471 sprintf(socket->name, "NEC VRC4173 CARDU%1d", slot+1); in vrc4173_cardu_probe()
494 err = pci_request_regions(dev, socket->name); in vrc4173_cardu_probe()
500 socket->base = ioremap(start, len); in vrc4173_cardu_probe()
501 if (socket->base == NULL) { in vrc4173_cardu_probe()
506 socket->dev = dev; in vrc4173_cardu_probe()
508 socket->pcmcia_socket = pcmcia_register_socket(slot, &cardu_operations, 1); in vrc4173_cardu_probe()
509 if (socket->pcmcia_socket == NULL) { in vrc4173_cardu_probe()
514 if (request_irq(dev->irq, cardu_interrupt, IRQF_SHARED, socket->name, socket) < 0) { in vrc4173_cardu_probe()
519 printk(KERN_INFO "%s at %#08lx, IRQ %d\n", socket->name, start, dev->irq); in vrc4173_cardu_probe()
524 pcmcia_unregister_socket(socket->pcmcia_socket); in vrc4173_cardu_probe()
525 socket->pcmcia_socket = NULL; in vrc4173_cardu_probe()
527 iounmap(socket->base); in vrc4173_cardu_probe()
528 socket->base = NULL; in vrc4173_cardu_probe()