/** @file Device driver for the Atmel ATSHA204A random number generator. Copyright (c) 2018, Linaro Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _ATSHA204A_I2C_HWRNG_DRIVER_H_ #define _ATSHA204A_I2C_HWRNG_DRIVER_H_ #include #include #include #include #include #include #include #define ATSHA204A_OUTPUT_SIZE 32 #define ATSHA204A_DEV_SIGNATURE SIGNATURE_32('a','t','s','h') typedef struct { UINT32 Signature; EFI_I2C_IO_PROTOCOL *I2cIo; EFI_RNG_PROTOCOL Rng; } ATSHA204A_DEV; #define ATSHA204A_DEV_FROM_THIS(a) \ CR(a, ATSHA204A_DEV, Rng, ATSHA204A_DEV_SIGNATURE) #pragma pack(1) typedef struct { UINT8 Command; UINT8 Count; UINT8 Opcode; UINT8 Param1; UINT16 Param2; UINT16 Crc; } ATSHA204A_I2C_RNG_COMMAND; typedef struct { UINT8 Count; UINT8 Result[ATSHA204A_OUTPUT_SIZE]; UINT16 Crc; } ATSHA204A_I2C_RNG_RESULT; #pragma pack() typedef struct { UINTN OperationCount; EFI_I2C_OPERATION Operation; } I2C_RNG_REQUEST; #define ATSHA204A_COMMAND 0x3 #define ATSHA204A_OPCODE_RANDOM 0x1b extern EFI_COMPONENT_NAME2_PROTOCOL gAtSha204aDriverComponentName2; extern EFI_DRIVER_BINDING_PROTOCOL gI2cHwrngDriverBinding; EFI_STATUS AtSha204aInit ( IN EFI_HANDLE DriverBindingHandle, IN EFI_HANDLE ControllerHandle ); EFI_STATUS AtSha204aRelease ( IN EFI_HANDLE DriverBindingHandle, IN EFI_HANDLE ControllerHandle ); #endif // _ATSHA204A_I2C_HWRNG_DRIVER_H_