Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f50aa946 authored by Connor O'Brien's avatar Connor O'Brien Committed by Gerrit Code Review
Browse files

Merge changes from topic 'boot-control-hal'

* changes:
  Add android.hardware.boot_control@1.0 service.
  Add boot_control HIDL default implementation
  boot_control: Define the boot_control HIDL interface.
parents f7ad111d cd0d29d4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@
subdirs = [
    "benchmarks/msgq/1.0",
    "bluetooth/1.0",
    "boot/1.0",
    "boot/1.0/default",
    "nfc/1.0",
    "nfc/1.0/default",
    "radio/1.0",

boot/1.0/Android.bp

0 → 100644
+46 −0
Original line number Diff line number Diff line
// This file is autogenerated by hidl-gen. Do not edit manually.

genrule {
    name: "android.hardware.boot@1.0_genc++",
    tool: "hidl-gen",
    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.boot@1.0",
    srcs: [
        "types.hal",
        "IBootControl.hal",
    ],
    out: [
        "android/hardware/boot/1.0/types.cpp",
        "android/hardware/boot/1.0/BootControlAll.cpp",
    ],
}

genrule {
    name: "android.hardware.boot@1.0_genc++_headers",
    tool: "hidl-gen",
    cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.boot@1.0",
    srcs: [
        "types.hal",
        "IBootControl.hal",
    ],
    out: [
        "android/hardware/boot/1.0/types.h",
        "android/hardware/boot/1.0/IBootControl.h",
        "android/hardware/boot/1.0/IHwBootControl.h",
        "android/hardware/boot/1.0/BnBootControl.h",
        "android/hardware/boot/1.0/BpBootControl.h",
        "android/hardware/boot/1.0/BsBootControl.h",
    ],
}

cc_library_shared {
    name: "android.hardware.boot@1.0",
    generated_sources: ["android.hardware.boot@1.0_genc++"],
    generated_headers: ["android.hardware.boot@1.0_genc++_headers"],
    export_generated_headers: ["android.hardware.boot@1.0_genc++_headers"],
    shared_libs: [
        "libhidl",
        "libhwbinder",
        "libutils",
        "libcutils",
    ],
}

boot/1.0/Android.mk

0 → 100644
+136 −0
Original line number Diff line number Diff line
# This file is autogenerated by hidl-gen. Do not edit manually.

LOCAL_PATH := $(call my-dir)

################################################################################

include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.boot@1.0-java
LOCAL_MODULE_CLASS := JAVA_LIBRARIES

intermediates := $(local-generated-sources-dir)

HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)

#
# Build types.hal (BoolResult)
#
GEN := $(intermediates)/android/hardware/boot/1.0/BoolResult.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::types.BoolResult

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (CommandResult)
#
GEN := $(intermediates)/android/hardware/boot/1.0/CommandResult.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::types.CommandResult

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build IBootControl.hal
#
GEN := $(intermediates)/android/hardware/boot/1.0/IBootControl.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBootControl.hal
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
$(GEN): $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::IBootControl

$(GEN): $(LOCAL_PATH)/IBootControl.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_JAVA_LIBRARY)


################################################################################

include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.boot@1.0-java-static
LOCAL_MODULE_CLASS := JAVA_LIBRARIES

intermediates := $(local-generated-sources-dir)

HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)

#
# Build types.hal (BoolResult)
#
GEN := $(intermediates)/android/hardware/boot/1.0/BoolResult.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::types.BoolResult

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (CommandResult)
#
GEN := $(intermediates)/android/hardware/boot/1.0/CommandResult.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::types.CommandResult

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build IBootControl.hal
#
GEN := $(intermediates)/android/hardware/boot/1.0/IBootControl.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IBootControl.hal
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
$(GEN): $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava -randroid.hardware:hardware/interfaces \
        android.hardware.boot@1.0::IBootControl

$(GEN): $(LOCAL_PATH)/IBootControl.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_STATIC_JAVA_LIBRARY)



