1/*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include <stdio.h>
17#include "asm/io.h"
18#include "hi_module_param.h"
19
20#include "stdlib.h"
21#include "fcntl.h"
22#include "string.h"
23#include "board.h"
24
25#ifdef __cplusplus
26#if __cplusplus
27extern "C" {
28#endif
29#endif /* End of #ifdef __cplusplus */
30
31#define SENSOR_NAME_LEN             64
32#define CHIP_NAME_LEN               64
33#define BOARD_NAME_LEN              64
34
35static unsigned long long g_mmz_start = 0x42000000;
36static unsigned int       g_mmz_size  = 32;   /* M Byte */
37static char   g_chip_name[CHIP_NAME_LEN]     = "hi3518ev300";  /* hi3518ev300 */
38static char   g_sensor_name[SENSOR_NAME_LEN] = "f23";       /* f23 */
39static char   g_board_name[BOARD_NAME_LEN]   = "demo";         /* demo sck */
40
41static void CHIP_init(void)
42{
43    return;
44}
45
46static int SYSCONFIG_init(void)
47{
48    extern int  hi_sysconfig_init(void);
49    extern int  g_quick_start_flag;
50    extern int  g_online_flag;
51    extern int  g_cmos_yuv_flag;
52    extern char g_sensor_list[SENSOR_NAME_LEN];
53    extern char g_chip_list[CHIP_NAME_LEN];
54    extern char g_board_list[BOARD_NAME_LEN];
55
56    g_quick_start_flag = 0;
57    g_online_flag      = 0;
58    g_cmos_yuv_flag    = 0;
59    strncpy(g_chip_list,   g_chip_name,   CHIP_NAME_LEN);
60    strncpy(g_sensor_list, g_sensor_name, SENSOR_NAME_LEN);
61    strncpy(g_board_list,  g_board_name,  BOARD_NAME_LEN);
62
63    return hi_sysconfig_init();
64}
65
66
67static int MMZ_init(void)
68{
69    extern int media_mem_init(void *pArgs);
70    MMZ_SETUP_MODULE_PARAMS_S stMMZ_Param = {0};
71
72    snprintf(stMMZ_Param.mmz, MMZ_SETUP_CMDLINE_LENGTH, "anonymous,0,0x%llx,%dM", g_mmz_start, g_mmz_size);
73
74    stMMZ_Param.anony = 1;
75
76    dprintf("g_mmz_start=0x%llx, g_mmz_size=0x%x\n", g_mmz_start, g_mmz_size);
77    dprintf("mmz param= %s\n", stMMZ_Param.mmz);
78
79    return media_mem_init(&stMMZ_Param);
80}
81
82static int BASE_init(void)
83{
84    extern void base_get_module_param(void *pArgs);
85    extern int base_mod_init(void *pArgs);
86
87    BASE_MODULE_PARAMS_S stBaseModuleParam;
88    base_get_module_param(&stBaseModuleParam);
89
90    return base_mod_init(&stBaseModuleParam);
91}
92
93static int SYS_init(void)
94{
95    extern int sys_mod_init(void);
96
97    return sys_mod_init();
98}
99
100static int RGN_init(void)
101{
102    extern int rgn_mod_init(void);
103
104    return rgn_mod_init();
105}
106
107static int ISP_init(void)
108{
109    extern int isp_mod_init(void);
110
111    return isp_mod_init();
112}
113
114static int VI_init(void)
115{
116    extern int vi_mod_init(void);
117
118    return vi_mod_init();
119}
120
121static int VGS_init(void)
122{
123    extern void vgs_get_module_param(void *pArgs);
124    extern int vgs_mod_init(void *pArgs);
125
126    VGS_MODULE_PARAMS_S  stVgsModuleParam;
127
128    vgs_get_module_param((void*)&stVgsModuleParam);
129    stVgsModuleParam.u32MaxVgsJob  = 64;  /* 64 -- max job num */
130    stVgsModuleParam.u32MaxVgsTask = 100; /* 100 -- max task num */
131    stVgsModuleParam.u32MaxVgsNode = 100; /* 100 -- max node num */
132
133    return vgs_mod_init(&stVgsModuleParam);
134}
135
136static int IVE_init(void)
137{
138    extern int ive_mod_init(void *pArgs);
139    extern void ive_get_module_param(void *pArgs);
140
141    IVE_MODULE_PARAMS_S stIveModuleParam;
142    ive_get_module_param((void*)&stIveModuleParam);
143    stIveModuleParam.bSavePowerEn = HI_TRUE;
144    stIveModuleParam.u16IveNodeNum = 512; /* 512 -- node num */
145    return ive_mod_init(&stIveModuleParam);
146}
147
148static int VPSS_init(void)
149{
150    extern void vpss_get_module_param(void *pArgs);
151    extern int vpss_mod_init(void *pArgs);
152
153    VPSS_MODULE_PARAMS_S  stVpssModuleParam;
154    vpss_get_module_param((void*)&stVpssModuleParam);
155
156    return vpss_mod_init(&stVpssModuleParam);
157}
158
159static int VO_init(void)
160{
161    extern int vou_module_init(void);
162
163    return vou_module_init();
164}
165
166static int RC_init(void)
167{
168    extern int  rc_mod_init(void);
169    return rc_mod_init();
170}
171
172static int VENC_init(void)
173{
174    extern void venc_get_module_param(void *pArgs);
175    extern int  venc_mod_init(void *pArgs);
176
177    VENC_MODULE_PARAMS_S  stVencModuleParam;
178    venc_get_module_param((void*)&stVencModuleParam);
179    return venc_mod_init(&stVencModuleParam);
180}
181
182static int CHNL_init(void)
183{
184    extern int chnl_mod_init(void);
185    return chnl_mod_init();
186}
187
188static int VEDU_init(void)
189{
190    extern int vedu_mod_init(void);
191    return vedu_mod_init();
192}
193
194static int H264e_init(void)
195{
196    extern int h264e_mod_init(void);
197    return h264e_mod_init();
198}
199
200static int H265e_init(void)
201{
202    extern int h265e_mod_init(void *pArgs);
203    return h265e_mod_init(NULL);
204}
205
206static int JPEGE_init(void)
207{
208    extern int jpege_mod_init(void);
209    return jpege_mod_init();
210}
211
212static int hi_sensor_spi_init(void)
213{
214    extern int sensor_spi_dev_init(void *pArgs);
215    return sensor_spi_dev_init(NULL);
216}
217
218static int hi_sensor_i2c_init(void)
219{
220    extern int hi_dev_init(void);
221    return hi_dev_init();
222}
223
224static int PWM_init(void)
225{
226    return 0;
227}
228
229static int MIPI_RX_init(void)
230{
231    extern int mipi_rx_mod_init(void);
232    return mipi_rx_mod_init();
233}
234
235
236static int AcodecMod_init(void)
237{
238    extern int acodec_mod_init(void *pArgs);
239    return acodec_mod_init(NULL);
240}
241
242static int AiaoMod_init(void)
243{
244    extern int aiao_mod_init(void);
245    return aiao_mod_init();
246}
247
248static int AiMod_init(void)
249{
250    extern int ai_mod_init(void);
251    return ai_mod_init();
252}
253
254static int AoMod_init(void)
255{
256    extern int ao_mod_init(void *pArgs);
257    return ao_mod_init(NULL);
258}
259
260static int AencMod_init(void)
261{
262    extern int  aenc_mod_init(void *pArgs);
263    return aenc_mod_init(NULL);
264}
265
266static int AdecMod_init(void)
267{
268    extern int adec_mod_init(void *pArgs);
269    return adec_mod_init(NULL);
270}
271
272static int  Cipher_init(void)
273{
274    extern int cipher_drv_mod_init(void);
275    return cipher_drv_mod_init();
276}
277
278static int TDE_init(void)
279{
280    extern int tde_mod_init(void);
281    return tde_mod_init();
282}
283
284static void insert_audio(void)
285{
286    int ret;
287
288    ret = AiaoMod_init();
289    if (ret != 0) {
290        printf("aiao init error.\n");
291    }
292
293    ret = AiMod_init();
294    if (ret != 0) {
295        printf("ai init error.\n");
296    }
297
298    ret = AoMod_init();
299    if (ret != 0) {
300        printf("ao init error.\n");
301    }
302
303    ret = AencMod_init();
304    if (ret != 0) {
305        printf("aenc init error.\n");
306    }
307
308    ret = AdecMod_init();
309    if (ret != 0) {
310        printf("adec init error.\n");
311    }
312
313    ret = AcodecMod_init();
314    if (ret != 0) {
315        printf("acodec init error.\n");
316    }
317
318    printf("insert audio\n");
319}
320extern void osal_proc_init(void);
321extern int hifb_init(void* pArgs);
322
323
324static int HIFB_init(void)
325{
326    HIFB_MODULE_PARAMS_S stHIFB_Param;
327    snprintf(stHIFB_Param.video, 64, "hifb:vram0_size:1620");  /* 64 -- str length */
328    stHIFB_Param.bUpdateRotateRect = HI_FALSE;
329    return hifb_init(&stHIFB_Param);
330}
331
332static int PM_init(void)
333{
334    return 0;
335}
336
337
338void SDK_init(void)
339{
340    int ret;
341
342    CHIP_init();
343    SYSCONFIG_init();
344    osal_proc_init();
345
346    ret = MMZ_init();
347    if (ret != 0) {
348        printf("MMZ init error.\n");
349    }
350
351    ret = BASE_init();
352    if (ret != 0) {
353        printf("base init error.\n");
354    }
355
356    ret = SYS_init();
357    if (ret != 0) {
358        printf("sys init error.\n");
359    }
360
361    ret = RGN_init();
362    if (ret != 0) {
363        printf("rgn init error.\n");
364    }
365
366    ret = VGS_init();
367    if (ret != 0) {
368        printf("vgs init error.\n");
369    }
370
371    ret = ISP_init();
372    if (ret != 0) {
373        printf("isp init error.\n");
374    }
375
376    ret = VI_init();
377    if (ret != 0) {
378        printf("vi init error.\n");
379    }
380
381    ret = VPSS_init();
382    if (ret != 0) {
383        printf("vpss init error.\n");
384    }
385
386    ret = VO_init();
387    if (ret != 0) {
388        printf("vo init error.\n");
389    }
390
391    ret = CHNL_init();
392    if (ret != 0) {
393        printf("chnl init error.\n");
394    }
395
396    ret = VEDU_init();
397    if (ret != 0) {
398        printf("vedu init error.\n");
399    }
400
401    ret = RC_init();
402    if (ret != 0) {
403        printf("rc init error.\n");
404    }
405
406    ret = VENC_init();
407    if (ret != 0) {
408        printf("venc init error.\n");
409    }
410
411    ret = H264e_init();
412    if (ret != 0) {
413        printf("H264e init error.\n");
414    }
415
416    ret = H265e_init();
417    if (ret != 0) {
418        printf("H265e init error.\n");
419    }
420
421    ret = JPEGE_init();
422    if (ret != 0) {
423        printf("jpege init error.\n");
424    }
425
426    ret = IVE_init();
427    if (ret != 0) {
428        printf("ive init error.\n");
429    }
430    insert_audio();
431
432    ret = PWM_init();
433    if (ret != 0) {
434        printf("pwm init error.\n");
435    }
436
437#ifndef LOSCFG_DRIVERS_HDF_PLATFORM_SPI
438#ifdef LOSCFG_DRIVERS_SPI
439    dprintf("spi bus init ...\n");
440    extern int spi_dev_init(void);
441    spi_dev_init();
442#endif
443#endif
444
445#ifndef LOSCFG_DRIVERS_HDF_PLATFORM_I2C
446#ifdef LOSCFG_DRIVERS_I2C
447    dprintf("i2c bus init ...\n");
448    extern int i2c_dev_init(void);
449    i2c_dev_init();
450#endif
451#endif
452
453    ret = hi_sensor_spi_init();
454    if (ret != 0) {
455        printf("sensor spi init error.\n");
456    }
457
458    ret = Cipher_init();
459    if (ret != 0) {
460        printf("cipher init error.\n");
461    }
462
463    ret = MIPI_RX_init();
464    if (ret != 0) {
465        printf("mipi_rx init error.\n");
466    }
467
468    ret = hi_sensor_i2c_init();
469    if (ret != 0) {
470        printf("sensor i2c init error.\n");
471    } else {
472        printf("sensor i2c init OK.\n");
473    }
474
475    ret = TDE_init();
476    if (ret != 0) {
477        printf("TDE init error.\n");
478    }
479
480    ret =  HIFB_init();
481    if (ret != 0) {
482        printf("HIFB_init error.\n");
483    }
484
485    ret =  PM_init();
486    if (ret != 0) {
487        printf("PM_init error.\n");
488    }
489
490    printf("SDK init ok...\n");
491}
492
493
494#ifdef __cplusplus
495#if __cplusplus
496}
497#endif
498#endif /* End of #ifdef __cplusplus */
499