mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
Ring3: Placed UnicodeCollation driver into User space.
This commit is contained in:
parent
cd65706178
commit
93625d5489
@ -90,6 +90,8 @@
|
|||||||
UINT64 ESR; 0x318 // Exception syndrome register
|
UINT64 ESR; 0x318 // Exception syndrome register
|
||||||
UINT64 FAR; 0x320 // Fault Address Register
|
UINT64 FAR; 0x320 // Fault Address Register
|
||||||
UINT64 Type; 0x328 // Exception Type
|
UINT64 Type; 0x328 // Exception Type
|
||||||
|
UINT64 TTBR0; 0x330 // User Page Table
|
||||||
|
UINT64 Padding;0x338 // Alignment requirement
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GCC_ASM_EXPORT(ExceptionHandlersEnd)
|
GCC_ASM_EXPORT(ExceptionHandlersEnd)
|
||||||
@ -99,7 +101,7 @@ GCC_ASM_EXPORT(CommonCExceptionHandler)
|
|||||||
|
|
||||||
#define GP_CONTEXT_SIZE (32 * 8)
|
#define GP_CONTEXT_SIZE (32 * 8)
|
||||||
#define FP_CONTEXT_SIZE (32 * 16)
|
#define FP_CONTEXT_SIZE (32 * 16)
|
||||||
#define SYS_CONTEXT_SIZE ( 6 * 8) // 5 SYS regs + Alignment requirement (ie: the stack must be aligned on 0x10)
|
#define SYS_CONTEXT_SIZE ( 8 * 8) // 7 SYS regs + Alignment requirement (ie: the stack must be aligned on 0x10)
|
||||||
|
|
||||||
ASM_FUNC_ALIGN(ExceptionHandlerBase, 4096)
|
ASM_FUNC_ALIGN(ExceptionHandlerBase, 4096)
|
||||||
|
|
||||||
@ -264,6 +266,11 @@ ASM_PFX(CommonExceptionEntry):
|
|||||||
stp x2, x3, [x28, #-SYS_CONTEXT_SIZE]!
|
stp x2, x3, [x28, #-SYS_CONTEXT_SIZE]!
|
||||||
stp x4, x5, [x28, #0x10]
|
stp x4, x5, [x28, #0x10]
|
||||||
stp x6, x0, [x28, #0x20]
|
stp x6, x0, [x28, #0x20]
|
||||||
|
EL1_OR_EL2(x1)
|
||||||
|
1:mrs x2, ttbr0_el1
|
||||||
|
b 3f
|
||||||
|
2:mrs x2, ttbr0_el2
|
||||||
|
3:stp x2, xzr, [x28, #0x30]
|
||||||
|
|
||||||
// Push FP regs to Stack.
|
// Push FP regs to Stack.
|
||||||
stp q0, q1, [x28, #-FP_CONTEXT_SIZE]!
|
stp q0, q1, [x28, #-FP_CONTEXT_SIZE]!
|
||||||
@ -288,17 +295,12 @@ ASM_PFX(CommonExceptionEntry):
|
|||||||
cmp x2, 0 // Check whether EL0 process was interrupted
|
cmp x2, 0 // Check whether EL0 process was interrupted
|
||||||
b.ne NoTTBR0Switch
|
b.ne NoTTBR0Switch
|
||||||
adrp x1, ASM_PFX(CorePageTable)
|
adrp x1, ASM_PFX(CorePageTable)
|
||||||
|
ldr x4, [x1]
|
||||||
EL1_OR_EL2(x3)
|
EL1_OR_EL2(x3)
|
||||||
1:mrs x4, ttbr0_el1
|
1:msr ttbr0_el1, x4
|
||||||
str x4, [x1, #0x8] // UserPageTable
|
|
||||||
ldr x4, [x1] // CorePageTable
|
|
||||||
msr ttbr0_el1, x4
|
|
||||||
tlbi vmalle1
|
tlbi vmalle1
|
||||||
b 3f
|
b 3f
|
||||||
2:mrs x4, ttbr0_el2
|
2:msr ttbr0_el2, x4
|
||||||
str x4, [x1, #0x8] // UserPageTable
|
|
||||||
ldr x4, [x1] // CorePageTable
|
|
||||||
msr ttbr0_el2, x4
|
|
||||||
tlbi alle2
|
tlbi alle2
|
||||||
3:dsb sy
|
3:dsb sy
|
||||||
isb
|
isb
|
||||||
@ -324,14 +326,12 @@ NoTTBR0Switch:
|
|||||||
and x2, x2, #0xF
|
and x2, x2, #0xF
|
||||||
cmp x2, 0 // Check whether EL0 process was interrupted
|
cmp x2, 0 // Check whether EL0 process was interrupted
|
||||||
b.ne NoTTBR0Switch2
|
b.ne NoTTBR0Switch2
|
||||||
adrp x1, ASM_PFX(CorePageTable)
|
ldr x4, [x28, #(FP_CONTEXT_SIZE + 0x30)] // UserPageTable
|
||||||
EL1_OR_EL2(x3)
|
EL1_OR_EL2(x3)
|
||||||
1:ldr x4, [x1, #0x8] // UserPageTable
|
1:msr ttbr0_el1, x4
|
||||||
msr ttbr0_el1, x4
|
|
||||||
tlbi vmalle1
|
tlbi vmalle1
|
||||||
b 3f
|
b 3f
|
||||||
2:ldr x4, [x1, #0x8] // UserPageTable
|
2:msr ttbr0_el2, x4
|
||||||
msr ttbr0_el2, x4
|
|
||||||
tlbi alle2
|
tlbi alle2
|
||||||
3:dsb sy
|
3:dsb sy
|
||||||
isb
|
isb
|
||||||
@ -428,9 +428,6 @@ ASM_FUNC(RegisterEl0Stack)
|
|||||||
ASM_PFX(CorePageTable):
|
ASM_PFX(CorePageTable):
|
||||||
.ds.d 1
|
.ds.d 1
|
||||||
|
|
||||||
UserPageTable:
|
|
||||||
.ds.d 1
|
|
||||||
|
|
||||||
.balign 4096
|
.balign 4096
|
||||||
Padding:
|
Padding:
|
||||||
.ds.b 1
|
.ds.b 1
|
||||||
|
@ -43,8 +43,11 @@ This is the stack constructed by the exception handler (low address to high addr
|
|||||||
|
|
||||||
LR 0x54 # SVC Link register (we need to restore it)
|
LR 0x54 # SVC Link register (we need to restore it)
|
||||||
|
|
||||||
LR 0x58 # pushed by srsfd
|
TTBR0 0x58
|
||||||
CPSR 0x5c
|
Padding 0x5c
|
||||||
|
|
||||||
|
LR 0x60 # pushed by srsfd
|
||||||
|
CPSR 0x64
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -98,7 +101,7 @@ ASM_PFX(Fiq):
|
|||||||
ASM_PFX(ResetEntry):
|
ASM_PFX(ResetEntry):
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
@ We are already in SVC mode
|
@ We are already in SVC mode
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -111,6 +114,7 @@ ASM_PFX(UndefinedInstructionEntry):
|
|||||||
sub LR, LR, #4 @ Only -2 for Thumb, adjust in CommonExceptionEntry
|
sub LR, LR, #4 @ Only -2 for Thumb, adjust in CommonExceptionEntry
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -124,6 +128,7 @@ ASM_PFX(SoftwareInterruptEntry):
|
|||||||
isb
|
isb
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
@ We are already in SVC mode
|
@ We are already in SVC mode
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -136,6 +141,7 @@ ASM_PFX(PrefetchAbortEntry):
|
|||||||
sub LR,LR,#4
|
sub LR,LR,#4
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -148,6 +154,7 @@ ASM_PFX(DataAbortEntry):
|
|||||||
sub LR,LR,#8
|
sub LR,LR,#8
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -159,6 +166,7 @@ ASM_PFX(DataAbortEntry):
|
|||||||
ASM_PFX(ReservedExceptionEntry):
|
ASM_PFX(ReservedExceptionEntry):
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -171,6 +179,7 @@ ASM_PFX(IrqEntry):
|
|||||||
sub LR,LR,#4
|
sub LR,LR,#4
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -183,6 +192,7 @@ ASM_PFX(FiqEntry):
|
|||||||
sub LR,LR,#4
|
sub LR,LR,#4
|
||||||
srsdb #0x13! @ Store return state on SVC stack
|
srsdb #0x13! @ Store return state on SVC stack
|
||||||
cps #0x13 @ Switch to SVC for common stack
|
cps #0x13 @ Switch to SVC for common stack
|
||||||
|
sub SP, SP, #0x8 @ Save space for TTBR0
|
||||||
stmfd SP!,{LR} @ Store the link register for the current mode
|
stmfd SP!,{LR} @ Store the link register for the current mode
|
||||||
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
sub SP,SP,#0x20 @ Save space for SP, LR, PC, IFAR - CPSR
|
||||||
stmfd SP!,{R0-R12} @ Store the register state
|
stmfd SP!,{R0-R12} @ Store the register state
|
||||||
@ -217,7 +227,7 @@ ASM_PFX(AsmCommonExceptionEntry):
|
|||||||
mrc p15, 0, R1, c5, c0, 0 @ Read DFSR
|
mrc p15, 0, R1, c5, c0, 0 @ Read DFSR
|
||||||
str R1, [SP, #0x44] @ Store it in EFI_SYSTEM_CONTEXT_ARM.DFSR
|
str R1, [SP, #0x44] @ Store it in EFI_SYSTEM_CONTEXT_ARM.DFSR
|
||||||
|
|
||||||
ldr R1, [SP, #0x5c] @ srsdb saved pre-exception CPSR on the stack
|
ldr R1, [SP, #0x64] @ srsdb saved pre-exception CPSR on the stack
|
||||||
str R1, [SP, #0x40] @ Store it in EFI_SYSTEM_CONTEXT_ARM.CPSR
|
str R1, [SP, #0x40] @ Store it in EFI_SYSTEM_CONTEXT_ARM.CPSR
|
||||||
|
|
||||||
add R2, SP, #0x38 @ Make R2 point to EFI_SYSTEM_CONTEXT_ARM.LR
|
add R2, SP, #0x38 @ Make R2 point to EFI_SYSTEM_CONTEXT_ARM.LR
|
||||||
@ -229,20 +239,20 @@ ASM_PFX(AsmCommonExceptionEntry):
|
|||||||
stmdaeq R2, {sp}^ @ save unbanked sp
|
stmdaeq R2, {sp}^ @ save unbanked sp
|
||||||
@ else
|
@ else
|
||||||
stmdane R2, {lr} @ save SVC lr
|
stmdane R2, {lr} @ save SVC lr
|
||||||
addne R1, SP, #0x60 @ We pushed 0x60 bytes on the stack
|
addne R1, SP, #0x68 @ We pushed 0x68 bytes on the stack
|
||||||
strne R1, [SP, #0x34] @ Store it in EFI_SYSTEM_CONTEXT_ARM.SP
|
strne R1, [SP, #0x34] @ Store it in EFI_SYSTEM_CONTEXT_ARM.SP
|
||||||
|
|
||||||
|
|
||||||
ldr R5, [SP, #0x58] @ PC is the LR pushed by srsfd
|
ldr R5, [SP, #0x60] @ PC is the LR pushed by srsfd
|
||||||
@ Check to see if we have to adjust for Thumb entry
|
@ Check to see if we have to adjust for Thumb entry
|
||||||
sub r4, r0, #1 @ if (ExceptionType == 1 || ExceptionType == 2)) {
|
sub r4, r0, #1 @ if (ExceptionType == 1 || ExceptionType == 2)) {
|
||||||
cmp r4, #1 @ // UND & SVC have different LR adjust for Thumb
|
cmp r4, #1 @ // UND & SVC have different LR adjust for Thumb
|
||||||
bhi NoAdjustNeeded
|
bhi NoAdjustNeeded
|
||||||
|
|
||||||
ldr R1, [SP, #0x5c] @ srsdb saved pre-exception CPSR on the stack
|
ldr R1, [SP, #0x64] @ srsdb saved pre-exception CPSR on the stack
|
||||||
tst r1, #0x20 @ if ((CPSR & T)) == T) { // Thumb Mode on entry
|
tst r1, #0x20 @ if ((CPSR & T)) == T) { // Thumb Mode on entry
|
||||||
addne R5, R5, #2 @ PC += 2;
|
addne R5, R5, #2 @ PC += 2;
|
||||||
strne R5,[SP,#0x58] @ Update LR value pushed by srsfd
|
strne R5,[SP,#0x60] @ Update LR value pushed by srsfd
|
||||||
|
|
||||||
NoAdjustNeeded:
|
NoAdjustNeeded:
|
||||||
|
|
||||||
@ -251,17 +261,12 @@ NoAdjustNeeded:
|
|||||||
@ R0 is ExceptionType
|
@ R0 is ExceptionType
|
||||||
mov R1,SP @ R1 is SystemContext
|
mov R1,SP @ R1 is SystemContext
|
||||||
|
|
||||||
#if (FixedPcdGet32(PcdVFPEnabled))
|
|
||||||
vpush {d0-d15} @ save vstm registers in case they are used in optimizations
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ldr R5, [SP, #0x40] @ Saved Processor Status Register
|
ldr R5, [SP, #0x40] @ Saved Processor Status Register
|
||||||
and R5, R5, #0xF
|
and R5, R5, #0xF
|
||||||
cmp R5, 0 @ Check whether EL0 process was interrupted
|
cmp R5, 0 @ Check whether EL0 process was interrupted
|
||||||
bne NoTTBR0Switch
|
bne NoTTBR0Switch
|
||||||
mrc p15,0,R5,c2,c0,0 @ R5 == TTBR0
|
mrc p15,0,R5,c2,c0,0 @ R5 == TTBR0
|
||||||
ADRL (R6, UserPageTable)
|
str R5, [SP, #0x58]
|
||||||
str R5, [R6]
|
|
||||||
and R5, R5, #0x7F @ Preserve TTBR0 attributes
|
and R5, R5, #0x7F @ Preserve TTBR0 attributes
|
||||||
LDRL (R6, ASM_PFX(CorePageTable))
|
LDRL (R6, ASM_PFX(CorePageTable))
|
||||||
orr R6, R6, R5 @ Assign TTBR0 attributes
|
orr R6, R6, R5 @ Assign TTBR0 attributes
|
||||||
@ -273,6 +278,10 @@ NoAdjustNeeded:
|
|||||||
|
|
||||||
NoTTBR0Switch:
|
NoTTBR0Switch:
|
||||||
|
|
||||||
|
#if (FixedPcdGet32(PcdVFPEnabled))
|
||||||
|
vpush {d0-d15} @ save vstm registers in case they are used in optimizations
|
||||||
|
#endif
|
||||||
|
|
||||||
mov R4, SP @ Save current SP
|
mov R4, SP @ Save current SP
|
||||||
tst R4, #4
|
tst R4, #4
|
||||||
subne SP, SP, #4 @ Adjust SP if not 8-byte aligned
|
subne SP, SP, #4 @ Adjust SP if not 8-byte aligned
|
||||||
@ -292,11 +301,15 @@ CommonCExceptionHandler (
|
|||||||
|
|
||||||
mov SP, R4 @ Restore SP
|
mov SP, R4 @ Restore SP
|
||||||
|
|
||||||
|
#if (FixedPcdGet32(PcdVFPEnabled))
|
||||||
|
vpop {d0-d15}
|
||||||
|
#endif
|
||||||
|
|
||||||
ldr R4, [SP, #0x40] @ Saved Processor Status Register
|
ldr R4, [SP, #0x40] @ Saved Processor Status Register
|
||||||
and R4, R4, #0xF
|
and R4, R4, #0xF
|
||||||
cmp R4, 0 @ Check whether EL0 process was interrupted
|
cmp R4, 0 @ Check whether EL0 process was interrupted
|
||||||
bne NoTTBR0Switch2
|
bne NoTTBR0Switch2
|
||||||
LDRL (R4, UserPageTable)
|
ldr R4, [SP, #0x58] @ User Page Table
|
||||||
mcr p15,0,R4,c2,c0,0 @ TTBR0 == R4
|
mcr p15,0,R4,c2,c0,0 @ TTBR0 == R4
|
||||||
mcr p15,0,r0,c8,c7,0 @ TLBIALL, TLB Invalidate All.
|
mcr p15,0,r0,c8,c7,0 @ TLBIALL, TLB Invalidate All.
|
||||||
mcr p15,0,r0,c7,c5,6 @ BPIALL, Branch Predictor Invalidate All.
|
mcr p15,0,r0,c7,c5,6 @ BPIALL, Branch Predictor Invalidate All.
|
||||||
@ -305,10 +318,6 @@ CommonCExceptionHandler (
|
|||||||
|
|
||||||
NoTTBR0Switch2:
|
NoTTBR0Switch2:
|
||||||
|
|
||||||
#if (FixedPcdGet32(PcdVFPEnabled))
|
|
||||||
vpop {d0-d15}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ldr R1, [SP, #0x4c] @ Restore EFI_SYSTEM_CONTEXT_ARM.IFSR
|
ldr R1, [SP, #0x4c] @ Restore EFI_SYSTEM_CONTEXT_ARM.IFSR
|
||||||
mcr p15, 0, R1, c5, c0, 1 @ Write IFSR
|
mcr p15, 0, R1, c5, c0, 1 @ Write IFSR
|
||||||
|
|
||||||
@ -325,6 +334,7 @@ NoTTBR0Switch2:
|
|||||||
|
|
||||||
add SP,SP,#0x20 @ Clear out the remaining stack space
|
add SP,SP,#0x20 @ Clear out the remaining stack space
|
||||||
ldmfd SP!,{LR} @ restore the link register for this context
|
ldmfd SP!,{LR} @ restore the link register for this context
|
||||||
|
add SP, SP, #0x8 @ Clear out TTBR0 and Padding
|
||||||
rfefd SP! @ return from exception via srsfd stack slot
|
rfefd SP! @ return from exception via srsfd stack slot
|
||||||
|
|
||||||
ASM_FUNC_ALIGN(ExceptionHandlerFinal, 4096)
|
ASM_FUNC_ALIGN(ExceptionHandlerFinal, 4096)
|
||||||
@ -336,9 +346,6 @@ ASM_FUNC_ALIGN(ExceptionHandlerFinal, 4096)
|
|||||||
ASM_PFX(CorePageTable):
|
ASM_PFX(CorePageTable):
|
||||||
.ds.l 1
|
.ds.l 1
|
||||||
|
|
||||||
UserPageTable:
|
|
||||||
.ds.l 1
|
|
||||||
|
|
||||||
.balign 4096
|
.balign 4096
|
||||||
Padding:
|
Padding:
|
||||||
.ds.b 1
|
.ds.b 1
|
||||||
|
@ -90,7 +90,7 @@ APRIORI DXE {
|
|||||||
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
||||||
INF USER FatPkg/EnhancedFatDxe/Fat.inf
|
INF USER FatPkg/EnhancedFatDxe/Fat.inf
|
||||||
INF USER MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf
|
INF USER MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.inf
|
||||||
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
INF USER MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
|
INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
|
||||||
INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf
|
INF OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf
|
||||||
|
|
||||||
|
@ -82,7 +82,8 @@ ASM_FUNC(ArmCallRing3)
|
|||||||
stp q12, q13, [sp, #0xa0]
|
stp q12, q13, [sp, #0xa0]
|
||||||
stp q14, q15, [sp, #0x80]
|
stp q14, q15, [sp, #0x80]
|
||||||
|
|
||||||
stp xzr, x16, [sp, #0x70]
|
mrs x6, sp_el0
|
||||||
|
stp x6, x16, [sp, #0x70]
|
||||||
stp x17, x18, [sp, #0x60]
|
stp x17, x18, [sp, #0x60]
|
||||||
stp x19, x20, [sp, #0x50]
|
stp x19, x20, [sp, #0x50]
|
||||||
stp x21, x22, [sp, #0x40]
|
stp x21, x22, [sp, #0x40]
|
||||||
@ -138,7 +139,7 @@ ASM_FUNC(ReturnToCore)
|
|||||||
ldp q12, q13, [sp, #0xa0]
|
ldp q12, q13, [sp, #0xa0]
|
||||||
ldp q14, q15, [sp, #0x80]
|
ldp q14, q15, [sp, #0x80]
|
||||||
|
|
||||||
ldr x16, [sp, #0x78]
|
ldp x6, x16, [sp, #0x70]
|
||||||
ldp x17, x18, [sp, #0x60]
|
ldp x17, x18, [sp, #0x60]
|
||||||
ldp x19, x20, [sp, #0x50]
|
ldp x19, x20, [sp, #0x50]
|
||||||
ldp x21, x22, [sp, #0x40]
|
ldp x21, x22, [sp, #0x40]
|
||||||
@ -147,6 +148,7 @@ ASM_FUNC(ReturnToCore)
|
|||||||
ldp x27, x28, [sp, #0x10]
|
ldp x27, x28, [sp, #0x10]
|
||||||
ldp x29, x30, [sp]
|
ldp x29, x30, [sp]
|
||||||
add sp, sp, #0x100
|
add sp, sp, #0x100
|
||||||
|
msr sp_el0, x6
|
||||||
// Enable interrupts.
|
// Enable interrupts.
|
||||||
msr daifclr, #0xf
|
msr daifclr, #0xf
|
||||||
isb
|
isb
|
||||||
|
@ -12,8 +12,7 @@
|
|||||||
|
|
||||||
#include "DxeMain.h"
|
#include "DxeMain.h"
|
||||||
|
|
||||||
STATIC UINTN mSysCallStackTop;
|
UINTN gUserPageTable;
|
||||||
UINTN gUserPageTable;
|
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
@ -156,8 +155,6 @@ CallRing3 (
|
|||||||
IN UINTN *ReturnSP
|
IN UINTN *ReturnSP
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mSysCallStackTop = SysCallStackTop;
|
|
||||||
|
|
||||||
return ArmCallRing3 (
|
return ArmCallRing3 (
|
||||||
Data,
|
Data,
|
||||||
UserStackTop,
|
UserStackTop,
|
||||||
|
@ -76,6 +76,9 @@ ASM_FUNC(ArmCallRing3)
|
|||||||
ldr R6, [SP, #0x28]
|
ldr R6, [SP, #0x28]
|
||||||
// R7 is gUserPageTable
|
// R7 is gUserPageTable
|
||||||
ldr R7, [SP, #0x2C]
|
ldr R7, [SP, #0x2C]
|
||||||
|
// Save old SP_usr and LR_usr on Core Stack.
|
||||||
|
sub SP, SP, #0x8
|
||||||
|
stmia SP, {SP, LR}^
|
||||||
|
|
||||||
#if (FixedPcdGet32(PcdVFPEnabled))
|
#if (FixedPcdGet32(PcdVFPEnabled))
|
||||||
// Save vstm registers in case they are used in optimizations.
|
// Save vstm registers in case they are used in optimizations.
|
||||||
@ -135,6 +138,10 @@ ASM_FUNC(ReturnToCore)
|
|||||||
vpop {d0-d15}
|
vpop {d0-d15}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Restore old SP_usr and LR_usr.
|
||||||
|
ldmia SP, {SP, LR}^
|
||||||
|
add SP, SP, #0x8
|
||||||
|
|
||||||
pop {R4-R12, LR}
|
pop {R4-R12, LR}
|
||||||
|
|
||||||
// Enable interrupts.
|
// Enable interrupts.
|
||||||
|
@ -11,8 +11,7 @@
|
|||||||
|
|
||||||
#include "DxeMain.h"
|
#include "DxeMain.h"
|
||||||
|
|
||||||
STATIC UINTN mSysCallStackTop;
|
UINTN gUserPageTable;
|
||||||
UINTN gUserPageTable;
|
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
@ -151,8 +150,6 @@ CallRing3 (
|
|||||||
IN UINTN *ReturnSP
|
IN UINTN *ReturnSP
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mSysCallStackTop = SysCallStackTop;
|
|
||||||
|
|
||||||
return ArmCallRing3 (
|
return ArmCallRing3 (
|
||||||
Data,
|
Data,
|
||||||
UserStackTop,
|
UserStackTop,
|
||||||
|
@ -180,24 +180,27 @@ ASM_PFX(CallRing3):
|
|||||||
push ebp
|
push ebp
|
||||||
push edi
|
push edi
|
||||||
push esi
|
push esi
|
||||||
|
; Save old SysCallStackTop.
|
||||||
|
push dword MSR_IA32_SYSENTER_ESP
|
||||||
|
call ASM_PFX(AsmReadMsr64)
|
||||||
|
pop ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
; Save Core Stack pointer.
|
; Save Core Stack pointer.
|
||||||
mov ebx, [esp + 4 * 8] ; ReturnSP
|
mov ebx, [esp + 4 * 9] ; ReturnSP
|
||||||
mov [ebx], esp
|
mov [ebx], esp
|
||||||
|
|
||||||
mov ebx, [esp + 4 * 7]
|
|
||||||
mov [ASM_PFX(SysCallStackTop)], ebx
|
|
||||||
mov edx, 0
|
mov edx, 0
|
||||||
mov eax, ebx
|
mov eax, [esp + 4 * 8] ; SysCallStackTop
|
||||||
mov ecx, MSR_IA32_SYSENTER_ESP
|
mov ecx, MSR_IA32_SYSENTER_ESP
|
||||||
wrmsr
|
wrmsr
|
||||||
|
|
||||||
SetRing3DataSegmentSelectors
|
SetRing3DataSegmentSelectors
|
||||||
|
|
||||||
; Prepare SYSEXIT arguments.
|
; Prepare SYSEXIT arguments.
|
||||||
mov ecx, [esp + 4 * 6] ; UserStackTop
|
mov ecx, [esp + 4 * 7] ; UserStackTop
|
||||||
mov edx, [ASM_PFX(gRing3EntryPoint)]
|
mov edx, [ASM_PFX(gRing3EntryPoint)]
|
||||||
mov eax, [esp + 4 * 5] ; Data
|
mov eax, [esp + 4 * 6] ; Data
|
||||||
|
|
||||||
; Switch to User Stack.
|
; Switch to User Stack.
|
||||||
mov ebp, ecx
|
mov ebp, ecx
|
||||||
@ -223,8 +226,15 @@ ASM_PFX(SysCallEnd):
|
|||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
global ASM_PFX(ReturnToCore)
|
global ASM_PFX(ReturnToCore)
|
||||||
ASM_PFX(ReturnToCore):
|
ASM_PFX(ReturnToCore):
|
||||||
mov eax, [esp + 4] ; Status
|
mov ebx, [esp + 4] ; Status
|
||||||
mov esp, [esp + 4*2] ; ReturnSP
|
mov esp, [esp + 4*2] ; ReturnSP
|
||||||
|
; Restore old SysCallStackTop.
|
||||||
|
mov edx, 0
|
||||||
|
pop eax
|
||||||
|
mov ecx, MSR_IA32_SYSENTER_ESP
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
mov eax, ebx
|
||||||
pop esi
|
pop esi
|
||||||
pop edi
|
pop edi
|
||||||
pop ebp
|
pop ebp
|
||||||
@ -245,5 +255,5 @@ ASM_PFX(gUserPageTable):
|
|||||||
resd 1
|
resd 1
|
||||||
|
|
||||||
ALIGN 4096
|
ALIGN 4096
|
||||||
ASM_PFX(SysCallStackTop):
|
Padding:
|
||||||
resd 1
|
resd 1
|
||||||
|
@ -60,9 +60,6 @@ GoToRing3 (
|
|||||||
VA_END (Marker);
|
VA_END (Marker);
|
||||||
ForbidSupervisorAccessToUserMemory ();
|
ForbidSupervisorAccessToUserMemory ();
|
||||||
//
|
//
|
||||||
// TODO: Get(),Set() for old SysCallStackTop.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// TODO: Allocate new stacks (only for EFI_FILE_PROTOCOL instances?),
|
// TODO: Allocate new stacks (only for EFI_FILE_PROTOCOL instances?),
|
||||||
// because UserDriver can be interrupted and interrupt handler may call the same UserDriver again.
|
// because UserDriver can be interrupted and interrupt handler may call the same UserDriver again.
|
||||||
//
|
//
|
||||||
@ -83,16 +80,20 @@ STATIC
|
|||||||
USER_SPACE_DRIVER *
|
USER_SPACE_DRIVER *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FindUserSpaceDriver (
|
FindUserSpaceDriver (
|
||||||
IN VOID *CoreWrapper
|
IN VOID *CoreWrapper,
|
||||||
|
OUT UINTN *OldPageTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LIST_ENTRY *Link;
|
LIST_ENTRY *Link;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
|
|
||||||
|
ASSERT (OldPageTable != NULL);
|
||||||
|
|
||||||
for (Link = gUserSpaceDriversHead.ForwardLink; Link != &gUserSpaceDriversHead; Link = Link->ForwardLink) {
|
for (Link = gUserSpaceDriversHead.ForwardLink; Link != &gUserSpaceDriversHead; Link = Link->ForwardLink) {
|
||||||
UserDriver = BASE_CR (Link, USER_SPACE_DRIVER, Link);
|
UserDriver = BASE_CR (Link, USER_SPACE_DRIVER, Link);
|
||||||
|
|
||||||
if (UserDriver->CoreWrapper == CoreWrapper) {
|
if (UserDriver->CoreWrapper == CoreWrapper) {
|
||||||
|
*OldPageTable = gUserPageTable;
|
||||||
gUserPageTable = UserDriver->UserPageTable;
|
gUserPageTable = UserDriver->UserPageTable;
|
||||||
return UserDriver;
|
return UserDriver;
|
||||||
}
|
}
|
||||||
@ -112,8 +113,9 @@ CoreDriverBindingSupported (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -131,6 +133,8 @@ CoreDriverBindingSupported (
|
|||||||
RemainingDevicePath
|
RemainingDevicePath
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,8 +149,9 @@ CoreDriverBindingStart (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -164,6 +169,8 @@ CoreDriverBindingStart (
|
|||||||
RemainingDevicePath
|
RemainingDevicePath
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,8 +186,9 @@ CoreDriverBindingStop (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -199,6 +207,8 @@ CoreDriverBindingStop (
|
|||||||
ChildHandleBuffer
|
ChildHandleBuffer
|
||||||
);
|
);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,8 +222,9 @@ CoreFileClose (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -232,6 +243,8 @@ CoreFileClose (
|
|||||||
FreePool (UserDriver->CoreWrapper);
|
FreePool (UserDriver->CoreWrapper);
|
||||||
RemoveEntryList (&UserDriver->Link);
|
RemoveEntryList (&UserDriver->Link);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,6 +274,7 @@ CoreFileRead (
|
|||||||
UINT32 PagesNumber;
|
UINT32 PagesNumber;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
if ((This == NULL) || (BufferSize == NULL)) {
|
if ((This == NULL) || (BufferSize == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -268,7 +282,7 @@ CoreFileRead (
|
|||||||
//
|
//
|
||||||
// gUserPageTable must be set before alloctation of EfiRing3MemoryType pages.
|
// gUserPageTable must be set before alloctation of EfiRing3MemoryType pages.
|
||||||
//
|
//
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -284,6 +298,7 @@ CoreFileRead (
|
|||||||
&Ring3Pages
|
&Ring3Pages
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,6 +332,8 @@ CoreFileRead (
|
|||||||
|
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,10 +357,12 @@ CoreFileSetPosition (
|
|||||||
IN UINT64 Position
|
IN UINT64 Position
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -353,40 +372,43 @@ CoreFileSetPosition (
|
|||||||
ForbidSupervisorAccessToUserMemory ();
|
ForbidSupervisorAccessToUserMemory ();
|
||||||
|
|
||||||
#if defined (MDE_CPU_X64) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_X64) || defined (MDE_CPU_AARCH64)
|
||||||
return GoToRing3 (
|
Status = GoToRing3 (
|
||||||
2,
|
2,
|
||||||
EntryPoint,
|
EntryPoint,
|
||||||
UserDriver,
|
UserDriver,
|
||||||
This,
|
This,
|
||||||
Position
|
Position
|
||||||
);
|
);
|
||||||
#elif defined (MDE_CPU_IA32)
|
#elif defined (MDE_CPU_IA32)
|
||||||
//
|
//
|
||||||
// UINT64 Position is passed as 2 double words on stack.
|
// UINT64 Position is passed as 2 double words on stack.
|
||||||
//
|
//
|
||||||
return GoToRing3 (
|
Status = GoToRing3 (
|
||||||
3,
|
3,
|
||||||
EntryPoint,
|
EntryPoint,
|
||||||
UserDriver,
|
UserDriver,
|
||||||
This,
|
This,
|
||||||
Position
|
Position
|
||||||
);
|
);
|
||||||
#elif defined (MDE_CPU_ARM)
|
#elif defined (MDE_CPU_ARM)
|
||||||
//
|
//
|
||||||
// UINT64 Position is passed as 2 words in 2 registers and is aligned on 8 bytes.
|
// UINT64 Position is passed as 2 words in 2 registers and is aligned on 8 bytes.
|
||||||
// R0 == This, R1 == NULL, R2 == Position_Low, R3 == Position_High.
|
// R0 == This, R1 == NULL, R2 == Position_Low, R3 == Position_High.
|
||||||
//
|
//
|
||||||
return GoToRing3 (
|
Status = GoToRing3 (
|
||||||
4,
|
4,
|
||||||
EntryPoint,
|
EntryPoint,
|
||||||
UserDriver,
|
UserDriver,
|
||||||
This,
|
This,
|
||||||
NULL,
|
NULL,
|
||||||
(UINT32)Position,
|
(UINT32)Position,
|
||||||
(UINT32)(Position >> 32)
|
(UINT32)(Position >> 32)
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
@ -401,12 +423,13 @@ CoreFileGetPosition (
|
|||||||
EFI_PHYSICAL_ADDRESS Ring3Position;
|
EFI_PHYSICAL_ADDRESS Ring3Position;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
if ((This == NULL) || (Position == NULL)) {
|
if ((This == NULL) || (Position == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -418,6 +441,7 @@ CoreFileGetPosition (
|
|||||||
&Ring3Position
|
&Ring3Position
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,6 +464,8 @@ CoreFileGetPosition (
|
|||||||
|
|
||||||
CoreFreePages (Ring3Position, 1);
|
CoreFreePages (Ring3Position, 1);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,12 +487,13 @@ CoreFileGetInfo (
|
|||||||
UINT32 PagesNumber;
|
UINT32 PagesNumber;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
if ((This == NULL) || (BufferSize == NULL)) {
|
if ((This == NULL) || (BufferSize == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -484,6 +511,7 @@ CoreFileGetInfo (
|
|||||||
&Ring3Pages
|
&Ring3Pages
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,6 +554,8 @@ CoreFileGetInfo (
|
|||||||
|
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -620,12 +650,13 @@ CoreFileOpen (
|
|||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
USER_SPACE_DRIVER *NewDriver;
|
USER_SPACE_DRIVER *NewDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
if ((This == NULL) || (NewHandle == NULL) || (FileName == NULL)) {
|
if ((This == NULL) || (NewHandle == NULL) || (FileName == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -644,6 +675,7 @@ CoreFileOpen (
|
|||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*NewHandle = NULL;
|
*NewHandle = NULL;
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,6 +689,7 @@ CoreFileOpen (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*NewHandle = NULL;
|
*NewHandle = NULL;
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -709,6 +742,7 @@ CoreFileOpen (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*NewHandle = NULL;
|
*NewHandle = NULL;
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -716,6 +750,7 @@ CoreFileOpen (
|
|||||||
if (NewFile == NULL) {
|
if (NewFile == NULL) {
|
||||||
*NewHandle = NULL;
|
*NewHandle = NULL;
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -751,6 +786,8 @@ CoreFileOpen (
|
|||||||
|
|
||||||
CoreFreePages (Ring3Pages, PagesNumber);
|
CoreFreePages (Ring3Pages, PagesNumber);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -768,12 +805,13 @@ CoreOpenVolume (
|
|||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
USER_SPACE_DRIVER *NewDriver;
|
USER_SPACE_DRIVER *NewDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
if (Root == NULL) {
|
if (Root == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -790,6 +828,7 @@ CoreOpenVolume (
|
|||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*Root = NULL;
|
*Root = NULL;
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -805,6 +844,7 @@ CoreOpenVolume (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*Root = NULL;
|
*Root = NULL;
|
||||||
CoreFreePages (Physical, 1);
|
CoreFreePages (Physical, 1);
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -812,6 +852,7 @@ CoreOpenVolume (
|
|||||||
if (File == NULL) {
|
if (File == NULL) {
|
||||||
*Root = NULL;
|
*Root = NULL;
|
||||||
CoreFreePages (Physical, 1);
|
CoreFreePages (Physical, 1);
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,6 +888,8 @@ CoreOpenVolume (
|
|||||||
|
|
||||||
CoreFreePages (Physical, 1);
|
CoreFreePages (Physical, 1);
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,8 +907,9 @@ CoreUnicodeCollationStriColl (
|
|||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
UINTN Size1;
|
UINTN Size1;
|
||||||
UINTN Size2;
|
UINTN Size2;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -880,6 +924,7 @@ CoreUnicodeCollationStriColl (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -900,6 +945,8 @@ CoreUnicodeCollationStriColl (
|
|||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1 + Size2));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1 + Size2));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return (INTN)Status;
|
return (INTN)Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -917,8 +964,9 @@ CoreUnicodeCollationMetaiMatch (
|
|||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
UINTN Size1;
|
UINTN Size1;
|
||||||
UINTN Size2;
|
UINTN Size2;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -933,6 +981,7 @@ CoreUnicodeCollationMetaiMatch (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,6 +1002,8 @@ CoreUnicodeCollationMetaiMatch (
|
|||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1 + Size2));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1 + Size2));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return (BOOLEAN)Status;
|
return (BOOLEAN)Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,8 +1019,9 @@ CoreUnicodeCollationStrLwr (
|
|||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
UINTN Size1;
|
UINTN Size1;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -983,6 +1035,7 @@ CoreUnicodeCollationStrLwr (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1004,6 +1057,8 @@ CoreUnicodeCollationStrLwr (
|
|||||||
ForbidSupervisorAccessToUserMemory ();
|
ForbidSupervisorAccessToUserMemory ();
|
||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
@ -1018,8 +1073,9 @@ CoreUnicodeCollationStrUpr (
|
|||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
UINTN Size1;
|
UINTN Size1;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -1033,6 +1089,7 @@ CoreUnicodeCollationStrUpr (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1054,6 +1111,8 @@ CoreUnicodeCollationStrUpr (
|
|||||||
ForbidSupervisorAccessToUserMemory ();
|
ForbidSupervisorAccessToUserMemory ();
|
||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (Size1));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
@ -1069,8 +1128,9 @@ CoreUnicodeCollationFatToStr (
|
|||||||
EFI_PHYSICAL_ADDRESS UserMem;
|
EFI_PHYSICAL_ADDRESS UserMem;
|
||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -1082,6 +1142,7 @@ CoreUnicodeCollationFatToStr (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1105,6 +1166,8 @@ CoreUnicodeCollationFatToStr (
|
|||||||
ForbidSupervisorAccessToUserMemory ();
|
ForbidSupervisorAccessToUserMemory ();
|
||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (FatSize * 3));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (FatSize * 3));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
@ -1121,8 +1184,9 @@ CoreUnicodeCollationStrToFat (
|
|||||||
USER_SPACE_DRIVER *UserDriver;
|
USER_SPACE_DRIVER *UserDriver;
|
||||||
VOID *EntryPoint;
|
VOID *EntryPoint;
|
||||||
UINTN Size1;
|
UINTN Size1;
|
||||||
|
UINTN OldPageTable;
|
||||||
|
|
||||||
UserDriver = FindUserSpaceDriver (This);
|
UserDriver = FindUserSpaceDriver (This, &OldPageTable);
|
||||||
ASSERT (UserDriver != NULL);
|
ASSERT (UserDriver != NULL);
|
||||||
|
|
||||||
This = UserDriver->UserSpaceDriver;
|
This = UserDriver->UserSpaceDriver;
|
||||||
@ -1136,6 +1200,7 @@ CoreUnicodeCollationStrToFat (
|
|||||||
&UserMem
|
&UserMem
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,5 +1225,7 @@ CoreUnicodeCollationStrToFat (
|
|||||||
|
|
||||||
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (FatSize + Size1));
|
CoreFreePages (UserMem, EFI_SIZE_TO_PAGES (FatSize + Size1));
|
||||||
|
|
||||||
|
gUserPageTable = OldPageTable;
|
||||||
|
|
||||||
return (BOOLEAN)Status;
|
return (BOOLEAN)Status;
|
||||||
}
|
}
|
||||||
|
@ -218,6 +218,7 @@ ASM_PFX(CallRing3):
|
|||||||
push r13
|
push r13
|
||||||
push r14
|
push r14
|
||||||
push r15
|
push r15
|
||||||
|
push qword [ASM_PFX(SysCallStackTop)]
|
||||||
|
|
||||||
; Save Core Stack pointer.
|
; Save Core Stack pointer.
|
||||||
mov [r9], rsp
|
mov [r9], rsp
|
||||||
@ -260,6 +261,7 @@ ASM_PFX(SysCallEnd):
|
|||||||
global ASM_PFX(ReturnToCore)
|
global ASM_PFX(ReturnToCore)
|
||||||
ASM_PFX(ReturnToCore):
|
ASM_PFX(ReturnToCore):
|
||||||
mov rsp, rdx
|
mov rsp, rdx
|
||||||
|
pop qword [ASM_PFX(SysCallStackTop)]
|
||||||
pop r15
|
pop r15
|
||||||
pop r14
|
pop r14
|
||||||
pop r13
|
pop r13
|
||||||
|
@ -265,7 +265,7 @@ INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
|||||||
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
INF USER MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
||||||
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
||||||
|
@ -266,7 +266,7 @@ INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
|||||||
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
INF USER MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
||||||
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
||||||
|
@ -295,7 +295,7 @@ INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
|
|||||||
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
INF MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
|
||||||
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
INF USER MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
|
||||||
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
|
||||||
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
|
||||||
|
Loading…
x
Reference in New Issue
Block a user