diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/console_switch3.patch | 839 | ||||
-rw-r--r-- | debian/patches/exec.patch | 14 | ||||
-rw-r--r-- | debian/patches/mouse.patch | 485 | ||||
-rw-r--r-- | debian/patches/no-debian-dir.patch | 11 | ||||
-rw-r--r-- | debian/patches/ttys.patch | 13 |
5 files changed, 1362 insertions, 0 deletions
diff --git a/debian/patches/console_switch3.patch b/debian/patches/console_switch3.patch new file mode 100644 index 00000000..13c090d3 --- /dev/null +++ b/debian/patches/console_switch3.patch @@ -0,0 +1,839 @@ +2004-04-01 Marco Gerards <metgerards@student.han.nl> + + * Makefile (LCLHDRS): Add inputdev.h. + (pc_kbd.so.$(hurd-version)): Add kdioctlServer.o kbd-repeat.c. + (pc_kbd-LDLIBS): New variable. + * console.c (saved_id): New variable. + (saved_cons): Likewise. + (console_switch_away): New function. + (console_switch_back): Likewise. + * input.h (console_switch_away): New prototype. + (console_switch_back): Likewise. + * pc-kbd.c: Include "inputdev.h" and <argp.h>. + (repeater_node): New variable. + (doc): Likewise. + (options): Likewise. + (argp): Likewise. + (parse_opt): New function. + (pc_kbd_init): Parse the arguments. + (gnumach_v1_input_next): Pass the keyboard event to the repeater + if the repeater is active. + (pc_kbd_init): Parse the `--repeat' argument. + (pc_kbd_start): If a repeater node was specified, start it as a + translator on the given node. + (kev_type, mouse_motion, mouse_motion, Scancode, m_deltaX) + (m_deltaY, MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT, MOUSE_MOTION) + (MOUSE_EVENT, IOCPARM_MASK, IOC_OUT, IOC_IN, _IOC, _IOR, _IOW) + (KDSKBDMODE, KB_EVENT, KB_ASCII, KDFKBDTYPE, KB_VANILLAKB) + (KB_EVENT, KBSETLEDS): Move from here... + * inputdev.h: ... to here. New file. + * kbd-repeat.c: New file. + + + +diff -upN ../../console-client/Makefile ./Makefile +--- ../../console-client/Makefile 2002-09-17 14:26:10.000000000 +0200 ++++ console-client/Makefile 2004-03-28 10:53:06.000000000 +0200 +@@ -21,7 +21,7 @@ makemode := utility + target = console + SRCS = console.c timer.c driver.c + LCLHDRS = timer.h driver.h display.h input.h bell.h \ +- unicode.h bdf.h \ ++ unicode.h bdf.h inputdev.h \ + vga-dynafont.h vga-dynacolor.h vga-hw.h vga.h + + OBJS = $(filter-out %.sh,$(SRCS:.c=.o)) +@@ -45,7 +45,9 @@ modules = vga pc_kbd generic_speaker + + vga.so.$(hurd-version): $(patsubst %.c,%_pic.o,bdf.c vga-dynafont.c \ + vga-dynacolor.c vga-support.c vga.c) +-pc_kbd.so.$(hurd-version): $(patsubst %.c,%_pic.o,pc-kbd.c) ++pc_kbd.so.$(hurd-version): $(patsubst %.c,%_pic.o,pc-kbd.c kdioctlServer.o kbd-repeat.c) ++pc_kbd-LDLIBS = -ltrivfs ++ + generic_speaker.so.$(hurd-version): $(patsubst %.c,%_pic.o,generic-speaker.c) + + ifneq ($(LIBNCURSESW),) +diff -upN ../../console-client/console.c ./console.c +--- ../../console-client/console.c 2004-03-24 23:53:17.000000000 +0100 ++++ console-client/console.c 2004-03-28 11:10:42.000000000 +0200 +@@ -47,6 +47,12 @@ static struct mutex global_lock; + displayed. */ + static vcons_t active_vcons = NULL; + ++/* Contains the VT id when switched away. */ ++static int saved_id = 0; ++ ++/* The console, used to switch back. */ ++static cons_t saved_cons; ++ + + /* Callbacks for input source drivers. */ + +@@ -94,6 +100,53 @@ console_switch (int id, int delta) + } + + ++/* Switch away from the console an external use of the console like ++ XFree. */ ++void ++console_switch_away (void) ++{ ++ mutex_lock (&global_lock); ++ saved_id = active_vcons->id; ++ saved_cons = active_vcons->cons; ++ cons_vcons_close (active_vcons); ++ active_vcons = NULL; ++ mutex_unlock (&global_lock); ++} ++ ++/* Switch back to the console client from an external user of the ++ console like XFree. */ ++void ++console_switch_back (void) ++{ ++ vcons_list_t conslist; ++ mutex_lock (&global_lock); ++ if (saved_cons) ++ { ++ error_t err; ++ ++ err = cons_lookup (saved_cons, saved_id, 1, &conslist); ++ if (err) ++ { ++ mutex_unlock (&global_lock); ++ return; ++ } ++ ++ err = cons_vcons_open (saved_cons, conslist, &active_vcons); ++ if (err) ++ { ++ mutex_unlock (&global_lock); ++ return; ++ } ++ ++ conslist->vcons = active_vcons; ++ saved_cons = NULL; ++ mutex_unlock (&active_vcons->lock); ++ } ++ mutex_unlock (&global_lock); ++} ++ ++ ++ + /* Enter SIZE bytes from the buffer BUF into the currently active + console. This can be called by the input driver at any time. */ + error_t +diff -upN ../../console-client/input.h ./input.h +--- ../../console-client/input.h 2002-09-17 14:26:10.000000000 +0200 ++++ console-client/input.h 2004-03-28 10:53:13.000000000 +0200 +@@ -1,5 +1,5 @@ + /* input.h - The interface to and for an input driver. +- Copyright (C) 2002 Free Software Foundation, Inc. ++ Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Written by Marcus Brinkmann. + + This file is part of the GNU Hurd. +@@ -65,6 +65,15 @@ void console_error (const wchar_t *const + /* Exit the console client. Does not return. */ + void console_exit (void); + ++/* Switch away from the console an external use of the console like ++ XFree. */ ++void console_switch_away (void); ++ ++/* Switch back to the console client from an external user of the ++ console like XFree. */ ++void console_switch_back (void); ++ ++ + #if QUAERENDO_INVENIETIS + /* Do not use, do not remove. */ + void console_deprecated (int key); +diff -upN ../../console-client/inputdev.h ./inputdev.h +--- ../../console-client/inputdev.h 1970-01-01 01:00:00.000000000 +0100 ++++ console-client/inputdev.h 2004-03-28 10:53:13.000000000 +0200 +@@ -0,0 +1,122 @@ ++/* inputdev.h - Interfaces for the PC pc-kbd and mouse input drivers. ++ Copyright (C) 2002, 2004 Free Software Foundation, Inc. ++ Written by Marco Gerards. ++ ++ This file is part of the GNU Hurd. ++ ++ The GNU Hurd is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2, or (at ++ your option) any later version. ++ ++ The GNU Hurd 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, USA. */ ++ ++/* This gross stuff is cut & pasted from Mach sources, as Mach doesn't ++ export the interface we are using here. */ ++ ++/* ++ * Mach Operating System ++ * Copyright (c) 1991,1990,1989 Carnegie Mellon University ++ * All Rights Reserved. ++ * ++ * Permission to use, copy, modify and distribute this software and its ++ * documentation is hereby granted, provided that both the copyright ++ * notice and this permission notice appear in all copies of the ++ * software, derivative works or modified versions, and any portions ++ * thereof, and that both notices appear in supporting documentation. ++ * ++ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ++ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ++ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ++ * ++ * Carnegie Mellon requests users of this software to return to ++ * ++ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU ++ * School of Computer Science ++ * Carnegie Mellon University ++ * Pittsburgh PA 15213-3890 ++ * ++ * any improvements or extensions that they make and grant Carnegie Mellon ++ * the rights to redistribute these changes. ++ */ ++ ++#ifndef _INPUTDEV_H_ ++#define _INPUTDEV_H_ 1 ++ ++typedef u_short kev_type; /* kd event type */ ++ ++/* (used for event records) */ ++struct mouse_motion { ++ short mm_deltaX; /* units? */ ++ short mm_deltaY; ++}; ++typedef u_char Scancode; ++ ++typedef struct { ++ kev_type type; /* see below */ ++ struct timeval time; /* timestamp */ ++ union { /* value associated with event */ ++ boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */ ++ Scancode sc; /* KEYBD_EVENT */ ++ struct mouse_motion mmotion; /* MOUSE_MOTION */ ++ } value; ++} kd_event; ++#define m_deltaX mmotion.mm_deltaX ++#define m_deltaY mmotion.mm_deltaY ++ ++/* ++ * kd_event ID's. ++ */ ++#define MOUSE_LEFT 1 /* mouse left button up/down */ ++#define MOUSE_MIDDLE 2 ++#define MOUSE_RIGHT 3 ++#define MOUSE_MOTION 4 /* mouse motion */ ++#define KEYBD_EVENT 5 /* key up/down */ ++ ++ ++#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ ++#define IOC_OUT 0x40000000 /* copy out parameters */ ++#define IOC_IN 0x80000000U /* copy in parameters */ ++ ++#ifndef _IOC ++#define _IOC(inout,group,num,len) \ ++ (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) ++#endif ++#ifndef _IOR ++#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t)) ++#endif ++#ifndef _IOW ++#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t)) ++#endif ++ ++#define KDSKBDMODE _IOW('K', 1, int) /* set keyboard mode */ ++#define KB_EVENT 1 ++#define KB_ASCII 2 ++ ++#define KDGKBDTYPE _IOR('K', 2, int) /* get keyboard type */ ++#define KB_VANILLAKB 0 ++ ++#define KDSETLEDS _IOW('K', 5, int) /* set keyboard leds */ ++ ++ ++/* End of Mach code. */ ++ ++ ++/* Amount of times the device was opened. Normally this translator ++ should be only opened once. */ ++extern int kbd_repeater_opened; ++ ++/* Place the keyboard event KEY in the keyboard buffer. */ ++void repeat_key (kd_event *key); ++ ++/* Set the repeater translator on the node PATH. */ ++error_t setrepeater (const char *path); ++ ++#endif /* _INPUTDEV_H_ */ +diff -upN ../../console-client/kbd-repeat.c ./kbd-repeat.c +--- ../../console-client/kbd-repeat.c 1970-01-01 01:00:00.000000000 +0100 ++++ console-client/kbd-repeat.c 2004-04-01 03:22:46.000000000 +0200 +@@ -0,0 +1,357 @@ ++/* kbd-repeat.c - Keyboard repeater. ++ Copyright (C) 2004 Free Software Foundation, Inc. ++ Written by Marco Gerards. ++ ++ This file is part of the GNU Hurd. ++ ++ The GNU Hurd is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2, or (at ++ your option) any later version. ++ ++ The GNU Hurd 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, USA. */ ++ ++ ++#include <hurd/trivfs.h> ++#include <stdlib.h> ++#include <error.h> ++#include <string.h> ++#include <fcntl.h> ++#include <sys/mman.h> ++ ++#include "kdioctl_S.h" ++#include "inputdev.h" ++#include "input.h" ++ ++/* The amount of keyboard events that can be stored in the keyboard buffer. */ ++#define KBDEVTBUFSZ 20 ++ ++/* The size of the keyboard buffer in bytes. */ ++#define KBDBUFSZ (KBDEVTBUFSZ * sizeof (kd_event)) ++ ++/* Return the position of X in the buffer. */ ++#define KBDBUF_POS(x) ((x) % KBDBUFSZ) ++ ++/* The keyboard buffer. */ ++struct kbdbuf ++{ ++ char keybuffer[KBDBUFSZ]; ++ int pos; ++ size_t size; ++ struct condition readcond; ++ struct condition writecond; ++} kbdbuf; ++ ++/* Wakeup for select */ ++static struct condition select_alert; ++ ++/* The global lock */ ++static struct mutex global_lock; ++ ++/* Bucket to handle the keyboard RPCs. */ ++static struct port_bucket *kbdbucket; ++ ++/* Amount of times the device was opened. Normally this translator ++ should be only opened once. */ ++int kbd_repeater_opened; ++ ++ ++static int ++kdioctl_demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp) ++{ ++ extern int kdioctl_server (mach_msg_header_t *inp, mach_msg_header_t *outp); ++ return kdioctl_server (inp, outp) || trivfs_demuxer (inp, outp); ++} ++ ++ ++/* Place the keyboard event KEY in the keyboard buffer. */ ++void ++repeat_key (kd_event *key) ++{ ++ kd_event *ev; ++ ++ mutex_lock (&global_lock); ++ while (kbdbuf.size + sizeof (kd_event) > KBDBUFSZ) ++ { ++ /* The input buffer is full, wait until there is some space. */ ++ if (hurd_condition_wait (&kbdbuf.writecond, &global_lock)) ++ { ++ mutex_unlock (&global_lock); ++ /* Interrupt, silently continue. */ ++ } ++ } ++ ev = (kd_event *) &kbdbuf.keybuffer[KBDBUF_POS (kbdbuf.pos ++ + kbdbuf.size)]; ++ kbdbuf.size += sizeof (kd_event); ++ memcpy (ev, key, sizeof (kd_event)); ++ condition_broadcast (&kbdbuf.readcond); ++ mutex_unlock (&global_lock); ++} ++ ++ ++/* Thread to handle operations on the kbdbucket. */ ++static any_t ++repeater_translator_function (void *arg) ++{ ++ ports_manage_port_operations_one_thread (kbdbucket, kdioctl_demuxer, 0); ++ return 0; ++} ++ ++ ++/* Set the repeater translator on the node PATH. */ ++error_t ++setrepeater (const char *path) ++{ ++ error_t err; ++ struct trivfs_control *control; ++ file_t node; ++ ++ kbdbucket = ports_create_bucket (); ++ ++ node = file_name_lookup (path, O_CREAT|O_NOTRANS, 0664); ++ if (node == MACH_PORT_NULL) ++ return errno; ++ ++ err = trivfs_create_control (node, 0, kbdbucket, 0, kbdbucket, &control); ++ if (! err) ++ { ++ mach_port_t right = ports_get_send_right (control); ++ err = file_set_translator (node, 0, FS_TRANS_EXCL | FS_TRANS_SET, 0, 0, 0, ++ right, MACH_MSG_TYPE_COPY_SEND); ++ mach_port_deallocate (mach_task_self (), right); ++ } ++ else ++ return err; ++ ++ mutex_init (&global_lock); ++ ++ condition_init (&kbdbuf.readcond); ++ condition_init (&kbdbuf.writecond); ++ ++ condition_init (&select_alert); ++ condition_implies (&kbdbuf.readcond, &select_alert); ++ ++ cthread_detach (cthread_fork (repeater_translator_function, 0)); ++ ++ return 0; ++} ++ ++ ++/* Just act like the Mach kbd device. */ ++int trivfs_fstype = FSTYPE_DEV; ++int trivfs_fsid = 0; ++ ++int trivfs_allow_open = O_READ; ++ ++int trivfs_support_read = 1; ++int trivfs_support_write = 0; ++int trivfs_support_exec = 0; ++ ++error_t ++trivfs_S_io_select (struct trivfs_protid *cred, mach_port_t reply, ++ mach_msg_type_name_t reply_type, int *type) ++{ ++ int available = 0; ++ ++ if (!cred) ++ return EOPNOTSUPP; ++ ++ if (*type & ~SELECT_READ) ++ return EINVAL; ++ ++ if (*type == 0) ++ return 0; ++ ++ available = 0; ++ ++ mutex_lock (&global_lock); ++ while (1) ++ { ++ if (available && kbdbuf.size > 0) ++ { ++ *type = SELECT_READ; ++ mutex_unlock (&global_lock); ++ ++ return 0; ++ } ++ ++ if (cred->po->openmodes & O_NONBLOCK) ++ { ++ mutex_unlock (&global_lock); ++ ++ return EWOULDBLOCK; ++ } ++ ++ ports_interrupt_self_on_port_death (cred, reply); ++ if (hurd_condition_wait (&select_alert, &global_lock)) ++ { ++ *type = 0; ++ mutex_unlock (&global_lock); ++ ++ return EINTR; ++ } ++ } ++} ++ ++ ++void ++trivfs_modify_stat (struct trivfs_protid *cred, io_statbuf_t *st) ++{ ++ /* Mark the node as a read-only plain file. */ ++ st->st_mode &= ~(S_IFMT); ++ st->st_mode |= (S_IRUSR | S_IFCHR); ++ ++ st->st_size = 0; ++ st->st_blocks = 0; ++ ++} ++ ++ ++/* No one wants this. Use the console client to terminate the console ++ client or send a signal. */ ++error_t ++trivfs_goaway (struct trivfs_control *cntl, int flags) ++{ ++ return EOPNOTSUPP; ++} ++ ++ ++static error_t ++open_hook (struct trivfs_peropen *peropen) ++{ ++ /* Make sure the console does not access the hardware anymore. */ ++ if (! kbd_repeater_opened) ++ console_switch_away (); ++ kbd_repeater_opened++; ++ ++ return 0; ++} ++ ++ ++static void ++close_hook (struct trivfs_peropen *peropen) ++{ ++ kbd_repeater_opened--; ++ ++ /* Allow the console to access the hardware again. */ ++ if (! kbd_repeater_opened) ++ { ++ console_switch_back (); ++ kbdbuf.pos = 0; ++ kbdbuf.size = 0; ++ ++ } ++} ++ ++ ++/* Read data from an IO object. If offset is -1, read from the object ++ maintained file pointer. If the object is not seekable, offset is ++ ignored. The amount desired to be read is in AMOUNT. */ ++error_t ++trivfs_S_io_read (struct trivfs_protid *cred, ++ mach_port_t reply, mach_msg_type_name_t reply_type, ++ char **data, mach_msg_type_number_t *data_len, ++ loff_t offs, mach_msg_type_number_t amount) ++{ ++ /* Deny access if they have bad credentials. */ ++ if (! cred) ++ return EOPNOTSUPP; ++ else if (! (cred->po->openmodes & O_READ)) ++ return EBADF; ++ ++ ++ mutex_lock (&global_lock); ++ while (amount > kbdbuf.size) ++ { ++ if (cred->po->openmodes & O_NONBLOCK && amount > kbdbuf.size) ++ { ++ mutex_unlock (&global_lock); ++ return EWOULDBLOCK; ++ } ++ ++ if (hurd_condition_wait (&kbdbuf.readcond, &global_lock)) ++ { ++ mutex_unlock (&global_lock); ++ return EINTR; ++ } ++ } ++ ++ if (amount > 0) ++ { ++ char *keydata; ++ unsigned int i = 0; ++ ++ /* Allocate a buffer when this is required. */ ++ if (*data_len < amount) ++ { ++ *data = mmap (0, amount, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); ++ if (*data == MAP_FAILED) ++ { ++ mutex_unlock (&global_lock); ++ return ENOMEM; ++ } ++ } ++ ++ /* Copy the bytes to the user's buffer and remove them from the ++ keyboard buffer. */ ++ keydata = *data; ++ while (i != amount) ++ { ++ keydata[i++] = kbdbuf.keybuffer[kbdbuf.pos++]; ++ kbdbuf.pos = KBDBUF_POS (kbdbuf.pos); ++ } ++ kbdbuf.size -= amount; ++ condition_broadcast (&kbdbuf.writecond); ++ } ++ ++ *data_len = amount; ++ mutex_unlock (&global_lock); ++ ++ return 0; ++} ++ ++ ++/* Change current read/write offset */ ++error_t ++trivfs_S_io_seek (struct trivfs_protid *cred, ++ mach_port_t reply, mach_msg_type_name_t reply_type, ++ off_t offs, int whence, off_t *new_offs) ++{ ++ if (!cred) ++ return EOPNOTSUPP; ++ else ++ return ESPIPE; ++} ++ ++ ++/* If this variable is set, it is called every time a new peropen ++ structure is created and initialized. */ ++error_t (*trivfs_peropen_create_hook)(struct trivfs_peropen *) = open_hook; ++ ++/* If this variable is set, it is called every time a peropen structure ++ is about to be destroyed. */ ++void (*trivfs_peropen_destroy_hook) (struct trivfs_peropen *) = close_hook; ++ ++ ++/* Some RPC calls for controlling the keyboard. These calls are just ++ ignored and just exist to make XFree happy. */ ++ ++kern_return_t ++S_kdioctl_kdskbdmode (io_t port, int mode) ++{ ++ return 0; ++} ++ ++ ++kern_return_t ++S_kdioctl_kdgkbdmode (io_t port, int *mode) ++{ ++ return 0; ++} +diff -upN ../../console-client/pc-kbd.c ./pc-kbd.c +--- ../../console-client/pc-kbd.c 2004-02-02 22:25:10.000000000 +0100 ++++ console-client/pc-kbd.c 2004-03-28 11:35:46.000000000 +0200 +@@ -23,6 +23,7 @@ + #include <string.h> + #include <iconv.h> + #include <sys/mman.h> ++#include <argp.h> + + #include <device/device.h> + #include <cthreads.h> +@@ -31,6 +32,7 @@ + #include <hurd/cons.h> + + #include "driver.h" ++#include "inputdev.h" + + + /* The keyboard device in the kernel. */ +@@ -52,6 +54,10 @@ int gnumach_v1_compat; + /* Forward declaration. */ + static struct input_ops pc_kbd_ops; + ++ ++/* The node on which the repeater translator is set. */ ++static char *repeater_node; ++ + + /* A list of scan codes generated by the keyboard, in the set 2 encoding. */ + enum scancode +@@ -558,87 +564,6 @@ enum scancode sc_set1_to_set2_x1[] = + SC_X1_DEL + }; + +- +-/* This gross stuff is cut & pasted from Mach sources, as Mach doesn't +- export the interface we are using here. */ +- +-/* +- * Mach Operating System +- * Copyright (c) 1991,1990,1989 Carnegie Mellon University +- * All Rights Reserved. +- * +- * Permission to use, copy, modify and distribute this software and its +- * documentation is hereby granted, provided that both the copyright +- * notice and this permission notice appear in all copies of the +- * software, derivative works or modified versions, and any portions +- * thereof, and that both notices appear in supporting documentation. +- * +- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" +- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR +- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. +- * +- * Carnegie Mellon requests users of this software to return to +- * +- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU +- * School of Computer Science +- * Carnegie Mellon University +- * Pittsburgh PA 15213-3890 +- * +- * any improvements or extensions that they make and grant Carnegie Mellon +- * the rights to redistribute these changes. +- */ +- +-typedef u_short kev_type; /* kd event type */ +- +-/* (used for event records) */ +-struct mouse_motion { +- short mm_deltaX; /* units? */ +- short mm_deltaY; +-}; +-typedef u_char Scancode; +- +-typedef struct { +- kev_type type; /* see below */ +- struct timeval time; /* timestamp */ +- union { /* value associated with event */ +- boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */ +- Scancode sc; /* KEYBD_EVENT */ +- struct mouse_motion mmotion; /* MOUSE_MOTION */ +- } value; +-} kd_event; +-#define m_deltaX mmotion.mm_deltaX +-#define m_deltaY mmotion.mm_deltaY +- +-/* +- * kd_event ID's. +- */ +-#define MOUSE_LEFT 1 /* mouse left button up/down */ +-#define MOUSE_MIDDLE 2 +-#define MOUSE_RIGHT 3 +-#define MOUSE_MOTION 4 /* mouse motion */ +-#define KEYBD_EVENT 5 /* key up/down */ +- +- +-#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ +-#define IOC_OUT 0x40000000 /* copy out parameters */ +-#define IOC_IN 0x80000000U /* copy in parameters */ +-#define _IOC(inout,group,num,len) \ +- (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) +-#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t)) +-#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t)) +- +-#define KDSKBDMODE _IOW('K', 1, int) /* set keyboard mode */ +-#define KB_EVENT 1 +-#define KB_ASCII 2 +- +-#define KDGKBDTYPE _IOR('K', 2, int) /* get keyboard type */ +-#define KB_VANILLAKB 0 +- +-#define KDSETLEDS _IOW('K', 5, int) /* set keyboard leds */ +- +- +-/* End of Mach code. */ +- + static enum scancode + gnumach_v1_input_next () + { +@@ -658,6 +583,13 @@ gnumach_v1_input_next () + terminate. */ + if (err) + return 0; ++ ++ if (kbd_repeater_opened && data_buf.type == KEYBD_EVENT) ++ { ++ repeat_key (&data_buf); ++ data_buf.type = 0; ++ continue; ++ } + } + while (data_buf.type != KEYBD_EVENT); + +@@ -1088,10 +1020,56 @@ input_loop (any_t unused) + + + ++ ++ ++static const char doc[] = "PC Keyboard Driver"; ++ ++static const struct argp_option options[] = ++ { ++ {"repeat", 'r', "NODE", 0, "Set a repeater translator on NODE"}, ++ { 0 } ++ }; ++ ++static error_t ++parse_opt (int key, char *arg, struct argp_state *state) ++{ ++ int *pos = (int *) state->input; ++ ++ switch (key) ++ { ++ case 'r': ++ repeater_node = arg; ++ break; ++ ++ case ARGP_KEY_END: ++ break; ++ ++ default: ++ return ARGP_ERR_UNKNOWN; ++ } ++ ++ *pos = state->next; ++ return 0; ++} ++ ++static struct argp argp = {options, parse_opt, 0, doc}; ++ + /* Initialize the PC keyboard driver. */ + static error_t + pc_kbd_init (void **handle, int no_exit, int argc, char *argv[], int *next) + { ++ error_t err; ++ int pos = 1; ++ ++ /* Parse the arguments. */ ++ err = argp_parse (&argp, argc, argv, ARGP_IN_ORDER | ARGP_NO_EXIT ++ | ARGP_SILENT, 0 , &pos); ++ *next += pos - 1; ++ ++ if (err && err != EINVAL) ++ return err; ++ ++ + return 0; + } + +@@ -1156,6 +1134,10 @@ pc_kbd_start (void *handle) + iconv_close (cd); + return err; + } ++ ++ if (repeater_node) ++ setrepeater (repeater_node); ++ + cthread_detach (cthread_fork (input_loop, NULL)); + + return 0; diff --git a/debian/patches/exec.patch b/debian/patches/exec.patch new file mode 100644 index 00000000..9155e288 --- /dev/null +++ b/debian/patches/exec.patch @@ -0,0 +1,14 @@ +--- hurd-20040301.orig/exec/exec.c ++++ hurd-20040301/exec/exec.c +@@ -39,6 +39,11 @@ + #include <sys/stat.h> + #include <sys/param.h> + #include <unistd.h> ++#include <elf.h> ++ ++#ifndef PT_GNU_STACK ++#define PT_GNU_STACK 0x6474e551 ++#endif + + mach_port_t procserver; /* Our proc port. */ + diff --git a/debian/patches/mouse.patch b/debian/patches/mouse.patch new file mode 100644 index 00000000..76e73500 --- /dev/null +++ b/debian/patches/mouse.patch @@ -0,0 +1,485 @@ +--- hurd-20040301.orig/hurd/subsystems ++++ hurd-20040301/hurd/subsystems +@@ -37,6 +37,7 @@ + pfinet 37000 Internet configuration calls + password 38000 Password checker + <ioctl space> 100000- First subsystem of ioctl class 'f' (lowest class) ++kdioctl 120000 Ioctl class 'k' (kd) + tioctl 156000 Ioctl class 't' (terminals) + tioctl 156200 (continued) + <ioctl space> 164200 Last subsystem of ioctl class 'v' (highest class) +--- hurd-20040301.orig/hurd/kdioctl.defs ++++ hurd-20040301/hurd/kdioctl.defs +@@ -0,0 +1,39 @@ ++/* Definitions for kd ioctls ++ Copyright (C) 1991, 1993, 1994, 1995, 1996, 1998 Free Software Foundation, Inc. ++ ++This file is part of the GNU Hurd. ++ ++The GNU Hurd is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++The GNU Hurd 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 the GNU Hurd; see the file COPYING. If not, write to ++the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#include <hurd/hurd_types.defs> ++ ++/* Ioctl class `k'; the subsystem is derived from calculations in ++ <ioctls.h>. */ ++subsystem kdioctl 120000; ++ ++import <hurd/ioctl_types.h>; ++ ++skip; /* 0 unused */ ++ ++/* 1 KDSKBDMODE */ ++routine kdioctl_kdskbdmode ( ++ port: io_t; ++ in mode: int); ++/* 2 KDGKBDMODE */ ++routine kdioctl_kdgkbdmode ( ++ port: io_t; ++ out mode: int); ++ ++/* 3 - 256 unused */ +--- hurd-20040301.orig/trans/kd.h ++++ hurd-20040301/trans/kd.h +@@ -0,0 +1,72 @@ ++ ++/* ++ * Format definitions for 'ioctl' commands in device definitions. ++ * ++ * From BSD4.4. ++ */ ++/* ++ * Ioctl's have the command encoded in the lower word, and the size of ++ * any in or out parameters in the upper word. The high 3 bits of the ++ * upper word are used to encode the in/out status of the parameter. ++ */ ++#define MACH_IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ ++#define MACH_IOC_VOID 0x20000000 /* no parameters */ ++#define MACH_IOC_OUT 0x40000000 /* copy out parameters */ ++#define MACH_IOC_IN 0x80000000U /* copy in parameters */ ++#define MACH_IOC_INOUT (MACH_IOC_IN|MACH_IOC_OUT) ++ ++#define _MACH_IOC(inout,group,num,len) \ ++ (inout | ((len & MACH_IOCPARM_MASK) << 16) | ((group) << 8) | (num)) ++#define _MACH_IO(g,n) _MACH_IOC(MACH_IOC_VOID, (g), (n), 0) ++#define _MACH_IOR(g,n,t) _MACH_IOC(MACH_IOC_OUT, (g), (n), sizeof(t)) ++#define _MACH_IOW(g,n,t) _MACH_IOC(MACH_IOC_IN, (g), (n), sizeof(t)) ++#define _MACH_IOWR(g,n,t) _MACH_IOC(MACH_IOC_INOUT, (g), (n), sizeof(t)) ++ ++/* taken from gnumach-1.1.3/i386/i386at/kd.h */ ++ ++#define KDSKBDMODE _MACH_IOW('K', 1, int) /* set keyboard mode */ ++#define KB_EVENT 1 ++#define KB_ASCII 2 ++ ++#define KDGKBDTYPE _MACH_IOR('K', 2, int) /* get keyboard type */ ++ ++typedef unsigned short kev_type; /* kd event type */ ++typedef unsigned char Scancode; ++/* (used for event records) */ ++struct mouse_motion { ++ short mm_deltaX; /* units? */ ++ short mm_deltaY; ++}; ++ ++typedef struct { ++ kev_type type; /* see below */ ++ struct timeval time; /* timestamp */ ++ union { /* value associated with event */ ++ boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */ ++ Scancode sc; /* KEYBD_EVENT */ ++ struct mouse_motion mmotion; /* MOUSE_MOTION */ ++ } value; ++} kd_event; ++ ++ ++/* ++ * kd_event ID's. ++ */ ++#define MOUSE_LEFT 1 /* mouse left button up/down */ ++#define MOUSE_MIDDLE 2 ++#define MOUSE_RIGHT 3 ++#define MOUSE_MOTION 4 /* mouse motion */ ++#define KEYBD_EVENT 5 /* key up/down */ ++ ++/* ++ * Low 3 bits of minor are the com port #. ++ * The high 5 bits of minor are the mouse type ++ */ ++#define MOUSE_SYSTEM_MOUSE 0 ++#define MICROSOFT_MOUSE 1 ++#define IBM_MOUSE 2 ++#define NO_MOUSE 3 ++#define LOGITECH_TRACKMAN 4 ++#define MICROSOFT_MOUSE7 5 ++ ++ +--- hurd-20040301.orig/trans/Makefile ++++ hurd-20040301/trans/Makefile +@@ -19,13 +19,15 @@ + makemode := servers + + targets = symlink firmlink ifsock magic null fifo new-fifo fwd crash \ +- password hello hello-mt streamio fakeroot proxy-defpager ++ password hello hello-mt streamio fakeroot proxy-defpager \ ++ mouse + SRCS = ifsock.c symlink.c magic.c null.c fifo.c new-fifo.c fwd.c \ + crash.c firmlink.c password.c hello.c hello-mt.c streamio.c \ +- fakeroot.c proxy-defpager.c ++ fakeroot.c proxy-defpager.c mouse.c + OBJS = $(SRCS:.c=.o) fsysServer.o ifsockServer.o passwordServer.o \ + crashServer.o crash_replyUser.o msgServer.o \ + default_pagerServer.o default_pagerUser.o \ ++ kdioctlServer.o \ + device_replyServer.o elfcore.o + HURDLIBS = threads ports trivfs fshelp pipe ihash shouldbeinlibc + password-LDLIBS = $(LIBCRYPT) +@@ -40,6 +42,7 @@ + + symlink: fsysServer.o + ifsock: ifsockServer.o ++kbd: kdioctlServer.o + crash: crashServer.o crash_replyUser.o msgServer.o elfcore.o + password: passwordServer.o + streamio: device_replyServer.o +@@ -48,7 +51,7 @@ + proxy-defpager crash password streamio: ../libthreads/libthreads.a ../libports/libports.a ../libtrivfs/libtrivfs.a ../libthreads/libthreads.a ../libfshelp/libfshelp.a + fifo new-fifo: ../libpipe/libpipe.a + fwd: ../libfshelp/libfshelp.a ../libports/libports.a +-hello-mt magic null ifsock fifo new-fifo firmlink: ../libtrivfs/libtrivfs.a ../libfshelp/libfshelp.a ../libthreads/libthreads.a ../libports/libports.a ../libihash/libihash.a ++mouse hello-mt magic null ifsock fifo new-fifo firmlink: ../libtrivfs/libtrivfs.a ../libfshelp/libfshelp.a ../libthreads/libthreads.a ../libports/libports.a ../libihash/libihash.a + hello: ../libtrivfs/libtrivfs.a ../libfshelp/libfshelp.a ../libports/libports.a ../libihash/libihash.a + fakeroot: ../libnetfs/libnetfs.a ../libfshelp/libfshelp.a ../libiohelp/libiohelp.a ../libthreads/libthreads.a ../libports/libports.a ../libihash/libihash.a + $(targets): ../libshouldbeinlibc/libshouldbeinlibc.a +--- hurd-20040301.orig/trans/mouse.c ++++ hurd-20040301/trans/mouse.c +@@ -0,0 +1,318 @@ ++/* A translator for mouse. ++ ++ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. ++ ++ Written by UCHIYAMA Yasushi <uch@nop.or.jp> ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2, or (at ++ your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#include <hurd.h> ++#include <hurd/ports.h> ++#include <hurd/trivfs.h> ++#include <hurd/fsys.h> ++#include <version.h> ++ ++#include <stdio.h> ++#include <unistd.h> ++#include <error.h> ++#include <string.h> ++#include <fcntl.h> ++#include <limits.h> ++#include <argp.h> ++ ++const char *argp_program_version = STANDARD_HURD_VERSION (mouse); ++ ++#include <device/device.h> ++#include "kd.h" ++ ++static char *arg_mouse_protocol,*arg_mouse_device; ++static char mouse_device_name[16]; ++ ++#define MOUSE_BUF_SIZE 64 ++static struct mouse_buffer ++{ ++ mach_port_t port; ++ struct mutex lock; ++ struct condition fill; ++ struct condition notfull; ++ kd_event buf[MOUSE_BUF_SIZE]; ++ int cnt; ++ int in; ++ int out; ++} mouse; ++ ++/* mouse options. Used for startup */ ++static const struct argp_option options[] = ++{ ++ {"protocol", 'p' ,"PROTOCOL", 0, "mouse PROTOCOL(ps/2,microsoft etc..."}, ++ {"device", 'd' ,"DEVICE" , 0, "mouse DEVICE (com0,com1,none)"}, ++ {0,0} ++}; ++ ++static error_t ++parse_opt (int key, char *arg, struct argp_state *state) ++{ ++ switch (key) ++ { ++ case 'p': arg_mouse_protocol = arg ; break; ++ case 'd': arg_mouse_device = arg ; break; ++ default: ++ return ARGP_ERR_UNKNOWN; ++ } ++ return 0; ++} ++ ++static int ++set_mouse_device_name() ++{ ++ /* See gnumach/i386/i386at/kd_mouse.c */ ++ struct { ++ int type; ++ char *name; ++ } mouse_tab[] = { ++ { MOUSE_SYSTEM_MOUSE, "mousesystem"}, ++ { MICROSOFT_MOUSE, "microsoft" }, ++ { IBM_MOUSE, "ps/2" }, ++ { NO_MOUSE, "nomouse" }, ++ { LOGITECH_TRACKMAN, "logitech" }, ++ { MICROSOFT_MOUSE7, "mouse7" }, ++ }; ++ int i,n = sizeof mouse_tab / sizeof (mouse_tab[0]); ++ for (i = 0; i < n; i++) ++ if (!strcmp (mouse_tab[i].name, arg_mouse_protocol)) ++ { ++ int type, unit, device_minor; ++ type = mouse_tab[i].type; ++ if (arg_mouse_device && !strcmp (arg_mouse_device, "com1")) ++ unit = 1; ++ else ++ unit = 0; ++ device_minor = 0; ++ device_minor |= (type<<3); ++ device_minor |= unit; ++ device_minor = device_minor % 100; ++ ++ sprintf (mouse_device_name, "mouse%d", device_minor); ++ return 1; ++ } ++ return 0; ++} ++ ++int ++main (int argc, char **argv) ++{ ++ error_t err; ++ mach_port_t bootstrap; ++ struct trivfs_control *fsys; ++ ++ const struct argp argp = { options , parse_opt }; ++ ++ if(argp_parse (&argp, argc, argv, 0, 0, 0) ) ++ error(1, 0, "argp_parse failed."); ++ ++ set_mouse_device_name(); ++ ++ task_get_bootstrap_port (mach_task_self (), &bootstrap); ++ if (bootstrap == MACH_PORT_NULL) ++ error(1, 0, "Must be started as a translator"); ++ ++ /* Reply to our parent */ ++ err = trivfs_startup (bootstrap, 0, 0, 0, 0, 0, &fsys); ++ if (err) ++ error(3, err, "Contacting parent"); ++ /* Launch. */ ++ mutex_init (&mouse.lock); ++ ports_manage_port_operations_multithread (fsys->pi.bucket,trivfs_demuxer, 2 * 60 * 1000, 0, 0); ++ ++ exit(0); ++} ++ ++static any_t ++mouse_thread (any_t arg) ++{ ++ for(;;) ++ { ++ kd_event *event; ++ vm_offset_t buf; ++ mach_msg_type_number_t buf_size; ++ int ncopy; ++ kern_return_t err; ++ ++ err = device_read (mouse.port, 0, 0, sizeof (kd_event), (char **)&buf, &buf_size); ++ if (err) ++ return err; ++ ++ mutex_lock (&mouse.lock); ++ while (mouse.cnt == MOUSE_BUF_SIZE) ++ condition_wait (&mouse.notfull, &mouse.lock); ++ ncopy = buf_size / sizeof (kd_event); ++ if (MOUSE_BUF_SIZE - mouse.cnt < ncopy ) ++ ncopy = MOUSE_BUF_SIZE - mouse.cnt; ++ event = (kd_event*)buf; ++ while (ncopy--) ++ { ++ mouse.buf[mouse.in] = *event++; ++ mouse.in = (mouse.in + 1) % MOUSE_BUF_SIZE; ++ mouse.cnt++; ++ } ++ vm_deallocate (mach_task_self(), buf, buf_size); ++ condition_broadcast (&mouse.fill); ++ mutex_unlock (&mouse.lock); ++ } ++} ++ ++static error_t ++open_hook (struct trivfs_peropen *po) ++{ ++ kern_return_t err = 0; ++ mach_port_t master; ++ mutex_lock (&mouse.lock); ++ if (po->openmodes & O_READ) ++ { ++ if( mouse.port ) ++ return EBUSY; ++ err = get_privileged_ports( NULL, &master ); ++ if( err ) ++ return err; ++ err = device_open (master, D_READ, mouse_device_name, &mouse.port); ++ mach_port_deallocate (mach_task_self(), master); ++ } ++ mouse.cnt = 0; ++ cthread_detach (cthread_fork (mouse_thread, 0)); ++ mutex_unlock (&mouse.lock); ++ return err; ++} ++ ++static void ++close_hook (struct trivfs_peropen *po) ++{ ++ device_close (mouse.port); ++ mouse.port = (mach_port_t)NULL; ++} ++ ++/* Trivfs hooks */ ++ ++error_t (*trivfs_peropen_create_hook) (struct trivfs_peropen *) = open_hook; ++void (*trivfs_peropen_destroy_hook) (struct trivfs_peropen *) = close_hook; ++ ++int trivfs_fstype = FSTYPE_DEV; ++int trivfs_fsid = 0; ++ ++int trivfs_support_read = 1; ++int trivfs_support_write = 0; ++int trivfs_support_exec = 0; ++ ++int trivfs_allow_open = O_READ | O_WRITE; ++ ++void ++trivfs_modify_stat (struct trivfs_protid *cred, struct stat *st) ++{ ++ st->st_blksize = vm_page_size * 256; /* Make transfers LARRRRRGE */ ++ ++ st->st_size = 0; ++ st->st_blocks = 0; ++ ++ st->st_mode &= ~S_IFMT; ++ st->st_mode |= S_IFCHR; ++} ++ ++error_t ++trivfs_goaway (struct trivfs_control *fsys, int flags) ++{ ++ exit (0); ++} ++ ++/* Read data from an IO object. If offset if -1, read from the object ++ maintained file pointer. If the object is not seekable, offset is ++ ignored. The amount desired to be read is in AMT. */ ++kern_return_t ++trivfs_S_io_read(struct trivfs_protid *cred, ++ mach_port_t reply, mach_msg_type_name_t replytype, ++ data_t *data, ++ mach_msg_type_number_t *datalen, ++ loff_t offs, ++ vm_size_t amt) ++{ ++ int i,n; ++ if (!cred) ++ return EOPNOTSUPP; ++ else if (!(cred->po->openmodes & O_READ)) ++ return EBADF; ++ ++ mutex_lock (&mouse.lock); ++ while (!mouse.cnt) ++ { ++ if (cred->po->openmodes & O_NONBLOCK) ++ { ++ mutex_unlock (&mouse.lock); ++ return EWOULDBLOCK; ++ } ++ if (hurd_condition_wait (&mouse.fill, &mouse.lock)) ++ { ++ mutex_unlock (&mouse.lock); ++ return EINTR; ++ } ++ } ++ if ((n = amt / sizeof (kd_event)) > mouse.cnt) ++ n = mouse.cnt; ++ for (i = 0; i < n; i++) ++ { ++ (*(kd_event **)data)[i] = mouse.buf[mouse.out]; ++ mouse.out = (mouse.out + 1 ) % MOUSE_BUF_SIZE; ++ mouse.cnt--; ++ } ++ *datalen = n * sizeof (kd_event); ++ if (n) ++ condition_signal (&mouse.notfull); ++ mutex_unlock (&mouse.lock); ++ return 0; ++} ++ ++ ++/* SELECT_TYPE is the bitwise OR of SELECT_READ, SELECT_WRITE, and SELECT_URG. ++ Block until one of the indicated types of i/o can be done "quickly", and ++ return the types that are then available. ID_TAG is returned as passed; it ++ is just for the convenience of the user in matching up reply messages with ++ specific requests sent. */ ++ ++kern_return_t ++trivfs_S_io_select (struct trivfs_protid *cred, ++ mach_port_t reply, mach_msg_type_name_t replytype, ++ int *type) ++{ ++ if (!cred) ++ return EOPNOTSUPP; ++ if(*type & ~SELECT_READ ) ++ return EINVAL; ++ ++ mutex_lock (&mouse.lock); ++ while (1) ++ { ++ if (mouse.cnt) ++ { ++ *type = SELECT_READ; ++ mutex_unlock (&mouse.lock); ++ return 0; ++ } ++ ports_interrupt_self_on_port_death (cred, reply); ++ if (hurd_condition_wait (&mouse.fill, &mouse.lock)) ++ { ++ *type = 0; ++ mutex_unlock (&mouse.lock); ++ return EINTR; ++ } ++ } ++} ++ diff --git a/debian/patches/no-debian-dir.patch b/debian/patches/no-debian-dir.patch new file mode 100644 index 00000000..7a342bbe --- /dev/null +++ b/debian/patches/no-debian-dir.patch @@ -0,0 +1,11 @@ +--- Makefile.bak 2004-05-09 17:03:38.000000000 -0400 ++++ Makefile 2004-05-09 17:04:22.000000000 -0400 +@@ -43,7 +43,7 @@ + benchmarks fstests + + # Other directories +-other-subdirs = hurd doc config release include debian ++other-subdirs = hurd doc config release include + + # All the subdirectories together + subdirs = $(lib-subdirs) $(prog-subdirs) $(other-subdirs) diff --git a/debian/patches/ttys.patch b/debian/patches/ttys.patch new file mode 100644 index 00000000..87e29519 --- /dev/null +++ b/debian/patches/ttys.patch @@ -0,0 +1,13 @@ +--- hurd-20040301.orig/config/ttys ++++ hurd-20040301/config/ttys +@@ -5,4 +5,10 @@ + # name program type status comments + + console "/libexec/getty 9600" mach-color on secure trusted console ++tty1 "/libexec/getty 38400" hurd on secure trusted console ++tty2 "/libexec/getty 38400" hurd on secure trusted console ++tty3 "/libexec/getty 38400" hurd on secure trusted console ++tty4 "/libexec/getty 38400" hurd on secure trusted console ++tty5 "/libexec/getty 38400" hurd on secure trusted console ++tty6 "/libexec/getty 38400" hurd on secure trusted console + #com0 "/libexec/getty 9600" dialup on secure |