Alfred M. Szmidt, le Sun 08 Jan 2006 18:14:15 +0100, a écrit : > Several things with this patch, generic-speaker.c is from what I know > non-arch dependant, so adding IA-32 seem to be wrong without taking > into account what system one is compiling things on. Also, much code > in the Hurd doesn't care what system one is running on, so adding > IA-32 specific code should be frowned upon.
Well, this patch uses the only i/o permission interface that gnumach1 provides. It is a temporary solution until some good-looking, arch-independant interface is defined (the urgency here is to get GNU/Hurd io-protected). > This patch is self explanatory if the previous IO device patches are > explained. Mmm, the "kd" device already existed. > And as always, please follow the GCS when formatting the code Ah, yes, fixed: cosnole-client/ChangeLog 2006-01-02 Samuel Thibault <[EMAIL PROTECTED]> * generic-speaker.c: include <mach.h>, <mach/i386/mach_i386.h> and <device/device.h> for IO ports access. (kd_port): New variable. (generic_speaker_start): Add IO ports access request for gnumach1. * vga-support.c: include <mach.h>, <mach/i386/mach_i386.h> and <device/device.h> for IO ports access. (kd_port): New variable. (vga_init): Add IO ports access request for gnumach1. (vga_fini): Add IO ports access relinquish for gnumach1. Index: console-client/generic-speaker.c =================================================================== RCS file: /cvsroot/hurd/hurd/console-client/generic-speaker.c,v retrieving revision 1.4 diff -u -u -r1.4 generic-speaker.c --- console-client/generic-speaker.c 21 Mar 2004 19:57:00 -0000 1.4 +++ console-client/generic-speaker.c 2 Jan 2006 22:47:54 -0000 @@ -25,6 +25,10 @@ #include <cthreads.h> +#include <mach.h> +#include <mach/i386/mach_i386.h> +#include <device/device.h> + #include "driver.h" #include "timer.h" @@ -40,6 +44,9 @@ static struct bell_ops generic_speaker_ops; +/* Port for i/o access. */ +static mach_port_t kd_port; + /* The speaker port. */ #define SPEAKER 0x61 @@ -477,6 +484,18 @@ return errno; if (ioperm (PIT_COUNTER_2, PIT_CTRL - PIT_COUNTER_2 + 1, 1) < 0) return errno; +#else + mach_port_t priv; + err = get_privileged_ports (NULL, &priv); + if (err) + return err; + err = device_open (priv, D_READ|D_WRITE, "kd", &kd_port); + mach_port_deallocate (mach_task_self (), priv); + if (err) + return err; + err = i386_io_port_add (mach_thread_self (), kd_port); + if (err) + return err; #endif beep_off (); Index: console-client/vga-support.c =================================================================== RCS file: /cvsroot/hurd/hurd/console-client/vga-support.c,v retrieving revision 1.4 diff -u -u -r1.4 vga-support.c --- console-client/vga-support.c 18 Nov 2002 07:35:47 -0000 1.4 +++ console-client/vga-support.c 2 Jan 2006 22:47:54 -0000 @@ -27,10 +27,17 @@ #include <sys/types.h> #include <string.h> +#include <mach.h> +#include <mach/i386/mach_i386.h> +#include <device/device.h> + #include "vga-hw.h" #include "vga-support.h" +/* Port for i/o access. */ +static mach_port_t kd_port; + /* The base of the video memory mapping. */ char *vga_videomem; @@ -78,6 +85,7 @@ error_t err; int fd; +#ifdef OSKIT_MACH /* Acquire I/O port access. */ if (ioperm (VGA_MIN_REG, VGA_MAX_REG - VGA_MIN_REG + 1, 1) < 0) { @@ -90,6 +98,19 @@ return errno; } } +#else + mach_port_t priv; + err = get_privileged_ports (NULL, &priv); + if (err) + return err; + err = device_open (priv, D_READ|D_WRITE, "kd", &kd_port); + mach_port_deallocate (mach_task_self (), priv); + if (err) + return err; + err = i386_io_port_add (mach_thread_self (), kd_port); + if (err) + return err; +#endif fd = open ("/dev/mem", O_RDWR); if (fd >= 0) @@ -229,7 +250,12 @@ outb (VGA_CRT_CURSOR_LOW, VGA_CRT_ADDR_REG); outb (vga_state->crt_cursor_low, VGA_CRT_DATA_REG); - ioperm (VGA_MIN_REG, VGA_MAX_REG, 0); +#ifdef OSKIT_MACH + ioperm (VGA_MIN_REG, VGA_MAX_REG - VGA_MIN_REG + 1, 0); +#else + i386_io_port_remove (mach_thread_self (), kd_port); + mach_port_deallocate (mach_task_self (), kd_port); +#endif munmap (vga_videomem, VGA_VIDEO_MEM_LENGTH); } _______________________________________________ Bug-hurd mailing list Bug-hurd@gnu.org http://lists.gnu.org/mailman/listinfo/bug-hurd