summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/hardware/audio_amplifier.h2
-rw-r--r--include/hardware/bluetooth.h14
-rw-r--r--include/hardware/keymaster1.h49
-rw-r--r--include/hardware/keymaster_defs.h21
-rw-r--r--include/hardware/power.h10
-rw-r--r--modules/sensors/multihal.cpp8
6 files changed, 99 insertions, 5 deletions
diff --git a/include/hardware/audio_amplifier.h b/include/hardware/audio_amplifier.h
index 4305094..e3477d5 100644
--- a/include/hardware/audio_amplifier.h
+++ b/include/hardware/audio_amplifier.h
@@ -38,6 +38,8 @@ __BEGIN_DECLS
#define AMPLIFIER_DEVICE_API_VERSION_2_0 HARDWARE_DEVICE_API_VERSION(2, 0)
#define AMPLIFIER_DEVICE_API_VERSION_CURRENT AMPLIFIER_DEVICE_API_VERSION_2_0
+struct str_parms;
+
typedef struct amplifier_device {
/**
* Common methods of the amplifier device. This *must* be the first member
diff --git a/include/hardware/bluetooth.h b/include/hardware/bluetooth.h
index 2cba754..5e8b468 100644
--- a/include/hardware/bluetooth.h
+++ b/include/hardware/bluetooth.h
@@ -445,7 +445,7 @@ typedef struct {
int (*init)(bt_callbacks_t* callbacks );
/** Enable Bluetooth. */
- int (*enable)(void);
+ int (*enable)(bool guest_mode);
/** Disable Bluetooth. */
int (*disable)(void);
@@ -564,6 +564,18 @@ typedef struct {
/** BT stack Test interface */
const void* (*get_testapp_interface)(int test_app_profile);
+
+ /**
+ * Clear (reset) the dynamic portion of the device interoperability database.
+ */
+ void (*interop_database_clear)(void);
+
+ /**
+ * Add a new device interoperability workaround for a remote device whose
+ * first |len| bytes of the its device address match |addr|.
+ * NOTE: |feature| has to match an item defined in interop_feature_t (interop.h).
+ */
+ void (*interop_database_add)(uint16_t feature, const bt_bdaddr_t *addr, size_t len);
} bt_interface_t;
/** TODO: Need to add APIs for Service Discovery, Service authorization and
diff --git a/include/hardware/keymaster1.h b/include/hardware/keymaster1.h
index afd202c..ac2cc2b 100644
--- a/include/hardware/keymaster1.h
+++ b/include/hardware/keymaster1.h
@@ -530,6 +530,55 @@ struct keymaster1_device {
*/
keymaster_error_t (*abort)(const struct keymaster1_device* dev,
keymaster_operation_handle_t operation_handle);
+
+ /**
+ * Generates a pair of ATTK defined in SOTER. Save the private key into RPMB.
+ * Note that the ATTK generated will never be touched outside the keymaster.
+ *
+ * \param[in] dev The keymaster device structure.
+ *
+ * \param[in] copy_num The number of copies that will be saved in the RPMB.
+ */
+ keymaster_error_t (*generate_attk_key_pair)(const struct keymaster1_device* dev,
+ const uint8_t copy_num);
+
+ /**
+ * Verify the existance ATTK defined in SOTER.
+ *
+ * \param[in] dev The keymaster device structure.
+ *
+ * Returns: 0 if the ATTK exists.
+ */
+ keymaster_error_t (*verify_attk_key_pair)(const struct keymaster1_device* dev);
+
+ /**
+ * Export the public key of ATTK in PEM format.
+ *
+ * \param[in] dev The keymaster device structure.
+ *
+ * \param[out] pub_key_data The public key data in X.509v3 format PEM encoded
+ *
+ * \param[out] pub_key_data_length The length of the public key data.
+ */
+ keymaster_error_t (*export_attk_public_key)(const struct keymaster1_device* dev,
+ const uint8_t* pub_key_data,
+ const size_t pub_key_data_length);
+
+ /**
+ * Get Unique device ID.
+ *
+ * \param[in] dev The keymaster device structure.
+ *
+ * \param[out] device_id The unique id for each device, format as below:
+ * 1.bytes 0-3: Identify each silicon provider id.
+ * 2.bytes 4-7: SoC model ID, defined by each silicon provider
+ * 3.bytes 8-15: Public Chip Serial *Number of SoC, defined by each silicon provider
+ *
+ * \param[out] device_id_length The length of the device id.
+ */
+ keymaster_error_t (*get_device_id)(const struct keymaster1_device* dev,
+ const uint8_t* device_id,
+ const size_t device_id_length);
};
typedef struct keymaster1_device keymaster1_device_t;
diff --git a/include/hardware/keymaster_defs.h b/include/hardware/keymaster_defs.h
index 5be956d..1a723c9 100644
--- a/include/hardware/keymaster_defs.h
+++ b/include/hardware/keymaster_defs.h
@@ -124,6 +124,27 @@ typedef enum {
authentication has been performed. Structure
defined in hw_auth_token_t in hw_auth_token.h. */
KM_TAG_MAC_LENGTH = KM_UINT | 1003, /* MAC or AEAD authentication tag length in bits. */
+
+ /* Tags used only for SOTER */
+ /* Tags used only to check if the key is for SOTER */
+ KM_TAG_SOTER_IS_FROM_SOTER = KM_BOOL | 11000,
+ /* Attach signature signed with ATTK[pri] while exporting public key */
+ KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_ATTK_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11001,
+ /* Attach signature signed with specified private key while exporting public key */
+ KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11002,
+ /* keyalias for the keypair of KM_TAG_SOTER_IS_AUTO_SIGNED_WITH_COMMON_KEY_WHEN_GET_PUBLIC_KEY */
+ KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY = KM_BYTES | 11003,
+ /* Attach counter while exporting publick key */
+ KM_TAG_SOTER_AUTO_ADD_COUNTER_WHEN_GET_PUBLIC_KEY = KM_BOOL | 11004,
+ /* Attach secmsg(TEE_Name, TEE_Version, Fingerprint_Sensor_Name, Fingerprint_Sensor_Version)
+ fingerprint_id and counter while signing */
+ KM_TAG_SOTER_IS_SECMSG_FID_COUNTER_SIGNED_WHEN_SIGN = KM_BOOL | 11005,
+ /* use and set ATTK index to next backup ATTK */
+ KM_TAG_SOTER_USE_NEXT_ATTK = KM_BOOL | 11006,
+ /* attach soter uid */
+ KM_TAG_SOTER_UID = KM_UINT | 11007,
+ /* attach key blob of KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY if needed */
+ KM_TAG_SOTER_AUTO_SIGNED_COMMON_KEY_WHEN_GET_PUBLIC_KEY_BLOB = KM_BYTES | 11008,
} keymaster_tag_t;
/**
diff --git a/include/hardware/power.h b/include/hardware/power.h
index c266d8b..2eb98fe 100644
--- a/include/hardware/power.h
+++ b/include/hardware/power.h
@@ -62,6 +62,15 @@ typedef enum {
} feature_t;
/**
+ * Process info, passed as an opaque handle when
+ * using POWER_HINT_LAUNCH_BOOST.
+ */
+typedef struct launch_boost_info {
+ pid_t pid;
+ const char* packageName;
+} launch_boost_info_t;
+
+/**
* Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
* and the fields of this data structure must begin with hw_module_t
* followed by module specific information.
@@ -170,7 +179,6 @@ typedef struct power_module {
} power_module_t;
-
__END_DECLS
#endif // ANDROID_INCLUDE_HARDWARE_POWER_H
diff --git a/modules/sensors/multihal.cpp b/modules/sensors/multihal.cpp
index 5fedd4d..48f2be3 100644
--- a/modules/sensors/multihal.cpp
+++ b/modules/sensors/multihal.cpp
@@ -36,6 +36,8 @@
#include <dlfcn.h>
#include <SensorEventQueue.h>
+#include <limits.h>
+#include <stdlib.h>
static const char* CONFIG_FILENAME = "/system/etc/sensors/hals.conf";
static const int MAX_CONF_LINE_LENGTH = 1024;
@@ -488,14 +490,14 @@ static void lazy_init_modules() {
pthread_mutex_unlock(&init_modules_mutex);
return;
}
- std::vector<std::string> *so_paths = new std::vector<std::string>();
- get_so_paths(so_paths);
+ std::vector<std::string> so_paths;
+ get_so_paths(&so_paths);
// dlopen the module files and cache their module symbols in sub_hw_modules
sub_hw_modules = new std::vector<hw_module_t *>();
dlerror(); // clear any old errors
const char* sym = HAL_MODULE_INFO_SYM_AS_STR;
- for (std::vector<std::string>::iterator it = so_paths->begin(); it != so_paths->end(); it++) {
+ for (std::vector<std::string>::iterator it = so_paths.begin(); it != so_paths.end(); it++) {
const char* path = it->c_str();
void* lib_handle = dlopen(path, RTLD_LAZY);
if (lib_handle == NULL) {