return dest;
 }
 
+static void *memset(void *dest, int c, size_t n)
+{
+       size_t i;
+
+       for (i = 0; i < n; i++)
+               ((char *)dest)[i] = c;
+
+       return dest;
+}
+
+static void do_encl_init_tcs_page(void *_op)
+{
+       struct encl_op_init_tcs_page *op = _op;
+       void *tcs = (void *)op->tcs_page;
+       uint32_t val_32;
+
+       memset(tcs, 0, 16);                     /* STATE and FLAGS */
+       memcpy(tcs + 16, &op->ssa, 8);          /* OSSA */
+       memset(tcs + 24, 0, 4);                 /* CSSA */
+       val_32 = 1;
+       memcpy(tcs + 28, &val_32, 4);           /* NSSA */
+       memcpy(tcs + 32, &op->entry, 8);        /* OENTRY */
+       memset(tcs + 40, 0, 24);                /* AEP, OFSBASE, OGSBASE */
+       val_32 = 0xFFFFFFFF;
+       memcpy(tcs + 64, &val_32, 4);           /* FSLIMIT */
+       memcpy(tcs + 68, &val_32, 4);           /* GSLIMIT */
+       memset(tcs + 72, 0, 4024);              /* Reserved */
+}
+
 static void do_encl_op_put_to_buf(void *op)
 {
        struct encl_op_put_to_buf *op2 = op;
                do_encl_op_nop,
                do_encl_eaccept,
                do_encl_emodpe,
+               do_encl_init_tcs_page,
        };
 
        struct encl_op_header *op = (struct encl_op_header *)rdi;