bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hurd, support new device "io"


From: Alfred M. Szmidt
Subject: hurd, support new device "io"
Date: Sun, 08 Jan 2006 18:14:15 +0100

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.  This patch is self
explanatory if the previous IO device patches are explained.

And as always, please follow the GCS when formatting the code, and
ChangeLog; you missed it in quite a few places, though that is usually
ok when one only sends a single patch once a year, but people who
contribute lots of patches like youself can make our job just a tad
easier by following the coding standards we use.  Oh, and please try
to send one mail per patch, and not add them together into one big
thing that is hard to comment on.

Thank you for sending so many patches though! :-)

cosnole-client/ChangeLog
2006-01-02  Samuel Thibault  <samuel.thibault@ens-lyon.org>

        * 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);
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]