From 72c410d261e749ab87a3a755ebe24ac1634483e4 Mon Sep 17 00:00:00 2001 From: josephjang Date: Thu, 24 Sep 2020 09:51:08 +0800 Subject: [PATCH] fastboot: add a new oem command for post wipe userdata When user input 'fastboot erase userdata' in fastbootd, may need an oem specific API doOemSpecificErase() to wipe other userdata in device. If oem doesn't need this specific API, oem could return NOT_SUPPORTED to fastbootd. Bug: 169173873 Change-Id: Ie12ede31ef071a3c15265777b55746536a861292 --- .../exclude/fcm_exclude.cpp | 1 + fastboot/1.1/Android.bp | 14 ++++ fastboot/1.1/IFastboot.hal | 32 +++++++++ fastboot/1.1/default/Android.bp | 31 +++++++++ fastboot/1.1/default/Fastboot.cpp | 66 +++++++++++++++++++ fastboot/1.1/default/Fastboot.h | 52 +++++++++++++++ 6 files changed, 196 insertions(+) create mode 100644 fastboot/1.1/Android.bp create mode 100644 fastboot/1.1/IFastboot.hal create mode 100644 fastboot/1.1/default/Android.bp create mode 100644 fastboot/1.1/default/Fastboot.cpp create mode 100644 fastboot/1.1/default/Fastboot.h diff --git a/compatibility_matrices/exclude/fcm_exclude.cpp b/compatibility_matrices/exclude/fcm_exclude.cpp index 4240788ea1..459a6e2fc8 100644 --- a/compatibility_matrices/exclude/fcm_exclude.cpp +++ b/compatibility_matrices/exclude/fcm_exclude.cpp @@ -58,6 +58,7 @@ bool ShouldCheckMissingHalsInFcm(const std::string& package) { // Fastboot HAL is only used by recovery. Recovery is owned by OEM. Framework // does not depend on this HAL, hence it is not declared in any manifests or matrices. "android.hardware.fastboot@1.0", + "android.hardware.fastboot@1.1", }; auto package_has_prefix = [&](const std::string& prefix) { diff --git a/fastboot/1.1/Android.bp b/fastboot/1.1/Android.bp new file mode 100644 index 0000000000..46306cfe81 --- /dev/null +++ b/fastboot/1.1/Android.bp @@ -0,0 +1,14 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "android.hardware.fastboot@1.1", + root: "android.hardware", + srcs: [ + "IFastboot.hal", + ], + interfaces: [ + "android.hardware.fastboot@1.0", + "android.hidl.base@1.0", + ], + gen_java: true, +} diff --git a/fastboot/1.1/IFastboot.hal b/fastboot/1.1/IFastboot.hal new file mode 100644 index 0000000000..c8f1ad01f8 --- /dev/null +++ b/fastboot/1.1/IFastboot.hal @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.hardware.fastboot@1.1; +import android.hardware.fastboot@1.0; + +/** + * IFastboot interface implements vendor specific fastboot commands. + */ +interface IFastboot extends @1.0::IFastboot { + /** + * Executes an OEM specific erase after fastboot erase userdata. + * + * @return result Returns the status SUCCESS if the operation is successful, + * NOT_SUPPORTED for unsupported command. + * INVALID_ARGUMENT for bad arguments, + * FAILURE_UNKNOWN for unknown error in the oem specific command. + */ + doOemSpecificErase() generates (Result result); +}; diff --git a/fastboot/1.1/default/Android.bp b/fastboot/1.1/default/Android.bp new file mode 100644 index 0000000000..980586ba4b --- /dev/null +++ b/fastboot/1.1/default/Android.bp @@ -0,0 +1,31 @@ +// +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_library { + name: "android.hardware.fastboot@1.1-impl-mock", + recovery: true, + srcs: [ + "Fastboot.cpp", + ], + relative_install_path: "hw", + shared_libs: [ + "libbase", + "libhidlbase", + "libutils", + "libcutils", + "android.hardware.fastboot@1.0", + "android.hardware.fastboot@1.1", + ], +} diff --git a/fastboot/1.1/default/Fastboot.cpp b/fastboot/1.1/default/Fastboot.cpp new file mode 100644 index 0000000000..0b502e0c3c --- /dev/null +++ b/fastboot/1.1/default/Fastboot.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Fastboot.h" + +namespace android { +namespace hardware { +namespace fastboot { +namespace V1_1 { +namespace implementation { + +// Methods from ::android::hardware::fastboot::V1_1::IFastboot follow. +Return Fastboot::getPartitionType(const hidl_string& /* partitionName */, + getPartitionType_cb _hidl_cb) { + _hidl_cb(FileSystemType::RAW, {Status::SUCCESS, ""}); + return Void(); +} + +Return Fastboot::doOemCommand(const hidl_string& /* oemCmd */, doOemCommand_cb _hidl_cb) { + _hidl_cb({Status::FAILURE_UNKNOWN, "Command not supported in default implementation"}); + return Void(); +} + +Return Fastboot::getVariant(getVariant_cb _hidl_cb) { + _hidl_cb("NA", {Status::SUCCESS, ""}); + return Void(); +} + +Return Fastboot::getOffModeChargeState(getOffModeChargeState_cb _hidl_cb) { + _hidl_cb(false, {Status::SUCCESS, ""}); + return Void(); +} + +Return Fastboot::getBatteryVoltageFlashingThreshold( + getBatteryVoltageFlashingThreshold_cb _hidl_cb) { + _hidl_cb(0, {Status::SUCCESS, ""}); + return Void(); +} + +Return Fastboot::doOemSpecificErase(doOemSpecificErase_cb _hidl_cb) { + _hidl_cb({Status::NOT_SUPPORTED, "Command not supported in default implementation"}); + return Void(); +} + +extern "C" IFastboot* HIDL_FETCH_IFastboot(const char* /* name */) { + return new Fastboot(); +} + +} // namespace implementation +} // namespace V1_1 +} // namespace fastboot +} // namespace hardware +} // namespace android diff --git a/fastboot/1.1/default/Fastboot.h b/fastboot/1.1/default/Fastboot.h new file mode 100644 index 0000000000..09b39c2e35 --- /dev/null +++ b/fastboot/1.1/default/Fastboot.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include +#include + +namespace android { +namespace hardware { +namespace fastboot { +namespace V1_1 { +namespace implementation { + +using ::android::hardware::hidl_string; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::fastboot::V1_0::FileSystemType; +using ::android::hardware::fastboot::V1_0::Status; +using ::android::hardware::fastboot::V1_0::Result; + +struct Fastboot : public IFastboot { + // Methods from ::android::hardware::fastboot::V1_0::IFastboot follow. + Return getPartitionType(const hidl_string& partitionName, + getPartitionType_cb _hidl_cb) override; + Return doOemCommand(const hidl_string& oemCmd, doOemCommand_cb _hidl_cb) override; + Return getVariant(getVariant_cb _hidl_cb) override; + Return getOffModeChargeState(getOffModeChargeState_cb _hidl_cb) override; + Return getBatteryVoltageFlashingThreshold( + getBatteryVoltageFlashingThreshold_cb _hidl_cb) override; + Return doOemSpecificErase(doOemSpecificErase_cb _hidl_cb) override; +}; + +extern "C" IFastboot* HIDL_FETCH_IFastboot(const char* name); + +} // namespace implementation +} // namespace V1_1 +} // namespace fastboot +} // namespace hardware +} // namespace android