#include <agnix/agnix.h>#include <agnix/init.h>#include <agnix/memory.h>#include <agnix/linkage.h>#include <asm/memtests.h>#include <agnix/console.h>Include dependency graph for memtests_core.c:

Go to the source code of this file.
Defines | |
| #define | MOD_NAME "MEMTEST: " |
Functions | |
| u32 | memaddr_next_1 (u32 addr) |
| u32 | memdata_next_1 (u32 data) |
| int | memcheck_type_1 (u32 addr_check, u32 data_check) |
| int | memtests_init (void) |
| u32 | do_memtest_next_addr (u32 addr_cur, int memaddr_pattern_type) |
| u32 | do_memtest_next_data (u32 data_cur, int memdata_pattern_type) |
| int | do_memtest_checks (u32 addr_check, u32 data_check, int memtest_check_type) |
| int | do_memtest_check (u32 addr_start, u32 addr_end, u32 data_start, int memaddr_pattern_type, int memdata_pattern_type, int memtest_check_type) |
| int | do_memtest (u32 addr_start, u32 addr_end, int memaddr_pattern_type, int memdata_pattern_type, int memtest_check_type, int check_rate) |
| int | do_memtests (void) |
Variables | |
| main_memory_s | main_memory |
| memtest_addr_pattern_s | memaddr_patterns [MEMTEST_MAX_ADDR_PATTERNS] |
| memtest_data_pattern_s | memdata_patterns [MEMTEST_MAX_DATA_PATTERNS] |
| memtest_check_type_s | memcheck_types [MEMTEST_MAX_CHECK_TYPES] |
|
|
Definition at line 21 of file memtests_core.c. |
|
||||||||||||||||||||||||||||
|
Definition at line 160 of file memtests_core.c. References __asm__(), do_memtest_check(), do_memtest_next_addr(), do_memtest_next_data(), and printk(). Referenced by do_memtests(). 00161 {
00162 u32 addr_cur = addr_start;
00163 u32 data_cur = 0xA5A5A5A5;
00164 u32 addr_last_check = addr_cur;
00165 u32 data_last_check = data_cur;
00166 int check_rate_cur = 0;
00167 int check_ret = 0;
00168 int bar_progress = 0;
00169 int bar_next_progress;
00170 u32 bar_max_progress = (addr_end - addr_start);
00171 int i;
00172
00173 do {
00174
00175 check_rate_cur++;
00176
00177 if (check_rate == check_rate_cur) {
00178 check_rate_cur = 0;
00179 check_ret = do_memtest_check(addr_last_check, addr_cur, data_last_check,
00180 memaddr_pattern_type, memdata_pattern_type, memtest_check_type);
00181
00182 if (check_ret < 0) {
00183 printk(" failed\n");
00184 return check_ret;
00185 }
00186
00187 addr_last_check = addr_cur;
00188 data_last_check = data_cur;
00189
00190 bar_next_progress = ((addr_cur - addr_start) * 10) / bar_max_progress;
00191 if (bar_next_progress != bar_progress) {
00192 for (i = bar_progress; i < bar_next_progress; i++) {
00193 printk(".");
00194 }
00195 bar_progress = bar_next_progress;
00196 }
00197 }
00198
00199 __asm__ __volatile (
00200 "movl %%eax, (%%edi)"
00201 :
00202 :"D"(addr_cur), "a"(data_cur)
00203 );
00204
00205 addr_cur = do_memtest_next_addr(addr_cur, memaddr_pattern_type);
00206 data_cur = do_memtest_next_data(data_cur, memdata_pattern_type);
00207
00208 } while (addr_cur < addr_end);
00209
00210 printk(" ok\n");
00211
00212 return 0;
00213 }
Here is the call graph for this function: ![]() |
|
||||||||||||||||||||||||||||
|
Definition at line 133 of file memtests_core.c. References __asm__(), do_memtest_checks(), do_memtest_next_addr(), do_memtest_next_data(), MOD_NAME, and printk(). Referenced by do_memtest(). 00135 {
00136 u32 addr_check_cur = addr_start;
00137 u32 data_check_cur = data_start;
00138
00139 do {
00140
00141 if (addr_check_cur == do_memtest_checks(addr_check_cur, data_check_cur, memtest_check_type) < 0) {
00142 printk(MOD_NAME "check failed at address %08x with data %08x\n", addr_check_cur, data_check_cur);
00143 return -1;
00144 }
00145
00146 __asm__ __volatile (
00147 "movl %%eax, (%%edi)"
00148 :
00149 :"D"(addr_check_cur), "a"(0)
00150 );
00151
00152 addr_check_cur = do_memtest_next_addr(addr_check_cur, memaddr_pattern_type);
00153 data_check_cur = do_memtest_next_data(data_check_cur, memdata_pattern_type);
00154
00155 } while(addr_check_cur < addr_end);
00156
00157 return 0;
00158 }
Here is the call graph for this function: ![]() |
|
||||||||||||||||
|
Definition at line 114 of file memtests_core.c. References memcheck_types. Referenced by do_memtest_check(). 00115 {
00116 int i;
00117 int check_ret;
00118
00119 for (i = 0; i < MEMTEST_MAX_CHECK_TYPES; i++) {
00120 if (!memcheck_types[i].memtest_check_type)
00121 return 0;
00122
00123 if (!(memcheck_types[i].memtest_check_type & memtest_check_type))
00124 continue;
00125
00126 if ((check_ret = memcheck_types[i].check_mem(addr_check, data_check)) < 0)
00127 return check_ret;
00128 }
00129
00130 return 0;
00131 }
|
|
||||||||||||
|
Definition at line 78 of file memtests_core.c. References memaddr_patterns. Referenced by do_memtest(), and do_memtest_check(). 00079 {
00080 u32 addr_next = addr_cur;
00081 int i;
00082
00083 for (i = 0; i < MEMTEST_MAX_ADDR_PATTERNS; i++) {
00084 if (!memaddr_patterns[i].memtest_addr_pattern_type)
00085 return addr_next;
00086
00087 if (!(memaddr_patterns[i].memtest_addr_pattern_type & memaddr_pattern_type))
00088 continue;
00089
00090 addr_next = memaddr_patterns[i].next_addr(addr_next);
00091 }
00092
00093 return addr_next;
00094 }
|
|
||||||||||||
|
Definition at line 96 of file memtests_core.c. References memdata_patterns. Referenced by do_memtest(), and do_memtest_check(). 00097 {
00098 u32 data_next = data_cur;
00099 int i;
00100
00101 for (i = 0; i < MEMTEST_MAX_DATA_PATTERNS; i++) {
00102 if (!memdata_patterns[i].memtest_data_pattern_type)
00103 return data_next;
00104
00105 if (!(memdata_patterns[i].memtest_data_pattern_type & memdata_pattern_type))
00106 continue;
00107
00108 data_next = memdata_patterns[i].next_data(data_next);
00109 }
00110
00111 return data_next;
00112 }
|
|
|
Definition at line 215 of file memtests_core.c. References do_memtest(), main_memory, MOD_NAME, and printk(). Referenced by bootmem_init_dh(). 00216 {
00217 printk(MOD_NAME "upper memory tests....\n");
00218
00219 printk(MOD_NAME "RW test (from 0xc0200000 to 0x%08x) ", 0xc0000000 + (main_memory.mem_size << 10));
00220
00221 do_memtest(0xc0200000, 0xc0000000 + (main_memory.mem_size << 10), MEMTEST_ADDR_PATTERN_ALL,
00222 MEMTEST_DATA_PATTERN_BINARY, MEMTEST_CHECK_RW, 32);
00223
00224 return 0;
00225 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 25 of file memtests_core.c. 00026 {
00027 return addr + 16;
00028 }
|
|
||||||||||||
|
Definition at line 35 of file memtests_core.c. References __asm__(). 00036 {
00037 __asm__ __volatile (
00038 "movl (%%edi), %%eax\n\t"
00039 "subl %%ebx, %%eax"
00040 :
00041 :"D"(addr_check), "b"(data_check)
00042 );
00043
00044 // return value is in eax
00045 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 30 of file memtests_core.c. 00031 {
00032 return 0xA5A5A5A5;
00033 }
|
|
|
Definition at line 71 of file memtests_core.c. References MOD_NAME, and printk().
Here is the call graph for this function: ![]() |
|
|
|
|
|
Initial value: {
{
.memtest_addr_pattern_type = MEMTEST_ADDR_PATTERN_ALL,
.next_addr = memaddr_next_1
},
{ 0 }
}
Definition at line 47 of file memtests_core.c. Referenced by do_memtest_next_addr(). |
|
|
Initial value: {
{
.memtest_check_type = MEMTEST_CHECK_RW,
.check_mem = memcheck_type_1
},
{ 0 }
}
Definition at line 63 of file memtests_core.c. Referenced by do_memtest_checks(). |
|
|
Initial value: {
{
.memtest_data_pattern_type = MEMTEST_DATA_PATTERN_BINARY,
.next_data = memdata_next_1
},
{ 0 }
}
Definition at line 55 of file memtests_core.c. Referenced by do_memtest_next_data(). |