hip
Hypervisor Interrupt Pending Register
The hip register is an HSXLEN-bit read/write register that indicates pending interrupts at the hypervisor level. It contains interrupt-pending bits for both VS-level and hypervisor-specific interrupts.
Fields
SGEIP
RO-H |
Read-Only with Hardware update Writes are ignored. Reads reflect a value dynamically generated by hardware. |
- Reset value
-
0
VSEIP
- Location
-
hip[10] - Description
-
Pending interrupt bit for VS-level external interrupts (VSEI). This bit is the logical OR of
vseipfrom hvip, the interrupt from hgeip selected by hstatus.VGEIN, and any other external interrupt signal directed to VS-level. - Type
RO-H |
Read-Only with Hardware update Writes are ignored. Reads reflect a value dynamically generated by hardware. |
- Reset value
-
0
VSTIP
- Location
-
hip[6] - Description
-
Pending interrupt bit for VS-level timer interrupts (VSTI). This bit is the logical OR of
vstipfrom hvip and any other timer interrupt directed to VS-level. - Type
RO-H |
Read-Only with Hardware update Writes are ignored. Reads reflect a value dynamically generated by hardware. |
- Reset value
-
0
VSSIP
- Location
-
hip[2] - Description
-
Pending interrupt bit for VS-level software interrupts (VSSI). This bit is an alias of the
vssipbit in hvip. - Type
RO-H |
Read-Only with Hardware update Writes are ignored. Reads reflect a value dynamically generated by hardware. |
Software read
This CSR may return a value that is different from what is stored in hardware.
-
Pruned
-
Original
XReg res = 0;
if (($bits(CSR[CSR[hgeie]]) & $bits(CSR[CSR[hgeip]])) != 0) {
res[12] = 1'b1;
}
if (CSR[hvip].VSEIP == 1'b1) {
res[10] = 1'b1;
}
if ((CSR[hvip].VSTIP == 1'b1) || read_mtime() + CSR[htimedelta].DELTA) >= CSR[vstimecmp].TIME {
res[6] = 1'b1;
}
if (CSR[hvip].VSSIP == 1'b1) {
res[2] = 1'b1;
}
return res;
XReg res = 0;
if (($bits(CSR[CSR[hgeie]]) & $bits(CSR[CSR[hgeip]])) != 0) {
res[12] = 1'b1;
}
if (CSR[hvip].VSEIP == 1'b1) {
res[10] = 1'b1;
}
if (implemented?(ExtensionName::Sstc)) {
if ((CSR[hvip].VSTIP == 1'b1) || read_mtime() + CSR[htimedelta].DELTA) >= CSR[vstimecmp].TIME {
res[6] = 1'b1;
}
} else {
if (CSR[hvip].VSTIP == 1'b1) {
res[6] = 1'b1;
}
}
if (CSR[hvip].VSSIP == 1'b1) {
res[2] = 1'b1;
}
return res;