rom_api.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*!
  2. \file rom_api.h
  3. \brief Rom API for GD32VW55x SDK
  4. \version 2023-07-20, V1.0.0, firmware for GD32VW55x
  5. */
  6. /*
  7. Copyright (c) 2023, GigaDevice Semiconductor Inc.
  8. Redistribution and use in source and binary forms, with or without modification,
  9. are permitted provided that the following conditions are met:
  10. 1. Redistributions of source code must retain the above copyright notice, this
  11. list of conditions and the following disclaimer.
  12. 2. Redistributions in binary form must reproduce the above copyright notice,
  13. this list of conditions and the following disclaimer in the documentation
  14. and/or other materials provided with the distribution.
  15. 3. Neither the name of the copyright holder nor the names of its contributors
  16. may be used to endorse or promote products derived from this software without
  17. specific prior written permission.
  18. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  19. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  20. WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  21. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  22. INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  23. NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  24. PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  25. WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  26. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  27. OF SUCH DAMAGE.
  28. */
  29. #ifndef __ROM_API_H__
  30. #define __ROM_API_H__
  31. #define MAX_API_NUM 256
  32. struct rom_api_t {
  33. int (*printf)(const char *format, ...);
  34. int (*trace_ex)(uint32_t level, const char *fmt, ...);
  35. int (*rand)(unsigned char *output, unsigned int len);
  36. int (*hardware_poll)(void *data, unsigned char *output, size_t len, size_t *olen);
  37. uint32_t (*cal_checksum)(IN uint8_t *ptr, IN uint32_t sz);
  38. int (*img_verify_sign)(IN uint8_t algo_sign,
  39. IN uint8_t *pk,
  40. IN size_t klen,
  41. IN uint8_t *hash,
  42. IN uint32_t hlen,
  43. IN uint8_t *sig,
  44. IN uint32_t slen);
  45. int (*img_verify_digest)(IN uint8_t algo_hash,
  46. IN uint32_t faddr, /* Flash Adress */
  47. IN uint32_t len,
  48. IN uint8_t *digest,
  49. IN uint32_t diglen);
  50. int (*img_verify_hdr)(IN void *hdr,
  51. IN uint8_t img_type);
  52. int (*img_verify_pkhash)(IN uint8_t *pk,
  53. IN uint32_t klen,
  54. IN uint8_t *pkhash,
  55. IN uint32_t hlen);
  56. int (*img_validate)(IN uint32_t img_faddr,
  57. IN uint8_t img_type,
  58. IN uint8_t *pkhash,
  59. OUT void *img_info);
  60. int (*cert_img_validate)(IN uint32_t img_offset,
  61. IN uint8_t img_type,
  62. IN uint8_t *pkhash,
  63. OUT void *img_info);
  64. int (*sys_setting_get)(void *settings);
  65. int (*sys_status_set)(uint8_t type, uint8_t len, uint8_t *pval);
  66. int (*sys_status_get)(uint8_t type, uint8_t len, uint8_t *pval);
  67. int (*sys_set_trace_level)(uint8_t trace_level);
  68. int (*sys_set_err_process)(uint8_t method);
  69. int (*sys_set_img_flag)(uint8_t idx, uint8_t mask, uint8_t flag);
  70. int (*sys_reset_img_flag)(uint8_t idx);
  71. int (*sys_set_running_img)(uint8_t idx);
  72. int (*sys_set_fw_version)(uint32_t type, uint32_t version);
  73. int (*sys_set_pk_version)(uint32_t type, uint8_t key_ver);
  74. int (*flash_read)(uint32_t addr, void *data, int len);
  75. int (*flash_write)(uint32_t addr, const void *data, int len);
  76. int (*flash_erase)(uint32_t addr, int len);
  77. int (*efuse_get_rotpkh)(uint8_t *rotpkh);
  78. int (*do_symm_key_derive)(uint8_t *label, size_t label_sz,
  79. uint8_t *key, size_t key_len);
  80. /* Add for MBL boot directly */
  81. int (*sys_status_check)(void);
  82. int (*log_uart_set)(uint32_t uart_peripheral);
  83. /* Add HAU DMA option for image digest calculatiion */
  84. int (*digest_haudma_en)(uint32_t enable);
  85. };
  86. #ifdef ROM_PROJECT
  87. int sys_setting_get_api(void *settings);
  88. int sys_status_set_api(uint8_t type, uint8_t len, uint8_t *pval);
  89. int sys_status_get_api(uint8_t type, uint8_t len, uint8_t* pval);
  90. int sys_set_err_process_api(uint8_t method);
  91. int sys_set_trace_level_api(uint8_t trace_level);
  92. int sys_set_img_flag_api(uint8_t idx, uint8_t mask, uint8_t flag);
  93. int sys_reset_img_flag_api(uint8_t idx);
  94. int sys_set_running_img_api(uint8_t idx);
  95. int sys_set_fw_version_api(uint32_t type, uint32_t version);
  96. int sys_set_pk_version_api(uint32_t type, uint8_t key_ver);
  97. #endif /* ROM_SELF_TEST */
  98. #endif //__ROM_API_H__