common.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*
  2. * Copyright (C) 2017-2020 Alibaba Group Holding Limited
  3. */
  4. /******************************************************************************
  5. * @file drv/common.h
  6. * @brief Header File for Common Driver
  7. * @version V1.0
  8. * @date 31. March 2020
  9. * @model common
  10. ******************************************************************************/
  11. #ifndef _DRV_COMMON_H_
  12. #define _DRV_COMMON_H_
  13. #include <stdint.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <stdbool.h>
  17. #include "list.h"
  18. #include "dev_tag.h"
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #ifdef CONFIG_DEBUG_MODE
  23. #define CSI_ASSERT(expr) \
  24. do { \
  25. if ((unsigned long)expr == (unsigned long)NULL) { \
  26. printf("PROGRAM ASSERT\n"); \
  27. while(1); \
  28. } \
  29. } while(0);
  30. #else
  31. #define CSI_ASSERT(expr) ((void)0U)
  32. #endif
  33. #ifdef CONFIG_PARAM_NOT_CHECK
  34. #define CSI_PARAM_CHK(para, err) \
  35. do { \
  36. if ((unsigned long)para == (unsigned long)NULL) { \
  37. return (err); \
  38. } \
  39. } while (0)
  40. #define CSI_PARAM_CHK_NORETVAL(para) \
  41. do { \
  42. if ((unsigned long)para == (unsigned long)NULL) { \
  43. return; \
  44. } \
  45. } while (0)
  46. #else
  47. #define CSI_PARAM_CHK(para, err)
  48. #define CSI_PARAM_CHK_NORETVAL(para)
  49. #endif
  50. #define CSI_EXAMPLE_RESULT(val) \
  51. do { \
  52. if(val>=0) \
  53. { \
  54. printf("-*success*-\n"); \
  55. } \
  56. else \
  57. { \
  58. printf("-*fail*-\n"); \
  59. } \
  60. } while (0);
  61. typedef enum {
  62. CSI_OK = 0,
  63. CSI_ERROR = -1,
  64. CSI_BUSY = -2,
  65. CSI_TIMEOUT = -3,
  66. CSI_UNSUPPORTED = -4,
  67. CSI_INVALID_PARAM = -5,
  68. CSI_CRYPT_FAIL = -6,
  69. } csi_error_t;
  70. typedef struct {
  71. uint8_t readable;
  72. uint8_t writeable;
  73. uint8_t error;
  74. } csi_state_t;
  75. typedef struct csi_dev csi_dev_t;
  76. #ifdef CONFIG_PM
  77. typedef enum {
  78. PM_DEV_SUSPEND,
  79. PM_DEV_RESUME,
  80. } csi_pm_dev_action_t;
  81. typedef enum {
  82. PM_MODE_RUN = 0, ///< Running mode
  83. PM_MODE_SLEEP_1, ///< Sleep LV1 mode
  84. PM_MODE_SLEEP_2, ///< Sleep LV2 mode
  85. PM_MODE_DEEP_SLEEP_1, ///< Deep sleep LV1 mode
  86. PM_MODE_DEEP_SLEEP_2, ///< Deep sleep LV2 mode
  87. PM_MODE_DEEP_SLEEP_3, ///< Deep sleep LV3 mode
  88. } csi_pm_mode_t;
  89. typedef struct {
  90. slist_t next;
  91. csi_error_t (*pm_action)(csi_dev_t *dev, csi_pm_dev_action_t action);
  92. uint32_t *reten_mem;
  93. uint32_t size;
  94. } csi_pm_dev_t;
  95. #include <drv/pm.h>
  96. #endif
  97. struct csi_dev {
  98. unsigned long reg_base;
  99. uint8_t irq_num;
  100. uint8_t idx;
  101. uint16_t dev_tag;
  102. void (*irq_handler)(void *);
  103. #ifdef CONFIG_PM
  104. csi_pm_dev_t pm_dev;
  105. #endif
  106. };
  107. #define HANDLE_REG_BASE(handle) (handle->dev.reg_base)
  108. #define HANDLE_IRQ_NUM(handle) (handle->dev.irq_num)
  109. #define HANDLE_DEV_IDX(handle) (handle->dev.idx)
  110. #define HANDLE_IRQ_HANDLER(handle) (handle->dev.irq_handler)
  111. typedef struct {
  112. unsigned long reg_base;
  113. uint8_t irq_num;
  114. uint8_t idx;
  115. uint16_t dev_tag;
  116. } csi_perip_info_t;
  117. csi_error_t target_get(csi_dev_tag_t dev_tag, uint32_t idx, csi_dev_t *dev);
  118. csi_error_t target_get_optimal_dma_channel(void *dma_list, uint32_t ctrl_num, csi_dev_t *parent_dev, void *ch_info);
  119. void msleep(uint32_t ms);
  120. #ifdef __cplusplus
  121. }
  122. #endif
  123. #endif /* _DRV_COMMON_H_ */