mirror of
https://github.com/openharmony/drivers_adapter.git
synced 2026-07-01 03:23:20 -04:00
add liteos_m adapter
This commit is contained in:
@@ -1 +1,2 @@
|
||||
khdf/linux
|
||||
hdf_config_gen*
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
group("hdf_lite") {
|
||||
deps = [
|
||||
"osal:hdf_osal_lite",
|
||||
"core:hdf_core",
|
||||
"hcs:hdf_hcs",
|
||||
"test\sample_driver:sample_driver"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
||||
Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
of conditions and the following disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,26 @@
|
||||
# khdf\_liteosm<a name="EN-US_TOPIC_0000001096228646"></a>
|
||||
|
||||
- [Introduction](#section11660541593)
|
||||
- [Directory Structure](#section161941989596)
|
||||
- [Repositories Involved](#section1371113476307)
|
||||
|
||||
## Introduction<a name="section11660541593"></a>
|
||||
|
||||
This repository stores the code and compilation scripts for the OpenHarmony driver subsystem to adapt to the liteos\_m kernel and to deploy the hardware driver foundation \(HDF\).
|
||||
|
||||
## Directory Structure<a name="section161941989596"></a>
|
||||
|
||||
```
|
||||
/drivers/adapter/khdf/liteos_m
|
||||
├── core # Driver code for adapting to the LiteOS Cortex-M kernel
|
||||
├── hcs # Script for compiling the HDF configuration source (HCS) file
|
||||
├── osal # System APIs for adapting to the LiteOS Cortex-M kernel
|
||||
└── test # Test code for the kernel driver framework
|
||||
```
|
||||
|
||||
## Repositories Involved<a name="section1371113476307"></a>
|
||||
|
||||
[Driver subsystem](https://gitee.com/openharmony/docs/blob/master/en/readme/driver-subsystem.md)
|
||||
|
||||
[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README.md)
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# khdf\_liteosm<a name="ZH-CN_TOPIC_0000001096228646"></a>
|
||||
|
||||
- [简介](#section11660541593)
|
||||
- [目录](#section161941989596)
|
||||
- [相关仓](#section1371113476307)
|
||||
|
||||
## 简介<a name="section11660541593"></a>
|
||||
|
||||
该仓主要存放OpenHarmony驱动子系统适配liteos\_m内核的代码和编译脚本,在liteos\_m内核中部署OpenHarmony驱动框架。
|
||||
|
||||
## 目录<a name="section161941989596"></a>
|
||||
|
||||
```
|
||||
/drivers/adapter/khdf/liteos_m
|
||||
├── core #适配liteos_m内核的框架代码
|
||||
├── hcs #hcs配置编译脚本
|
||||
├── osal #适配liteos_m内核的系统接口
|
||||
└── test #内核驱动框架测试代码
|
||||
```
|
||||
|
||||
## 相关仓<a name="section1371113476307"></a>
|
||||
|
||||
[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md)
|
||||
|
||||
[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md)
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import("//drivers/adapter/khdf/liteos_m/hdf.gni")
|
||||
|
||||
config("libhdf_core_pub_config") {
|
||||
visibility = [ ":*" ]
|
||||
|
||||
include_dirs = [
|
||||
"$hdf_fwk_path/include",
|
||||
"$hdf_fwk_path/include/osal",
|
||||
"$hdf_fwk_path/include/utils",
|
||||
"$hdf_fwk_path/utils/include",
|
||||
"$hdf_fwk_path/include/platform",
|
||||
"$hdf_fwk_path/include/core",
|
||||
"$hdf_fwk_path/include/net",
|
||||
"$hdf_fwk_path/include/wifi",
|
||||
"$hdf_fwk_path/model/network/common/netdevice",
|
||||
"$hdf_fwk_path/ability/sbuf/include",
|
||||
"$hdf_fwk_path/support/platform/include",
|
||||
"$hdf_fwk_path/core/host/include",
|
||||
"$hdf_fwk_path/core/manager/include",
|
||||
"$hdf_fwk_path/core/shared/include",
|
||||
"$hdf_fwk_path/core/common/include/manager",
|
||||
"$hdf_fwk_path/core/common/include/host",
|
||||
"$hdf_fwk_path/core/adapter/vnode/include",
|
||||
"$hdf_fwk_path/core/adapter/syscall/include",
|
||||
"$hdf_fwk_path/include/config",
|
||||
"$hdf_fwk_path/ability/config/hcs_parser/include",
|
||||
]
|
||||
}
|
||||
|
||||
static_library("hdf_core") {
|
||||
sources = [
|
||||
"common/src/hdf_device_node_ext.c",
|
||||
"common/src/devmgr_service_start.c",
|
||||
"$hdf_fwk_path/utils/src/hdf_cstring.c",
|
||||
"$hdf_fwk_path/utils/src/hdf_slist.c",
|
||||
"$hdf_fwk_path/utils/src/hdf_sref.c",
|
||||
"$hdf_fwk_path/ability/sbuf/src/hdf_sbuf.c",
|
||||
"$hdf_fwk_path/core/host/src/devhost_service.c",
|
||||
"$hdf_fwk_path/core/host/src/devmgr_service_clnt.c",
|
||||
"$hdf_fwk_path/core/host/src/devsvc_manager_clnt.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_device.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_device_node.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_device_token.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_driver_loader.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_observer_record.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_service_subscriber.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_device_object.c",
|
||||
"$hdf_fwk_path/core/host/src/hdf_service_observer.c",
|
||||
"$hdf_fwk_path/core/host/src/power_state_token.c",
|
||||
"$hdf_fwk_path/core/manager/src/devhost_service_clnt.c",
|
||||
"$hdf_fwk_path/core/manager/src/device_token_clnt.c",
|
||||
"$hdf_fwk_path/core/manager/src/devmgr_service.c",
|
||||
"$hdf_fwk_path/core/manager/src/devsvc_manager.c",
|
||||
"$hdf_fwk_path/core/manager/src/hdf_driver_installer.c",
|
||||
"$hdf_fwk_path/core/manager/src/hdf_host_info.c",
|
||||
"$hdf_fwk_path/core/manager/src/power_state_manager.c",
|
||||
"$hdf_fwk_path/core/manager/src/power_state_token_clnt.c",
|
||||
"$hdf_fwk_path/core/shared/src/hdf_service_record.c",
|
||||
"$hdf_fwk_path/core/shared/src/hdf_device_info.c",
|
||||
"$hdf_fwk_path/core/shared/src/hdf_object_manager.c",
|
||||
"$hdf_fwk_path/core/common/src/devlite_object_config.c",
|
||||
"$hdf_fwk_path/core/common/src/hdf_attribute.c",
|
||||
"$hdf_fwk_path/core/common/src/load_driver_entry.c",
|
||||
"$hdf_fwk_path/ability/config/hcs_parser/src/hcs_blob_if.c",
|
||||
"$hdf_fwk_path/ability/config/hcs_parser/src/hcs_parser.c",
|
||||
"$hdf_fwk_path/ability/config/hcs_parser/src/hcs_generate_tree.c",
|
||||
"$hdf_fwk_path/ability/config/hcs_parser/src/hcs_tree_if.c",
|
||||
"$hdf_fwk_path/ability/config/device_resource_if.c",
|
||||
]
|
||||
|
||||
include_dirs = []
|
||||
public_configs = [
|
||||
":libhdf_core_pub_config"
|
||||
]
|
||||
deps = [
|
||||
"$khdf_path/osal:hdf_osal_lite"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "devmgr_service_start.h"
|
||||
#include "devhost_service_clnt.h"
|
||||
#include "devmgr_service.h"
|
||||
#include "devsvc_manager_clnt.h"
|
||||
#include "hdf_base.h"
|
||||
#include "hdf_device_node.h"
|
||||
#include "hdf_io_service.h"
|
||||
#include "hdf_log.h"
|
||||
#include "hdf_sbuf.h"
|
||||
|
||||
#define DEV_MGR_NODE_PERM 0660
|
||||
|
||||
static int g_isQuickLoad = DEV_MGR_SLOW_LOAD;
|
||||
|
||||
int32_t HdfGetServiceNameByDeviceClass(DeviceClass deviceClass, struct HdfSBuf *reply)
|
||||
{
|
||||
struct HdfSListIterator itHost;
|
||||
struct HdfSListIterator itDeviceInfo;
|
||||
struct HdfDeviceInfo *deviceInfo = NULL;
|
||||
struct DevHostServiceClnt *hostClnt = NULL;
|
||||
struct DevmgrService *devMgrSvc = (struct DevmgrService *)DevmgrServiceGetInstance();
|
||||
if (devMgrSvc == NULL || reply == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
reply->readPos = 0;
|
||||
reply->writePos = 0;
|
||||
HdfSListIteratorInit(&itHost, &devMgrSvc->hosts);
|
||||
while (HdfSListIteratorHasNext(&itHost)) {
|
||||
hostClnt = (struct DevHostServiceClnt *)HdfSListIteratorNext(&itHost);
|
||||
HdfSListIteratorInit(&itDeviceInfo, hostClnt->deviceInfos);
|
||||
while (HdfSListIteratorHasNext(&itDeviceInfo)) {
|
||||
deviceInfo = (struct HdfDeviceInfo *)HdfSListIteratorNext(&itDeviceInfo);
|
||||
if (deviceInfo->policy == SERVICE_POLICY_CAPACITY) {
|
||||
struct HdfDeviceObject *deviceObject = DevSvcManagerClntGetDeviceObject(deviceInfo->svcName);
|
||||
if (deviceObject == NULL || (deviceObject->deviceClass != deviceClass)) {
|
||||
continue;
|
||||
}
|
||||
HdfSbufWriteString(reply, deviceInfo->svcName);
|
||||
}
|
||||
}
|
||||
}
|
||||
HdfSbufWriteString(reply, NULL);
|
||||
}
|
||||
|
||||
int32_t HdfLoadDriverByServiceName(const char *svcName)
|
||||
{
|
||||
if (svcName == NULL) {
|
||||
HDF_LOGE("%s: load svc name is null", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
static struct SubscriberCallback callback = {
|
||||
.deviceObject = NULL,
|
||||
.OnServiceConnected = NULL,
|
||||
};
|
||||
return DevSvcManagerClntSubscribeService(svcName, callback);
|
||||
}
|
||||
|
||||
int DeviceManagerUnloadService(const char *svcName)
|
||||
{
|
||||
if (svcName == NULL) {
|
||||
HDF_LOGE("%s: unload svc name is null", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
return DevSvcManagerClntUnsubscribeService(svcName);
|
||||
}
|
||||
|
||||
void DeviceManagerSetQuickLoad(int loadFlag)
|
||||
{
|
||||
g_isQuickLoad = loadFlag;
|
||||
}
|
||||
|
||||
int DeviceManagerIsQuickLoad()
|
||||
{
|
||||
return g_isQuickLoad;
|
||||
}
|
||||
|
||||
int DeviceManagerStart()
|
||||
{
|
||||
struct IDevmgrService *instance = DevmgrServiceGetInstance();
|
||||
HDF_LOGE("%s in", __func__);
|
||||
if (instance == NULL || instance->StartService == NULL) {
|
||||
HDF_LOGE("Device manager start failed, service instance is null!");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
return instance->StartService(instance);
|
||||
}
|
||||
|
||||
int DeviceManagerStartStep2()
|
||||
{
|
||||
if (DeviceManagerIsQuickLoad() == DEV_MGR_SLOW_LOAD) {
|
||||
HDF_LOGW("%s device manager is not set quick load!", __func__);
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
struct DevmgrService *devMgrSvc = (struct DevmgrService *)DevmgrServiceGetInstance();
|
||||
return DevmgrServiceLoadLeftDriver(devMgrSvc);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "hdf_device_node_ext.h"
|
||||
#include "devsvc_manager_clnt.h"
|
||||
#include "hdf_base.h"
|
||||
#include "hdf_device_desc.h"
|
||||
#include "hdf_io_service.h"
|
||||
#include "hdf_log.h"
|
||||
#include "hdf_sbuf.h"
|
||||
#include "osal_mem.h"
|
||||
|
||||
#define HDF_LOG_TAG device_node_ext
|
||||
|
||||
static int DeviceNodeExtDispatch(struct HdfObject *stub, int code, struct HdfSBuf *data, struct HdfSBuf *reply)
|
||||
{
|
||||
struct IDeviceIoService *deviceMethod = NULL;
|
||||
const struct HdfDeviceInfo *deviceInfo = NULL;
|
||||
struct HdfDeviceNode *devNode = NULL;
|
||||
|
||||
if (stub == NULL) {
|
||||
HDF_LOGE("input ioService null");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
uint64_t ioClientPtr = 0;
|
||||
if (!HdfSbufReadUint64(reply, &ioClientPtr) || ioClientPtr == 0) {
|
||||
HDF_LOGE("input ioClient null");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
HdfSbufFlush(reply);
|
||||
devNode = CONTAINER_OF(stub, struct HdfDeviceNode, deviceObject);
|
||||
deviceMethod = devNode->deviceObject.service;
|
||||
if (deviceMethod == NULL) {
|
||||
HDF_LOGE("Device service interface is null");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
deviceInfo = devNode->deviceInfo;
|
||||
if (deviceInfo == NULL) {
|
||||
HDF_LOGE("Device deviceInfo is null");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
if (deviceInfo->policy == SERVICE_POLICY_CAPACITY) {
|
||||
if (deviceMethod->Dispatch == NULL) {
|
||||
HDF_LOGE("Remote service dispatch is null");
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
return deviceMethod->Dispatch((struct HdfDeviceIoClient *)((uintptr_t)ioClientPtr), code, data, reply);
|
||||
}
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
static int DeviceNodeExtPublishService(struct HdfDeviceNode *inst, const char *serviceName)
|
||||
{
|
||||
const struct HdfDeviceInfo *deviceInfo = NULL;
|
||||
struct HdfDeviceObject *deviceObject = NULL;
|
||||
struct DeviceNodeExt *devNodeExt = (struct DeviceNodeExt *)inst;
|
||||
if (devNodeExt == NULL) {
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
int ret = HdfDeviceNodePublishPublicService(inst, serviceName);
|
||||
if (ret != HDF_SUCCESS) {
|
||||
HDF_LOGE("Device publish service failed, ret is: %d", ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void DeviceNodeExtConstruct(struct DeviceNodeExt *inst)
|
||||
{
|
||||
struct IDeviceNode *nodeIf = (struct IDeviceNode *)inst;
|
||||
if (nodeIf != NULL) {
|
||||
HdfDeviceNodeConstruct(&inst->super);
|
||||
nodeIf->PublishService = DeviceNodeExtPublishService;
|
||||
}
|
||||
}
|
||||
|
||||
struct HdfObject *DeviceNodeExtCreate()
|
||||
{
|
||||
struct DeviceNodeExt *instance =
|
||||
(struct DeviceNodeExt *)OsalMemCalloc(sizeof(struct DeviceNodeExt));
|
||||
if (instance != NULL) {
|
||||
DeviceNodeExtConstruct(instance);
|
||||
instance->ioService = NULL;
|
||||
}
|
||||
return (struct HdfObject *)instance;
|
||||
}
|
||||
|
||||
void DeviceNodeExtRelease(struct HdfObject *object)
|
||||
{
|
||||
struct DeviceNodeExt *instance = (struct DeviceNodeExt *)object;
|
||||
if (instance != NULL) {
|
||||
HdfDeviceNodeDestruct(&instance->super);
|
||||
OsalMemFree(instance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import("//drivers/adapter/khdf/liteos_m/hdf.gni")
|
||||
|
||||
static_library("hdf_hcs") {
|
||||
sources = [
|
||||
"hdf_config_gen_hex.c"
|
||||
]
|
||||
config_path = product_path + "/config/hdf.hcs"
|
||||
print("aaa " + ohos_root_path)
|
||||
exec_script(
|
||||
"hcs_build.py",
|
||||
[
|
||||
ohos_root_path+"$hdf_fwk_path/tools/hc-gen/bin/hc-gen",
|
||||
"-i",
|
||||
"-o",
|
||||
rebase_path("hdf_config_gen.c"),
|
||||
config_path
|
||||
],
|
||||
"")
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of Willow Garage, Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import platform
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
|
||||
def exec_command(cmd):
|
||||
print("exec_command:")
|
||||
print(cmd)
|
||||
process = subprocess.Popen(cmd)
|
||||
process.wait()
|
||||
ret_code = process.returncode
|
||||
|
||||
if ret_code != 0:
|
||||
raise Exception("{} failed, return code is {}".format(cmd, ret_code))
|
||||
|
||||
|
||||
def main(argv):
|
||||
build_cmd = argv[1:]
|
||||
exec_command(build_cmd)
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv))
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
khdf_path = "//drivers/adapter/khdf/liteos_m"
|
||||
hdf_fwk_path = "//drivers/framework"
|
||||
@@ -0,0 +1,58 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import("//drivers/adapter/khdf/liteos_m/hdf.gni")
|
||||
|
||||
config("libhdf_osal_pub_config") {
|
||||
visibility = [ ":*" ]
|
||||
include_dirs = [
|
||||
"include",
|
||||
"//utils/native/lite/include",
|
||||
"//drivers/framework/include/osal",
|
||||
"//drivers/framework/include/utils",
|
||||
"//kernel/liteos_m/kernel/arch/include",
|
||||
"//base/hiviewdfx/hilog_lite/interfaces/native/innerkits",
|
||||
]
|
||||
}
|
||||
|
||||
static_library("hdf_osal_lite") {
|
||||
sources = [
|
||||
"src/osal_mutex.c",
|
||||
"src/osal_mem.c",
|
||||
"src/osal_sem.c",
|
||||
"src/osal_thread.c",
|
||||
"src/osal_time.c",
|
||||
"src/osal_timer.c",
|
||||
"src/osal_spinlock.c",
|
||||
]
|
||||
include_dirs = []
|
||||
public_configs = [
|
||||
":libhdf_osal_pub_config",
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef HDF_LOG_ADAPTER_H
|
||||
#define HDF_LOG_ADAPTER_H
|
||||
|
||||
#ifdef LOSCFG_BASE_CORE_HILOG
|
||||
#include "hilog/log.h"
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#ifdef LOSCFG_BASE_CORE_HILOG
|
||||
#undef LOG_DOMAIN
|
||||
#define LOG_DOMAIN 0xD002500
|
||||
|
||||
#define HDF_LOGV_WRAPPER(fmt, arg...) HILOG_DEBUG(LOG_DOMAIN, fmt, ##arg)
|
||||
|
||||
#define HDF_LOGD_WRAPPER(fmt, arg...) HILOG_DEBUG(LOG_DOMAIN, fmt, ##arg)
|
||||
|
||||
#define HDF_LOGI_WRAPPER(fmt, arg...) HILOG_INFO(LOG_DOMAIN, fmt, ##arg)
|
||||
|
||||
#define HDF_LOGW_WRAPPER(fmt, arg...) HILOG_WARN(LOG_DOMAIN, fmt, ##arg)
|
||||
|
||||
#define HDF_LOGE_WRAPPER(fmt, arg...) HILOG_ERROR(LOG_DOMAIN, fmt, ##arg)
|
||||
#else
|
||||
int hal_trace_printf(int attr, const char *fmt, ...) __attribute__((weak));
|
||||
#define PRINTF(level, fmt, ...) do { if (hal_trace_printf) hal_trace_printf(level, fmt, ##__VA_ARGS__); } while (0)
|
||||
|
||||
#define HDF_LOGV_WRAPPER(fmt, arg...) PRINTF(6, "[HDF:V/" LOG_TAG "]" fmt "\n", ##arg)
|
||||
|
||||
#define HDF_LOGD_WRAPPER(fmt, arg...) PRINTF(5, "[HDF:D/" LOG_TAG "]" fmt "\n", ##arg)
|
||||
|
||||
#define HDF_LOGI_WRAPPER(fmt, arg...) PRINTF(4, "[HDF:I/" LOG_TAG "]" fmt "\n", ##arg)
|
||||
|
||||
#define HDF_LOGW_WRAPPER(fmt, arg...) PRINTF(2, "[HDF:W/" LOG_TAG "]" fmt "\n", ##arg)
|
||||
|
||||
#define HDF_LOGE_WRAPPER(fmt, arg...) PRINTF(1, "[HDF:E/" LOG_TAG "]" fmt "\n", ##arg)
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* HDF_LOG_ADAPTER_H */
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef HDF_TYPE_H
|
||||
#define HDF_TYPE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#endif /* HDF_TYPE_H */
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef OSAL_ATOMIC_DEF_H
|
||||
#define OSAL_ATOMIC_DEF_H
|
||||
|
||||
#include <los_atomic.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define OsalAtomicReadWrapper(v) ((v)->counter)
|
||||
#define OsalAtomicSetWrapper(v, value) (v)->counter = value
|
||||
#define OsalAtomicIncWrapper(v) ((v)->counter)++
|
||||
#define OsalAtomicIncRetWrapper(v) (++((v)->counter))
|
||||
#define OsalAtomicDecWrapper(v) (((v)->counter)--)
|
||||
#define OsalAtomicDecRetWrapper(v) (--((v)->counter))
|
||||
|
||||
#define OSAL_BITS_PER_LONG 32
|
||||
#define OSAL_BIT_MASK(nr) (1UL << ((nr) % OSAL_BITS_PER_LONG))
|
||||
#define OSAL_BIT_WORD(nr) ((nr) / OSAL_BITS_PER_LONG)
|
||||
#define OSAL_BITOP_WORD(nr) ((nr) / OSAL_BITS_PER_LONG)
|
||||
|
||||
static inline int32_t OsalTestBitWrapper(unsigned long nr, const volatile unsigned long *addr)
|
||||
{
|
||||
return (1UL & (addr[OSAL_BIT_WORD(nr)] >> (nr & (OSAL_BITS_PER_LONG - 1))));
|
||||
}
|
||||
|
||||
static inline int32_t OsalTestSetBitWrapper(unsigned long nr, volatile unsigned long *addr)
|
||||
{
|
||||
uint32_t intSave = LOS_IntLock();
|
||||
|
||||
const unsigned long mask = OSAL_BIT_MASK(nr);
|
||||
unsigned long *p = ((unsigned long *)addr) + OSAL_BIT_WORD(nr);
|
||||
unsigned long old = *p;
|
||||
*p = old | mask;
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
return ((old & mask) != 0);
|
||||
}
|
||||
|
||||
static inline int32_t OsalTestClearBitWrapper(unsigned long nr, volatile unsigned long *addr)
|
||||
{
|
||||
uint32_t intSave = LOS_IntLock();
|
||||
|
||||
const unsigned long mask = OSAL_BIT_MASK(nr);
|
||||
unsigned long *p = ((unsigned long *)addr) + OSAL_BIT_WORD(nr);
|
||||
unsigned long old = *p;
|
||||
*p = old & ~mask;
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
return ((old & mask) != 0);
|
||||
}
|
||||
|
||||
static inline void OsalClearBitWrapper(unsigned long nr, volatile unsigned long *addr)
|
||||
{
|
||||
uint32_t intSave = LOS_IntLock();
|
||||
|
||||
const unsigned long mask = OSAL_BIT_MASK(nr);
|
||||
unsigned long *p = ((unsigned long *)addr) + OSAL_BIT_WORD(nr);
|
||||
*p &= ~mask;
|
||||
|
||||
LOS_IntRestore(intSave);
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* OSAL_ATOMIC_DEF_H */
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef OSAL_MATH_H
|
||||
#define OSAL_MATH_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
static inline int64_t OsalDivS64(int64_t dividend, int32_t divisor)
|
||||
{
|
||||
return ((divisor != 0) ? (dividend / divisor) : 0);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* OSAL_MATH_H */
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_mem.h"
|
||||
#include "hdf_log.h"
|
||||
#include "los_memory.h"
|
||||
#include "osal_atomic_def.h"
|
||||
#include "securec.h"
|
||||
#define HDF_LOG_TAG osal_mem
|
||||
|
||||
void *OsalMemAlloc(size_t size)
|
||||
{
|
||||
void *buf = NULL;
|
||||
|
||||
if (size == 0) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buf = LOS_MemAlloc((VOID *)OS_SYS_MEM_ADDR, size);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *OsalMemCalloc(size_t size)
|
||||
{
|
||||
void *buf = NULL;
|
||||
|
||||
if (size == 0) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buf = OsalMemAlloc(size);
|
||||
if (buf != NULL) {
|
||||
(void)memset_s(buf, size, 0, size);
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *OsalMemAllocAlign(size_t alignment, size_t size)
|
||||
{
|
||||
void *buf = NULL;
|
||||
|
||||
if (size == 0) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buf = LOS_MemAllocAlign((VOID *)OS_SYS_MEM_ADDR, size, alignment);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void OsalMemFree(void *mem)
|
||||
{
|
||||
if (mem != NULL) {
|
||||
LOS_MemFree((VOID *)OS_SYS_MEM_ADDR, mem);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_mutex.h"
|
||||
#include "hdf_log.h"
|
||||
#include "los_mux.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_mutex
|
||||
|
||||
#define HDF_INVALID_MUX_ID UINT32_MAX
|
||||
|
||||
int32_t OsalMutexInit(struct OsalMutex *mutex)
|
||||
{
|
||||
uint32_t ret;
|
||||
uint32_t muxId = 0;
|
||||
|
||||
if (mutex == NULL) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxCreate(&muxId);
|
||||
if (ret == LOS_OK) {
|
||||
mutex->realMutex = (void *)(uintptr_t)muxId;
|
||||
} else {
|
||||
mutex->realMutex = (void *)(uintptr_t)HDF_INVALID_MUX_ID;
|
||||
HDF_LOGE("%s create fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalMutexDestroy(struct OsalMutex *mutex)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (mutex == NULL || mutex->realMutex == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxDelete((uint32_t)(uintptr_t)mutex->realMutex);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
mutex->realMutex = (void *)(uintptr_t)HDF_INVALID_MUX_ID;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalMutexLock(struct OsalMutex *mutex)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (mutex == NULL || mutex->realMutex == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxPend((uint32_t)(uintptr_t)mutex->realMutex, LOS_MS2Tick(HDF_WAIT_FOREVER));
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalMutexTimedLock(struct OsalMutex *mutex, uint32_t ms)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (mutex == NULL || mutex->realMutex == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxPend((uint32_t)(uintptr_t)mutex->realMutex, LOS_MS2Tick(ms));
|
||||
if (ret != LOS_OK) {
|
||||
if (ret == LOS_ERRNO_MUX_TIMEOUT) {
|
||||
return HDF_ERR_TIMEOUT;
|
||||
}
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalMutexUnlock(struct OsalMutex *mutex)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (mutex == NULL || mutex->realMutex == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxPost((uint32_t)(uintptr_t)mutex->realMutex);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_sem.h"
|
||||
#ifndef __LITEOS_M__
|
||||
#include "los_hwi.h"
|
||||
#endif
|
||||
#include "los_sem.h"
|
||||
#ifndef __LITEOS_M__
|
||||
#include "los_typedef.h"
|
||||
#endif
|
||||
#include "hdf_log.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_sem
|
||||
#define HDF_INVALID_SEM_ID UINT32_MAX
|
||||
|
||||
int32_t OsalSemInit(struct OsalSem *sem, uint32_t value)
|
||||
{
|
||||
uint32_t semId;
|
||||
uint32_t ret;
|
||||
|
||||
if (sem == NULL) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_SemCreate((uint16_t)value, &semId);
|
||||
if (ret == LOS_OK) {
|
||||
sem->realSemaphore = (void *)(uintptr_t)semId;
|
||||
return HDF_SUCCESS;
|
||||
} else {
|
||||
sem->realSemaphore = (void *)(uintptr_t)HDF_INVALID_SEM_ID;
|
||||
HDF_LOGE("%s create fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t OsalSemWait(struct OsalSem *sem, uint32_t ms)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (sem == NULL || sem->realSemaphore == (void *)(uintptr_t)HDF_INVALID_SEM_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_SemPend((uint32_t)(uintptr_t)sem->realSemaphore, LOS_MS2Tick(ms));
|
||||
if (ret == LOS_OK) {
|
||||
return HDF_SUCCESS;
|
||||
} else {
|
||||
if (ret == LOS_ERRNO_SEM_TIMEOUT) {
|
||||
return HDF_ERR_TIMEOUT;
|
||||
}
|
||||
HDF_LOGE("%s LOS_SemPend fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t OsalSemPost(struct OsalSem *sem)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (sem == NULL || sem->realSemaphore == (void *)(uintptr_t)HDF_INVALID_SEM_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_SemPost((uint32_t)(uintptr_t)sem->realSemaphore);
|
||||
if (ret == LOS_OK) {
|
||||
return HDF_SUCCESS;
|
||||
} else {
|
||||
HDF_LOGE("%s LOS_SemPost fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t OsalSemDestroy(struct OsalSem *sem)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (sem == NULL || sem->realSemaphore == (void *)(uintptr_t)HDF_INVALID_SEM_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_SemDelete((uint32_t)(uintptr_t)sem->realSemaphore);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s LOS_SemDelete fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
sem->realSemaphore = (void *)(uintptr_t)HDF_INVALID_SEM_ID;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_spinlock.h"
|
||||
#include "hdf_log.h"
|
||||
#include "los_mux.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_spinlock
|
||||
|
||||
#define HDF_INVALID_MUX_ID UINT32_MAX
|
||||
|
||||
int32_t OsalSpinInit(OsalSpinlock *spinlock)
|
||||
{
|
||||
uint32_t ret;
|
||||
uint32_t muxId = 0;
|
||||
|
||||
if (spinlock == NULL) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxCreate(&muxId);
|
||||
if (ret == LOS_OK) {
|
||||
spinlock->realSpinlock = (void *)(uintptr_t)muxId;
|
||||
} else {
|
||||
spinlock->realSpinlock = (void *)(uintptr_t)HDF_INVALID_MUX_ID;
|
||||
HDF_LOGE("%s create fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalSpinDestroy(OsalSpinlock *spinlock)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (spinlock == NULL || spinlock->realSpinlock == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxDelete((uint32_t)(uintptr_t)spinlock->realSpinlock);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
spinlock->realSpinlock = (void *)(uintptr_t)HDF_INVALID_MUX_ID;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalSpinLock(OsalSpinlock *spinlock)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (spinlock == NULL || spinlock->realSpinlock == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxPend((uint32_t)(uintptr_t)spinlock->realSpinlock, LOS_MS2Tick(HDF_WAIT_FOREVER));
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalSpinUnlock(OsalSpinlock *spinlock)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
if (spinlock == NULL || spinlock->realSpinlock == (void *)(uintptr_t)HDF_INVALID_MUX_ID) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_MuxPost((uint32_t)(uintptr_t)spinlock->realSpinlock);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s fail %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_thread.h"
|
||||
#include "hdf_log.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_task.h"
|
||||
#include "osal_mem.h"
|
||||
#include "securec.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_thread
|
||||
|
||||
#define LOS_PRIORITY_WIN 3
|
||||
#define OS_TASK_PRIORITY_LOWEST 31
|
||||
#define OSAL_THREAD_NAME "hdf_thread"
|
||||
#define OSAL_INVALID_THREAD_ID UINT32_MAX
|
||||
#define OSAL_INVALID_CPU_ID UINT32_MAX
|
||||
|
||||
struct ThreadWrapper {
|
||||
OsalThreadEntry threadEntry;
|
||||
void *entryPara;
|
||||
uint32_t cpuID;
|
||||
uint32_t tid;
|
||||
};
|
||||
|
||||
enum {
|
||||
OSAL_PRIORITY_LOW = 15,
|
||||
OSAL_PRIORITY_MIDDLE = 16,
|
||||
OSAL_PRIORITY_HIGH = 24,
|
||||
OSAL_PRIORITY_HIGHEST = 31,
|
||||
};
|
||||
int32_t OsalThreadCreate(struct OsalThread *thread, OsalThreadEntry threadEntry, void *entryPara)
|
||||
{
|
||||
struct ThreadWrapper *para = NULL;
|
||||
|
||||
if (thread == NULL || threadEntry == NULL) {
|
||||
HDF_LOGE("%s invalid param", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
thread->realThread = NULL;
|
||||
para = (struct ThreadWrapper *)OsalMemCalloc(sizeof(*para));
|
||||
if (para == NULL) {
|
||||
HDF_LOGE("%s malloc fail", __func__);
|
||||
return HDF_ERR_MALLOC_FAIL;
|
||||
}
|
||||
|
||||
para->entryPara = entryPara;
|
||||
para->threadEntry = threadEntry;
|
||||
para->tid = OSAL_INVALID_THREAD_ID;
|
||||
para->cpuID = OSAL_INVALID_CPU_ID;
|
||||
thread->realThread = para;
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalThreadBind(struct OsalThread *thread, unsigned int cpuID)
|
||||
{
|
||||
struct ThreadWrapper *para = NULL;
|
||||
|
||||
if (thread == NULL || thread->realThread == NULL) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
para = (struct ThreadWrapper *)thread->realThread;
|
||||
para->cpuID = cpuID;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalThreadStart(struct OsalThread *thread, const struct OsalThreadParam *param)
|
||||
{
|
||||
uint32_t ret;
|
||||
TSK_INIT_PARAM_S stTskInitParam;
|
||||
uint16_t priority;
|
||||
struct ThreadWrapper *para = NULL;
|
||||
|
||||
if (OS_INT_ACTIVE) {
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
if (thread == NULL || thread->realThread == NULL || param == NULL || param->priority > OSAL_THREAD_PRI_HIGHEST) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
para = (struct ThreadWrapper *)thread->realThread;
|
||||
(void)memset_s(&stTskInitParam, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));
|
||||
stTskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)para->threadEntry;
|
||||
if (param->stackSize != 0) {
|
||||
stTskInitParam.uwStackSize = param->stackSize;
|
||||
}
|
||||
stTskInitParam.pcName = param->name;
|
||||
if (param->priority == OSAL_THREAD_PRI_HIGHEST) {
|
||||
priority = OSAL_PRIORITY_HIGHEST;
|
||||
} else if (param->priority == OSAL_THREAD_PRI_HIGH) {
|
||||
priority = OSAL_PRIORITY_HIGH;
|
||||
} else if (param->priority == OSAL_THREAD_PRI_DEFAULT) {
|
||||
priority = OSAL_PRIORITY_MIDDLE;
|
||||
} else {
|
||||
priority = OSAL_PRIORITY_LOW;
|
||||
}
|
||||
|
||||
stTskInitParam.usTaskPrio = OS_TASK_PRIORITY_LOWEST - (priority - LOS_PRIORITY_WIN);
|
||||
stTskInitParam.uwArg = (uintptr_t)para->entryPara;
|
||||
ret = LOS_TaskCreate(¶->tid, &stTskInitParam);
|
||||
if (ret != LOS_OK) {
|
||||
para->tid = OSAL_INVALID_THREAD_ID;
|
||||
HDF_LOGE("%s LOS_TaskCreate fail %u %u", __func__, ret, priority);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
static bool OsalCheckPara(struct OsalThread *thread)
|
||||
{
|
||||
struct ThreadWrapper *para = NULL;
|
||||
|
||||
if (OS_INT_ACTIVE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (thread == NULL || thread->realThread == NULL) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return false;
|
||||
}
|
||||
|
||||
para = (struct ThreadWrapper *)thread->realThread;
|
||||
if (para->tid == OSAL_INVALID_THREAD_ID) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int32_t OsalThreadSuspend(struct OsalThread *thread)
|
||||
{
|
||||
uint32_t ret;
|
||||
bool flag = false;
|
||||
|
||||
flag = OsalCheckPara(thread);
|
||||
if (flag == false) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_TaskSuspend(((struct ThreadWrapper *)thread->realThread)->tid);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s LOS_TaskSuspend failed %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalThreadDestroy(struct OsalThread *thread)
|
||||
{
|
||||
bool flag = false;
|
||||
|
||||
flag = OsalCheckPara(thread);
|
||||
if (flag == false) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
OsalMemFree(thread->realThread);
|
||||
thread->realThread = NULL;
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalThreadResume(struct OsalThread *thread)
|
||||
{
|
||||
uint32_t ret;
|
||||
bool flag = false;
|
||||
|
||||
flag = OsalCheckPara(thread);
|
||||
if (flag == false) {
|
||||
HDF_LOGE("%s invalid parameter %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ret = LOS_TaskResume(((struct ThreadWrapper *)thread->realThread)->tid);
|
||||
if (ret != LOS_OK) {
|
||||
HDF_LOGE("%s failed %u %d", __func__, ret, __LINE__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_time.h"
|
||||
#include <los_config.h>
|
||||
#include <time.h>
|
||||
#include "hdf_log.h"
|
||||
#include "los_task.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_time
|
||||
#define TM_SINCE_YEAR 1900
|
||||
|
||||
int32_t OsalGetTime(OsalTimespec *time)
|
||||
{
|
||||
uint64_t ms;
|
||||
|
||||
if (time == NULL) {
|
||||
HDF_LOGE("%{public}s invalid para", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
ms = LOS_TickCountGet() * (HDF_KILO_UNIT / LOSCFG_BASE_CORE_TICK_PER_SECOND);
|
||||
|
||||
time->sec = ms / HDF_KILO_UNIT;
|
||||
time->usec = (ms % HDF_KILO_UNIT) * HDF_KILO_UNIT;
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t OsalDiffTime(const OsalTimespec *start, const OsalTimespec *end, OsalTimespec *diff)
|
||||
{
|
||||
uint32_t usec = 0;
|
||||
uint32_t sec = 0;
|
||||
|
||||
if (start == NULL || end == NULL || diff == NULL) {
|
||||
HDF_LOGE("%{public}s invalid para", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (start->sec > end->sec) {
|
||||
HDF_LOGE("%{public}s start time later then end time", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (end->usec < start->usec) {
|
||||
usec = (HDF_KILO_UNIT * HDF_KILO_UNIT);
|
||||
sec = 1;
|
||||
}
|
||||
diff->usec = usec + end->usec - start->usec;
|
||||
diff->sec = end->sec - start->sec - sec;
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
uint64_t OsalGetSysTimeMs(void)
|
||||
{
|
||||
return LOS_TickCountGet() * (HDF_KILO_UNIT / LOSCFG_BASE_CORE_TICK_PER_SECOND);
|
||||
}
|
||||
|
||||
void OsalSleep(uint32_t sec)
|
||||
{
|
||||
LOS_Msleep(sec * HDF_KILO_UNIT);
|
||||
}
|
||||
|
||||
void OsalMSleep(uint32_t ms)
|
||||
{
|
||||
LOS_Msleep(ms);
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "osal_timer.h"
|
||||
#include "hdf_log.h"
|
||||
#include "los_interrupt.h"
|
||||
#include "los_swtmr.h"
|
||||
#include "osal_mem.h"
|
||||
|
||||
#define HDF_LOG_TAG osal_timer
|
||||
#define OSAL_INVALID_TIMER_ID UINT32_MAX
|
||||
|
||||
struct OsalLitetimer {
|
||||
uintptr_t arg;
|
||||
uint16_t timerID;
|
||||
OsalTimerFunc func;
|
||||
uint32_t interval;
|
||||
};
|
||||
|
||||
int32_t OsalTimerCreate(OsalTimer *timer, uint32_t interval, OsalTimerFunc func, uintptr_t arg)
|
||||
{
|
||||
struct OsalLitetimer *liteTimer = NULL;
|
||||
|
||||
if (func == NULL || timer == NULL || interval == 0) {
|
||||
HDF_LOGE("%s invalid para", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
timer->realTimer = NULL;
|
||||
|
||||
liteTimer = (struct OsalLitetimer *)OsalMemCalloc(sizeof(*liteTimer));
|
||||
if (liteTimer == NULL) {
|
||||
HDF_LOGE("%s malloc fail", __func__);
|
||||
return HDF_ERR_MALLOC_FAIL;
|
||||
}
|
||||
liteTimer->timerID = OSAL_INVALID_TIMER_ID;
|
||||
liteTimer->arg = arg;
|
||||
liteTimer->func = func;
|
||||
liteTimer->interval = interval;
|
||||
timer->realTimer = (void *)liteTimer;
|
||||
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
static int32_t OsalStartTimer(OsalTimer *timer, UINT8 mode)
|
||||
{
|
||||
uint32_t ret;
|
||||
uint32_t intSave;
|
||||
uint32_t interval;
|
||||
uint16_t timerID = 0;
|
||||
struct OsalLitetimer *liteTimer = NULL;
|
||||
|
||||
if (timer == NULL || timer->realTimer == NULL) {
|
||||
HDF_LOGE("%s invalid para %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
liteTimer = (struct OsalLitetimer *)timer->realTimer;
|
||||
if (liteTimer->interval == 0 || liteTimer->func == NULL) {
|
||||
HDF_LOGE("%s invalid para %d", __func__, __LINE__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
interval = liteTimer->interval;
|
||||
intSave = LOS_IntLock();
|
||||
ret = LOS_SwtmrCreate(LOS_MS2Tick(interval), mode, (SWTMR_PROC_FUNC)liteTimer->func, &timerID, liteTimer->arg);
|
||||
if (ret != LOS_OK) {
|
||||
LOS_IntRestore(intSave);
|
||||
HDF_LOGE("%s LOS_SwtmrCreate fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
ret = LOS_SwtmrStart(timerID);
|
||||
if (ret != LOS_OK) {
|
||||
LOS_SwtmrDelete(timerID);
|
||||
LOS_IntRestore(intSave);
|
||||
HDF_LOGE("%s LOS_SwtmrStart fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
liteTimer->timerID = timerID;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
int32_t OsalTimerStartLoop(OsalTimer *timer)
|
||||
{
|
||||
return OsalStartTimer(timer, LOS_SWTMR_MODE_PERIOD);
|
||||
}
|
||||
|
||||
int32_t OsalTimerStartOnce(OsalTimer *timer)
|
||||
{
|
||||
return OsalStartTimer(timer, LOS_SWTMR_MODE_ONCE);
|
||||
}
|
||||
|
||||
int32_t OsalTimerSetTimeout(OsalTimer *timer, uint32_t interval)
|
||||
{
|
||||
struct OsalLitetimer *liteTimer = NULL;
|
||||
uint32_t intSave;
|
||||
uint32_t ret;
|
||||
|
||||
if (timer == NULL || timer->realTimer == NULL || interval == 0) {
|
||||
HDF_LOGE("%s invalid para", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
liteTimer = (struct OsalLitetimer *)timer->realTimer;
|
||||
if (liteTimer->timerID == OSAL_INVALID_TIMER_ID) {
|
||||
HDF_LOGE("%s timer id invalid %u", __func__, liteTimer->timerID);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
|
||||
if (liteTimer->interval == interval) {
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
liteTimer->interval = interval;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
ret = LOS_SwtmrDelete(liteTimer->timerID);
|
||||
if (ret != LOS_OK) {
|
||||
LOS_IntRestore(intSave);
|
||||
HDF_LOGE("%s LOS_SwtmrDelete fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return OsalTimerStartLoop(timer);
|
||||
}
|
||||
|
||||
int32_t OsalTimerDelete(OsalTimer *timer)
|
||||
{
|
||||
uint32_t intSave;
|
||||
uint32_t ret;
|
||||
struct OsalLitetimer *liteTimer = NULL;
|
||||
|
||||
if (timer == NULL || timer->realTimer == NULL) {
|
||||
HDF_LOGE("%s invalid para", __func__);
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
liteTimer = (struct OsalLitetimer *)timer->realTimer;
|
||||
if (liteTimer->timerID == OSAL_INVALID_TIMER_ID) {
|
||||
HDF_LOGE("%s timer id invalid %u", __func__, liteTimer->timerID);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
intSave = LOS_IntLock();
|
||||
ret = LOS_SwtmrDelete(liteTimer->timerID);
|
||||
if (ret == LOS_OK) {
|
||||
LOS_IntRestore(intSave);
|
||||
OsalMemFree(timer->realTimer);
|
||||
timer->realTimer = NULL;
|
||||
return HDF_SUCCESS;
|
||||
} else {
|
||||
LOS_IntRestore(intSave);
|
||||
HDF_LOGE("%s LOS_SwtmrDelete fail %u", __func__, ret);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# Copyright (c) 2021, Huawei Device Co., Ltd. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
# conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
# of conditions and the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import("//drivers/adapter/khdf/liteos_m/hdf.gni")
|
||||
|
||||
static_library("sample_driver") {
|
||||
sources = [
|
||||
"src/sample_driver.c"
|
||||
]
|
||||
include_dirs = [
|
||||
"include"
|
||||
]
|
||||
|
||||
deps = [
|
||||
"$khdf_path/osal:hdf_osal_lite",
|
||||
]
|
||||
|
||||
ldflags = [
|
||||
"-Wl,--whole-archive"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef HDF_SAMPLE_DRIVER_H
|
||||
#define HDF_SAMPLE_DRIVER_H
|
||||
|
||||
#include "hdf_device_desc.h"
|
||||
|
||||
struct SampleService {
|
||||
struct IDeviceIoService service;
|
||||
const char *(*getData)(void);
|
||||
int32_t (*setData)(const char *data);
|
||||
};
|
||||
|
||||
#endif // HDF_SAMPLE_DRIVER_H
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "hdf_device_desc.h"
|
||||
#include "hdf_log.h"
|
||||
#include "sample_service.h"
|
||||
|
||||
#define HDF_LOG_TAG sample_driver
|
||||
|
||||
static const char *SampleServiceGetData(void)
|
||||
{
|
||||
return "sample";
|
||||
}
|
||||
|
||||
static int32_t SampleServiceSetData(const char *data)
|
||||
{
|
||||
if (data == NULL) {
|
||||
return HDF_ERR_INVALID_PARAM;
|
||||
}
|
||||
HDF_LOGD("%s:%s", __func__, data);
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
static void HdfSampleDriverRelease(struct HdfDeviceObject *deviceObject)
|
||||
{
|
||||
(void)deviceObject;
|
||||
return;
|
||||
}
|
||||
|
||||
static int HdfSampleDriverBind(struct HdfDeviceObject *deviceObject)
|
||||
{
|
||||
HDF_LOGD("%s::enter, deviceObject=%p", __func__, deviceObject);
|
||||
if (deviceObject == NULL) {
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
static struct SampleService sampleService = {
|
||||
.getData = SampleServiceGetData,
|
||||
.setData = SampleServiceSetData,
|
||||
};
|
||||
deviceObject->service = &sampleService.service;
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
static int HdfSampleDriverInit(struct HdfDeviceObject *deviceObject)
|
||||
{
|
||||
HDF_LOGD("%s::enter, deviceObject=%p", __func__, deviceObject);
|
||||
if (deviceObject == NULL) {
|
||||
HDF_LOGE("%s::ptr is null!", __func__);
|
||||
return HDF_FAILURE;
|
||||
}
|
||||
HDF_LOGD("%s:Init success", __func__);
|
||||
return HDF_SUCCESS;
|
||||
}
|
||||
|
||||
struct HdfDriverEntry g_sampleDriverEntry = {
|
||||
.moduleVersion = 1,
|
||||
.moduleName = "sample_driver",
|
||||
.Bind = HdfSampleDriverBind,
|
||||
.Init = HdfSampleDriverInit,
|
||||
.Release = HdfSampleDriverRelease,
|
||||
};
|
||||
|
||||
HDF_INIT(g_sampleDriverEntry);
|
||||
Reference in New Issue
Block a user