1 /*
2  * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <string.h>
8 #include <metal/sys.h>
9 
metal_init(const struct metal_init_params * params)10 int metal_init(const struct metal_init_params *params)
11 {
12 	int error = 0;
13 
14 	if (_metal.common.ref_count++ != 0)
15 		return 0;
16 
17 	memset(&_metal, 0, sizeof(_metal));
18 
19 	_metal.common.log_handler   = params->log_handler;
20 	_metal.common.log_level     = params->log_level;
21 
22 	metal_list_init(&_metal.common.bus_list);
23 	metal_list_init(&_metal.common.generic_shmem_list);
24 	metal_list_init(&_metal.common.generic_device_list);
25 
26 	error = metal_sys_init(params);
27 	if (error)
28 		return error;
29 
30 	++_metal.common.ref_count;
31 	return error;
32 }
33 
metal_finish(void)34 void metal_finish(void)
35 {
36 	if (--_metal.common.ref_count != 0)
37 		return;
38 
39 	metal_sys_finish();
40 	memset(&_metal, 0, sizeof(_metal));
41 }
42