huangcm
2025-09-01 53d8e046ac1bf2ebe94f671983e3d3be059df91a
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
#ifndef _SPRITE_STORAGE_CRYPT_H_
#define _SPRITE_STORAGE_CRYPT_H_
 
enum {
   /* TEE SMC command type */
   TEE_SMC_INIT_CALL     = 0x0FFFFFF1,
   TEE_SMC_PLAFORM_OPERATION = 0x0FFFFFF2,
   TEE_SMC_OPEN_SESSION      = 0x0FFFFFF3,
   TEE_SMC_CLOSE_SESSION     = 0x0FFFFFF4,
   TEE_SMC_INVOKE_COMMAND    = 0x0FFFFFF5,
   TEE_SMC_NS_IRQ_CALL       = 0x0FFFFFF6,
   TEE_SMC_NS_IRQ_DONE       = 0x0FFFFFF7,
   TEE_SMC_NS_KERNEL_CALL    = 0x0FFFFFF8,
   TEE_SMC_SECURE_FIQ_CALL   = 0x0FFFFFF9,
   TEE_SMC_SECURE_FIQ_DONE   = 0x0FFFFFFA,
   TEE_SMC_CONFIG_SHMEM      = 0x0FFFFFFB,
   TEE_SMC_RPC_CALL      = 0x0FFFFFFC,
   TEE_SMC_RPC_RETURN    = 0x0FFFFFFD,
   TEE_SMC_SST_COMMAND       = 0x0FFFFF10,
};
 
enum { TE_PARAM_TYPE_NONE   = 0,
       TE_PARAM_TYPE_INT_RO = 1,
       TE_PARAM_TYPE_INT_RW = 2,
       TE_PARAM_TYPE_MEM_RO = 3,
       TE_PARAM_TYPE_MEM_RW = 4,
};
 
struct te_oper_param {
   uint32_t index;
   uint32_t type;
   union {
       struct {
           uint32_t val_a;
           uint32_t val_b;
       } Int;
       struct {
           void *   base;
           void *   phys;
           uint32_t len;
       } Mem;
   } u;
   void *next_ptr_user;
};
 
struct te_request {
   uint32_t          type;
   uint32_t          session_id;
   uint32_t          command_id;
   struct te_oper_param *params;
   uint32_t          params_size;
   uint32_t          dest_uuid[4];
   uint32_t          result;
   uint32_t          result_origin;
};
 
/*communication structure*/
typedef struct command {
   unsigned int   cmd_type;
   unsigned int   cmd_param[4];
   unsigned char *cmd_buf;
   unsigned int   cmd_buf_len;
 
   unsigned int   resp_type;
   unsigned int   resp_ret[4];
   unsigned char *resp_buf;
   unsigned int   resp_buf_len;
 
   unsigned int status;
} cmd_t;
 
enum { /*cmd type*/
       SST_CMD_POLLING = 1,
       SST_CMD_BIND_REQ,
       SST_CMD_WORK_DONE,
       SST_CMD_UPDATE_REQ,
       SST_CMD_INITIALIZED,
       SST_CMD_FUNC_TEST,
};
 
enum { /*response type*/
       SST_RESP_DUMMY = 1,
       SST_RESP_READ,
       SST_RESP_READ_DONE,
       SST_RESP_WRITE,
       SST_RESP_WRITE_DONE,
       SST_RESP_DELETE,
       SST_RESP_BIND_DONE,
       SST_RESP_UPDATE_DONE,
       SST_RESP_INITED_DONE,
       SST_RESP_FUNC_TEST_DONE,
};
 
enum { /*response result*/
       SST_RESP_RET_SUCCESS = 0,
       SST_RESP_RET_FAIL,
};
enum { /*cmd status*/
       SST_STAS_CMD_INIT = 1, /*Nwd*/
       SST_STAS_CMD_RDY, /*Nwd*/
       SST_STAS_CMD_POST, /*Nwd*/
       SST_STAS_CMD_GET, /*Swd*/
       SST_STAS_CMD_DEAL, /*Swd*/
       SST_STAS_CMD_RET, /*Swd*/
       SST_STAS_CMD_DONE, /*Nwd*/
};
 
typedef enum TYPE {
   OEM_DATA = 1,
   USER_DATA,
} type_t;
 
#define MAX_OEM_STORE_NUM 0x10
#define MAX_STORE_LEN 0xc00 /*3K payload*/
 
#define ALIGN_BUF(src, align) (((src) + (align)-1) & (~((align)-1)))
 
extern int sst_oem_item_id(char *item);
#endif