IRQ: cap stubs
authorLukas Humbel <lukas.humbel@inf.ethz.ch>
Fri, 11 Mar 2016 09:43:09 +0000 (10:43 +0100)
committerLukas Humbel <lukas.humbel@inf.ethz.ch>
Wed, 6 Apr 2016 08:36:11 +0000 (10:36 +0200)
Signed-off-by: Lukas Humbel <lukas.humbel@inf.ethz.ch>

capabilities/caps.hl
include/barrelfish_kpi/capabilities.h
include/barrelfish_kpi/distcaps.h
kernel/arch/x86_64/syscall.c
kernel/capabilities.c
lib/barrelfish/debug.c

index ce30d0c..6ad3cc1 100644 (file)
@@ -388,6 +388,12 @@ cap IRQTable is_always_copy {
     **/
 };
 
+cap IRQ {
+       /* IRQ capability. Represents an interrupt line at an interrupt controller. */
+       eq uint64 line;
+       eq uint64 controller;
+};
+
 cap IO {
     /* Legacy IO capability */
     eq uint16 start;
index 25f068e..6ca3342 100644 (file)
@@ -55,7 +55,7 @@ struct dcb;
 
 static inline bool type_is_vnode(enum objtype type)
 {
-    STATIC_ASSERT(44 == ObjType_Num, "Check VNode definitions");
+    STATIC_ASSERT(45 == ObjType_Num, "Check VNode definitions");
 
     return (type == ObjType_VNode_x86_64_pml4 ||
             type == ObjType_VNode_x86_64_pdpt ||
@@ -82,7 +82,7 @@ static inline bool type_is_vnode(enum objtype type)
 static inline size_t vnode_objbits(enum objtype type)
 {
     // This function should be emitted by hamlet or somesuch.
-    STATIC_ASSERT(44 == ObjType_Num, "Check VNode definitions");
+    STATIC_ASSERT(45 == ObjType_Num, "Check VNode definitions");
 
     if (type == ObjType_VNode_x86_64_pml4 ||
         type == ObjType_VNode_x86_64_pdpt ||
@@ -120,7 +120,7 @@ static inline size_t vnode_objbits(enum objtype type)
  */
 static inline size_t vnode_entry_bits(enum objtype type) {
     // This function should be emitted by hamlet or somesuch.
-    STATIC_ASSERT(44 == ObjType_Num, "Check VNode definitions");
+    STATIC_ASSERT(45 == ObjType_Num, "Check VNode definitions");
 
     if (type == ObjType_VNode_x86_64_pml4 ||
         type == ObjType_VNode_x86_64_pdpt ||
@@ -173,7 +173,7 @@ static inline size_t vnode_entry_bits(enum objtype type) {
 
 static inline enum objtype get_mapping_type(enum objtype captype)
 {
-    STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all mapping types");
+    STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all mapping types");
 
     switch (captype) {
         case ObjType_Frame:
@@ -212,7 +212,7 @@ static inline enum objtype get_mapping_type(enum objtype captype)
 
 static inline bool type_is_mapping(enum objtype type)
 {
-    STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all mapping types");
+    STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all mapping types");
 
     switch (type) {
         case ObjType_Frame_Mapping:
@@ -338,6 +338,14 @@ enum irqtable_cmd {
 };
 
 /**
+ * IRQ commands.
+ */
+
+enum irq_cmd {
+       IRQCmd_Connect  ///< Connect this capability to a messaging channel
+};
+
+/**
  * IO capability commands.
  */
 enum io_cmd {
index 356ebb8..ca74fdb 100644 (file)
@@ -40,7 +40,7 @@ distcap_state_is_foreign(distcap_state_t state)
  * Predicates related to sharing capabilities
  */
 
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 static inline bool
 distcap_needs_locality(enum objtype type)
 {
@@ -87,7 +87,7 @@ distcap_needs_locality(enum objtype type)
     }
 }
 
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 static inline bool
 distcap_is_moveable(enum objtype type)
 {
index beb69b6..c6f008d 100644 (file)
@@ -799,6 +799,14 @@ static struct sysret handle_trace_setup(struct capability *cap,
     return SYSRET(SYS_ERR_OK);
 }
 
+static struct sysret handle_irq_connect(struct capability *to, int cmd,
+                                            uintptr_t *args)
+{
+    assert(!"NYI");
+    return SYSRET(SYS_ERR_OK);
+
+}
+
 static struct sysret handle_irq_table_alloc(struct capability *to, int cmd,
                                             uintptr_t *args)
 {
@@ -1149,6 +1157,9 @@ static invocation_handler_t invocations[ObjType_Num][CAP_MAX_CMD] = {
         [IPICmd_Send_Start] = kernel_send_start_ipi,
         [IPICmd_Send_Init] = kernel_send_init_ipi,
     },
+       [ObjType_IRQ] = {
+                       [IRQCmd_Connect] = handle_irq_connect
+       },
     [ObjType_IRQTable] = {
         [IRQTableCmd_Alloc] = handle_irq_table_alloc,
         [IRQTableCmd_Set] = handle_irq_table_set,
index 8dc6f27..cf0bbdf 100644 (file)
@@ -52,7 +52,7 @@ void caps_trace_ctrl(uint64_t types, genpaddr_t start, gensize_t size)
 
 struct capability monitor_ep;
 
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 int sprint_cap(char *buf, size_t len, struct capability *cap)
 {
     switch (cap->type) {
@@ -232,6 +232,9 @@ int sprint_cap(char *buf, size_t len, struct capability *cap)
                                   cap->u.vnode_aarch64_l3_mapping.frame,
                                   cap->u.vnode_aarch64_l3_mapping.pte,
                                   cap->u.vnode_aarch64_l3_mapping.pte_count);
+    case ObjType_IRQ:
+            return snprintf(buf, len, "IRQ cap (line: %"PRIu64", ctrl:%"PRIu64")",
+                        cap->u.irq.line, cap->u.irq.controller);
 
     case ObjType_IRQTable:
         return snprintf(buf, len, "IRQTable cap");
@@ -329,7 +332,7 @@ static errval_t set_cap(struct capability *dest, struct capability *src)
 
 // If you create more capability types you need to deal with them
 // in the table below.
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 
 static size_t caps_numobjs(enum objtype type, uint8_t bits, uint8_t objbits)
 {
@@ -388,6 +391,7 @@ static size_t caps_numobjs(enum objtype type, uint8_t bits, uint8_t objbits)
 
     case ObjType_Kernel:
     case ObjType_IRQTable:
+    case ObjType_IRQ:
     case ObjType_IO:
     case ObjType_EndPoint:
     case ObjType_ID:
@@ -422,7 +426,7 @@ static size_t caps_numobjs(enum objtype type, uint8_t bits, uint8_t objbits)
  *
  * For the meaning of the parameters, see the 'caps_create' function.
  */
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 
 static errval_t caps_init_objects(enum objtype type, lpaddr_t lpaddr, uint8_t
                                   bits, uint8_t objbits, size_t numobjs)
@@ -502,7 +506,7 @@ static errval_t caps_init_objects(enum objtype type, lpaddr_t lpaddr, uint8_t
  */
 // If you create more capability types you need to deal with them
 // in the table below.
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 
 static errval_t caps_create(enum objtype type, lpaddr_t lpaddr, uint8_t bits,
                             uint8_t objbits, size_t numobjs, coreid_t owner,
@@ -1268,7 +1272,7 @@ errval_t caps_create_new(enum objtype type, lpaddr_t addr, size_t bits,
 }
 
 
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 /// Retype caps
 errval_t caps_retype(enum objtype type, size_t objbits,
                      struct capability *dest_cnode, cslot_t dest_slot,
index 998e935..c58500d 100644 (file)
@@ -128,7 +128,7 @@ void debug_printf(const char *fmt, ...)
 /**
  * \brief Function to do the actual printing based on the type of capability
  */
-STATIC_ASSERT(44 == ObjType_Num, "Knowledge of all cap types");
+STATIC_ASSERT(45 == ObjType_Num, "Knowledge of all cap types");
 int debug_print_cap(char *buf, size_t len, struct capability *cap)
 {
     switch (cap->type) {
@@ -309,6 +309,10 @@ int debug_print_cap(char *buf, size_t len, struct capability *cap)
                                   cap->u.vnode_aarch64_l3_mapping.pte,
                                   cap->u.vnode_aarch64_l3_mapping.pte_count);
 
+    case ObjType_IRQ:
+                return snprintf(buf, len, "IRQ cap (line: %"PRIu64", ctrl:%"PRIu64")",
+                        cap->u.irq.line, cap->u.irq.controller);
+
     case ObjType_IRQTable:
         return snprintf(buf, len, "IRQTable cap");