/** @file
  bhyve firmware configuration access

  Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
  Copyright (c) 2015 Nahanni Systems

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _BHYVE_FW_CTL_LIB_
#define _BHYVE_FW_CTL_LIB_

/**
  Sysctl-like interface to read host information via a dot-separated
  ASCII OID.

  The information is copied into the buffer specified by Item. The
  size of the buffer is given by the location specified by Size
  before the call, and that location gives the amount of data copied
  after a successfull call, and after a call that returns a truncated
  value with an error return of RETURN_BUFFER_TOO_SMALL.

  The size of the available data can be determined by passing a NULL
  argument for Item. The size will be returned in the location pointed
  to by Size.

  @param[]  Name    - ASCII OID name
  @param[]  Data    - return buffer pointer
  @param[]  Size    - pointer to length

  @return RETURN_SUCCESS           Valid data/len returned.
          RETURN_UNSUPPORTED       f/w interface not present.
          RETURN_NOT_FOUND         OID not found.
          RETURN_BUFFER_TOO_SMALL  Return message truncated.
          RETURN_INVALID_PARAMETER Buffer too large.
          RETURN_PROTOCOL_ERROR    Unknown error from host.
 **/
RETURN_STATUS
EFIAPI
BhyveFwCtlGet (
  IN   CONST CHAR8  *Name,
  OUT  VOID         *Item,
  IN OUT  UINTN     *Size
  );

#endif /* _BHYVE_FW_CTL_LIB_ */
