ta: 64-bit fixes
64-bit fixes for TAs to work and compile for Aarch64.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
diff --git a/ta/storage/storage.c b/ta/storage/storage.c
index 3a2e37f..6d4f892 100644
--- a/ta/storage/storage.c
+++ b/ta/storage/storage.c
@@ -35,36 +35,45 @@
return TEE_ERROR_BAD_PARAMETERS; \
} while (0)
+#define VAL2HANDLE(v) (void *)(uintptr_t)(v)
+
TEE_Result ta_storage_cmd_open(uint32_t param_types, TEE_Param params[4])
{
+ TEE_Result res;
+ TEE_ObjectHandle o;
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_INPUT,
TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- return TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE,
+ res = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE,
params[0].memref.buffer,
params[0].memref.size,
- params[1].value.a,
- (void *)¶ms[1].value.b);
+ params[1].value.a, &o);
+
+ params[1].value.b = (uintptr_t)o;
+ return res;
}
TEE_Result ta_storage_cmd_create(uint32_t param_types, TEE_Param params[4])
{
+ TEE_Result res;
+ TEE_ObjectHandle o;
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_INPUT,
TEE_PARAM_TYPE_VALUE_INOUT,
TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_MEMREF_INPUT));
- return TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
- params[0].memref.buffer,
- params[0].memref.size,
- params[1].value.a,
- (TEE_ObjectHandle) params[2].value.a,
- params[3].memref.buffer,
- params[3].memref.size,
- (void *)¶ms[1].value.b);
+ res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
+ params[0].memref.buffer, params[0].memref.size,
+ params[1].value.a,
+ (TEE_ObjectHandle)(uintptr_t)params[2].value.a,
+ params[3].memref.buffer, params[3].memref.size, &o);
+ params[1].value.b = (uintptr_t)o;
+ return res;
}
TEE_Result ta_storage_cmd_close(uint32_t param_types, TEE_Param params[4])
@@ -73,32 +82,34 @@
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- TEE_CloseObject((TEE_ObjectHandle) params[0].value.a);
+ TEE_CloseObject((TEE_ObjectHandle)(uintptr_t)params[0].value.a);
return TEE_SUCCESS;
}
TEE_Result ta_storage_cmd_read(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectHandle o = VAL2HANDLE(params[1].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_OUTPUT,
TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- return TEE_ReadObjectData((TEE_ObjectHandle) params[1].value.a,
- params[0].memref.buffer,
+ return TEE_ReadObjectData(o, params[0].memref.buffer,
params[0].memref.size, ¶ms[1].value.b);
}
TEE_Result ta_storage_cmd_write(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectHandle o = VAL2HANDLE(params[1].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_INPUT,
TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- return TEE_WriteObjectData((TEE_ObjectHandle) params[1].value.a,
- params[0].memref.buffer,
+ return TEE_WriteObjectData(o, params[0].memref.buffer,
params[0].memref.size);
}
@@ -106,16 +117,17 @@
{
TEE_Result res;
TEE_ObjectInfo info;
+ TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a);
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- res = TEE_SeekObjectData((TEE_ObjectHandle) params[0].value.a,
- params[0].value.b, params[1].value.a);
-
- res = TEE_GetObjectInfo1((TEE_ObjectHandle) params[0].value.a, &info);
+ res = TEE_SeekObjectData(o, params[0].value.b, params[1].value.a);
+ if (res != TEE_SUCCESS)
+ return res;
+ res = TEE_GetObjectInfo1(o, &info);
params[1].value.b = info.dataPosition;
@@ -124,85 +136,94 @@
TEE_Result ta_storage_cmd_unlink(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- TEE_CloseAndDeletePersistentObject1((TEE_ObjectHandle) params[0].value.
- a);
+ TEE_CloseAndDeletePersistentObject1(o);
return TEE_SUCCESS;
}
TEE_Result ta_storage_cmd_rename(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- return TEE_RenamePersistentObject((TEE_ObjectHandle) params[0].value.a,
- params[1].memref.buffer,
+ return TEE_RenamePersistentObject(o, params[1].memref.buffer,
params[1].memref.size);
}
TEE_Result ta_storage_cmd_trunc(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- return TEE_TruncateObjectData((TEE_ObjectHandle) params[0].value.a,
- params[0].value.b);
+ return TEE_TruncateObjectData(o, params[0].value.b);
}
TEE_Result ta_storage_cmd_alloc_enum(uint32_t param_types, TEE_Param params[4])
{
+ TEE_Result res;
+ TEE_ObjectEnumHandle oe;
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- return TEE_AllocatePersistentObjectEnumerator((void *)¶ms[0].
- value.a);
+ res = TEE_AllocatePersistentObjectEnumerator(&oe);
+ params[0].value.a = (uintptr_t)oe;
+ return res;
}
TEE_Result ta_storage_cmd_free_enum(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- TEE_FreePersistentObjectEnumerator((TEE_ObjectEnumHandle) params[0].
- value.a);
-
+ TEE_FreePersistentObjectEnumerator(oe);
return TEE_SUCCESS;
}
TEE_Result ta_storage_cmd_reset_enum(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- TEE_ResetPersistentObjectEnumerator((TEE_ObjectEnumHandle) params[0].
- value.a);
-
+ TEE_ResetPersistentObjectEnumerator(oe);
return TEE_SUCCESS;
}
TEE_Result ta_storage_cmd_start_enum(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- return TEE_StartPersistentObjectEnumerator((TEE_ObjectEnumHandle)
- params[0].value.a,
- TEE_STORAGE_PRIVATE);
+ return TEE_StartPersistentObjectEnumerator(oe, TEE_STORAGE_PRIVATE);
}
TEE_Result ta_storage_cmd_next_enum(uint32_t param_types, TEE_Param params[4])
{
+ TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a);
+
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_MEMREF_OUTPUT,
@@ -216,9 +237,7 @@
params[1].memref.size = sizeof(TEE_ObjectInfo);
- return TEE_GetNextPersistentObject((TEE_ObjectEnumHandle) params[0].
- value.a,
- (TEE_ObjectInfo *) params[1].memref.
- buffer, params[2].memref.buffer,
- ¶ms[2].memref.size);
+ return TEE_GetNextPersistentObject(oe,
+ (TEE_ObjectInfo *)params[1].memref.buffer,
+ params[2].memref.buffer, ¶ms[2].memref.size);
}