Here is a patch enable setting DC_RAW via a device_set_status on the
console device. While doing this code, I found that devio.c in
hurd/daemons calls this function with the TTY_* flavors, hence their
inclusion here.
No changelog yet, as I am not sure how done I am. I'll continue
working on that user-space console Marcus was talking about.
Invocation:
mach_port_t master;
kern_return_t err;
mach_port_t console;
err = get_privileged_ports(NULL, &master);
if (err)
return err;
err = device_open(master, D_READ, "console", &console);
if (err)
return err;
mach_port_deallocate(mach_task_self(), master);
err = device_set_status(console, DC_RAW, 0, 0);
if (err)
return err;
/* console stuff here */
err = device_set_status(console, DC_NO_ONLCR, 0, 0);
if (err)
return err;
Thanks,
Kevin
--
Kevin Kreamer
FsckIt on openprojects.net
Index: oskit/ds_asyncio.c
===================================================================
RCS file: /cvsroot/hurd/gnumach/oskit/Attic/ds_asyncio.c,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 ds_asyncio.c
--- oskit/ds_asyncio.c 1999/11/25 23:26:46 1.1.2.1
+++ oskit/ds_asyncio.c 2001/10/18 16:35:51
@@ -377,6 +377,44 @@ ds_asyncio_write_inband (device_t dev, i
return err ?: MIG_NO_REPLY;
}
+/* Kludge just for console. */
+#include <device/tty_status.h> /* TTY_* */
+#include <oskit/machine/pc/direct_cons.h> /* direct_cons_set_flags, DC_* */
+
+io_return_t
+ds_asyncio_set_status(device_t dev, dev_flavor_t flavor,
+ dev_status_t status, mach_msg_type_number_t status_count)
+{
+ /* Ensure that they are asking about the console. */
+ if ((void *) dev->com_device != ds_console_stream)
+ return D_INVALID_OPERATION;
+
+ switch (flavor)
+ {
+ /* Flavors defined in direct_cons.h */
+ case DC_RAW:
+ case DC_NONBLOCK:
+ case DC_NO_ONLCR:
+ direct_cons_set_flags((int) flavor);
+ return D_SUCCESS;
+
+ /* All of the rest are not yet implemented, but some are called,
+ hence they fall-through here. */
+
+ /* Flavors defined in tty_status.h */
+ case TTY_STATUS:
+ case TTY_MODEM:
+ case TTY_FLUSH:
+ case TTY_STOP:
+ case TTY_START:
+ case TTY_SET_BREAK:
+ case TTY_CLEAR_BREAK:
+ case TTY_SET_TRANSLATION:
+ default:
+ return D_INVALID_OPERATION;
+ }
+}
+
/* Kludge just for kmsg. */
void
ds_asyncio_close (device_t dev)
@@ -389,6 +427,7 @@ const struct device_ops asyncio_device_o
{
write_inband: ds_asyncio_write_inband,
read_inband: ds_asyncio_read_inband,
+ set_status: ds_asyncio_set_status,
close: ds_asyncio_close
};