include $(call all-makefiles-under,$(LOCAL_PATH))
+104 −0
Original line number Diff line number Diff line
/*
 * Copyright 2016 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.boot@1.0;

/**
 * The Boot Control HAL is designed to allow for managing sets of redundant
 * partitions, called slots, that can be booted from independently. Slots
 * are sets of partitions whose names differ only by a given suffix.
 * They are identified here by a 0 indexed number and associated with their
 * suffix, which is appended to the base name for any particular partition
 * to find the one associated with that slot.
 * The primary use of this set up is to allow for background updates while
 * the device is running, and to provide a fallback in the event that the
 * update fails.
 */
interface IBootControl {
  /**
   * getNumberSlots() returns the number of available slots.
   * For instance, a system with a single set of partitions must return
   * 1, a system with A/B must return 2, A/B/C -> 3 and so on. A system with
   * less than two slots doesn't support background updates, for example if
   * running from a virtual machine with only one copy of each partition for the
   * purpose of testing.
   */
  getNumberSlots() generates (uint32_t numSlots);

  /**
   * getCurrentSlot() returns the slot number of that the current boot is booted
   * from, for example slot number 0 (Slot A). It is assumed that if the current
   * slot is A, then the block devices underlying B can be accessed directly
   * without any risk of corruption.
   * The returned value is always guaranteed to be strictly less than the
   * value returned by getNumberSlots. Slots start at 0 and finish at
   * getNumberSlots() - 1. The value returned here must match the suffix passed
   * from the bootloader, regardless of which slot is active or successful.
   */
  getCurrentSlot() generates (Slot slot);

  /**
   * markBootSuccessful() marks the current slot as having booted successfully.
   *
   * Returns whether the command succeeded.
   */
  markBootSuccessful() generates (CommandResult error);

  /**
   * setActiveBootSlot() marks the slot passed in parameter as the active boot
   * slot (see getCurrentSlot for an explanation of the "slot" parameter). This
   * overrides any previous call to setSlotAsUnbootable.
   * Returns whether the command succeeded.
   */
  setActiveBootSlot(Slot slot) generates (CommandResult error);

  /**
   * setSlotAsUnbootable() marks the slot passed in parameter as
   * an unbootable. This can be used while updating the contents of the slot's
   * partitions, so that the system must not attempt to boot a known bad set up.
   * Returns whether the command succeeded.
   */
  setSlotAsUnbootable(Slot slot) generates (CommandResult error);

  /**
   * isSlotBootable() returns if the slot passed in parameter is bootable. Note
   * that slots can be made unbootable by both the bootloader and by the OS
   * using setSlotAsUnbootable.
   * Returns TRUE if the slot is bootable, FALSE if it's not, and INVALID_SLOT
   * if slot does not exist.
   */
  isSlotBootable(Slot slot) generates (BoolResult bootable);

  /**
   * isSlotMarkedSucessful() returns if the slot passed in parameter has been
   * marked as successful using markBootSuccessful. Note that only the current
   * slot can be marked as successful but any slot can be queried.
   * Returns TRUE if the slot has been marked as successful, FALSE if it has
   * not, and INVALID_SLOT if the slot does not exist.
   */
  isSlotMarkedSuccessful(Slot slot) generates (BoolResult successful);

  /**
   * getSuffix() returns the string suffix used by partitions that correspond to
   * the slot number passed in as a parameter. The bootloader must pass the
   * suffix of the currently active slot either through a kernel command line
   * property at androidboot.slot_suffix, or the device tree at
   * /firmware/android/slot_suffix.
   * Returns the empty string "" if slot does not match an existing slot.
   */
  getSuffix(Slot slot) generates (string slotSuffix);
};
+34 −0
Original line number Diff line number Diff line
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.boot@1.0-impl
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_SRC_FILES := \
    BootControl.cpp \

LOCAL_SHARED_LIBRARIES := \
    liblog \
    libhidl \
    libhwbinder \
    libhardware \
    libutils \
    android.hardware.boot@1.0 \

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_MODULE := android.hardware.boot@1.0-service
LOCAL_INIT_RC := android.hardware.boot@1.0-service.rc
LOCAL_SRC_FILES := \
    service.cpp

LOCAL_SHARED_LIBRARIES := \
    liblog \
    libhwbinder \
    libhardware \
    libhidl \
    libutils \
    android.hardware.boot@1.0 \

include $(BUILD_EXECUTABLE)
Loading