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)10int 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)34void 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