Implementation files for command marshaling.

Generated C source and header files which add functions to unmarshal command
requests, execute commands, and marshal command responses. This
(tenatively) adds all final missing parts of libtpm2. These files are
generated from command_generator.py in CL:290556.

TEST=$ sudo emerge tpm2
     builds libtpm2.a
     Locally I was able to call ExecCommand to execute TPM2_Startup with
     success after software TPM initialization.
BUG=chromium:501639

CQ-DEPEND=CL:290556

Change-Id: Ieb3f208795a21a172dea25b35027c5aceba7ee08
Reviewed-on: https://chromium-review.googlesource.com/289813
Tested-by: Jocelyn Bohr <bohr@chromium.org>
Reviewed-by: Darren Krahn <dkrahn@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Jocelyn Bohr <bohr@chromium.org>
diff --git a/Marshal_ChangePPS.c b/Marshal_ChangePPS.c
new file mode 100644
index 0000000..c896e20
--- /dev/null
+++ b/Marshal_ChangePPS.c
@@ -0,0 +1,57 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// THIS CODE IS GENERATED - DO NOT MODIFY!
+
+#include "MemoryLib_fp.h"
+#include "ChangePPS_fp.h"
+
+TPM_RC ChangePPS_In_Unmarshal(ChangePPS_In* target,
+                              TPM_HANDLE request_handles[],
+                              BYTE** buffer,
+                              INT32* size) {
+  TPM_RC result = TPM_RC_SUCCESS;
+  // Get request handles from request_handles array.
+  target->authHandle = request_handles[0];
+  return result;
+}
+
+TPM_RC Exec_ChangePPS(TPMI_ST_COMMAND_TAG tag,
+                      BYTE** request_parameter_buffer,
+                      INT32* request_parameter_buffer_size,
+                      TPM_HANDLE request_handles[],
+                      UINT32* response_handle_buffer_size,
+                      UINT32* response_parameter_buffer_size) {
+  TPM_RC result = TPM_RC_SUCCESS;
+  ChangePPS_In in;
+#ifdef TPM_CC_ChangePPS
+  BYTE* response_buffer;
+  INT32 response_buffer_size;
+#endif
+  *response_handle_buffer_size = 0;
+  *response_parameter_buffer_size = 0;
+  // Unmarshal request parameters to input structure.
+  result =
+      ChangePPS_In_Unmarshal(&in, request_handles, request_parameter_buffer,
+                             request_parameter_buffer_size);
+  if (result != TPM_RC_SUCCESS) {
+    return result;
+  }
+  // Execute command.
+  result = TPM2_ChangePPS(&in);
+  if (result != TPM_RC_SUCCESS) {
+    return result;
+  }
+#ifdef TPM_CC_ChangePPS
+  response_buffer = MemoryGetResponseBuffer(TPM_CC_ChangePPS) + 10;
+  response_buffer_size = MAX_RESPONSE_SIZE - 10;
+  // Add parameter_size field, always equal to 0 here.
+  if (tag == TPM_ST_SESSIONS) {
+    UINT32_Marshal(response_parameter_buffer_size, &response_buffer,
+                   &response_buffer_size);
+  }
+  return TPM_RC_SUCCESS;
+#endif
+  return TPM_RC_COMMAND_CODE;
+}