csi_rpmb.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef _CSI_RPMB_H
  2. #define _CSI_RPMB_H
  3. #include <stdint.h>
  4. #define CSI_HAL_ERROR -1
  5. #define CSI_HAL_SUCCESS 0
  6. enum hal_rpmb_op_type {
  7. MMC_RPMB_WRITE_KEY = 0x01,
  8. MMC_RPMB_READ_CNT = 0x02,
  9. MMC_RPMB_WRITE = 0x03,
  10. MMC_RPMB_READ = 0x04,
  11. };
  12. typedef int hal_error_t;
  13. typedef struct _csi_hal_rpmb_ctx {
  14. char *device;
  15. int dev_fd;
  16. enum hal_rpmb_op_type rpmb_op_type;
  17. uint8_t key_mac[32];
  18. }csi_hal_rpmb_ctx_t;
  19. /**
  20. \brief Initialize rpmb interface.
  21. \param[in] ctx Context to operate
  22. \return Error code
  23. */
  24. hal_error_t csi_rpmb_init(csi_hal_rpmb_ctx_t *ctx, char *device);
  25. /**
  26. \brief De-initialize rpmb.
  27. \param[in] ctx Context to operate
  28. \return None
  29. */
  30. void csi_rpmb_uninit(csi_hal_rpmb_ctx_t *ctx);
  31. /**
  32. \brief RPMB read data, check .authentication tag and return data.
  33. \param[in] ctx Context to operate
  34. \param[in] addr [in] address
  35. \param[in] blocks [in] write block number.
  36. \return Error code
  37. */
  38. hal_error_t csi_rpmb_read_block(csi_hal_rpmb_ctx_t *ctx, uint16_t addr,
  39. uint32_t blocks, uint8_t *data);
  40. /**
  41. \brief RPMB write data, authenticated data and write to RPMB.
  42. \param[in] ctx Context to operate
  43. \param[in] addr [in] address, address in block.
  44. \param[in] blocks [in] write block number. block size 256 bytes.
  45. \param[in] data [in]
  46. \return Error code
  47. */
  48. hal_error_t csi_rpmb_write_block(csi_hal_rpmb_ctx_t *ctx, uint16_t addr,
  49. uint32_t blocks, uint8_t *data);
  50. #endif