Move headers under the hf directory.

This helps distinguish local headers from the more official headers.

Change-Id: I535c1b44081b9d60ba63666cd1ad514aaaf2c68d
diff --git a/inc/hf/cpu.h b/inc/hf/cpu.h
new file mode 100644
index 0000000..a779679
--- /dev/null
+++ b/inc/hf/cpu.h
@@ -0,0 +1,65 @@
+#ifndef _CPU_H
+#define _CPU_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include "hf/arch/cpu.h"
+
+#include "hf/addr.h"
+#include "hf/spinlock.h"
+
+enum vcpu_state {
+	vcpu_state_off,
+	vcpu_state_ready,
+	vcpu_state_running,
+	vcpu_state_blocked_rpc,
+	vcpu_state_blocked_interrupt,
+};
+
+struct vcpu {
+	struct spinlock lock;
+	enum vcpu_state state;
+	struct vm *vm;
+	struct vcpu *rpc_next;
+	struct arch_regs regs;
+};
+
+/* TODO: Update alignment such that cpus are in different cache lines. */
+struct cpu {
+	/* CPU identifier. Doesn't have to be contiguous. */
+	size_t id;
+
+	struct vcpu *current;
+
+	/* Pointer to bottom of the stack. */
+	void *stack_bottom;
+
+	/*
+	 * Enabling/disabling irqs are counted per-cpu. They are enabled when
+	 * the count is zero, and disabled when it's non-zero.
+	 */
+	uint32_t irq_disable_count;
+
+	struct spinlock lock;
+
+	/* Determines whether or not the cpu is currently on. */
+	bool is_on;
+};
+
+void cpu_module_init(void);
+
+void cpu_init(struct cpu *c);
+size_t cpu_index(struct cpu *c);
+void cpu_irq_enable(struct cpu *c);
+void cpu_irq_disable(struct cpu *c);
+bool cpu_on(struct cpu *c, ipaddr_t entry, size_t arg);
+void cpu_off(struct cpu *c);
+struct cpu *cpu_find(size_t id);
+
+void vcpu_init(struct vcpu *vcpu, struct vm *vm);
+void vcpu_on(struct vcpu *vcpu);
+void vcpu_off(struct vcpu *vcpu);
+
+#endif /* _CPU_H */