SceKernelIntrMgr: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
Line 30: Line 30:


== SceIntrmgrForDriver ==
== SceIntrmgrForDriver ==
=== Setting up interrupt ===
{| class="wikitable"
|-
! Version
! NID
|-
| 1.69 (secure)
| 0x6B84DA8F
|-
| 1.69 (non-secure)
| 0x5C1FEB29
|}
<source lang="c">
typedef int(intr_callback)(int code, int unk);
typedef struct reg_intr_opt2
{
  uint32_t size; //0x28
  uint32_t unk_4;
  uint32_t unk_8;
  uint32_t unk_C;
  intr_callback* fptr0; // function pointer
  intr_callback* fptr1; // function pointer
  intr_callback* fptr2; // function pointer
  uint32_t unk_1C;
  uint32_t unk_20;
  uint32_t unk_24;
}reg_intr_opt2;
typedef struct reg_intr_opt
{
  uint32_t size; //0x14
  uint32_t num;
  reg_intr_opt2* opt2;
  uint32_t unk_C;
  uint32_t unk_10;
}reg_intr_opt;
typedef int (intr_callback_func)(int unk, void* userCtx);
int register_interrupt(int code, const char *name, int interrupt_type, intr_callback_func* func, void* userCtx, int priority, int targetcpu, reg_intr_opt* opt);
</source>
=== Setting up interrupt,too? ===
{| class="wikitable"
|-
! Version
! NID
|-
| 3.60 (non-secure?)
| 0x96576C18
|}
<source lang="c">
int register_interrupt2(int intr_code, int unk, const char *name, void *func, int priority?);
</source>
=== Enable interrupt? ===
{| class="wikitable"
|-
! Version
! NID
|-
| 3.60 (non-secure?)
| 0x901E41D8
|}
<source lang="c">
int enable_interrupt(int intr_code, int unk);
</source>
=== Disable interrupt? ===
{| class="wikitable"
|-
! Version
! NID
|-
| 3.60 (non-secure?)
| 0x259C6D9E
|}
<source lang="c">
int disable_interrupt(int intr_code, int unk);
</source>
=== Registering SMC call (secure only) ===
{| class="wikitable"
|-
! Version
! NID
|-
| 1.69 (secure)
| 0xC188114F
|}
<source lang="c">
int register_smc(int service_id, void **func);
</source>
=== Trigger SGI (Software generated interrupt)? ===
{| class="wikitable"
|-
! Version
! NID
|-
| 3.60 (non-secure?)
| 0x29F62500
|}
<source lang="c">
int trigger_sgi(int intr_code, int unk, int unk2);
</source>
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Devices]]
== SceIntrmgrForKernel ==
== SceIntrmgrForKernel ==
== SceIntrmgrForTZS ==
== SceIntrmgrForTZS ==

Revision as of 22:55, 12 February 2017

SceKernelIntrMgr is a kernel module that is primary responsible for setting up external and internal interrupts. Notably, it facilitates communication with the F00D Processor.

Module

This module exists in both non-secure and secure world. The non-secure world SELF can be found in os0:kd/intrmgr.skprx. It also can be found in the Boot Image.

Known NIDs

Version Name World Privilege NID
1.69 SceKernelIntrMgr Non-secure Kernel 0xB3A12CDC
1.69 SceKernelIntrMgr Secure Kernel 0x8A9875BC

Libraries

This module only exports kernel libraries.

Known NIDs

Version Name World Visibility NID
1.69 SceIntrmgrForDriver Non-secure Kernel 0x9DF04041
1.69 SceIntrmgrForKernel Non-secure Kernel 0x7AC5E3A
1.69 SceIntrmgrForTZS Secure Kernel 0xEC3056FE

SceIntrmgrForDriver

Setting up interrupt

Version NID
1.69 (secure) 0x6B84DA8F
1.69 (non-secure) 0x5C1FEB29
typedef int(intr_callback)(int code, int unk);

typedef struct reg_intr_opt2
{
   uint32_t size; //0x28
   uint32_t unk_4;
   uint32_t unk_8;
   uint32_t unk_C;
   intr_callback* fptr0; // function pointer
   intr_callback* fptr1; // function pointer
   intr_callback* fptr2; // function pointer
   uint32_t unk_1C;
   uint32_t unk_20;
   uint32_t unk_24;
}reg_intr_opt2;

typedef struct reg_intr_opt
{
   uint32_t size; //0x14
   uint32_t num;
   reg_intr_opt2* opt2;
   uint32_t unk_C;
   uint32_t unk_10;
}reg_intr_opt;

typedef int (intr_callback_func)(int unk, void* userCtx);

int register_interrupt(int code, const char *name, int interrupt_type, intr_callback_func* func, void* userCtx, int priority, int targetcpu, reg_intr_opt* opt);

Setting up interrupt,too?

Version NID
3.60 (non-secure?) 0x96576C18
int register_interrupt2(int intr_code, int unk, const char *name, void *func, int priority?);

Enable interrupt?

