summaryrefslogtreecommitdiffstats
path: root/memtestEDK/Memtest/Cpuid/apic_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'memtestEDK/Memtest/Cpuid/apic_test.c')
-rw-r--r--memtestEDK/Memtest/Cpuid/apic_test.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/memtestEDK/Memtest/Cpuid/apic_test.c b/memtestEDK/Memtest/Cpuid/apic_test.c
new file mode 100644
index 0000000..3e6ff2a
--- /dev/null
+++ b/memtestEDK/Memtest/Cpuid/apic_test.c
@@ -0,0 +1,161 @@
+#include <Library/UefiLib.h>
+
+/*#include "cpuid.h"
+#include "smp.h"*/
+
+#include "apic_test.h"
+
+
+extern void smp_find_cpus();
+
+// Defined in test.h
+typedef unsigned long ulong;
+#define E820MAX 127
+#define MAX_MEM_SEGMENTS E820MAX
+#define BADRAM_MAXPATNS 10
+#define LINE_SCROLL 14
+
+struct pair {
+ ulong adr;
+ ulong mask;
+};
+
+struct mmap {
+ ulong pbase_addr;
+ ulong *start; // VA of segment start
+ ulong *end; // VA of the last dword within the segment.
+};
+
+struct pmap {
+ ulong start; /* phys page number of RAM segment start,
+ in 4K pages. */
+ ulong end; // phys page number (past the end? or inclusive?)
+};
+
+struct xadr {
+ ulong page;
+ ulong offset;
+};
+
+struct err_info {
+ struct xadr low_addr;
+ struct xadr high_addr;
+ unsigned long ebits;
+ long tbits;
+ short min_bits;
+ short max_bits;
+ unsigned long maxl;
+ unsigned long eadr;
+ unsigned long exor;
+ unsigned long cor_err;
+ short hdr_flag;
+};
+
+struct vars {
+ int pass;
+ int msg_line;
+ int ecount;
+ int ecc_ecount;
+ int msegs; // number of entries in pmap[]
+ int testsel;
+ int scroll_start;
+ int pass_ticks;
+ int total_ticks;
+ int pptr;
+ int tptr;
+ struct err_info erri;
+ // PA ranges from e820 table:
+ struct pmap pmap[MAX_MEM_SEGMENTS];
+ // VA mappings:
+ volatile struct mmap map[MAX_MEM_SEGMENTS];
+ ulong plim_lower; // phys page number
+ ulong plim_upper; // phys page number
+ ulong clks_msec;
+ ulong starth;
+ ulong startl;
+ ulong snaph;
+ ulong snapl;
+ int printmode;
+ int numpatn;
+ struct pair patn [BADRAM_MAXPATNS];
+ ulong test_pages;
+ ulong selected_pages;
+ ulong reserved_pages;
+ int check_temp;
+ int fail_safe;
+ int each_sec;
+ int beepmode;
+ int debugging; // Set in selftest only
+};
+
+// Defined in main.c
+struct vars variables = {};
+struct vars * const vv = &variables;
+
+#define PRINTMODE_ADDRESSES 1
+
+
+
+
+
+void set_values() {
+vv->printmode=PRINTMODE_ADDRESSES;
+vv->numpatn=0;
+vv->plim_lower = 0;
+vv->plim_upper = vv->pmap[vv->msegs-1].end;
+vv->pass = 0;
+vv->msg_line = 0;
+vv->ecount = 0;
+vv->ecc_ecount = 0;
+vv->msg_line = LINE_SCROLL-1;
+vv->scroll_start = vv->msg_line * 160;
+vv->debugging = 0;
+vv->erri.low_addr.page = 0x7fffffff;
+vv->erri.low_addr.offset = 0xfff;
+vv->erri.high_addr.page = 0;
+vv->erri.high_addr.offset = 0;
+vv->erri.min_bits = 32;
+vv->erri.max_bits = 0;
+vv->erri.min_bits = 32;
+vv->erri.max_bits = 0;
+vv->erri.maxl = 0;
+vv->erri.cor_err = 0;
+vv->erri.ebits = 0;
+vv->erri.hdr_flag = 0;
+vv->erri.tbits = 0;
+}
+
+void smp_find_cpus_test() {
+
+// TODO search rsdp and other stuff in efi system table
+ set_values();
+ smp_find_cpus();
+}
+
+void read_mp_config_table_test() {
+
+}
+
+void APIC_WRITE_test() {
+
+}
+
+void APIC_READ_test() {
+
+}
+
+void SEND_IPI_test() {
+
+}
+
+void kick_cpu_test() {
+
+}
+
+void my_apic_id_test() {
+
+}
+
+void smp_my_cpu_num_test() {
+
+} \ No newline at end of file