Return EFI_INVALID_PARAMETER when Type has either EVT_NOTIFY_SIGNAL or EVT_NOTIFY_WAIT set and NotifyTpl is not a supported TPL level.

Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13222 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lzeng14 2012-04-26 03:32:53 +00:00
parent 8d3000031d
commit 670d4d88ac
3 changed files with 82 additions and 7 deletions

View File

@ -1409,7 +1409,7 @@ CoreExit (
/** /**
Creates a general-purpose event structure. Creates an event.
@param Type The type of event to create and its mode and @param Type The type of event to create and its mode and
attributes attributes
@ -1439,7 +1439,7 @@ CoreCreateEvent (
/** /**
Creates a general-purpose event structure Creates an event in a group.
@param Type The type of event to create and its mode and @param Type The type of event to create and its mode and
attributes attributes
@ -1469,7 +1469,36 @@ CoreCreateEventEx (
OUT EFI_EVENT *Event OUT EFI_EVENT *Event
); );
/**
Creates a general-purpose event structure
@param Type The type of event to create and its mode and
attributes
@param NotifyTpl The task priority level of event notifications
@param NotifyFunction Pointer to the events notification function
@param NotifyContext Pointer to the notification functions context;
corresponds to parameter "Context" in the
notification function
@param EventGroup GUID for EventGroup if NULL act the same as
gBS->CreateEvent().
@param Event Pointer to the newly created event if the call
succeeds; undefined otherwise
@retval EFI_SUCCESS The event structure was created
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value
@retval EFI_OUT_OF_RESOURCES The event could not be allocated
**/
EFI_STATUS
EFIAPI
CoreCreateEventInternal (
IN UINT32 Type,
IN EFI_TPL NotifyTpl,
IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
IN CONST VOID *NotifyContext, OPTIONAL
IN CONST EFI_GUID *EventGroup, OPTIONAL
OUT EFI_EVENT *Event
);
/** /**
Sets the type of timer and the trigger time for a timer event. Sets the type of timer and the trigger time for a timer event.

View File

@ -1,7 +1,7 @@
/** @file /** @file
UEFI Event support functions implemented in this file. UEFI Event support functions implemented in this file.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -277,7 +277,7 @@ CoreNotifySignalList (
/** /**
Creates a general-purpose event structure. Creates an event.
@param Type The type of event to create and its mode and @param Type The type of event to create and its mode and
attributes attributes
@ -310,7 +310,7 @@ CoreCreateEvent (
/** /**
Creates a general-purpose event structure Creates an event in a group.
@param Type The type of event to create and its mode and @param Type The type of event to create and its mode and
attributes attributes
@ -339,6 +339,51 @@ CoreCreateEventEx (
IN CONST EFI_GUID *EventGroup, OPTIONAL IN CONST EFI_GUID *EventGroup, OPTIONAL
OUT EFI_EVENT *Event OUT EFI_EVENT *Event
) )
{
//
// If it's a notify type of event, check for invalid NotifyTpl
//
if ((Type & (EVT_NOTIFY_WAIT | EVT_NOTIFY_SIGNAL)) != 0) {
if (NotifyTpl != TPL_APPLICATION &&
NotifyTpl != TPL_CALLBACK &&
NotifyTpl != TPL_NOTIFY) {
return EFI_INVALID_PARAMETER;
}
}
return CoreCreateEventInternal (Type, NotifyTpl, NotifyFunction, NotifyContext, EventGroup, Event);
}
/**
Creates a general-purpose event structure
@param Type The type of event to create and its mode and
attributes
@param NotifyTpl The task priority level of event notifications
@param NotifyFunction Pointer to the events notification function
@param NotifyContext Pointer to the notification functions context;
corresponds to parameter "Context" in the
notification function
@param EventGroup GUID for EventGroup if NULL act the same as
gBS->CreateEvent().
@param Event Pointer to the newly created event if the call
succeeds; undefined otherwise
@retval EFI_SUCCESS The event structure was created
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value
@retval EFI_OUT_OF_RESOURCES The event could not be allocated
**/
EFI_STATUS
EFIAPI
CoreCreateEventInternal (
IN UINT32 Type,
IN EFI_TPL NotifyTpl,
IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL
IN CONST VOID *NotifyContext, OPTIONAL
IN CONST EFI_GUID *EventGroup, OPTIONAL
OUT EFI_EVENT *Event
)
{ {
EFI_STATUS Status; EFI_STATUS Status;
IEVENT *IEvent; IEVENT *IEvent;

View File

@ -1,7 +1,7 @@
/** @file /** @file
Core Timer Services Core Timer Services
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -172,11 +172,12 @@ CoreInitializeTimer (
{ {
EFI_STATUS Status; EFI_STATUS Status;
Status = CoreCreateEvent ( Status = CoreCreateEventInternal (
EVT_NOTIFY_SIGNAL, EVT_NOTIFY_SIGNAL,
TPL_HIGH_LEVEL - 1, TPL_HIGH_LEVEL - 1,
CoreCheckTimers, CoreCheckTimers,
NULL, NULL,
NULL,
&mEfiCheckTimerEvent &mEfiCheckTimerEvent
); );
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);