Version NID
3.60 (non-secure?) 0x901E41D8
int enable_interrupt(int intr_code, int unk);

Disable interrupt?

Version NID
3.60 (non-secure?) 0x259C6D9E
int disable_interrupt(int intr_code, int unk);

Registering SMC call (secure only)

Version NID
1.69 (secure) 0xC188114F
int register_smc(int service_id, void **func);

Trigger SGI (Software generated interrupt)?

Version NID
3.60 (non-secure?) 0x29F62500
int trigger_sgi(int intr_code, int unk, int unk2);

SceIntrmgrForKernel

SceIntrmgrForTZS

Controller

The interrupt controller is defined in the MPCore TRM [1]. The PERIPHBASE address (physical) is 0x1A000000.

Registered Interrupts

As specified in GIC Architecture, interrupt 0-15 are software generated interrupts. There are also no private peripheral interrupts (16-31) implemented. Core Handler indicates which core handles the exception. "All" means it can be handled by any core.

Code World Registered names Core Handler Priority
0 Non-secure ? 0 16
1 Non-secure ? 0 32
2 Non-secure SceThreadmgrSGI 0 48
4 Non-secure SceSblSmSchedProxySGI 0 128
6 Non-secure SceKernelProcessmgr 0 80
8 Non-secure SceDisplayVbStartSGI, SceCtrlVblank 0 160
10 Non-secure ScePowerMain 0 80
11 Secure ScePervasive 0 80
32 Non-secure SceBusError All 16
33 Secure SceBusErrorSecure All 16
34 Secure SceEmcTop All 80
36 Non-secure SceIntrmgrVfpException0 All 16
37 Non-secure SceIntrmgrVfpException1 All 16
38 Non-secure SceIntrmgrVfpException2 All 16
39 Non-secure SceIntrmgrVfpException3 All 16
49 Non-secure SceGpio1Gate2 All 160
50 Non-secure SceGpio1Gate3 All 192
51 Non-secure SceGpio1Gate4 All 208
52 Non-secure SceGpuLisr All 80
56 Non-secure SceVipMailbox0 All 208
60 Non-secure SceMsifIns All 128
61 Non-secure SceMsifSmshc All 128
68 Non-secure SceCompat4 0 160
69 Non-secure SceCompat5 1 160
70 Non-secure SceCompat6 2 160
71 Non-secure SceCompat7 0 160
72 Non-secure SceCompat8 1 160
73 Non-secure SceCompat9 2 160
74 Non-secure SceCompat10 0 160
80 Non-secure SceVeneziaMailbox00 All 208
81 Non-secure SceVeneziaMailbox01 All 208
82 Non-secure SceVeneziaMailbox02 All 208
83 Non-secure SceVeneziaMailbox03 All 208
84 Non-secure SceVeneziaMailbox04 All 208
85 Non-secure SceVeneziaMailbox05 All 208
86 Non-secure SceVeneziaMailbox06 All 208
87 Non-secure SceVeneziaMailbox07 All 208
88 Non-secure SceVeneziaMailbox08 All 208
89 Non-secure SceVeneziaMailbox09 All 208
90 Non-secure SceVeneziaMailbox10 All 208
91 Non-secure SceVeneziaMailbox11 All 208
92 Non-secure SceVeneziaMailbox12 All 208
93 Non-secure SceVeneziaMailbox13 All 208
94 Non-secure SceVeneziaMailbox14 All 208
95 Non-secure SceVeneziaMailbox15 All 208
112 Non-secure SceDmacmgrDmac0Ch0 All 128
113 Non-secure SceDmacmgrDmac0Ch1 All 128
114 Non-secure SceDmacmgrDmac1Ch0 All 128
115 Non-secure SceDmacmgrDmac1Ch1 All 128
116 Non-secure SceDmacmgrDmac2Ch0 All 128
117 Non-secure SceDmacmgrDmac2Ch1 All 128
118 Non-secure SceDmacmgrDmac3Ch0 All 128
119 Non-secure SceDmacmgrDmac3Ch1 All 128
120 Non-secure SceDmacmgrDmac4Gate0 3 128
121 Non-secure SceDmacmgrDmac4Gate1 3 128
122 Non-secure SceDmacmgrDmac4Gate2 3 128
123 Non-secure SceDmacmgrDmac4Gate3 3 128
124 Non-secure SceDmacmgrDmac5Ch0 All 128
125 Non-secure SceDmacmgrDmac5Ch1 All 128
126 Non-secure SceDmacmgrDmac6Ch0 All 128
127 Non-secure SceDmacmgrDmac6Ch1 All 128
128 Non-secure SceSystimerWordTimer0 All 128
129 Non-secure SceSystimerWordTimer1 All 128
130 Non-secure SceSystimerWordTimer2 All 128
131 Non-secure SceSystimerWordTimer3 All 128
132 Non-secure SceSystimerWordTimer4 All 128
133 Non-secure SceSystimerWordTimer5 All 128
134 Non-secure SceSystimerWordTimer6 All 128
135 Secure usleep 2 128
136 Non-secure SceSystimerLongrangeTimer0 All 128
137 Non-secure SceSystimerLongrangeTimer1 All 128
138 Non-secure SceSystimerLongrangeTimer2 All 128
139 Non-secure SceSystimerLongrangeTimer3 All 128
140 Non-secure SceSystimerLongrangeTimer4 All 128
141 Non-secure SceThreadmgrTimer All 48
142 Non-secure SceI2c0 All 160
143 Non-secure SceI2c1 All 160
145 Non-secure ? All 160
146 Non-secure SceUsbEhci0 All 160
147 Non-secure ? All 160
148 Non-secure SceUsbEhci1 All 160
149 Non-secure ? All 160
150 Non-secure SceUsbEhci2 All 160
151 Non-secure SceUdcd1_EP0 All 128
152 Non-secure SceUdcd1_EP1-7 All 128
155 Non-secure SceUdcd2_EP0 All 128
156 Non-secure SceUdcd2_EP1-7 All 128
160 Non-secure SceCsi0 All 160
162 Non-secure SceCsi1 All 160
164 Non-secure SceUdcd1_phy-ready All 128
165 Non-secure SceUdcd1_vbus All 128
166 Non-secure SceCif0 All 160
168 Non-secure SceCif1 All 160
170 Non-secure SceUdcd2_phy-ready All 128
171 Non-secure SceUdcd2_vbus All 128
176 Non-secure ? All 16
176 Non-secure ? 0 16
177 Non-secure ? 1 16
178 Non-secure ? 2 16
179 Non-secure ? 3 16
181 Non-secure SceUdcd0_EP0 All 128
182 Non-secure SceUdcd0_EP1-7 All 128
184 Non-secure ? All 128
190 Non-secure SceUdcd0_phy-ready All 128
191 Non-secure SceUdcd0_vbus All 128
193 Non-secure ? 3 160
194 Non-secure SceI2s1 3 160
193 Non-secure SceI2s0 3 160
196 Non-secure SceI2s2 3 160
200 Secure SceSblSmSchedCry2Arm0 3 128
201 Secure SceSblSmSchedCry2Arm123 3 128
202 Secure SceSblSmSchedCry2Arm123 3 128
203 Secure SceSblSmSchedCry2Arm123 3 128
204 Non-secure SceIftu0a All 80
205 Non-secure SceIftu0b All 80
206 Non-secure SceIftu1a All 80
207 Non-secure SceIftu1b All 80
210 Non-secure SceDisplayVbStartHDMI / SceDsi1 All 160
213 Non-secure SceDisplayVbStartMainLCD / SceDsi0 All 160
220 Non-secure SceSdif0 All 128
221 Non-secure SceSdif1 All 128
222 Non-secure SceSdif2 All 128
223 ? SceSdif3 (not present on 1.69) ? ?
225 Non-secure SceUart1 All 80
248 Non-secure SceGpio0Gate0 All 80
249 Non-secure SceGpio0Gate1 All 112
250 Non-secure SceGpio0Gate2 All 160
251 Non-secure SceGpio0Gate3 All 192
252 Non-secure SceGpio0Gate4 All 208
253 Non-secure SceGpio1Gate0 All 80
254 Non-secure SceGpio1Gate1 All 112
255 Non-secure SceIftu2 All 80

