/** @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_ */
