21
21
#include "rsc_table.h"
22
22
#include "metal/sys.h"
23
23
#include "metal/device.h"
24
+
25
+ /* Private includes ----------------------------------------------------------*/
26
+ /* USER CODE BEGIN Includes */
27
+
28
+ /* USER CODE END Includes */
29
+
30
+
24
31
/* Private define ------------------------------------------------------------*/
32
+ /* USER CODE BEGIN Define */
33
+
34
+ /* USER CODE END Define */
25
35
26
36
#define SHM_DEVICE_NAME "STM32_SHM"
27
37
28
- /* Globals */
38
+ /* Private macro -------------------------------------------------------------*/
39
+ /* USER CODE BEGIN PM */
40
+
41
+ /* USER CODE END PM */
42
+
43
+
44
+ /* Private variables ---------------------------------------------------------*/
45
+ /* USER CODE BEGIN PV */
46
+
47
+ /* USER CODE END PV */
29
48
30
49
static struct metal_io_region * shm_io ;
31
50
static struct metal_io_region * rsc_io ;
@@ -48,14 +67,23 @@ struct metal_device shm_device = {
48
67
.irq_info = NULL
49
68
};
50
69
70
+ /* Private functions ---------------------------------------------------------*/
71
+ /* USER CODE BEGIN PFP */
72
+
73
+ /* USER CODE END PFP */
74
+
51
75
static int OPENAMP_shmem_init (int RPMsgRole )
52
76
{
53
77
int status = 0 ;
54
- struct metal_device * device ;
78
+ struct metal_device * device = NULL ;
55
79
struct metal_init_params metal_params = METAL_INIT_DEFAULTS ;
56
- void * rsc_tab_addr ;
57
- int rsc_size ;
80
+ void * rsc_tab_addr = NULL ;
81
+ int rsc_size = 0 ;
58
82
83
+
84
+ /* USER CODE BEGIN PRE_LIB_METAL_INIT */
85
+
86
+ /* USER CODE END PRE_LIB_METAL_INIT */
59
87
metal_init (& metal_params );
60
88
61
89
status = metal_register_generic_device (& shm_device );
@@ -72,11 +100,18 @@ static int OPENAMP_shmem_init(int RPMsgRole)
72
100
metal_io_init (& device -> regions [0 ], (void * )SHM_START_ADDRESS , & shm_physmap ,
73
101
SHM_SIZE , -1 , 0 , NULL );
74
102
103
+ /* USER CODE BEGIN PRE_SHM_IO_INIT */
104
+
105
+ /* USER CODE END PRE_SHM_IO_INIT */
75
106
shm_io = metal_device_io_region (device , 0 );
76
107
if (shm_io == NULL ) {
77
108
return -1 ;
78
109
}
79
110
111
+ /* USER CODE BEGIN POST_SHM_IO_INIT */
112
+
113
+ /* USER CODE END POST_SHM_IO_INIT */
114
+
80
115
/* Initialize resources table variables */
81
116
resource_table_init (RPMsgRole , & rsc_tab_addr , & rsc_size );
82
117
rsc_table = (struct shared_resource_table * )rsc_tab_addr ;
@@ -85,23 +120,38 @@ static int OPENAMP_shmem_init(int RPMsgRole)
85
120
return -1 ;
86
121
}
87
122
123
+ /* USER CODE BEGIN POST_RSC_TABLE_INIT */
124
+
125
+ /* USER CODE END POST_RSC_TABLE_INIT */
126
+
88
127
metal_io_init (& device -> regions [1 ], rsc_table ,
89
128
(metal_phys_addr_t * )rsc_table , rsc_size , -1U , 0 , NULL );
90
129
130
+ /* USER CODE BEGIN POST_METAL_IO_INIT */
131
+
132
+ /* USER CODE END POST_METAL_IO_INIT */
91
133
rsc_io = metal_device_io_region (device , 1 );
92
134
if (rsc_io == NULL ) {
93
135
return -1 ;
94
136
}
95
137
138
+ /* USER CODE BEGIN POST_RSC_IO_INIT */
139
+
140
+ /* USER CODE END POST_RSC_IO_INIT */
96
141
return 0 ;
97
142
}
98
143
99
144
int MX_OPENAMP_Init (int RPMsgRole , rpmsg_ns_bind_cb ns_bind_cb )
100
145
{
101
- struct fw_rsc_vdev_vring * vring_rsc ;
102
- struct virtio_device * vdev ;
146
+ struct fw_rsc_vdev_vring * vring_rsc = NULL ;
147
+ struct virtio_device * vdev = NULL ;
103
148
int status = 0 ;
104
149
150
+
151
+ /* USER CODE BEGIN MAILBOX_Init */
152
+
153
+ /* USER CODE END MAIL_BOX_Init */
154
+
105
155
MAILBOX_Init ();
106
156
107
157
/* Libmetal Initilalization */
@@ -111,14 +161,22 @@ int MX_OPENAMP_Init(int RPMsgRole, rpmsg_ns_bind_cb ns_bind_cb)
111
161
return status ;
112
162
}
113
163
164
+ /* USER CODE BEGIN PRE_VIRTIO_INIT */
165
+
166
+ /* USER CODE END PRE_VIRTIO_INIT */
114
167
vdev = rproc_virtio_create_vdev (RPMsgRole , VDEV_ID , & rsc_table -> vdev ,
115
168
rsc_io , NULL , MAILBOX_Notify , NULL );
116
169
if (vdev == NULL )
117
170
{
118
171
return -1 ;
119
172
}
120
173
174
+
121
175
rproc_virtio_wait_remote_ready (vdev );
176
+
177
+ /* USER CODE BEGIN POST_VIRTIO_INIT */
178
+
179
+ /* USER CODE END POST_VIRTIO_INIT */
122
180
vring_rsc = & rsc_table -> vring0 ;
123
181
status = rproc_virtio_init_vring (vdev , 0 , vring_rsc -> notifyid ,
124
182
(void * )vring_rsc -> da , shm_io ,
@@ -127,6 +185,11 @@ int MX_OPENAMP_Init(int RPMsgRole, rpmsg_ns_bind_cb ns_bind_cb)
127
185
{
128
186
return status ;
129
187
}
188
+
189
+
190
+ /* USER CODE BEGIN POST_VRING0_INIT */
191
+
192
+ /* USER CODE END POST_VRING0_INIT */
130
193
vring_rsc = & rsc_table -> vring1 ;
131
194
status = rproc_virtio_init_vring (vdev , 1 , vring_rsc -> notifyid ,
132
195
(void * )vring_rsc -> da , shm_io ,
@@ -136,42 +199,93 @@ int MX_OPENAMP_Init(int RPMsgRole, rpmsg_ns_bind_cb ns_bind_cb)
136
199
return status ;
137
200
}
138
201
202
+ /* USER CODE BEGIN POST_VRING1_INIT */
203
+
204
+ /* USER CODE END POST_VRING1_INIT */
205
+
139
206
rpmsg_virtio_init_shm_pool (& shpool , (void * )VRING_BUFF_ADDRESS ,
140
207
(size_t )SHM_SIZE );
141
208
rpmsg_init_vdev (& rvdev , vdev , ns_bind_cb , shm_io , & shpool );
142
209
210
+ /* USER CODE BEGIN POST_RPMSG_INIT */
211
+
212
+ /* USER CODE END POST_RPMSG_INIT */
213
+
143
214
return 0 ;
144
215
}
145
216
146
217
void OPENAMP_DeInit ()
147
218
{
219
+
220
+ /* USER CODE BEGIN PRE_OPENAMP_DEINIT */
221
+
222
+ /* USER CODE END PRE_OPENAMP_DEINIT */
223
+
148
224
rpmsg_deinit_vdev (& rvdev );
149
225
150
226
metal_finish ();
227
+
228
+ /* USER CODE BEGIN POST_OPENAMP_DEINIT */
229
+
230
+ /* USER CODE END POST_OPENAMP_DEINIT */
151
231
}
152
232
153
233
void OPENAMP_init_ept (struct rpmsg_endpoint * ept )
154
234
{
235
+ /* USER CODE BEGIN PRE_EP_INIT */
236
+
237
+ /* USER CODE END PRE_EP_INIT */
238
+
155
239
rpmsg_init_ept (ept , "" , RPMSG_ADDR_ANY , RPMSG_ADDR_ANY , NULL , NULL );
240
+
241
+ /* USER CODE BEGIN POST_EP_INIT */
242
+
243
+ /* USER CODE END POST_EP_INIT */
156
244
}
157
245
158
246
int OPENAMP_create_endpoint (struct rpmsg_endpoint * ept , const char * name ,
159
247
uint32_t dest , rpmsg_ept_cb cb ,
160
248
rpmsg_ns_unbind_cb unbind_cb )
161
249
{
162
- return rpmsg_create_ept (ept , & rvdev .rdev , name , RPMSG_ADDR_ANY , dest , cb ,
250
+ int ret = 0 ;
251
+ /* USER CODE BEGIN PRE_EP_CREATE */
252
+
253
+ /* USER CODE END PRE_EP_CREATE */
254
+
255
+ ret = rpmsg_create_ept (ept , & rvdev .rdev , name , RPMSG_ADDR_ANY , dest , cb ,
163
256
unbind_cb );
257
+
258
+ /* USER CODE BEGIN POST_EP_CREATE */
259
+
260
+ /* USER CODE END POST_EP_CREATE */
261
+ return ret ;
164
262
}
165
263
166
264
void OPENAMP_check_for_message (void )
167
265
{
266
+ /* USER CODE BEGIN MSG_CHECK */
267
+
268
+ /* USER CODE END MSG_CHECK */
168
269
MAILBOX_Poll (rvdev .vdev );
169
270
}
170
271
171
272
void OPENAMP_Wait_EndPointready (struct rpmsg_endpoint * rp_ept )
172
273
{
274
+ /* USER CODE BEGIN EP_READY */
275
+
276
+ /* USER CODE END EP_READY */
277
+
173
278
while (!is_rpmsg_ept_ready (rp_ept ))
174
- MAILBOX_Poll (rvdev .vdev );
279
+ {
280
+ /* USER CODE BEGIN 0 */
281
+
282
+ /* USER CODE END 0 */
283
+ MAILBOX_Poll (rvdev .vdev );
284
+
285
+ /* USER CODE BEGIN 1 */
286
+
287
+ /* USER CODE END 1 */
288
+ }
175
289
}
176
290
177
291
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
0 commit comments