+struct fake_descriptor64 {
+ uint64_t offset64; /* offset [0..31,32..63] */
+ uint32_t lim_or_seg:20; /* limit */
+ /* or segment, for gate */
+ uint32_t size_or_IST:4; /* size/granularity */
+ /* IST for gates */
+ uint32_t access:8; /* access */
+ uint32_t reserved:32; /* reserved/zero */
+};
+
+typedef struct __attribute__((packed)) {
+ uint16_t size;
+ void *ptr;
+} x86_64_desc_register_t;
+
+/*
+ * Boot-time data for master (or only) CPU
+ */
+extern struct real_descriptor master_gdt[GDTSZ];
+extern struct real_descriptor master_ldt[LDTSZ];
+extern struct i386_tss master_ktss;
+extern struct sysenter_stack master_sstk;
+
+extern struct fake_descriptor64 master_idt64[IDTSZ];
+extern struct x86_64_tss master_ktss64;
+
+__BEGIN_DECLS
+
+extern char df_task_stack[];
+extern char df_task_stack_end[];
+extern struct i386_tss master_dftss;
+extern void df_task_start(void);
+
+extern char mc_task_stack[];
+extern char mc_task_stack_end[];
+extern struct i386_tss master_mctss;
+extern void mc_task_start(void);
+
+__END_DECLS
+