class KCacheMaintenanceInterruptEvent extends KBaseInterruptEvent
This object handles data cache (L2C not included) and instruction cache maintainance.
There is only one instance of this object.
Size : 0x4C bytes (N3DS) / 0x34 bytes (O3DS)
Offset | Type | Description |
---|---|---|
0x0 | void ** | Pointer to vtable |
0x4 | u8 | Cache operation |
0x5 | u8 | Indicates whether to do the operation asynchronically (this is what is used when processes are running for ranges >= 0x200 bytes) |
0x6 | s8 | Number of cores still doing cache maintenance operations |
0x7 | u8 | Padding |
0x8 | KThread * | Thread operating on the object |
0xC | void * | Start address (when applicable) |
0x10 | void * | End address (when applicable) |
0x14 | KThreadLinkedListNode * | Related to KThread+0xA0 |
0x18 | KThreadLinkedList * | KThread+0xA8 of the current thread |
0x1C | KAsyncCacheMaintenanceInterruptEvent[number of cores] | Used when the field at offset 0x5 is 1, see below |
Possible operations (any other value leads to a kernel panic):
Operation | Description |
---|---|
4 | Invalidate data cache range |
5 | Clean data cache range |
6 | Clean and invalidate data cache range |
7 | Invalidate instruction cache range (also flush the entire branch target cache and the prefetch buffer) |
8 | Invalidate entire data cache |
9 | Clean entire data cache |
10 | Clean and invalidate entire data cache |
11 | Invalidate entire instruction cache (also flush the entire branch target cache and the prefetch buffer) |
KAsyncCacheMaintenanceInterruptEvent extends KSchedulableInterruptEvent, size = 0xC bytes:
Offset | Type | Description |
---|---|---|
0x0 | void ** | Pointer to vtable |
0x4 | KSchedulableInterruptEvent * | Next interrupt event |
0x8 | const KThread * | Thread woken up by the first virtual function of this object, doing the actual cache maintenance operation. Same for all |