1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "allocator_service_stub.h" 17 #include "hdf_base.h" 18 #include "hdf_device_desc.h" 19 #include "hdf_log.h" 20 #include "osal_mem.h" 21 22 using HdfAllocatorService = struct HdfAllocatorService_ { 23 struct IDeviceIoService ioservice; 24 void *instance; 25 }; 26 27 static int32_t AllocatorServiceDispatch(struct HdfDeviceIoClient *client, int cmdId, 28 struct HdfSBuf *data, struct HdfSBuf *reply) 29 { 30 HdfAllocatorService *allocatorService = CONTAINER_OF( 31 client->device->service, HdfAllocatorService, ioservice); 32 return AllocatorServiceOnRemoteRequest(allocatorService->instance, cmdId, *data, *reply); 33 } 34 35 int HdfAllocatorDriverInit(struct HdfDeviceObject *deviceObject) 36 { 37 (void)deviceObject; 38 return HDF_SUCCESS; 39 } 40 41 int HdfAllocatorDriverBind(struct HdfDeviceObject *deviceObject) 42 { 43 HdfAllocatorService *allocatorService = 44 reinterpret_cast<HdfAllocatorService *>(OsalMemAlloc(sizeof(HdfAllocatorService))); 45 if (allocatorService == nullptr) { 46 HDF_LOGE("%{public}s: OsalMemAlloc failed", __func__); 47 return HDF_FAILURE; 48 } 49 50 allocatorService->ioservice.Dispatch = AllocatorServiceDispatch; 51 allocatorService->ioservice.Open = NULL; 52 allocatorService->ioservice.Release = NULL; 53 allocatorService->instance = AllocatorServiceInstance(); 54 55 deviceObject->service = &allocatorService->ioservice; 56 HDF_LOGI("%{public}s: exit succ", __func__); 57 return HDF_SUCCESS; 58 } 59 60 void HdfAllocatorDriverRelease(struct HdfDeviceObject *deviceObject) 61 { 62 HdfAllocatorService *allocatorService = CONTAINER_OF(deviceObject->service, HdfAllocatorService, ioservice); 63 AllocatorServiceRelease(allocatorService->instance); 64 OsalMemFree(allocatorService); 65 } 66 67 struct HdfDriverEntry g_AllocatorDriverEntry = { 68 .moduleVersion = 1, 69 .moduleName = "allocator_service", 70 .Bind = HdfAllocatorDriverBind, 71 .Init = HdfAllocatorDriverInit, 72 .Release = HdfAllocatorDriverRelease, 73 }; 74 75 #ifdef __cplusplus 76 extern "C" { 77 #endif /* __cplusplus */ 78 79 HDF_INIT(g_AllocatorDriverEntry); 80 81 #ifdef __cplusplus 82 } 83 #endif /* __cplusplus */ 84