mirror of https://github.com/acidanthera/audk.git
SysCall: Added NumberOfCalls to USER_SPACE_DRIVER.
This commit is contained in:
parent
72c747b365
commit
734748e862
|
@ -238,6 +238,7 @@ typedef struct {
|
|||
VOID *UserSpaceDriver;
|
||||
UINTN UserPageTable;
|
||||
UINTN UserStackTop;
|
||||
UINT8 NumberOfCalls;
|
||||
LIST_ENTRY Link;
|
||||
} USER_SPACE_DRIVER;
|
||||
|
||||
|
|
|
@ -1743,6 +1743,7 @@ CoreStartImage (
|
|||
UserDriver->UserSpaceDriver = (VOID *)Image->EntryPoint;
|
||||
UserDriver->UserPageTable = Image->UserPageTable;
|
||||
UserDriver->UserStackTop = Image->UserStackTop;
|
||||
UserDriver->NumberOfCalls = 0;
|
||||
|
||||
InsertTailList (&gUserSpaceDriversHead, &UserDriver->Link);
|
||||
|
||||
|
|
|
@ -548,6 +548,7 @@ CallBootService (
|
|||
NewDriver->UserSpaceDriver = UserArgList[Index + 1];
|
||||
NewDriver->UserPageTable = UserDriver->UserPageTable;
|
||||
NewDriver->UserStackTop = UserDriver->UserStackTop;
|
||||
NewDriver->NumberOfCalls = 0;
|
||||
|
||||
InsertTailList (&gUserSpaceDriversHead, &NewDriver->Link);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include "DxeMain.h"
|
||||
#include "SupportedProtocols.h"
|
||||
|
||||
#define MAX_CALL 1
|
||||
|
||||
LIST_ENTRY gUserSpaceDriversHead = INITIALIZE_LIST_HEAD_VARIABLE (gUserSpaceDriversHead);
|
||||
|
||||
EFI_STATUS
|
||||
|
@ -33,6 +35,10 @@ GoToRing3 (
|
|||
EFI_PHYSICAL_ADDRESS Ring3Pages;
|
||||
UINT32 PagesNumber;
|
||||
|
||||
if (UserDriver->NumberOfCalls > MAX_CALL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
PagesNumber = (UINT32)EFI_SIZE_TO_PAGES (sizeof (RING3_CALL_DATA) + Number * sizeof (UINTN));
|
||||
|
||||
Status = CoreAllocatePages (
|
||||
|
@ -61,11 +67,15 @@ GoToRing3 (
|
|||
// TODO: Allocate new stacks (only for EFI_FILE_PROTOCOL instances?),
|
||||
// because UserDriver can be interrupted and interrupt handler may call the same UserDriver again.
|
||||
//
|
||||
++UserDriver->NumberOfCalls;
|
||||
|
||||
Status = CallRing3 (
|
||||
Input,
|
||||
UserDriver->UserStackTop
|
||||
);
|
||||
|
||||
--UserDriver->NumberOfCalls;
|
||||
|
||||
CoreFreePages (Ring3Pages, PagesNumber);
|
||||
|
||||
return Status;
|
||||
|
@ -754,6 +764,7 @@ CoreFileOpen (
|
|||
NewDriver->CoreWrapper = NewFile;
|
||||
NewDriver->UserPageTable = UserDriver->UserPageTable;
|
||||
NewDriver->UserStackTop = UserDriver->UserStackTop;
|
||||
NewDriver->NumberOfCalls = 0;
|
||||
|
||||
AllowSupervisorAccessToUserMemory ();
|
||||
NewDriver->UserSpaceDriver = *Ring3NewHandle;
|
||||
|
@ -855,6 +866,7 @@ CoreSimpleFileSystemOpenVolume (
|
|||
NewDriver->CoreWrapper = File;
|
||||
NewDriver->UserPageTable = UserDriver->UserPageTable;
|
||||
NewDriver->UserStackTop = UserDriver->UserStackTop;
|
||||
NewDriver->NumberOfCalls = 0;
|
||||
|
||||
AllowSupervisorAccessToUserMemory ();
|
||||
NewDriver->UserSpaceDriver = *Ring3Root;
|
||||
|
|
Loading…
Reference in New Issue