DW ?\r
DQ ?\r
\r
+;------------------------------------------------------------------------------\r
+; _BackFromUserCode() takes control in real mode after 'retf' has been executed\r
+; by user code. It will be shadowed to somewhere in memory below 1MB.\r
+;------------------------------------------------------------------------------\r
_BackFromUserCode PROC\r
DB 16h ; push ss\r
DB 0eh ; push cs\r
_16GdtrBase DQ _NullSegDesc\r
_16Idtr FWORD (1 SHL 10) - 1\r
\r
+;------------------------------------------------------------------------------\r
+; _ToUserCode() takes control in real mode before passing control to user code.\r
+; It will be shadowed to somewhere in memory below 1MB.\r
+;------------------------------------------------------------------------------\r
_ToUserCode PROC\r
mov edi, ss\r
mov ss, edx ; set new segment selectors\r
DB 0\r
GdtEnd LABEL QWORD\r
\r
-;\r
-; @param RegSet Pointer to a IA32_DWORD_REGS structure\r
-; @param Transition Pointer to the transition code\r
-; @return The address of the 16-bit stack after returning from user code\r
-;\r
+;------------------------------------------------------------------------------\r
+; IA32_REGISTER_SET *\r
+; EFIAPI\r
+; InternalAsmThunk16 (\r
+; IN IA32_REGISTER_SET *RegisterSet,\r
+; IN OUT VOID *Transition\r
+; );\r
+;------------------------------------------------------------------------------\r
InternalAsmThunk16 PROC USES rbp rbx rsi rdi\r
mov r10d, ds\r
mov r11d, es\r