17211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen/*
27211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * Copyright (C) 2016 The Android Open Source Project
37211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen *
47211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License");
57211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * you may not use this file except in compliance with the License.
67211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * You may obtain a copy of the License at
77211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen *
87211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen *      http://www.apache.org/licenses/LICENSE-2.0
97211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen *
107211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * Unless required by applicable law or agreed to in writing, software
117211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS,
127211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * See the License for the specific language governing permissions and
147211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen * limitations under the License.
157211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen */
167211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen
177211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen// All static variables go here, to control initialization and
187211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen// destruction order in the library.
197211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen
20953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong#include <functional>
21953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong
22b2c9c75b74c87e651dd08a100015eab17319556eYifan Hong#include <android/hidl/base/1.0/IBase.h>
2384888d3553c7595ee57dc73023ae94a27895de0dYifan Hong#include <hidl/ConcurrentMap.h>
24b2c9c75b74c87e651dd08a100015eab17319556eYifan Hong#include <hwbinder/IBinder.h>
252932c134c47318489d96e3e4de9ab8e5ff956952Steven Moreland#include <hwbinder/IInterface.h>
26637195c1b50ec8a2f625b116da803c2e6e101adaSteven Moreland#include <utils/StrongPointer.h>
277211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen
287211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenennamespace android {
297211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenennamespace hardware {
30953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hongnamespace details {
317211016cd72b5fa9f61fb8cf77b62faa207362e4Martijn Coenen
326b9cc8dda25d7b24e6f2bb28dca6acf8c0ac4872Martijn Coenenstruct SchedPrio {
336b9cc8dda25d7b24e6f2bb28dca6acf8c0ac4872Martijn Coenen    int sched_policy;
346b9cc8dda25d7b24e6f2bb28dca6acf8c0ac4872Martijn Coenen    int prio;
356b9cc8dda25d7b24e6f2bb28dca6acf8c0ac4872Martijn Coenen};
366b9cc8dda25d7b24e6f2bb28dca6acf8c0ac4872Martijn Coenen
372932c134c47318489d96e3e4de9ab8e5ff956952Steven Morelandextern ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, SchedPrio> gServicePrioMap;
382932c134c47318489d96e3e4de9ab8e5ff956952Steven Moreland
392932c134c47318489d96e3e4de9ab8e5ff956952Steven Moreland// For HidlBinderSupport and autogenerated code
402932c134c47318489d96e3e4de9ab8e5ff956952Steven Morelandextern ConcurrentMap<const ::android::hidl::base::V1_0::IBase*, wp<::android::hardware::BHwBinder>>
412932c134c47318489d96e3e4de9ab8e5ff956952Steven Moreland    gBnMap;
422932c134c47318489d96e3e4de9ab8e5ff956952Steven Moreland
4397f88f31b63c5f4cb12be40cbd9cc8d725a4ef80Yifan Hongusing BnConstructorMap = ConcurrentMap<std::string, std::function<sp<IBinder>(void*)>>;
44953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong// For HidlBinderSupport and autogenerated code
45b2c9c75b74c87e651dd08a100015eab17319556eYifan Hong// value function receives reinterpret_cast<void *>(static_cast<IFoo *>(foo)),
46b2c9c75b74c87e651dd08a100015eab17319556eYifan Hong// returns sp<IBinder>
472da958e782c7cf664f0e119c417470b4d5f8d4dfYifan Hong// deprecated; use getBnConstructorMap instead.
482da958e782c7cf664f0e119c417470b4d5f8d4dfYifan Hongextern BnConstructorMap gBnConstructorMap;
4997f88f31b63c5f4cb12be40cbd9cc8d725a4ef80Yifan HongBnConstructorMap& getBnConstructorMap();
506bf733ec867a5d46ea05ae5c280a27b051f5018cYifan Hong
5197f88f31b63c5f4cb12be40cbd9cc8d725a4ef80Yifan Hongusing BsConstructorMap = ConcurrentMap<std::string,
5297f88f31b63c5f4cb12be40cbd9cc8d725a4ef80Yifan Hong        std::function<sp<::android::hidl::base::V1_0::IBase>(void*)>>;
53953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong// For HidlPassthroughSupport and autogenerated code
546bf733ec867a5d46ea05ae5c280a27b051f5018cYifan Hong// value function receives reinterpret_cast<void *>(static_cast<IFoo *>(foo)),
556bf733ec867a5d46ea05ae5c280a27b051f5018cYifan Hong// returns sp<IBase>
562da958e782c7cf664f0e119c417470b4d5f8d4dfYifan Hong// deprecated; use getBsConstructorMap instead.
572da958e782c7cf664f0e119c417470b4d5f8d4dfYifan Hongextern BsConstructorMap gBsConstructorMap;
5897f88f31b63c5f4cb12be40cbd9cc8d725a4ef80Yifan HongBsConstructorMap& getBsConstructorMap();
59953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong}  // namespace details
60953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong}  // namespace hardware
61953e6b0f57b5003390b3e70904bfa47f535492e4Yifan Hong}  // namespace android
62