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-04-24 18:56:58
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/sbus/char In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/drivers/sbus/char Modified Files: Makefile Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/sbus/char/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Makefile 5 May 2001 16:28:27 -0000 1.9 +++ Makefile 24 Apr 2002 18:56:51 -0000 1.10 @@ -12,7 +12,6 @@ export-objs := su.o bbc_i2c.o obj-y := sunserial.o zs.o -list-multi := vfc.o bbc.o vfc-objs := vfc_dev.o vfc_i2c.o bbc-objs := bbc_i2c.o bbc_envctrl.o @@ -34,9 +33,3 @@ obj-$(CONFIG_BBC_I2C) += bbc.o include $(TOPDIR)/Rules.make - -vfc.o: $(vfc-objs) - $(LD) -r -o $@ $(vfc-objs) - -bbc.o: $(bbc-objs) - $(LD) -r -o $@ $(bbc-objs) |
From: James S. <jsi...@us...> - 2002-04-24 18:56:57
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ia64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/ia64/kernel Modified Files: setup.c traps.c Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ia64/kernel/setup.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- setup.c 22 Mar 2002 20:13:57 -0000 1.4 +++ setup.c 24 Apr 2002 18:56:50 -0000 1.5 @@ -19,6 +19,7 @@ #include <linux/config.h> #include <linux/init.h> +#include <linux/acpi.h> #include <linux/bootmem.h> #include <linux/delay.h> #include <linux/kernel.h> @@ -29,7 +30,6 @@ #include <linux/threads.h> #include <linux/tty.h> -#include <asm/acpi-ext.h> #include <asm/ia32.h> #include <asm/page.h> #include <asm/machvec.h> @@ -53,7 +53,10 @@ extern char _end; +#ifdef CONFIG_SMP unsigned long __per_cpu_offset[NR_CPUS]; +#endif + struct cpuinfo_ia64 cpu_info __per_cpu_data; unsigned long ia64_phys_stacked_size_p8; @@ -281,6 +284,7 @@ setup_arch (char **cmdline_p) { extern unsigned long ia64_iobase; + unsigned long phys_iobase; unw_init(); @@ -313,24 +317,23 @@ #endif /* - * Set `iobase' to the appropriate address in region 6 - * (uncached access range) + * Set `iobase' to the appropriate address in region 6 (uncached access range). * - * The EFI memory map is the "prefered" location to get the I/O port - * space base, rather the relying on AR.KR0. This should become more - * clear in future SAL specs. We'll fall back to getting it out of - * AR.KR0 if no appropriate entry is found in the memory map. + * The EFI memory map is the "preferred" location to get the I/O port space base, + * rather the relying on AR.KR0. This should become more clear in future SAL + * specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is + * found in the memory map. */ - ia64_iobase = efi_get_iobase(); - if (ia64_iobase) + phys_iobase = efi_get_iobase(); + if (phys_iobase) /* set AR.KR0 since this is all we use it for anyway */ - ia64_set_kr(IA64_KR_IO_BASE, ia64_iobase); + ia64_set_kr(IA64_KR_IO_BASE, phys_iobase); else { - ia64_iobase = ia64_get_kr(IA64_KR_IO_BASE); + phys_iobase = ia64_get_kr(IA64_KR_IO_BASE); printk("No I/O port range found in EFI memory map, falling back to AR.KR0\n"); - printk("I/O port base = 0x%lx\n", ia64_iobase); + printk("I/O port base = 0x%lx\n", phys_iobase); } - ia64_iobase = __IA64_UNCACHED_OFFSET | (ia64_iobase & ~PAGE_OFFSET); + ia64_iobase = (unsigned long) ioremap(phys_iobase, 0); #ifdef CONFIG_SMP cpu_physical_id(0) = hard_smp_processor_id(); @@ -338,13 +341,9 @@ cpu_init(); /* initialize the bootstrap CPU */ - if (efi.acpi20) { - /* Parse the ACPI 2.0 tables */ - acpi20_parse(efi.acpi20); - } else if (efi.acpi) { - /* Parse the ACPI tables */ - acpi_parse(efi.acpi); - } +#ifdef CONFIG_ACPI_BOOT + acpi_boot_init(*cmdline_p); +#endif #ifdef CONFIG_IA64_MCA /* enable IA-64 Machine Check Abort Handling */ @@ -513,20 +512,25 @@ void cpu_init (void) { - extern char __per_cpu_start[], __phys_per_cpu_start[], __per_cpu_end[]; + extern char __per_cpu_start[], __phys_per_cpu_start[]; extern void __init ia64_mmu_init (void *); unsigned long num_phys_stacked; pal_vm_info_2_u_t vmi; unsigned int max_ctx; struct cpuinfo_ia64 *my_cpu_info; void *my_cpu_data; + +#ifdef CONFIG_SMP + extern char __per_cpu_end[]; int cpu = smp_processor_id(); my_cpu_data = alloc_bootmem_pages(__per_cpu_end - __per_cpu_start); memcpy(my_cpu_data, __phys_per_cpu_start, __per_cpu_end - __per_cpu_start); - __per_cpu_offset[cpu] = (char *) my_cpu_data - __per_cpu_start; - + my_cpu_info = my_cpu_data + ((char *) &cpu_info - __per_cpu_start); +#else + my_cpu_data = __phys_per_cpu_start; +#endif my_cpu_info = my_cpu_data + ((char *) &cpu_info - __per_cpu_start); /* Index: traps.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ia64/kernel/traps.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- traps.c 22 Mar 2002 20:13:57 -0000 1.2 +++ traps.c 24 Apr 2002 18:56:50 -0000 1.3 @@ -211,7 +211,8 @@ { struct pt_regs *regs = (struct pt_regs *) &stack; - printk("<sc%ld(%lx,%lx,%lx,%lx)>\n", regs->r15, arg0, arg1, arg2, arg3); + printk("%s(%d): <sc%ld(%lx,%lx,%lx,%lx)>\n", current->comm, current->pid, + regs->r15, arg0, arg1, arg2, arg3); return -ENOSYS; } |
From: James S. <jsi...@us...> - 2002-04-24 18:56:57
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/mips64 In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/mips64 Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/mips64/config.in,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- config.in 22 Mar 2002 20:13:57 -0000 1.20 +++ config.in 24 Apr 2002 18:56:51 -0000 1.21 @@ -181,16 +181,7 @@ source net/irda/Config.in -mainmenu_option next_comment -comment 'ISDN subsystem' - -if [ "$CONFIG_NET" != "n" ]; then - tristate 'ISDN support' CONFIG_ISDN - if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in - fi -fi -endmenu +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:57
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/sparc In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/sparc Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/sparc/config.in,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- config.in 22 Mar 2002 20:13:58 -0000 1.25 +++ config.in 24 Apr 2002 18:56:51 -0000 1.26 @@ -109,14 +109,7 @@ define_bool CONFIG_BLK_DEV_HD n fi -mainmenu_option next_comment -comment 'ISDN subsystem' - -tristate 'ISDN support' CONFIG_ISDN -if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in -fi -endmenu +source drivers/isdn/Config.in mainmenu_option next_comment comment 'SCSI support' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:57
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/mips In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/mips Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/mips/config.in,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- config.in 22 Mar 2002 20:13:57 -0000 1.19 +++ config.in 24 Apr 2002 18:56:50 -0000 1.20 @@ -375,15 +375,7 @@ source net/irda/Config.in -mainmenu_option next_comment -comment 'ISDN subsystem' -if [ "$CONFIG_NET" != "n" ]; then - tristate 'ISDN support' CONFIG_ISDN - if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in - fi -fi -endmenu +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:56
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64 In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/ppc64 Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/config.in,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- config.in 16 Apr 2002 17:41:48 -0000 1.3 +++ config.in 24 Apr 2002 18:56:51 -0000 1.4 @@ -124,14 +124,7 @@ 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 +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:56
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/ppc Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/config.in,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- config.in 16 Apr 2002 17:41:48 -0000 1.29 +++ config.in 24 Apr 2002 18:56:51 -0000 1.30 @@ -457,14 +457,7 @@ 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 +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:56
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ia64/dig In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/ia64/dig Modified Files: setup.c Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ia64/dig/setup.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- setup.c 22 Mar 2002 20:13:57 -0000 1.2 +++ setup.c 24 Apr 2002 18:56:50 -0000 1.3 @@ -16,7 +16,6 @@ #include <linux/kdev_t.h> #include <linux/string.h> #include <linux/tty.h> -#include <linux/console.h> #include <linux/timex.h> #include <linux/sched.h> @@ -33,7 +32,6 @@ * is sufficient (the IDE driver will autodetect the drive geometry). */ char drive_info[4*16]; -extern int pcat_compat; void __init dig_setup (char **cmdline_p) @@ -83,16 +81,4 @@ void __init dig_irq_init (void) { - if (pcat_compat) { - /* - * Disable the compatibility mode interrupts (8259 style), needs IN/OUT support - * enabled. - */ - printk("%s: Disabling PC-AT compatible 8259 interrupts\n", __FUNCTION__); - outb(0xff, 0xA1); - outb(0xff, 0x21); - } else { - printk("%s: System doesn't have PC-AT compatible dual-8259 setup. " - "Nothing to be done\n", __FUNCTION__); - } } |
From: James S. <jsi...@us...> - 2002-04-24 18:56:55
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ia64 In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/ia64 Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ia64/config.in,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- config.in 22 Mar 2002 20:13:57 -0000 1.21 +++ config.in 24 Apr 2002 18:56:50 -0000 1.22 @@ -22,6 +22,7 @@ "generic CONFIG_IA64_GENERIC \ DIG-compliant CONFIG_IA64_DIG \ HP-simulator CONFIG_IA64_HP_SIM \ + HP-zx1 CONFIG_IA64_HP_ZX1 \ SGI-SN1 CONFIG_IA64_SGI_SN1 \ SGI-SN2 CONFIG_IA64_SGI_SN2" generic @@ -56,7 +57,7 @@ fi fi -if [ "$CONFIG_IA64_DIG" = "y" ]; then +if [ "$CONFIG_IA64_GENERIC" = "y" ] || [ "$CONFIG_IA64_DIG" = "y" ] || [ "$CONFIG_IA64_HP_ZX1" = "y" ]; then bool ' Enable IA-64 Machine Check Abort' CONFIG_IA64_MCA define_bool CONFIG_PM y fi @@ -173,14 +174,7 @@ source net/ax25/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 +source drivers/isdn/Config.in mainmenu_option next_comment comment 'CD-ROM drivers (not for SCSI or IDE/ATAPI drives)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:55
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386 In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/i386 Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/config.in,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- config.in 17 Apr 2002 19:28:17 -0000 1.38 +++ config.in 24 Apr 2002 18:56:50 -0000 1.39 @@ -88,7 +88,6 @@ define_int CONFIG_X86_L1_CACHE_SHIFT 5 define_bool CONFIG_X86_TSC y define_bool CONFIG_X86_GOOD_APIC y - define_bool CONFIG_X86_PGE y define_bool CONFIG_X86_USE_PPRO_CHECKSUM y define_bool CONFIG_X86_PPRO_FENCE y fi @@ -96,14 +95,12 @@ define_int CONFIG_X86_L1_CACHE_SHIFT 5 define_bool CONFIG_X86_TSC y define_bool CONFIG_X86_GOOD_APIC y - define_bool CONFIG_X86_PGE y define_bool CONFIG_X86_USE_PPRO_CHECKSUM y fi if [ "$CONFIG_MPENTIUM4" = "y" ]; then define_int CONFIG_X86_L1_CACHE_SHIFT 7 define_bool CONFIG_X86_TSC y define_bool CONFIG_X86_GOOD_APIC y - define_bool CONFIG_X86_PGE y define_bool CONFIG_X86_USE_PPRO_CHECKSUM y fi if [ "$CONFIG_MK6" = "y" ]; then @@ -117,7 +114,6 @@ define_bool CONFIG_X86_TSC y define_bool CONFIG_X86_GOOD_APIC y define_bool CONFIG_X86_USE_3DNOW y - define_bool CONFIG_X86_PGE y define_bool CONFIG_X86_USE_PPRO_CHECKSUM y fi if [ "$CONFIG_MELAN" = "y" ]; then @@ -350,15 +346,7 @@ source net/irda/Config.in -mainmenu_option next_comment -comment 'ISDN subsystem' -if [ "$CONFIG_NET" != "n" ]; then - tristate 'ISDN support' CONFIG_ISDN - if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in - fi -fi -endmenu +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:55
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/i386/kernel Modified Files: setup.c Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel/setup.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -d -r1.39 -r1.40 --- setup.c 16 Apr 2002 17:41:47 -0000 1.39 +++ setup.c 24 Apr 2002 18:56:50 -0000 1.40 @@ -2141,6 +2141,11 @@ strcpy(c->x86_model_id, p); #ifdef CONFIG_SMP + /* PGE CPUID bug: Pentium4 supports PGE, but seems to have SMP bugs.. */ + if ( c->x86 == 15 ) + clear_bit(X86_FEATURE_PGE, c->x86_capability); + + if (test_bit(X86_FEATURE_HT, c->x86_capability)) { extern int phys_proc_id[NR_CPUS]; |
From: James S. <jsi...@us...> - 2002-04-24 18:56:54
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/arm Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/config.in,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- config.in 16 Apr 2002 17:41:46 -0000 1.23 +++ config.in 24 Apr 2002 18:56:49 -0000 1.24 @@ -433,6 +433,12 @@ define_bool CONFIG_FIQ n fi +# Compressed boot loader in ROM. Yes, we really want to ask about +# TEXT and BSS so we preserve their values in the config files. +bool 'Compressed boot loader in ROM/flash' CONFIG_ZBOOT_ROM +hex 'Compressed ROM boot loader base address' CONFIG_ZBOOT_ROM_TEXT 0 +hex 'Compressed ROM boot loader BSS address' CONFIG_ZBOOT_ROM_BSS 0 + if [ "$CONFIG_ARCH_SA1100" = "y" -o \ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then dep_bool 'Support CPU clock change (EXPERIMENTAL)' CONFIG_CPU_FREQ $CONFIG_EXPERIMENTAL @@ -573,14 +579,7 @@ source drivers/message/i2o/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 +source drivers/isdn/Config.in # # input before char - char/joystick depends on it. As does USB. |
From: James S. <jsi...@us...> - 2002-04-24 18:56:54
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/arm/kernel Modified Files: armksyms.c setup.c Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: armksyms.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel/armksyms.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- armksyms.c 16 Apr 2002 17:41:47 -0000 1.3 +++ armksyms.c 24 Apr 2002 18:56:49 -0000 1.4 @@ -67,6 +67,7 @@ extern void __udivmoddi4(void); extern void __udivsi3(void); extern void __umodsi3(void); +extern void abort(void); extern void ret_from_exception(void); extern void fpundefinstr(void); Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel/setup.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- setup.c 22 Mar 2002 20:13:57 -0000 1.9 +++ setup.c 24 Apr 2002 18:56:50 -0000 1.10 @@ -25,6 +25,7 @@ #include <asm/procinfo.h> #include <asm/setup.h> #include <asm/mach-types.h> +#include <asm/tlbflush.h> #include <asm/mach/arch.h> #include <asm/mach/irq.h> @@ -186,7 +187,7 @@ { unsigned int mult = 2 + (CACHE_M(cache) ? 1 : 0); - printk("%s size %dK associativity %d line length %d sets %d\n", + printk("%s: %d bytes, associativity %d, %d byte lines, %d sets\n", prefix, mult << (8 + CACHE_SIZE(cache)), (mult << CACHE_ASSOC(cache)) >> 1, @@ -253,7 +254,7 @@ cpu_user = *list->user; #endif - printk("Processor: %s %s revision %d\n", + printk("CPU: %s %s revision %d\n", proc_info.manufacturer, proc_info.cpu_name, (int)processor_id & 15); |
From: James S. <jsi...@us...> - 2002-04-24 18:56:54
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/cris In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/cris Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/cris/config.in,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- config.in 22 Mar 2002 20:13:57 -0000 1.10 +++ config.in 24 Apr 2002 18:56:50 -0000 1.11 @@ -185,15 +185,7 @@ source net/irda/Config.in -mainmenu_option next_comment -comment 'ISDN subsystem' -if [ "$CONFIG_NET" != "n" ]; then - tristate 'ISDN support' CONFIG_ISDN - if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in - fi -fi -endmenu +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:53
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/alpha In directory usw-pr-cvs1:/tmp/cvs-serv8328/linux/arch/alpha Modified Files: config.in Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/alpha/config.in,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- config.in 22 Mar 2002 20:13:56 -0000 1.28 +++ config.in 24 Apr 2002 18:56:49 -0000 1.29 @@ -324,14 +324,7 @@ source net/ax25/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 +source drivers/isdn/Config.in mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' |
From: James S. <jsi...@us...> - 2002-04-24 18:56:53
|
Update of /cvsroot/linuxconsole/ruby In directory usw-pr-cvs1:/tmp/cvs-serv8328 Added Files: AGAINST-2.5.9 Removed Files: AGAINST-2.5.8 Log Message: Synced to 2.5.9. Note some of the fb changes went into 2.5.9. Yeah :-) --- NEW FILE: AGAINST-2.5.9 --- --- AGAINST-2.5.8 DELETED --- |
From: Brad M. <bra...@us...> - 2002-04-24 05:18:42
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv5729 Modified Files: index.html Log Message: typos Index: index.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/index.html,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- index.html 4 Nov 2001 19:00:57 -0000 1.5 +++ index.html 24 Apr 2002 05:18:39 -0000 1.6 @@ -25,12 +25,11 @@ into a coherent architecture from which we can generate clean patches for Linus and the core kernel team.<p> -Right now the console subsystem and the subsystems that are depended on +Right now the console subsystem and the subsystems that depend on it have a couple of problems as well as some design issues which need -to be address for todays needs: +to be addressed for todays needs: <ol> -<li> <li>Terminal emulation is much too intertwined with the lower levels of the console implementation. Eventually terminal @@ -41,7 +40,7 @@ able to exist independent of the console/TTY layer. Especially on embedded devices this is important.<p> -<li>The console system is to vga centeric in design. We designed it +<li>The console system is too vga-centeric in design. We designed it to be more platform independent.<p> <li>The built-in ANSI X3.64/ECMA-48 terminal emulation is incomplete @@ -52,20 +51,20 @@ <ul> <li> Multi-desktop operation -- console instances running on multiple - (possibly dissimilar) video cards and seperate keyboards. + (possibly dissimilar) video cards and separate keyboards. <li> With the new console locking mechanism the underlying drivers can be DMA/irq based for maximum speed. <li> Much simpler framebuffer api. Plus with the new design it is possible to use framebuffer devices without a VT. <li> The console system input system is based solely on the input api. This allows for things like a universal keymap. No more compiling in new - keymaps for every type of different keyboards out there. Plus with this + keymaps for every type of different keyboard out there. Plus with this design it is possible to use a keyboard without the console system. <li> New serial API. The serial layer is more like the parport layer now. - Having to using the TTY layer for something like a serial mouse is + Having to use the TTY layer for something like a serial mouse is plain silly. The idea is to create a basic serial API and register device interfaces. For a modem you would want to register a TTY interface - whereas for a serial mouse or joystick we would want to register a + whereas for a serial mouse or joystick we would want to register an interface for the input api. <li> Support for hot plug. We can add or remove graphics cards or even keyboards to create new desktop VTs. @@ -73,33 +72,33 @@ <li> Support for different fonts, and textmodes per VC. <li> Better Unicode support. You will be able to display Kanji on the command line. Bidirectional support. -<li> Not really apart of the console system, force feedback is a important +<li> Not really a part of the console system, force feedback is a important element to the input layer that this project is also working. </ul> <H1>Project Status and News:</H1> -Development is moving fast. Since we cover alot of areas of the linux kernel -we have seperate links to pages that have developements to each different +Development is moving fast. Since we cover a lot of areas of the linux kernel +we have separate links to pages that have developements to each different sub system<p> <a href="input/input.html">Input API</a> <H1>Getting Involved</H1> -So you like to try out this new system or even better yet contribute. If you +So you like to try out this new system or even better yet contribute. If you'd like to give it a try <a href="quick.html">click here</a> for instructions. -Once it try it out we know you will have questions or just want to tell you +Once you try it out we know you will have questions or just want to tell your experiences we have a public developement mailing list. Also our list is archived. If you like to join follow this <a href="http://lists.sourceforge.net/lists/listinfo/linuxconsole-dev">link</a>. -Now if you like to get your hands dirty an get invloved I recommend going our +Now if you like to get your hands dirty and get invloved I recommend joining our <a href="http://lists.sourceforge.net/lists/listinfo/linuxconsole-commit">CVS commit mailing list</a>. Here you will see all the changes going on. A must for developers and a great way to learn how the new TTY/console layer works. -Plus each page for subscribing has a link to the maling list archives.<p> +Plus each page for subscribing has a link to the mailing list archives.<p> Last but not least is our <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a>.<p> |
From: Brad M. <bra...@us...> - 2002-04-24 04:52:35
|
Update of /cvsroot/linuxconsole/ruby/docs In directory usw-pr-cvs1:/tmp/cvs-serv30171 Modified Files: FB-Driver-HOWTO Log Message: fix typos (this is a very technical document and typos detract from the message) Index: FB-Driver-HOWTO =================================================================== RCS file: /cvsroot/linuxconsole/ruby/docs/FB-Driver-HOWTO,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- FB-Driver-HOWTO 3 Nov 2001 15:46:46 -0000 1.1 +++ FB-Driver-HOWTO 24 Apr 2002 04:52:32 -0000 1.2 @@ -75,7 +75,7 @@ was impressed by it. Later I toke over it development and improved even more. Much thanks goes to Fabrice for getting the ball rolling. This API is a natural extension of the original API developed by Martin Schaller and - now maintained by Geert Uytterhoeven (ge...@li...). Thanks goes + now maintained by Geert Uytterhoeven (ge...@li...). Thanks to you and the many others who developed the Linux framebuffer system, drivers and utilities. A great amount of thanks goes to Andreas Beck of the GGI project for helping me write this document and teaching me about @@ -142,7 +142,7 @@ 2. Framebuffer Card Technology This section gives a very cursory overview of graphics cards that have - accessable framebuffer technology, in order to help you understand the + accessible framebuffer technology, in order to help you understand the concepts used later in the document. If you are considering writing a driver for a video card please contact the manufacturer for documentation on the card. Also please consider reading some books on video hardware in @@ -194,8 +194,8 @@ otherwise it would leave a noticeable trace while moving, which would look ugly. - At 2, the HSYNC pulse ends. This point isn't of much interest, as you can - not tell, if the ray is already at the left edge. The only thing important + At 2, the HSYNC pulse ends. This point isn't of much interest, as you cannot + tell if the ray is already at the left edge. The only thing important about point 2 is, that the time between point 1 and 2 must be sufficiently high for the monitor to detect the HSYNC signal. Usually the HSYNC pulse can be made very small. @@ -266,7 +266,7 @@ Of course there are limits to this: If you go too far, you will produce pixels beyond the visiable area of the monitor which is useless, or - interfere with the retrace, what gives ugly stripes from the retracing + interfere with the retrace; that gives ugly stripes from the retracing CRT ray. Now let's shed some light on a few remaining terms: @@ -288,7 +288,7 @@ If you look at the fbdev driver you think yikes. Yes it's complex but not as much as you think. A side note about standard modes. It's a common - misconception, that graphics cards cannot do anything but the VGA/VESA + misconception that graphics cards cannot do anything but the VGA/VESA induced "standard" modes like 640x480, 800x600, 1024x768, 1280x960, ... With most cards, about any resolution can be programmed, though many accelerators have been optimized for the abovementioned modes, so that it @@ -441,9 +441,9 @@ 3.3 Recipe for multisync monitors - a) determine the totals by calculating htotal = width*1.2 and + a) Determine the totals by calculating htotal = width*1.2 and vtotal = height*1.1 . - b) check, what limits the refresh by calculating vfreq2 = hfreqmax/vtotal. + b) Check what limits the refresh by calculating vfreq2 = hfreqmax/vtotal. If that exceeds vfreqmax, the limit is on the vfreq side, and we use vfre = vfreqmax and hfreq = vfreqmax*vtotal. If it doesn't, the mode is limited by hfreq and we have to use vfreq = vfreq2. @@ -527,17 +527,17 @@ There exist an endless number of colors but colors have a special property. If you take two colors and mix them together you get a different color. - Their exist many models to represent colors but fbdev is based on what is - know as the RGB color model. Out of all the colors their exist three colors + There exist many models to represent colors but fbdev is based on what is + known as the RGB color model. Out of all the colors there exist three colors in this model which when mixed in different amounts can produce any color. - These colors are know as primary colors. There does exist a physical limit + These colors are known as primary colors. There does exist a physical limit to mixing colors. If you take and mix red, green, and blue in equal amounts you get gray. Now if you make each color component equally brighter the final - color will become white. Now their reachs a point where making each component + color will become white. Now there reaches a point where making each component brighter and brighter you will still end up with white. You can increase the intensity of a color component by any amount from some inital value up to this physical limit. This is where the image depth comes in. As you know on - most cards you can have a image depth from one bit to 32 bits. Image depth + most cards you can have an image depth from one bit to 32 bits. Image depth is independent of the mapping from the pixel to the color components. It also is independent of the memory layout to pixel mapping. Note some cards have a complex mapping from the pixel values to the color components (red, @@ -566,7 +566,7 @@ The way fbdev tells what this video memory to pixel mapping is, is with the type field in fb_fix_screeninfo. Here I'm going to describe the - FB_TYPE_PACKED_PIXELS layout since it is the most common. Here their exist + FB_TYPE_PACKED_PIXELS layout since it is the most common. Here there exists a direct mapping from video memory to pixel value. If you place a 5 in video memory then the pixel value at that position will be 5. This is important when you have memory mapped the video memory to userland. Next we consider @@ -575,7 +575,7 @@ above diagram this mapping is independent from the mapping from video memory to pixel value. This means a FB_TYPE_PLANES could have FB_VISUAL_MONO01 just like FB_TYPE_PACKED_PIXELS can. To understand visuals we have to go back to - the first types of video hardware. In the begining their was just monochrome + the first types of video hardware. In the begining there was just monochrome monitors. Here we could only display 2 colors. The foreground and background color. Traditionally these colors are black and white but if you are old enough you would remember the old green monitors. In fbdev API we define two @@ -588,7 +588,7 @@ colors needed. If your application needs a specific set of colors it would switch the color maps and you would get the needed colors. Of course this also switches the other colors in the applications. That was the trade off. - This became what was known as pseudocolor mode. In fbdev API their exist two + This became what was known as pseudocolor mode. In fbdev API there exist two types of pseudocolor mappings. A static one and a dynamic one. FB_VISUAL_STATIC_PSEUDOCOLOR defines a video card that has a non programmable color map. What colors you get are what you are stuck with. The other type @@ -598,13 +598,13 @@ support 256 color intensity levels for each color component you would need a color map of 16 million colors. So new mappings where developed in which specific fields of a pixel where directly proportional to the intensity of a - color component. Two types of mappings where developed. One being truecolor - and the other directcolor. In truecolor you can not change the mappings from + color component. Two types of mappings were developed. One being truecolor + and the other directcolor. In truecolor you cannot change the mappings from the pixel value to color intensities. Setting a value of 64 to the red component of the pixel will result in a red intensity of 64. How bright of a red this is depends on the image depth. For directcolor you can control this. You could make a pixel value in the red field of 64 equal 128 for the - intensity. Also some cards support a alpha value which is used in higher + intensity. Also some cards support an alpha value which is used in higher graphics which for fbdev is of little importance than it should always be set to the highest value it can have. For most cards alpha shows up for 15 bit modes where each color compenent can have up to 32 intensity levels (2^5) @@ -622,7 +622,7 @@ you to make life much easier. In the older API the console code was heavily linked to the framebuffer devices. The newer API has now moved nearly all console handling code into fbcon itself. Now fbcon is a true wrapper around - the video cards abilities. This allowed for massive code reduction and + the video card's abilities. This allowed for massive code reduction and easier driver developement. A good example of a framebuffer driver is vfb. The vfb driver is not a true framebuffer driver. All it does is map a chunk of memory to userspace. It's used for demonstration purposes and testing. @@ -647,7 +647,7 @@ the new API fb_monospecs prevents such things and if used correctly can prevent a monitor from being cooked. The final data structure is fb_info. This defines the current state of the video card. Fb_info is only visible - from the kernel. Inside of fb_info their exist a fb_ops which is a collection + from the kernel. Inside of fb_info there exists a fb_ops which is a collection of needed functions to make fbdev and fbcon work. 4.2 Driver layout @@ -659,23 +659,23 @@ independent in behavior from video cards. First we define our three basic data structures. For all the data structures I defined them static and declare the default values. The reason I do this is that it's less memory - intensive then allocate a piece of memory and filling in the default - values. Note for drivers that support multihead of the same card then + intensive than allocating a piece of memory and filling in the default + values. Note for drivers that support multihead on the same card the fb_info should be dynamically allocated for each card present. For fb_var_screeninfo and fb_fix_screeninfo they still are declared static since all the cards can be set to the same mode. 4.3 Initialization and boot time parameter handling - Their are two functions that handle the video card at boot time. + There are two functions that handle the video card at boot time. int xxfb_init(void); int xxfb_setup(char*); In the example driver as with most drivers these functions are placed at - the end of the driver. Both are very card specific. In oorder to link + the end of the driver. Both are very card specific. In order to link your driver directly into the kernel both of these functions you must add - the above defination with extern in front to fbmem.c. Then add these + the above definition with extern in front to fbmem.c. Then add these functions to the following in fbmem.c static struct { @@ -711,11 +711,11 @@ The xxxfb_init function sets the inital state of the video card. This function has to consider bus and platform handling since today most cards - can exist on many platforms. For bus types we have to deal with their are + can exist on many platforms. For bus types we have to deal with there are PCI, ISA, zorro. Also some platforms offer firmware that returns information - about the video card. In these case we often don't need to deal with the - bus unless we need more control over the card. Lets look at Open Firmware - thats avaliable on PowerPCs. If you are going to use Open Firmware to + about the video card. In these cases we often don't need to deal with the + bus unless we need more control over the card. Let's look at Open Firmware + that's available on PowerPCs. If you are going to use Open Firmware to initalize your card you need to add the following to offb.c. #ifdef CONFIG_FB_YOUR_CARD @@ -741,18 +741,18 @@ The first two functions xxfb_open and xxfb_release can be called from both fbcon and fbdev. In fact that's the use of the user flag. If user equals zero - then fbcon wants to access this device else it's a explicit open of the + then fbcon wants to access this device else it's an explicit open of the framebuffer device. This way you can handle the framebuffer device for the console in a special way for a particular video card. For most drivers this function just does a MOD_INC_USE_COUNT or MOD_DEC_USE_COUNT. - These are the function thats at the heart of mode setting. Their do exist a + These are the functions at the heart of mode setting. There are a few cards that don't support mode changing. For these we have this function return a -EINVAL to let the user know he/she can't set the mode. Actually set_var does more than just set modes. It can check them as well. In - fb_var_screeninfo their exist a flag called activate. This flag can take on + fb_var_screeninfo there is a flag called activate. This flag can take on the the following values. FB_ACTIVATE_NOW,FB_ACTIVATE_NXTOPEN, and FB_ACTIVATE_TEST. FB_ACTIVATE_TEST tells us if the hardware can handle what the user requested. FB_ACTIVATE_NXTOPEN sets the values wanted on the next @@ -766,7 +766,7 @@ int line_length; /* Basic setup test. Here we look at what the user passed in that he/she - wants. For example to test the fb_var_screeninfo field vmode like its + wants. For example to test the fb_var_screeninfo field vmode like is done in vfb.c. Here we see if the user has FB_VMODE_YWARP. Also we should look to see if the user tried to pass in invalid values like 17 bpp (bits per pixel) */ @@ -780,15 +780,15 @@ memory a video card has varies from card to card. Also finding out how much memory we have is done in xxxfb_init since this never changes unless you add more memory to your card which requires a reboot of the - machine anyway. You might have to do other tests depending on make of + machine anyway. You might have to do other tests depending on the make of your card. Note the par filed in fb_info. This is used to store card specific data. This data can effect set_var. Also it is present to - allow other possible drivers that could effect the framebuffer device - such as a special driver for a accel engine or memory mapping the z + allow other possible drivers that could affect the framebuffer device + such as a special driver for an accel engine or memory mapping the z buffer on a card */ /* Summary. First look at any var fields to see if they are valid. Next - test hardware with these fields without setting the hardware. A + test hardware with these fields without setting the hardware. An example of one is find what the line_lenght would be for the new mode. Then test the following */ @@ -811,7 +811,7 @@ /* Timings are okay. Next we see if we really want to change this mode */ if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) { - /* Now lets program the clocks on this card. Here the code is + /* Now let's program the clocks on this card. Here the code is very card specific. Remember to change any fields for fix in info that might be effected by the changing of the resolution. */ @@ -820,7 +820,7 @@ ... /* Now that we have dealt with the possible changing resolutions - lets handle a possible change of bit depth. */ + let's handle a possible change of bit depth. */ if (info->var.bits_per_pixel != var->bits_per_pixel) { if ((err = fb_alloc_cmap(&info->cmap, 0, 0))) return err; @@ -886,15 +886,15 @@ The function xxxfb_setcolreg is used to set a single color register for a video card. To use this properly you must understand colors which is discribed above. This routine sets a color map entry. The regno passed into - the routine represents the color map index which is equal to the color thats + the routine represents the color map index which is equal to the color that's composed of the amount of red, green, blue, and even alpha that are also passed into the function. For psuedocolor modes this color map index (regno) represents the pixel value. So if you place a pixel value of regno in video - memory you get the color thats made of the red, green, blue that you passed - into xxxfb_setcolreg. Now for truecolor and directcolor mode its a little + memory you get the color that's made of the red, green, blue that you passed + into xxxfb_setcolreg. Now for truecolor and directcolor mode it's a little different. In this case we simulate a psuedo color map. The reason for this is the console system always has a color map which has 16 entries. In fb_info - their exist the pseudo_palette which gives a mapping from a non color map + there exists the pseudo_palette which gives a mapping from a non color map mode to a color map based system. The pseudo_palette always has 17 entries. The first 16 for the console colors and the last one for the cursor. So if we wanted to display the 4 entry in the color map of the console we would @@ -935,51 +935,51 @@ fb_ops function a NULL pointer. The sky is the limit for defining your ioctl calls. - Their exist a default memory map function for fbdev but sometimes it just + There is a default memory map function for fbdev but sometimes it just doesn't have the power you truly need. A good example of this is video - cards that work in sparc workstations need their own mmap functions because - of the way sparcs handle memory is different from other platforms. This is + cards that work in sparc workstations. Those need their own mmap functions because + sparcs handle memory differently from other platforms. This is true even for sparcs with PCI buses. Now here is the next class of functions which are optional. The xxxfb_accel_init and xxfb_accel_done. xxxfb_accel_init really depends on - the card. It is intended to initial the engine or set the accel engine into + the card. It is intended to initialize the engine or set the accel engine into a state which you can use the acceleration engine. It also ensures that the framebuffer is not accessed at the same time as the accel engine. This - can lock a system. Uusally their exist a bit to test to see if a accel - engine is idle or the card generates a interrupt. For cards that used the - old fb_rasterimg this function replaces it. Some cards have a seperate state - for 3D and 2D. This function insures that the card goes into a 2D state. - Just in case a previous application set the accel engine into a 3D state + can lock a system. Uusally there is a bit to test to see if an accel + engine is idle or the card generates an interrupt. For cards that used the + old fb_rasterimg this function replaces it. Some cards have a separate state + for 3D and 2D. This function insures that the card goes into a 2D state, + just in case a previous application set the accel engine into a 3D state or made the accel engine very unhappy. The next function that encomposses this set is xxxfb_accel_done. This function sets the video card in a state such that you can write to the framebuffer again. You should provide both functions if your driver uses even one hardware accelerated function. The - reason being is to ensure that the framebuffer is not accessed at the same - tome as the framebuffer. + reason is to ensure that the framebuffer is not accessed at the same + time as the framebuffer. - Final the third class of fb_op functions. Like the first they are required. - If your card does not support any of these acclerated functions their exist + Finally the third class of fb_op functions. Like the first they are required. + If your card does not support any of these accelerated functions there are default functions for packed pixel framebuffer formats. They are - cfba_fillrect, cfba_copyarea, cfba_imgblit. If your supports some but not + cfba_fillrect, cfba_copyarea, cfba_imgblit. If you supports some but not all of the accels available you can still use some of these software emulated - accels. Each software emulated accel in store in a seperate file. Now lets - discribe each accel function. Before we discuss these functions we need to - note not to draw in areas pass the video boundries. If it does you need to - adjust the with and height of the ares to avoid this problem. The first - function just fills in rectangle starting at x1 and y1 of some width and + accels. Each software emulated accel is stored in a seperate file. Now let's + describe each accel function. Before we discuss these functions we need to + note not to draw in areas past the video boundries. If it does you need to + adjust the width and height of the ares to avoid this problem. The first + function just fills in a rectangle starting at x1 and y1 of some width and height with a pixel value of packed pixel format. If the video memory mapping is not a direct mapping from the pixel value (not FB_TYPE_PACKED_PIXEL) you - will have to do some translating. Their are two ways to fill in the + will have to do some translating. There are two ways to fill in the rectangle, FBA_ROP_COPY and FBA_ROP_XOR. FBA_ROP_XOR exclusive ors the pixel value with the current pixel value. This allows things like quickly erasing a rectangular area. The other function just directly copies the data. The next function is xxxfb_copyarea. It just copies one area of the framebuffer at source x and source y of some width and height to some destination x and - y. The final function is xxxfb_imageblt. This function copies a image from + y. The final function is xxxfb_imageblt. This function copies an image from system memory to video memory. You can get really fancy here but this is fbdev which has the purpose of mode setting only. All the image blit - function does is draw bitmaps, image made of a foregound and background + function does is draw bitmaps, images made of a foregound and background color, and a color image of the same color depth as the framebuffer. The second part is used to draw the little penguins. The drawing of bitmaps is used to draw our fonts. That does it for the functions. Now you should be |
From: Rodrigo D. <rda...@us...> - 2002-04-23 00:59:28
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb/input In directory usw-pr-cvs1:/tmp/cvs-serv12898 Modified Files: hid-input.c hid.h pid.c pid.h Log Message: PID update Index: hid-input.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/hid-input.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hid-input.c 16 Apr 2002 17:41:51 -0000 1.1 +++ hid-input.c 23 Apr 2002 00:59:25 -0000 1.2 @@ -299,6 +299,9 @@ case 0x7e: usage->code = FF_GAIN; break; case 0x83: /* Simultaneous Effects Max */ input->ff_effects_max = (field->value[0]); +#ifdef DEBUG + printk("Maximum Effects - %d",input->ff_effects_max); +#endif break; case 0x98: /* Device Control */ usage->code = FF_AUTOCENTER; break; @@ -307,6 +310,9 @@ bit = input->keybit; usage->type = EV_KEY; max = KEY_MAX; +#ifdef DEBUG + printk("Safety Switch Report\n"); +#endif break; // case 0x94: /* Effect Playing */ // usage->code = FF_STATUS_PLAYING; @@ -326,6 +332,10 @@ break; default: unknown: +#ifdef DEBUG +// Temporary!! + resolv_usage(usage->hid); +#endif if (field->report_size == 1) { @@ -417,6 +427,7 @@ if (usage->hid == (HID_UP_PID | 0x83UL)) { /* Simultaneous Effects Max */ input->ff_effects_max = value; + printk("Maximum Effects - %d",input->ff_effects_max); return; } if (usage->hid == (HID_UP_PID | 0x7fUL)) { Index: hid.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/hid.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hid.h 16 Apr 2002 17:41:51 -0000 1.1 +++ hid.h 23 Apr 2002 00:59:25 -0000 1.2 @@ -418,6 +418,7 @@ int hid_set_field(struct hid_field *, unsigned, __s32); void hid_submit_report(struct hid_device *, struct hid_report *, unsigned char dir); void hid_init_reports(struct hid_device *hid); +int hid_find_report_by_usage(struct hid_device *hid, __u32 wanted_usage, struct hid_report **report, int type); #ifdef CONFIG_HID_FF Index: pid.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/pid.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- pid.c 16 Apr 2002 17:41:51 -0000 1.1 +++ pid.c 23 Apr 2002 00:59:25 -0000 1.2 @@ -39,11 +39,9 @@ #define DEBUG -/* MODULE_AUTHOR("Rodrigo Damazio <rda...@ls...>"); MODULE_DESCRIPTION("USB PID(Physical Interface Device) Driver"); MODULE_LICENSE("GPL"); -*/ #define CHECK_OWNERSHIP(i, hid_pid) \ ((i) < FF_EFFECTS_MAX && i >= 0 && \ @@ -54,26 +52,40 @@ /* Called when a transfer is completed */ static void hid_pid_ctrl_out(struct urb *u) { +#ifdef DEBUG + printk("hid_pid_ctrl_out - Transfer Completed\n"); +#endif } static void hid_pid_exit(struct hid_device* hid) { + struct hid_ff_pid *private = hid->ff_private; + + if (private->urbffout) { + usb_unlink_urb(private->urbffout); + usb_free_urb(private->urbffout); + } } static int pid_upload_periodic(struct hid_ff_pid *pid, struct ff_effect *effect, int is_update) { - return -ENOMEM; + + printk("Requested periodic force upload\n"); + return 0; } static int pid_upload_constant(struct hid_ff_pid *pid, struct ff_effect *effect, int is_update) { - return -ENOMEM; + printk("Requested constant force upload\n"); + return 0; } static int pid_upload_condition(struct hid_ff_pid *pid, struct ff_effect *effect, int is_update) { - return -ENOMEM; + printk("Requested Condition force upload\n"); + return 0; } static int pid_upload_ramp(struct hid_ff_pid *pid, struct ff_effect *effect, int is_update) { - return -ENOMEM; + printk("Request ramp force upload\n"); + return 0; } static int hid_pid_event(struct hid_device *hid, struct input_dev *input, @@ -91,36 +103,116 @@ return 0; } -static int hid_pid_flush(struct input_dev *input, struct file *file) +/* Lock must be held by caller */ +static void hid_pid_ctrl_playback(struct hid_device *hid, + struct hid_pid_effect *effect, int play) { - return 0; + if (play) { + set_bit(FF_PID_FLAGS_PLAYING, &effect->flags); + + } else { + clear_bit(FF_PID_FLAGS_PLAYING, &effect->flags); + } } + +static int hid_pid_erase(struct input_dev *dev, int id) +{ + struct hid_device *hid = dev->private; + struct hid_field* field; + struct hid_report* report; + struct hid_ff_pid *pid = hid->ff_private; + unsigned long flags; + unsigned wanted_report = HID_UP_PID | FF_PID_USAGE_BLOCK_FREE; /* PID Block Free Report */ + int ret; + + if (!CHECK_OWNERSHIP(id, pid)) return -EACCES; + + /* Find report */ + ret = hid_find_report_by_usage(hid, wanted_report, &report, HID_OUTPUT_REPORT); + if(!ret) { + printk("Couldn't find report\n"); + return ret; + } + + /* Find field */ + field = (struct hid_field *) kmalloc(sizeof(struct hid_field), GFP_KERNEL); + ret = hid_set_field(field, ret, pid->effects[id].device_id); + if(!ret) { + printk("Couldn't set field\n"); + return ret; + } + + hid_submit_report(hid, report, USB_DIR_OUT); + + spin_lock_irqsave(&pid->lock, flags); + hid_pid_ctrl_playback(hid, pid->effects + id, 0); + pid->effects[id].flags = 0; + spin_unlock_irqrestore(&pid->lock, flags); + + return ret; +} + +/* Erase all effects this process owns */ +static int hid_pid_flush(struct input_dev *dev, struct file *file) +{ + struct hid_device *hid = dev->private; + struct hid_ff_pid *pid = hid->ff_private; + int i; + + /*NOTE: no need to lock here. The only times EFFECT_USED is + modified is when effects are uploaded or when an effect is + erased. But a process cannot close its dev/input/eventX fd + and perform ioctls on the same fd all at the same time */ + for (i=0; i<dev->ff_effects_max; ++i) + if ( current->pid == pid->effects[i].owner + && test_bit(FF_PID_FLAGS_USED, &pid->effects[i].flags)) + if (hid_pid_erase(dev, i)) + warn("erase effect %d failed", i); + + return 0; +} + + static int hid_pid_upload_effect(struct input_dev *dev, struct ff_effect *effect) { struct hid_ff_pid* pid_private = (struct hid_ff_pid*)(dev->private); - int id; int ret; int is_update; + int flags=0; #ifdef DEBUG - printk("Upload effect called: effect_type=%x\n",effect->type); + printk("Upload effect called: effect_type=%x\n",effect->type); #endif /* Check this effect type is supported by this device */ - if (!test_bit(effect->type, dev->ffbit)) + if (!test_bit(effect->type, dev->ffbit)) { +#ifdef DEBUG + printk("Invalid kind of effect requested.\n"); +#endif return -EINVAL; + } /* * If we want to create a new effect, get a free id */ if (effect->id == -1) { + int id=0; - for (id=0; id < FF_EFFECTS_MAX; ++id) - if (!test_and_set_bit(FF_PID_FLAGS_USED, &pid_private->effects[id].flags)) break; + // Spinlock so we don`t get a race condition when choosing IDs + spin_lock_irqsave(&pid_private->lock,flags); - if ( id == FF_EFFECTS_MAX || id >= dev->ff_effects_max) + while(id < FF_EFFECTS_MAX) + if (!test_and_set_bit(FF_PID_FLAGS_USED, &pid_private->effects[id++].flags)) + break; + + if ( id == FF_EFFECTS_MAX) { +// TEMP - We need to get ff_effects_max correctly first: || id >= dev->ff_effects_max) { +#ifdef DEBUG + printk("Not enough device memory\n"); +#endif return -ENOMEM; + } effect->id = id; #ifdef DEBUG @@ -128,13 +220,14 @@ #endif pid_private->effects[id].owner = current->pid; pid_private->effects[id].flags = (1<<FF_PID_FLAGS_USED); + spin_unlock_irqrestore(&pid_private->lock,flags); is_update = FF_PID_FALSE; } else { /* We want to update an effect */ if (!CHECK_OWNERSHIP(effect->id, pid_private)) return -EACCES; - + /* Parameter type cannot be updated */ if (effect->type != pid_private->effects[effect->id].effect.type) return -EINVAL; @@ -171,14 +264,16 @@ break; default: +#ifdef DEBUG + printk("Invalid type of effect requested - %x.\n", effect->type); +#endif return -EINVAL; } - if (ret == 0) { - /* A packet was sent, forbid new updates until we are notified - * that the packet was updated - */ + /* If a packet was sent, forbid new updates until we are notified + * that the packet was updated + */ + if (ret == 0) set_bit(FF_PID_FLAGS_UPDATING, &pid_private->effects[effect->id].flags); - } pid_private->effects[effect->id].effect = *effect; return ret; } @@ -187,11 +282,13 @@ { struct hid_ff_pid *private; - private = hid->input.private = hid->ff_private = kmalloc(sizeof(struct hid_ff_pid), GFP_KERNEL); + private = hid->ff_private = kmalloc(sizeof(struct hid_ff_pid), GFP_KERNEL); if (!private) return -1; memset(private,0,sizeof(struct hid_ff_pid)); - + + hid->ff_private = private; /* 'cause memset can move the block away */ + private->hid = hid; hid->ff_exit = hid_pid_exit; @@ -206,17 +303,15 @@ usb_fill_control_urb(private->urbffout, hid->dev,0,(void *) &private->ffcr,private->ctrl_buffer,8,hid_pid_ctrl_out,hid); hid->input.upload_effect = hid_pid_upload_effect; hid->input.flush = hid_pid_flush; + hid->input.ff_effects_max = 8; // A random default set_bit(EV_FF, hid->input.evbit); set_bit(EV_FF_STATUS, hid->input.evbit); - /* Retrieve specific device capabilities(types of effects it can play, etc.) */ - -// set_bit(FF_CONSTANT, hid->input.ffbit); + spin_lock_init(&private->lock); printk(KERN_INFO "Force feedback driver for PID devices by Rodrigo Damazio <rda...@ls...>.\n"); - return 0; - + return 0; } static int __init hid_pid_modinit(void) @@ -229,7 +324,7 @@ } -//module_init(hid_pid_modinit); -//module_exit(hid_pid_modexit); +module_init(hid_pid_modinit); +module_exit(hid_pid_modexit); Index: pid.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/pid.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- pid.h 16 Apr 2002 17:41:51 -0000 1.1 +++ pid.h 23 Apr 2002 00:59:25 -0000 1.2 @@ -25,8 +25,9 @@ #define FF_EFFECTS_MAX 64 -#define FF_PID_FLAGS_USED 1 -#define FF_PID_FLAGS_UPDATING 2 +#define FF_PID_FLAGS_USED 1 /* If the effect exists */ +#define FF_PID_FLAGS_UPDATING 2 /* If the effect is being updated */ +#define FF_PID_FLAGS_PLAYING 3 /* If the effect is currently being played */ #define FF_PID_FALSE 0 #define FF_PID_TRUE 1 @@ -34,19 +35,28 @@ struct hid_pid_effect { unsigned int flags; pid_t owner; + unsigned int device_id; // The device-assigned ID struct ff_effect effect; }; struct hid_ff_pid { struct hid_device *hid; + unsigned long int gain; struct urb *urbffout; struct usb_ctrlrequest ffcr; + spinlock_t lock; char ctrl_buffer[8]; - unsigned long int gain; - unsigned int max_effects; - struct hid_pid_effect effects[FF_EFFECTS_MAX]; }; + +/* + * Constants from the PID usage table (still far from complete) + */ + +#define FF_PID_USAGE_BLOCK_LOAD 0x89UL +#define FF_PID_USAGE_BLOCK_FREE 0x90UL +#define FF_PID_USAGE_NEW_EFFECT 0xABUL +#define FF_PID_USAGE_POOL_REPORT 0x7FUL |
From: Rodrigo D. <rda...@us...> - 2002-04-23 00:50:41
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb/input In directory usw-pr-cvs1:/tmp/cvs-serv10874 Modified Files: Config.in Log Message: Fixed contradicting dependencies(Force feedback option would never be enabled). Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/Config.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Config.in 18 Apr 2002 22:02:47 -0000 1.2 +++ Config.in 23 Apr 2002 00:50:39 -0000 1.3 @@ -13,11 +13,11 @@ dep_tristate ' USB HIDBP Keyboard (basic) support' CONFIG_USB_KBD $CONFIG_USB $CONFIG_INPUT dep_tristate ' USB HIDBP Mouse (basic) support' CONFIG_USB_MOUSE $CONFIG_USB $CONFIG_INPUT dep_tristate ' Griffin Technology PowerMate support' CONFIG_USB_POWERMATE $CONFIG_USB $CONFIG_INPUT - dep_mbool ' Force feedback support' CONFIG_HID_FF $CONFIG_USB_HID - dep_mbool ' Logitech RumblePad support' CONFIG_LOGITECH_RUMBLE $CONFIG_USB_HID $CONFIG_HID_FF - dep_mbool ' Logitech WingMan Force 3D support' CONFIG_LOGITECH_3D $CONFIG_USB_HID $CONFIG_HID_FF - dep_mbool ' PID Devices' CONFIG_HID_PID $CONFIG_USB_HID $CONFIG_HID_FF fi +dep_mbool ' Force feedback support' CONFIG_HID_FF $CONFIG_USB_HID +dep_mbool ' Logitech RumblePad support' CONFIG_LOGITECH_RUMBLE $CONFIG_USB_HID $CONFIG_HID_FF +dep_mbool ' Logitech WingMan Force 3D support' CONFIG_LOGITECH_3D $CONFIG_USB_HID $CONFIG_HID_FF +dep_mbool ' PID Devices' CONFIG_HID_PID $CONFIG_USB_HID $CONFIG_HID_FF dep_tristate ' Wacom Intuos/Graphire tablet support' CONFIG_USB_WACOM $CONFIG_USB $CONFIG_INPUT |
From: Rodrigo D. <rda...@us...> - 2002-04-23 00:46:00
|
Update of /cvsroot/linuxconsole/ruby/utils In directory usw-pr-cvs1:/tmp/cvs-serv9515/utils Modified Files: fftest.c Log Message: Quick fix for type problems in fftest.c Index: fftest.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/utils/fftest.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- fftest.c 8 Apr 2002 21:16:13 -0000 1.18 +++ fftest.c 23 Apr 2002 00:45:55 -0000 1.19 @@ -24,14 +24,18 @@ * Johann Deneux <de...@if...> */ +// Quick fix for #define mess +#define uint16_t unsigned short +#define uint32_t unsigned short + #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> -#include <linux/input.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h> +#include <linux/input.h> #define BITS_PER_LONG (sizeof(long) * 8) #define OFF(x) ((x)%BITS_PER_LONG) |
From: Brad M. <bra...@us...> - 2002-04-22 10:21:55
|
Update of /cvsroot/linuxconsole/ruby/docs In directory usw-pr-cvs1:/tmp/cvs-serv12329 Modified Files: console.txt Log Message: doc tweaks (my first commit) Index: console.txt =================================================================== RCS file: /cvsroot/linuxconsole/ruby/docs/console.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- console.txt 14 Mar 2002 20:02:06 -0000 1.2 +++ console.txt 22 Apr 2002 10:21:52 -0000 1.3 @@ -9,17 +9,18 @@ Abstract - This documentation describes a proposal for a new console system for linux. The goal of the new design is break the interdepenancy of + This documentation describes a proposal for a new console system + for linux. The goal of the new design is to break the interdepenancy of many subsystems on the console system. In this model the console system - instead is a abstract layer constructed of seperate hardware subsystems + instead is an abstract layer constructed of separate hardware subsystems that can function on their own. Such a design allows for much more - flexability. + flexibility. 1. Introduction As linux is ported to more and more different flavors of hardware we are beginning to see the need to redesign many parts of the kernel. The reason -being that linux was originally done on the 32 bit intel platform. Thus many +is that linux was originally done on the 32 bit intel platform. Thus many parts of the kernel design was ix86 centeric. Over time this has changed and still continues to change. The console redesign is another such a change to support the needs of these many new devices to linux. |
From: James S. <jsi...@us...> - 2002-04-20 18:50:50
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv15030 Added Files: kd.h Log Message: Fixed for LED defintions by Andrej Lajovic --- NEW FILE: kd.h --- #ifndef _LINUX_KD_H #define _LINUX_KD_H #include <linux/types.h> /* 0x4B is 'K', to avoid collision with termios and vt */ #define GIO_FONT 0x4B60 /* gets font in expanded form */ #define PIO_FONT 0x4B61 /* use font in expanded form */ #define GIO_FONTX 0x4B6B /* get font using struct consolefontdesc */ #define PIO_FONTX 0x4B6C /* set font using struct consolefontdesc */ struct consolefontdesc { unsigned short charcount; /* characters in font (256 or 512) */ unsigned short charheight; /* scan lines per character (1-32) */ char *chardata; /* font data in expanded form */ }; #define PIO_FONTRESET 0x4B6D /* reset to default font */ #define GIO_CMAP 0x4B70 /* gets colour palette on VGA+ */ #define PIO_CMAP 0x4B71 /* sets colour palette on VGA+ */ #define KIOCSOUND 0x4B2F /* start sound generation (0 for off) */ #define KDMKTONE 0x4B30 /* generate tone */ #define KDGETLED 0x4B31 /* return current led state */ #define KDSETLED 0x4B32 /* set led state [lights, not flags] */ #define LED_SCR 0x01 /* scroll lock led */ #define LED_NUM 0x02 /* num lock led */ #define LED_CAP 0x04 /* caps lock led */ #define KDGKBTYPE 0x4B33 /* get keyboard type */ #define KB_84 0x01 #define KB_101 0x02 /* this is what we always answer */ #define KB_OTHER 0x03 #define KDADDIO 0x4B34 /* add i/o port as valid */ #define KDDELIO 0x4B35 /* del i/o port as valid */ #define KDENABIO 0x4B36 /* enable i/o to video board */ #define KDDISABIO 0x4B37 /* disable i/o to video board */ #define KDSETMODE 0x4B3A /* set text/graphics mode */ #define KD_TEXT 0x00 #define KD_GRAPHICS 0x01 #define KD_TEXT0 0x02 /* obsolete */ #define KD_TEXT1 0x03 /* obsolete */ #define KDGETMODE 0x4B3B /* get current mode */ #define KDMAPDISP 0x4B3C /* map display into address space */ #define KDUNMAPDISP 0x4B3D /* unmap display from address space */ typedef char scrnmap_t; #define E_TABSZ 256 #define GIO_SCRNMAP 0x4B40 /* get screen mapping from kernel */ #define PIO_SCRNMAP 0x4B41 /* put screen mapping table in kernel */ #define GIO_UNISCRNMAP 0x4B69 /* get full Unicode screen mapping */ #define PIO_UNISCRNMAP 0x4B6A /* set full Unicode screen mapping */ #define GIO_UNIMAP 0x4B66 /* get unicode-to-font mapping from kernel */ struct unipair { unsigned short unicode; unsigned short fontpos; }; struct unimapdesc { unsigned short entry_ct; struct unipair *entries; }; #define PIO_UNIMAP 0x4B67 /* put unicode-to-font mapping in kernel */ #define PIO_UNIMAPCLR 0x4B68 /* clear table, possibly advise hash algorithm */ struct unimapinit { unsigned short advised_hashsize; /* 0 if no opinion */ unsigned short advised_hashstep; /* 0 if no opinion */ unsigned short advised_hashlevel; /* 0 if no opinion */ }; #define UNI_DIRECT_BASE 0xF000 /* start of Direct Font Region */ #define UNI_DIRECT_MASK 0x01FF /* Direct Font Region bitmask */ #define K_RAW 0x00 #define K_XLATE 0x01 #define K_MEDIUMRAW 0x02 #define K_UNICODE 0x03 #define KDGKBMODE 0x4B44 /* gets current keyboard mode */ #define KDSKBMODE 0x4B45 /* sets current keyboard mode */ #define K_METABIT 0x03 #define K_ESCPREFIX 0x04 #define KDGKBMETA 0x4B62 /* gets meta key handling mode */ #define KDSKBMETA 0x4B63 /* sets meta key handling mode */ #define K_SCROLLLOCK 0x01 #define K_NUMLOCK 0x02 #define K_CAPSLOCK 0x04 #define KDGKBLED 0x4B64 /* get led flags (not lights) */ #define KDSKBLED 0x4B65 /* set led flags (not lights) */ struct kbentry { unsigned char kb_table; unsigned char kb_index; unsigned short kb_value; }; #define K_NORMTAB 0x00 #define K_SHIFTTAB 0x01 #define K_ALTTAB 0x02 #define K_ALTSHIFTTAB 0x03 #define KDGKBENT 0x4B46 /* gets one entry in translation table */ #define KDSKBENT 0x4B47 /* sets one entry in translation table */ struct kbsentry { unsigned char kb_func; unsigned char kb_string[512]; }; #define KDGKBSENT 0x4B48 /* gets one function key string entry */ #define KDSKBSENT 0x4B49 /* sets one function key string entry */ struct kbdiacr { unsigned char diacr, base, result; }; struct kbdiacrs { unsigned int kb_cnt; /* number of entries in following array */ struct kbdiacr kbdiacr[256]; /* MAX_DIACR from keyboard.h */ }; #define KDGKBDIACR 0x4B4A /* read kernel accent table */ #define KDSKBDIACR 0x4B4B /* write kernel accent table */ struct kbkeycode { unsigned int scancode, keycode; }; #define KDGETKEYCODE 0x4B4C /* read kernel keycode table entry */ #define KDSETKEYCODE 0x4B4D /* write kernel keycode table entry */ #define KDSIGACCEPT 0x4B4E /* accept kbd generated signals */ struct hwclk_time { unsigned sec; /* 0..59 */ unsigned min; /* 0..59 */ unsigned hour; /* 0..23 */ unsigned day; /* 1..31 */ unsigned mon; /* 0..11 */ unsigned year; /* 70... */ int wday; /* 0..6, 0 is Sunday, -1 means unknown/don't set */ }; #define KDGHWCLK 0x4B50 /* get hardware clock */ #define KDSHWCLK 0x4B51 /* set hardware clock */ struct kbd_repeat { int delay; /* in msec; <= 0: don't change */ int rate; /* in msec; <= 0: don't change */ }; #define KDKBDREP 0x4B52 /* set keyboard delay/repeat rate; * actually used values are returned */ #define KDFONTOP 0x4B72 /* font operations */ struct console_font_op { unsigned int op; /* operation code KD_FONT_OP_* */ unsigned int flags; /* KD_FONT_FLAG_* */ unsigned int width, height; /* font size */ unsigned int charcount; unsigned char *data; /* font data with height fixed to 32 */ }; #define KD_FONT_OP_SET 0 /* Set font */ #define KD_FONT_OP_GET 1 /* Get font */ #define KD_FONT_OP_SET_DEFAULT 2 /* Set font to default, data points to name / NULL */ #define KD_FONT_OP_COPY 3 /* Copy from another console */ #define KD_FONT_FLAG_DONT_RECALC 1 /* Don't recalculate hw charcell size [compat] */ #ifdef __KERNEL__ #define KD_FONT_FLAG_OLD 0x80000000 /* Invoked via old interface [compat] */ #endif /* note: 0x4B00-0x4B4E all have had a value at some time; don't reuse for the time being */ /* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */ #endif /* _LINUX_KD_H */ |
From: johann d. <jd...@us...> - 2002-04-18 22:02:50
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb/input In directory usw-pr-cvs1:/tmp/cvs-serv25501/drivers/usb/input Modified Files: Config.in Makefile hid-ff.c hid-lgff.c Added Files: hid-lg3dff.c Log Message: Added driver for Logitech WingMan Force 3D. Not tested yet. --- NEW FILE: hid-lg3dff.c --- /* * $$ * * Force feedback support for hid-compliant devices of the Logitech *3D family * * Copyright (c) 2002 Johann Deneux */ /* * 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. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so by * e-mail - mail your message to <de...@if...> */ #include <linux/input.h> #include <linux/sched.h> #define DEBUG #include <linux/usb.h> #include <linux/circ_buf.h> #include "hid.h" #define RUN_AT(t) (jiffies + (t)) /* Frequency at which the rendering is updated */ #define FREQ (HZ/20) /* Effect status */ #define EFFECT_STARTED 0 /* Effect is going to play after some time (ff_replay.delay) */ #define EFFECT_PLAYING 1 /* Effect is being played */ #define EFFECT_USED 2 /* Check that the current process can access an effect */ #define CHECK_OWNERSHIP(i, l) \ (i>=0 && i<N_EFFECTS \ && test_bit(EFFECT_USED, l->effects[i].flags) \ && (current->pid == 0 \ || l->effects[i].owner == current->pid)) #define N_EFFECTS 8 struct lg3d_effect { pid_t owner; struct ff_effect effect; /* Description of the effect */ unsigned int count; /* Number of times left to play */ unsigned long flags[1]; unsigned long started_at; /* When the effect started to play */ }; struct lg3d_device { struct hid_device* hid; struct urb* urbffout; /* Output URB used to send ff commands */ struct usb_ctrlrequest ffcr; /* ff commands use control URBs */ char buf[8]; struct lg3d_effect effects[N_EFFECTS]; spinlock_t lock; /* device-level lock. Having locks on a per-effect basis could be nice, but isn't really necessary */ struct timer_list timer; unsigned long last_time; /* Last time the timer handler was executed */ }; static void hid_lg3d_ctrl_out(struct urb *urb); static void hid_lg3d_exit(struct hid_device* hid); static int hid_lg3d_event(struct hid_device *hid, struct input_dev *input, unsigned int type, unsigned int code, int value); static int hid_lg3d_flush(struct input_dev *input, struct file *file); static int hid_lg3d_upload_effect(struct input_dev *input, struct ff_effect *effect); static int hid_lg3d_erase(struct input_dev *input, int id); static void hid_lg3d_timer(unsigned long timer_data); int hid_lg3d_init(struct hid_device* hid) { struct lg3d_device *private; /* Private data */ hid->ff_private = kmalloc(sizeof(struct lg3d_device), GFP_KERNEL); private = hid->ff_private; if (!private) return -1; memset(private, 0, sizeof(struct lg3d_device)); hid->ff_private = private; private->hid = hid; spin_lock_init(&private->lock); /* Timer for the periodic update task */ init_timer(&private->timer); private->timer.data = (unsigned long)private; private->timer.function = hid_lg3d_timer; /* Event and exit callbacks */ hid->ff_exit = hid_lg3d_exit; hid->ff_event = hid_lg3d_event; /* USB init */ if (!(private->urbffout = usb_alloc_urb(0, GFP_KERNEL))) { kfree(hid->ff_private); return -1; } usb_fill_control_urb(private->urbffout, hid->dev, 0, (void*) &private->ffcr, private->buf, 8, hid_lg3d_ctrl_out, hid); dbg("Created ff output control urb"); /* Input init */ hid->input.upload_effect = hid_lg3d_upload_effect; hid->input.flush = hid_lg3d_flush; set_bit(FF_CONSTANT, hid->input.ffbit); set_bit(EV_FF, hid->input.evbit); hid->input.ff_effects_max = N_EFFECTS; printk(KERN_INFO "Force feedback for Logitech *3D devices by Johann Deneux <de...@if...>\n"); /* Start the update task */ add_timer(&private->timer); /*TODO: only run the timer when at least one effect is playing */ return 0; } static void hid_lg3d_exit(struct hid_device* hid) { struct lg3d_device *lg3d = hid->ff_private; del_timer_sync(&lg3d->timer); if (lg3d->urbffout) { usb_unlink_urb(lg3d->urbffout); usb_free_urb(lg3d->urbffout); } } static int hid_lg3d_event(struct hid_device *hid, struct input_dev* input, unsigned int type, unsigned int code, int value) { struct lg3d_device *lg3d = hid->ff_private; struct lg3d_effect *effect = lg3d->effects + code; unsigned long flags; if (type != EV_FF) return -EINVAL; if (!CHECK_OWNERSHIP(code, lg3d)) return -EACCES; if (value < 0) return -EINVAL; spin_lock_irqsave(&lg3d->lock, flags); if (value > 0) { if (test_bit(EFFECT_STARTED, effect->flags)) { spin_unlock_irqrestore(&lg3d->lock, flags); return -EBUSY; } if (test_bit(EFFECT_PLAYING, effect->flags)) { spin_unlock_irqrestore(&lg3d->lock, flags); return -EBUSY; } effect->count = value; if (effect->effect.replay.delay) { set_bit(EFFECT_STARTED, effect->flags); } else { set_bit(EFFECT_PLAYING, effect->flags); } effect->started_at = jiffies; } else { /* value == 0 */ clear_bit(EFFECT_STARTED, effect->flags); clear_bit(EFFECT_PLAYING, effect->flags); } spin_unlock_irqrestore(&lg3d->lock, flags); return 0; } /* Erase all effects this process owns */ static int hid_lg3d_flush(struct input_dev *dev, struct file *file) { struct hid_device *hid = dev->private; struct lg3d_device *lg3d = hid->ff_private; int i; for (i=0; i<dev->ff_effects_max; ++i) { /*NOTE: no need to lock here. The only times EFFECT_USED is modified is when effects are uploaded or when an effect is erased. But a process cannot close its dev/input/eventX fd and perform ioctls on the same fd all at the same time */ if ( current->pid == lg3d->effects[i].owner && test_bit(EFFECT_USED, lg3d->effects[i].flags)) { if (hid_lg3d_erase(dev, i)) warn("erase effect %d failed", i); } } return 0; } static int hid_lg3d_erase(struct input_dev *dev, int id) { struct hid_device *hid = dev->private; struct lg3d_device *lg3d = hid->ff_private; unsigned long flags; if (!CHECK_OWNERSHIP(id, lg3d)) return -EACCES; spin_lock_irqsave(&lg3d->lock, flags); lg3d->effects[id].flags[0] = 0; spin_unlock_irqrestore(&lg3d->lock, flags); return 0; } static int hid_lg3d_upload_effect(struct input_dev* input, struct ff_effect* effect) { struct hid_device *hid = input->private; struct lg3d_device *lg3d = hid->ff_private; struct lg3d_effect new; int id; unsigned long flags; dbg("ioctl rumble"); if (!test_bit(effect->type, input->ffbit)) return -EINVAL; if (effect->type != FF_CONSTANT) return -EINVAL; spin_lock_irqsave(&lg3d->lock, flags); if (effect->id == -1) { int i; for (i=0; i<N_EFFECTS && test_bit(EFFECT_USED, lg3d->effects[i].flags); ++i); if (i >= N_EFFECTS) { spin_unlock_irqrestore(&lg3d->lock, flags); return -ENOSPC; } effect->id = i; lg3d->effects[i].owner = current->pid; lg3d->effects[i].flags[0] = 0; set_bit(EFFECT_USED, lg3d->effects[i].flags); } else if (!CHECK_OWNERSHIP(effect->id, lg3d)) { spin_unlock_irqrestore(&lg3d->lock, flags); return -EACCES; } id = effect->id; new = lg3d->effects[id]; new.effect = *effect; new.effect.replay = effect->replay; /* If we updated an effect that was being played, we need to remake the rumble effect */ if (test_bit(EFFECT_STARTED, lg3d->effects[id].flags) || test_bit(EFFECT_STARTED, lg3d->effects[id].flags)) { /* Changing replay parameters is not allowed (for the time being) */ if (new.effect.replay.delay != lg3d->effects[id].effect.replay.delay || new.effect.replay.length != lg3d->effects[id].effect.replay.length) { spin_unlock_irqrestore(&lg3d->lock, flags); return -ENOSYS; } lg3d->effects[id] = new; } else { lg3d->effects[id] = new; } spin_unlock_irqrestore(&lg3d->lock, flags); return 0; } static void hid_lg3d_ctrl_out(struct urb *urb) { struct hid_device *hid = urb->context; if (urb->status) warn("hid_irq_ffout status %d received", urb->status); } static void hid_lg3d_timer(unsigned long timer_data) { struct lg3d_device *lg3d = (struct lg3d_device*)timer_data; struct hid_device *hid = lg3d->hid; unsigned long flags; int x, y; int i; int err; x = 0; y = 0; spin_lock_irqsave(&lg3d->lock, flags); for (i=0; i<N_EFFECTS; ++i) { struct lg3d_effect* effect = lg3d->effects +i; if (test_bit(EFFECT_PLAYING, effect->flags)) { if (effect->effect.type == FF_CONSTANT) { x = y = 0x60; /*TODO: actual implementation */ } /* One run of the effect is finished playing */ if (time_after(jiffies, effect->started_at + effect->effect.replay.delay*HZ/1000 + effect->effect.replay.length*HZ/1000)) { if (--effect->count <= 0) clear_bit(EFFECT_PLAYING, effect->flags); else { if (effect->effect.replay.length != 0) { clear_bit(EFFECT_PLAYING, effect->flags); set_bit(EFFECT_STARTED, effect->flags); } effect->started_at = jiffies; } } } else if (test_bit(EFFECT_STARTED, lg3d->effects[i].flags)) { /* Check if we should start playing the effect */ if (time_after(jiffies, lg3d->effects[i].started_at + lg3d->effects[i].effect.replay.delay*HZ/1000)) { clear_bit(EFFECT_STARTED, lg3d->effects[i].flags); set_bit(EFFECT_PLAYING, lg3d->effects[i].flags); } } } spin_unlock_irqrestore(&lg3d->lock, flags); lg3d->urbffout->pipe = usb_sndctrlpipe(hid->dev, 0); lg3d->ffcr.bRequestType = USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE; lg3d->urbffout->transfer_buffer_length = lg3d->ffcr.wLength = 8; lg3d->ffcr.bRequest = 9; lg3d->ffcr.wValue = 0x0200; /*NOTE: Potential problem with little/big endian */ lg3d->ffcr.wIndex = 0; lg3d->urbffout->dev = hid->dev; lg3d->buf[0] = 0x51; lg3d->buf[1] = 0x08; lg3d->buf[2] = x; lg3d->buf[3] = y; if ((err=usb_submit_urb(lg3d->urbffout, GFP_ATOMIC))) warn("usb_submit_urb returned %d", err); add_timer(&lg3d->timer); } Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/Config.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Config.in 16 Apr 2002 17:41:51 -0000 1.1 +++ Config.in 18 Apr 2002 22:02:47 -0000 1.2 @@ -15,6 +15,7 @@ dep_tristate ' Griffin Technology PowerMate support' CONFIG_USB_POWERMATE $CONFIG_USB $CONFIG_INPUT dep_mbool ' Force feedback support' CONFIG_HID_FF $CONFIG_USB_HID dep_mbool ' Logitech RumblePad support' CONFIG_LOGITECH_RUMBLE $CONFIG_USB_HID $CONFIG_HID_FF + dep_mbool ' Logitech WingMan Force 3D support' CONFIG_LOGITECH_3D $CONFIG_USB_HID $CONFIG_HID_FF dep_mbool ' PID Devices' CONFIG_HID_PID $CONFIG_USB_HID $CONFIG_HID_FF fi Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Makefile 16 Apr 2002 17:41:51 -0000 1.1 +++ Makefile 18 Apr 2002 22:02:47 -0000 1.2 @@ -22,6 +22,10 @@ hid-objs += hid-lgff.o endif +ifeq ($(CONFIG_LOGITECH_3D),y) + hid-objs += hid-lg3dff.o +endif + ifeq ($(CONFIG_HID_FF),y) hid-objs += hid-ff.o endif Index: hid-ff.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/hid-ff.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hid-ff.c 16 Apr 2002 17:41:51 -0000 1.1 +++ hid-ff.c 18 Apr 2002 22:02:47 -0000 1.2 @@ -36,8 +36,13 @@ /* Drivers' initializing functions */ extern int hid_lgff_init(struct hid_device* hid); +extern int hid_lg3d_init(struct hid_device* hid); extern int hid_pid_init(struct hid_device* hid); +/* + * This table contains pointers to initializers. To add support for new + * devices, you need to add the USB vendor and product ids here. + */ struct hid_ff_initializer { __u16 idVendor; __u16 idProduct; Index: hid-lgff.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/input/hid-lgff.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- hid-lgff.c 16 Apr 2002 17:41:51 -0000 1.1 +++ hid-lgff.c 18 Apr 2002 22:02:47 -0000 1.2 @@ -1,7 +1,9 @@ /* * $$ * - * Force feedback support for hid-compliant devices from Logitech. + * Force feedback support for hid-compliant for some of the devices from + * Logitech, namely: + * - WingMan Cordless RumblePad * * Copyright (c) 2002 Johann Deneux */ @@ -51,11 +53,9 @@ || effect.owner == current->pid) /* **************************************************************************/ -/* Implements the protocol used by the Logitech WingMan Cordless rumble pad */ +/* Implements the protocol used by the Logitech WingMan Cordless RumblePad */ /* **************************************************************************/ -#ifdef CONFIG_LOGITECH_RUMBLE - #define LGFF_CHECK_OWNERSHIP(i, l) \ (i>=0 && i<LGFF_EFFECTS \ && test_bit(EFFECT_USED, l->effects[i].flags) \ @@ -494,5 +494,3 @@ spin_unlock_irqrestore(&lgff->lock, flags); } - -#endif /* CONFIG_LOGITECH_RUMBLE */ |
From: johann d. <jd...@us...> - 2002-04-17 19:40:18
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce In directory usw-pr-cvs1:/tmp/cvs-serv7952/drivers/input/joystick/iforce Modified Files: Config.in Log Message: Fixed bug that enabled I-Force entries if CONFIG_JOYSTICK_IFORCE was not set. Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/Config.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Config.in 10 Feb 2002 23:16:19 -0000 1.2 +++ Config.in 17 Apr 2002 19:40:14 -0000 1.3 @@ -4,7 +4,7 @@ dep_tristate 'I-Force devices' CONFIG_JOYSTICK_IFORCE $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK -if [ "$CONFIG_JOYSTICK_IFORCE" != "n" ]; then +if [ "$CONFIG_JOYSTICK_IFORCE" = "m" -o "$CONFIG_JOYSTICK_IFORCE" = "y" ]; then dep_bool ' I-Force USB joysticks and wheels' CONFIG_JOYSTICK_IFORCE_USB $CONFIG_USB if [ "$CONFIG_INPUT_SERIO" != "n" -a "$CONFIG_INPUT_SERPORT" != "n" ]; then bool ' I-Force Serial joysticks and wheels' CONFIG_JOYSTICK_IFORCE_232 |