RAM_ARM9:0208C16C @ =============== S U B R O U T I N E ======================================= RAM_ARM9:0208C16C RAM_ARM9:0208C16C RAM_ARM9:0208C16C @ void __fastcall PM_GoSleepMode__(struct PMWakeUpTrigger *trigger, struct PMLogic *logic, unsigned __int16 keyPattern) RAM_ARM9:0208C16C PM_GoSleepMode__: @ CODE XREF: sub_2035474+48p RAM_ARM9:0208C16C RAM_ARM9:0208C16C var_40 = -0x40 RAM_ARM9:0208C16C var_3C = -0x3C RAM_ARM9:0208C16C var_38 = -0x38 RAM_ARM9:0208C16C var_34 = -0x34 RAM_ARM9:0208C16C var_30 = -0x30 RAM_ARM9:0208C16C var_2C = -0x2C RAM_ARM9:0208C16C var_28 = -0x28 RAM_ARM9:0208C16C RAM_ARM9:0208C16C F0 4F 2D E9 STMFD SP!, {R4-R11,LR} RAM_ARM9:0208C170 1C D0 4D E2 SUB SP, SP, #0x1C RAM_ARM9:0208C174 D8 32 9F E5 LDR R3, =0x2153020 RAM_ARM9:0208C178 00 70 A0 E1 MOV R7, R0 RAM_ARM9:0208C17C 1C 00 93 E5 LDR R0, [R3,#0x1C] @ listp RAM_ARM9:0208C180 00 10 8D E5 STR R1, [SP] RAM_ARM9:0208C184 04 20 8D E5 STR R2, [SP,#4] RAM_ARM9:0208C188 01 50 A0 E3 MOV R5, #1 RAM_ARM9:0208C18C 00 40 A0 E3 MOV R4, #0 RAM_ARM9:0208C190 98 01 00 EB BL PMi_ExecuteList__ RAM_ARM9:0208C194 BC 02 9F E5 LDR R0, =0x4000208 RAM_ARM9:0208C198 B0 60 D0 E1 LDRH R6, [R0] RAM_ARM9:0208C19C B0 40 C0 E1 STRH R4, [R0] RAM_ARM9:0208C1A0 FE ED FF EB BL OS_DisableInterrupts__ RAM_ARM9:0208C1A4 10 00 8D E5 STR R0, [SP,#0x10] RAM_ARM9:0208C1A8 01 00 44 E2 SUB R0, R4, #1 @ intr RAM_ARM9:0208C1AC FF E1 FF EB BL OS_DisableIrqMask__ RAM_ARM9:0208C1B0 0C 00 8D E5 STR R0, [SP,#0xC] RAM_ARM9:0208C1B4 AD EB FF EB BL OS_IsTickAvailable__ RAM_ARM9:0208C1B8 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C1BC 08 00 A0 13 MOVNE R0, #8 RAM_ARM9:0208C1C0 04 00 A0 01 MOVEQ R0, R4 RAM_ARM9:0208C1C4 01 07 80 E3 ORR R0, R0, #0x40000 @ intr RAM_ARM9:0208C1C8 E1 E1 FF EB BL OS_SetIrqMask__ RAM_ARM9:0208C1CC 10 00 9D E5 LDR R0, [SP,#0x10] RAM_ARM9:0208C1D0 F7 ED FF EB BL OS_RestoreInterrupts__ RAM_ARM9:0208C1D4 7C 12 9F E5 LDR R1, =0x4000208 RAM_ARM9:0208C1D8 08 00 17 E3 TST R7, #8 RAM_ARM9:0208C1DC B0 00 D1 E1 LDRH R0, [R1] RAM_ARM9:0208C1E0 B0 50 C1 E1 STRH R5, [R1] RAM_ARM9:0208C1E4 06 00 00 0A BEQ loc_208C204 RAM_ARM9:0208C1E8 4B EE FF EB BL MB_IsMultiBootChild__ RAM_ARM9:0208C1EC FE 00 80 E2 ADD R0, R0, #0xFE RAM_ARM9:0208C1F0 FF 0C 80 E2 ADD R0, R0, #0xFF00 RAM_ARM9:0208C1F4 00 08 A0 E1 MOV R0, R0,LSL#16 RAM_ARM9:0208C1F8 20 08 A0 E1 MOV R0, R0,LSR#16 RAM_ARM9:0208C1FC 01 00 50 E3 CMP R0, #1 RAM_ARM9:0208C200 08 70 C7 93 BICLS R7, R7, #8 RAM_ARM9:0208C204 RAM_ARM9:0208C204 loc_208C204: @ CODE XREF: PM_GoSleepMode__+78j RAM_ARM9:0208C204 10 00 17 E3 TST R7, #0x10 RAM_ARM9:0208C208 06 00 00 0A BEQ loc_208C228 RAM_ARM9:0208C20C D0 E6 FF EB BL DSi.Check__ RAM_ARM9:0208C210 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C214 02 00 00 1A BNE loc_208C224 RAM_ARM9:0208C218 52 13 00 EB BL CTRDG_IsExisting__ RAM_ARM9:0208C21C 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C220 00 00 00 1A BNE loc_208C228 RAM_ARM9:0208C224 RAM_ARM9:0208C224 loc_208C224: @ CODE XREF: PM_GoSleepMode__+A8j RAM_ARM9:0208C224 10 70 C7 E3 BIC R7, R7, #0x10 RAM_ARM9:0208C228 RAM_ARM9:0208C228 loc_208C228: @ CODE XREF: PM_GoSleepMode__+9Cj RAM_ARM9:0208C228 @ PM_GoSleepMode__+B4j RAM_ARM9:0208C228 01 13 A0 E3 MOV R1, #0x4000000 RAM_ARM9:0208C22C 01 0A 81 E2 ADD R0, R1, #0x1000 RAM_ARM9:0208C230 00 B0 91 E5 LDR R11, [R1] RAM_ARM9:0208C234 00 50 90 E5 LDR R5, [R0] RAM_ARM9:0208C238 18 01 00 EB BL PM_GetLCDPower__ RAM_ARM9:0208C23C 14 90 8D E2 ADD R9, SP, #0x14 RAM_ARM9:0208C240 18 A0 8D E2 ADD R10, SP, #0x18 RAM_ARM9:0208C244 08 00 8D E5 STR R0, [SP,#8] RAM_ARM9:0208C248 0A 00 A0 E1 MOV R0, R10 @ top RAM_ARM9:0208C24C 09 10 A0 E1 MOV R1, R9 @ bottom RAM_ARM9:0208C250 64 FF FF EB BL PM_GetBackLight__ RAM_ARM9:0208C254 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C258 07 00 00 0A BEQ loc_208C27C RAM_ARM9:0208C25C F8 81 9F E5 LDR R8, =0x51D23 RAM_ARM9:0208C260 RAM_ARM9:0208C260 loc_208C260: @ CODE XREF: PM_GoSleepMode__+10Cj RAM_ARM9:0208C260 08 00 A0 E1 MOV R0, R8 RAM_ARM9:0208C264 EC ED FF EB BL DSi_regUnk__ RAM_ARM9:0208C268 0A 00 A0 E1 MOV R0, R10 @ top RAM_ARM9:0208C26C 09 10 A0 E1 MOV R1, R9 @ bottom RAM_ARM9:0208C270 5C FF FF EB BL PM_GetBackLight__ RAM_ARM9:0208C274 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C278 F8 FF FF 1A BNE loc_208C260 RAM_ARM9:0208C27C RAM_ARM9:0208C27C loc_208C27C: @ CODE XREF: PM_GoSleepMode__+ECj RAM_ARM9:0208C27C 02 00 A0 E3 MOV R0, #2 @ target RAM_ARM9:0208C280 00 10 A0 E3 MOV R1, #0 @ sw RAM_ARM9:0208C284 D9 FE FF EB BL PM_SetBackLight__ RAM_ARM9:0208C288 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C28C 09 00 00 0A BEQ loc_208C2B8 RAM_ARM9:0208C290 C4 A1 9F E5 LDR R10, =0x51D23 RAM_ARM9:0208C294 02 90 A0 E3 MOV R9, #2 RAM_ARM9:0208C298 00 80 A0 E3 MOV R8, #0 RAM_ARM9:0208C29C RAM_ARM9:0208C29C loc_208C29C: @ CODE XREF: PM_GoSleepMode__+148j RAM_ARM9:0208C29C 0A 00 A0 E1 MOV R0, R10 RAM_ARM9:0208C2A0 DD ED FF EB BL DSi_regUnk__ RAM_ARM9:0208C2A4 09 00 A0 E1 MOV R0, R9 @ target RAM_ARM9:0208C2A8 08 10 A0 E1 MOV R1, R8 @ sw RAM_ARM9:0208C2AC CF FE FF EB BL PM_SetBackLight__ RAM_ARM9:0208C2B0 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C2B4 F8 FF FF 1A BNE loc_208C29C RAM_ARM9:0208C2B8 RAM_ARM9:0208C2B8 loc_208C2B8: @ CODE XREF: PM_GoSleepMode__+120j RAM_ARM9:0208C2B8 75 FD FF EB BL waitForNextVFrame__ @ //---- wait a few frames after backlight off for avoiding appearance of afterimage RAM_ARM9:0208C2BC 01 23 A0 E3 MOV R2, #0x4000000 RAM_ARM9:0208C2C0 00 00 92 E5 LDR R0, [R2] RAM_ARM9:0208C2C4 01 1A 82 E2 ADD R1, R2, #0x1000 RAM_ARM9:0208C2C8 03 08 C0 E3 BIC R0, R0, #0x30000 RAM_ARM9:0208C2CC 00 00 82 E5 STR R0, [R2] RAM_ARM9:0208C2D0 00 00 91 E5 LDR R0, [R1] RAM_ARM9:0208C2D4 01 08 C0 E3 BIC R0, R0, #0x10000 RAM_ARM9:0208C2D8 00 00 81 E5 STR R0, [R1] RAM_ARM9:0208C2DC 6C FD FF EB BL waitForNextVFrame__ RAM_ARM9:0208C2E0 6B FD FF EB BL waitForNextVFrame__ RAM_ARM9:0208C2E4 76 FF FF EB BL readFSToDMA__ RAM_ARM9:0208C2E8 14 10 9D E5 LDR R1, [SP,#0x14] RAM_ARM9:0208C2EC 60 01 9F E5 LDR R0, =0x2153020 RAM_ARM9:0208C2F0 00 80 A0 E3 MOV R8, #0 RAM_ARM9:0208C2F4 08 80 80 E5 STR R8, [R0,#8] RAM_ARM9:0208C2F8 00 00 51 E3 CMP R1, #0 RAM_ARM9:0208C2FC 18 00 9D E5 LDR R0, [SP,#0x18] RAM_ARM9:0208C300 80 80 A0 13 MOVNE R8, #0x80 @ 'Ç' RAM_ARM9:0208C304 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C308 40 90 A0 E3 MOV R9, #0x40 @ '@' RAM_ARM9:0208C30C 01 07 A0 E3 MOV R0, #0x40000 @ intr RAM_ARM9:0208C310 00 90 A0 03 MOVEQ R9, #0 RAM_ARM9:0208C314 8E E1 FF EB BL OS_SetIrqMask__ RAM_ARM9:0208C318 00 10 9D E5 LDR R1, [SP] RAM_ARM9:0208C31C 04 00 9D E5 LDR R0, [SP,#4] RAM_ARM9:0208C320 00 10 81 E1 ORR R1, R1, R0 RAM_ARM9:0208C324 09 00 87 E1 ORR R0, R7, R9 RAM_ARM9:0208C328 08 00 80 E1 ORR R0, R0, R8 RAM_ARM9:0208C32C 00 08 A0 E1 MOV R0, R0,LSL#16 RAM_ARM9:0208C330 01 18 A0 E1 MOV R1, R1,LSL#16 RAM_ARM9:0208C334 20 08 A0 E1 MOV R0, R0,LSR#16 @ trigger RAM_ARM9:0208C338 21 18 A0 E1 MOV R1, R1,LSR#16 @ keyIntrData RAM_ARM9:0208C33C 23 FE FF EB BL PMi_SendSleepStart__ RAM_ARM9:0208C340 0C 81 9F E5 LDR R8, =0x2153020 RAM_ARM9:0208C344 08 00 98 E5 LDR R0, [R8,#8] RAM_ARM9:0208C348 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C34C 03 00 00 1A BNE loc_208C360 RAM_ARM9:0208C350 RAM_ARM9:0208C350 loc_208C350: @ CODE XREF: PM_GoSleepMode__+1F0j RAM_ARM9:0208C350 E4 EF FF EB BL OS_Halt__ RAM_ARM9:0208C354 08 00 98 E5 LDR R0, [R8,#8] RAM_ARM9:0208C358 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C35C FB FF FF 0A BEQ loc_208C350 RAM_ARM9:0208C360 RAM_ARM9:0208C360 loc_208C360: @ CODE XREF: PM_GoSleepMode__+1E0j RAM_ARM9:0208C360 00 80 A0 E3 MOV R8, #0 RAM_ARM9:0208C364 41 EB FF EB BL OS_IsTickAvailable__ RAM_ARM9:0208C368 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C36C 08 00 A0 13 MOVNE R0, #8 RAM_ARM9:0208C370 08 00 A0 01 MOVEQ R0, R8 RAM_ARM9:0208C374 01 07 80 E3 ORR R0, R0, #0x40000 @ intr RAM_ARM9:0208C378 75 E1 FF EB BL OS_SetIrqMask__ RAM_ARM9:0208C37C 08 00 17 E3 TST R7, #8 RAM_ARM9:0208C380 03 00 00 0A BEQ loc_208C394 RAM_ARM9:0208C384 D4 00 9F E5 LDR R0, =0x4000214 RAM_ARM9:0208C388 00 00 90 E5 LDR R0, [R0] RAM_ARM9:0208C38C 01 06 10 E3 TST R0, #0x100000 RAM_ARM9:0208C390 01 40 A0 13 MOVNE R4, #1 RAM_ARM9:0208C394 RAM_ARM9:0208C394 loc_208C394: @ CODE XREF: PM_GoSleepMode__+214j RAM_ARM9:0208C394 00 00 54 E3 CMP R4, #0 RAM_ARM9:0208C398 01 70 A0 E3 MOV R7, #1 RAM_ARM9:0208C39C 19 00 00 1A BNE loc_208C408 RAM_ARM9:0208C3A0 08 00 9D E5 LDR R0, [SP,#8] RAM_ARM9:0208C3A4 01 00 50 E3 CMP R0, #1 RAM_ARM9:0208C3A8 07 00 00 1A BNE loc_208C3CC RAM_ARM9:0208C3AC RAM_ARM9:0208C3AC loc_208C3AC: @ CODE XREF: PM_GoSleepMode__+258j RAM_ARM9:0208C3AC 07 00 A0 E1 MOV R0, R7 @ sw RAM_ARM9:0208C3B0 07 10 A0 E1 MOV R1, R7 @ led RAM_ARM9:0208C3B4 07 20 A0 E1 MOV R2, R7 @ skip RAM_ARM9:0208C3B8 07 30 A0 E1 MOV R3, R7 @ isSync RAM_ARM9:0208C3BC 28 00 00 EB BL PMi_SetLCDPower__ RAM_ARM9:0208C3C0 01 00 50 E3 CMP R0, #1 RAM_ARM9:0208C3C4 F8 FF FF 1A BNE loc_208C3AC RAM_ARM9:0208C3C8 0A 00 00 EA B loc_208C3F8 RAM_ARM9:0208C3CC @ --------------------------------------------------------------------------- RAM_ARM9:0208C3CC RAM_ARM9:0208C3CC loc_208C3CC: @ CODE XREF: PM_GoSleepMode__+23Cj RAM_ARM9:0208C3CC 07 00 A0 E1 MOV R0, R7 @ status RAM_ARM9:0208C3D0 5A FE FF EB BL PMi_SetLED__ RAM_ARM9:0208C3D4 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C3D8 06 00 00 0A BEQ loc_208C3F8 RAM_ARM9:0208C3DC 78 90 9F E5 LDR R9, =0x51D23 RAM_ARM9:0208C3E0 RAM_ARM9:0208C3E0 loc_208C3E0: @ CODE XREF: PM_GoSleepMode__+288j RAM_ARM9:0208C3E0 09 00 A0 E1 MOV R0, R9 RAM_ARM9:0208C3E4 8C ED FF EB BL DSi_regUnk__ RAM_ARM9:0208C3E8 07 00 A0 E1 MOV R0, R7 @ status RAM_ARM9:0208C3EC 53 FE FF EB BL PMi_SetLED__ RAM_ARM9:0208C3F0 00 00 50 E3 CMP R0, #0 RAM_ARM9:0208C3F4 F9 FF FF 1A BNE loc_208C3E0 RAM_ARM9:0208C3F8 RAM_ARM9:0208C3F8 loc_208C3F8: @ CODE XREF: PM_GoSleepMode__+25Cj RAM_ARM9:0208C3F8 @ PM_GoSleepMode__+26Cj RAM_ARM9:0208C3F8 01 03 A0 E3 MOV R0, #0x4000000 RAM_ARM9:0208C3FC 00 B0 80 E5 STR R11, [R0] RAM_ARM9:0208C400 01 0A 80 E2 ADD R0, R0, #0x1000 RAM_ARM9:0208C404 00 50 80 E5 STR R5, [R0] RAM_ARM9:0208C408 RAM_ARM9:0208C408 loc_208C408: @ CODE XREF: PM_GoSleepMode__+230j RAM_ARM9:0208C408 36 08 A0 E3 MOV R0, #0x360000 RAM_ARM9:0208C40C 82 ED FF EB BL DSi_regUnk__ RAM_ARM9:0208C410 40 50 9F E5 LDR R5, =0x4000208 RAM_ARM9:0208C414 B0 00 D5 E1 LDRH R0, [R5] RAM_ARM9:0208C418 0C 00 9D E5 LDR R0, [SP,#0xC] @ intr RAM_ARM9:0208C41C B0 80 C5 E1 STRH R8, [R5] RAM_ARM9:0208C420 4B E1 FF EB BL OS_SetIrqMask__ RAM_ARM9:0208C424 10 00 9D E5 LDR R0, [SP,#0x10] RAM_ARM9:0208C428 61 ED FF EB BL OS_RestoreInterrupts__ RAM_ARM9:0208C42C B0 00 D5 E1 LDRH R0, [R5] RAM_ARM9:0208C430 00 00 54 E3 CMP R4, #0 RAM_ARM9:0208C434 B0 60 C5 E1 STRH R6, [R5] RAM_ARM9:0208C438 00 00 00 0A BEQ loc_208C440 RAM_ARM9:0208C43C 9E FE FF EB BL sub_208BEBC RAM_ARM9:0208C440 @ --------------------------------------------------------------------------- RAM_ARM9:0208C440 RAM_ARM9:0208C440 loc_208C440: @ CODE XREF: PM_GoSleepMode__+2CCj RAM_ARM9:0208C440 0C 00 9F E5 LDR R0, =0x2153020 RAM_ARM9:0208C444 04 00 90 E5 LDR R0, [R0,#4] @ listp RAM_ARM9:0208C448 EA 00 00 EB BL PMi_ExecuteList__ RAM_ARM9:0208C44C 1C D0 8D E2 ADD SP, SP, #0x1C RAM_ARM9:0208C450 F0 8F BD E8 LDMFD SP!, {R4-R11,PC} RAM_ARM9:0208C450 @ End of function PM_GoSleepMode__ RAM_ARM9:0208C450 RAM_ARM9:0208C450 @ --------------------------------------------------------------------------- RAM_ARM9:0208C454 20 30 15 02 dword_208C454: .long 0x2153020 @ DATA XREF: PM_GoSleepMode__+8r RAM_ARM9:0208C454 @ PM_GoSleepMode__+180r ... RAM_ARM9:0208C458 08 02 00 04 dword_208C458: .long 0x4000208 @ DATA XREF: PM_GoSleepMode__+28r RAM_ARM9:0208C458 @ PM_GoSleepMode__+68r ... RAM_ARM9:0208C45C 23 1D 05 00 dword_208C45C: .long 0x51D23 @ DATA XREF: PM_GoSleepMode__+F0r RAM_ARM9:0208C45C @ PM_GoSleepMode__+124r ... RAM_ARM9:0208C460 14 02 00 04 dword_208C460: .long 0x4000214 @ DATA XREF: PM_GoSleepMode__+218r ----------------------------------------------------------------------------------------------------------------------- void PM_GoSleepMode(PMWakeUpTrigger trigger, PMLogic logic, u16 keyPattern) { BOOL prepIrq; // IME OSIntrMode prepIntrMode; // CPSR-IRQ OSIrqMask prepIntrMask; // IE BOOL powerOffFlag = FALSE; PMBackLightSwitch preTop; PMBackLightSwitch preBottom; u32 preGX; u32 preGXS; PMLCDPower preLCDPower; //---- call pre-callbacks PMi_ExecuteList(PMi_PreSleepCallbackList); //---- disable all interrupt prepIrq = OS_DisableIrq(); // IME D prepIntrMode = OS_DisableInterrupts(); // CPSR-IRQ D prepIntrMask = OS_DisableIrqMask((1 << OS_IRQ_TABLE_MAX) - 1); // IE D //---- interrupt setting (void)OS_SetIrqMask(OS_IE_FIFO_RECV); // enable PXI from ARM7 (void)OS_RestoreInterrupts(prepIntrMode); // CPSR-IRQ E (void)OS_EnableIrq(); // IME E //---- check card trigger if (trigger & PM_TRIGGER_CARD) { //---- if multi boot child, ignore card check flag if (MB_IsMultiBootChild()) { trigger &= ~PM_TRIGGER_CARD; } } //---- check cartridge trigger if (trigger & PM_TRIGGER_CARTRIDGE) { //---- if cartridge not exist, ignore cartridge check flag if (!CTRDG_IsExisting()) { trigger &= ~PM_TRIGGER_CARTRIDGE; } } //---- remember gx state preGX = reg_GX_DISPCNT; preGXS = reg_GXS_DB_DISPCNT; preLCDPower = PM_GetLCDPower(); //---- set backlight off (void)PM_GetBackLight(&preTop, &preBottom); (void)PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF); //---- wait a few frames after backlight off for avoiding appearance of afterimage { vu32 vcount = OS_GetVBlankCount(); while (vcount == OS_GetVBlankCount()) { } vcount = OS_GetVBlankCount(); reg_GX_DISPCNT = reg_GX_DISPCNT & ~REG_GX_DISPCNT_MODE_MASK; // main screen off GXS_DispOff(); while (vcount == OS_GetVBlankCount()) { } vcount = OS_GetVBlankCount(); while (vcount == OS_GetVBlankCount()) { } } //---- send SLEEP_START command to ARM7 { u16 param; param = (u16)(trigger | preTop << PM_BACKLIGHT_RECOVER_TOP_SHIFT | preBottom << PM_BACKLIGHT_RECOVER_BOTTOM_SHIFT); while (PMi_SendSleepStart(param, (u16)(logic | keyPattern)) != PM_SUCCESS) { } } //==== Halt ================ OS_Halt(); //========================== //---- wait 100ms OS_SpinWait(PMi_LCD_POWER_WAIT_TICK); //---- check card remove if ((trigger & PM_TRIGGER_CARD) && (OS_GetRequestIrqMask() & OS_IE_CARD_IREQ)) { powerOffFlag = TRUE; } //---- turn LCD on, and restore gx state if (!powerOffFlag) { if (preLCDPower == PM_LCD_POWER_ON) { (void)PMi_SetLCDPower(PM_LCD_POWER_ON, PM_LED_ON, TRUE, FALSE); } else { (void)PMi_SetLED(PM_LED_ON); } reg_GX_DISPCNT = preGX; reg_GXS_DB_DISPCNT = preGXS; } //---- restore all interrupt (void)OS_DisableInterrupts(); // CPSR-IRQ D (IME D in it) (void)OS_SetIrqMask(prepIntrMask); // IE R (void)OS_RestoreInterrupts(prepIntrMode); // CPSR-IRQ R (void)OS_RestoreIrq(prepIrq); // IME R //---- power off if need if (powerOffFlag) { (void)PM_ForceToPowerOff(); } //---- call post-callbacks PMi_ExecuteList(PMi_PostSleepCallbackList); }