1/* 2 * Copyright 2020, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#include <errno.h> 14 15#include <utils/util.h> 16#include <resetserver_client.h> 17 18typedef struct resetserver_interface_data { 19 int (*resetserver_assert)(reset_id_t id); 20 int (*resetserver_deassert)(reset_id_t id); 21} resetserver_interface_data_t; 22 23static resetserver_interface_data_t resetserver_private_data; 24 25static int resetserver_assert_wrapper(void *data, reset_id_t id) 26{ 27 resetserver_interface_data_t *resetserver_data = data; 28 29 return resetserver_data->resetserver_assert(id); 30} 31 32static int resetserver_deassert_wrapper(void *data, reset_id_t id) 33{ 34 resetserver_interface_data_t *resetserver_data = data; 35 36 return resetserver_data->resetserver_deassert(id); 37} 38 39int resetserver_interface_init(int (*resetserver_assert)(reset_id_t id), 40 int (*resetserver_deassert)(reset_id_t id), 41 reset_sys_t *reset_sys) 42{ 43 if (!resetserver_assert) { 44 ZF_LOGE("reset_server_assert is NULL"); 45 return -EINVAL; 46 } 47 48 if (!resetserver_deassert) { 49 ZF_LOGE("reset_server_deassert is NULL"); 50 return -EINVAL; 51 } 52 53 if (!reset_sys) { 54 ZF_LOGE("reset is NULL"); 55 return -EINVAL; 56 } 57 58 resetserver_private_data.resetserver_assert = resetserver_assert; 59 resetserver_private_data.resetserver_deassert = resetserver_deassert; 60 61 reset_sys->data = &resetserver_private_data; 62 reset_sys->reset_assert = resetserver_assert_wrapper; 63 reset_sys->reset_deassert = resetserver_deassert_wrapper; 64 65 return 0; 66} 67