OSDN Git Service

keymaster: use new version fields in hw_module
authorKenny Root <kroot@google.com>
Thu, 5 Sep 2013 05:17:56 +0000 (22:17 -0700)
committerKenny Root <kroot@google.com>
Thu, 5 Sep 2013 05:17:56 +0000 (22:17 -0700)
The original version of this HAL used a field in keymaster_module to
represent the module's version number, but a later revision of the HAL
interface added a distinguisher between HAL module and device versions.
This is needed to support upgrade code in keystore.

Bug: 10600582
Change-Id: Ied34cf382e2b7725e648faada00df2dee993e6c5

include/hardware/keymaster.h
tests/keymaster/keymaster_test.cpp

index 968beb9..6752146 100644 (file)
@@ -33,11 +33,13 @@ __BEGIN_DECLS
 #define KEYSTORE_KEYMASTER "keymaster"
 
 /**
- * The API level of this version of the header. The allows the implementing
- * module to recognize which API level of the client it is dealing with in
- * the case of pre-compiled binary clients.
+ * Settings for "module_api_version" and "hal_api_version"
+ * fields in the keymaster_module initialization.
  */
-#define KEYMASTER_API_VERSION 2
+#define KEYMASTER_HEADER_VERSION 2
+
+#define KEYMASTER_MODULE_API_VERSION_0_2  HARDWARE_MODULE_API_VERSION(0, 2)
+#define KEYMASTER_DEVICE_API_VERSION_0_2  HARDWARE_DEVICE_API_VERSION_2(0, 2, KEYMASTER_HEADER_VERSION)
 
 /**
  * Flags for keymaster_device::flags
@@ -139,6 +141,10 @@ typedef struct {
 struct keymaster_device {
     struct hw_device_t common;
 
+    /**
+     * THIS IS DEPRECATED. Use the new "module_api_version" and "hal_api_version"
+     * fields in the keymaster_module initialization instead.
+     */
     uint32_t client_version;
 
     /**
@@ -238,10 +244,6 @@ static inline int keymaster_open(const struct hw_module_t* module,
     int rc = module->methods->open(module, KEYSTORE_KEYMASTER,
             (struct hw_device_t**) device);
 
-    if (!rc) {
-        (*device)->client_version = KEYMASTER_API_VERSION;
-    }
-
     return rc;
 }
 
index b3d3f35..ad89012 100644 (file)
@@ -343,7 +343,7 @@ public:
         ASSERT_EQ(0, keymaster_open(mod, &sDevice))
                 << "Should be able to open the keymaster device";
 
-        ASSERT_EQ(2U, sDevice->client_version)
+        ASSERT_EQ(KEYMASTER_MODULE_API_VERSION_0_2, mod->module_api_version)
                 << "Keymaster should implement API version 2";
 
         ASSERT_TRUE(sDevice->generate_keypair != NULL)