terminal: Add flounder interfaces for new terminal interface as well as static
authorRaphael Fuchs <fuchs.raphael@gmail.com>
Tue, 25 Jun 2013 20:47:50 +0000 (22:47 +0200)
committerRaphael Fuchs <fuchs.raphael@gmail.com>
Tue, 25 Jun 2013 20:47:50 +0000 (22:47 +0200)
          slot for session id.

if/Hakefile
if/terminal.if [new file with mode: 0644]
if/terminal_config.if [new file with mode: 0644]
if/terminal_session.if [new file with mode: 0644]
include/barrelfish/caddr.h
lib/barrelfish/capabilities.c

index 4ed70f3..86e314e 100644 (file)
@@ -1,10 +1,11 @@
 --------------------------------------------------------------------------
--- Copyright (c) 2007-2011, ETH Zurich.
+-- Copyright (c) 2007-2012, ETH Zurich.
 -- All rights reserved.
 --
 -- This file is distributed under the terms in the attached LICENSE file.
 -- If you do not find this file, copies can be found by writing to:
--- ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+-- ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
+-- Attn: Systems Group.
 --
 -- Hakefile for if/
 --
@@ -49,6 +50,9 @@
                "skb_map",
                "octopus",               
                "spawn",
+               "terminal",
+               "terminal_config",
+               "terminal_session",
                "test",
                "timer",
                "trivfs",
@@ -61,8 +65,8 @@
                "xmplrpc",
                "xmplthc",
                "unixsock",
-              "bcache",
-              "replay" ],
+               "bcache",
+               "replay" ],
              arch <- allArchitectures
 ] ++
 
diff --git a/if/terminal.if b/if/terminal.if
new file mode 100644 (file)
index 0000000..daf6efb
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2012, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
+ * Attn: Systems Group.
+ */
+
+interface terminal "Unidirectional character stream." {
+
+    /**
+     * \brief Input or output of a character buffer.
+     *
+     * \param buffer Buffer holding characters.
+     * \param length Amount of characters in the buffer.
+     */
+    message characters(char buffer[length]);
+};
diff --git a/if/terminal_config.if b/if/terminal_config.if
new file mode 100644 (file)
index 0000000..df52095
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2012, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
+ * Attn: Systems Group.
+ */
+
+interface terminal_config "Terminal Configuration Interface" {
+    alias option uint32;
+
+    /**
+     * \brief Configure terminal device.
+     *
+     * \param opt Configuration option.
+     * \param argument Optional argument. Interpretation depends on opt.
+     */
+    message configuration(option opt, string argument);
+
+    /**
+     * \brief Signals that a client wants to teardown a connection.
+     *
+     * Flounder does not yet support proper teardown of connections. This
+     * message emulates this by informing the server, that the client wants to
+     * teardown a connection.
+     */
+    message disconnect();
+};
diff --git a/if/terminal_session.if b/if/terminal_session.if
new file mode 100644 (file)
index 0000000..103d0a0
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2012, ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
+ * Attn: Systems Group.
+ */
+
+interface terminal_session "Terminal Session Interface" {
+
+    /**
+     * \brief Associate a terminal with a session.
+     *
+     * \param session_id ID capability representing the session.
+     * \param in_iref    Interface reference to be used for incoming characters
+     *                   as seen by the terminal client.
+     * \param out_iref   Interface reference to be used for outgoing characters
+     *                   as seen by the terminal client.
+     * \param conf_iref  Interface reference to be used for configuration
+     *                   messages.
+     * \param err        SYS_ERR_OK if successful
+     *                   TERM_ERR_TERMINAL_IN_USE if terminal is already part
+     *                                            of another session
+     */
+    rpc session_associate_with_terminal(in cap session_id, out iref in_iref,
+                                        out iref out_iref, out iref conf_iref,
+                                        out errval err);
+};
index 04a6761..3d91036 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (c) 2007, 2008, 2009, 2010, ETH Zurich.
+ * Copyright (c) 2007, 2008, 2009, 2010, 2012, ETH Zurich.
  * All rights reserved.
  *
  * This file is distributed under the terms in the attached LICENSE file.
@@ -60,7 +60,7 @@ extern struct cnoderef cnode_root, cnode_task, cnode_base,
 
 /* well-known capabilities */
 extern struct capref cap_root, cap_monitorep, cap_irq, cap_io, cap_dispatcher,
-  cap_selfep, cap_kernel, cap_initep, cap_perfmon, cap_dispframe;
+  cap_selfep, cap_kernel, cap_initep, cap_perfmon, cap_dispframe, cap_sessionid;
 
 /**
  * \brief Returns the number of valid bits in the CSpace address of a cap
index f2ab35f..4243a2c 100644 (file)
@@ -138,6 +138,12 @@ struct capref cap_initep = {
     .slot  = TASKCN_SLOT_INITEP
 };
 
+/// Session ID
+struct capref cap_sessionid = {
+    .cnode = TASK_CNODE_INIT,
+    .slot = TASKCN_SLOT_SESSIONID
+};
+
 static inline bool backoff(int count)
 {
     // very crude exponential backoff based upon core id