summaryrefslogtreecommitdiff
path: root/debian/patches/console_ioperms.patch
blob: feb6528ca8f9f5285143dd3b01fad8d154f223bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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);
 }