/* * Copyright (c) 2021 Huawei Device Co., Ltd. * * HDF is dual licensed: you can use it either under the terms of * the GPL, or the BSD license, at your option. * See the LICENSE file in the root of this repository for complete details. */ #include "hdf_chip.h" #include "hdf_chip_config.h" #include "hdf_device_desc.h" #include "hdf_power.h" #include "hdf_reset.h" #include "osal/osal_mem.h" struct HdfVirtualDevice *CreateVirtualDevice(struct HdfChipConfig *config) { struct HdfVirtualDevice *device = NULL; int32_t ret = HDF_SUCCESS; if (config == NULL) { return NULL; } device = (struct HdfVirtualDevice *)OsalMemCalloc(sizeof(struct HdfVirtualDevice)); if (device == NULL) { return NULL; } do { device->name = config->name; device->power = CreateVirtualPower(config->powers); if (device->power == NULL) { ret = HDF_FAILURE; break; } device->reset = CreateVirtualReset(&config->reset); if (device->reset == NULL) { ret = HDF_FAILURE; break; } } while (false); if (ret != HDF_SUCCESS) { ReleaseVirtualDevice(device); device = NULL; } return device; } void ReleaseVirtualDevice(struct HdfVirtualDevice *device) { if (device == NULL) { return; } if (device->power != NULL && device->power->ops != NULL && device->power->ops->Release != NULL) { device->power->ops->Release(device->power); device->power = NULL; } if (device->reset != NULL && device->reset->ops != NULL && device->reset->ops->Release != NULL) { device->reset->ops->Release(device->reset); device->reset = NULL; } OsalMemFree(device); }