+
#include <grub/symbol.h>
- /* FIXME: This should invalidate only part of memory. */
FUNCTION (grub_cpu_flush_cache)
FUNCTION (grub_arch_sync_caches)
- move $t2, $a0
- addu $t3, $a0, $a1
- srl $t2, $t2, 5
- sll $t2, $t2, 5
- addu $t3, $t3, 0x1f
- srl $t3, $t3, 5
- sll $t3, $t3, 5
- move $t0, $t2
- subu $t1, $t3, $t2
-r1:
- cache 1, 0($t0)
- addiu $t0, $t0, 0x1
- addiu $t1, $t1, 0xffff
- bne $t1, $zero, r1
- sync
- move $t0, $t2
- subu $t1, $t3, $t2
-r2:
- cache 0, 0($t0)
- addiu $t0, $t0, 0x1
- addiu $t1, $t1, 0xffff
- bne $t1, $zero, r2
- sync
+#include "cache_flush.S"
j $ra
/* j $r. */
*(grub_uint32_t *) *target = (regn<<21) | 0x8;
*target = ((grub_uint32_t *) *target) + 1;
+ /* nop. */
+ *(grub_uint32_t *) *target = 0;
+ *target = ((grub_uint32_t *) *target) + 1;
}
static void
.p2align 4 /* force 16-byte alignment */
VARIABLE (grub_relocator32_forward_start)
- move $12, $9
- move $13, $10
+ move $a0, $9
+ move $a1, $10
copycont1:
lb $11,0($8)
addiu $10, $10, 0xffff
bne $10, $0, copycont1
- move $9, $12
- move $10, $13
-cachecont1a:
- cache 1,0($12)
- addiu $12, $12, 0x1
- addiu $13, $13, 0xffff
- bne $13, $0, cachecont1a
-
- sync
-
- move $12, $9
- move $13, $10
-cachecont1b:
- cache 0,0($12)
- addiu $12, $12, 0x1
- addiu $13, $13, 0xffff
- bne $13, $0, cachecont1b
-
- sync
+#include "../../kern/mips/cache_flush.S"
VARIABLE (grub_relocator32_forward_end)
VARIABLE (grub_relocator32_backward_start)
- move $12, $9
- move $13, $10
+ move $a0, $9
+ move $a1, $10
addu $9, $9, $10
addu $8, $8, $10
addiu $10, 0xffff
bne $10, $0, copycont2
- move $9, $12
- move $10, $13
-cachecont2a:
- cache 1,0($12)
- addiu $12, $12, 0x1
- addiu $13, $13, 0xffff
- bne $13, $0, cachecont2a
-
- sync
-
- move $12, $9
- move $13, $10
-cachecont2b:
- cache 0,0($12)
- addiu $12, $12, 0x1
- addiu $13, $13, 0xffff
- bne $13, $0, cachecont2b
+#include "../../kern/mips/cache_flush.S"
- sync
VARIABLE (grub_relocator32_backward_end)