Add SetCID permission bit
This commit is contained in:
@@ -94,6 +94,7 @@ typedef Bit#(CapAddressW) CapAddress;
|
|||||||
// The Hardware permissions type
|
// The Hardware permissions type
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Bool reserved;
|
Bool reserved;
|
||||||
|
Bool permit_set_CID;
|
||||||
Bool acces_sys_regs;
|
Bool acces_sys_regs;
|
||||||
Bool permit_unseal;
|
Bool permit_unseal;
|
||||||
Bool permit_ccall;
|
Bool permit_ccall;
|
||||||
@@ -866,6 +867,7 @@ instance CHERICap #(CapPipe, 18, 64);
|
|||||||
|
|
||||||
function HardPerms getHardPerms (CapPipe cap);
|
function HardPerms getHardPerms (CapPipe cap);
|
||||||
return HardPerms {
|
return HardPerms {
|
||||||
|
permitSetCID: cap.capFat.perms.hard.permit_set_CID,
|
||||||
accessSysRegs: cap.capFat.perms.hard.acces_sys_regs,
|
accessSysRegs: cap.capFat.perms.hard.acces_sys_regs,
|
||||||
permitUnseal: cap.capFat.perms.hard.permit_unseal,
|
permitUnseal: cap.capFat.perms.hard.permit_unseal,
|
||||||
permitCCall: cap.capFat.perms.hard.permit_ccall,
|
permitCCall: cap.capFat.perms.hard.permit_ccall,
|
||||||
@@ -883,6 +885,7 @@ instance CHERICap #(CapPipe, 18, 64);
|
|||||||
function CapPipe setHardPerms (CapPipe cap, HardPerms perms);
|
function CapPipe setHardPerms (CapPipe cap, HardPerms perms);
|
||||||
cap.capFat.perms.hard = HPerms {
|
cap.capFat.perms.hard = HPerms {
|
||||||
reserved: ?,
|
reserved: ?,
|
||||||
|
permit_set_CID: perms.permitSetCID,
|
||||||
acces_sys_regs: perms.accessSysRegs,
|
acces_sys_regs: perms.accessSysRegs,
|
||||||
permit_unseal: perms.accessSysRegs,
|
permit_unseal: perms.accessSysRegs,
|
||||||
permit_ccall: perms.accessSysRegs,
|
permit_ccall: perms.accessSysRegs,
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ package CHERICap;
|
|||||||
|
|
||||||
typedef Bit#(16) SoftPerms;
|
typedef Bit#(16) SoftPerms;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
Bool permitSetCID;
|
||||||
Bool accessSysRegs;
|
Bool accessSysRegs;
|
||||||
Bool permitUnseal;
|
Bool permitUnseal;
|
||||||
Bool permitCCall;
|
Bool permitCCall;
|
||||||
@@ -95,7 +96,7 @@ typeclass CHERICap#(type t, numeric type ot, numeric type n)
|
|||||||
function t setSoftPerms (t cap, SoftPerms softperms);
|
function t setSoftPerms (t cap, SoftPerms softperms);
|
||||||
// Get the architectural permissions
|
// Get the architectural permissions
|
||||||
function Bit#(31) getPerms (t cap) =
|
function Bit#(31) getPerms (t cap) =
|
||||||
zeroExtend({pack(getSoftPerms(cap)), 4'h0, pack(getHardPerms(cap))});
|
zeroExtend({pack(getSoftPerms(cap)), 3'h0, pack(getHardPerms(cap))});
|
||||||
// Set the architectural permissions
|
// Set the architectural permissions
|
||||||
function t setPerms (t cap, Bit#(31) perms) =
|
function t setPerms (t cap, Bit#(31) perms) =
|
||||||
setSoftPerms(setHardPerms(cap, unpack(perms[11:0])), unpack(truncate(perms[30:15])));
|
setSoftPerms(setHardPerms(cap, unpack(perms[11:0])), unpack(truncate(perms[30:15])));
|
||||||
|
|||||||
Reference in New Issue
Block a user