From 10e9ddcf51fe63797ca5bac252e8d9cf77d80f96 Mon Sep 17 00:00:00 2001 From: Diego Nieto Cid Date: Sun, 3 Apr 2011 00:02:46 -0300 Subject: Depend on X11 for string to keysym mappings. * config.make.in (HAVE_X11,X11_CFLAGS,X11_LIBS,XKB_BASE): New variables. * configure.in: Check for x11 module. * console-client/Makefile (PC_KBD_SO_SRCS): Move XKB sources... * console-client/Makefile (XKB_SRCS): ... here. New variable. * console-client/Makefile (SRCS): Add $(XKB_SRCS). * console-client/Makefile (LCLHDRS): Add xkb/xkb.h. * console-client/Makefile (XKB_DATA_DIR): Removed variable. * console-client/Makefile (pc_kbd.so.$(hurd-version)): Use patsubst. Depend on XKB objects when HAVE_X11 = yes. * console-client/Makefile (install): Depend on XKB datafiles when HAVE_X11 = yes. * console-client/Makefile (pc-kbd-CFLAGS): Set variable when HAVE_X11 = yes * console-client/Makefile ($(XKB_DATA_DIR),$(XKB_DATA_DIR)/%): Replaced by... * console-client/Makefile[HAVE_X11=yes]($(XKB_BASE),$(XKB_BASE)/%): ... this targets. * console-client/Makefile[HAVE_X11=yes](pc_kbd-LDLIBS): New variable. * console-client/xkb/keysymdef.h: Removed file. * console-client/xkb/ks_tables.h: Likewise. * console-client/xkb/symname.c: Likewise. * console-client/xkb/xkb.c: Include . * console-client/xkb/compose.c: Likewise. * console-client/xkb/xkb.h: Remove XStringToKeysym prototype. Include . --- configure.in | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/configure.in b/configure.in index 1cf4daab..967e86c9 100644 --- a/configure.in +++ b/configure.in @@ -230,6 +230,21 @@ AC_MSG_RESULT($boot_store_types) # Check for ncursesw, which is needed for the console-curses client. hurd_LIB_NCURSESW +# Check for those Xorg modules needed for keyboard mappings. +PKG_CHECK_MODULES([X11], [x11 xproto], + [ have_x11=yes + pkg_failed=no + AC_MSG_CHECKING([for xkb base]) + _PKG_CONFIG([XKB_BASE], [variable=xkb_base], [xkeyboard-config]) + AS_IF([test $pkg_failed = no], + [XKB_BASE="$pkg_cv_XKB_BASE" + AC_MSG_RESULT([$XKB_BASE])], + [XKB_BASE="$datadir/X11/xkb" + AC_MSG_RESULT([(default) $XKB_BASE])]) + ], [have_x11=no]) +AC_SUBST([have_x11]) +AC_SUBST([XKB_BASE]) + if test -f ./$ac_unique_file; then # Configuring in source directory; don't create any Makefiles. makefiles= -- cgit v1.2.3 From d2af65efaaea156b7bf2b5c6f319f8ee92d991b8 Mon Sep 17 00:00:00 2001 From: Diego Nieto Cid Date: Mon, 11 Apr 2011 15:51:23 -0300 Subject: Disable XKB when either lex or yacc is missing. --- configure.in | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/configure.in b/configure.in index 967e86c9..18216540 100644 --- a/configure.in +++ b/configure.in @@ -230,6 +230,12 @@ AC_MSG_RESULT($boot_store_types) # Check for ncursesw, which is needed for the console-curses client. hurd_LIB_NCURSESW +AC_PROG_LEX +AC_PROG_YACC +AS_IF([test "$LEX" = ":" -o "$YACC" = ":"], [ +have_x11=no +AC_MSG_WARN([lex or yacc is mising, XKB will be disabled.]) +],[ # Check for those Xorg modules needed for keyboard mappings. PKG_CHECK_MODULES([X11], [x11 xproto], [ have_x11=yes @@ -242,6 +248,7 @@ PKG_CHECK_MODULES([X11], [x11 xproto], [XKB_BASE="$datadir/X11/xkb" AC_MSG_RESULT([(default) $XKB_BASE])]) ], [have_x11=no]) +]) AC_SUBST([have_x11]) AC_SUBST([XKB_BASE]) -- cgit v1.2.3 From 555a202f0debbb1f9ac81bc449ba9084a6d847a2 Mon Sep 17 00:00:00 2001 From: Diego Nieto Cid Date: Sat, 16 Apr 2011 20:22:31 -0300 Subject: Find the absolute path to Specifying the header file relative to $(includeir) won't work because it is defined in terms of prefix variable which is redefined during installation to the destination directory. And the dependency check will fail during 'make install' because the header might not be in the destination tree. * config.make.in (X11_KEYSYMDEF_H, SED): New variables. * configure.in: Check for sed. Find X11/keysymdef.h absolute location using the preprocessor and save it in X11_KEYSYMDEF_H variable. * console-client/Makefile (kstoucs_map.c): Use X11_KEYSYMDEF_H to depend on the header file. --- configure.in | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/configure.in b/configure.in index 18216540..978de1e2 100644 --- a/configure.in +++ b/configure.in @@ -82,6 +82,7 @@ AC_SUBST(enable_static_progs) INSTALL="$SHELL $(readlink -f "$ac_install_sh")"\ -C || unset INSTALL] AC_PROG_INSTALL AC_PROG_AWK +AC_PROG_SED AC_PROG_CC # Require GCC. @@ -247,10 +248,28 @@ PKG_CHECK_MODULES([X11], [x11 xproto], AC_MSG_RESULT([$XKB_BASE])], [XKB_BASE="$datadir/X11/xkb" AC_MSG_RESULT([(default) $XKB_BASE])]) + + have_keysymdef_h=no + AC_CHECK_HEADER([X11/keysymdef.h], + [AC_MSG_CHECKING([for X11/keysymdef.h absolute location]) + AC_PREPROC_IFELSE([#include ], + [[X11_KEYSYMDEF_H=`$SED -n 's%^[^"]*"\([^"]*X11/keysymdef.h\)".*$%\1%p' conftest.i`] + # did the sed magic above work? + AS_IF([test -f "$X11_KEYSYMDEF_H"], + [have_keysymdef_h=yes], + [X11_KEYSYMDEF_H=not-found]) + ], + [X11_KEYSYMDEF_H=not-found]) + AC_MSG_RESULT([$X11_KEYSYMDEF_H]) + ]) + AS_IF([test $have_keysymdef_h = no], + [AC_MSG_WARN([X11/keysymdef.h was not found, XKB will be disabled.]) + have_x11=no]) ], [have_x11=no]) ]) AC_SUBST([have_x11]) AC_SUBST([XKB_BASE]) +AC_SUBST([X11_KEYSYMDEF_H]) if test -f ./$ac_unique_file; then # Configuring in source directory; don't create any Makefiles. -- cgit v1.2.3 From 4ee6908ccdbfbc860ef69dae37debd51cdf0d446 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 30 Jun 2012 23:55:24 -0300 Subject: Add nr_irqs * libdde_linux26/lib/src/kernel/irq/handle.c: New file. * libdde_linux26/lib/src/Makefile (SRC_C_libdde_linux26.o.a): Add handle.c --- libdde_linux26/lib/src/Makefile | 1 + libdde_linux26/lib/src/kernel/irq/handle.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 libdde_linux26/lib/src/kernel/irq/handle.c diff --git a/libdde_linux26/lib/src/Makefile b/libdde_linux26/lib/src/Makefile index 358196bb..6f3e246e 100644 --- a/libdde_linux26/lib/src/Makefile +++ b/libdde_linux26/lib/src/Makefile @@ -98,6 +98,7 @@ SRC_C_libdde_linux26.o.a += \ kernel/timer.c \ kernel/wait.c \ kernel/workqueue.c \ + kernel/irq/handle.c \ lib/bitmap.c \ lib/bitrev.c \ lib/crc32.c \ diff --git a/libdde_linux26/lib/src/kernel/irq/handle.c b/libdde_linux26/lib/src/kernel/irq/handle.c new file mode 100644 index 00000000..ac7b14f8 --- /dev/null +++ b/libdde_linux26/lib/src/kernel/irq/handle.c @@ -0,0 +1,23 @@ +/* + * linux/kernel/irq/handle.c + * + * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar + * Copyright (C) 2005-2006, Thomas Gleixner, Russell King + * + * This file contains the core interrupt handling code. + * + * Detailed information is available in Documentation/DocBook/genericirq + * + */ + +#include +#include +#include +#include +#include +#include +#include + +int nr_irqs = NR_IRQS; +EXPORT_SYMBOL_GPL(nr_irqs); + -- cgit v1.2.3 From c81310d41ab762e49315f37b0818272e8dce12a2 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 30 Jun 2012 23:56:26 -0300 Subject: Add tasklet_kill * libdde_linux26/lib/src/arch/l4/softirq.c (tasklet_kill): New function. --- libdde_linux26/lib/src/arch/l4/softirq.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libdde_linux26/lib/src/arch/l4/softirq.c b/libdde_linux26/lib/src/arch/l4/softirq.c index 247a414f..d93bfaff 100644 --- a/libdde_linux26/lib/src/arch/l4/softirq.c +++ b/libdde_linux26/lib/src/arch/l4/softirq.c @@ -67,6 +67,20 @@ void tasklet_init(struct tasklet_struct *t, t->data = data; } +void tasklet_kill(struct tasklet_struct *t) +{ + if (in_interrupt()) + printk("Attempt to kill tasklet from interrupt\n"); + + while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { + do + yield(); + while (test_bit(TASKLET_STATE_SCHED, &t->state)); + } + tasklet_unlock_wait(t); + clear_bit(TASKLET_STATE_SCHED, &t->state); +} + /* enqueue tasklet */ static void __tasklet_enqueue(struct tasklet_struct *t, struct tasklet_head *listhead) -- cgit v1.2.3 From 5b15bbd5d13327142fdfb4b1e8080960d7e9da2e Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 30 Jun 2012 23:57:00 -0300 Subject: Add param_set/get_charp/bool/invboll * libdde_linux26/lib/src/arch/l4/param.c (param_set_charp, param_get_charp, param_set_bool, param_get_bool, param_set_invbool, param_get_invbool): New functions. --- libdde_linux26/lib/src/arch/l4/param.c | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/libdde_linux26/lib/src/arch/l4/param.c b/libdde_linux26/lib/src/arch/l4/param.c index 5bd83f32..c459428a 100644 --- a/libdde_linux26/lib/src/arch/l4/param.c +++ b/libdde_linux26/lib/src/arch/l4/param.c @@ -26,6 +26,69 @@ STANDARD_PARAM_DEF(uint, unsigned int, "%u", unsigned long, simple_strtoul); STANDARD_PARAM_DEF(long, long, "%li", long, simple_strtol); STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", unsigned long, simple_strtoul); +int param_set_charp(const char *val, struct kernel_param *kp) +{ + if (!val) { + printk(KERN_ERR "%s: string parameter expected\n", + kp->name); + return -EINVAL; + } + + if (strlen(val) > 1024) { + printk(KERN_ERR "%s: string parameter too long\n", + kp->name); + return -ENOSPC; + } + + *(char **)kp->arg = (char *)val; + return 0; +} + +int param_get_charp(char *buffer, struct kernel_param *kp) +{ + return sprintf(buffer, "%s", *((char **)kp->arg)); +} + +int param_set_bool(const char *val, struct kernel_param *kp) +{ + /* No equals means "set"... */ + if (!val) val = "1"; + + /* One of =[yYnN01] */ + switch (val[0]) { + case 'y': case 'Y': case '1': + *(int *)kp->arg = 1; + return 0; + case 'n': case 'N': case '0': + *(int *)kp->arg = 0; + return 0; + } + return -EINVAL; +} + +int param_get_bool(char *buffer, struct kernel_param *kp) +{ + /* Y and N chosen as being relatively non-coder friendly */ + return sprintf(buffer, "%c", (*(int *)kp->arg) ? 'Y' : 'N'); +} + +int param_set_invbool(const char *val, struct kernel_param *kp) +{ + int boolval, ret; + struct kernel_param dummy; + + dummy.arg = &boolval; + ret = param_set_bool(val, &dummy); + if (ret == 0) + *(int *)kp->arg = !boolval; + return ret; +} + +int param_get_invbool(char *buffer, struct kernel_param *kp) +{ + return sprintf(buffer, "%c", (*(int *)kp->arg) ? 'N' : 'Y'); +} + int printk_ratelimit(void) { return 0; -- cgit v1.2.3 From 19d30af1cbc2f295db852ae24bb9dcdab7e1b388 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 1 Jul 2012 00:04:51 -0300 Subject: Fix link issue * libdde_linux26/contrib/mm/dmapool.c: Include --- libdde_linux26/contrib/mm/dmapool.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libdde_linux26/contrib/mm/dmapool.c b/libdde_linux26/contrib/mm/dmapool.c index b1f0885d..5c7aca4a 100644 --- a/libdde_linux26/contrib/mm/dmapool.c +++ b/libdde_linux26/contrib/mm/dmapool.c @@ -37,6 +37,8 @@ #include #include +#include + #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB_DEBUG_ON) #define DMAPOOL_DEBUG 1 #endif -- cgit v1.2.3 From 12f4d11afaf66268f4b8ac58ebd62f9d63f48a92 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 1 Jul 2012 00:32:31 -0300 Subject: Add dma resource management * contrib/kernel/dma.c: New file. * lib/src/Makefile (SRC_C_libdde_linux26.o.a): Add kernel/dma.c --- libdde_linux26/contrib/kernel/dma.c | 161 ++++++++++++++++++++++++++++++++++++ libdde_linux26/lib/src/Makefile | 1 + 2 files changed, 162 insertions(+) create mode 100644 libdde_linux26/contrib/kernel/dma.c diff --git a/libdde_linux26/contrib/kernel/dma.c b/libdde_linux26/contrib/kernel/dma.c new file mode 100644 index 00000000..f903189c --- /dev/null +++ b/libdde_linux26/contrib/kernel/dma.c @@ -0,0 +1,161 @@ +/* + * linux/kernel/dma.c: A DMA channel allocator. Inspired by linux/kernel/irq.c. + * + * Written by Hennus Bergman, 1992. + * + * 1994/12/26: Changes by Alex Nash to fix a minor bug in /proc/dma. + * In the previous version the reported device could end up being wrong, + * if a device requested a DMA channel that was already in use. + * [It also happened to remove the sizeof(char *) == sizeof(int) + * assumption introduced because of those /proc/dma patches. -- Hennus] + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +/* A note on resource allocation: + * + * All drivers needing DMA channels, should allocate and release them + * through the public routines `request_dma()' and `free_dma()'. + * + * In order to avoid problems, all processes should allocate resources in + * the same sequence and release them in the reverse order. + * + * So, when allocating DMAs and IRQs, first allocate the IRQ, then the DMA. + * When releasing them, first release the DMA, then release the IRQ. + * If you don't, you may cause allocation requests to fail unnecessarily. + * This doesn't really matter now, but it will once we get real semaphores + * in the kernel. + */ + + +DEFINE_SPINLOCK(dma_spin_lock); + +/* + * If our port doesn't define this it has no PC like DMA + */ + +#ifdef MAX_DMA_CHANNELS + + +/* Channel n is busy iff dma_chan_busy[n].lock != 0. + * DMA0 used to be reserved for DRAM refresh, but apparently not any more... + * DMA4 is reserved for cascading. + */ + +struct dma_chan { + int lock; + const char *device_id; +}; + +static struct dma_chan dma_chan_busy[MAX_DMA_CHANNELS] = { + [4] = { 1, "cascade" }, +}; + + +/** + * request_dma - request and reserve a system DMA channel + * @dmanr: DMA channel number + * @device_id: reserving device ID string, used in /proc/dma + */ +int request_dma(unsigned int dmanr, const char * device_id) +{ + if (dmanr >= MAX_DMA_CHANNELS) + return -EINVAL; + + if (xchg(&dma_chan_busy[dmanr].lock, 1) != 0) + return -EBUSY; + + dma_chan_busy[dmanr].device_id = device_id; + + /* old flag was 0, now contains 1 to indicate busy */ + return 0; +} /* request_dma */ + +/** + * free_dma - free a reserved system DMA channel + * @dmanr: DMA channel number + */ +void free_dma(unsigned int dmanr) +{ + if (dmanr >= MAX_DMA_CHANNELS) { + printk(KERN_WARNING "Trying to free DMA%d\n", dmanr); + return; + } + + if (xchg(&dma_chan_busy[dmanr].lock, 0) == 0) { + printk(KERN_WARNING "Trying to free free DMA%d\n", dmanr); + return; + } + +} /* free_dma */ + +#else + +int request_dma(unsigned int dmanr, const char *device_id) +{ + return -EINVAL; +} + +void free_dma(unsigned int dmanr) +{ +} + +#endif + +#ifdef CONFIG_PROC_FS + +#ifdef MAX_DMA_CHANNELS +static int proc_dma_show(struct seq_file *m, void *v) +{ + int i; + + for (i = 0 ; i < MAX_DMA_CHANNELS ; i++) { + if (dma_chan_busy[i].lock) { + seq_printf(m, "%2d: %s\n", i, + dma_chan_busy[i].device_id); + } + } + return 0; +} +#else +static int proc_dma_show(struct seq_file *m, void *v) +{ + seq_puts(m, "No DMA\n"); + return 0; +} +#endif /* MAX_DMA_CHANNELS */ + +static int proc_dma_open(struct inode *inode, struct file *file) +{ + return single_open(file, proc_dma_show, NULL); +} + +static const struct file_operations proc_dma_operations = { + .open = proc_dma_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int __init proc_dma_init(void) +{ + proc_create("dma", 0, NULL, &proc_dma_operations); + return 0; +} + +__initcall(proc_dma_init); +#endif + +EXPORT_SYMBOL(request_dma); +EXPORT_SYMBOL(free_dma); +EXPORT_SYMBOL(dma_spin_lock); diff --git a/libdde_linux26/lib/src/Makefile b/libdde_linux26/lib/src/Makefile index 6f3e246e..aa20c27d 100644 --- a/libdde_linux26/lib/src/Makefile +++ b/libdde_linux26/lib/src/Makefile @@ -85,6 +85,7 @@ endif # + contrib stuff / slightly modified stuff SRC_C_libdde_linux26.o.a += \ + kernel/dma.c \ kernel/exit.c \ kernel/kthread.c \ kernel/mutex.c \ -- cgit v1.2.3 From cc1d1c5b3b941ae16a55a54040c674e218afae0f Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 1 Jul 2012 00:35:04 -0300 Subject: Add boot_cpu_data * lib/src/arch/x86/kernel/setup.c: New file * lib/src/Makefile (SRC_C_libdde_linux26.o.a): Add kernel/setup.c --- libdde_linux26/lib/src/Makefile | 1 + libdde_linux26/lib/src/arch/x86/kernel/setup.c | 114 +++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 libdde_linux26/lib/src/arch/x86/kernel/setup.c diff --git a/libdde_linux26/lib/src/Makefile b/libdde_linux26/lib/src/Makefile index aa20c27d..4f1ec099 100644 --- a/libdde_linux26/lib/src/Makefile +++ b/libdde_linux26/lib/src/Makefile @@ -62,6 +62,7 @@ SRC_S_libdde_linux26.o.a += $(ARCH_DIR)/lib/delay.o SRC_C_libdde_linux26.o.a += lib/rwsem.c SRC_C_libdde_linux26.o.a += $(ARCH_DIR)/kernel/pci-dma.c SRC_C_libdde_linux26.o.a += $(ARCH_DIR)/kernel/pci-nommu.c +SRC_C_libdde_linux26.o.a += $(ARCH_DIR)/kernel/setup.c SRC_S_libdde_linux26_net.a += $(ARCH_DIR)/lib/checksum_32.S endif diff --git a/libdde_linux26/lib/src/arch/x86/kernel/setup.c b/libdde_linux26/lib/src/arch/x86/kernel/setup.c new file mode 100644 index 00000000..ef285c0d --- /dev/null +++ b/libdde_linux26/lib/src/arch/x86/kernel/setup.c @@ -0,0 +1,114 @@ +/* + * Copyright (C) 1995 Linus Torvalds + * + * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 + * + * Memory region support + * David Parsons , July-August 1999 + * + * Added E820 sanitization routine (removes overlapping memory regions); + * Brian Moyle , February 2001 + * + * Moved CPU detection code to cpu/${cpu}.c + * Patrick Mochel , March 2002 + * + * Provisions for empty E820 memory regions (reported by certain BIOSes). + * Alex Achenbach , December 2002. + * + */ + +/* + * This file handles the architecture-dependent parts of initialization + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include