Functions

Setting up interrupt

Version NID
1.69 (secure) 0x6B84DA8F
1.69 (non-secure) 0x5C1FEB29
typedef int(intr_callback)(int code, int unk);

typedef struct reg_intr_opt2
{
   uint32_t size; //0x28
   uint32_t unk_4;
   uint32_t unk_8;
   uint32_t unk_C;
   intr_callback* fptr0; // function pointer
   intr_callback* fptr1; // function pointer
   intr_callback* fptr2; // function pointer
   uint32_t unk_1C;
   uint32_t unk_20;
   uint32_t unk_24;
}reg_intr_opt2;

typedef struct reg_intr_opt
{
   uint32_t size; //0x14
   uint32_t num;
   reg_intr_opt2* opt2;
   uint32_t unk_C;
   uint32_t unk_10;
}reg_intr_opt;

typedef int (intr_callback_func)(int unk, void* userCtx);

int register_interrupt(int code, const char *name, int interrupt_type, intr_callback_func* func, void* userCtx, int priority, int targetcpu, reg_intr_opt* opt);

Setting up interrupt,too?

Version NID
3.60 (non-secure?) 0x96576C18
int register_interrupt2(int intr_code, int unk, const char *name, void *func, int priority?);

Enable interrupt?

Version NID
3.60 (non-secure?) 0x901E41D8
int enable_interrupt(int intr_code, int unk);

Disable interrupt?

Version NID
3.60 (non-secure?) 0x259C6D9E
int disable_interrupt(int intr_code, int unk);

Registering SMC call (secure only)

Version NID
1.69 (secure) 0xC188114F
int register_smc(int service_id, void **func);

Trigger SGI (Software generated interrupt)?

Version NID
3.60 (non-secure?) 0x29F62500
int trigger_sgi(int intr_code, int unk, int unk2);