Added framework as a flattened directory

Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
diff --git a/framework/psasim/test/server.c b/framework/psasim/test/server.c
new file mode 100644
index 0000000..bbd90f2
--- /dev/null
+++ b/framework/psasim/test/server.c
@@ -0,0 +1,105 @@
+/* psasim test server */
+
+/*
+ *  Copyright The Mbed TLS Contributors
+ *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+ */
+
+#include <psa/service.h>
+#include "psa_manifest/manifest.h"
+#include <unistd.h>
+#include <stdio.h>
+
+void printbits(uint32_t num)
+{
+    for (int i = 0; i < 32; i++) {
+        if ((num >> (31-i) & 0x1)) {
+            printf("1");
+        } else {
+            printf("0");
+        }
+    }
+    printf("\n");
+}
+
+#define BUF_SIZE 25
+
+int psa_sha256_main()
+{
+    psa_status_t ret = PSA_ERROR_PROGRAMMER_ERROR;
+    psa_msg_t msg = { -1 };
+    char foo[BUF_SIZE] = { 0 };
+    const int magic_num = 66;
+
+    puts("Starting");
+
+    while (1) {
+        puts("Calling psa_wait");
+        psa_signal_t signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK);
+
+        if (signals > 0) {
+            printbits(signals);
+        }
+
+        if (signals & PSA_SHA256_SIGNAL) {
+            puts("Oooh a signal!");
+
+            if (PSA_SUCCESS == psa_get(PSA_SHA256_SIGNAL, &msg)) {
+                printf("My handle is %d\n", msg.handle);
+                printf("My rhandle is %p\n", (int *) msg.rhandle);
+                switch (msg.type) {
+                    case PSA_IPC_CONNECT:
+                        puts("Got a connection message");
+                        psa_set_rhandle(msg.handle, (void *) &magic_num);
+                        ret = PSA_SUCCESS;
+                        break;
+                    case PSA_IPC_DISCONNECT:
+                        puts("Got a disconnection message");
+                        ret = PSA_SUCCESS;
+                        break;
+
+                    default:
+                        printf("Got an IPC call of type %d\n", msg.type);
+                        ret = 42;
+                        size_t size = msg.in_size[0];
+
+                        if ((size > 0) && (size <= sizeof(foo))) {
+                            psa_read(msg.handle, 0, foo, 6);
+                            foo[(BUF_SIZE-1)] = '\0';
+                            printf("Reading payload: %s\n", foo);
+                            psa_read(msg.handle, 0, foo+6, 6);
+                            foo[(BUF_SIZE-1)] = '\0';
+                            printf("Reading payload: %s\n", foo);
+                        }
+
+                        size = msg.out_size[0];
+                        if ((size > 0)) {
+                            puts("Writing response");
+                            psa_write(msg.handle, 0, "RESP", 4);
+                            psa_write(msg.handle, 0, "ONSE", 4);
+                        }
+
+                        if (msg.client_id > 0) {
+                            psa_notify(msg.client_id);
+                        } else {
+                            puts("Client is non-secure, so won't notify");
+                        }
+
+                }
+
+                psa_reply(msg.handle, ret);
+            } else {
+                puts("Failed to retrieve message");
+            }
+        } else if (SIGSTP_SIG & signals) {
+            puts("Recieved SIGSTP signal. Gonna EOI it.");
+            psa_eoi(SIGSTP_SIG);
+        } else if (SIGINT_SIG & signals) {
+            puts("Handling interrupt!\n");
+            puts("Gracefully quitting");
+            psa_panic();
+        } else {
+            puts("No signal asserted");
+        }
+    }
+}