/** @file

  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __EMBEDDED_EXTERNAL_DEVICE_H__
#define __EMBEDDED_EXTERNAL_DEVICE_H__

//
// Protocol GUID
//
#define EMBEDDED_EXTERNAL_DEVICE_PROTOCOL_GUID { 0x735F8C64, 0xD696, 0x44D0, { 0xBD, 0xF2, 0x44, 0x7F, 0xD0, 0x5A, 0x54, 0x06 }}

//
// Protocol interface structure
//
typedef struct _EMBEDDED_EXTERNAL_DEVICE EMBEDDED_EXTERNAL_DEVICE;

//
// Function Prototypes
//
typedef
EFI_STATUS
(EFIAPI *EMBEDDED_EXTERNAL_DEVICE_READ) (
    IN  EMBEDDED_EXTERNAL_DEVICE  *This,
    IN  UINTN                       Register,
    IN  UINTN                       Length,
    OUT VOID                        *Buffer
    )
/*++

Routine Description:

  Read a set of contiguous external device registers.

Arguments:

  This        - pointer to protocol
  Offset      - starting register number
  Length      - number of bytes to read
  Buffer      - destination buffer

Returns:

  EFI_SUCCESS - registers read successfully

--*/
;

typedef
EFI_STATUS
(EFIAPI *EMBEDDED_EXTERNAL_DEVICE_WRITE) (
    IN EMBEDDED_EXTERNAL_DEVICE *This,
    IN UINTN                      Register,
    IN UINTN                      Length,
    IN VOID                       *Buffer
    )
/*++

Routine Description:

  Write to a set of contiguous external device registers.

Arguments:

  This        - pointer to protocol
  Offset      - starting register number
  Length      - number of bytes to write
  Buffer      - source buffer

Returns:

  EFI_SUCCESS - registers written successfully

--*/
;

struct _EMBEDDED_EXTERNAL_DEVICE {
  EMBEDDED_EXTERNAL_DEVICE_READ      Read;
  EMBEDDED_EXTERNAL_DEVICE_WRITE     Write;
};

extern EFI_GUID gEmbeddedExternalDeviceProtocolGuid;

#endif  // __EMBEDDED_EXTERNAL_DEVICE_H__
