aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/common.h
blob: efd5b4a6f42b2b3a5d2a29266a632f2494068202 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * Copyright (C) 2017-2020 Alibaba Group Holding Limited
 */

/******************************************************************************
 * @file     drv/common.h
 * @brief    Header File for Common Driver
 * @version  V1.0
 * @date     31. March 2020
 * @model    common
 ******************************************************************************/

#ifndef _DRV_COMMON_H_
#define _DRV_COMMON_H_

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "list.h"
#include "dev_tag.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifdef CONFIG_DEBUG_MODE
#define CSI_ASSERT(expr)                            \
    do {                                        \
        if ((unsigned long)expr == (unsigned long)NULL) {   \
            printf("PROGRAM ASSERT\n");         \
            while(1);                           \
        }                                       \
    } while(0);
#else
#define CSI_ASSERT(expr)        ((void)0U)
#endif

#ifdef CONFIG_PARAM_NOT_CHECK
#define CSI_PARAM_CHK(para, err)                    \
    do {                                            \
        if ((unsigned long)para == (unsigned long)NULL) {       \
            return (err);                           \
        }                                           \
    } while (0)

#define CSI_PARAM_CHK_NORETVAL(para)                \
    do {                                            \
        if ((unsigned long)para == (unsigned long)NULL) {       \
            return;                                 \
        }                                           \
    } while (0)
#else
#define CSI_PARAM_CHK(para, err)
#define CSI_PARAM_CHK_NORETVAL(para)
#endif

#define CSI_EXAMPLE_RESULT(val)                     \
    do {                                            \
        if(val>=0)                                  \
        {                                           \
            printf("-*success*-\n");                \
        }                                           \
        else                                        \
        {                                           \
            printf("-*fail*-\n");                   \
        }                                           \
    } while (0);

typedef enum {
    CSI_OK            =  0,
    CSI_ERROR         = -1,
    CSI_BUSY          = -2,
    CSI_TIMEOUT       = -3,
    CSI_UNSUPPORTED   = -4,
    CSI_INVALID_PARAM = -5,
    CSI_CRYPT_FAIL    = -6,
} csi_error_t;

typedef struct {
    uint8_t    readable;
    uint8_t    writeable;
    uint8_t    error;
} csi_state_t;

typedef struct csi_dev csi_dev_t;

#ifdef CONFIG_PM
typedef enum {
    PM_DEV_SUSPEND,
    PM_DEV_RESUME,
} csi_pm_dev_action_t;

typedef enum {
    PM_MODE_RUN                  = 0,   ///< Running mode
    PM_MODE_SLEEP_1,                    ///< Sleep LV1 mode
    PM_MODE_SLEEP_2,                    ///< Sleep LV2 mode
    PM_MODE_DEEP_SLEEP_1,               ///< Deep sleep LV1 mode
    PM_MODE_DEEP_SLEEP_2,               ///< Deep sleep LV2 mode
    PM_MODE_DEEP_SLEEP_3,               ///< Deep sleep LV3 mode
} csi_pm_mode_t;

typedef struct {
    slist_t     next;
    csi_error_t (*pm_action)(csi_dev_t *dev, csi_pm_dev_action_t action);
    uint32_t    *reten_mem;
    uint32_t    size;
} csi_pm_dev_t;
#include <drv/pm.h>
#endif

struct csi_dev {
    unsigned long reg_base;
    uint8_t       irq_num;
    uint8_t       idx;
    uint16_t      dev_tag;
    void          (*irq_handler)(void *);
#ifdef CONFIG_PM
    csi_pm_dev_t pm_dev;
#endif
};

#define HANDLE_REG_BASE(handle)     (handle->dev.reg_base)
#define HANDLE_IRQ_NUM(handle)      (handle->dev.irq_num)
#define HANDLE_DEV_IDX(handle)      (handle->dev.idx)
#define HANDLE_IRQ_HANDLER(handle)  (handle->dev.irq_handler)

typedef struct {
    unsigned long    reg_base;
    uint8_t          irq_num;
    uint8_t          idx;
    uint16_t         dev_tag;
} csi_perip_info_t;

csi_error_t target_get(csi_dev_tag_t dev_tag, uint32_t idx, csi_dev_t *dev);
csi_error_t target_get_optimal_dma_channel(void *dma_list, uint32_t ctrl_num, csi_dev_t *parent_dev, void *ch_info);
void msleep(uint32_t ms);

#ifdef __cplusplus
}
#endif

#endif /* _DRV_COMMON_H_ */