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.
Attributes
Requirement |
|||
|---|---|---|---|
Defining extensions |
|
||
CSR Address |
0x608 |
||
Length |
* 32 when CSR[mstatus].SXL == 0 * 64 when CSR[mstatus].SXL == 1 |
||
Privilege Mode |
S |
Format
This CSR format changes dynamically.
Fields
VSEIP
- Location
-
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
- Reset value
-
0
VSTIP
- Location
-
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
- Reset value
-
0
VSSIP
- Location
-
2
- Description
-
Pending interrupt bit for VS-level software interrupts (VSSI). This bit is an alias of the
vssipbit in hvip. - Type
-
RO-H
- Reset value
-
0
Software write
This CSR may store a value that is different from what software attempts to write.
When a software write occurs (e.g., through csrrw), the following determines the written value:
SGEIP = csr_value.SGEIP
VSEIP = csr_value.VSEIP
VSTIP = csr_value.VSTIP
VSSIP = # VSSIP in hip is an alias of VSSIP in hvip
CSR[hvip].VSSIP = csr_value.VSSIP;
return csr_value.VSSIP;
Software read
This CSR may return a value that is different from what is stored in hardware.
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;