From acb998c3fc486a18d5a40436ac3a16dfd776b0cc Mon Sep 17 00:00:00 2001 From: Russell King Date: Mon, 30 Jun 2003 20:22:11 +0100 Subject: [PCMCIA] Move "owner" field to pcmcia_socket. Move ->owner field from socket operations to pcmcia_socket. (This change is mainly for the SA11xx drivers, which use a core driver for the chip, and a separate module for all the machine specific bits.) --- include/pcmcia/ss.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index f3049953ab83..d0c3f664d26b 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h @@ -119,7 +119,6 @@ typedef struct cb_bridge_map { struct pcmcia_socket; struct pccard_operations { - struct module *owner; int (*init)(struct pcmcia_socket *sock); int (*suspend)(struct pcmcia_socket *sock); int (*register_callback)(struct pcmcia_socket *sock, void (*handler)(void *, unsigned int), void * info); @@ -169,6 +168,7 @@ struct config_t; struct region_t; struct pcmcia_socket { + struct module *owner; spinlock_t lock; struct pccard_operations * ss_entry; socket_state_t socket; -- cgit v1.2.3 From 2941bfd0d37e0954d4be9c54434986120962321d Mon Sep 17 00:00:00 2001 From: Russell King Date: Mon, 30 Jun 2003 23:23:42 +0100 Subject: [PCMCIA] Allow socket drivers call pcmcia_parse_events directly. Remove register_callback methods. Instead, allow socket drivers pass their events directly into cs.c via pcmcia_parse_events(). --- drivers/pcmcia/cs.c | 21 ++++----------------- drivers/pcmcia/i82092.c | 22 +++------------------- drivers/pcmcia/i82092aa.h | 1 - drivers/pcmcia/i82365.c | 20 +++----------------- drivers/pcmcia/sa11xx_core.c | 35 ++--------------------------------- drivers/pcmcia/sa11xx_core.h | 2 -- drivers/pcmcia/tcic.c | 21 +++------------------ drivers/pcmcia/yenta_socket.c | 15 ++------------- drivers/pcmcia/yenta_socket.h | 2 -- include/pcmcia/ss.h | 1 + 10 files changed, 18 insertions(+), 122 deletions(-) (limited to 'include') diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 6e94e86be1bf..543656f239ff 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c @@ -231,11 +231,6 @@ static const lookup_t service_table[] = { ======================================================================*/ -static int register_callback(struct pcmcia_socket *s, void (*handler)(void *, unsigned int), void * info) -{ - return s->ss_entry->register_callback(s, handler, info); -} - static int get_socket_status(struct pcmcia_socket *s, int *val) { return s->ss_entry->get_status(s, val); @@ -356,6 +351,7 @@ static int pcmcia_add_socket(struct class_device *class_dev) wait_for_completion(&socket->thread_done); BUG_ON(!socket->thread); + pcmcia_parse_events(socket, SS_DETECT); return 0; } @@ -872,16 +868,14 @@ static int pccardd(void *__skt) complete_and_exit(&skt->thread_done, 0); } -static void parse_events(void *info, u_int events) +void pcmcia_parse_events(struct pcmcia_socket *s, u_int events) { - struct pcmcia_socket *s = info; - spin_lock(&s->thread_lock); s->thread_events |= events; spin_unlock(&s->thread_lock); wake_up(&s->thread_wait); -} /* parse_events */ +} /* pcmcia_parse_events */ /*====================================================================== @@ -1142,9 +1136,6 @@ int pcmcia_deregister_client(client_handle_t handle) handle->event_handler = NULL; } - if (--s->real_clients == 0) - register_callback(s, NULL, NULL); - return CS_SUCCESS; } /* deregister_client */ @@ -1559,11 +1550,6 @@ int pcmcia_register_client(client_handle_t *handle, client_reg_t *req) if (client == NULL) return CS_OUT_OF_RESOURCE; - if (++s->real_clients == 1) { - register_callback(s, &parse_events, s); - parse_events(s, SS_DETECT); - } - *handle = client; client->state &= ~CLIENT_UNBOUND; client->Socket = s; @@ -2532,6 +2518,7 @@ EXPORT_SYMBOL(pcmcia_write_memory); EXPORT_SYMBOL(dead_socket); EXPORT_SYMBOL(CardServices); EXPORT_SYMBOL(MTDHelperEntry); +EXPORT_SYMBOL(pcmcia_parse_events); struct class pcmcia_socket_class = { .name = "pcmcia_socket", diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c index e0cb759e4120..892dd1f77d01 100644 --- a/drivers/pcmcia/i82092.c +++ b/drivers/pcmcia/i82092.c @@ -66,7 +66,6 @@ static struct pci_driver i82092aa_pci_drv = { static struct pccard_operations i82092aa_operations = { .init = i82092aa_init, .suspend = i82092aa_suspend, - .register_callback = i82092aa_register_callback, .get_status = i82092aa_get_status, .get_socket = i82092aa_get_socket, .set_socket = i82092aa_set_socket, @@ -86,10 +85,6 @@ struct socket_info { unsigned int pending_events; /* Pending events on this interface */ - void (*handler)(void *info, u_int events); - /* callback to the driver of the card */ - void *info; /* to be passed to the handler */ - struct pcmcia_socket socket; struct pci_dev *dev; /* The PCI device for the socket */ }; @@ -332,8 +327,8 @@ static void i82092aa_bh(void *dummy) for (i=0; i < socket_count; i++) { events = xchg(&(sockets[i].pending_events),0); printk("events = %x \n",events); - if (sockets[i].handler) - sockets[i].handler(sockets[i].info, events); + if (events) + pcmcia_parse_events(&sockets[i].socket, events); } } @@ -367,8 +362,7 @@ static irqreturn_t i82092aa_interrupt(int irq, void *dev, struct pt_regs *regs) csc = indirect_read(i,I365_CSC); /* card status change register */ - if ((csc==0) || /* no events on this socket */ - (sockets[i].handler==NULL)) /* no way to handle events */ + if (csc==0) /* no events on this socket */ continue; handled = 1; events = 0; @@ -475,16 +469,6 @@ static int i82092aa_suspend(struct pcmcia_socket *sock) return retval; } -static int i82092aa_register_callback(struct pcmcia_socket *socket, void (*handler)(void *, unsigned int), void * info) -{ - unsigned int sock = container_of(socket, struct socket_info, socket)->number; - enter("i82092aa_register_callback"); - sockets[sock].handler = handler; - sockets[sock].info = info; - leave("i82092aa_register_callback"); - return 0; -} /* i82092aa_register_callback */ - static int i82092aa_get_status(struct pcmcia_socket *socket, u_int *value) { unsigned int sock = container_of(socket, struct socket_info, socket)->number; diff --git a/drivers/pcmcia/i82092aa.h b/drivers/pcmcia/i82092aa.h index 682d696dadf3..0cdd80a1e17e 100644 --- a/drivers/pcmcia/i82092aa.h +++ b/drivers/pcmcia/i82092aa.h @@ -35,7 +35,6 @@ static int i82092aa_set_io_map(struct pcmcia_socket *socket, struct pccard_io_ma static int i82092aa_set_mem_map(struct pcmcia_socket *socket, struct pccard_mem_map *mem); static int i82092aa_init(struct pcmcia_socket *socket); static int i82092aa_suspend(struct pcmcia_socket *socket); -static int i82092aa_register_callback(struct pcmcia_socket *socket, void (*handler)(void *, unsigned int), void * info); #endif diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index 7bbaf46bfae6..5f607e37d65e 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c @@ -164,8 +164,6 @@ struct i82365_socket { ioaddr_t ioaddr; u_short psock; u_char cs_irq, intr; - void (*handler)(void *info, u_int events); - void *info; union { cirrus_state_t cirrus; vg46x_state_t vg46x; @@ -883,8 +881,8 @@ static void pcic_bh(void *dummy) */ if (events & SS_DETECT) mdelay(4); - if (socket[i].handler) - socket[i].handler(socket[i].info, events); + if (events) + pcmcia_parse_events(&socket[i].socket, events); } } @@ -911,8 +909,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev, handled = 1; ISA_LOCK(i, flags); csc = i365_get(i, I365_CSC); - if ((csc == 0) || (!socket[i].handler) || - (i365_get(i, I365_IDENT) & 0x70)) { + if ((csc == 0) || (i365_get(i, I365_IDENT) & 0x70)) { ISA_UNLOCK(i, flags); continue; } @@ -968,16 +965,6 @@ static void pcic_interrupt_wrapper(u_long data) /*====================================================================*/ -static int pcic_register_callback(struct pcmcia_socket *s, void (*handler)(void *, unsigned int), void * info) -{ - unsigned int sock = container_of(s, struct i82365_socket, socket)->number; - socket[sock].handler = handler; - socket[sock].info = info; - return 0; -} /* pcic_register_callback */ - -/*====================================================================*/ - static int i365_get_status(u_short sock, u_int *value) { u_int status; @@ -1402,7 +1389,6 @@ static int pcic_suspend(struct pcmcia_socket *sock) static struct pccard_operations pcic_operations = { .init = pcic_init, .suspend = pcic_suspend, - .register_callback = pcic_register_callback, .get_status = pcic_get_status, .get_socket = pcic_get_socket, .set_socket = pcic_set_socket, diff --git a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c index de72c49c84d1..1321ae4e6c54 100644 --- a/drivers/pcmcia/sa11xx_core.c +++ b/drivers/pcmcia/sa11xx_core.c @@ -295,8 +295,8 @@ static void sa1100_pcmcia_task_handler(void *data) events & SS_BATWARN ? "BATWARN " : "", events & SS_STSCHG ? "STSCHG " : ""); - if (events && skt->handler != NULL) - skt->handler(skt->handler_info, events); + if (events) + pcmcia_parse_events(&skt->socket, events); } while (events); } @@ -335,36 +335,6 @@ static irqreturn_t sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *r return IRQ_HANDLED; } -/* sa1100_pcmcia_register_callback() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the register_callback() operation for the in-kernel - * PCMCIA service (formerly SS_RegisterCallback in Card Services). If - * the function pointer `handler' is not NULL, remember the callback - * location in the state for `sock', and increment the usage counter - * for the driver module. (The callback is invoked from the interrupt - * service routine, sa1100_pcmcia_interrupt(), to notify Card Services - * of interesting events.) Otherwise, clear the callback pointer in the - * socket state and decrement the module usage count. - * - * Returns: 0 - */ -static int -sa1100_pcmcia_register_callback(struct pcmcia_socket *sock, - void (*handler)(void *, unsigned int), - void *info) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - - if (handler) { - skt->handler_info = info; - skt->handler = handler; - } else { - skt->handler = NULL; - } - - return 0; -} - /* sa1100_pcmcia_get_status() * ^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -654,7 +624,6 @@ static CLASS_DEVICE_ATTR(status, S_IRUGO, show_status, NULL); static struct pccard_operations sa11xx_pcmcia_operations = { .init = sa1100_pcmcia_sock_init, .suspend = sa1100_pcmcia_suspend, - .register_callback = sa1100_pcmcia_register_callback, .get_status = sa1100_pcmcia_get_status, .get_socket = sa1100_pcmcia_get_socket, .set_socket = sa1100_pcmcia_set_socket, diff --git a/drivers/pcmcia/sa11xx_core.h b/drivers/pcmcia/sa11xx_core.h index d9ca892bf3d2..089c18fcc6c5 100644 --- a/drivers/pcmcia/sa11xx_core.h +++ b/drivers/pcmcia/sa11xx_core.h @@ -59,8 +59,6 @@ struct sa1100_pcmcia_socket { unsigned int status; socket_state_t cs_state; - void (*handler)(void *, unsigned int); - void *handler_info; unsigned short spd_io[MAX_IO_WIN]; unsigned short spd_mem[MAX_WIN]; diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c index 655aa0dbeda3..06e9728f76fd 100644 --- a/drivers/pcmcia/tcic.c +++ b/drivers/pcmcia/tcic.c @@ -116,8 +116,6 @@ static struct pccard_operations tcic_operations; struct tcic_socket { u_short psock; - void (*handler)(void *info, u_int events); - void *info; u_char last_sstat; u_char id; struct pcmcia_socket socket; @@ -433,8 +431,6 @@ static int __init init_tcic(void) for (i = 0; i < sock; i++) { if ((i == ignore) || is_active(i)) continue; socket_table[sockets].psock = i; - socket_table[sockets].handler = NULL; - socket_table[sockets].info = NULL; socket_table[sockets].id = get_tcic_id(); socket_table[sockets].socket.owner = THIS_MODULE; @@ -572,8 +568,8 @@ static void tcic_bh(void *dummy) events = pending_events[i]; pending_events[i] = 0; spin_unlock_irq(&pending_event_lock); - if (socket_table[i].handler) - socket_table[i].handler(socket_table[i].info, events); + if (events) + pcmcia_parse_events(&socket_table[i].socket, events); } } @@ -606,7 +602,7 @@ static irqreturn_t tcic_interrupt(int irq, void *dev, struct pt_regs *regs) tcic_setb(TCIC_ICSR, TCIC_ICSR_CLEAR); quick = 1; } - if ((latch == 0) || (socket_table[psock].handler == NULL)) + if (latch == 0) continue; events = (latch & TCIC_SSTAT_CD) ? SS_DETECT : 0; events |= (latch & TCIC_SSTAT_WP) ? SS_WRPROT : 0; @@ -646,16 +642,6 @@ static void tcic_timer(u_long data) /*====================================================================*/ -static int tcic_register_callback(struct pcmcia_socket *sock, void (*handler)(void *, unsigned int), void * info) -{ - u_short psock = container_of(sock, struct tcic_socket, socket)->psock; - socket_table[psock].handler = handler; - socket_table[psock].info = info; - return 0; -} /* tcic_register_callback */ - -/*====================================================================*/ - static int tcic_get_status(struct pcmcia_socket *sock, u_int *value) { u_short psock = container_of(sock, struct tcic_socket, socket)->psock; @@ -918,7 +904,6 @@ static int tcic_suspend(struct pcmcia_socket *sock) static struct pccard_operations tcic_operations = { .init = tcic_init, .suspend = tcic_suspend, - .register_callback = tcic_register_callback, .get_status = tcic_get_status, .get_socket = tcic_get_socket, .set_socket = tcic_set_socket, diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index c8f193183ad2..471f85666351 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c @@ -429,8 +429,8 @@ static void yenta_bh(void *data) events = socket->events; socket->events = 0; spin_unlock_irq(&socket->event_lock); - if (socket->handler) - socket->handler(socket->info, events); + if (events) + pcmcia_parse_events(&socket->socket, events); } static irqreturn_t yenta_interrupt(int irq, void *dev_id, struct pt_regs *regs) @@ -771,20 +771,9 @@ static void yenta_close(struct pci_dev *dev) } -static int yenta_register_callback(struct pcmcia_socket *sock, void (*handler)(void *, unsigned int), void * info) -{ - struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); - - socket->handler = handler; - socket->info = info; - return 0; -} - - static struct pccard_operations yenta_socket_operations = { .init = yenta_init, .suspend = yenta_suspend, - .register_callback = yenta_register_callback, .get_status = yenta_get_status, .get_socket = yenta_get_socket, .set_socket = yenta_set_socket, diff --git a/drivers/pcmcia/yenta_socket.h b/drivers/pcmcia/yenta_socket.h index 276c53d2b78f..7241912cf98f 100644 --- a/drivers/pcmcia/yenta_socket.h +++ b/drivers/pcmcia/yenta_socket.h @@ -99,8 +99,6 @@ struct yenta_socket { struct pci_dev *dev; int cb_irq, io_irq; void *base; - void (*handler)(void *, unsigned int); - void *info; spinlock_t event_lock; unsigned int events; struct work_struct tq_task; diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index d0c3f664d26b..c0891855a0b1 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h @@ -235,6 +235,7 @@ struct pcmcia_socket * pcmcia_get_socket_by_nr(unsigned int nr); +extern void pcmcia_parse_events(struct pcmcia_socket *socket, unsigned int events); extern int pcmcia_register_socket(struct pcmcia_socket *socket); extern void pcmcia_unregister_socket(struct pcmcia_socket *socket); -- cgit v1.2.3 From ddf2599337b30e25c1acf03a92b168d4bbf9de40 Mon Sep 17 00:00:00 2001 From: Dominik Brodowski Date: Mon, 7 Jul 2003 02:04:22 +0100 Subject: [PCMCIA] rename ss_entry to ops Rename the strangely named "ss_entry" structure to "ops". --- drivers/pcmcia/bulkmem.c | 6 ++--- drivers/pcmcia/cistpl.c | 4 ++-- drivers/pcmcia/cs.c | 56 +++++++++++++++++++++---------------------- drivers/pcmcia/cs_internal.h | 2 +- drivers/pcmcia/i82092.c | 2 +- drivers/pcmcia/i82365.c | 2 +- drivers/pcmcia/ricoh.h | 2 +- drivers/pcmcia/rsrc_mgr.c | 4 ++-- drivers/pcmcia/sa11xx_core.c | 2 +- drivers/pcmcia/tcic.c | 2 +- drivers/pcmcia/ti113x.h | 6 ++--- drivers/pcmcia/yenta_socket.c | 2 +- include/pcmcia/ss.h | 4 +++- 13 files changed, 48 insertions(+), 46 deletions(-) (limited to 'include') diff --git a/drivers/pcmcia/bulkmem.c b/drivers/pcmcia/bulkmem.c index 2433140a2dbf..4759c521694b 100644 --- a/drivers/pcmcia/bulkmem.c +++ b/drivers/pcmcia/bulkmem.c @@ -258,7 +258,7 @@ static int mtd_modify_window(window_handle_t win, mtd_mod_win_t *req) win->ctl.flags |= MAP_ATTRIB; win->ctl.speed = req->AccessSpeed; win->ctl.card_start = req->CardOffset; - win->sock->ss_entry->set_mem_map(win->sock, &win->ctl); + win->sock->ops->set_mem_map(win->sock, &win->ctl); return CS_SUCCESS; } @@ -271,7 +271,7 @@ static int mtd_set_vpp(client_handle_t handle, mtd_vpp_req_t *req) return CS_BAD_VPP; s = SOCKET(handle); s->socket.Vpp = req->Vpp1; - if (s->ss_entry->set_socket(s, &s->socket)) + if (s->ops->set_socket(s, &s->socket)) return CS_BAD_VPP; return CS_SUCCESS; } @@ -286,7 +286,7 @@ static int mtd_rdy_mask(client_handle_t handle, mtd_rdy_req_t *req) s->socket.csc_mask |= SS_READY; else s->socket.csc_mask &= ~SS_READY; - if (s->ss_entry->set_socket(s, &s->socket)) + if (s->ops->set_socket(s, &s->socket)) return CS_GENERAL_FAILURE; return CS_SUCCESS; } diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index 3dfaa5bb5882..c505a28fcf12 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c @@ -86,7 +86,7 @@ void release_cis_mem(struct pcmcia_socket *s) { if (s->cis_mem.sys_start != 0) { s->cis_mem.flags &= ~MAP_ACTIVE; - s->ss_entry->set_mem_map(s, &s->cis_mem); + s->ops->set_mem_map(s, &s->cis_mem); if (!(s->features & SS_CAP_STATIC_MAP)) release_mem_region(s->cis_mem.sys_start, s->map_size); iounmap(s->cis_virt); @@ -118,7 +118,7 @@ set_cis_map(struct pcmcia_socket *s, unsigned int card_offset, unsigned int flag } mem->card_start = card_offset; mem->flags = flags; - s->ss_entry->set_mem_map(s, mem); + s->ops->set_mem_map(s, mem); if (s->features & SS_CAP_STATIC_MAP) { if (s->cis_virt) iounmap(s->cis_virt); diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index f1734743ac83..faedd17418f9 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c @@ -303,7 +303,7 @@ static int pcmcia_add_socket(struct class_device *class_dev) spin_lock_init(&socket->lock); socket->socket = dead_socket; - socket->ss_entry->init(socket); + socket->ops->init(socket); init_completion(&socket->thread_done); init_waitqueue_head(&socket->thread_wait); @@ -337,7 +337,7 @@ static void pcmcia_remove_socket(struct class_device *class_dev) socket->clients = socket->clients->next; kfree(client); } - socket->ss_entry = NULL; + socket->ops = NULL; } static void pcmcia_release_socket(struct class_device *class_dev) @@ -352,10 +352,10 @@ static void pcmcia_release_socket(struct class_device *class_dev) */ int pcmcia_register_socket(struct pcmcia_socket *socket) { - if (!socket || !socket->ss_entry || !socket->dev.dev) + if (!socket || !socket->ops || !socket->dev.dev) return -EINVAL; - DEBUG(0, "cs: pcmcia_register_socket(0x%p)\n", socket->ss_entry); + DEBUG(0, "cs: pcmcia_register_socket(0x%p)\n", socket->ops); /* try to obtain a socket number [yes, it gets ugly if we * register more than 2^sizeof(unsigned int) pcmcia @@ -407,7 +407,7 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket) if (!socket) return; - DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ss_entry); + DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ops); init_completion(&socket->socket_released); @@ -475,7 +475,7 @@ static void shutdown_socket(struct pcmcia_socket *s) /* Blank out the socket state */ s->state &= SOCKET_PRESENT|SOCKET_SETUP_PENDING; s->socket = dead_socket; - s->ss_entry->init(s); + s->ops->init(s); s->irq.AssignedIRQ = s->irq.Config = 0; s->lock_count = 0; destroy_cis_cache(s); @@ -490,7 +490,7 @@ static void shutdown_socket(struct pcmcia_socket *s) s->socket.Vpp = 0; s->socket.Vcc = 0; s->socket.io_irq = 0; - s->ss_entry->set_socket(s, &s->socket); + s->ops->set_socket(s, &s->socket); /* */ #ifdef CONFIG_CARDBUS cb_free(s); @@ -584,16 +584,16 @@ static int socket_reset(struct pcmcia_socket *skt) int status, i; skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET; - skt->ss_entry->set_socket(skt, &skt->socket); + skt->ops->set_socket(skt, &skt->socket); udelay((long)reset_time); skt->socket.flags &= ~SS_RESET; - skt->ss_entry->set_socket(skt, &skt->socket); + skt->ops->set_socket(skt, &skt->socket); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(cs_to_timeout(unreset_delay)); for (i = 0; i < unreset_limit; i++) { - skt->ss_entry->get_status(skt, &status); + skt->ops->get_status(skt, &status); if (!(status & SS_DETECT)) return CS_NO_CARD; @@ -613,7 +613,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) { int status, i; - skt->ss_entry->get_status(skt, &status); + skt->ops->get_status(skt, &status); if (!(status & SS_DETECT)) return CS_NO_CARD; @@ -621,7 +621,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) schedule_timeout(cs_to_timeout(initial_delay)); for (i = 0; i < 100; i++) { - skt->ss_entry->get_status(skt, &status); + skt->ops->get_status(skt, &status); if (!(status & SS_DETECT)) return CS_NO_CARD; @@ -658,7 +658,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) } skt->state |= SOCKET_PRESENT; skt->socket.flags = SS_DEBOUNCED; - skt->ss_entry->set_socket(skt, &skt->socket); + skt->ops->set_socket(skt, &skt->socket); /* * Wait "vcc_settle" for the supply to stabilise. @@ -705,7 +705,7 @@ static int socket_suspend(struct pcmcia_socket *skt) send_event(skt, CS_EVENT_PM_SUSPEND, CS_EVENT_PRI_LOW); skt->socket = dead_socket; - skt->ss_entry->suspend(skt); + skt->ops->suspend(skt); skt->state |= SOCKET_SUSPEND; return CS_SUCCESS; @@ -724,7 +724,7 @@ static int socket_resume(struct pcmcia_socket *skt) return CS_IN_USE; skt->socket = dead_socket; - skt->ss_entry->init(skt); + skt->ops->init(skt); ret = socket_setup(skt, resume_delay); if (ret == CS_SUCCESS) { @@ -778,7 +778,7 @@ static void socket_detect_change(struct pcmcia_socket *skt) schedule_timeout(cs_to_timeout(2)); } - skt->ss_entry->get_status(skt, &status); + skt->ops->get_status(skt, &status); if ((skt->state & SOCKET_PRESENT) && !(status & SS_DETECT)) socket_remove(skt); @@ -1331,7 +1331,7 @@ int pcmcia_get_status(client_handle_t handle, cs_status_t *status) if (CHECK_HANDLE(handle)) return CS_BAD_HANDLE; s = SOCKET(handle); - s->ss_entry->get_status(s, &val); + s->ops->get_status(s, &val); status->CardState = status->SocketState = 0; status->CardState |= (val & SS_DETECT) ? CS_EVENT_CARD_DETECT : 0; status->CardState |= (val & SS_CARDBUS) ? CS_EVENT_CB_DETECT : 0; @@ -1410,7 +1410,7 @@ int pcmcia_map_mem_page(window_handle_t win, memreq_t *req) return CS_BAD_PAGE; s = win->sock; win->ctl.card_start = req->CardOffset; - if (s->ss_entry->set_mem_map(s, &win->ctl) != 0) + if (s->ops->set_mem_map(s, &win->ctl) != 0) return CS_BAD_OFFSET; return CS_SUCCESS; } /* map_mem_page */ @@ -1443,7 +1443,7 @@ int pcmcia_modify_configuration(client_handle_t handle, c->Attributes &= ~CONF_ENABLE_IRQ; s->socket.io_irq = 0; } - s->ss_entry->set_socket(s, &s->socket); + s->ops->set_socket(s, &s->socket); } if (mod->Attributes & CONF_VCC_CHANGE_VALID) @@ -1455,7 +1455,7 @@ int pcmcia_modify_configuration(client_handle_t handle, if (mod->Vpp1 != mod->Vpp2) return CS_BAD_VPP; c->Vpp1 = c->Vpp2 = s->socket.Vpp = mod->Vpp1; - if (s->ss_entry->set_socket(s, &s->socket)) + if (s->ops->set_socket(s, &s->socket)) return CS_BAD_VPP; } else if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) || (mod->Attributes & CONF_VPP2_CHANGE_VALID)) @@ -1485,7 +1485,7 @@ int pcmcia_modify_window(window_handle_t win, modwin_t *req) if (req->Attributes & WIN_USE_WAIT) win->ctl.flags |= MAP_USE_WAIT; win->ctl.speed = req->AccessSpeed; - win->sock->ss_entry->set_mem_map(win->sock, &win->ctl); + win->sock->ops->set_mem_map(win->sock, &win->ctl); return CS_SUCCESS; } /* modify_window */ @@ -1585,7 +1585,7 @@ int pcmcia_release_configuration(client_handle_t handle) s->socket.flags = SS_OUTPUT_ENA; /* Is this correct? */ s->socket.Vpp = 0; s->socket.io_irq = 0; - s->ss_entry->set_socket(s, &s->socket); + s->ops->set_socket(s, &s->socket); } if (c->state & CONFIG_IO_REQ) for (i = 0; i < MAX_IO_WIN; i++) { @@ -1595,7 +1595,7 @@ int pcmcia_release_configuration(client_handle_t handle) if (s->io[i].Config != 0) continue; io.map = i; - s->ss_entry->set_io_map(s, &io); + s->ops->set_io_map(s, &io); } c->state &= ~CONFIG_LOCKED; } @@ -1696,7 +1696,7 @@ int pcmcia_release_window(window_handle_t win) /* Shut down memory window */ win->ctl.flags &= ~MAP_ACTIVE; - s->ss_entry->set_mem_map(s, &win->ctl); + s->ops->set_mem_map(s, &win->ctl); s->state &= ~SOCKET_WIN_REQ(win->index); /* Release system memory */ @@ -1743,7 +1743,7 @@ int pcmcia_request_configuration(client_handle_t handle, if (req->Vpp1 != req->Vpp2) return CS_BAD_VPP; s->socket.Vpp = req->Vpp1; - if (s->ss_entry->set_socket(s, &s->socket)) + if (s->ops->set_socket(s, &s->socket)) return CS_BAD_VPP; c->Vcc = req->Vcc; c->Vpp1 = c->Vpp2 = req->Vpp1; @@ -1761,7 +1761,7 @@ int pcmcia_request_configuration(client_handle_t handle, s->socket.io_irq = s->irq.AssignedIRQ; else s->socket.io_irq = 0; - s->ss_entry->set_socket(s, &s->socket); + s->ops->set_socket(s, &s->socket); s->lock_count++; /* Set up CIS configuration registers */ @@ -1826,7 +1826,7 @@ int pcmcia_request_configuration(client_handle_t handle, } iomap.start = s->io[i].BasePort; iomap.stop = iomap.start + s->io[i].NumPorts - 1; - s->ss_entry->set_io_map(s, &iomap); + s->ops->set_io_map(s, &iomap); s->io[i].Config++; } } @@ -2047,7 +2047,7 @@ int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle win->ctl.sys_start = win->base; win->ctl.sys_stop = win->base + win->size-1; win->ctl.card_start = 0; - if (s->ss_entry->set_mem_map(s, &win->ctl) != 0) + if (s->ops->set_mem_map(s, &win->ctl) != 0) return CS_BAD_ARGS; s->state |= SOCKET_WIN_REQ(w); diff --git a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h index 55049c5d1825..ae857307a979 100644 --- a/drivers/pcmcia/cs_internal.h +++ b/drivers/pcmcia/cs_internal.h @@ -113,7 +113,7 @@ struct cis_cache_entry { (((h) == NULL) || ((h)->client_magic != CLIENT_MAGIC)) #define CHECK_SOCKET(s) \ - (((s) >= sockets) || (socket_table[s]->ss_entry == NULL)) + (((s) >= sockets) || (socket_table[s]->ops == NULL)) #define SOCKET(h) (h->Socket) #define CONFIG(h) (&SOCKET(h)->config[(h)->Function]) diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c index 3da463cb8e59..1a07132f86cc 100644 --- a/drivers/pcmcia/i82092.c +++ b/drivers/pcmcia/i82092.c @@ -161,7 +161,7 @@ static int __init i82092aa_pci_probe(struct pci_dev *dev, const struct pci_devic for (i = 0; idev; - sockets[i].socket.ss_entry = &i82092aa_operations; + sockets[i].socket.ops = &i82092aa_operations; ret = pcmcia_register_socket(&sockets[i].socket); if (ret) { goto err_out_free_sockets; diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index 7814e207f1af..fa6ec7749998 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c @@ -1403,7 +1403,7 @@ static int __init init_i82365(void) /* register sockets with the pcmcia core */ for (i = 0; i < sockets; i++) { socket[i].socket.dev.dev = &i82365_device.dev; - socket[i].socket.ss_entry = &pcic_operations; + socket[i].socket.ops = &pcic_operations; socket[i].socket.owner = THIS_MODULE; socket[i].number = i; ret = pcmcia_register_socket(&socket[i].socket); diff --git a/drivers/pcmcia/ricoh.h b/drivers/pcmcia/ricoh.h index a36f2f339d42..dcfcbd4328b3 100644 --- a/drivers/pcmcia/ricoh.h +++ b/drivers/pcmcia/ricoh.h @@ -161,7 +161,7 @@ static int ricoh_override(struct yenta_socket *socket) rl_config(socket) |= RL5C4XX_CONFIG_PREFETCH; } - socket->socket.ss_entry->init = ricoh_init; + socket->socket.ops->init = ricoh_init; return 0; } diff --git a/drivers/pcmcia/rsrc_mgr.c b/drivers/pcmcia/rsrc_mgr.c index 9dd5e03e92ff..979f1e84217d 100644 --- a/drivers/pcmcia/rsrc_mgr.c +++ b/drivers/pcmcia/rsrc_mgr.c @@ -360,7 +360,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res) map.sys_start = res->start; map.sys_stop = res->end; map.card_start = 0; - s->ss_entry->set_mem_map(s, &map); + s->ops->set_mem_map(s, &map); /* Don't bother checking every word... */ for (i = 0; i < s->map_size; i += 44) { @@ -370,7 +370,7 @@ static int checksum(struct pcmcia_socket *s, struct resource *res) } map.flags = 0; - s->ss_entry->set_mem_map(s, &map); + s->ops->set_mem_map(s, &map); iounmap(virt); } diff --git a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c index c4a1239092c2..253938655dd2 100644 --- a/drivers/pcmcia/sa11xx_core.c +++ b/drivers/pcmcia/sa11xx_core.c @@ -725,7 +725,7 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, in struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i); memset(skt, 0, sizeof(*skt)); - skt->socket.ss_entry = &sa11xx_pcmcia_operations; + skt->socket.ops = &sa11xx_pcmcia_operations; skt->socket.owner = ops->owner; skt->socket.dev.dev = dev; diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c index 408d6a501cb4..762da4e3715b 100644 --- a/drivers/pcmcia/tcic.c +++ b/drivers/pcmcia/tcic.c @@ -519,7 +519,7 @@ static int __init init_tcic(void) platform_device_register(&tcic_device); for (i = 0; i < sockets; i++) { - socket_table[i].socket.ss_entry = &tcic_operations; + socket_table[i].socket.ops = &tcic_operations; socket_table[i].socket.dev.dev = &tcic_device.dev; ret = pcmcia_register_socket(&socket_table[i].socket); if (ret && i) diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index 147601b2a982..3f6234bdd718 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h @@ -196,7 +196,7 @@ static int ti_override(struct yenta_socket *socket) config_writeb(socket, TI113X_DEVICE_CONTROL, devctl); } - socket->socket.ss_entry->init = ti_init; + socket->socket.ops->init = ti_init; return 0; } @@ -229,7 +229,7 @@ static int ti113x_override(struct yenta_socket *socket) if (socket->cb_irq) ti_cardctl(socket) |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ; ti_override(socket); - socket->socket.ss_entry->init = ti113x_init; + socket->socket.ops->init = ti113x_init; return 0; } @@ -258,7 +258,7 @@ static int ti1250_override(struct yenta_socket *socket) if (socket->cb_irq) ti_diag(socket) |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ; ti113x_override(socket); - socket->socket.ss_entry->init = ti1250_init; + socket->socket.ops->init = ti1250_init; return 0; } diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index 2b34cc49165b..707cb7297fc5 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c @@ -828,7 +828,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i memset(socket, 0, sizeof(*socket)); /* prepare pcmcia_socket */ - socket->socket.ss_entry = ¥ta_socket_operations; + socket->socket.ops = ¥ta_socket_operations; socket->socket.dev.dev = &dev->dev; socket->socket.driver_data = socket; socket->socket.owner = THIS_MODULE; diff --git a/include/pcmcia/ss.h b/include/pcmcia/ss.h index c0891855a0b1..24cb380be518 100644 --- a/include/pcmcia/ss.h +++ b/include/pcmcia/ss.h @@ -170,7 +170,6 @@ struct region_t; struct pcmcia_socket { struct module *owner; spinlock_t lock; - struct pccard_operations * ss_entry; socket_state_t socket; u_int state; u_short functions; @@ -207,6 +206,9 @@ struct pcmcia_socket { u_char pci_irq; struct pci_dev * cb_dev; + /* socket operations */ + struct pccard_operations * ops; + /* state thread */ struct semaphore skt_sem; /* protects socket h/w state */ -- cgit v1.2.3 From 102dd0d5b7434ec49f36f1fb6a2c9e60db21576f Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 12 Jul 2003 22:54:25 -0700 Subject: [ALPHA] Add tgkill syscall. --- arch/alpha/kernel/systbls.S | 1 + include/asm-alpha/unistd.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S index 3d9d1ac4f830..64f6da6300d4 100644 --- a/arch/alpha/kernel/systbls.S +++ b/arch/alpha/kernel/systbls.S @@ -443,6 +443,7 @@ sys_call_table: .quad sys_clock_getres .quad sys_clock_nanosleep .quad sys_semtimedop + .quad sys_tgkill .size sys_call_table, . - sys_call_table .type sys_call_table, @object diff --git a/include/asm-alpha/unistd.h b/include/asm-alpha/unistd.h index 38faced4d0a2..3035b700f454 100644 --- a/include/asm-alpha/unistd.h +++ b/include/asm-alpha/unistd.h @@ -359,7 +359,8 @@ #define __NR_clock_getres 421 #define __NR_clock_nanosleep 422 #define __NR_semtimedop 423 -#define NR_SYSCALLS 424 +#define __NR_tgkill 424 +#define NR_SYSCALLS 425 #if defined(__GNUC__) -- cgit v1.2.3 From 7b30618fce7a8321aec4de709a8e193364a593da Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 12 Jul 2003 22:55:42 -0700 Subject: [ALPHA] Set correct CLOCK_TICK_RATE for the RTC. --- include/asm-alpha/timex.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/asm-alpha/timex.h b/include/asm-alpha/timex.h index 2576553b348e..f3737a1ee698 100644 --- a/include/asm-alpha/timex.h +++ b/include/asm-alpha/timex.h @@ -6,7 +6,9 @@ #ifndef _ASMALPHA_TIMEX_H #define _ASMALPHA_TIMEX_H -#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ +/* With only one or two oddballs, we use the RTC as the ticker, selecting + the 32.768kHz reference clock, which nicely divides down to our HZ. */ +#define CLOCK_TICK_RATE 32768 /* * Standard way to access the cycle counter. -- cgit v1.2.3