/* SPDX-License-Identifier: GPL-2.0+ */
/*
 *  Internal structures for the EFI driver binding protocol
 *
 *  Copyright (c) 2017 Heinrich Schuchardt
 */

#ifndef _EFI_DRIVER_H
#define _EFI_DRIVER_H 1

#include <efi_loader.h>

/**
 * struct efi_driver_binding_extended_protocol - extended driver binding protocol
 *
 * This structure adds internal fields to the driver binding protocol.
 *
 * @bp:		driver binding protocol
 * @ops:	operations supported by the driver
 */
struct efi_driver_binding_extended_protocol {
	struct efi_driver_binding_protocol bp;
	const struct efi_driver_ops *ops;
};

/**
 * struct efi_driver_ops - operations support by an EFI driver
 *
 * @protocol:		The GUID of the protocol which is consumed by the
 *			driver. This GUID is used by the EFI uclass in the
 *			supports() and start() methods of the
 *			EFI_DRIVER_BINDING_PROTOCOL.
 * @child_protocol:	Protocol supported by the child handles generated by
 *			the EFI driver.
 * @init:		Function called by the EFI uclass after installing the
 *			driver binding protocol.
 * @bind:		Function called by the EFI uclass to attach the
 *			driver to EFI driver to a handle.
 */
struct efi_driver_ops {
	const efi_guid_t *protocol;
	const efi_guid_t *child_protocol;
	efi_status_t (*init)(struct efi_driver_binding_extended_protocol *this);
	efi_status_t (*bind)(struct efi_driver_binding_extended_protocol *this,
			     efi_handle_t handle, void *interface);
};

#endif /* _EFI_DRIVER_H */
