Home | History | Annotate | Download | only in Observable
      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