hamlet, kpi types, caps: add pasid type
authorMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Mon, 8 Feb 2016 10:36:25 +0000 (11:36 +0100)
committerMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Mon, 8 Feb 2016 13:40:43 +0000 (14:40 +0100)
The type represents a physical address space identifier. This patch adds support
in hamlet for a `pasid' type and declares the corresponding pasid_t and macros
in barrelfish_kpi/types.h. It changes caps.hl to use the new type instead of
uint32. The pasid type is represented by a uint32 at the moment.

Signed-off-by: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>

capabilities/caps.hl
include/barrelfish_kpi/types.h
tools/hamlet/HamletAst.lhs
tools/hamlet/HamletBackend.lhs

index a67e020..ce30d0c 100644 (file)
@@ -57,7 +57,7 @@ cap PhysAddr from_self {
     **/
 
     address genpaddr base;  /* Base address of untyped region */
-    uint32 pasid;           /* Physical Address Space ID */
+    pasid pasid;            /* Physical Address Space ID */
     size_bits uint8 bits;   /* Address bits that untyped region bears */
 
 };
@@ -68,7 +68,7 @@ cap RAM from PhysAddr from_self {
     /* RAM memory object */
 
     address genpaddr base;  /* Base address of untyped region */
-    uint32 pasid;           /* Physical Address Space ID */
+    pasid pasid;            /* Physical Address Space ID */
     size_bits uint8 bits;   /* Address bits that untyped region bears */
 
 };
@@ -157,7 +157,7 @@ cap Frame from RAM from_self {
     /* Mappable memory frame */
 
     address genpaddr base;  /* Physical base address of frame */
-    uint32 pasid;           /* Physical Address Space ID */
+    pasid pasid;            /* Physical Address Space ID */
     size_bits uint8 bits;   /* Address bits this frame bears */
 };
 
@@ -173,7 +173,7 @@ cap DevFrame from PhysAddr from_self {
     /* Mappable device frame */
 
     address genpaddr base;  /* Physical base address of frame */
-    uint32 pasid;           /* Physical Address Space ID */
+    pasid pasid;            /* Physical Address Space ID */
     size_bits uint8 bits;   /* Address bits this frame bears */
 };
 
index d8116da..400cbd0 100644 (file)
@@ -67,6 +67,11 @@ typedef uint32_t capaddr_t;
 #define PRIuCADDR PRIu32
 #define PRIxCADDR PRIx32
 
+/* physical address space identifier */
+typedef uint32_t pasid_t;
+#define PRIuPASID PRIu32
+#define PRIxPASID PRIx32
+
 /// Number of bits in a cspace address
 #define CPTR_BITS       (sizeof(capaddr_t) * NBBY)
 
index 539b83b..96d7b3f 100644 (file)
 >           | Pointer String
 >           | CapRights
 >           | CoreId
+>           | PasId
 >             deriving Show
 
 > instance Read Type where
 >         | s == "caddr" = [(CAddr, "")]
 >         | s == "caprights" = [(CapRights, "")]
 >         | s == "coreid" = [(CoreId, "")]
+>         | s == "pasid" = [(PasId, "")]
 >         | otherwise = [(Pointer s, "")]
 
 > data AddressExpr = AddressExpr Expr | MemToPhysOp Expr | GetAddrOp Expr
index 186b56e..909ea9e 100644 (file)
 >           toFofType (Pointer s) = typedef uint64T (s ++ "*")
 >           toFofType CapRights = capRightsT
 >           toFofType CoreId = typedef uint8T "coreid_t"
+>           toFofType PasId = typedef uint32T "pasid_t"
 
 > capsStructT :: Capabilities -> TypeExpr
 > capsStructT cap = structST  "capability" (mkCapsStruct cap)