+ internal UInt32 InitParam(ref Interop.TEEC_Parameter dst, Parameter src)
+ {
+ switch (src.NativeType) {
+ case (int)TEFValueType.Input:
+ case (int)TEFValueType.Output:
+ case (int)TEFValueType.InOut:
+ dst.value.a = ((Value)src).A;
+ dst.value.b = ((Value)src).B;
+ break;
+
+ case (int)TEFTempMemoryType.Input:
+ case (int)TEFTempMemoryType.Output:
+ case (int)TEFTempMemoryType.InOut:
+ dst.tmpref.buffer = ((TempMemoryReference)src).Buffer;
+ dst.tmpref.size = ((TempMemoryReference)src).Size;
+ break;
+
+ case (int)TEFRegisteredMemoryType.Whole:
+ case (int)TEFRegisteredMemoryType.PartialInput:
+ case (int)TEFRegisteredMemoryType.PartialOutput:
+ case (int)TEFRegisteredMemoryType.PartialInOut:
+ dst.memref.parent = ((RegisteredMemoryReference)src).Parent.shm;
+ dst.memref.size = ((RegisteredMemoryReference)src).Size;
+ dst.memref.offset = ((RegisteredMemoryReference)src).Offset;
+ break;
+
+ default: return 0;
+ }
+ return src.NativeType;
+ }
+
+ internal void UpdateParam(Interop.TEEC_Parameter src, ref Parameter dst)
+ {
+ switch (dst.NativeType) {
+ case (int)TEFValueType.Input:
+ case (int)TEFValueType.Output:
+ case (int)TEFValueType.InOut:
+ ((Value)dst).A = src.value.a;
+ ((Value)dst).B = src.value.b;
+ break;
+
+ case (int)TEFTempMemoryType.Input:
+ case (int)TEFTempMemoryType.Output:
+ case (int)TEFTempMemoryType.InOut:
+ ((TempMemoryReference)dst).Size = src.tmpref.size;
+ break;
+
+ case (int)TEFRegisteredMemoryType.Whole:
+ case (int)TEFRegisteredMemoryType.PartialInput:
+ case (int)TEFRegisteredMemoryType.PartialOutput:
+ case (int)TEFRegisteredMemoryType.PartialInOut:
+ ((RegisteredMemoryReference)dst).Size = src.memref.size;
+ break;
+
+ default: break;
+ }
+ }
+