1 /*++ 2 3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> 4 5 This program and the accompanying materials are licensed and made available under 7 the terms and conditions of the BSD License that accompanies this distribution. 9 The full text of the license may be found at 11 http://opensource.org/licenses/bsd-license.php. 13 15 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 19 21 23 Module Name: 24 25 Observable.h 26 27 Abstract: 28 29 Prototypes for Observable protocol implementation 30 --*/ 31 32 #ifndef _OBSERVABLE_H_ 33 #define _OBSERVABLE_H_ 34 #include "PlatformDxe.h" 35 #include "Protocol/Observable.h" 36 37 // 38 // Prototypes 39 // 40 41 /** Install observable protocol. 42 * 43 * Install interface and initialize the observable protocol. 44 * 45 * @param VOID No parameters. 46 * 47 * @return EFI_SUCCESS Successfully installed and initialized the protocol. 48 **/ 49 EFI_STATUS 50 InitializeObservableProtocol( 51 VOID 52 ); 53 54 /** Remove all observables. 55 * 56 * Remove all observable guids and all interfaces subscribed to them. 57 * 58 * @param VOID No parameters. 59 * 60 * @return EFI_SUCCESS Successfully removed all observables and subscribed interfaces. 61 **/ 62 EFI_STATUS 63 EFIAPI 64 RemoveAllObservables( 65 VOID 66 ); 67 68 /** Subscribe an interface with an observable guid. 69 * 70 * Use this to register a callback function with a guid. The function provided by CallbackInterface will be executed 71 * whenever the appropriate observable instance specified by ReferenceGuid calls Publish. 72 * 73 * @param EFI_GUID ReferenceGuid The observable guid that the callback interface will subscribe to. 74 * OBS_CALLBACK CallbackInterface A pointer to the function that is subscribing to the observable. 75 * 76 * @return EFI_SUCCESS Successfully subscribed the interface to the observable guid. 77 * EFI_NOT_FOUND No match could be found between the provided guid and existing observables. 78 * EFI_OUT_OF_RESOURCES Could not subscribe to this observer due to resource limitations. 79 * EFI_INVALID_PARAMETER Interface is already subscribed to this observer. 80 **/ 81 EFI_STATUS 82 EFIAPI 83 Subscribe ( 84 IN EFI_GUID ReferenceGuid, 85 IN OBS_CALLBACK CallbackInterface 86 ); 87 88 /** Unsubscribe an interface with an observable guid. 89 * 90 * Use this to remove an interface from the callback list associated with an observable guid. 91 * 92 * @param EFI_GUID ReferenceGuid The observable guid to unsubscribe the interface from. 93 * OBS_CALLBACK CallbackInterface A pointer to the interface that is being unsubscribed. 94 * 95 * @return EFI_SUCCESS Successfully unsubscribed the interface from the observable guid. 96 **/ 97 EFI_STATUS 98 EFIAPI 99 Unsubscribe ( 100 IN EFI_GUID ReferenceGuid, 101 IN OBS_CALLBACK CallbackInterface 102 ); 103 104 /** Notify observing functions. 105 * 106 * Use this to notify all functions who are subscribed to the guid specified by ReferenceGuid. 107 * 108 * @param EFI_GUID ReferenceGuid The observable guid that contains the list of interfaces to be notified. 109 * VOID* Data Parameter context to be passed to the subscribed function. 110 * 111 * @return EFI_SUCCESS Successfully notified all observers listening to this guid. 112 * EFI_NOT_FOUND No match could be found between the provided guid and existing observables. 113 **/ 114 EFI_STATUS 115 EFIAPI 116 Publish ( 117 IN EFI_GUID ReferenceGuid, 118 IN OUT VOID* Data 119 ); 120 121 /** Creates a new observable. 122 * 123 * Create a new observable that can be observed with the use of Subscribe function. 124 * 125 * @param EFI_GUID ReferenceGuid The observable guid to add. 126 * 127 * @return EFI_SUCCESS Successfully added observable. 128 * EFI_INVALID_PARAMETER Observable already exists. 129 **/ 130 EFI_STATUS 131 EFIAPI 132 AddObservable ( 133 IN EFI_GUID ReferenceGuid 134 ); 135 136 /** Remove an observable. 137 * 138 * Remove an observable so that it can no longer be subscribed to. In addition, unsubscribe any functions 139 * that are subscribed to this guid. 140 * 141 * @param EFI_GUID ReferenceGuid The observable guid to remove. 142 * 143 * @return EFI_SUCCESS Successfully removed observable. 144 **/ 145 EFI_STATUS 146 EFIAPI 147 RemoveObservable ( 148 IN EFI_GUID ReferenceGuid 149 ); 150 151 #endif 152