You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(135) |
Nov
(123) |
Dec
(83) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(244) |
Feb
(72) |
Mar
(221) |
Apr
(91) |
May
(104) |
Jun
(93) |
Jul
(78) |
Aug
(1) |
Sep
(1) |
Oct
(29) |
Nov
(98) |
Dec
(20) |
2003 |
Jan
|
Feb
(21) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(18) |
Sep
(18) |
Oct
(23) |
Nov
(12) |
Dec
(6) |
2004 |
Jan
(2) |
Feb
(32) |
Mar
|
Apr
(12) |
May
(11) |
Jun
(11) |
Jul
|
Aug
(9) |
Sep
|
Oct
(15) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
(2) |
Mar
(11) |
Apr
(6) |
May
(1) |
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
(2) |
Mar
|
Apr
(25) |
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(13) |
Oct
|
Nov
(2) |
Dec
(2) |
2011 |
Jan
|
Feb
|
Mar
(10) |
Apr
(10) |
May
(1) |
Jun
(6) |
Jul
|
Aug
(2) |
Sep
(5) |
Oct
|
Nov
|
Dec
|
From: James S. <jsi...@us...> - 2002-03-15 18:28:16
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/drivers/input/keyboard Modified Files: cerf_keyb.c Log Message: Alots of fixes across many platforms. Index: cerf_keyb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/cerf_keyb.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- cerf_keyb.c 24 Jan 2002 19:51:26 -0000 1.1 +++ cerf_keyb.c 15 Mar 2002 18:28:12 -0000 1.2 @@ -10,17 +10,13 @@ #include <linux/mm.h> #include <linux/signal.h> #include <linux/init.h> -#include <linux/kbd_ll.h> #include <linux/delay.h> #include <linux/random.h> #include <linux/poll.h> -#include <linux/miscdevice.h> #include <linux/slab.h> -#include <linux/kbd_kern.h> #include <linux/smp_lock.h> #include <linux/timer.h> -#include <asm/keyboard.h> #include <asm/bitops.h> #include <asm/uaccess.h> #include <asm/irq.h> @@ -312,9 +308,7 @@ { if(scancode != (unsigned char)(KBD_NO_DATA)) { -#ifdef CONFIG_VT handle_scancode(scancode, !(scancode & KBD_KEYUP)); -#endif tasklet_schedule(&keyboard_tasklet); } } |
From: James S. <jsi...@us...> - 2002-03-15 18:28:16
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64/xmon In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/ppc64/xmon Added Files: start.c Log Message: Alots of fixes across many platforms. --- NEW FILE: start.c --- /* * Copyright (C) 1996 Paul Mackerras. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ #include <linux/string.h> #include <asm/machdep.h> #include <asm/io.h> #include <asm/page.h> #include <linux/pmu.h> #include <linux/kernel.h> #include <linux/sysrq.h> #include <asm/prom.h> #include <asm/processor.h> /* Transition to udbg isn't quite done yet...but very close. */ #define USE_UDBG #ifdef USE_UDBG #include <asm/udbg.h> #endif #ifndef USE_UDBG static volatile unsigned char *sccc, *sccd; #endif unsigned long TXRDY, RXRDY; extern void xmon_printf(const char *fmt, ...); static int xmon_expect(const char *str, unsigned int timeout); #ifndef USE_UDBG static int console = 0; #endif static int via_modem = 0; /* static int xmon_use_sccb = 0; --Unused */ #define TB_SPEED 25000000 extern void *comport1; static inline unsigned int readtb(void) { unsigned int ret; asm volatile("mftb %0" : "=r" (ret) :); return ret; } #ifndef USE_UDBG void buf_access(void) { sccd[3] &= ~0x80; /* reset DLAB */ } #endif static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs, struct tty_struct *tty) { xmon(pt_regs); } static struct sysrq_key_op sysrq_xmon_op = { handler: sysrq_handle_xmon, help_msg: "xmon", action_msg: "Entering xmon\n", }; void xmon_map_scc(void) { /* This maybe isn't the best place to register sysrq 'x' */ __sysrq_put_key_op('x', &sysrq_xmon_op); #ifndef USE_UDBG /* should already be mapped by the kernel boot */ sccd = (volatile unsigned char *) (((unsigned long)comport1)); sccc = (volatile unsigned char *) (((unsigned long)comport1)+5); TXRDY = 0x20; RXRDY = 1; #endif } static int scc_initialized = 0; void xmon_init_scc(void); extern void pmu_poll(void); int xmon_write(void *handle, void *ptr, int nb) { #ifdef USE_UDBG return udbg_write(ptr, nb); #else char *p = ptr; int i, c, ct; if (!scc_initialized) xmon_init_scc(); ct = 0; for (i = 0; i < nb; ++i) { while ((*sccc & TXRDY) == 0) { } c = p[i]; if (c == '\n' && !ct) { c = '\r'; ct = 1; --i; } else { if (console) printk("%c", c); ct = 0; } buf_access(); *sccd = c; } return i; #endif } int xmon_wants_key; int xmon_read(void *handle, void *ptr, int nb) { #ifdef USE_UDBG return udbg_read(ptr, nb); #else char *p = ptr; int i, c; if (!scc_initialized) xmon_init_scc(); for (i = 0; i < nb; ++i) { do { while ((*sccc & RXRDY) == 0) ; buf_access(); c = *sccd; } while (c == 0x11 || c == 0x13); *p++ = c; } return i; #endif } int xmon_read_poll(void) { #ifdef USE_UDBG return udbg_getc_poll(); #else if ((*sccc & RXRDY) == 0) { return -1; } buf_access(); return *sccd; #endif } void xmon_init_scc() { #ifndef USE_UDBG sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */ sccd[0] = 12; eieio(); /* DLL = 9600 baud */ sccd[1] = 0; eieio(); sccd[2] = 0; eieio(); /* FCR = 0 */ sccd[3] = 3; eieio(); /* LCR = 8N1 */ sccd[1] = 0; eieio(); /* IER = 0 */ #endif scc_initialized = 1; if (via_modem) { for (;;) { xmon_write(0, "ATE1V1\r", 7); if (xmon_expect("OK", 5)) { xmon_write(0, "ATA\r", 4); if (xmon_expect("CONNECT", 40)) break; } xmon_write(0, "+++", 3); xmon_expect("OK", 3); } } } void *xmon_stdin; void *xmon_stdout; void *xmon_stderr; void xmon_init(void) { } int xmon_putc(int c, void *f) { char ch = c; if (c == '\n') xmon_putc('\r', f); return xmon_write(f, &ch, 1) == 1? c: -1; } int xmon_putchar(int c) { return xmon_putc(c, xmon_stdout); } int xmon_fputs(char *str, void *f) { int n = strlen(str); return xmon_write(f, str, n) == n? 0: -1; } int xmon_readchar(void) { char ch; for (;;) { switch (xmon_read(xmon_stdin, &ch, 1)) { case 1: return ch; case -1: xmon_printf("read(stdin) returned -1\r\n", 0, 0); return -1; } } } static char line[256]; static char *lineptr; static int lineleft; int xmon_expect(const char *str, unsigned int timeout) { int c; unsigned int t0; timeout *= TB_SPEED; t0 = readtb(); do { lineptr = line; for (;;) { c = xmon_read_poll(); if (c == -1) { if (readtb() - t0 > timeout) return 0; continue; } if (c == '\n') break; if (c != '\r' && lineptr < &line[sizeof(line) - 1]) *lineptr++ = c; } *lineptr = 0; } while (strstr(line, str) == NULL); return 1; } int xmon_getchar(void) { int c; if (lineleft == 0) { lineptr = line; for (;;) { c = xmon_readchar(); if (c == -1 || c == 4) break; if (c == '\r' || c == '\n') { *lineptr++ = '\n'; xmon_putchar('\n'); break; } switch (c) { case 0177: case '\b': if (lineptr > line) { xmon_putchar('\b'); xmon_putchar(' '); xmon_putchar('\b'); --lineptr; } break; case 'U' & 0x1F: while (lineptr > line) { xmon_putchar('\b'); xmon_putchar(' '); xmon_putchar('\b'); --lineptr; } break; default: if (lineptr >= &line[sizeof(line) - 1]) xmon_putchar('\a'); else { xmon_putchar(c); *lineptr++ = c; } } } lineleft = lineptr - line; lineptr = line; } if (lineleft == 0) return -1; --lineleft; return *lineptr++; } char * xmon_fgets(char *str, int nb, void *f) { char *p; int c; for (p = str; p < str + nb - 1; ) { c = xmon_getchar(); if (c == -1) { if (p == str) return 0; break; } *p++ = c; if (c == '\n') break; } *p = 0; return str; } |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64 In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/ppc64 Added Files: config.in Log Message: Alots of fixes across many platforms. --- NEW FILE: config.in --- # # For a description of the syntax of this configuration file, # see Documentation/kbuild/config-language.txt. # define_bool CONFIG_UID16 n define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y define_bool CONFIG_GENERIC_BUST_SPINLOCK n define_bool CONFIG_GENERIC_ISA_DMA y define_bool CONFIG_HAVE_DEC_LOCK y source init/Config.in mainmenu_option next_comment comment 'Platform support' choice 'Platform Type' \ "iSeries CONFIG_PPC_ISERIES \ pSeries CONFIG_PPC_PSERIES " pSeries define_bool CONFIG_PPC y define_bool CONFIG_PPC64 y bool 'Symmetric multi-processing support' CONFIG_SMP if [ "$CONFIG_SMP" = "y" ]; then bool ' Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS if [ "$CONFIG_PPC_PSERIES" = "y" ]; then bool ' Hardware multithreading' CONFIG_HMT bool ' PCI Enhanced Error Handling' CONFIG_PPC_EEH fi fi define_bool CONFIG_PREEMPT n if [ "$CONFIG_PPC_ISERIES" = "y" ]; then define_bool CONFIG_MSCHUNKS y else bool 'MsChunks Physical to Absolute address translation support' CONFIG_MSCHUNKS fi endmenu mainmenu_option next_comment comment 'General setup' define_bool CONFIG_ISA n define_bool CONFIG_SBUS n define_bool CONFIG_MCA n define_bool CONFIG_EISA n define_bool CONFIG_PCI y # only elf supported, a.out is not -- Cort if [ "$CONFIG_PROC_FS" = "y" ]; then define_bool CONFIG_KCORE_ELF y fi bool 'Kernel Support for 64 bit ELF binaries' CONFIG_BINFMT_ELF tristate 'Kernel support for 32 bit binaries' CONFIG_BINFMT_ELF32 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC source drivers/pci/Config.in bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG if [ "$CONFIG_HOTPLUG" = "y" ]; then source drivers/pcmcia/Config.in else define_bool CONFIG_PCMCIA n fi source drivers/parport/Config.in if [ "$CONFIG_PPC_ISERIES" != "y" ]; then bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE fi endmenu source drivers/mtd/Config.in source drivers/pnp/Config.in source drivers/block/Config.in source drivers/md/Config.in if [ "$CONFIG_NET" = "y" ]; then source net/Config.in fi mainmenu_option next_comment comment 'ATA/IDE/MFM/RLL support' tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE if [ "$CONFIG_IDE" != "n" ]; then source drivers/ide/Config.in else define_bool CONFIG_BLK_DEV_IDE_MODES n define_bool CONFIG_BLK_DEV_HD n fi endmenu mainmenu_option next_comment comment 'SCSI support' tristate 'SCSI support' CONFIG_SCSI if [ "$CONFIG_SCSI" != "n" ]; then source drivers/scsi/Config.in fi endmenu source drivers/ieee1394/Config.in if [ "$CONFIG_NET" = "y" ]; then mainmenu_option next_comment comment 'Network device support' bool 'Network device support' CONFIG_NETDEVICES if [ "$CONFIG_NETDEVICES" = "y" ]; then source drivers/net/Config.in if [ "$CONFIG_ATM" = "y" ]; then source drivers/atm/Config.in fi fi endmenu fi source net/ax25/Config.in source net/irda/Config.in mainmenu_option next_comment comment 'ISDN subsystem' tristate 'ISDN support' CONFIG_ISDN if [ "$CONFIG_ISDN" != "n" ]; then source drivers/isdn/Config.in fi endmenu mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then source drivers/cdrom/Config.in fi endmenu source drivers/video/Config.in if [ "$CONFIG_PPC_ISERIES" = "y" ]; then mainmenu_option next_comment comment 'iSeries device drivers' dep_tristate 'iSeries Virtual Console Support' CONFIG_VIOCONS $CONFIG_PPC_ISERIES dep_tristate 'iSeries Virtual I/O disk support' CONFIG_VIODASD $CONFIG_PPC_ISERIES if [ "$CONFIG_VIODASD" = "y" -o "$CONFIG_VIODASD" = "m" ]; then bool 'iSeries Virtual disk IDE emulation' CONFIG_VIODASD_IDE fi dep_tristate 'iSeries Virtual I/O CD support' CONFIG_VIOCD $CONFIG_PPC_ISERIES if [ "$CONFIG_VIOCD" = "y" -o "$CONFIG_VIOCD" = "m" ]; then bool 'iSeries Virtual CD Aztech emulation' CONFIG_VIOCD_AZTECH fi dep_tristate 'iSeries Virtual Tape Support' CONFIG_VIOTAPE $CONFIG_PPC_ISERIES dep_tristate 'iSeries Virtual Ethernet driver support' CONFIG_VETH $CONFIG_PPC_ISERIES endmenu fi if [ "$CONFIG_VIOCONS" = "n" ]; then if [ "$CONFIG_VIODASD" = "n" ]; then if [ "$CONFIG_VIOTAPE" = "n" ]; then if [ "$CONFIG_VIOCD" = "n" ]; then define_bool CONFIG_VIOPATH n else define_bool CONFIG_VIOPATH y fi else define_bool CONFIG_VIOPATH y fi else define_bool CONFIG_VIOPATH y fi else define_bool CONFIG_VIOPATH y fi if [ "$CONFIG_VIOCD" = "y" ]; then define_bool CONFIG_CD_NO_IDESCSI y fi source drivers/input/Config.in source drivers/char/Config.in source fs/Config.in mainmenu_option next_comment comment 'Sound' tristate 'Sound card support' CONFIG_SOUND if [ "$CONFIG_SOUND" != "n" ]; then source sound/Config.in fi endmenu source drivers/usb/Config.in mainmenu_option next_comment comment 'Kernel hacking' bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ bool 'Include kgdb kernel debugger' CONFIG_KGDB bool 'Include xmon kernel debugger' CONFIG_XMON bool 'Include PPCDBG realtime debugging' CONFIG_PPCDBG endmenu source lib/Config.in |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/mips64/sgi-ip22 In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/mips64/sgi-ip22 Modified Files: ip22-setup.c Log Message: Alots of fixes across many platforms. Index: ip22-setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/mips64/sgi-ip22/ip22-setup.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- ip22-setup.c 6 Oct 2001 16:11:12 -0000 1.7 +++ ip22-setup.c 15 Mar 2002 18:28:11 -0000 1.8 @@ -81,10 +81,7 @@ ip22_volume_set(simple_strtoul(ArcGetEnvironmentVariable("volume"), NULL, 10)); -#ifdef CONFIG_VT #ifdef CONFIG_SGI_NEWPORT_CONSOLE - conswitchp = &newport_con; - screen_info = (struct screen_info) { 0, 0, /* orig-x, orig-y */ 0, /* unused */ @@ -96,15 +93,8 @@ 0, /* orig_video_isVGA */ 16 /* orig_video_points */ }; -#else - conswitchp = &dummy_con; -#endif #endif rtc_ops = &indy_rtc_ops; - kbd_ops = &sgi_kbd_ops; -#ifdef CONFIG_PSMOUSE - aux_device_present = 0xaa; -#endif #ifdef CONFIG_VIDEO_VINO init_vino(); #endif |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc/kernel In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/ppc/kernel Modified Files: ppc_ksyms.c Log Message: Alots of fixes across many platforms. Index: ppc_ksyms.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/kernel/ppc_ksyms.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- ppc_ksyms.c 14 Mar 2002 22:32:22 -0000 1.4 +++ ppc_ksyms.c 15 Mar 2002 18:28:11 -0000 1.5 @@ -10,7 +10,6 @@ #include <linux/string.h> #include <linux/interrupt.h> #include <linux/tty.h> -#include <linux/vt_kern.h> #include <linux/nvram.h> #include <linux/console.h> #include <linux/irq.h> @@ -273,9 +272,6 @@ #endif #if defined(CONFIG_SCSI) && defined(CONFIG_ALL_PPC) EXPORT_SYMBOL(note_scsi_host); -#endif -#ifdef CONFIG_VT -EXPORT_SYMBOL(kd_mksound); #endif #ifdef CONFIG_NVRAM EXPORT_SYMBOL(nvram_read_byte); |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc/xmon In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/ppc/xmon Added Files: start.c Log Message: Alots of fixes across many platforms. --- NEW FILE: start.c --- /* * BK Id: %F% %I% %G% %U% %#% */ /* * Copyright (C) 1996 Paul Mackerras. */ #include <linux/config.h> #include <linux/string.h> #include <asm/machdep.h> #include <asm/io.h> #include <asm/page.h> #include <linux/adb.h> #include <linux/pmu.h> #include <linux/cuda.h> #include <linux/kernel.h> #include <linux/errno.h> #include <linux/sysrq.h> #include <asm/prom.h> #include <asm/bootx.h> #include <asm/machdep.h> #include <asm/errno.h> #include <asm/pmac_feature.h> #include <asm/processor.h> #include <asm/delay.h> #include <asm/btext.h> #ifdef CONFIG_SMP #include <asm/bitops.h> #endif static volatile unsigned char *sccc, *sccd; unsigned int TXRDY, RXRDY, DLAB; extern void xmon_printf(const char *fmt, ...); static int xmon_expect(const char *str, unsigned int timeout); static int use_screen; static int via_modem; static int xmon_use_sccb; static struct device_node *channel_node; #define TB_SPEED 25000000 static inline unsigned int readtb(void) { unsigned int ret; asm volatile("mftb %0" : "=r" (ret) :); return ret; } void buf_access(void) { if (DLAB) sccd[3] &= ~DLAB; /* reset DLAB */ } extern int adb_init(void); #ifdef CONFIG_ALL_PPC /* * This looks in the "ranges" property for the primary PCI host bridge * to find the physical address of the start of PCI/ISA I/O space. * It is basically a cut-down version of pci_process_bridge_OF_ranges. */ static unsigned long chrp_find_phys_io_base(void) { struct device_node *node; unsigned int *ranges; unsigned long base = CHRP_ISA_IO_BASE; int rlen = 0; int np; node = find_devices("isa"); if (node != NULL) { node = node->parent; if (node == NULL || node->type == NULL || strcmp(node->type, "pci") != 0) node = NULL; } if (node == NULL) node = find_devices("pci"); if (node == NULL) return base; ranges = (unsigned int *) get_property(node, "ranges", &rlen); np = prom_n_addr_cells(node) + 5; while ((rlen -= np * sizeof(unsigned int)) >= 0) { if ((ranges[0] >> 24) == 1 && ranges[2] == 0) { /* I/O space starting at 0, grab the phys base */ base = ranges[np - 3]; break; } ranges += np; } return base; } #endif /* CONFIG_ALL_PPC */ static void sysrq_handle_xmon(int key, struct pt_regs *regs, struct tty_struct *tty) { xmon(regs); } static struct sysrq_key_op sysrq_xmon_op = { handler: sysrq_handle_xmon, help_msg: "Xmon", action_msg: "Entering xmon\n", }; void xmon_map_scc(void) { #ifdef CONFIG_ALL_PPC volatile unsigned char *base; use_screen = 0; if (_machine == _MACH_Pmac) { struct device_node *np; unsigned long addr; #ifdef CONFIG_BOOTX_TEXT if (!machine_is_compatible("iMac")) { /* see if there is a keyboard in the device tree with a parent of type "adb" */ for (np = find_devices("keyboard"); np; np = np->next) if (np->parent && np->parent->type && strcmp(np->parent->type, "adb") == 0) break; /* needs to be hacked if xmon_printk is to be used from within find_via_pmu() */ #ifdef CONFIG_ADB_PMU if (np != NULL && boot_text_mapped && find_via_pmu()) use_screen = 1; #endif #ifdef CONFIG_ADB_CUDA if (np != NULL && boot_text_mapped && find_via_cuda()) use_screen = 1; #endif } if (!use_screen && (np = find_devices("escc")) != NULL) { /* * look for the device node for the serial port * we're using and see if it says it has a modem */ char *name = xmon_use_sccb? "ch-b": "ch-a"; char *slots; int l; np = np->child; while (np != NULL && strcmp(np->name, name) != 0) np = np->sibling; if (np != NULL) { /* XXX should parse this properly */ channel_node = np; slots = get_property(np, "slot-names", &l); if (slots != NULL && l >= 10 && strcmp(slots+4, "Modem") == 0) via_modem = 1; } } btext_drawstring("xmon uses "); if (use_screen) btext_drawstring("screen and keyboard\n"); else { if (via_modem) btext_drawstring("modem on "); btext_drawstring(xmon_use_sccb? "printer": "modem"); btext_drawstring(" port\n"); } #endif /* CONFIG_BOOTX_TEXT */ #ifdef CHRP_ESCC addr = 0xc1013020; #else addr = 0xf3013020; #endif TXRDY = 4; RXRDY = 1; np = find_devices("mac-io"); if (np && np->n_addrs) addr = np->addrs[0].address + 0x13020; base = (volatile unsigned char *) ioremap(addr & PAGE_MASK, PAGE_SIZE); sccc = base + (addr & ~PAGE_MASK); sccd = sccc + 0x10; } else { base = (volatile unsigned char *) isa_io_base; if (_machine == _MACH_chrp) base = (volatile unsigned char *) ioremap(chrp_find_phys_io_base(), 0x1000); sccc = base + 0x3fd; sccd = base + 0x3f8; if (xmon_use_sccb) { sccc -= 0x100; sccd -= 0x100; } TXRDY = 0x20; RXRDY = 1; DLAB = 0x80; } #elif defined(CONFIG_GEMINI) /* should already be mapped by the kernel boot */ sccc = (volatile unsigned char *) 0xffeffb0d; sccd = (volatile unsigned char *) 0xffeffb08; TXRDY = 0x20; RXRDY = 1; DLAB = 0x80; #elif defined(CONFIG_405GP) sccc = (volatile unsigned char *)0xef600305; sccd = (volatile unsigned char *)0xef600300; TXRDY = 0x20; RXRDY = 1; DLAB = 0x80; #endif /* platform */ __sysrq_put_key_op('x', &sysrq_xmon_op); } static int scc_initialized = 0; void xmon_init_scc(void); extern void pmu_poll(void); extern void cuda_poll(void); static inline void do_poll_adb(void) { #ifdef CONFIG_ADB_PMU if (sys_ctrler == SYS_CTRLER_PMU) pmu_poll(); #endif /* CONFIG_ADB_PMU */ #ifdef CONFIG_ADB_CUDA if (sys_ctrler == SYS_CTRLER_CUDA) cuda_poll(); #endif /* CONFIG_ADB_CUDA */ } int xmon_write(void *handle, void *ptr, int nb) { char *p = ptr; int i, c, ct; #ifdef CONFIG_SMP static unsigned long xmon_write_lock; int lock_wait = 1000000; int locked; while ((locked = test_and_set_bit(0, &xmon_write_lock)) != 0) if (--lock_wait == 0) break; #endif #ifdef CONFIG_BOOTX_TEXT if (use_screen) { /* write it on the screen */ for (i = 0; i < nb; ++i) btext_drawchar(*p++); goto out; } #endif if (!scc_initialized) xmon_init_scc(); ct = 0; for (i = 0; i < nb; ++i) { while ((*sccc & TXRDY) == 0) do_poll_adb(); c = p[i]; if (c == '\n' && !ct) { c = '\r'; ct = 1; --i; } else { ct = 0; } buf_access(); *sccd = c; eieio(); } out: #ifdef CONFIG_SMP if (!locked) clear_bit(0, &xmon_write_lock); #endif return nb; } int xmon_wants_key; int xmon_adb_keycode; #ifdef CONFIG_BOOTX_TEXT static int xmon_adb_shiftstate; static unsigned char xmon_keytab[128] = "asdfhgzxcv\000bqwer" /* 0x00 - 0x0f */ "yt123465=97-80]o" /* 0x10 - 0x1f */ "u[ip\rlj'k;\\,/nm." /* 0x20 - 0x2f */ "\t `\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */ "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */ "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */ static unsigned char xmon_shift_keytab[128] = "ASDFHGZXCV\000BQWER" /* 0x00 - 0x0f */ "YT!@#$^%+(&_*)}O" /* 0x10 - 0x1f */ "U{IP\rLJ\"K:|<?NM>" /* 0x20 - 0x2f */ "\t ~\177\0\033\0\0\0\0\0\0\0\0\0\0" /* 0x30 - 0x3f */ "\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */ "\0\0000123456789\0\0\0"; /* 0x50 - 0x5f */ static int xmon_get_adb_key(void) { int k, t, on; xmon_wants_key = 1; for (;;) { xmon_adb_keycode = -1; t = 0; on = 0; do { if (--t < 0) { on = 1 - on; btext_drawchar(on? 0xdb: 0x20); btext_drawchar('\b'); t = 200000; } do_poll_adb(); } while (xmon_adb_keycode == -1); k = xmon_adb_keycode; if (on) btext_drawstring(" \b"); /* test for shift keys */ if ((k & 0x7f) == 0x38 || (k & 0x7f) == 0x7b) { xmon_adb_shiftstate = (k & 0x80) == 0; continue; } if (k >= 0x80) continue; /* ignore up transitions */ k = (xmon_adb_shiftstate? xmon_shift_keytab: xmon_keytab)[k]; if (k != 0) break; } xmon_wants_key = 0; return k; } #endif /* CONFIG_BOOTX_TEXT */ int xmon_read(void *handle, void *ptr, int nb) { char *p = ptr; int i; #ifdef CONFIG_BOOTX_TEXT if (use_screen) { for (i = 0; i < nb; ++i) *p++ = xmon_get_adb_key(); return i; } #endif if (!scc_initialized) xmon_init_scc(); for (i = 0; i < nb; ++i) { while ((*sccc & RXRDY) == 0) do_poll_adb(); buf_access(); *p++ = *sccd; } return i; } int xmon_read_poll(void) { if ((*sccc & RXRDY) == 0) { do_poll_adb(); return -1; } buf_access(); return *sccd; } static unsigned char scc_inittab[] = { 13, 0, /* set baud rate divisor */ 12, 1, 14, 1, /* baud rate gen enable, src=rtxc */ 11, 0x50, /* clocks = br gen */ 5, 0xea, /* tx 8 bits, assert DTR & RTS */ 4, 0x46, /* x16 clock, 1 stop */ 3, 0xc1, /* rx enable, 8 bits */ }; void xmon_init_scc() { if ( _machine == _MACH_chrp ) { sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */ sccd[0] = 12; eieio(); /* DLL = 9600 baud */ sccd[1] = 0; eieio(); sccd[2] = 0; eieio(); /* FCR = 0 */ sccd[3] = 3; eieio(); /* LCR = 8N1 */ sccd[1] = 0; eieio(); /* IER = 0 */ } else if ( _machine == _MACH_Pmac ) { int i, x; if (channel_node != 0) pmac_call_feature( PMAC_FTR_SCC_ENABLE, channel_node, PMAC_SCC_ASYNC | PMAC_SCC_FLAG_XMON, 1); printk(KERN_INFO "Serial port locked ON by debugger !\n"); if (via_modem && channel_node != 0) { unsigned int t0; pmac_call_feature( PMAC_FTR_MODEM_ENABLE, channel_node, 0, 1); printk(KERN_INFO "Modem powered up by debugger !\n"); t0 = readtb(); while (readtb() - t0 < 3*TB_SPEED) eieio(); } /* use the B channel if requested */ if (xmon_use_sccb) { sccc = (volatile unsigned char *) ((unsigned long)sccc & ~0x20); sccd = sccc + 0x10; } for (i = 20000; i != 0; --i) { x = *sccc; eieio(); } *sccc = 9; eieio(); /* reset A or B side */ *sccc = ((unsigned long)sccc & 0x20)? 0x80: 0x40; eieio(); for (i = 0; i < sizeof(scc_inittab); ++i) { *sccc = scc_inittab[i]; eieio(); } } scc_initialized = 1; if (via_modem) { for (;;) { xmon_write(0, "ATE1V1\r", 7); if (xmon_expect("OK", 5)) { xmon_write(0, "ATA\r", 4); if (xmon_expect("CONNECT", 40)) break; } xmon_write(0, "+++", 3); xmon_expect("OK", 3); } } } #if 0 extern int (*prom_entry)(void *); int xmon_exit(void) { struct prom_args { char *service; } args; for (;;) { args.service = "exit"; (*prom_entry)(&args); } } #endif void *xmon_stdin; void *xmon_stdout; void *xmon_stderr; void xmon_init(void) { } int xmon_putc(int c, void *f) { char ch = c; if (c == '\n') xmon_putc('\r', f); return xmon_write(f, &ch, 1) == 1? c: -1; } int xmon_putchar(int c) { return xmon_putc(c, xmon_stdout); } int xmon_fputs(char *str, void *f) { int n = strlen(str); return xmon_write(f, str, n) == n? 0: -1; } int xmon_readchar(void) { char ch; for (;;) { switch (xmon_read(xmon_stdin, &ch, 1)) { case 1: return ch; case -1: xmon_printf("read(stdin) returned -1\r\n", 0, 0); return -1; } } } static char line[256]; static char *lineptr; static int lineleft; int xmon_expect(const char *str, unsigned int timeout) { int c; unsigned int t0; timeout *= TB_SPEED; t0 = readtb(); do { lineptr = line; for (;;) { c = xmon_read_poll(); if (c == -1) { if (readtb() - t0 > timeout) return 0; continue; } if (c == '\n') break; if (c != '\r' && lineptr < &line[sizeof(line) - 1]) *lineptr++ = c; } *lineptr = 0; } while (strstr(line, str) == NULL); return 1; } int xmon_getchar(void) { int c; if (lineleft == 0) { lineptr = line; for (;;) { c = xmon_readchar(); if (c == -1 || c == 4) break; if (c == '\r' || c == '\n') { *lineptr++ = '\n'; xmon_putchar('\n'); break; } switch (c) { case 0177: case '\b': if (lineptr > line) { xmon_putchar('\b'); xmon_putchar(' '); xmon_putchar('\b'); --lineptr; } break; case 'U' & 0x1F: while (lineptr > line) { xmon_putchar('\b'); xmon_putchar(' '); xmon_putchar('\b'); --lineptr; } break; default: if (lineptr >= &line[sizeof(line) - 1]) xmon_putchar('\a'); else { xmon_putchar(c); *lineptr++ = c; } } } lineleft = lineptr - line; lineptr = line; } if (lineleft == 0) return -1; --lineleft; return *lineptr++; } char * xmon_fgets(char *str, int nb, void *f) { char *p; int c; for (p = str; p < str + nb - 1; ) { c = xmon_getchar(); if (c == -1) { if (p == str) return 0; break; } *p++ = c; if (c == '\n') break; } *p = 0; return str; } void xmon_enter(void) { #ifdef CONFIG_ADB_PMU if (_machine == _MACH_Pmac) { pmu_suspend(); } #endif } void xmon_leave(void) { #ifdef CONFIG_ADB_PMU if (_machine == _MACH_Pmac) { pmu_resume(); } #endif } |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/mips/sgi/kernel In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/mips/sgi/kernel Modified Files: setup.c Log Message: Alots of fixes across many platforms. Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/mips/sgi/kernel/setup.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- setup.c 6 Oct 2001 16:11:12 -0000 1.6 +++ setup.c 15 Mar 2002 18:28:11 -0000 1.7 @@ -275,29 +275,7 @@ #endif sgi_volume_set(simple_strtoul(ArcGetEnvironmentVariable("volume"), NULL, 10)); - -#ifdef CONFIG_VT -#ifdef CONFIG_SGI_NEWPORT_CONSOLE - conswitchp = &newport_con; - - screen_info = (struct screen_info) { - 0, 0, /* orig-x, orig-y */ - 0, /* unused */ - 0, /* orig_video_page */ - 0, /* orig_video_mode */ - 160, /* orig_video_cols */ - 0, 0, 0, /* unused, ega_bx, unused */ - 64, /* orig_video_lines */ - 0, /* orig_video_isVGA */ - 16 /* orig_video_points */ - }; -#else - conswitchp = &dummy_con; -#endif -#endif - rtc_ops = &indy_rtc_ops; - kbd_ops = &sgi_kbd_ops; #ifdef CONFIG_VIDEO_VINO init_vino(); #endif |
From: James S. <jsi...@us...> - 2002-03-15 18:28:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/m68k/hp300 In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/m68k/hp300 Added Files: config.c Log Message: Alots of fixes across many platforms. --- NEW FILE: config.c --- /* * linux/arch/m68k/hp300/config.c * * Copyright (C) 1998 Philip Blundell <ph...@gn...> * * This file contains the HP300-specific initialisation code. It gets * called by setup.c. */ #include <linux/config.h> #include <linux/types.h> #include <linux/mm.h> #include <linux/kd.h> #include <linux/tty.h> #include <linux/console.h> #include <linux/interrupt.h> #include <linux/init.h> #include <asm/machdep.h> #include <asm/blinken.h> #include <asm/io.h> /* readb() and writeb() */ #include <asm/hwtest.h> /* hwreg_present() */ #include "ints.h" #include "time.h" extern void hp300_reset(void); extern void (*hp300_default_handler[])(int, void *, struct pt_regs *); extern int show_hp300_interrupts(struct seq_file *, void *); #ifdef CONFIG_HEARTBEAT static void hp300_pulse(int x) { if (x) blinken_leds(0xfe); else blinken_leds(0xff); } #endif static void hp300_get_model(char *model) { strcpy(model, "HP9000/300"); } void __init config_hp300(void) { mach_sched_init = hp300_sched_init; mach_init_IRQ = hp300_init_IRQ; mach_request_irq = hp300_request_irq; mach_free_irq = hp300_free_irq; mach_get_model = hp300_get_model; mach_get_irq_list = show_hp300_interrupts; mach_gettimeoffset = hp300_gettimeoffset; mach_default_handler = &hp300_default_handler; #if 0 mach_gettod = hp300_gettod; #endif mach_reset = hp300_reset; #ifdef CONFIG_HEARTBEAT mach_heartbeat = hp300_pulse; #endif mach_max_dma_address = 0xffffffff; } |
From: James S. <jsi...@us...> - 2002-03-15 18:28:14
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/i386/kernel Added Files: apm.c Log Message: Alots of fixes across many platforms. --- NEW FILE: apm.c --- /* -*- linux-c -*- * APM BIOS driver for Linux * Copyright 1994-2001 Stephen Rothwell (sf...@ca...) * * Initial development of this driver was funded by NEC Australia P/L * and NEC Corporation * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * October 1995, Rik Faith (fa...@cs...): * Minor enhancements and updates (to the patch set) for 1.3.x [...1994 lines suppressed...] MODULE_PARM(power_off, "i"); MODULE_PARM_DESC(power_off, "Enable power off"); MODULE_PARM(bounce_interval, "i"); MODULE_PARM_DESC(bounce_interval, "Set the number of ticks to ignore suspend bounces"); MODULE_PARM(allow_ints, "i"); MODULE_PARM_DESC(allow_ints, "Allow interrupts during BIOS calls"); MODULE_PARM(broken_psr, "i"); MODULE_PARM_DESC(broken_psr, "BIOS has a broken GetPowerStatus call"); MODULE_PARM(realmode_power_off, "i"); MODULE_PARM_DESC(realmode_power_off, "Switch to real mode before powering off"); MODULE_PARM(idle_threshold, "i"); MODULE_PARM_DESC(idle_threshold, "System idle percentage above which to make APM BIOS idle calls"); MODULE_PARM(idle_period, "i"); MODULE_PARM_DESC(idle_period, "Period (in sec/100) over which to caculate the idle percentage"); EXPORT_NO_SYMBOLS; |
From: James S. <jsi...@us...> - 2002-03-15 18:28:14
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ia64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/ia64/kernel Added Files: traps.c Log Message: Alots of fixes across many platforms. --- NEW FILE: traps.c --- /* * Architecture-specific trap handling. * * Copyright (C) 1998-2001 Hewlett-Packard Co * David Mosberger-Tang <da...@hp...> * * 05/12/00 grao <gou...@in...> : added isr in siginfo for SIGFPE */ /* * fp_emulate() needs to be able to access and update all floating point registers. Those * saved in pt_regs can be accessed through that structure, but those not saved, will be * accessed directly. To make this work, we need to ensure that the compiler does not end * up using a preserved floating point register on its own. The following achieves this * by declaring preserved registers that are not marked as "fixed" as global register * variables. */ register double f2 asm ("f2"); register double f3 asm ("f3"); register double f4 asm ("f4"); register double f5 asm ("f5"); register long f16 asm ("f16"); register long f17 asm ("f17"); register long f18 asm ("f18"); register long f19 asm ("f19"); register long f20 asm ("f20"); register long f21 asm ("f21"); register long f22 asm ("f22"); register long f23 asm ("f23"); register double f24 asm ("f24"); register double f25 asm ("f25"); register double f26 asm ("f26"); register double f27 asm ("f27"); register double f28 asm ("f28"); register double f29 asm ("f29"); register double f30 asm ("f30"); register double f31 asm ("f31"); #include <linux/config.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/sched.h> #include <asm/hardirq.h> #include <asm/ia32.h> #include <asm/processor.h> #include <asm/uaccess.h> #include <asm/fpswa.h> extern spinlock_t timerlist_lock; static fpswa_interface_t *fpswa_interface; void __init trap_init (void) { printk("fpswa interface at %lx\n", ia64_boot_param->fpswa); if (ia64_boot_param->fpswa) /* FPSWA fixup: make the interface pointer a kernel virtual address: */ fpswa_interface = __va(ia64_boot_param->fpswa); } /* * Unlock any spinlocks which will prevent us from getting the message out (timerlist_lock * is acquired through the console unblank code) */ void bust_spinlocks (int yes) { spin_lock_init(&timerlist_lock); if (yes) { oops_in_progress = 1; #ifdef CONFIG_SMP global_irq_lock = 0; /* Many serial drivers do __global_cli() */ #endif } else { int loglevel_save = console_loglevel; oops_in_progress = 0; /* * OK, the message is on the console. Now we call printk() without * oops_in_progress set so that printk will give klogd a poke. Hold onto * your hats... */ console_loglevel = 15; /* NMI oopser may have shut the console up */ printk(" "); console_loglevel = loglevel_save; } } void die (const char *str, struct pt_regs *regs, long err) { static struct { spinlock_t lock; int lock_owner; int lock_owner_depth; } die = { lock: SPIN_LOCK_UNLOCKED, lock_owner: -1, lock_owner_depth: 0 }; if (die.lock_owner != smp_processor_id()) { console_verbose(); spin_lock_irq(&die.lock); die.lock_owner = smp_processor_id(); die.lock_owner_depth = 0; bust_spinlocks(1); } if (++die.lock_owner_depth < 3) { printk("%s[%d]: %s %ld\n", current->comm, current->pid, str, err); show_regs(regs); } else printk(KERN_ERR "Recursive die() failure, output suppressed\n"); bust_spinlocks(0); die.lock_owner = -1; spin_unlock_irq(&die.lock); do_exit(SIGSEGV); } void die_if_kernel (char *str, struct pt_regs *regs, long err) { if (!user_mode(regs)) die(str, regs, err); } void ia64_bad_break (unsigned long break_num, struct pt_regs *regs) { siginfo_t siginfo; int sig, code; /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */ siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); siginfo.si_imm = break_num; switch (break_num) { case 0: /* unknown error */ sig = SIGILL; code = ILL_ILLOPC; break; case 1: /* integer divide by zero */ sig = SIGFPE; code = FPE_INTDIV; break; case 2: /* integer overflow */ sig = SIGFPE; code = FPE_INTOVF; break; case 3: /* range check/bounds check */ sig = SIGFPE; code = FPE_FLTSUB; break; case 4: /* null pointer dereference */ sig = SIGSEGV; code = SEGV_MAPERR; break; case 5: /* misaligned data */ sig = SIGSEGV; code = BUS_ADRALN; break; case 6: /* decimal overflow */ sig = SIGFPE; code = __FPE_DECOVF; break; case 7: /* decimal divide by zero */ sig = SIGFPE; code = __FPE_DECDIV; break; case 8: /* packed decimal error */ sig = SIGFPE; code = __FPE_DECERR; break; case 9: /* invalid ASCII digit */ sig = SIGFPE; code = __FPE_INVASC; break; case 10: /* invalid decimal digit */ sig = SIGFPE; code = __FPE_INVDEC; break; case 11: /* paragraph stack overflow */ sig = SIGSEGV; code = __SEGV_PSTKOVF; break; default: if (break_num < 0x40000 || break_num > 0x100000) die_if_kernel("Bad break", regs, break_num); if (break_num < 0x80000) { sig = SIGILL; code = __ILL_BREAK; } else { sig = SIGTRAP; code = TRAP_BRKPT; } } siginfo.si_signo = sig; siginfo.si_errno = 0; siginfo.si_code = code; force_sig_info(sig, &siginfo, current); } /* * Unimplemented system calls. This is called only for stuff that * we're supposed to implement but haven't done so yet. Everything * else goes to sys_ni_syscall. */ asmlinkage long ia64_ni_syscall (unsigned long arg0, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5, unsigned long arg6, unsigned long arg7, unsigned long stack) { struct pt_regs *regs = (struct pt_regs *) &stack; printk("<sc%ld(%lx,%lx,%lx,%lx)>\n", regs->r15, arg0, arg1, arg2, arg3); return -ENOSYS; } /* * disabled_fph_fault() is called when a user-level process attempts to access f32..f127 * and it doesn't own the fp-high register partition. When this happens, we save the * current fph partition in the task_struct of the fpu-owner (if necessary) and then load * the fp-high partition of the current task (if necessary). Note that the kernel has * access to fph by the time we get here, as the IVT's "Disabled FP-Register" handler takes * care of clearing psr.dfh. */ static inline void disabled_fph_fault (struct pt_regs *regs) { struct ia64_psr *psr = ia64_psr(regs); /* first, grant user-level access to fph partition: */ psr->dfh = 0; #ifndef CONFIG_SMP { struct task_struct *fpu_owner = ia64_get_fpu_owner(); if (fpu_owner == current) return; if (fpu_owner) ia64_flush_fph(fpu_owner); ia64_set_fpu_owner(current); } #endif /* !CONFIG_SMP */ if ((current->thread.flags & IA64_THREAD_FPH_VALID) != 0) { __ia64_load_fpu(current->thread.fph); psr->mfh = 0; } else { __ia64_init_fpu(); /* * Set mfh because the state in thread.fph does not match the state in * the fph partition. */ psr->mfh = 1; } } static inline int fp_emulate (int fp_fault, void *bundle, long *ipsr, long *fpsr, long *isr, long *pr, long *ifs, struct pt_regs *regs) { struct ia64_fpreg f6_11[6]; fp_state_t fp_state; fpswa_ret_t ret; if (!fpswa_interface) return -1; memset(&fp_state, 0, sizeof(fp_state_t)); /* * compute fp_state. only FP registers f6 - f11 are used by the * kernel, so set those bits in the mask and set the low volatile * pointer to point to these registers. */ fp_state.bitmask_low64 = 0xfc0; /* bit6..bit11 */ f6_11[0] = regs->f6; f6_11[1] = regs->f7; f6_11[2] = regs->f8; f6_11[3] = regs->f9; __asm__ ("stf.spill %0=f10%P0" : "=m"(f6_11[4])); __asm__ ("stf.spill %0=f11%P0" : "=m"(f6_11[5])); fp_state.fp_state_low_volatile = (fp_state_low_volatile_t *) f6_11; /* * unsigned long (*EFI_FPSWA) ( * unsigned long trap_type, * void *Bundle, * unsigned long *pipsr, * unsigned long *pfsr, * unsigned long *pisr, * unsigned long *ppreds, * unsigned long *pifs, * void *fp_state); */ ret = (*fpswa_interface->fpswa)((unsigned long) fp_fault, bundle, (unsigned long *) ipsr, (unsigned long *) fpsr, (unsigned long *) isr, (unsigned long *) pr, (unsigned long *) ifs, &fp_state); regs->f6 = f6_11[0]; regs->f7 = f6_11[1]; regs->f8 = f6_11[2]; regs->f9 = f6_11[3]; __asm__ ("ldf.fill f10=%0%P0" :: "m"(f6_11[4])); __asm__ ("ldf.fill f11=%0%P0" :: "m"(f6_11[5])); return ret.status; } /* * Handle floating-point assist faults and traps. */ static int handle_fpu_swa (int fp_fault, struct pt_regs *regs, unsigned long isr) { long exception, bundle[2]; unsigned long fault_ip; struct siginfo siginfo; static int fpu_swa_count = 0; static unsigned long last_time; fault_ip = regs->cr_iip; if (!fp_fault && (ia64_psr(regs)->ri == 0)) fault_ip -= 16; if (copy_from_user(bundle, (void *) fault_ip, sizeof(bundle))) return -1; if (jiffies - last_time > 5*HZ) fpu_swa_count = 0; if ((++fpu_swa_count < 5) && !(current->thread.flags & IA64_THREAD_FPEMU_NOPRINT)) { last_time = jiffies; printk(KERN_WARNING "%s(%d): floating-point assist fault at ip %016lx\n", current->comm, current->pid, regs->cr_iip + ia64_psr(regs)->ri); } exception = fp_emulate(fp_fault, bundle, ®s->cr_ipsr, ®s->ar_fpsr, &isr, ®s->pr, ®s->cr_ifs, regs); if (fp_fault) { if (exception == 0) { /* emulation was successful */ ia64_increment_ip(regs); } else if (exception == -1) { printk("handle_fpu_swa: fp_emulate() returned -1\n"); return -1; } else { /* is next instruction a trap? */ if (exception & 2) { ia64_increment_ip(regs); } siginfo.si_signo = SIGFPE; siginfo.si_errno = 0; siginfo.si_code = __SI_FAULT; /* default code */ siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); if (isr & 0x11) { siginfo.si_code = FPE_FLTINV; } else if (isr & 0x44) { siginfo.si_code = FPE_FLTDIV; } siginfo.si_isr = isr; force_sig_info(SIGFPE, &siginfo, current); } } else { if (exception == -1) { printk("handle_fpu_swa: fp_emulate() returned -1\n"); return -1; } else if (exception != 0) { /* raise exception */ siginfo.si_signo = SIGFPE; siginfo.si_errno = 0; siginfo.si_code = __SI_FAULT; /* default code */ siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); if (isr & 0x880) { siginfo.si_code = FPE_FLTOVF; } else if (isr & 0x1100) { siginfo.si_code = FPE_FLTUND; } else if (isr & 0x2200) { siginfo.si_code = FPE_FLTRES; } siginfo.si_isr = isr; force_sig_info(SIGFPE, &siginfo, current); } } return 0; } struct illegal_op_return { unsigned long fkt, arg1, arg2, arg3; }; struct illegal_op_return ia64_illegal_op_fault (unsigned long ec, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5, unsigned long arg6, unsigned long arg7, unsigned long stack) { struct pt_regs *regs = (struct pt_regs *) &stack; struct illegal_op_return rv; struct siginfo si; char buf[128]; #ifdef CONFIG_IA64_BRL_EMU { extern struct illegal_op_return ia64_emulate_brl (struct pt_regs *, unsigned long); rv = ia64_emulate_brl(regs, ec); if (rv.fkt != (unsigned long) -1) return rv; } #endif sprintf(buf, "IA-64 Illegal operation fault"); die_if_kernel(buf, regs, 0); memset(&si, 0, sizeof(si)); si.si_signo = SIGILL; si.si_code = ILL_ILLOPC; si.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); force_sig_info(SIGILL, &si, current); rv.fkt = 0; return rv; } void ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa, unsigned long iim, unsigned long itir, unsigned long arg5, unsigned long arg6, unsigned long arg7, unsigned long stack) { struct pt_regs *regs = (struct pt_regs *) &stack; unsigned long code, error = isr; struct siginfo siginfo; char buf[128]; int result; static const char *reason[] = { "IA-64 Illegal Operation fault", "IA-64 Privileged Operation fault", "IA-64 Privileged Register fault", "IA-64 Reserved Register/Field fault", "Disabled Instruction Set Transition fault", "Unknown fault 5", "Unknown fault 6", "Unknown fault 7", "Illegal Hazard fault", "Unknown fault 9", "Unknown fault 10", "Unknown fault 11", "Unknown fault 12", "Unknown fault 13", "Unknown fault 14", "Unknown fault 15" }; #if 0 /* this is for minimal trust debugging; yeah this kind of stuff is useful at times... */ if (vector != 25) { static unsigned long last_time; static char count; unsigned long n = vector; char buf[32], *cp; if (jiffies - last_time > 5*HZ) count = 0; if (count++ < 5) { last_time = jiffies; cp = buf + sizeof(buf); *--cp = '\0'; while (n) { *--cp = "0123456789abcdef"[n & 0xf]; n >>= 4; } printk("<0x%s>", cp); } } #endif switch (vector) { case 24: /* General Exception */ code = (isr >> 4) & 0xf; sprintf(buf, "General Exception: %s%s", reason[code], (code == 3) ? ((isr & (1UL << 37)) ? " (RSE access)" : " (data access)") : ""); if (code == 8) { # ifdef CONFIG_IA64_PRINT_HAZARDS printk("%016lx:possible hazard, pr = %016lx\n", regs->cr_iip, regs->pr); # endif return; } break; case 25: /* Disabled FP-Register */ if (isr & 2) { disabled_fph_fault(regs); return; } sprintf(buf, "Disabled FPL fault---not supposed to happen!"); break; case 26: /* NaT Consumption */ case 31: /* Unsupported Data Reference */ if (user_mode(regs)) { siginfo.si_signo = SIGILL; siginfo.si_code = ILL_ILLOPN; siginfo.si_errno = 0; siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); siginfo.si_imm = vector; force_sig_info(SIGILL, &siginfo, current); return; } sprintf(buf, (vector == 26) ? "NaT consumption" : "Unsupported data reference"); break; case 29: /* Debug */ case 35: /* Taken Branch Trap */ case 36: /* Single Step Trap */ switch (vector) { case 29: siginfo.si_code = TRAP_HWBKPT; #ifdef CONFIG_ITANIUM /* * Erratum 10 (IFA may contain incorrect address) now has * "NoFix" status. There are no plans for fixing this. */ if (ia64_psr(regs)->is == 0) ifa = regs->cr_iip; #endif siginfo.si_addr = (void *) ifa; break; case 35: siginfo.si_code = TRAP_BRANCH; break; case 36: siginfo.si_code = TRAP_TRACE; break; } siginfo.si_signo = SIGTRAP; siginfo.si_errno = 0; force_sig_info(SIGTRAP, &siginfo, current); return; case 32: /* fp fault */ case 33: /* fp trap */ result = handle_fpu_swa((vector == 32) ? 1 : 0, regs, isr); if ((result < 0) || (current->thread.flags & IA64_THREAD_FPEMU_SIGFPE)) { siginfo.si_signo = SIGFPE; siginfo.si_errno = 0; siginfo.si_code = FPE_FLTINV; siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); force_sig_info(SIGFPE, &siginfo, current); } return; case 34: /* Unimplemented Instruction Address Trap */ if (user_mode(regs)) { siginfo.si_signo = SIGILL; siginfo.si_code = ILL_BADIADDR; siginfo.si_errno = 0; siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); force_sig_info(SIGILL, &siginfo, current); return; } sprintf(buf, "Unimplemented Instruction Address fault"); break; case 45: #ifdef CONFIG_IA32_SUPPORT if (ia32_exception(regs, isr) == 0) return; #endif printk("Unexpected IA-32 exception (Trap 45)\n"); printk(" iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx\n", regs->cr_iip, ifa, isr); force_sig(SIGSEGV, current); break; case 46: #ifdef CONFIG_IA32_SUPPORT if (ia32_intercept(regs, isr) == 0) return; #endif printk("Unexpected IA-32 intercept trap (Trap 46)\n"); printk(" iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx, iim - 0x%lx\n", regs->cr_iip, ifa, isr, iim); force_sig(SIGSEGV, current); return; case 47: sprintf(buf, "IA-32 Interruption Fault (int 0x%lx)", isr >> 16); break; default: sprintf(buf, "Fault %lu", vector); break; } die_if_kernel(buf, regs, error); force_sig(SIGILL, current); } |
From: James S. <jsi...@us...> - 2002-03-15 18:28:14
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/lib In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/arm/lib Added Files: Makefile Log Message: Alots of fixes across many platforms. --- NEW FILE: Makefile --- # # linux/arch/arm/lib/Makefile # # Copyright (C) 1995-2000 Russell King # USE_STANDARD_AS_RULE := true L_TARGET := lib.a obj-y := backtrace.o changebit.o csumipv6.o csumpartial.o \ csumpartialcopy.o csumpartialcopyuser.o clearbit.o \ copy_page.o delay.o findbit.o memchr.o memcpy.o \ memset.o memzero.o setbit.o strncpy_from_user.o \ strnlen_user.o strchr.o strrchr.o testchangebit.o \ testclearbit.o testsetbit.o uaccess.o getuser.o \ putuser.o ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \ ucmpdi2.o udivdi3.o lib1funcs.o obj-m := obj-n := obj-arc := ecard.o io-acorn.o floppydma.o obj-rpc := ecard.o io-acorn.o floppydma.o obj-clps7500 := io-acorn.o obj-l7200 := io-acorn.o obj-shark := io-shark.o obj-edb7211 := io-acorn.o obj-y += $(obj-$(MACHINE)) ifeq ($(CONFIG_CPU_32v4),y) v3 := n v4 := y else v3 := y v4 := n endif obj-y += io-readsb.o io-writesb.o obj-$(v3) += io-readsw-armv3.o io-writesw-armv3.o io-readsl-armv3.o obj-$(v4) += io-readsw-armv4.o io-writesw-armv4.o io-readsl-armv4.o obj-y += io-writesl.o obj-$(CONFIG_CPU_26) += uaccess-armo.o obj-$(CONFIG_CPU_32) += copy_page-armv3.o copy_page-armv4.o copy_page-armv4mc.o obj-$(CONFIG_CPU_32v5) += copy_page-armv5te.o include $(TOPDIR)/Rules.make csumpartialcopy.o: csumpartialcopygeneric.S csumpartialcopyuser.o: csumpartialcopygeneric.S |
From: James S. <jsi...@us...> - 2002-03-15 18:28:13
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel In directory usw-pr-cvs1:/tmp/cvs-serv4512/linux/arch/arm/kernel Added Files: armksyms.c Log Message: Alots of fixes across many platforms. --- NEW FILE: armksyms.c --- /* * linux/arch/arm/kernel/armksyms.c * * Copyright (C) 2000 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include <linux/config.h> #include <linux/module.h> #include <linux/user.h> #include <linux/string.h> #include <linux/fs.h> #include <linux/mm.h> #include <linux/mman.h> #include <linux/pci.h> #include <linux/delay.h> #include <linux/in6.h> #include <linux/interrupt.h> #include <linux/pm.h> #include <linux/tty.h> #include <asm/byteorder.h> #include <asm/elf.h> #include <asm/io.h> #include <asm/irq.h> #include <asm/pgalloc.h> #include <asm/proc-fns.h> #include <asm/processor.h> #include <asm/semaphore.h> #include <asm/system.h> #include <asm/uaccess.h> #include <asm/checksum.h> #include <asm/mach-types.h> extern void dump_thread(struct pt_regs *, struct user *); extern int dump_fpu(struct pt_regs *, struct user_fp_struct *); extern void inswb(unsigned int port, void *to, int len); extern void outswb(unsigned int port, const void *to, int len); extern void __bad_xchg(volatile void *ptr, int size); /* * syscalls */ extern int sys_write(int, const char *, int); extern int sys_read(int, char *, int); extern int sys_lseek(int, off_t, int); extern int sys_exit(int); /* * libgcc functions - functions that are used internally by the * compiler... (prototypes are not correct though, but that * doesn't really matter since they're not versioned). */ extern void __ashldi3(void); extern void __ashrdi3(void); extern void __divsi3(void); extern void __lshrdi3(void); extern void __modsi3(void); extern void __muldi3(void); extern void __ucmpdi2(void); extern void __udivdi3(void); extern void __udivmoddi4(void); extern void __udivsi3(void); extern void __umodsi3(void); extern void ret_from_exception(void); extern void fpundefinstr(void); extern void fp_enter(void); /* * This has a special calling convention; it doesn't * modify any of the usual registers, except for LR. */ extern void __do_softirq(void); #define EXPORT_SYMBOL_ALIAS(sym,orig) \ const char __kstrtab_##sym[] \ __attribute__((section(".kstrtab"))) = \ __MODULE_STRING(sym); \ const struct module_symbol __ksymtab_##sym \ __attribute__((section("__ksymtab"))) = \ { (unsigned long)&##orig, __kstrtab_##sym }; /* * floating point math emulator support. * These symbols will never change their calling convention... */ EXPORT_SYMBOL_ALIAS(kern_fp_enter,fp_enter); EXPORT_SYMBOL_ALIAS(fp_printk,printk); EXPORT_SYMBOL_ALIAS(fp_send_sig,send_sig); #ifdef CONFIG_CPU_26 EXPORT_SYMBOL(fpundefinstr); EXPORT_SYMBOL(ret_from_exception); #endif EXPORT_SYMBOL_NOVERS(__do_softirq); /* platform dependent support */ EXPORT_SYMBOL(dump_thread); EXPORT_SYMBOL(dump_fpu); EXPORT_SYMBOL(udelay); #ifdef CONFIG_CPU_32 EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__iounmap); #endif EXPORT_SYMBOL(kernel_thread); EXPORT_SYMBOL(system_rev); EXPORT_SYMBOL(system_serial_low); EXPORT_SYMBOL(system_serial_high); #ifdef CONFIG_DEBUG_BUGVERBOSE EXPORT_SYMBOL(__bug); #endif EXPORT_SYMBOL(__bad_xchg); EXPORT_SYMBOL(__readwrite_bug); EXPORT_SYMBOL(enable_irq); EXPORT_SYMBOL(disable_irq); EXPORT_SYMBOL(pm_idle); EXPORT_SYMBOL(pm_power_off); /* processor dependencies */ EXPORT_SYMBOL(__machine_arch_type); /* networking */ EXPORT_SYMBOL(csum_partial_copy_nocheck); EXPORT_SYMBOL(__csum_ipv6_magic); /* io */ #ifndef __raw_readsb EXPORT_SYMBOL_NOVERS(__raw_readsb); #endif #ifndef __raw_readsw EXPORT_SYMBOL_NOVERS(__raw_readsw); #endif #ifndef __raw_readsl EXPORT_SYMBOL_NOVERS(__raw_readsl); #endif #ifndef __raw_writesb EXPORT_SYMBOL_NOVERS(__raw_writesb); #endif #ifndef __raw_writesw EXPORT_SYMBOL_NOVERS(__raw_writesw); #endif #ifndef __raw_writesl EXPORT_SYMBOL_NOVERS(__raw_writesl); #endif /* address translation */ #ifndef __virt_to_phys__is_a_macro EXPORT_SYMBOL(__virt_to_phys); #endif #ifndef __phys_to_virt__is_a_macro EXPORT_SYMBOL(__phys_to_virt); #endif #ifndef __virt_to_bus__is_a_macro EXPORT_SYMBOL(__virt_to_bus); #endif #ifndef __bus_to_virt__is_a_macro EXPORT_SYMBOL(__bus_to_virt); #endif #ifndef CONFIG_NO_PGT_CACHE EXPORT_SYMBOL(quicklists); #endif /* string / mem functions */ EXPORT_SYMBOL_NOVERS(strcpy); EXPORT_SYMBOL_NOVERS(strncpy); EXPORT_SYMBOL_NOVERS(strcat); EXPORT_SYMBOL_NOVERS(strncat); EXPORT_SYMBOL_NOVERS(strcmp); EXPORT_SYMBOL_NOVERS(strncmp); EXPORT_SYMBOL_NOVERS(strchr); EXPORT_SYMBOL_NOVERS(strlen); EXPORT_SYMBOL_NOVERS(strnlen); EXPORT_SYMBOL_NOVERS(strpbrk); EXPORT_SYMBOL_NOVERS(strtok); EXPORT_SYMBOL_NOVERS(strrchr); EXPORT_SYMBOL_NOVERS(strstr); EXPORT_SYMBOL_NOVERS(memset); EXPORT_SYMBOL_NOVERS(memcpy); EXPORT_SYMBOL_NOVERS(memmove); EXPORT_SYMBOL_NOVERS(memcmp); EXPORT_SYMBOL_NOVERS(memscan); EXPORT_SYMBOL_NOVERS(__memzero); /* user mem (segment) */ #if defined(CONFIG_CPU_32) EXPORT_SYMBOL(__arch_copy_from_user); EXPORT_SYMBOL(__arch_copy_to_user); EXPORT_SYMBOL(__arch_clear_user); EXPORT_SYMBOL(__arch_strnlen_user); /* consistent area handling */ EXPORT_SYMBOL(pci_alloc_consistent); EXPORT_SYMBOL(consistent_alloc); EXPORT_SYMBOL(consistent_free); EXPORT_SYMBOL(consistent_sync); #elif defined(CONFIG_CPU_26) EXPORT_SYMBOL(uaccess_kernel); EXPORT_SYMBOL(uaccess_user); #endif EXPORT_SYMBOL_NOVERS(__get_user_1); EXPORT_SYMBOL_NOVERS(__get_user_2); EXPORT_SYMBOL_NOVERS(__get_user_4); EXPORT_SYMBOL_NOVERS(__get_user_8); EXPORT_SYMBOL_NOVERS(__put_user_1); EXPORT_SYMBOL_NOVERS(__put_user_2); EXPORT_SYMBOL_NOVERS(__put_user_4); EXPORT_SYMBOL_NOVERS(__put_user_8); /* gcc lib functions */ EXPORT_SYMBOL_NOVERS(__ashldi3); EXPORT_SYMBOL_NOVERS(__ashrdi3); EXPORT_SYMBOL_NOVERS(__divsi3); EXPORT_SYMBOL_NOVERS(__lshrdi3); EXPORT_SYMBOL_NOVERS(__modsi3); EXPORT_SYMBOL_NOVERS(__muldi3); EXPORT_SYMBOL_NOVERS(__ucmpdi2); EXPORT_SYMBOL_NOVERS(__udivdi3); EXPORT_SYMBOL_NOVERS(__udivmoddi4); EXPORT_SYMBOL_NOVERS(__udivsi3); EXPORT_SYMBOL_NOVERS(__umodsi3); /* bitops */ EXPORT_SYMBOL(_set_bit_le); EXPORT_SYMBOL(_test_and_set_bit_le); EXPORT_SYMBOL(_clear_bit_le); EXPORT_SYMBOL(_test_and_clear_bit_le); EXPORT_SYMBOL(_change_bit_le); EXPORT_SYMBOL(_test_and_change_bit_le); EXPORT_SYMBOL(_find_first_zero_bit_le); EXPORT_SYMBOL(_find_next_zero_bit_le); #ifdef __ARMEB__ EXPORT_SYMBOL(_set_bit_be); EXPORT_SYMBOL(_test_and_set_bit_be); EXPORT_SYMBOL(_clear_bit_be); EXPORT_SYMBOL(_test_and_clear_bit_be); EXPORT_SYMBOL(_change_bit_be); EXPORT_SYMBOL(_test_and_change_bit_be); EXPORT_SYMBOL(_find_first_zero_bit_be); EXPORT_SYMBOL(_find_next_zero_bit_be); #endif /* elf */ EXPORT_SYMBOL(elf_platform); EXPORT_SYMBOL(elf_hwcap); /* syscalls */ EXPORT_SYMBOL(sys_write); EXPORT_SYMBOL(sys_read); EXPORT_SYMBOL(sys_lseek); EXPORT_SYMBOL(sys_open); EXPORT_SYMBOL(sys_exit); EXPORT_SYMBOL(sys_wait4); /* semaphores */ EXPORT_SYMBOL_NOVERS(__down_failed); EXPORT_SYMBOL_NOVERS(__down_interruptible_failed); EXPORT_SYMBOL_NOVERS(__down_trylock_failed); EXPORT_SYMBOL_NOVERS(__up_wakeup); EXPORT_SYMBOL(get_wchan); |
From: James S. <jsi...@us...> - 2002-03-15 18:21:01
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/tc In directory usw-pr-cvs1:/tmp/cvs-serv605/tc Log Message: Directory /cvsroot/linuxconsole/ruby/linux/drivers/tc added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 18:19:12
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/x86_64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv32026/kernel Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/x86_64/kernel added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 18:17:59
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/x86_64/mm In directory usw-pr-cvs1:/tmp/cvs-serv31363/mm Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/x86_64/mm added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 18:10:29
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/m68k/mac In directory usw-pr-cvs1:/tmp/cvs-serv27528/mac Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/m68k/mac added to the repository |
From: johann d. <jd...@us...> - 2002-03-15 18:09:12
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb In directory usw-pr-cvs1:/tmp/cvs-serv25486 Modified Files: hid-ff.c Log Message: Don't wait before freeing the URB. Safe with 2.5. Index: hid-ff.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/hid-ff.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- hid-ff.c 14 Mar 2002 23:20:59 -0000 1.6 +++ hid-ff.c 15 Mar 2002 18:09:08 -0000 1.7 @@ -119,7 +119,6 @@ spinlock_t lock; /* device-level lock. Having locks on a per-effect basis could be nice, but isn't really necessary */ - wait_queue_head_t wait; }; @@ -150,7 +149,6 @@ hid->ff_private = private; spin_lock_init(&private->lock); - init_waitqueue_head(&private->wait); /* Event and exit callbacks */ hid->ff_exit = hid_lgff_exit; @@ -182,24 +180,9 @@ static void hid_lgff_exit(struct hid_device* hid) { struct hid_ff_logitech *lgff = hid->ff_private; - DECLARE_WAITQUEUE(wait, current); - int timeout = 5*HZ; /* 5 seconds */ if (lgff->urbffout) { usb_unlink_urb(lgff->urbffout); - - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&lgff->wait, &wait); - - if (lgff->urbffout->status == -EINPROGRESS) - timeout = schedule_timeout(timeout); - - if (!timeout) - warn("ff control urb still in use. Unlinking anyway\n"); - - set_current_state(TASK_RUNNING); - remove_wait_queue(&lgff->wait, &wait); - usb_free_urb(lgff->urbffout); } } @@ -379,8 +362,6 @@ if (urb->status) warn("hid_irq_ffout status %d received", urb->status); - - wake_up(&((struct hid_ff_logitech *)(hid->ff_private))->wait); } /* Lock must be held by caller */ |
From: James S. <jsi...@us...> - 2002-03-15 18:03:41
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/lib In directory usw-pr-cvs1:/tmp/cvs-serv23585/lib Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/arm/lib added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:55:54
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc/xmon In directory usw-pr-cvs1:/tmp/cvs-serv19070/xmon Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/ppc/xmon added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:50:05
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/sparc64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv15423/kernel Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/sparc64/kernel added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:45:34
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/x86_64/ia32 In directory usw-pr-cvs1:/tmp/cvs-serv12697/ia32 Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/x86_64/ia32 added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:45:11
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/x86_64 In directory usw-pr-cvs1:/tmp/cvs-serv12458/x86_64 Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/x86_64 added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:42:28
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv10925/kernel Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:29:31
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64/xmon In directory usw-pr-cvs1:/tmp/cvs-serv2483/xmon Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/ppc64/xmon added to the repository |
From: James S. <jsi...@us...> - 2002-03-15 17:26:06
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64 In directory usw-pr-cvs1:/tmp/cvs-serv32590/ppc64 Log Message: Directory /cvsroot/linuxconsole/ruby/linux/arch/ppc64 added to the repository |