AtSha204aDriver.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /** @file
  2. Device driver for the Atmel ATSHA204A random number generator.
  3. Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef _ATSHA204A_I2C_HWRNG_DRIVER_H_
  7. #define _ATSHA204A_I2C_HWRNG_DRIVER_H_
  8. #include <Uefi.h>
  9. #include <Library/BaseMemoryLib.h>
  10. #include <Library/DebugLib.h>
  11. #include <Library/UefiBootServicesTableLib.h>
  12. #include <Library/UefiLib.h>
  13. #include <Protocol/Rng.h>
  14. #include <Protocol/I2cIo.h>
  15. #define ATSHA204A_OUTPUT_SIZE 32
  16. #define ATSHA204A_DEV_SIGNATURE SIGNATURE_32('a','t','s','h')
  17. typedef struct {
  18. UINT32 Signature;
  19. EFI_I2C_IO_PROTOCOL *I2cIo;
  20. EFI_RNG_PROTOCOL Rng;
  21. } ATSHA204A_DEV;
  22. #define ATSHA204A_DEV_FROM_THIS(a) \
  23. CR(a, ATSHA204A_DEV, Rng, ATSHA204A_DEV_SIGNATURE)
  24. #pragma pack(1)
  25. typedef struct {
  26. UINT8 Command;
  27. UINT8 Count;
  28. UINT8 Opcode;
  29. UINT8 Param1;
  30. UINT16 Param2;
  31. UINT16 Crc;
  32. } ATSHA204A_I2C_RNG_COMMAND;
  33. typedef struct {
  34. UINT8 Count;
  35. UINT8 Result[ATSHA204A_OUTPUT_SIZE];
  36. UINT16 Crc;
  37. } ATSHA204A_I2C_RNG_RESULT;
  38. #pragma pack()
  39. typedef struct {
  40. UINTN OperationCount;
  41. EFI_I2C_OPERATION Operation;
  42. } I2C_RNG_REQUEST;
  43. #define ATSHA204A_COMMAND 0x3
  44. #define ATSHA204A_OPCODE_RANDOM 0x1b
  45. extern EFI_COMPONENT_NAME2_PROTOCOL gAtSha204aDriverComponentName2;
  46. extern EFI_DRIVER_BINDING_PROTOCOL gI2cHwrngDriverBinding;
  47. EFI_STATUS
  48. AtSha204aInit (
  49. IN EFI_HANDLE DriverBindingHandle,
  50. IN EFI_HANDLE ControllerHandle
  51. );
  52. EFI_STATUS
  53. AtSha204aRelease (
  54. IN EFI_HANDLE DriverBindingHandle,
  55. IN EFI_HANDLE ControllerHandle
  56. );
  57. #endif // _ATSHA204A_I2C_HWRNG_DRIVER_H_