re-Deputized some things and added Deputy polymorphic types to active messages
[akaros.git] / kern / include / trap.h
index 9af6fac..93c0b51 100644 (file)
@@ -42,24 +42,27 @@ extern void sysenter_handler();
  * messages require a unique message.  Also for now, but it might be like that
  * for a while on x86. */
 
-typedef void (*amr_t)(trapframe_t* tf, uint32_t srcid, uint32_t a0, uint32_t a1,
-                      uint32_t a2);
-typedef struct
+typedef void (*amr_t)(trapframe_t* tf, uint32_t srcid,
+                      TV(a0t) a0, TV(a1t) a1, TV(a2t) a2);
+
+struct active_message
 {
        uint32_t srcid;
        amr_t pc;
-       uint32_t arg0;
-       uint32_t arg1;
-       uint32_t arg2;
+       TV(a0t) arg0;
+       TV(a1t) arg1;
+       TV(a2t) arg2;
        uint32_t pad;
-} active_message_t;
+};
+typedef struct active_message NTPTV(a0t) NTPTV(a1t) NTPTV(a2t) active_message_t;
 
-uint32_t send_active_message(uint32_t dst, amr_t pc, uint32_t arg0,
-                             uint32_t arg1, uint32_t arg2);
+uint32_t send_active_message(uint32_t dst, amr_t pc,
+                             TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2);
 
 /* Spins til the active message is sent.  Could block in the future. */
-static inline void send_active_msg_sync(uint32_t dst, amr_t pc, uint32_t arg0,
-                                        uint32_t arg1, uint32_t arg2)
+static inline void
+send_active_msg_sync(uint32_t dst, amr_t pc,
+                     TV(a0t) arg0, TV(a1t) arg1, TV(a2t) arg2)
 {
        while (send_active_message(dst, pc, arg0, arg1, arg2))
                cpu_relax();