/*++

Copyright (c) 2006, Intel Corporation                                                         
All rights reserved. This program and the accompanying materials                          
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        
http://opensource.org/licenses/bsd-license.php                                            
                                                                                          
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

Module Name:

  BsDataHubStatusCode.h

Abstract:

  Header for the status code data hub logging component

--*/

#ifndef _EFI_BS_DATA_HUB_STATUS_CODE_H_
#define _EFI_BS_DATA_HUB_STATUS_CODE_H_

//
// Private data declarations
//
#define MAX_RECORD_NUM                    1000
#define BYTES_PER_RECORD                  EFI_STATUS_CODE_DATA_MAX_SIZE
#define EMPTY_RECORD_TAG                  0xFF

#define BS_DATA_HUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S')

typedef struct {
  UINTN           Signature;
  LIST_ENTRY      Link;
  UINT8           RecordBuffer[BYTES_PER_RECORD];
} STATUS_CODE_RECORD_LIST;

//
// Function prototypes
//
STATUS_CODE_RECORD_LIST           *
GetRecordBuffer (
  VOID
  )
;

/*++

Routine Description:

  Returned buffer of length BYTES_PER_RECORD

Arguments:

  None

Returns:

  Entry in mRecordBuffer or NULL if non available

--*/
DATA_HUB_STATUS_CODE_DATA_RECORD  *
AquireEmptyRecordBuffer (
  VOID
  )
;

/*++

Routine Description:

  Allocate a mRecordBuffer entry in the form of a pointer.

Arguments:

  None

Returns:

  Pointer to new buffer. NULL if none exist.

--*/
EFI_STATUS
ReleaseRecordBuffer (
  IN  STATUS_CODE_RECORD_LIST  *RecordBuffer
  )
;

/*++

Routine Description:

  Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().

Arguments:

  RecordBuffer          - Data to free

Returns:

  EFI_SUCCESS           - If RecordBuffer is valid
  EFI_UNSUPPORTED       - The record list has empty

--*/
VOID
EFIAPI
LogDataHubEventHandler (
  IN  EFI_EVENT   Event,
  IN  VOID        *Context
  )
;

/*++

Routine Description:

  Event Handler that log in Status code in Data Hub.

Arguments:

  (Standard EFI Event Handler - EFI_EVENT_NOTIFY)

Returns:

  NONE

--*/
#endif
