111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland/*
211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Copyright (C) 2017 The Android Open Source Project
311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland *
411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Licensed under the Apache License, Version 2.0 (the "License");
511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * you may not use this file except in compliance with the License.
611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * You may obtain a copy of the License at
711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland *
811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland *      http://www.apache.org/licenses/LICENSE-2.0
911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland *
1011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * Unless required by applicable law or agreed to in writing, software
1111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * distributed under the License is distributed on an "AS IS" BASIS,
1211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * See the License for the specific language governing permissions and
1411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland * limitations under the License.
1511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland */
1611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland#include <hidl/HidlTransportSupport.h>
1711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland#include <hidl/HidlBinderSupport.h>
1811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland
19a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong#include <android/hidl/manager/1.0/IServiceManager.h>
20a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong
2111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace android {
2211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandnamespace hardware {
2311a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland
2411a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid configureRpcThreadpool(size_t maxThreads, bool callerWillJoin) {
2511a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland    // TODO(b/32756130) this should be transport-dependent
2611a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland    configureBinderRpcThreadpool(maxThreads, callerWillJoin);
2711a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland}
2811a732a9acc36245ccfe99f99a755b3e5db125a3Steven Morelandvoid joinRpcThreadpool() {
2911a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland    // TODO(b/32756130) this should be transport-dependent
3011a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland    joinBinderRpcThreadpool();
3111a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland}
3211a732a9acc36245ccfe99f99a755b3e5db125a3Steven Moreland
333f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenenint setupTransportPolling() {
343f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen    return setupBinderPolling();
353f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen}
363f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen
373f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenenstatus_t handleTransportPoll(int /*fd*/) {
383f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen    return handleBinderPoll();
393f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen}
403f5ac4ca824f178bc60d2ae867c7453a74a122f9Martijn Coenen
4181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenenbool setMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service,
4281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen                           int policy, int priority) {
4381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    if (service->isRemote()) {
4481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        ALOGE("Can't set scheduler policy on remote service.");
4581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        return false;
4681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    }
4781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen
4881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    if (policy != SCHED_NORMAL && policy != SCHED_FIFO && policy != SCHED_RR) {
4981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        ALOGE("Invalid scheduler policy %d", policy);
5081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        return false;
5181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    }
5281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen
5381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    if (policy == SCHED_NORMAL && (priority < -20 || priority > 19)) {
5481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        ALOGE("Invalid priority for SCHED_NORMAL: %d", priority);
5581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        return false;
5681ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    } else if (priority < 1 || priority > 99) {
5781ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        ALOGE("Invalid priority for real-time policy: %d", priority);
5881ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen        return false;
5981ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    }
6081ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen
6181ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    details::gServicePrioMap.set(service, { policy, priority });
6281ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen
6381ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen    return true;
6481ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen}
6581ef4da81353cf86d185e90239e4f06d2930c2baMartijn Coenen
667a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hongnamespace details {
677a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hongint32_t getPidIfSharable() {
687a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#if LIBHIDL_TARGET_DEBUGGABLE
697a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong    return getpid();
707a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#else
717a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong    using android::hidl::manager::V1_0::IServiceManager;
72a8b6eabcab2ddc29173882e750e801e8f6fd8a07Yifan Hong    return static_cast<int32_t>(IServiceManager::PidConstant::NO_PID);
737a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong#endif
747a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong}
757a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong}  // namespace details
767a4b75659088fe2fa2723bb3cddc07301b9c62bcYifan Hong
77a15479f3601819b4a0e8b20644a0d54615d8022fSteven Moreland}  // namespace hardware
78a15479f3601819b4a0e8b20644a0d54615d8022fSteven Moreland}  // namespace android
79