aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2019-05-21 18:19:01 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2019-05-31 23:27:11 +0200
commitf09cea36ca086c7b5df372bdf38168c2ce5609ca (patch)
treee33556947d0aac81e079ed003b6da0ce20deaeb0 /include
parent8a802a2eefd36865eaa3d927d1db7af63bb2d922 (diff)
downloadu-boot-f09cea36ca086c7b5df372bdf38168c2ce5609ca.zip
u-boot-f09cea36ca086c7b5df372bdf38168c2ce5609ca.tar.gz
u-boot-f09cea36ca086c7b5df372bdf38168c2ce5609ca.tar.bz2
efi_loader: correct notification of protocol installation
When a protocol is installed the handle should be queued for the registration key of each registered event. LocateHandle() should return the first handle from the queue for the registration key and delete it from the queue. Implement the queueing. Correct the selftest. With the patch the UEFI SCT tests for LocateHandle() are passed without failure. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'include')
-rw-r--r--include/efi_loader.h26
1 files changed, 22 insertions, 4 deletions
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 43d3a08..77b2f60 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -287,19 +287,37 @@ extern struct list_head efi_obj_list;
extern struct list_head efi_events;
/**
+ * struct efi_protocol_notification - handle for notified protocol
+ *
+ * When a protocol interface is installed for which an event was registered with
+ * the RegisterProtocolNotify() service this structure is used to hold the
+ * handle on which the protocol interface was installed.
+ *
+ * @link: link to list of all handles notified for this event
+ * @handle: handle on which the notified protocol interface was installed
+ */
+struct efi_protocol_notification {
+ struct list_head link;
+ efi_handle_t handle;
+};
+
+/**
* efi_register_notify_event - event registered by RegisterProtocolNotify()
*
* The address of this structure serves as registration value.
*
- * @link: link to list of all registered events
- * @event: registered event. The same event may registered for
- * multiple GUIDs.
- * @protocol: protocol for which the event is registered
+ * @link: link to list of all registered events
+ * @event: registered event. The same event may registered for multiple
+ * GUIDs.
+ * @protocol: protocol for which the event is registered
+ * @handles: linked list of all handles on which the notified protocol was
+ * installed
*/
struct efi_register_notify_event {
struct list_head link;
struct efi_event *event;
efi_guid_t protocol;
+ struct list_head handles;
};
/* List of all events registered by RegisterProtocolNotify() */