Commit 5b9053a5ea29f51a6058a5ce76daee6f80efb0b2
1 parent
6ea83fed
remove proll
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1965 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
0 additions
and
4067 deletions
pc-bios/proll.patch deleted
100644 → 0
| 1 | -diff -ruN proll_18.orig/Makefile proll-patch-15/Makefile | |
| 2 | ---- proll_18.orig/Makefile 2002-09-13 14:16:59.000000000 +0000 | |
| 3 | -+++ proll-patch-15/Makefile 2005-11-09 18:14:51.000000000 +0000 | |
| 4 | -@@ -4,6 +4,7 @@ | |
| 5 | - make -C krups-ser all | |
| 6 | - make -C espresso all | |
| 7 | - make -C espresso-ser all | |
| 8 | -+ make -C qemu all | |
| 9 | - | |
| 10 | - clean: | |
| 11 | - make -C mrcoffee clean | |
| 12 | -@@ -11,3 +12,4 @@ | |
| 13 | - make -C krups-ser clean | |
| 14 | - make -C espresso clean | |
| 15 | - make -C espresso-ser clean | |
| 16 | -+ make -C qemu clean | |
| 17 | -diff -ruN proll_18.orig/qemu/Makefile proll-patch-15/qemu/Makefile | |
| 18 | ---- proll_18.orig/qemu/Makefile 1970-01-01 00:00:00.000000000 +0000 | |
| 19 | -+++ proll-patch-15/qemu/Makefile 2005-08-14 10:25:06.000000000 +0000 | |
| 20 | -@@ -0,0 +1,123 @@ | |
| 21 | -+# | |
| 22 | -+# proll: | |
| 23 | -+# qemu/Makefile - make PROLL for QEMU | |
| 24 | -+# $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ | |
| 25 | -+# | |
| 26 | -+# Copyright 1999 Pete Zaitcev | |
| 27 | -+# This is Free Software is licensed under terms of GNU General Public License. | |
| 28 | -+# | |
| 29 | -+ | |
| 30 | -+CC = gcc | |
| 31 | -+ | |
| 32 | -+#CROSS = /usr/local/sparc/bin/sparc-sun-linux- | |
| 33 | -+CROSS = sparc-unknown-linux-gnu- | |
| 34 | -+ | |
| 35 | -+CROSSCC = $(CROSS)gcc | |
| 36 | -+CROSSLD = $(CROSS)ld | |
| 37 | -+CROSSNM = $(CROSS)nm | |
| 38 | -+ | |
| 39 | -+RM = /bin/rm -f | |
| 40 | -+ELFTOAOUT = elftoaout | |
| 41 | -+ | |
| 42 | -+# | |
| 43 | -+SRC = ../src | |
| 44 | -+ | |
| 45 | -+# Due to remapping algorithm PROLBASE should be algned on PMD. | |
| 46 | -+# We make PROLBASE a define instead of using _start because we | |
| 47 | -+# want to shift it to form a PGD entry. A relocatable label will not work. | |
| 48 | -+# Linux kernel expects us to be at LINUX_OPPROM_BEGVM <asm-sparc/openprom.h>. | |
| 49 | -+PROLBASE = 0xffd00000 | |
| 50 | -+PROLRODATA = 0xffd08000 | |
| 51 | -+PROLDATA = 0xffd0b000 | |
| 52 | -+PROLSIZE = 240*1024 | |
| 53 | -+ | |
| 54 | -+# Linux | |
| 55 | -+# Fixed %g6 is for arch/sparc/kernel/head.S, it seems ok w/o -ffixed-g6. | |
| 56 | -+# Kernel uses -fcall-used-g5 -fcall-used-g7, we probably do not need them. | |
| 57 | -+# __ANSI__ is supposed to be on by default but it is not. | |
| 58 | -+CFLAGS = -O2 -W -Wall -DPROLBASE=$(PROLBASE) -DPROLDATA=$(PROLDATA) -DPROLRODATA=$(PROLRODATA) -D__ANSI__=1 -I$(SRC) -mcpu=hypersparc -Wa,-xarch=v8 -g -DQEMU -m32 -fno-builtin | |
| 59 | -+ASFLAGS = -D__ASSEMBLY__ -I$(SRC) -DPROLRODATA=$(PROLRODATA) -DPROLDATA=$(PROLDATA) -DPROLSIZE=$(PROLSIZE) -g -Wa,-xarch=v8 -Wa,-32 | |
| 60 | -+# Solaris or Linux/i386 cross compilation | |
| 61 | -+#CFLAGS = -Iinclude -O | |
| 62 | -+ | |
| 63 | -+LDFLAGS = -N -Ttext $(PROLBASE) --section-start .rodata=$(PROLRODATA) -Tdata $(PROLDATA) -Tbss $(PROLDATA) | |
| 64 | -+ | |
| 65 | -+ALL = proll.aout | |
| 66 | -+PROLLEXE = proll.elf | |
| 67 | -+ | |
| 68 | -+OBJS = head.o wuf.o wof.o main.o $(CONSOLE) \ | |
| 69 | -+ printf.o le.o system_qemu.o iommu.o \ | |
| 70 | -+ arp.o netinit.o bootp.o packet.o tftp.o udp.o sched_4m.o openprom.o \ | |
| 71 | -+ vconsole.o hconsole.o rconsole.o vcons_zs.o esp.o | |
| 72 | -+ | |
| 73 | -+all: $(ALL) | |
| 74 | -+ | |
| 75 | -+$(PROLLEXE): $(OBJS) | |
| 76 | -+ $(CROSSLD) $(LDFLAGS) -o $(PROLLEXE) $(OBJS) | |
| 77 | -+ | |
| 78 | -+head.o: head.S $(SRC)/phys_jj.h \ | |
| 79 | -+ $(SRC)/asi.h $(SRC)/psr.h $(SRC)/crs.h | |
| 80 | -+ $(CROSSCC) $(ASFLAGS) -DPROLBASE=$(PROLBASE) -o $*.o -c $*.S | |
| 81 | -+ | |
| 82 | -+main.o: main.c $(SRC)/asi.h $(SRC)/pgtsrmmu.h $(SRC)/iommu.h \ | |
| 83 | -+ $(SRC)/phys_jj.h $(SRC)/vconsole.h $(SRC)/version.h $(SRC)/general.h \ | |
| 84 | -+ $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arpa.h $(SRC)/system.h | |
| 85 | -+ $(CROSSCC) $(CFLAGS) -c $*.c | |
| 86 | -+openprom.o: openprom.c $(SRC)/openprom.h $(SRC)/general.h $(SRC)/romlib.h \ | |
| 87 | -+ $(SRC)/vconsole.h $(SRC)/system.h $(SRC)/phys_jj.h | |
| 88 | -+ $(CROSSCC) $(CFLAGS) -c $*.c | |
| 89 | -+ | |
| 90 | -+system_qemu.o: system_qemu.c $(SRC)/vconsole.h $(SRC)/pgtsrmmu.h \ | |
| 91 | -+ $(SRC)/timer.h $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/asi.h \ | |
| 92 | -+ $(SRC)/netpriv.h $(SRC)/arpa.h $(SRC)/system.h $(SRC)/crs.h | |
| 93 | -+ $(CROSSCC) $(CFLAGS) -c $*.c | |
| 94 | -+iommu.o: $(SRC)/iommu.c $(SRC)/pgtsrmmu.h $(SRC)/phys_jj.h $(SRC)/iommu.h \ | |
| 95 | -+ $(SRC)/vconsole.h $(SRC)/general.h $(SRC)/romlib.h $(SRC)/system.h $(SRC)/asi.h | |
| 96 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 97 | -+vconsole.o: $(SRC)/vconsole.c $(SRC)/vconsole.h $(SRC)/hconsole.h | |
| 98 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 99 | -+vcons_zs.o: $(SRC)/vcons_zs.c $(SRC)/vconsole.h $(SRC)/system.h | |
| 100 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 101 | -+hconsole.o: $(SRC)/hconsole.c $(SRC)/hconsole.h $(SRC)/rconsole.h $(SRC)/phys_jj.h | |
| 102 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 103 | -+rconsole.o: $(SRC)/rconsole.c $(SRC)/rconsole.h | |
| 104 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 105 | -+printf.o: $(SRC)/printf.c | |
| 106 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 107 | -+le.o: $(SRC)/le.c $(SRC)/dma.h $(SRC)/system.h $(SRC)/netpriv.h $(SRC)/romlib.h $(SRC)/general.h $(SRC)/net.h $(SRC)/phys_jj.h | |
| 108 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 109 | -+esp.o: $(SRC)/esp.c $(SRC)/dma.h $(SRC)/system.h $(SRC)/romlib.h $(SRC)/general.h $(SRC)/phys_jj.h | |
| 110 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 111 | -+arp.o: $(SRC)/arp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h | |
| 112 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 113 | -+netinit.o: $(SRC)/netinit.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h $(SRC)/ip.h $(SRC)/udp.h | |
| 114 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 115 | -+tftp.o: $(SRC)/tftp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/arpa.h $(SRC)/romlib.h $(SRC)/tftp.h | |
| 116 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 117 | -+udp.o: $(SRC)/udp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h $(SRC)/ip.h $(SRC)/udp.h | |
| 118 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 119 | -+packet.o: $(SRC)/packet.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h | |
| 120 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 121 | -+sched_4m.o: $(SRC)/sched_4m.c $(SRC)/system.h $(SRC)/general.h $(SRC)/romlib.h $(SRC)/phys_jj.h | |
| 122 | -+ $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c | |
| 123 | -+bootp.o: $(SRC)/bootp.c $(SRC)/general.h $(SRC)/net.h \ | |
| 124 | -+ $(SRC)/arpa.h $(SRC)/romlib.h $(SRC)/system.h $(SRC)/bootp.h | |
| 125 | -+ $(CROSSCC) $(CFLAGS) -DNOBPEXT=1 -c $(SRC)/$*.c | |
| 126 | -+ | |
| 127 | -+wuf.o: $(SRC)/wuf.S | |
| 128 | -+ $(CROSSCC) $(ASFLAGS) -o $*.o -c $(SRC)/$*.S | |
| 129 | -+wof.o: $(SRC)/wof.S | |
| 130 | -+ $(CROSSCC) $(ASFLAGS) -o $*.o -c $(SRC)/$*.S | |
| 131 | -+ | |
| 132 | -+#genlab.o: genlab.c | |
| 133 | -+# $(CC) -c $*.c | |
| 134 | -+# | |
| 135 | -+#genlab: genlab.o | |
| 136 | -+# $(CC) -o genlab genlab.o | |
| 137 | -+ | |
| 138 | -+clean: | |
| 139 | -+ $(RM) $(OBJS) | |
| 140 | -+ $(RM) $(PROLLEXE) proll.aout | |
| 141 | -+ | |
| 142 | -+proll.aout: $(PROLLEXE) | |
| 143 | -+ $(ELFTOAOUT) -o proll.aout $(PROLLEXE) | |
| 144 | -diff -ruN proll_18.orig/qemu/head.S proll-patch-15/qemu/head.S | |
| 145 | ---- proll_18.orig/qemu/head.S 1970-01-01 00:00:00.000000000 +0000 | |
| 146 | -+++ proll-patch-15/qemu/head.S 2005-07-12 22:24:17.000000000 +0000 | |
| 147 | -@@ -0,0 +1,543 @@ | |
| 148 | -+/** | |
| 149 | -+ ** Standalone startup code for Linux PROM emulator. | |
| 150 | -+ ** Copyright 1999 Pete A. Zaitcev | |
| 151 | -+ ** This code is licensed under GNU General Public License. | |
| 152 | -+ **/ | |
| 153 | -+/* | |
| 154 | -+ * $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ | |
| 155 | -+ */ | |
| 156 | -+ | |
| 157 | -+#include <psr.h> | |
| 158 | -+#include <asi.h> | |
| 159 | -+#include <crs.h> | |
| 160 | -+/* #include <asm/head.h> */ /* Trap entries. Do not use. */ | |
| 161 | -+#include "phys_jj.h" | |
| 162 | -+ | |
| 163 | -+#define C_LABEL(name) name | |
| 164 | -+#define REGWIN_SZ 0x40 | |
| 165 | -+ | |
| 166 | -+#define WRITE_PAUSE nop; nop; nop; /* Have to do this after %wim/%psr chg */ | |
| 167 | -+ | |
| 168 | -+ /* 22 is 24-2, (va)>>(SRMMU_PGDIR_SHIFT-PTESIZESHFT) */ | |
| 169 | -+#define VATOPGDOFF(va) (((va)>>22)&0x3FC) | |
| 170 | -+#define VATOPMDOFF(va) (((va)>>16)&0xFC) | |
| 171 | -+ | |
| 172 | -+#define NOP_INSN 0x01000000 /* Used to patch sparc_save_state */ | |
| 173 | -+ | |
| 174 | -+/* Here are some trap goodies */ | |
| 175 | -+ | |
| 176 | -+#if 0 | |
| 177 | -+/* Generic trap entry. */ | |
| 178 | -+#define TRAP_ENTRY(type, label) \ | |
| 179 | -+ rd %psr, %l0; b label; rd %wim, %l3; nop; | |
| 180 | -+#endif | |
| 181 | -+ | |
| 182 | -+/* Data/text faults. */ | |
| 183 | -+#define SRMMU_TFAULT rd %psr, %l0; rd %wim, %l3; b C_LABEL(srmmu_fault); mov 1, %l7; | |
| 184 | -+#define SRMMU_DFAULT rd %psr, %l0; rd %wim, %l3; b C_LABEL(srmmu_fault); mov 0, %l7; | |
| 185 | -+ | |
| 186 | -+#if 0 | |
| 187 | -+/* This is for traps we should NEVER get. */ | |
| 188 | -+#define BAD_TRAP(num) \ | |
| 189 | -+ rd %psr, %l0; mov num, %l7; b bad_trap_handler; rd %wim, %l3; | |
| 190 | -+ | |
| 191 | -+/* This is for traps when we want just skip the instruction which caused it */ | |
| 192 | -+#define SKIP_TRAP(type, name) \ | |
| 193 | -+ jmpl %l2, %g0; rett %l2 + 4; nop; nop; | |
| 194 | -+ | |
| 195 | -+/* Notice that for the system calls we pull a trick. We load up a | |
| 196 | -+ * different pointer to the system call vector table in %l7, but call | |
| 197 | -+ * the same generic system call low-level entry point. The trap table | |
| 198 | -+ * entry sequences are also HyperSparc pipeline friendly ;-) | |
| 199 | -+ */ | |
| 200 | -+ | |
| 201 | -+/* Software trap for Linux system calls. */ | |
| 202 | -+#define LINUX_SYSCALL_TRAP \ | |
| 203 | -+ sethi %hi(C_LABEL(sys_call_table)), %l7; \ | |
| 204 | -+ or %l7, %lo(C_LABEL(sys_call_table)), %l7; \ | |
| 205 | -+ b linux_sparc_syscall; \ | |
| 206 | -+ rd %psr, %l0; | |
| 207 | -+ | |
| 208 | -+/* Software trap for SunOS4.1.x system calls. */ | |
| 209 | -+#define SUNOS_SYSCALL_TRAP \ | |
| 210 | -+ rd %psr, %l0; \ | |
| 211 | -+ sethi %hi(C_LABEL(sunos_sys_table)), %l7; \ | |
| 212 | -+ b linux_sparc_syscall; \ | |
| 213 | -+ or %l7, %lo(C_LABEL(sunos_sys_table)), %l7; | |
| 214 | -+ | |
| 215 | -+/* Software trap for Slowaris system calls. */ | |
| 216 | -+#define SOLARIS_SYSCALL_TRAP \ | |
| 217 | -+ b solaris_syscall; \ | |
| 218 | -+ rd %psr, %l0; \ | |
| 219 | -+ nop; \ | |
| 220 | -+ nop; | |
| 221 | -+ | |
| 222 | -+#define INDIRECT_SOLARIS_SYSCALL(x) \ | |
| 223 | -+ mov x, %g1; \ | |
| 224 | -+ b solaris_syscall; \ | |
| 225 | -+ rd %psr, %l0; \ | |
| 226 | -+ nop; | |
| 227 | -+ | |
| 228 | -+#define BREAKPOINT_TRAP \ | |
| 229 | -+ b breakpoint_trap; \ | |
| 230 | -+ rd %psr,%l0; \ | |
| 231 | -+ nop; \ | |
| 232 | -+ nop; | |
| 233 | -+ | |
| 234 | -+/* Software trap for Sparc-netbsd system calls. */ | |
| 235 | -+#define NETBSD_SYSCALL_TRAP \ | |
| 236 | -+ sethi %hi(C_LABEL(sys_call_table)), %l7; \ | |
| 237 | -+ or %l7, %lo(C_LABEL(sys_call_table)), %l7; \ | |
| 238 | -+ b bsd_syscall; \ | |
| 239 | -+ rd %psr, %l0; | |
| 240 | -+ | |
| 241 | -+/* The Get Condition Codes software trap for userland. */ | |
| 242 | -+#define GETCC_TRAP \ | |
| 243 | -+ b getcc_trap_handler; mov %psr, %l0; nop; nop; | |
| 244 | -+ | |
| 245 | -+/* The Set Condition Codes software trap for userland. */ | |
| 246 | -+#define SETCC_TRAP \ | |
| 247 | -+ b setcc_trap_handler; mov %psr, %l0; nop; nop; | |
| 248 | -+ | |
| 249 | -+/* This is for hard interrupts from level 1-14, 15 is non-maskable (nmi) and | |
| 250 | -+ * gets handled with another macro. | |
| 251 | -+ */ | |
| 252 | -+#define TRAP_ENTRY_INTERRUPT(int_level) \ | |
| 253 | -+ mov int_level, %l7; rd %psr, %l0; b real_irq_entry; rd %wim, %l3; | |
| 254 | -+ | |
| 255 | -+/* NMI's (Non Maskable Interrupts) are special, you can't keep them | |
| 256 | -+ * from coming in, and basically if you get one, the shows over. ;( | |
| 257 | -+ * On the sun4c they are usually asynchronous memory errors, on the | |
| 258 | -+ * the sun4m they could be either due to mem errors or a software | |
| 259 | -+ * initiated interrupt from the prom/kern on an SMP box saying "I | |
| 260 | -+ * command you to do CPU tricks, read your mailbox for more info." | |
| 261 | -+ */ | |
| 262 | -+#define NMI_TRAP \ | |
| 263 | -+ rd %wim, %l3; b linux_trap_nmi_sun4c; mov %psr, %l0; nop; | |
| 264 | -+ | |
| 265 | -+#endif | |
| 266 | -+ | |
| 267 | -+/* Window overflows/underflows are special and we need to try to be as | |
| 268 | -+ * efficient as possible here.... | |
| 269 | -+ */ | |
| 270 | -+#define WINDOW_SPILL \ | |
| 271 | -+ rd %psr, %l0; rd %wim, %l3; b spill_window_entry; nop; | |
| 272 | -+ | |
| 273 | -+#define WINDOW_FILL \ | |
| 274 | -+ rd %psr, %l0; rd %wim, %l3; b fill_window_entry; nop; | |
| 275 | -+ | |
| 276 | -+#define STUB_TRAP ba stub_trap; nop; nop; nop; | |
| 277 | -+ | |
| 278 | -+#define TRAP_ENTRY(a,b) STUB_TRAP | |
| 279 | -+#define SKIP_TRAP(a,b) STUB_TRAP | |
| 280 | -+#define SUNOS_SYSCALL_TRAP STUB_TRAP | |
| 281 | -+#define SOLARIS_SYSCALL_TRAP STUB_TRAP | |
| 282 | -+#define NETBSD_SYSCALL_TRAP STUB_TRAP | |
| 283 | -+#define LINUX_SYSCALL_TRAP STUB_TRAP | |
| 284 | -+#define BREAKPOINT_TRAP STUB_TRAP | |
| 285 | -+#define NMI_TRAP STUB_TRAP | |
| 286 | -+#define GETCC_TRAP STUB_TRAP | |
| 287 | -+#define SETCC_TRAP STUB_TRAP | |
| 288 | -+#define BAD_TRAP(n) STUB_TRAP | |
| 289 | -+#define TRAP_ENTRY_INTERRUPT(i) STUB_TRAP | |
| 290 | -+#define INDIRECT_SOLARIS_SYSCALL(i) STUB_TRAP | |
| 291 | -+ | |
| 292 | -+ .section ".text" | |
| 293 | -+ .globl start, _start | |
| 294 | -+_start: | |
| 295 | -+start: | |
| 296 | -+ .globl spill_window_entry, fill_window_entry | |
| 297 | -+ | |
| 298 | -+#define EXPORT_TRAP(trap) \ | |
| 299 | -+ .globl trap; \ | |
| 300 | -+ .type trap,function; \ | |
| 301 | -+ .size trap, 16 | |
| 302 | -+ | |
| 303 | -+EXPORT_TRAP(t_zero) | |
| 304 | -+EXPORT_TRAP(t_wovf) | |
| 305 | -+EXPORT_TRAP(t_wunf) | |
| 306 | -+EXPORT_TRAP(t_irq1) | |
| 307 | -+EXPORT_TRAP(t_irq2) | |
| 308 | -+EXPORT_TRAP(t_irq3) | |
| 309 | -+EXPORT_TRAP(t_irq4) | |
| 310 | -+EXPORT_TRAP(t_irq5) | |
| 311 | -+EXPORT_TRAP(t_irq6) | |
| 312 | -+EXPORT_TRAP(t_irq7) | |
| 313 | -+EXPORT_TRAP(t_irq8) | |
| 314 | -+EXPORT_TRAP(t_irq9) | |
| 315 | -+EXPORT_TRAP(t_irq10) | |
| 316 | -+EXPORT_TRAP(t_irq11) | |
| 317 | -+EXPORT_TRAP(t_irq12) | |
| 318 | -+EXPORT_TRAP(t_irq13) | |
| 319 | -+EXPORT_TRAP(t_irq14) | |
| 320 | -+EXPORT_TRAP(t_irq15) | |
| 321 | -+ | |
| 322 | -+C_LABEL(trapbase): | |
| 323 | -+t_zero: b goprol; nop; nop; nop; | |
| 324 | -+t_tflt: SRMMU_TFAULT /* Inst. Access Exception */ | |
| 325 | -+t_bins: TRAP_ENTRY(0x2, bad_instruction) /* Illegal Instruction */ | |
| 326 | -+t_pins: TRAP_ENTRY(0x3, priv_instruction) /* Privileged Instruction */ | |
| 327 | -+t_fpd: TRAP_ENTRY(0x4, fpd_trap_handler) /* Floating Point Disabled */ | |
| 328 | -+t_wovf: WINDOW_SPILL /* Window Overflow */ | |
| 329 | -+t_wunf: WINDOW_FILL /* Window Underflow */ | |
| 330 | -+t_mna: TRAP_ENTRY(0x7, mna_handler) /* Memory Address Not Aligned */ | |
| 331 | -+t_fpe: TRAP_ENTRY(0x8, fpe_trap_handler) /* Floating Point Exception */ | |
| 332 | -+t_dflt: SRMMU_DFAULT /* Data Miss Exception */ | |
| 333 | -+t_tio: TRAP_ENTRY(0xa, do_tag_overflow) /* Tagged Instruction Ovrflw */ | |
| 334 | -+t_wpt: TRAP_ENTRY(0xb, do_watchpoint) /* Watchpoint Detected */ | |
| 335 | -+t_badc: BAD_TRAP(0xc) BAD_TRAP(0xd) BAD_TRAP(0xe) BAD_TRAP(0xf) BAD_TRAP(0x10) | |
| 336 | -+t_irq1: TRAP_ENTRY_INTERRUPT(1) /* IRQ Software/SBUS Level 1 */ | |
| 337 | -+t_irq2: TRAP_ENTRY_INTERRUPT(2) /* IRQ SBUS Level 2 */ | |
| 338 | -+t_irq3: TRAP_ENTRY_INTERRUPT(3) /* IRQ SCSI/DMA/SBUS Level 3 */ | |
| 339 | -+t_irq4: TRAP_ENTRY_INTERRUPT(4) /* IRQ Software Level 4 */ | |
| 340 | -+t_irq5: TRAP_ENTRY_INTERRUPT(5) /* IRQ SBUS/Ethernet Level 5 */ | |
| 341 | -+t_irq6: TRAP_ENTRY_INTERRUPT(6) /* IRQ Software Level 6 */ | |
| 342 | -+t_irq7: TRAP_ENTRY_INTERRUPT(7) /* IRQ Video/SBUS Level 5 */ | |
| 343 | -+t_irq8: TRAP_ENTRY_INTERRUPT(8) /* IRQ SBUS Level 6 */ | |
| 344 | -+t_irq9: TRAP_ENTRY_INTERRUPT(9) /* IRQ SBUS Level 7 */ | |
| 345 | -+t_irq10:TRAP_ENTRY_INTERRUPT(10) /* IRQ Timer #1 (one we use) */ | |
| 346 | -+t_irq11:TRAP_ENTRY_INTERRUPT(11) /* IRQ Floppy Intr. */ | |
| 347 | -+t_irq12:TRAP_ENTRY_INTERRUPT(12) /* IRQ Zilog serial chip */ | |
| 348 | -+t_irq13:TRAP_ENTRY_INTERRUPT(13) /* IRQ Audio Intr. */ | |
| 349 | -+t_irq14:TRAP_ENTRY_INTERRUPT(14) /* IRQ Timer #2 */ | |
| 350 | -+t_nmi: NMI_TRAP /* Level 15 (NMI) */ | |
| 351 | -+t_racc: TRAP_ENTRY(0x20, do_reg_access) /* General Register Access Error */ | |
| 352 | -+t_iacce:BAD_TRAP(0x21) /* Instr Access Error */ | |
| 353 | -+t_bad22:BAD_TRAP(0x22) BAD_TRAP(0x23) | |
| 354 | -+t_cpdis:TRAP_ENTRY(0x24, do_cp_disabled) /* Co-Processor Disabled */ | |
| 355 | -+t_uflsh:SKIP_TRAP(0x25, unimp_flush) /* Unimplemented FLUSH inst. */ | |
| 356 | -+t_bad26:BAD_TRAP(0x26) BAD_TRAP(0x27) | |
| 357 | -+t_cpexc:TRAP_ENTRY(0x28, do_cp_exception) /* Co-Processor Exception */ | |
| 358 | -+t_dacce:SRMMU_DFAULT /* Data Access Error */ | |
| 359 | -+t_hwdz: TRAP_ENTRY(0x2a, do_hw_divzero) /* Division by zero, you lose... */ | |
| 360 | -+t_dserr:BAD_TRAP(0x2b) /* Data Store Error */ | |
| 361 | -+t_daccm:BAD_TRAP(0x2c) /* Data Access MMU-Miss */ | |
| 362 | -+t_bad2d: BAD_TRAP(0x2d) BAD_TRAP(0x2e) BAD_TRAP(0x2f) | |
| 363 | -+ BAD_TRAP(0x30) BAD_TRAP(0x31) BAD_TRAP(0x32) BAD_TRAP(0x33) | |
| 364 | -+ BAD_TRAP(0x34) BAD_TRAP(0x35) BAD_TRAP(0x36) BAD_TRAP(0x37) | |
| 365 | -+ BAD_TRAP(0x38) BAD_TRAP(0x39) BAD_TRAP(0x3a) BAD_TRAP(0x3b) | |
| 366 | -+t_iaccm:BAD_TRAP(0x3c) /* Instr Access MMU-Miss */ | |
| 367 | -+ BAD_TRAP(0x3d) BAD_TRAP(0x3e) BAD_TRAP(0x3f) | |
| 368 | -+ BAD_TRAP(0x40) BAD_TRAP(0x41) BAD_TRAP(0x42) BAD_TRAP(0x43) | |
| 369 | -+ BAD_TRAP(0x44) BAD_TRAP(0x45) BAD_TRAP(0x46) BAD_TRAP(0x47) | |
| 370 | -+ BAD_TRAP(0x48) BAD_TRAP(0x49) BAD_TRAP(0x4a) BAD_TRAP(0x4b) | |
| 371 | -+ BAD_TRAP(0x4c) BAD_TRAP(0x4d) BAD_TRAP(0x4e) BAD_TRAP(0x4f) | |
| 372 | -+ BAD_TRAP(0x50) BAD_TRAP(0x51) BAD_TRAP(0x52) BAD_TRAP(0x53) | |
| 373 | -+ BAD_TRAP(0x54) BAD_TRAP(0x55) BAD_TRAP(0x56) BAD_TRAP(0x57) | |
| 374 | -+ BAD_TRAP(0x58) BAD_TRAP(0x59) BAD_TRAP(0x5a) BAD_TRAP(0x5b) | |
| 375 | -+ BAD_TRAP(0x5c) BAD_TRAP(0x5d) BAD_TRAP(0x5e) BAD_TRAP(0x5f) | |
| 376 | -+ BAD_TRAP(0x60) BAD_TRAP(0x61) BAD_TRAP(0x62) BAD_TRAP(0x63) | |
| 377 | -+ BAD_TRAP(0x64) BAD_TRAP(0x65) BAD_TRAP(0x66) BAD_TRAP(0x67) | |
| 378 | -+ BAD_TRAP(0x68) BAD_TRAP(0x69) BAD_TRAP(0x6a) BAD_TRAP(0x6b) | |
| 379 | -+ BAD_TRAP(0x6c) BAD_TRAP(0x6d) BAD_TRAP(0x6e) BAD_TRAP(0x6f) | |
| 380 | -+ BAD_TRAP(0x70) BAD_TRAP(0x71) BAD_TRAP(0x72) BAD_TRAP(0x73) | |
| 381 | -+ BAD_TRAP(0x74) BAD_TRAP(0x75) BAD_TRAP(0x76) BAD_TRAP(0x77) | |
| 382 | -+ BAD_TRAP(0x78) BAD_TRAP(0x79) BAD_TRAP(0x7a) BAD_TRAP(0x7b) | |
| 383 | -+ BAD_TRAP(0x7c) BAD_TRAP(0x7d) BAD_TRAP(0x7e) BAD_TRAP(0x7f) | |
| 384 | -+t_sunos:SUNOS_SYSCALL_TRAP /* SunOS System Call */ | |
| 385 | -+t_sbkpt:BREAKPOINT_TRAP /* Software Breakpoint/KGDB */ | |
| 386 | -+t_divz: BAD_TRAP(0x82) /* Divide by zero trap */ | |
| 387 | -+t_flwin:TRAP_ENTRY(0x83, do_flush_windows) /* Flush Windows Trap */ | |
| 388 | -+t_clwin:BAD_TRAP(0x84) /* Clean Windows Trap */ | |
| 389 | -+t_rchk: BAD_TRAP(0x85) /* Range Check */ | |
| 390 | -+t_funal:BAD_TRAP(0x86) /* Fix Unaligned Access Trap */ | |
| 391 | -+t_iovf: BAD_TRAP(0x87) /* Integer Overflow Trap */ | |
| 392 | -+t_slowl:SOLARIS_SYSCALL_TRAP /* Slowaris System Call */ | |
| 393 | -+t_netbs:NETBSD_SYSCALL_TRAP /* Net-B.S. System Call */ | |
| 394 | -+t_bad8a:BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c) BAD_TRAP(0x8d) | |
| 395 | -+ BAD_TRAP(0x8e) BAD_TRAP(0x8f) | |
| 396 | -+t_linux:LINUX_SYSCALL_TRAP /* Linux System Call */ | |
| 397 | -+t_bad91:BAD_TRAP(0x91) BAD_TRAP(0x92) BAD_TRAP(0x93) | |
| 398 | -+ BAD_TRAP(0x94) BAD_TRAP(0x95) BAD_TRAP(0x96) BAD_TRAP(0x97) | |
| 399 | -+ BAD_TRAP(0x98) BAD_TRAP(0x99) BAD_TRAP(0x9a) BAD_TRAP(0x9b) BAD_TRAP(0x9c) BAD_TRAP(0x9d) BAD_TRAP(0x9e) BAD_TRAP(0x9f) | |
| 400 | -+t_getcc:GETCC_TRAP /* Get Condition Codes */ | |
| 401 | -+t_setcc:SETCC_TRAP /* Set Condition Codes */ | |
| 402 | -+t_bada2:BAD_TRAP(0xa2) BAD_TRAP(0xa3) | |
| 403 | -+ BAD_TRAP(0xa4) BAD_TRAP(0xa5) BAD_TRAP(0xa6) | |
| 404 | -+t_slowi:INDIRECT_SOLARIS_SYSCALL(156) | |
| 405 | -+ BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab) | |
| 406 | -+ BAD_TRAP(0xac) BAD_TRAP(0xad) BAD_TRAP(0xae) BAD_TRAP(0xaf) | |
| 407 | -+ BAD_TRAP(0xb0) BAD_TRAP(0xb1) BAD_TRAP(0xb2) BAD_TRAP(0xb3) | |
| 408 | -+ BAD_TRAP(0xb4) BAD_TRAP(0xb5) BAD_TRAP(0xb6) BAD_TRAP(0xb7) | |
| 409 | -+ BAD_TRAP(0xb8) BAD_TRAP(0xb9) BAD_TRAP(0xba) BAD_TRAP(0xbb) | |
| 410 | -+ BAD_TRAP(0xbc) BAD_TRAP(0xbd) BAD_TRAP(0xbe) BAD_TRAP(0xbf) | |
| 411 | -+t_badc0:BAD_TRAP(0xc0) BAD_TRAP(0xc1) BAD_TRAP(0xc2) BAD_TRAP(0xc3) | |
| 412 | -+ BAD_TRAP(0xc4) BAD_TRAP(0xc5) BAD_TRAP(0xc6) BAD_TRAP(0xc7) | |
| 413 | -+ BAD_TRAP(0xc8) BAD_TRAP(0xc9) BAD_TRAP(0xca) BAD_TRAP(0xcb) | |
| 414 | -+ BAD_TRAP(0xcc) BAD_TRAP(0xcd) BAD_TRAP(0xce) BAD_TRAP(0xcf) | |
| 415 | -+ BAD_TRAP(0xd0) BAD_TRAP(0xd1) BAD_TRAP(0xd2) BAD_TRAP(0xd3) | |
| 416 | -+t_badd4:BAD_TRAP(0xd4) BAD_TRAP(0xd5) BAD_TRAP(0xd6) BAD_TRAP(0xd7) | |
| 417 | -+ BAD_TRAP(0xd8) BAD_TRAP(0xd9) BAD_TRAP(0xda) BAD_TRAP(0xdb) | |
| 418 | -+ BAD_TRAP(0xdc) BAD_TRAP(0xdd) BAD_TRAP(0xde) BAD_TRAP(0xdf) | |
| 419 | -+ BAD_TRAP(0xe0) BAD_TRAP(0xe1) BAD_TRAP(0xe2) BAD_TRAP(0xe3) | |
| 420 | -+ BAD_TRAP(0xe4) BAD_TRAP(0xe5) BAD_TRAP(0xe6) BAD_TRAP(0xe7) | |
| 421 | -+t_bade8:BAD_TRAP(0xe8) BAD_TRAP(0xe9) BAD_TRAP(0xea) BAD_TRAP(0xeb) | |
| 422 | -+ BAD_TRAP(0xec) BAD_TRAP(0xed) BAD_TRAP(0xee) BAD_TRAP(0xef) | |
| 423 | -+ BAD_TRAP(0xf0) BAD_TRAP(0xf1) BAD_TRAP(0xf2) BAD_TRAP(0xf3) | |
| 424 | -+ BAD_TRAP(0xf4) BAD_TRAP(0xf5) BAD_TRAP(0xf6) BAD_TRAP(0xf7) | |
| 425 | -+ BAD_TRAP(0xf8) BAD_TRAP(0xf9) BAD_TRAP(0xfa) BAD_TRAP(0xfb) | |
| 426 | -+t_badfc:BAD_TRAP(0xfc) BAD_TRAP(0xfd) | |
| 427 | -+dbtrap: BAD_TRAP(0xfe) /* Debugger/PROM breakpoint #1 */ | |
| 428 | -+dbtrap2:BAD_TRAP(0xff) /* Debugger/PROM breakpoint #2 */ | |
| 429 | -+ | |
| 430 | -+stub_trap: | |
| 431 | -+ set (PHYS_JJ_TCX_FB + 0xbf0), %g5 /* 2 cells from side */ | |
| 432 | -+ set 0x00ffffff, %g4 | |
| 433 | -+ sta %g4, [%g5] ASI_M_BYPASS | |
| 434 | -+1: ba 1b; nop | |
| 435 | -+ | |
| 436 | -+ .section ".bss" | |
| 437 | -+ .align 8 | |
| 438 | -+bss_start: | |
| 439 | -+ .align 0x1000 ! PAGE_SIZE | |
| 440 | -+ .globl C_LABEL(bootup_user_stack) | |
| 441 | -+ .type bootup_user_stack,#object | |
| 442 | -+ .size bootup_user_stack,0x2000 | |
| 443 | -+C_LABEL(bootup_user_stack): .skip 0x2000 | |
| 444 | -+ | |
| 445 | -+ .section ".text" | |
| 446 | -+ .register %g2, #scratch | |
| 447 | -+ .register %g3, #scratch | |
| 448 | -+ .register %g6, #scratch | |
| 449 | -+ .register %g7, #scratch | |
| 450 | -+ | |
| 451 | -+goprol: | |
| 452 | -+ ! %g1 contains end of memory | |
| 453 | -+ set PHYS_JJ_EEPROM + 0x30, %g1 | |
| 454 | -+ lda [%g1] ASI_M_BYPASS, %g1 | |
| 455 | -+ ! map PROLDATA to PROLBASE+PROLSIZE to end of ram | |
| 456 | -+ set PROLSIZE+0x1000-PROLDATA+PROLBASE, %g2 ! add 0x1000 for temp tables | |
| 457 | -+ sub %g1, %g2, %g2 ! start of private memory | |
| 458 | -+ srl %g2, 0x4, %g7 ! ctx table at s+0x0 | |
| 459 | -+ add %g2, 0x400, %g3 ! l1 table at s+0x400 | |
| 460 | -+ srl %g3, 0x4, %g3 | |
| 461 | -+ or %g3, 0x1, %g3 | |
| 462 | -+ sta %g3, [%g2] ASI_M_BYPASS | |
| 463 | -+ add %g2, 0x400, %g2 ! s+0x400 | |
| 464 | -+ add %g2, 0x800, %g3 ! l2 table for ram (00xxxxxx) at s+0x800 | |
| 465 | -+ srl %g3, 0x4, %g3 | |
| 466 | -+ or %g3, 0x1, %g3 | |
| 467 | -+ sta %g3, [%g2] ASI_M_BYPASS | |
| 468 | -+ add %g2, 0x500, %g3 ! l2 table for rom (ffxxxxxx) at s+0x900 | |
| 469 | -+ add %g2, 0x3fc, %g2 ! s+0x7fc | |
| 470 | -+ srl %g3, 0x4, %g3 | |
| 471 | -+ or %g3, 0x1, %g3 | |
| 472 | -+ sta %g3, [%g2] ASI_M_BYPASS | |
| 473 | -+ add %g2, 0x4, %g2 ! s+0x800 | |
| 474 | -+ set ((7 << 2) | 2), %g3 ! 7 = U: --- S: RWX (main memory) | |
| 475 | -+ sta %g3, [%g2] ASI_M_BYPASS | |
| 476 | -+ add %g2, 0x200, %g3 ! l3 table for rom at s+0xa00 | |
| 477 | -+ add %g2, 0x1d0, %g2 ! s+0x9d0 | |
| 478 | -+ srl %g3, 0x4, %g3 | |
| 479 | -+ or %g3, 0x1, %g3 | |
| 480 | -+ sta %g3, [%g2] ASI_M_BYPASS | |
| 481 | -+ add %g2, 0x30, %g2 ! s+0xa00 | |
| 482 | -+ | |
| 483 | -+ set PROLBASE, %g3 | |
| 484 | -+ set 0x1000, %g5 | |
| 485 | -+ set (PROLDATA-PROLBASE)/0x1000, %g6 ! # of .text pages | |
| 486 | -+1: srl %g3, 0x4, %g4 | |
| 487 | -+ or %g4, ((7 << 2) | 2), %g4 ! 4 = U: --X S: --X (rom, execute only) | |
| 488 | -+ sta %g4, [%g2] ASI_M_BYPASS | |
| 489 | -+ add %g2, 4, %g2 | |
| 490 | -+ add %g3, %g5, %g3 | |
| 491 | -+ deccc %g6 | |
| 492 | -+ bne 1b | |
| 493 | -+ nop | |
| 494 | -+#if 0 | |
| 495 | -+ set (PROLDATA-PROLRODATA)/0x1000, %g6 ! # of .rodata pages | |
| 496 | -+1: srl %g3, 0x4, %g4 | |
| 497 | -+ or %g4, ((0 << 2) | 2), %g4 ! 0 = U: R-- S: R-- (rom, read only) | |
| 498 | -+ sta %g4, [%g2] ASI_M_BYPASS | |
| 499 | -+ add %g2, 4, %g2 | |
| 500 | -+ add %g3, %g5, %g3 | |
| 501 | -+ deccc %g6 | |
| 502 | -+ bne 1b | |
| 503 | -+ nop | |
| 504 | -+#endif | |
| 505 | -+ set (PROLBASE+PROLSIZE-PROLDATA)/0x1000, %g6 ! # of .bss pages | |
| 506 | -+ set 0x1000, %g4 | |
| 507 | -+ sll %g7, 0x4, %g3 | |
| 508 | -+ add %g4, %g3, %g3 | |
| 509 | -+1: srl %g3, 0x4, %g4 | |
| 510 | -+ or %g4, ((7 << 2) | 2), %g4 ! 5 = U: R-- S: RW- (data area, read/write) | |
| 511 | -+ sta %g4, [%g2] ASI_M_BYPASS | |
| 512 | -+ add %g2, 4, %g2 | |
| 513 | -+ add %g3, %g5, %g3 | |
| 514 | -+ deccc %g6 | |
| 515 | -+ bne 1b | |
| 516 | -+ nop | |
| 517 | -+ | |
| 518 | -+ mov %g1, %g3 | |
| 519 | -+ | |
| 520 | -+ set AC_M_CTPR, %g2 | |
| 521 | -+ sta %g7, [%g2] ASI_M_MMUREGS ! set ctx table ptr | |
| 522 | -+ set 1, %g1 | |
| 523 | -+ sta %g1, [%g0] ASI_M_MMUREGS ! enable mmu | |
| 524 | -+ | |
| 525 | -+ /* | |
| 526 | -+ * The code which enables traps is a simplified version of | |
| 527 | -+ * kernel head.S. | |
| 528 | -+ * | |
| 529 | -+ * We know number of windows as 8 so we do not calculate them. | |
| 530 | -+ * The deadwood is here for any case. | |
| 531 | -+ */ | |
| 532 | -+ | |
| 533 | -+ /* Turn on Supervisor, EnableFloating, and all the PIL bits. | |
| 534 | -+ * Also puts us in register window zero with traps off. | |
| 535 | -+ */ | |
| 536 | -+ set (PSR_PS | PSR_S | PSR_PIL | PSR_EF), %g2 | |
| 537 | -+ wr %g2, 0x0, %psr | |
| 538 | -+ WRITE_PAUSE | |
| 539 | -+ | |
| 540 | -+ /* I want a kernel stack NOW! */ | |
| 541 | -+ set C_LABEL(bootup_user_stack), %g1 | |
| 542 | -+ set (0x2000 - REGWIN_SZ), %g2 | |
| 543 | -+ add %g1, %g2, %sp | |
| 544 | -+ mov 0, %fp /* And for good luck */ | |
| 545 | -+ | |
| 546 | -+ /* Zero out our BSS section. */ | |
| 547 | -+ set C_LABEL(bss_start) , %o0 ! First address of BSS | |
| 548 | -+ set C_LABEL(end) , %o1 ! Last address of BSS | |
| 549 | -+ ba 2f | |
| 550 | -+ nop | |
| 551 | -+1: | |
| 552 | -+ st %g0, [%o0] | |
| 553 | -+2: | |
| 554 | -+ subcc %o0, %o1, %g0 | |
| 555 | -+ bl 1b | |
| 556 | -+ add %o0, 0x4, %o0 | |
| 557 | -+ | |
| 558 | -+ mov 2, %g1 | |
| 559 | -+ wr %g1, 0x0, %wim ! make window 1 invalid | |
| 560 | -+ WRITE_PAUSE | |
| 561 | -+ | |
| 562 | -+#if 0 | |
| 563 | -+ wr %g0, 0x0, %wim | |
| 564 | -+ WRITE_PAUSE | |
| 565 | -+ save | |
| 566 | -+ rd %psr, %g3 | |
| 567 | -+ restore | |
| 568 | -+ and %g3, PSR_CWP, %g3 | |
| 569 | -+ add %g3, 0x1, %g3 | |
| 570 | -+#else | |
| 571 | -+ or %g0, 8, %g3 | |
| 572 | -+#endif | |
| 573 | -+ | |
| 574 | -+#if 0 | |
| 575 | -+ sethi %hi( C_LABEL(cputyp) ), %o0 | |
| 576 | -+ st %g7, [%o0 + %lo( C_LABEL(cputyp) )] | |
| 577 | -+ | |
| 578 | -+ sethi %hi( C_LABEL(nwindows) ), %g4 | |
| 579 | -+ st %g3, [%g4 + %lo( C_LABEL(nwindows) )] | |
| 580 | -+ | |
| 581 | -+ sub %g3, 0x1, %g3 | |
| 582 | -+ sethi %hi( C_LABEL(nwindowsm1) ), %g4 | |
| 583 | -+ st %g3, [%g4 + %lo( C_LABEL(nwindowsm1) )] | |
| 584 | -+#endif | |
| 585 | -+ | |
| 586 | -+ /* Here we go, start using Linux's trap table... */ | |
| 587 | -+ set C_LABEL(trapbase), %g3 | |
| 588 | -+ wr %g3, 0x0, %tbr | |
| 589 | -+ WRITE_PAUSE | |
| 590 | -+ | |
| 591 | -+ /* Finally, turn on traps so that we can call c-code. */ | |
| 592 | -+ rd %psr, %g3 | |
| 593 | -+ wr %g3, 0x0, %psr | |
| 594 | -+ WRITE_PAUSE | |
| 595 | -+ | |
| 596 | -+ wr %g3, PSR_ET, %psr | |
| 597 | -+ WRITE_PAUSE | |
| 598 | -+ | |
| 599 | -+ .globl prolmain | |
| 600 | -+ call C_LABEL(prolmain) | |
| 601 | -+ nop | |
| 602 | -+ | |
| 603 | -+3: | |
| 604 | -+ b 3b | |
| 605 | -+ nop | |
| 606 | -+ | |
| 607 | -+/* | |
| 608 | -+ * Memory access trap handler | |
| 609 | -+ * %l0 program %psr from trap table entry | |
| 610 | -+ * %l1 program %pc from hardware | |
| 611 | -+ * %l2 program %npc from hardware | |
| 612 | -+ * %l3 program %wim from trap table entry | |
| 613 | -+ * %l4 | |
| 614 | -+ * %l5 | |
| 615 | -+ * %l6 | |
| 616 | -+ * %l7 text flag from trap table entry | |
| 617 | -+ */ | |
| 618 | -+ | |
| 619 | -+ .section ".text" | |
| 620 | -+ .globl srmmu_fault | |
| 621 | -+C_LABEL(srmmu_fault): | |
| 622 | -+ | |
| 623 | -+ set AC_M_SFAR, %l6 | |
| 624 | -+ set AC_M_SFSR, %l5 | |
| 625 | -+ lda [%l6] ASI_M_MMUREGS, %l6 | |
| 626 | -+ lda [%l5] ASI_M_MMUREGS, %l5 | |
| 627 | -+ | |
| 628 | -+ set ignore_fault, %l5 | |
| 629 | -+ ld [%l5], %l5 | |
| 630 | -+ subcc %l5, %g0, %g0 /* NULL pointer trap faults always */ | |
| 631 | -+ be 3f | |
| 632 | -+ nop | |
| 633 | -+ subcc %l5, %l6, %g0 | |
| 634 | -+ be 2f | |
| 635 | -+ nop | |
| 636 | -+3: | |
| 637 | -+ | |
| 638 | -+ set (PHYS_JJ_TCX_FB + 0xbf0), %g5 /* 2 cells from side */ | |
| 639 | -+ set 0x00ffffff, %g4 | |
| 640 | -+ sta %g4, [%g5] ASI_M_BYPASS | |
| 641 | -+ add %g5, 8, %g5 /* On right side */ | |
| 642 | -+ sta %g4, [%g5] ASI_M_BYPASS | |
| 643 | -+1: ba 1b; nop | |
| 644 | -+ | |
| 645 | -+2: | |
| 646 | -+ set C_LABEL(fault_ignored), %l5 | |
| 647 | -+ mov 1, %l6 | |
| 648 | -+ st %l6, [%l5] | |
| 649 | -+ | |
| 650 | -+ /* | |
| 651 | -+ * Skip the faulting instruction. | |
| 652 | -+ * I think it works when next instruction is a branch even. | |
| 653 | -+ */ | |
| 654 | -+ or %l2, 0, %l1 | |
| 655 | -+ add %l2, 4, %l2 | |
| 656 | -+ | |
| 657 | -+ wr %l0, 0, %psr | |
| 658 | -+ WRITE_PAUSE | |
| 659 | -+ jmp %l1 | |
| 660 | -+ rett %l2 | |
| 661 | -+ | |
| 662 | -+/* | |
| 663 | -+ * Slow external versions of st_bypass and ld_bypass. | |
| 664 | -+ * rconsole.c uses inlines. We call these in places which are not speed | |
| 665 | -+ * critical, to avoid compiler bugs. | |
| 666 | -+ */ | |
| 667 | -+ .globl C_LABEL(st_bypass) | |
| 668 | -+C_LABEL(st_bypass): | |
| 669 | -+ retl | |
| 670 | -+ sta %o1, [%o0] ASI_M_BYPASS | |
| 671 | -+ .globl C_LABEL(ld_bypass) | |
| 672 | -+C_LABEL(ld_bypass): | |
| 673 | -+ retl | |
| 674 | -+ lda [%o0] ASI_M_BYPASS, %o0 | |
| 675 | -+ .globl C_LABEL(sth_bypass) | |
| 676 | -+C_LABEL(sth_bypass): | |
| 677 | -+ retl | |
| 678 | -+ stha %o1, [%o0] ASI_M_BYPASS | |
| 679 | -+ .globl C_LABEL(ldh_bypass) | |
| 680 | -+C_LABEL(ldh_bypass): | |
| 681 | -+ retl | |
| 682 | -+ lduha [%o0] ASI_M_BYPASS, %o0 | |
| 683 | -+ .globl C_LABEL(stb_bypass) | |
| 684 | -+C_LABEL(stb_bypass): | |
| 685 | -+ retl | |
| 686 | -+ stba %o1, [%o0] ASI_M_BYPASS | |
| 687 | -+ .globl C_LABEL(ldb_bypass) | |
| 688 | -+C_LABEL(ldb_bypass): | |
| 689 | -+ retl | |
| 690 | -+ lduba [%o0] ASI_M_BYPASS, %o0 | |
| 691 | -diff -ruN proll_18.orig/qemu/main.c proll-patch-15/qemu/main.c | |
| 692 | ---- proll_18.orig/qemu/main.c 1970-01-01 00:00:00.000000000 +0000 | |
| 693 | -+++ proll-patch-15/qemu/main.c 2005-08-14 10:07:48.000000000 +0000 | |
| 694 | -@@ -0,0 +1,185 @@ | |
| 695 | -+/** | |
| 696 | -+ ** Proll (PROM replacement) | |
| 697 | -+ ** Copyright 1999 Pete Zaitcev | |
| 698 | -+ ** This code is licensed under GNU General Public License. | |
| 699 | -+ **/ | |
| 700 | -+#include <stdarg.h> | |
| 701 | -+ | |
| 702 | -+// #include <asm/contregs.h> | |
| 703 | -+#include <asi.h> | |
| 704 | -+#include "pgtsrmmu.h" | |
| 705 | -+#include "iommu.h" /* Typical SBus IOMMU for sun4m */ | |
| 706 | -+#include "phys_jj.h" | |
| 707 | -+#include "vconsole.h" | |
| 708 | -+#include "version.h" | |
| 709 | -+#include <general.h> /* __P() */ | |
| 710 | -+#include <net.h> /* init_net() */ | |
| 711 | -+#include <romlib.h> /* we are a provider for part of this. */ | |
| 712 | -+#include <netpriv.h> /* myipaddr */ | |
| 713 | -+#include <arpa.h> | |
| 714 | -+#include <system.h> /* our own prototypes */ | |
| 715 | -+ | |
| 716 | -+void *init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, const char *cmdline, char boot_device, int nographic); | |
| 717 | -+int vcon_zs_init(struct vconterm *t, unsigned int a0); | |
| 718 | -+int vcon_zs_write(struct vconterm *t, char *data, int leng); | |
| 719 | -+int vcon_zs_getch(struct vconterm *t); | |
| 720 | -+void esp_probe(); | |
| 721 | -+int esp_boot(int unit); | |
| 722 | -+static void init_idprom(void); | |
| 723 | -+ | |
| 724 | -+struct vconterm dp0; | |
| 725 | -+struct mem cmem; /* Current memory, virtual */ | |
| 726 | -+struct mem cio; /* Current I/O space */ | |
| 727 | -+struct phym pmem; /* Current phys. mem. */ | |
| 728 | -+struct iommu ciommu; /* Our IOMMU on sun4m */ | |
| 729 | -+ | |
| 730 | -+static struct { | |
| 731 | -+ const char id[16]; | |
| 732 | -+ unsigned int version; | |
| 733 | -+ char pad1[0x1c]; // Pad to 0x30 | |
| 734 | -+ unsigned int ram_size; | |
| 735 | -+ char boot_device; | |
| 736 | -+ unsigned int load_addr, kernel_size; | |
| 737 | -+ unsigned int cmdline, cmdline_len; | |
| 738 | -+ char pad2[0x0c]; // Pad to 0x54 | |
| 739 | -+ unsigned short width, height, depth; | |
| 740 | -+} *hw_idprom; | |
| 741 | -+ | |
| 742 | -+int ignore_fault, fault_ignored; | |
| 743 | -+void *printk_fn, *getch_fn; | |
| 744 | -+unsigned int q_height, q_width; | |
| 745 | -+ | |
| 746 | -+/* | |
| 747 | -+ */ | |
| 748 | -+void prolmain() | |
| 749 | -+{ | |
| 750 | -+ static char fname[14]; | |
| 751 | -+ static struct banks bb; | |
| 752 | -+ unsigned int hiphybas; | |
| 753 | -+ const void *romvec; | |
| 754 | -+ unsigned int ram_size; | |
| 755 | -+ char nographic, bootdev; | |
| 756 | -+ | |
| 757 | -+ nographic = ldb_bypass(PHYS_JJ_EEPROM + 0x2F); | |
| 758 | -+ if (!nographic) { | |
| 759 | -+ q_width = ldh_bypass(PHYS_JJ_EEPROM + 0x54); | |
| 760 | -+ q_height = ldh_bypass(PHYS_JJ_EEPROM + 0x56); | |
| 761 | -+ vcon_init(&dp0, PHYS_JJ_TCX_FB); | |
| 762 | -+ printk_fn = vcon_write; | |
| 763 | -+ getch_fn = vcon_getch; | |
| 764 | -+ } | |
| 765 | -+ else { | |
| 766 | -+ vcon_zs_init(&dp0, 0x71100004); | |
| 767 | -+ printk_fn = vcon_zs_write; | |
| 768 | -+ getch_fn = vcon_zs_getch; | |
| 769 | -+ } | |
| 770 | -+ | |
| 771 | -+ | |
| 772 | -+ printk("PROLL %s QEMU\n", PROLL_VERSION_STRING); | |
| 773 | -+ ram_size = ld_bypass(PHYS_JJ_EEPROM + 0x30); | |
| 774 | -+ printk("%d MB total\n", ram_size/(1024*1024)); | |
| 775 | -+ | |
| 776 | -+ bb.nbanks = 1; | |
| 777 | -+ bb.bankv[0].start = 0; | |
| 778 | -+ bb.bankv[0].length = ram_size; | |
| 779 | -+ | |
| 780 | -+ hiphybas = ram_size - PROLSIZE; | |
| 781 | -+ | |
| 782 | -+ mem_init(&cmem, (char *) &_end, (char *)(PROLBASE+PROLSIZE)); | |
| 783 | -+ makepages(&pmem, hiphybas); | |
| 784 | -+ init_mmu_swift((unsigned int)pmem.pctp - PROLBASE + hiphybas); | |
| 785 | -+ | |
| 786 | -+ mem_init(&cio, (char *)(PROLBASE+PROLSIZE), | |
| 787 | -+ (char *)(PROLBASE+PROLSIZE+IOMAPSIZE)); | |
| 788 | -+ | |
| 789 | -+ iommu_init(&ciommu, hiphybas); | |
| 790 | -+ | |
| 791 | -+ /* | |
| 792 | -+ */ | |
| 793 | -+ init_idprom(); | |
| 794 | -+ printk("NVRAM: id %s version %d\n", hw_idprom->id, hw_idprom->version); | |
| 795 | -+ if (!nographic) | |
| 796 | -+ printk("Prom console: TCX %dx%d\n", q_width, q_height); | |
| 797 | -+ else | |
| 798 | -+ printk("Prom console: serial\n"); | |
| 799 | -+ sched_init(); | |
| 800 | -+ le_probe(); | |
| 801 | -+ init_net(); | |
| 802 | -+ esp_probe(); | |
| 803 | -+ | |
| 804 | -+ bootdev = hw_idprom->boot_device; | |
| 805 | -+ printk("Boot device: %c\n", bootdev); | |
| 806 | -+ if (hw_idprom->kernel_size > 0) { | |
| 807 | -+ printk("Kernel already loaded\n"); | |
| 808 | -+ } else if (bootdev == 'n') { | |
| 809 | -+ if (bootp() != 0) fatal(); | |
| 810 | -+ /* | |
| 811 | -+ * boot_rec.bp_file cannot be used because system PROM | |
| 812 | -+ * uses it to locate ourselves. If we load from boot_rec.bp_file, | |
| 813 | -+ * we will loop reloading PROLL over and over again. | |
| 814 | -+ * Thus we use traditional PROLL scheme HEXIPADDR.PROL (single L). | |
| 815 | -+ */ | |
| 816 | -+ xtoa(myipaddr, fname, 8); | |
| 817 | -+ fname[9] = '.'; | |
| 818 | -+ fname[10] = 'P'; | |
| 819 | -+ fname[11] = 'R'; | |
| 820 | -+ fname[12] = 'O'; | |
| 821 | -+ fname[13] = 'L'; | |
| 822 | -+ fname[14] = 0; | |
| 823 | -+ | |
| 824 | -+ if (load(boot_rec.bp_siaddr, fname) != 0) fatal(); | |
| 825 | -+ } else if (bootdev == 'c') { | |
| 826 | -+ if (esp_boot(0) != 0) fatal(); | |
| 827 | -+ } else if (bootdev == 'd') { | |
| 828 | -+ if (esp_boot(2) != 0) fatal(); | |
| 829 | -+ } | |
| 830 | -+ | |
| 831 | -+ romvec = init_openprom_qemu(bb.nbanks, bb.bankv, hiphybas, | |
| 832 | -+ (void *)hw_idprom->cmdline, hw_idprom->boot_device, nographic); | |
| 833 | -+ | |
| 834 | -+ printk("Memory used: virt 0x%x:0x%x[%dK] iomap 0x%x:0x%x\n", | |
| 835 | -+ PROLBASE, (int)cmem.curp, ((unsigned) cmem.curp - PROLBASE)/1024, | |
| 836 | -+ (int)cio.start, (int)cio.curp); | |
| 837 | -+ | |
| 838 | -+ { | |
| 839 | -+ void (*entry)(const void *, int, int, int, int) = (void *) hw_idprom->load_addr; | |
| 840 | -+ printk("Kernel loaded at 0x%x, size %dK, command line = '%s'\n", | |
| 841 | -+ *entry, hw_idprom->kernel_size/1024, hw_idprom->cmdline); | |
| 842 | -+ entry(romvec, 0, 0, 0, 0); | |
| 843 | -+ } | |
| 844 | -+ | |
| 845 | -+ mem_fini(&cmem); | |
| 846 | -+ vcon_fini(&dp0); | |
| 847 | -+} | |
| 848 | -+ | |
| 849 | -+/* | |
| 850 | -+ * dvma_alloc over iommu_alloc. | |
| 851 | -+ */ | |
| 852 | -+void *dvma_alloc(int size, unsigned int *pphys) | |
| 853 | -+{ | |
| 854 | -+ return iommu_alloc(&ciommu, size, pphys); | |
| 855 | -+} | |
| 856 | -+ | |
| 857 | -+/* | |
| 858 | -+ */ | |
| 859 | -+void udelay(__attribute__((unused)) unsigned long usecs) | |
| 860 | -+{ | |
| 861 | -+ // Qemu hardware is perfect and does not need any delays! | |
| 862 | -+} | |
| 863 | -+ | |
| 864 | -+static void init_idprom() | |
| 865 | -+{ | |
| 866 | -+ void *va_prom; | |
| 867 | -+ | |
| 868 | -+ if ((va_prom = map_io(PHYS_JJ_EEPROM, PHYS_JJ_EEPROM_SIZE)) == NULL) { | |
| 869 | -+ printk("init_idprom: cannot map eeprom\n"); | |
| 870 | -+ fatal(); | |
| 871 | -+ } | |
| 872 | -+ bcopy(va_prom + PHYS_JJ_IDPROM_OFF, idprom, IDPROM_SIZE); | |
| 873 | -+ /* | |
| 874 | -+ * hw_idprom is not used anywhere. | |
| 875 | -+ * It's just as we hate to leave hanging pointers (I/O page here). | |
| 876 | -+ */ | |
| 877 | -+ hw_idprom = va_prom; | |
| 878 | -+} | |
| 879 | -+ | |
| 880 | -diff -ruN proll_18.orig/qemu/openprom.c proll-patch-15/qemu/openprom.c | |
| 881 | ---- proll_18.orig/qemu/openprom.c 1970-01-01 00:00:00.000000000 +0000 | |
| 882 | -+++ proll-patch-15/qemu/openprom.c 2005-11-07 20:11:04.000000000 +0000 | |
| 883 | -@@ -0,0 +1,910 @@ | |
| 884 | -+/* | |
| 885 | -+ * PROM interface support | |
| 886 | -+ * Copyright 1996 The Australian National University. | |
| 887 | -+ * Copyright 1996 Fujitsu Laboratories Limited | |
| 888 | -+ * Copyright 1999 Pete A. Zaitcev | |
| 889 | -+ * This software may be distributed under the terms of the Gnu | |
| 890 | -+ * Public License version 2 or later | |
| 891 | -+ */ | |
| 892 | -+ | |
| 893 | -+#include <openprom.h> | |
| 894 | -+#include <general.h> | |
| 895 | -+#include <romlib.h> | |
| 896 | -+#include <system.h> | |
| 897 | -+#include <vconsole.h> | |
| 898 | -+#include "phys_jj.h" | |
| 899 | -+ | |
| 900 | -+//#define DEBUG_OBP | |
| 901 | -+ | |
| 902 | -+#define PAGE_SIZE 4096 | |
| 903 | -+ | |
| 904 | -+struct property { | |
| 905 | -+ const char *name; | |
| 906 | -+ const char *value; | |
| 907 | -+ int length; | |
| 908 | -+}; | |
| 909 | -+ | |
| 910 | -+struct node { | |
| 911 | -+ const struct property *properties; | |
| 912 | -+ /* short */ const int sibling; | |
| 913 | -+ /* short */ const int child; | |
| 914 | -+}; | |
| 915 | -+ | |
| 916 | -+static int obp_nextnode(int node); | |
| 917 | -+static int obp_child(int node); | |
| 918 | -+static int obp_proplen(int node, char *name); | |
| 919 | -+static int obp_getprop(int node, char *name, char *val); | |
| 920 | -+static int obp_setprop(int node, char *name, char *val, int len); | |
| 921 | -+static const char *obp_nextprop(int node, char *name); | |
| 922 | -+ | |
| 923 | -+static char obp_idprom[IDPROM_SIZE]; | |
| 924 | -+static const struct property null_properties = { NULL, NULL, -1 }; | |
| 925 | -+static const int prop_true = -1; | |
| 926 | -+ | |
| 927 | -+static struct property propv_root[7]; | |
| 928 | -+ | |
| 929 | -+static const struct property propv_root_templ[] = { | |
| 930 | -+ {"name", "SUNW,SparcStation-5", sizeof("SUNW,SparcStation-5") }, | |
| 931 | -+ {"idprom", obp_idprom, IDPROM_SIZE}, | |
| 932 | -+ {"banner-name", "SparcStation", sizeof("SparcStation")}, | |
| 933 | -+ {"compatible", "sun4m", 6}, | |
| 934 | -+}; | |
| 935 | -+ | |
| 936 | -+static const int prop_iommu_reg[] = { | |
| 937 | -+ 0x0, 0x10000000, 0x00000300, | |
| 938 | -+}; | |
| 939 | -+static const struct property propv_iommu[] = { | |
| 940 | -+ {"name", "iommu", sizeof("iommu")}, | |
| 941 | -+ {"reg", (char*)&prop_iommu_reg[0], sizeof(prop_iommu_reg) }, | |
| 942 | -+ {NULL, NULL, -1} | |
| 943 | -+}; | |
| 944 | -+ | |
| 945 | -+static const int prop_sbus_ranges[] = { | |
| 946 | -+ 0x0, 0x0, 0x0, 0x30000000, 0x10000000, | |
| 947 | -+ 0x1, 0x0, 0x0, 0x40000000, 0x10000000, | |
| 948 | -+ 0x2, 0x0, 0x0, 0x50000000, 0x10000000, | |
| 949 | -+ 0x3, 0x0, 0x0, 0x60000000, 0x10000000, | |
| 950 | -+ 0x4, 0x0, 0x0, 0x70000000, 0x10000000, | |
| 951 | -+}; | |
| 952 | -+static const struct property propv_sbus[] = { | |
| 953 | -+ {"name", "sbus", 5}, | |
| 954 | -+ {"ranges", (char*)&prop_sbus_ranges[0], sizeof(prop_sbus_ranges)}, | |
| 955 | -+ {"device_type", "hierarchical", sizeof("hierarchical") }, | |
| 956 | -+ {NULL, NULL, -1} | |
| 957 | -+}; | |
| 958 | -+ | |
| 959 | -+static const int prop_tcx_regs[] = { | |
| 960 | -+ 0x2, 0x00800000, 0x00100000, | |
| 961 | -+ 0x2, 0x02000000, 0x00000001, | |
| 962 | -+ 0x2, 0x04000000, 0x00800000, | |
| 963 | -+ 0x2, 0x06000000, 0x00800000, | |
| 964 | -+ 0x2, 0x0a000000, 0x00000001, | |
| 965 | -+ 0x2, 0x0c000000, 0x00000001, | |
| 966 | -+ 0x2, 0x0e000000, 0x00000001, | |
| 967 | -+ 0x2, 0x00700000, 0x00001000, | |
| 968 | -+ 0x2, 0x00200000, 0x00000004, | |
| 969 | -+ 0x2, 0x00300000, 0x0000081c, | |
| 970 | -+ 0x2, 0x00000000, 0x00010000, | |
| 971 | -+ 0x2, 0x00240000, 0x00000004, | |
| 972 | -+ 0x2, 0x00280000, 0x00000001, | |
| 973 | -+}; | |
| 974 | -+ | |
| 975 | -+#if 1 /* Zaitcev */ | |
| 976 | -+static const int pixfreq = 0x03dfd240; | |
| 977 | -+static const int hbporch = 0xa0; | |
| 978 | -+static const int vfreq = 0x3c; | |
| 979 | -+#endif | |
| 980 | -+#if 0 /* Kevin Boone - 70Hz refresh */ | |
| 981 | -+static const int pixfreq = 0x047868C0; | |
| 982 | -+static const int hbporch = 0x90; | |
| 983 | -+static const int vfreq = 0x46; | |
| 984 | -+#endif | |
| 985 | -+ | |
| 986 | -+static const int vbporch = 0x1d; | |
| 987 | -+static const int vsync = 0x6; | |
| 988 | -+static const int hsync = 0x88; | |
| 989 | -+static const int vfporch = 0x3; | |
| 990 | -+static const int hfporch = 0x18; | |
| 991 | -+static const int height = 0x300; | |
| 992 | -+static const int width = 0x400; | |
| 993 | -+static const int linebytes = 0x400; | |
| 994 | -+static const int depth = 24; | |
| 995 | -+static const int tcx_intr[] = { 5, 0 }; | |
| 996 | -+static const int tcx_interrupts = 5; | |
| 997 | -+static const struct property propv_sbus_tcx[] = { | |
| 998 | -+ {"name", "SUNW,tcx", sizeof("SUNW,tcx")}, | |
| 999 | -+ {"vbporch", (char*)&vbporch, sizeof(int)}, | |
| 1000 | -+ {"hbporch", (char*)&hbporch, sizeof(int)}, | |
| 1001 | -+ {"vsync", (char*)&vsync, sizeof(int)}, | |
| 1002 | -+ {"hsync", (char*)&hsync, sizeof(int)}, | |
| 1003 | -+ {"vfporch", (char*)&vfporch, sizeof(int)}, | |
| 1004 | -+ {"hfporch", (char*)&hfporch, sizeof(int)}, | |
| 1005 | -+ {"pixfreq", (char*)&pixfreq, sizeof(int)}, | |
| 1006 | -+ {"vfreq", (char*)&vfreq, sizeof(int)}, | |
| 1007 | -+ {"height", (char*)&height, sizeof(int)}, | |
| 1008 | -+ {"width", (char*)&width, sizeof(int)}, | |
| 1009 | -+ {"linebytes", (char*)&linebytes, sizeof(int)}, | |
| 1010 | -+ {"depth", (char*)&depth, sizeof(int)}, | |
| 1011 | -+ {"reg", (char*)&prop_tcx_regs[0], sizeof(prop_tcx_regs)}, | |
| 1012 | -+ {"tcx-8-bit", 0, -1}, | |
| 1013 | -+ {"intr", (char*)&tcx_intr[0], sizeof(tcx_intr)}, | |
| 1014 | -+ {"interrupts", (char*)&tcx_interrupts, sizeof(tcx_interrupts)}, | |
| 1015 | -+ {"device_type", "display", sizeof("display")}, | |
| 1016 | -+ {NULL, NULL, -1} | |
| 1017 | -+}; | |
| 1018 | -+ | |
| 1019 | -+static const int prop_cs4231_reg[] = { | |
| 1020 | -+ 0x3, 0x0C000000, 0x00000040 | |
| 1021 | -+}; | |
| 1022 | -+static const int cs4231_interrupts = 5; | |
| 1023 | -+static const int cs4231_intr[] = { 5, 0 }; | |
| 1024 | -+ | |
| 1025 | -+static const struct property propv_sbus_cs4231[] = { | |
| 1026 | -+ {"name", "SUNW,CS4231", sizeof("SUNW,CS4231") }, | |
| 1027 | -+ {"intr", (char*)&cs4231_intr[0], sizeof(cs4231_intr) }, | |
| 1028 | -+ {"interrupts", (char*)&cs4231_interrupts, sizeof(cs4231_interrupts) }, | |
| 1029 | -+ {"reg", (char*)&prop_cs4231_reg[0], sizeof(prop_cs4231_reg) }, | |
| 1030 | -+ {"device_type", "serial", sizeof("serial") }, | |
| 1031 | -+ {"alias", "audio", sizeof("audio") }, | |
| 1032 | -+ {NULL, NULL, -1} | |
| 1033 | -+}; | |
| 1034 | -+ | |
| 1035 | -+static const int cpu_nctx = NCTX_SWIFT; | |
| 1036 | -+static const int cpu_cache_line_size = 0x20; | |
| 1037 | -+static const int cpu_cache_nlines = 0x200; | |
| 1038 | -+static const struct property propv_cpu[] = { | |
| 1039 | -+ {"name", "STP1012PGA", sizeof("STP1012PGA") }, | |
| 1040 | -+ {"device_type", "cpu", 4 }, | |
| 1041 | -+ {"mmu-nctx", (char*)&cpu_nctx, sizeof(int)}, | |
| 1042 | -+ {"cache-line-size", (char*)&cpu_cache_line_size, sizeof(int)}, | |
| 1043 | -+ {"cache-nlines", (char*)&cpu_cache_nlines, sizeof(int)}, | |
| 1044 | -+ {NULL, NULL, -1} | |
| 1045 | -+}; | |
| 1046 | -+ | |
| 1047 | -+static const int prop_obio_ranges[] = { | |
| 1048 | -+ 0x0, 0x0, 0x0, 0x71000000, 0x01000000, | |
| 1049 | -+}; | |
| 1050 | -+static const struct property propv_obio[] = { | |
| 1051 | -+ {"name", "obio", 5 }, | |
| 1052 | -+ {"ranges", (char*)&prop_obio_ranges[0], sizeof(prop_obio_ranges) }, | |
| 1053 | -+ {"device_type", "hierarchical", sizeof("hierarchical") }, | |
| 1054 | -+ {NULL, NULL, -1} | |
| 1055 | -+}; | |
| 1056 | -+ | |
| 1057 | -+static const int prop_auxio_reg[] = { | |
| 1058 | -+ 0x0, 0x00900000, 0x00000001, | |
| 1059 | -+}; | |
| 1060 | -+static const struct property propv_obio_auxio[] = { | |
| 1061 | -+ {"name", "auxio", sizeof("auxio") }, | |
| 1062 | -+ {"reg", (char*)&prop_auxio_reg[0], sizeof(prop_auxio_reg) }, | |
| 1063 | -+ {NULL, NULL, -1} | |
| 1064 | -+}; | |
| 1065 | -+ | |
| 1066 | -+static const int prop_int_reg[] = { | |
| 1067 | -+ 0x0, 0x00e00000, 0x00000010, | |
| 1068 | -+ 0x0, 0x00e10000, 0x00000010, | |
| 1069 | -+}; | |
| 1070 | -+static const struct property propv_obio_int[] = { | |
| 1071 | -+ {"name", "interrupt", sizeof("interrupt")}, | |
| 1072 | -+ {"reg", (char*)&prop_int_reg[0], sizeof(prop_int_reg) }, | |
| 1073 | -+ {NULL, NULL, -1} | |
| 1074 | -+}; | |
| 1075 | -+ | |
| 1076 | -+static const int prop_cnt_reg[] = { | |
| 1077 | -+ 0x0, 0x00d00000, 0x00000010, | |
| 1078 | -+ 0x0, 0x00d10000, 0x00000010, | |
| 1079 | -+}; | |
| 1080 | -+static const struct property propv_obio_cnt[] = { | |
| 1081 | -+ {"name", "counter", sizeof("counter")}, | |
| 1082 | -+ {"reg", (char*)&prop_cnt_reg[0], sizeof(prop_cnt_reg) }, | |
| 1083 | -+ {NULL, NULL, -1} | |
| 1084 | -+}; | |
| 1085 | -+ | |
| 1086 | -+static const int prop_eeprom_reg[] = { | |
| 1087 | -+ 0x0, 0x00200000, 0x00002000, | |
| 1088 | -+}; | |
| 1089 | -+static const struct property propv_obio_eep[] = { | |
| 1090 | -+ {"name", "eeprom", sizeof("eeprom")}, | |
| 1091 | -+ {"reg", (char*)&prop_eeprom_reg[0], sizeof(prop_eeprom_reg) }, | |
| 1092 | -+ {"model", "mk48t08", sizeof("mk48t08")}, | |
| 1093 | -+ {NULL, NULL, -1} | |
| 1094 | -+}; | |
| 1095 | -+ | |
| 1096 | -+static const int prop_su_reg[] = { | |
| 1097 | -+ 0x0, 0x003002f8, 0x00000008, | |
| 1098 | -+}; | |
| 1099 | -+static const struct property propv_obio_su[] = { | |
| 1100 | -+ {"name", "su", sizeof("su")}, | |
| 1101 | -+ {"reg", (char*)&prop_su_reg[0], sizeof(prop_su_reg) }, | |
| 1102 | -+ {NULL, NULL, -1} | |
| 1103 | -+}; | |
| 1104 | -+ | |
| 1105 | -+static const int prop_zs_intr[] = { 0x2c, 0x0 }; | |
| 1106 | -+static const int prop_zs_reg[] = { | |
| 1107 | -+ 0x0, 0x00000000, 0x00000008, | |
| 1108 | -+}; | |
| 1109 | -+static void *prop_zs_addr; | |
| 1110 | -+static const int prop_zs_slave = 1; | |
| 1111 | -+static const struct property propv_obio_zs[] = { | |
| 1112 | -+ {"name", "zs", sizeof("zs")}, | |
| 1113 | -+ {"reg", (char*)&prop_zs_reg[0], sizeof(prop_zs_reg) }, | |
| 1114 | -+ {"slave", (char*)&prop_zs_slave, sizeof(prop_zs_slave) }, | |
| 1115 | -+ {"device_type", "serial", sizeof("serial") }, | |
| 1116 | -+ {"intr", (char*)&prop_zs_intr[0], sizeof(prop_zs_intr) }, | |
| 1117 | -+ {"address", (char*)&prop_zs_addr, sizeof(prop_zs_addr) }, | |
| 1118 | -+ {"keyboard", (char*)&prop_true, 0}, | |
| 1119 | -+ {"mouse", (char*)&prop_true, 0}, | |
| 1120 | -+ {NULL, NULL, -1} | |
| 1121 | -+}; | |
| 1122 | -+ | |
| 1123 | -+static const int prop_zs1_intr[] = { 0x2c, 0x0 }; | |
| 1124 | -+static const int prop_zs1_reg[] = { | |
| 1125 | -+ 0x0, 0x00100000, 0x00000008, | |
| 1126 | -+}; | |
| 1127 | -+static void *prop_zs1_addr; | |
| 1128 | -+static const int prop_zs1_slave = 0; | |
| 1129 | -+static const struct property propv_obio_zs1[] = { | |
| 1130 | -+ {"name", "zs", sizeof("zs")}, | |
| 1131 | -+ {"reg", (char*)&prop_zs1_reg[0], sizeof(prop_zs1_reg) }, | |
| 1132 | -+ {"slave", (char*)&prop_zs1_slave, sizeof(prop_zs1_slave) }, | |
| 1133 | -+ {"device_type", "serial", sizeof("serial") }, | |
| 1134 | -+ {"intr", (char*)&prop_zs1_intr[0], sizeof(prop_zs1_intr) }, | |
| 1135 | -+ {"address", (char*)&prop_zs1_addr, sizeof(prop_zs1_addr) }, | |
| 1136 | -+ {NULL, NULL, -1} | |
| 1137 | -+}; | |
| 1138 | -+ | |
| 1139 | -+static const int prop_ledma_reg[] = { | |
| 1140 | -+ 0x4, 0x08400010, 0x00000020, | |
| 1141 | -+}; | |
| 1142 | -+static const int prop_ledma_burst = 0x3f; | |
| 1143 | -+static const struct property propv_sbus_ledma[] = { | |
| 1144 | -+ {"name", "ledma", sizeof("ledma")}, | |
| 1145 | -+ {"reg", (char*)&prop_ledma_reg[0], sizeof(prop_ledma_reg) }, | |
| 1146 | -+ {"burst-sizes", (char*)&prop_ledma_burst, sizeof(int) }, | |
| 1147 | -+ {NULL, NULL, -1} | |
| 1148 | -+}; | |
| 1149 | -+ | |
| 1150 | -+static const int prop_le_reg[] = { | |
| 1151 | -+ 0x4, 0x08c00000, 0x00000004, | |
| 1152 | -+}; | |
| 1153 | -+static const int prop_le_busmaster_regval = 0x7; | |
| 1154 | -+static const int prop_le_intr[] = { 0x26, 0x0 }; | |
| 1155 | -+static const struct property propv_sbus_ledma_le[] = { | |
| 1156 | -+ {"name", "le", sizeof("le")}, | |
| 1157 | -+ {"reg", (char*)&prop_le_reg[0], sizeof(prop_le_reg) }, | |
| 1158 | -+ {"busmaster-regval", (char*)&prop_le_busmaster_regval, sizeof(int)}, | |
| 1159 | -+ {"intr", (char*)&prop_le_intr[0], sizeof(prop_le_intr) }, | |
| 1160 | -+ {NULL, NULL, -1} | |
| 1161 | -+}; | |
| 1162 | -+ | |
| 1163 | -+static const int prop_espdma_reg[] = { | |
| 1164 | -+ 0x4, 0x08400000, 0x00000010, | |
| 1165 | -+}; | |
| 1166 | -+ | |
| 1167 | -+static const struct property propv_sbus_espdma[] = { | |
| 1168 | -+ {"name", "espdma", sizeof("espdma")}, | |
| 1169 | -+ {"reg", (char*)&prop_espdma_reg[0], sizeof(prop_espdma_reg) }, | |
| 1170 | -+ {NULL, NULL, -1} | |
| 1171 | -+}; | |
| 1172 | -+ | |
| 1173 | -+static const int prop_esp_reg[] = { | |
| 1174 | -+ 0x4, 0x08800000, 0x00000040, | |
| 1175 | -+}; | |
| 1176 | -+static const int prop_esp_intr[] = { 0x24, 0x0 }; | |
| 1177 | -+static const struct property propv_sbus_espdma_esp[] = { | |
| 1178 | -+ {"name", "esp", sizeof("esp")}, | |
| 1179 | -+ {"reg", (char*)&prop_esp_reg[0], sizeof(prop_esp_reg) }, | |
| 1180 | -+ {"intr", (char*)&prop_esp_intr[0], sizeof(prop_esp_intr) }, | |
| 1181 | -+ {NULL, NULL, -1} | |
| 1182 | -+}; | |
| 1183 | -+ | |
| 1184 | -+static const int prop_bpp_reg[] = { | |
| 1185 | -+ 0x4, 0x0c800000, 0x0000001c, | |
| 1186 | -+}; | |
| 1187 | -+static const int prop_bpp_intr[] = { 0x33, 0x0 }; | |
| 1188 | -+static const struct property propv_sbus_bpp[] = { | |
| 1189 | -+ {"name", "SUNW,bpp", sizeof("SUNW,bpp")}, | |
| 1190 | -+ {"reg", (char*)&prop_bpp_reg[0], sizeof(prop_bpp_reg) }, | |
| 1191 | -+ {"intr", (char*)&prop_bpp_intr[0], sizeof(prop_bpp_intr) }, | |
| 1192 | -+ {NULL, NULL, -1} | |
| 1193 | -+}; | |
| 1194 | -+ | |
| 1195 | -+static const int prop_apc_reg[] = { | |
| 1196 | -+ 0x4, 0x0a000000, 0x00000010, | |
| 1197 | -+}; | |
| 1198 | -+static const struct property propv_sbus_apc[] = { | |
| 1199 | -+ {"name", "xxxpower-management", sizeof("xxxpower-management")}, | |
| 1200 | -+ {"reg", (char*)&prop_apc_reg[0], sizeof(prop_apc_reg) }, | |
| 1201 | -+ {NULL, NULL, -1} | |
| 1202 | -+}; | |
| 1203 | -+ | |
| 1204 | -+static const int prop_fd_intr[] = { 0x2b, 0x0 }; | |
| 1205 | -+static const int prop_fd_reg[] = { | |
| 1206 | -+ 0x0, 0x00400000, 0x0000000f, | |
| 1207 | -+}; | |
| 1208 | -+static const struct property propv_obio_fd[] = { | |
| 1209 | -+ {"name", "SUNW,fdtwo", sizeof("SUNW,fdtwo")}, | |
| 1210 | -+ {"reg", (char*)&prop_fd_reg[0], sizeof(prop_fd_reg) }, | |
| 1211 | -+ {"device_type", "block", sizeof("block") }, | |
| 1212 | -+ {"intr", (char*)&prop_fd_intr[0], sizeof(prop_fd_intr) }, | |
| 1213 | -+ {NULL, NULL, -1} | |
| 1214 | -+}; | |
| 1215 | -+ | |
| 1216 | -+static const int prop_pw_intr[] = { 0x22, 0x0 }; | |
| 1217 | -+static const int prop_pw_reg[] = { | |
| 1218 | -+ 0x0, 0x00910000, 0x00000001, | |
| 1219 | -+}; | |
| 1220 | -+static const struct property propv_obio_pw[] = { | |
| 1221 | -+ {"name", "power", sizeof("power")}, | |
| 1222 | -+ {"reg", (char*)&prop_pw_reg[0], sizeof(prop_pw_reg) }, | |
| 1223 | -+ {"intr", (char*)&prop_pw_intr[0], sizeof(prop_pw_intr) }, | |
| 1224 | -+ {NULL, NULL, -1} | |
| 1225 | -+}; | |
| 1226 | -+ | |
| 1227 | -+static const int prop_cf_reg[] = { | |
| 1228 | -+ 0x0, 0x00800000, 0x00000001, | |
| 1229 | -+}; | |
| 1230 | -+static const struct property propv_obio_cf[] = { | |
| 1231 | -+ {"name", "slavioconfig", sizeof("slavioconfig")}, | |
| 1232 | -+ {"reg", (char*)&prop_cf_reg[0], sizeof(prop_cf_reg) }, | |
| 1233 | -+ {NULL, NULL, -1} | |
| 1234 | -+}; | |
| 1235 | -+ | |
| 1236 | -+static const struct property propv_options[] = { | |
| 1237 | -+ {"name", "options", sizeof("options")}, | |
| 1238 | -+ {"screen-#columns", "80", sizeof("80")}, | |
| 1239 | -+ {"screen-#rows", "25", sizeof("25")}, | |
| 1240 | -+ {"tpe-link-test?", (char *)&prop_true, 0}, | |
| 1241 | -+ {"ttya-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, | |
| 1242 | -+ {"ttya-ignore-cd", (char *)&prop_true, 0}, | |
| 1243 | -+ {"ttya-rts-dtr-off", 0, -1}, | |
| 1244 | -+ {"ttyb-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, | |
| 1245 | -+ {"ttyb-ignore-cd", (char *)&prop_true, 0}, | |
| 1246 | -+ {"ttyb-rts-dtr-off", 0, -1}, | |
| 1247 | -+ {NULL, NULL, -1} | |
| 1248 | -+}; | |
| 1249 | -+ | |
| 1250 | -+static int prop_mem_reg[3]; | |
| 1251 | -+static int prop_mem_avail[3]; | |
| 1252 | -+ | |
| 1253 | -+static const struct property propv_memory[] = { | |
| 1254 | -+ {"name", "memory", sizeof("memory")}, | |
| 1255 | -+ {"reg", (char*)&prop_mem_reg[0], sizeof(prop_mem_reg) }, | |
| 1256 | -+ {"available", (char*)&prop_mem_avail[0], sizeof(prop_mem_avail) }, | |
| 1257 | -+ {NULL, NULL, -1} | |
| 1258 | -+}; | |
| 1259 | -+ | |
| 1260 | -+static int prop_vmem_avail[6]; | |
| 1261 | -+ | |
| 1262 | -+static const struct property propv_vmemory[] = { | |
| 1263 | -+ {"name", "virtual-memory", sizeof("virtual-memory")}, | |
| 1264 | -+ {"available", (char*)&prop_vmem_avail[0], sizeof(prop_vmem_avail) }, | |
| 1265 | -+ {NULL, NULL, -1} | |
| 1266 | -+}; | |
| 1267 | -+ | |
| 1268 | -+static const struct node nodes[] = { | |
| 1269 | -+ { &null_properties, 1, 0 }, /* 0 = big brother of root */ | |
| 1270 | -+ { propv_root, 0, 2 }, /* 1 "/" */ | |
| 1271 | -+ { propv_iommu, 12, 3 }, /* 2 "/iommu" */ | |
| 1272 | -+ { propv_sbus, 0, 4 }, /* 3 "/iommu/sbus" */ | |
| 1273 | -+ { propv_sbus_tcx, 5, 0 }, /* 4 "/iommu/sbus/SUNW,tcx" */ | |
| 1274 | -+ { propv_sbus_ledma, 7, 6 }, /* 5 "/iommu/sbus/ledma" */ | |
| 1275 | -+ { propv_sbus_ledma_le, 0, 0 }, /* 6 "/iommu/sbus/ledma/le" */ | |
| 1276 | -+ { propv_sbus_cs4231, 8, 0 }, /* 7 "/iommu/sbus/SUNW,CS4231 */ | |
| 1277 | -+ { propv_sbus_bpp, 9, 0 }, /* 8 "/iommu/sbus/SUNW,bpp */ | |
| 1278 | -+ { propv_sbus_espdma, 11, 10 }, /* 9 "/iommu/sbus/espdma" */ | |
| 1279 | -+ { propv_sbus_espdma_esp, 0, 0 }, /* 10 "/iommu/sbus/espdma/esp" */ | |
| 1280 | -+ { propv_sbus_apc, 0, 0 }, /* 11 "/iommu/sbus/power-management */ | |
| 1281 | -+ { propv_cpu, 13, 0 }, /* 12 "/STP1012PGA" */ | |
| 1282 | -+ { propv_obio, 23, 14 }, /* 13 "/obio" */ | |
| 1283 | -+ { propv_obio_int, 15, 0 }, /* 14 "/obio/interrupt" */ | |
| 1284 | -+ { propv_obio_cnt, 16, 0 }, /* 15 "/obio/counter" */ | |
| 1285 | -+ { propv_obio_eep, 17, 0 }, /* 16 "/obio/eeprom" */ | |
| 1286 | -+ { propv_obio_auxio, 18, 0 }, /* 17 "/obio/auxio" */ | |
| 1287 | -+ { propv_obio_zs1, 19, 0 }, /* 18 "/obio/zs@0,100000" | |
| 1288 | -+ Must be before zs@0,0! */ | |
| 1289 | -+ { propv_obio_zs, 20, 0 }, /* 19 "/obio/zs@0,0" */ | |
| 1290 | -+ { propv_obio_fd, 21, 0 }, /* 20 "/obio/SUNW,fdtwo" */ | |
| 1291 | -+ { propv_obio_pw, 22, 0 }, /* 21 "/obio/power" */ | |
| 1292 | -+ { propv_obio_cf, 0, 0 }, /* 22 "/obio/slavioconfig@0,800000" */ | |
| 1293 | -+ { propv_options, 24, 0 }, /* 23 "/options" */ | |
| 1294 | -+ { propv_memory, 25, 0 }, /* 24 "/memory" */ | |
| 1295 | -+ { propv_vmemory, 0, 0 }, /* 25 "/virtual-memory" */ | |
| 1296 | -+}; | |
| 1297 | -+ | |
| 1298 | -+static struct linux_mlist_v0 totphys[MAX_BANKS]; | |
| 1299 | -+static struct linux_mlist_v0 totmap[1]; | |
| 1300 | -+static struct linux_mlist_v0 totavail[MAX_BANKS]; | |
| 1301 | -+ | |
| 1302 | -+static struct linux_mlist_v0 *ptphys; | |
| 1303 | -+static struct linux_mlist_v0 *ptmap; | |
| 1304 | -+static struct linux_mlist_v0 *ptavail; | |
| 1305 | -+ | |
| 1306 | -+static const struct linux_nodeops nodeops0 = { | |
| 1307 | -+ obp_nextnode, /* int (*no_nextnode)(int node); */ | |
| 1308 | -+ obp_child, /* int (*no_child)(int node); */ | |
| 1309 | -+ obp_proplen, /* int (*no_proplen)(int node, char *name); */ | |
| 1310 | -+ obp_getprop, /* int (*no_getprop)(int node,char *name,char *val); */ | |
| 1311 | -+ obp_setprop, /* int (*no_setprop)(int node, char *name, | |
| 1312 | -+ char *val, int len); */ | |
| 1313 | -+ obp_nextprop /* char * (*no_nextprop)(int node, char *name); */ | |
| 1314 | -+}; | |
| 1315 | -+ | |
| 1316 | -+static struct linux_arguments_v0 obp_arg; | |
| 1317 | -+static const struct linux_arguments_v0 * const obp_argp = &obp_arg; | |
| 1318 | -+ | |
| 1319 | -+static void (*synch_hook)(void); | |
| 1320 | -+static char obp_stdin, obp_stdout; | |
| 1321 | -+static int obp_fd_stdin, obp_fd_stdout; | |
| 1322 | -+ | |
| 1323 | -+static int obp_nbgetchar(void); | |
| 1324 | -+static int obp_nbputchar(int ch); | |
| 1325 | -+static void obp_reboot(char *); | |
| 1326 | -+static void obp_abort(void); | |
| 1327 | -+static void obp_halt(void); | |
| 1328 | -+static int obp_devopen(char *str); | |
| 1329 | -+static int obp_devclose(int dev_desc); | |
| 1330 | -+static int obp_devread(int dev_desc, char *buf, int nbytes); | |
| 1331 | -+static int obp_devwrite(int dev_desc, char *buf, int nbytes); | |
| 1332 | -+static int obp_devseek(int dev_desc, int hi, int lo); | |
| 1333 | -+static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf); | |
| 1334 | -+static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size); | |
| 1335 | -+static void obp_dumb_munmap(char *va, unsigned int size); | |
| 1336 | -+static int obp_inst2pkg(int dev_desc); | |
| 1337 | -+ | |
| 1338 | -+static void doublewalk(unsigned ptab1, unsigned va) | |
| 1339 | -+{ | |
| 1340 | -+unsigned int proc_tablewalk(int ctx, unsigned int va); | |
| 1341 | -+unsigned int mem_tablewalk(unsigned int pa, unsigned int va); | |
| 1342 | -+ | |
| 1343 | -+ proc_tablewalk(0, va); | |
| 1344 | -+ if (ptab1 != 0) mem_tablewalk(ptab1, va); | |
| 1345 | -+} | |
| 1346 | -+ | |
| 1347 | -+static struct linux_romvec romvec0; | |
| 1348 | -+ | |
| 1349 | -+struct fd { | |
| 1350 | -+ int unit, part; | |
| 1351 | -+ int offset; | |
| 1352 | -+ int (*pread)(int dev_desc, int offset, char *buf, unsigned int nbytes); | |
| 1353 | -+ int (*pwrite)(int dev_desc, int offset, char *buf, unsigned int nbytes); | |
| 1354 | -+} fd_table[16]; | |
| 1355 | -+ | |
| 1356 | -+static int fd_index; | |
| 1357 | -+static int con_pread(int dev_desc, int offset, char *buf, unsigned int nbytes); | |
| 1358 | -+static int con_pwrite(int dev_desc, int offset, char *buf, unsigned int nbytes); | |
| 1359 | -+ | |
| 1360 | -+void * | |
| 1361 | -+init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, | |
| 1362 | -+ const char *cmdline, char boot_device, int nographic) | |
| 1363 | -+{ | |
| 1364 | -+ int i; | |
| 1365 | -+ | |
| 1366 | -+ /* | |
| 1367 | -+ * Avoid data segment allocations | |
| 1368 | -+ */ | |
| 1369 | -+ ptphys = totphys; | |
| 1370 | -+ ptmap = totmap; | |
| 1371 | -+ ptavail = totavail; | |
| 1372 | -+ /* | |
| 1373 | -+ * Form memory descriptors. | |
| 1374 | -+ */ | |
| 1375 | -+ for (i = 0; i < bankc; i++) { | |
| 1376 | -+ totphys[i].theres_more = &totphys[i+1]; | |
| 1377 | -+ totphys[i].start_adr = (char*) bankv[i].start; | |
| 1378 | -+ totphys[i].num_bytes = bankv[i].length; | |
| 1379 | -+ } | |
| 1380 | -+ totphys[i-1].theres_more = 0; | |
| 1381 | -+ | |
| 1382 | -+ /* | |
| 1383 | -+ * XXX Merged in normal PROM when full banks touch. | |
| 1384 | -+ */ | |
| 1385 | -+ for (i = 0; i < bankc; i++) { | |
| 1386 | -+ unsigned bankbase = bankv[i].start; | |
| 1387 | -+ unsigned banksize = bankv[i].length; | |
| 1388 | -+ if (hiphybas > bankbase && | |
| 1389 | -+ hiphybas < bankbase + banksize) { | |
| 1390 | -+ banksize = hiphybas - bankbase; | |
| 1391 | -+ } | |
| 1392 | -+ totavail[i].theres_more = &totavail[i+1]; | |
| 1393 | -+ totavail[i].start_adr = (char*) bankbase; | |
| 1394 | -+ totavail[i].num_bytes = banksize; | |
| 1395 | -+ } | |
| 1396 | -+ totavail[i-1].theres_more = 0; | |
| 1397 | -+ | |
| 1398 | -+ totmap[0].theres_more = 0; | |
| 1399 | -+ totmap[0].start_adr = (char*) PROLBASE; | |
| 1400 | -+ totmap[0].num_bytes = PROLSIZE; | |
| 1401 | -+ prop_mem_reg[0] = 0; | |
| 1402 | -+ prop_mem_reg[1] = 0; | |
| 1403 | -+ prop_mem_reg[2] = bankv[0].length; | |
| 1404 | -+ prop_mem_avail[0] = 0; | |
| 1405 | -+ prop_mem_avail[1] = 0; | |
| 1406 | -+ prop_mem_avail[2] = hiphybas; | |
| 1407 | -+ prop_vmem_avail[0] = 0; | |
| 1408 | -+ prop_vmem_avail[1] = 0; | |
| 1409 | -+ prop_vmem_avail[2] = PROLBASE-1; | |
| 1410 | -+ prop_vmem_avail[3] = 0; | |
| 1411 | -+ prop_vmem_avail[4] = 0xffe00000; | |
| 1412 | -+ prop_vmem_avail[5] = 0x00200000; | |
| 1413 | -+ | |
| 1414 | -+ /* | |
| 1415 | -+ * idprom | |
| 1416 | -+ */ | |
| 1417 | -+ bcopy(idprom, obp_idprom, IDPROM_SIZE); | |
| 1418 | -+ | |
| 1419 | -+ // Linux wants a R/W romvec table | |
| 1420 | -+ romvec0.pv_magic_cookie = LINUX_OPPROM_MAGIC; | |
| 1421 | -+ romvec0.pv_romvers = 3; | |
| 1422 | -+ romvec0.pv_plugin_revision = 77; | |
| 1423 | -+ romvec0.pv_printrev = 0x10203; | |
| 1424 | -+ romvec0.pv_v0mem.v0_totphys = &ptphys; | |
| 1425 | -+ romvec0.pv_v0mem.v0_prommap = &ptmap; | |
| 1426 | -+ romvec0.pv_v0mem.v0_available = &ptavail; | |
| 1427 | -+ romvec0.pv_nodeops = &nodeops0; | |
| 1428 | -+ romvec0.pv_bootstr = (void *)doublewalk; | |
| 1429 | -+ romvec0.pv_v0devops.v0_devopen = &obp_devopen; | |
| 1430 | -+ romvec0.pv_v0devops.v0_devclose = &obp_devclose; | |
| 1431 | -+ romvec0.pv_v0devops.v0_rdblkdev = &obp_rdblkdev; | |
| 1432 | -+ romvec0.pv_stdin = &obp_stdin; | |
| 1433 | -+ romvec0.pv_stdout = &obp_stdout; | |
| 1434 | -+ romvec0.pv_getchar = obp_nbgetchar; | |
| 1435 | -+ romvec0.pv_putchar = (void (*)(int))obp_nbputchar; | |
| 1436 | -+ romvec0.pv_nbgetchar = obp_nbgetchar; | |
| 1437 | -+ romvec0.pv_nbputchar = obp_nbputchar; | |
| 1438 | -+ romvec0.pv_reboot = obp_reboot; | |
| 1439 | -+ romvec0.pv_printf = (void (*)(const char *fmt, ...))printk; | |
| 1440 | -+ romvec0.pv_abort = obp_abort; | |
| 1441 | -+ romvec0.pv_halt = obp_halt; | |
| 1442 | -+ romvec0.pv_synchook = &synch_hook; | |
| 1443 | -+ romvec0.pv_v0bootargs = &obp_argp; | |
| 1444 | -+ romvec0.pv_v2devops.v2_inst2pkg = obp_inst2pkg; | |
| 1445 | -+ romvec0.pv_v2devops.v2_dumb_mmap = obp_dumb_mmap; | |
| 1446 | -+ romvec0.pv_v2devops.v2_dumb_munmap = obp_dumb_munmap; | |
| 1447 | -+ romvec0.pv_v2devops.v2_dev_open = obp_devopen; | |
| 1448 | -+ romvec0.pv_v2devops.v2_dev_close = (void (*)(int))obp_devclose; | |
| 1449 | -+ romvec0.pv_v2devops.v2_dev_read = obp_devread; | |
| 1450 | -+ romvec0.pv_v2devops.v2_dev_write = obp_devwrite; | |
| 1451 | -+ romvec0.pv_v2devops.v2_dev_seek = obp_devseek; | |
| 1452 | -+ obp_arg.boot_dev_ctrl = 0; | |
| 1453 | -+ obp_arg.boot_dev_unit = '0'; | |
| 1454 | -+ obp_arg.argv[0] = "sd(0,0,0):d"; | |
| 1455 | -+ switch(boot_device) { | |
| 1456 | -+ default: | |
| 1457 | -+ case 'a': | |
| 1458 | -+ obp_arg.argv[0] = "fd()"; | |
| 1459 | -+ obp_arg.boot_dev[0] = 'f'; | |
| 1460 | -+ obp_arg.boot_dev[1] = 'd'; | |
| 1461 | -+ break; | |
| 1462 | -+ case 'd': | |
| 1463 | -+ obp_arg.boot_dev_unit = '2'; | |
| 1464 | -+ obp_arg.argv[0] = "sd(0,2,0):d"; | |
| 1465 | -+ // Fall through | |
| 1466 | -+ case 'c': | |
| 1467 | -+ obp_arg.boot_dev[0] = 's'; | |
| 1468 | -+ obp_arg.boot_dev[1] = 'd'; | |
| 1469 | -+ break; | |
| 1470 | -+ case 'n': | |
| 1471 | -+ obp_arg.argv[0] = "le()"; | |
| 1472 | -+ obp_arg.boot_dev[0] = 'l'; | |
| 1473 | -+ obp_arg.boot_dev[1] = 'e'; | |
| 1474 | -+ break; | |
| 1475 | -+ } | |
| 1476 | -+ obp_arg.argv[1] = cmdline; | |
| 1477 | -+ romvec0.pv_v2bootargs.bootpath = &obp_arg.argv[0]; | |
| 1478 | -+ romvec0.pv_v2bootargs.bootargs = &cmdline; | |
| 1479 | -+ romvec0.pv_v2bootargs.fd_stdin = &obp_fd_stdin; | |
| 1480 | -+ romvec0.pv_v2bootargs.fd_stdout = &obp_fd_stdout; | |
| 1481 | -+ | |
| 1482 | -+ bcopy(propv_root_templ, propv_root, sizeof(propv_root_templ)); | |
| 1483 | -+ propv_root[4].name = "stdin-path"; | |
| 1484 | -+ propv_root[5].name = "stdout-path"; | |
| 1485 | -+ obp_fd_stdin = 0; | |
| 1486 | -+ obp_fd_stdout = 1; | |
| 1487 | -+ fd_table[0].pread = con_pread; | |
| 1488 | -+ fd_table[0].pwrite = con_pwrite; | |
| 1489 | -+ fd_table[1].pread = con_pread; | |
| 1490 | -+ fd_table[1].pwrite = con_pwrite; | |
| 1491 | -+ fd_index = 2; | |
| 1492 | -+ if (nographic) { | |
| 1493 | -+ obp_stdin = PROMDEV_TTYA; | |
| 1494 | -+ propv_root[4].value = "/obio/zs@0,100000:a"; | |
| 1495 | -+ propv_root[4].length = sizeof("/obio/zs@0,100000:a"); | |
| 1496 | -+ fd_table[0].unit = 18; | |
| 1497 | -+ obp_stdout = PROMDEV_TTYA; | |
| 1498 | -+ propv_root[5].value = "/obio/zs@0,100000:a"; | |
| 1499 | -+ propv_root[5].length = sizeof("/obio/zs@0,100000:a"); | |
| 1500 | -+ fd_table[1].unit = 18; | |
| 1501 | -+ } else { | |
| 1502 | -+ obp_stdin = PROMDEV_KBD; | |
| 1503 | -+ propv_root[4].value = "/obio/zs@0,0"; | |
| 1504 | -+ propv_root[4].length = sizeof("/obio/zs@0,0"); | |
| 1505 | -+ fd_table[0].unit = 19; | |
| 1506 | -+ obp_stdout = PROMDEV_SCREEN; | |
| 1507 | -+ propv_root[5].value = "/iommu/sbus/SUNW,tcx"; | |
| 1508 | -+ propv_root[5].length = sizeof("/iommu/sbus/SUNW,tcx"); | |
| 1509 | -+ fd_table[1].unit = 4; | |
| 1510 | -+ } | |
| 1511 | -+ prop_zs_addr = map_io(0x71000000, 8); | |
| 1512 | -+ prop_zs1_addr = map_io(0x71100000, 8); | |
| 1513 | -+ return &romvec0; | |
| 1514 | -+} | |
| 1515 | -+ | |
| 1516 | -+static const struct property *find_property(int node,char *name) | |
| 1517 | -+{ | |
| 1518 | -+ const struct property *prop = &nodes[node].properties[0]; | |
| 1519 | -+ while (prop && prop->name) { | |
| 1520 | -+ if (bcmp(prop->name, name, 128) == 0) return prop; | |
| 1521 | -+ prop++; | |
| 1522 | -+ } | |
| 1523 | -+ return NULL; | |
| 1524 | -+} | |
| 1525 | -+ | |
| 1526 | -+static int obp_nextnode(int node) | |
| 1527 | -+{ | |
| 1528 | -+#ifdef DEBUG_OBP | |
| 1529 | -+ printk("obp_nextnode(%d) = %d\n", node, nodes[node].sibling); | |
| 1530 | -+#endif | |
| 1531 | -+ return nodes[node].sibling; | |
| 1532 | -+} | |
| 1533 | -+ | |
| 1534 | -+static int obp_child(int node) | |
| 1535 | -+{ | |
| 1536 | -+#ifdef DEBUG_OBP | |
| 1537 | -+ printk("obp_child(%d) = %d\n", node, nodes[node].child); | |
| 1538 | -+#endif | |
| 1539 | -+ return nodes[node].child; | |
| 1540 | -+} | |
| 1541 | -+ | |
| 1542 | -+static int obp_proplen(int node, char *name) | |
| 1543 | -+{ | |
| 1544 | -+ const struct property *prop = find_property(node,name); | |
| 1545 | -+ if (prop) { | |
| 1546 | -+#ifdef DEBUG_OBP | |
| 1547 | -+ printk("obp_proplen(%d, %s) = %d\n", node, name, prop->length); | |
| 1548 | -+#endif | |
| 1549 | -+ return prop->length; | |
| 1550 | -+ } | |
| 1551 | -+#ifdef DEBUG_OBP | |
| 1552 | -+ printk("obp_proplen(%d, %s) (no prop)\n", node, name); | |
| 1553 | -+#endif | |
| 1554 | -+ return -1; | |
| 1555 | -+} | |
| 1556 | -+ | |
| 1557 | -+static int obp_getprop(int node, char *name, char *value) | |
| 1558 | -+{ | |
| 1559 | -+ const struct property *prop; | |
| 1560 | -+ | |
| 1561 | -+ if (!name) { | |
| 1562 | -+ // NULL name means get first property | |
| 1563 | -+#ifdef DEBUG_OBP | |
| 1564 | -+ printk("obp_getprop(%d, %x (NULL)) = %s\n", node, name, | |
| 1565 | -+ nodes[node].properties[0].name); | |
| 1566 | -+#endif | |
| 1567 | -+ return (int)nodes[node].properties[0].name; | |
| 1568 | -+ } | |
| 1569 | -+ prop = find_property(node,name); | |
| 1570 | -+ if (prop) { | |
| 1571 | -+ memcpy(value,prop->value,prop->length); | |
| 1572 | -+#ifdef DEBUG_OBP | |
| 1573 | -+ printk("obp_getprop(%d, %s) = %s\n", node, name, value); | |
| 1574 | -+#endif | |
| 1575 | -+ return prop->length; | |
| 1576 | -+ } | |
| 1577 | -+#ifdef DEBUG_OBP | |
| 1578 | -+ printk("obp_getprop(%d, %s): not found\n", node, name); | |
| 1579 | -+#endif | |
| 1580 | -+ return -1; | |
| 1581 | -+} | |
| 1582 | -+ | |
| 1583 | -+static int obp_setprop(__attribute__((unused)) int node, | |
| 1584 | -+ __attribute__((unused)) char *name, | |
| 1585 | -+ __attribute__((unused)) char *value, | |
| 1586 | -+ __attribute__((unused)) int len) | |
| 1587 | -+{ | |
| 1588 | -+#ifdef DEBUG_OBP | |
| 1589 | -+ printk("obp_setprop(%d, %s) = %s (%d)\n", node, name, value, len); | |
| 1590 | -+#endif | |
| 1591 | -+ return -1; | |
| 1592 | -+} | |
| 1593 | -+ | |
| 1594 | -+static const char *obp_nextprop(int node,char *name) | |
| 1595 | -+{ | |
| 1596 | -+ const struct property *prop; | |
| 1597 | -+ | |
| 1598 | -+ if (!name || *name == '\0') { | |
| 1599 | -+ // NULL name means get first property | |
| 1600 | -+#ifdef DEBUG_OBP | |
| 1601 | -+ printk("obp_nextprop(%d, NULL) = %s\n", node, | |
| 1602 | -+ nodes[node].properties[0].name); | |
| 1603 | -+#endif | |
| 1604 | -+ return nodes[node].properties[0].name; | |
| 1605 | -+ } | |
| 1606 | -+ prop = find_property(node,name); | |
| 1607 | -+ if (prop && prop[1].name) { | |
| 1608 | -+#ifdef DEBUG_OBP | |
| 1609 | -+ printk("obp_nextprop(%d, %s) = %s\n", node, name, prop[1].name); | |
| 1610 | -+#endif | |
| 1611 | -+ return prop[1].name; | |
| 1612 | -+ } | |
| 1613 | -+#ifdef DEBUG_OBP | |
| 1614 | -+ printk("obp_nextprop(%d, %s): not found\n", node, name); | |
| 1615 | -+#endif | |
| 1616 | -+ return ""; | |
| 1617 | -+} | |
| 1618 | -+ | |
| 1619 | -+extern int (*getch_fn)(struct vconterm *v); | |
| 1620 | -+ | |
| 1621 | -+static int obp_nbgetchar(void) { | |
| 1622 | -+ extern struct vconterm dp0; | |
| 1623 | -+ return getch_fn(&dp0); | |
| 1624 | -+} | |
| 1625 | -+ | |
| 1626 | -+static int obp_nbputchar(int ch) { | |
| 1627 | -+ printk("%c", ch); | |
| 1628 | -+ return 0; | |
| 1629 | -+} | |
| 1630 | -+ | |
| 1631 | -+static void obp_reboot(char *str) { | |
| 1632 | -+ printk("rebooting (%s)\n", str); | |
| 1633 | -+ stb_bypass(0x71f00000, 1); | |
| 1634 | -+ for (;;) {} | |
| 1635 | -+} | |
| 1636 | -+ | |
| 1637 | -+static void obp_abort() { | |
| 1638 | -+ printk("abort, power off\n"); | |
| 1639 | -+ stb_bypass(0x71910000, 1); | |
| 1640 | -+ for (;;) {} | |
| 1641 | -+} | |
| 1642 | -+ | |
| 1643 | -+static void obp_halt() { | |
| 1644 | -+ printk("halt, power off\n"); | |
| 1645 | -+ stb_bypass(0x71910000, 1); | |
| 1646 | -+ for (;;) {} | |
| 1647 | -+} | |
| 1648 | -+ | |
| 1649 | -+extern void *esp_read(int unit, int part, int offset, short len); | |
| 1650 | -+ | |
| 1651 | -+static int esp_pread(int dev_desc, int offset, char *buf, unsigned int nbytes) | |
| 1652 | -+{ | |
| 1653 | -+ unsigned int i; | |
| 1654 | -+ void *src; | |
| 1655 | -+ | |
| 1656 | -+ for(i = 0; i < nbytes; i += 512) { | |
| 1657 | -+ src = esp_read(fd_table[dev_desc].unit, fd_table[dev_desc].part, (offset + i) / 512, 512); | |
| 1658 | -+ memcpy(&buf[i], src, 512); | |
| 1659 | -+ } | |
| 1660 | -+ return nbytes; | |
| 1661 | -+} | |
| 1662 | -+ | |
| 1663 | -+static int con_pread(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) | |
| 1664 | -+{ | |
| 1665 | -+ unsigned int i; | |
| 1666 | -+ | |
| 1667 | -+ for(i = 0; i < nbytes; i ++) { | |
| 1668 | -+ buf[i] = obp_nbgetchar(); | |
| 1669 | -+ } | |
| 1670 | -+ return nbytes; | |
| 1671 | -+} | |
| 1672 | -+ | |
| 1673 | -+static int con_pwrite(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) | |
| 1674 | -+{ | |
| 1675 | -+ unsigned int i; | |
| 1676 | -+ | |
| 1677 | -+ for(i = 0; i < nbytes; i ++) { | |
| 1678 | -+ obp_nbputchar(buf[i]); | |
| 1679 | -+ } | |
| 1680 | -+ return nbytes; | |
| 1681 | -+} | |
| 1682 | -+ | |
| 1683 | -+#define isnum(c) ((c >= '0') && (c < '9')) | |
| 1684 | -+#define ctoi(c) (c - '0') | |
| 1685 | -+ | |
| 1686 | -+static int obp_devopen(char *str) { | |
| 1687 | -+#ifdef DEBUG_OBP | |
| 1688 | -+ printk("obp_devopen(%s)\n", str); | |
| 1689 | -+#endif | |
| 1690 | -+ if (str[0] == 's' && str[1] == 'd' && str[4] == ',') { | |
| 1691 | -+ unsigned int target; | |
| 1692 | -+ | |
| 1693 | -+ if (str[5] < 7) | |
| 1694 | -+ target = str[5]; | |
| 1695 | -+ else if (isnum(str[6]) && isnum(str[5])) { | |
| 1696 | -+ target = (ctoi(str[5]) * 10 + ctoi(str[6])) & 7; | |
| 1697 | -+ } | |
| 1698 | -+ else { | |
| 1699 | -+ target = ctoi(str[5]) & 7; | |
| 1700 | -+ } | |
| 1701 | -+ fd_table[fd_index].unit = target; | |
| 1702 | -+ fd_table[fd_index].part = str[10] - 'a'; | |
| 1703 | -+ fd_table[fd_index].pread = esp_pread; | |
| 1704 | -+ return fd_index++; // XXX | |
| 1705 | -+ } | |
| 1706 | -+ return 0; | |
| 1707 | -+} | |
| 1708 | -+ | |
| 1709 | -+static int obp_devclose(__attribute__((unused)) int dev_desc) { | |
| 1710 | -+#ifdef DEBUG_OBP | |
| 1711 | -+ printk("obp_devclose %d\n", dev_desc); | |
| 1712 | -+#endif | |
| 1713 | -+ fd_index--; // XXX | |
| 1714 | -+ return 0; | |
| 1715 | -+} | |
| 1716 | -+ | |
| 1717 | -+static int obp_rdblkdev(int dev_desc, int num_blks, int offset, char *buf) | |
| 1718 | -+{ | |
| 1719 | -+#ifdef DEBUG_OBP | |
| 1720 | -+ printk("obp_rdblkdev: fd %d, num_blks %d, offset %d, buf 0x%x\n", dev_desc, num_blks, offset, buf); | |
| 1721 | -+#endif | |
| 1722 | -+ return fd_table[dev_desc].pread(dev_desc, offset, buf, num_blks * 512); | |
| 1723 | -+} | |
| 1724 | -+ | |
| 1725 | -+static char *obp_dumb_mmap(char *va, __attribute__((unused)) int which_io, | |
| 1726 | -+ unsigned int pa, unsigned int size) | |
| 1727 | -+{ | |
| 1728 | -+ unsigned int npages; | |
| 1729 | -+ unsigned int off; | |
| 1730 | -+ unsigned int mva; | |
| 1731 | -+ | |
| 1732 | -+#ifdef DEBUG_OBP | |
| 1733 | -+ printk("obp_dumb_mmap: virta %x, which_io %d, paddr %x, sz %d\n", va, which_io, pa, size); | |
| 1734 | -+#endif | |
| 1735 | -+ off = pa & (PAGE_SIZE-1); | |
| 1736 | -+ npages = (off + size + (PAGE_SIZE-1)) / PAGE_SIZE; | |
| 1737 | -+ pa &= ~(PAGE_SIZE-1); | |
| 1738 | -+ | |
| 1739 | -+ mva = (unsigned int) va; | |
| 1740 | -+ while (npages-- != 0) { | |
| 1741 | -+ map_page(pmem.pl1, mva, pa, 1, pmem.pbas); | |
| 1742 | -+ mva += PAGE_SIZE; | |
| 1743 | -+ pa += PAGE_SIZE; | |
| 1744 | -+ } | |
| 1745 | -+ return va; | |
| 1746 | -+} | |
| 1747 | -+ | |
| 1748 | -+static void obp_dumb_munmap(__attribute__((unused)) char *va, | |
| 1749 | -+ __attribute__((unused)) unsigned int size) | |
| 1750 | -+{ | |
| 1751 | -+#ifdef DEBUG_OBP | |
| 1752 | -+ printk("obp_dumb_munmap: virta %x, sz %d\n", va, size); | |
| 1753 | -+#endif | |
| 1754 | -+} | |
| 1755 | -+ | |
| 1756 | -+static int obp_devread(int dev_desc, char *buf, int nbytes) | |
| 1757 | -+{ | |
| 1758 | -+ int ret; | |
| 1759 | -+#ifdef DEBUG_OBP | |
| 1760 | -+ printk("obp_devread: fd %d, nbytes %d\n", dev_desc, nbytes); | |
| 1761 | -+#endif | |
| 1762 | -+ ret = fd_table[dev_desc].pread(dev_desc, fd_table[dev_desc].offset, buf, nbytes); | |
| 1763 | -+ fd_table[dev_desc].offset += nbytes; | |
| 1764 | -+ return ret; | |
| 1765 | -+} | |
| 1766 | -+ | |
| 1767 | -+static int obp_devwrite(int dev_desc, char *buf, int nbytes) | |
| 1768 | -+{ | |
| 1769 | -+ int ret; | |
| 1770 | -+#ifdef DEBUG_OBP | |
| 1771 | -+ printk("obp_devwrite: fd %d, buf %s, nbytes %d\n", dev_desc, buf, nbytes); | |
| 1772 | -+#endif | |
| 1773 | -+ ret = fd_table[dev_desc].pwrite(dev_desc, fd_table[dev_desc].offset, buf, nbytes); | |
| 1774 | -+ fd_table[dev_desc].offset += nbytes; | |
| 1775 | -+ return ret; | |
| 1776 | -+} | |
| 1777 | -+ | |
| 1778 | -+static int obp_devseek(int dev_desc, __attribute__((unused)) int hi, int lo) | |
| 1779 | -+{ | |
| 1780 | -+#ifdef DEBUG_OBP | |
| 1781 | -+ printk("obp_devseek: fd %d, hi %d, lo %d\n", dev_desc, hi, lo); | |
| 1782 | -+#endif | |
| 1783 | -+ fd_table[dev_desc].offset = lo; | |
| 1784 | -+ return 0; | |
| 1785 | -+} | |
| 1786 | -+ | |
| 1787 | -+static int obp_inst2pkg(int dev_desc) | |
| 1788 | -+{ | |
| 1789 | -+#ifdef DEBUG_OBP | |
| 1790 | -+ printk("obp_inst2pkg: fd %d\n", dev_desc); | |
| 1791 | -+#endif | |
| 1792 | -+ return fd_table[dev_desc].unit; | |
| 1793 | -+} | |
| 1794 | -diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch-15/qemu/system_qemu.c | |
| 1795 | ---- proll_18.orig/qemu/system_qemu.c 1970-01-01 00:00:00.000000000 +0000 | |
| 1796 | -+++ proll-patch-15/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000 | |
| 1797 | -@@ -0,0 +1,430 @@ | |
| 1798 | -+/** | |
| 1799 | -+ ** Proll (PROM replacement) | |
| 1800 | -+ ** system.c: shared miscallenea. | |
| 1801 | -+ ** Copyright 1999 Pete Zaitcev | |
| 1802 | -+ ** This code is licensed under GNU General Public License. | |
| 1803 | -+ **/ | |
| 1804 | -+#include <stdarg.h> | |
| 1805 | -+#include <asi.h> | |
| 1806 | -+#include <crs.h> | |
| 1807 | -+#ifndef NULL | |
| 1808 | -+#define NULL ((void*)0) | |
| 1809 | -+#endif | |
| 1810 | -+ | |
| 1811 | -+#include "pgtsrmmu.h" | |
| 1812 | -+ | |
| 1813 | -+#include "vconsole.h" | |
| 1814 | -+#include <timer.h> /* Local copy of 2.2 style include */ | |
| 1815 | -+#include <general.h> /* __P() */ | |
| 1816 | -+#include <net.h> /* init_net() */ | |
| 1817 | -+#include <romlib.h> /* we are a provider for part of this. */ | |
| 1818 | -+#include <netpriv.h> /* myipaddr */ | |
| 1819 | -+#include <arpa.h> | |
| 1820 | -+#include <system.h> /* our own prototypes */ | |
| 1821 | -+ | |
| 1822 | -+/* | |
| 1823 | -+ * We export this. | |
| 1824 | -+ */ | |
| 1825 | -+char idprom[IDPROM_SIZE]; | |
| 1826 | -+ | |
| 1827 | -+ | |
| 1828 | -+/* | |
| 1829 | -+ * Create an I/O mapping to pa[size]. | |
| 1830 | -+ * Returns va of the mapping or 0 if unsuccessful. | |
| 1831 | -+ */ | |
| 1832 | -+void * | |
| 1833 | -+map_io(unsigned pa, int size) | |
| 1834 | -+{ | |
| 1835 | -+ void *va; | |
| 1836 | -+ unsigned int npages; | |
| 1837 | -+ unsigned int off; | |
| 1838 | -+ unsigned int mva; | |
| 1839 | -+ | |
| 1840 | -+ off = pa & (PAGE_SIZE-1); | |
| 1841 | -+ npages = (off + size + (PAGE_SIZE-1)) / PAGE_SIZE; | |
| 1842 | -+ pa &= ~(PAGE_SIZE-1); | |
| 1843 | -+ | |
| 1844 | -+ va = mem_alloc(&cio, npages*PAGE_SIZE, PAGE_SIZE); | |
| 1845 | -+ if (va == 0) return va; | |
| 1846 | -+ | |
| 1847 | -+ mva = (unsigned int) va; | |
| 1848 | -+ /* printk("map_io: va 0x%x pa 0x%x off 0x%x npages %d\n", va, pa, off, npages); */ /* P3 */ | |
| 1849 | -+ while (npages-- != 0) { | |
| 1850 | -+ map_page(pmem.pl1, mva, pa, 1, pmem.pbas); | |
| 1851 | -+ mva += PAGE_SIZE; | |
| 1852 | -+ pa += PAGE_SIZE; | |
| 1853 | -+ } | |
| 1854 | -+ | |
| 1855 | -+ return (void *)((unsigned int)va + off); | |
| 1856 | -+} | |
| 1857 | -+ | |
| 1858 | -+/* | |
| 1859 | -+ * Tablewalk routine used for testing. | |
| 1860 | -+ * Returns PTP/PTE. | |
| 1861 | -+ */ | |
| 1862 | -+unsigned int | |
| 1863 | -+proc_tablewalk(int ctx, unsigned int va) | |
| 1864 | -+{ | |
| 1865 | -+ unsigned int pa1; | |
| 1866 | -+ | |
| 1867 | -+ __asm__ __volatile__ ("lda [%1] %2, %0" : | |
| 1868 | -+ "=r" (pa1) : | |
| 1869 | -+ "r" (AC_M_CTPR), "i" (ASI_M_MMUREGS)); | |
| 1870 | -+ /* printk(" ctpr %x ctx %x\n", pa1, ctx); */ /* P3 */ | |
| 1871 | -+ pa1 <<= 4; | |
| 1872 | -+ pa1 = ld_bypass(pa1 + (ctx << 2)); | |
| 1873 | -+ if ((pa1 & 0x03) == 0) goto invalid; | |
| 1874 | -+ return mem_tablewalk((pa1 & 0xFFFFFFF0) << 4, va); | |
| 1875 | -+ | |
| 1876 | -+invalid: | |
| 1877 | -+ printk(" invalid %x\n", pa1); | |
| 1878 | -+ return 0; | |
| 1879 | -+} | |
| 1880 | -+ | |
| 1881 | -+/* | |
| 1882 | -+ * Walk the tables in memory, starting at physical address pa. | |
| 1883 | -+ */ | |
| 1884 | -+unsigned int | |
| 1885 | -+mem_tablewalk(unsigned int pa, unsigned int va) | |
| 1886 | -+{ | |
| 1887 | -+ unsigned int pa1; | |
| 1888 | -+ | |
| 1889 | -+ printk("pa %x va %x", pa, va); | |
| 1890 | -+ pa1 = ld_bypass(pa + (((va&0xFF000000)>>24) << 2)); | |
| 1891 | -+ if ((pa1 & 0x03) == 0) goto invalid; | |
| 1892 | -+ printk(" l1 %x", pa1); | |
| 1893 | -+ pa1 <<= 4; pa1 &= 0xFFFFFF00; | |
| 1894 | -+ pa1 = ld_bypass(pa1 + (((va&0x00FC0000)>>18) << 2)); | |
| 1895 | -+ if ((pa1 & 0x03) == 0) goto invalid; | |
| 1896 | -+ printk(" l2 %x", pa1); | |
| 1897 | -+ pa1 <<= 4; pa1 &= 0xFFFFFF00; | |
| 1898 | -+ pa1 = ld_bypass(pa1 + (((va&0x0003F000)>>12) << 2)); | |
| 1899 | -+ if ((pa1 & 0x03) == 0) goto invalid; | |
| 1900 | -+ printk(" l3 %x", pa1); | |
| 1901 | -+ printk(" off %x\n", va&0x00000FFF); | |
| 1902 | -+ return pa1; | |
| 1903 | -+invalid: | |
| 1904 | -+ printk(" invalid %x\n", pa1); | |
| 1905 | -+ return 0; | |
| 1906 | -+} | |
| 1907 | -+ | |
| 1908 | -+/* | |
| 1909 | -+ * Make CPU page tables. | |
| 1910 | -+ * Returns pointer to context table. | |
| 1911 | -+ * Here we ignore memory allocation errors which "should not happen" | |
| 1912 | -+ * because we cannot print anything anyways if memory initialization fails. | |
| 1913 | -+ */ | |
| 1914 | -+void makepages(struct phym *t, unsigned int highbase) | |
| 1915 | -+{ | |
| 1916 | -+ unsigned int *ctp, *l1, pte; | |
| 1917 | -+ int i; | |
| 1918 | -+ unsigned int pa, va; | |
| 1919 | -+ | |
| 1920 | -+ ctp = mem_zalloc(&cmem, NCTX_SWIFT*sizeof(int), NCTX_SWIFT*sizeof(int)); | |
| 1921 | -+ l1 = mem_zalloc(&cmem, 256*sizeof(int), 256*sizeof(int)); | |
| 1922 | -+ | |
| 1923 | -+ pte = SRMMU_ET_PTD | (((unsigned int)l1 - PROLBASE + highbase) >> 4); | |
| 1924 | -+ for (i = 0; i < NCTX_SWIFT; i++) { | |
| 1925 | -+ ctp[i] = pte; | |
| 1926 | -+ } | |
| 1927 | -+ | |
| 1928 | -+ pa = PROLBASE; | |
| 1929 | -+ for (va = PROLBASE; va < PROLDATA; va += PAGE_SIZE) { | |
| 1930 | -+ map_page(l1, va, pa, 0, highbase); | |
| 1931 | -+ pa += PAGE_SIZE; | |
| 1932 | -+ } | |
| 1933 | -+ pa = highbase + PROLDATA - PROLBASE; | |
| 1934 | -+ for (va = PROLDATA; va < PROLBASE + PROLSIZE; va += PAGE_SIZE) { | |
| 1935 | -+ map_page(l1, va, pa, 0, highbase); | |
| 1936 | -+ pa += PAGE_SIZE; | |
| 1937 | -+ } | |
| 1938 | -+ | |
| 1939 | -+ /* We need to start from LOADBASE, but kernel wants PAGE_SIZE. */ | |
| 1940 | -+ pa = 0; | |
| 1941 | -+ for (va = 0; va < LOWMEMSZ; va += PAGE_SIZE) { | |
| 1942 | -+ map_page(l1, va, pa, 0, highbase); | |
| 1943 | -+ pa += PAGE_SIZE; | |
| 1944 | -+ } | |
| 1945 | -+ | |
| 1946 | -+ t->pctp = ctp; | |
| 1947 | -+ t->pl1 = l1; | |
| 1948 | -+ t->pbas = highbase; | |
| 1949 | -+} | |
| 1950 | -+ | |
| 1951 | -+/* | |
| 1952 | -+ * Create a memory mapping from va to epa in page table pgd. | |
| 1953 | -+ * highbase is used for v2p translation. | |
| 1954 | -+ */ | |
| 1955 | -+int | |
| 1956 | -+map_page(unsigned int *pgd, unsigned int va, | |
| 1957 | -+ unsigned int epa, int type, unsigned int highbase) | |
| 1958 | -+{ | |
| 1959 | -+ unsigned int pte; | |
| 1960 | -+ unsigned int *p; | |
| 1961 | -+ unsigned int pa; | |
| 1962 | -+ | |
| 1963 | -+ pte = pgd[((va)>>SRMMU_PGDIR_SHIFT) & (SRMMU_PTRS_PER_PGD-1)]; | |
| 1964 | -+ if ((pte & SRMMU_ET_MASK) == SRMMU_ET_INVALID) { | |
| 1965 | -+ p = mem_zalloc(&cmem, SRMMU_PTRS_PER_PMD*sizeof(int), | |
| 1966 | -+ SRMMU_PTRS_PER_PMD*sizeof(int)); | |
| 1967 | -+ if (p == 0) goto drop; | |
| 1968 | -+ pte = SRMMU_ET_PTD | | |
| 1969 | -+ (((unsigned int)p - PROLBASE + highbase) >> 4); | |
| 1970 | -+ pgd[((va)>>SRMMU_PGDIR_SHIFT) & (SRMMU_PTRS_PER_PGD-1)] = pte; | |
| 1971 | -+ /* barrier() */ | |
| 1972 | -+ } | |
| 1973 | -+ | |
| 1974 | -+ pa = ((pte & 0xFFFFFFF0) << 4); | |
| 1975 | -+ pa += (((va)>>SRMMU_PMD_SHIFT & (SRMMU_PTRS_PER_PMD-1)) << 2); | |
| 1976 | -+ pte = ld_bypass(pa); | |
| 1977 | -+ if ((pte & SRMMU_ET_MASK) == SRMMU_ET_INVALID) { | |
| 1978 | -+ p = mem_zalloc(&cmem, SRMMU_PTRS_PER_PTE*sizeof(int), | |
| 1979 | -+ SRMMU_PTRS_PER_PTE*sizeof(int)); | |
| 1980 | -+ if (p == 0) goto drop; | |
| 1981 | -+ pte = SRMMU_ET_PTD | | |
| 1982 | -+ (((unsigned int)p - PROLBASE + highbase) >> 4); | |
| 1983 | -+ st_bypass(pa, pte); | |
| 1984 | -+ } | |
| 1985 | -+ | |
| 1986 | -+ pa = ((pte & 0xFFFFFFF0) << 4); | |
| 1987 | -+ pa += (((va)>>PAGE_SHIFT & (SRMMU_PTRS_PER_PTE-1)) << 2); | |
| 1988 | -+ | |
| 1989 | -+ pte = SRMMU_ET_PTE | ((epa & PAGE_MASK) >> 4); | |
| 1990 | -+ if (type) { /* I/O */ | |
| 1991 | -+ pte |= SRMMU_REF; | |
| 1992 | -+ /* SRMMU cannot make Supervisor-only, but not exectutable */ | |
| 1993 | -+ pte |= SRMMU_PRIV; | |
| 1994 | -+ } else { /* memory */ | |
| 1995 | -+ pte |= SRMMU_REF|SRMMU_CACHE; | |
| 1996 | -+ pte |= SRMMU_PRIV; /* Supervisor only access */ | |
| 1997 | -+ } | |
| 1998 | -+ st_bypass(pa, pte); | |
| 1999 | -+ return 0; | |
| 2000 | -+ | |
| 2001 | -+drop: | |
| 2002 | -+ return -1; | |
| 2003 | -+} | |
| 2004 | -+ | |
| 2005 | -+/* | |
| 2006 | -+ * Switch page tables. | |
| 2007 | -+ */ | |
| 2008 | -+void | |
| 2009 | -+init_mmu_swift(unsigned int ctp_phy) | |
| 2010 | -+{ | |
| 2011 | -+ unsigned int addr; | |
| 2012 | -+ | |
| 2013 | -+ /* | |
| 2014 | -+ * Flush cache | |
| 2015 | -+ */ | |
| 2016 | -+ for (addr = 0; addr < 0x2000; addr += 0x10) { | |
| 2017 | -+ __asm__ __volatile__ ("sta %%g0, [%0] %1\n\t" : : | |
| 2018 | -+ "r" (addr), "i" (ASI_M_DATAC_TAG)); | |
| 2019 | -+ __asm__ __volatile__ ("sta %%g0, [%0] %1\n\t" : : | |
| 2020 | -+ "r" (addr<<1), "i" (ASI_M_TXTC_TAG)); | |
| 2021 | -+ } | |
| 2022 | -+ | |
| 2023 | -+ /* | |
| 2024 | -+ * Switch ctx table | |
| 2025 | -+ */ | |
| 2026 | -+ ctp_phy >>= 4; | |
| 2027 | -+ /* printk("done flushing, switching to %x\n", ctp_phy); */ | |
| 2028 | -+ __asm__ __volatile__ ("sta %0, [%1] %2\n\t" : : | |
| 2029 | -+ "r" (ctp_phy), "r" (AC_M_CTPR), "i" (ASI_M_MMUREGS)); | |
| 2030 | -+ | |
| 2031 | -+ /* | |
| 2032 | -+ * Flush old page table references | |
| 2033 | -+ */ | |
| 2034 | -+ __asm__ __volatile__ ("sta %%g0, [%0] %1\n\t" : : | |
| 2035 | -+ "r" (0x400), "i" (ASI_M_FLUSH_PROBE) : "memory"); | |
| 2036 | -+} | |
| 2037 | -+ | |
| 2038 | -+/* | |
| 2039 | -+ * add_timer, del_timer | |
| 2040 | -+ * This should go into sched.c, but we have it split for different archs. | |
| 2041 | -+ */ | |
| 2042 | -+struct timer_list_head { | |
| 2043 | -+ struct timer_list *head, *tail; | |
| 2044 | -+}; | |
| 2045 | -+ | |
| 2046 | -+static struct timer_list_head timers; /* Anonymous heap of timers */ | |
| 2047 | -+ | |
| 2048 | -+void add_timer(struct timer_list *timer) { | |
| 2049 | -+ struct timer_list *p; | |
| 2050 | -+ if (timer->prev != NULL || timer->next != NULL) { | |
| 2051 | -+ printk("bug: kernel timer added twice at 0x%x.\n", | |
| 2052 | -+ __builtin_return_address(0)); | |
| 2053 | -+ return; | |
| 2054 | -+ } | |
| 2055 | -+ if ((p = timers.tail) != NULL) { | |
| 2056 | -+ timer->prev = p; | |
| 2057 | -+ p->next = timer; | |
| 2058 | -+ timers.tail = timer; | |
| 2059 | -+ } else { | |
| 2060 | -+ timers.head = timer; | |
| 2061 | -+ timers.tail = timer; | |
| 2062 | -+ } | |
| 2063 | -+ return; | |
| 2064 | -+} | |
| 2065 | -+ | |
| 2066 | -+int del_timer(struct timer_list *timer) { | |
| 2067 | -+ struct timer_list *p; | |
| 2068 | -+ int ret; | |
| 2069 | -+ | |
| 2070 | -+ if (timers.head == timer) timers.head = timer->next; | |
| 2071 | -+ if (timers.tail == timer) timers.tail = timer->prev; | |
| 2072 | -+ if ((p = timer->prev) != NULL) p->next = timer->next; | |
| 2073 | -+ if ((p = timer->next) != NULL) p->prev = timer->prev; | |
| 2074 | -+ ret = timer->next != 0 || timer->prev != 0; | |
| 2075 | -+ timer->next = NULL; | |
| 2076 | -+ timer->prev = NULL; | |
| 2077 | -+ return ret; | |
| 2078 | -+} | |
| 2079 | -+ | |
| 2080 | -+void run_timers() { | |
| 2081 | -+ struct timer_list *p; | |
| 2082 | -+ | |
| 2083 | -+ p = timers.head; | |
| 2084 | -+ while (p != NULL) { | |
| 2085 | -+ if (p->expires < jiffies) { | |
| 2086 | -+ del_timer(p); /* XXX make nonstatic member */ | |
| 2087 | -+ (*p->function)(p->data); | |
| 2088 | -+ p = timers.head; | |
| 2089 | -+ } else { | |
| 2090 | -+ p = p->next; | |
| 2091 | -+ } | |
| 2092 | -+ } | |
| 2093 | -+} | |
| 2094 | -+ | |
| 2095 | -+/* | |
| 2096 | -+ * Allocate memory. This is reusable. | |
| 2097 | -+ */ | |
| 2098 | -+void mem_init(struct mem *t, char *begin, char *limit) | |
| 2099 | -+{ | |
| 2100 | -+ t->start = begin; | |
| 2101 | -+ t->uplim = limit; | |
| 2102 | -+ t->curp = begin; | |
| 2103 | -+} | |
| 2104 | -+ | |
| 2105 | -+void mem_fini(struct mem *t) | |
| 2106 | -+{ | |
| 2107 | -+ t->curp = 0; | |
| 2108 | -+} | |
| 2109 | -+ | |
| 2110 | -+void *mem_alloc(struct mem *t, int size, int align) | |
| 2111 | -+{ | |
| 2112 | -+ char *p; | |
| 2113 | -+ | |
| 2114 | -+ p = (char *)((((unsigned int)t->curp) + (align-1)) & ~(align-1)); | |
| 2115 | -+ if (p >= t->uplim || p + size > t->uplim) return 0; | |
| 2116 | -+ t->curp = p + size; | |
| 2117 | -+ return p; | |
| 2118 | -+} | |
| 2119 | -+ | |
| 2120 | -+void *mem_zalloc(struct mem *t, int size, int align) | |
| 2121 | -+{ | |
| 2122 | -+ char *p; | |
| 2123 | -+ | |
| 2124 | -+ if ((p = mem_alloc(t, size, align)) != 0) memset(p, 0, size); | |
| 2125 | -+ return p; | |
| 2126 | -+} | |
| 2127 | -+ | |
| 2128 | -+/* | |
| 2129 | -+ * Library functions | |
| 2130 | -+ */ | |
| 2131 | -+void *memset(void *s, int c, size_t len) | |
| 2132 | -+{ | |
| 2133 | -+ void *p = s; | |
| 2134 | -+ | |
| 2135 | -+ while (len--) { | |
| 2136 | -+ *(char *)s = c; | |
| 2137 | -+ s++; | |
| 2138 | -+ } | |
| 2139 | -+ return p; | |
| 2140 | -+} | |
| 2141 | -+ | |
| 2142 | -+void bcopy(const void *f, void *t, int len) { | |
| 2143 | -+ while (len--) { | |
| 2144 | -+ *(char *)t = *(char *)f; | |
| 2145 | -+ f++; | |
| 2146 | -+ t++; | |
| 2147 | -+ } | |
| 2148 | -+} | |
| 2149 | -+ | |
| 2150 | -+/* Comparison is 7-bit */ | |
| 2151 | -+int bcmp(const void *s1, const void *s2, int len) | |
| 2152 | -+{ | |
| 2153 | -+ int i; | |
| 2154 | -+ char ch; | |
| 2155 | -+ | |
| 2156 | -+ while (len--) { | |
| 2157 | -+ ch = *(char *)s1; | |
| 2158 | -+ i = ch - *(char *)s2; | |
| 2159 | -+ s1++; | |
| 2160 | -+ s2++; | |
| 2161 | -+ if (i != 0) | |
| 2162 | -+ return i; | |
| 2163 | -+ if (ch == 0) | |
| 2164 | -+ return 0; | |
| 2165 | -+ } | |
| 2166 | -+ return 0; | |
| 2167 | -+} | |
| 2168 | -+ | |
| 2169 | -+int strlen(const char *s) { | |
| 2170 | -+ const char *p; | |
| 2171 | -+ for (p = s; *p != 0; p++) { } | |
| 2172 | -+ return p - s; | |
| 2173 | -+} | |
| 2174 | -+ | |
| 2175 | -+extern void *printk_fn; | |
| 2176 | -+ | |
| 2177 | -+void printk(char *fmt, ...) | |
| 2178 | -+{ | |
| 2179 | -+ struct prf_fp { | |
| 2180 | -+ void *xfp; | |
| 2181 | -+ void (*write)(void *, char *, int); | |
| 2182 | -+ } prfa; | |
| 2183 | -+ extern void prf(struct prf_fp *, char *fmt, va_list adx); | |
| 2184 | -+ va_list x1; | |
| 2185 | -+ | |
| 2186 | -+ va_start(x1, fmt); | |
| 2187 | -+ prfa.xfp = &dp0; | |
| 2188 | -+ prfa.write = printk_fn; | |
| 2189 | -+ prf(&prfa, fmt, x1); | |
| 2190 | -+ va_end(x1); | |
| 2191 | -+} | |
| 2192 | -+ | |
| 2193 | -+void fatal() | |
| 2194 | -+{ | |
| 2195 | -+ printk("fatal."); | |
| 2196 | -+loop: goto loop; | |
| 2197 | -+} | |
| 2198 | -+ | |
| 2199 | -+/* | |
| 2200 | -+ * Get the highest bit number from the mask. | |
| 2201 | -+ */ | |
| 2202 | -+int highc(int mask, int size) | |
| 2203 | -+{ | |
| 2204 | -+ int m1; | |
| 2205 | -+ | |
| 2206 | -+ m1 = 1 << size; | |
| 2207 | -+ while (size != 0) { | |
| 2208 | -+ size--; | |
| 2209 | -+ m1 >>= 1; | |
| 2210 | -+ if (m1 & mask) break; | |
| 2211 | -+ } | |
| 2212 | -+ return size; | |
| 2213 | -+} | |
| 2214 | -+ | |
| 2215 | -+/* | |
| 2216 | -+ */ | |
| 2217 | -+unsigned int ld_bp_swap(unsigned int ptr) { | |
| 2218 | -+ unsigned int n; | |
| 2219 | -+ n = ld_bypass(ptr); | |
| 2220 | -+ n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); | |
| 2221 | -+ return n; | |
| 2222 | -+} | |
| 2223 | -+ | |
| 2224 | -+void st_bp_swap(unsigned int ptr, unsigned int n) { | |
| 2225 | -+ n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); | |
| 2226 | -+ st_bypass(ptr, n); | |
| 2227 | -+}; | |
| 2228 | -diff -ruN proll_18.orig/src/arp.c proll-patch-15/src/arp.c | |
| 2229 | ---- proll_18.orig/src/arp.c 2001-12-24 05:12:31.000000000 +0000 | |
| 2230 | -+++ proll-patch-15/src/arp.c 2005-08-14 10:10:11.000000000 +0000 | |
| 2231 | -@@ -45,7 +45,7 @@ | |
| 2232 | - #endif | |
| 2233 | - static struct arp_cache arp_list[ARPNUM]; /* ARP address cache */ | |
| 2234 | - static int next_arp; /* next table entry */ | |
| 2235 | --static t_ipaddr def_gw = IP_ANY; /* default routing */ | |
| 2236 | -+static t_ipaddr def_gw; /* default routing */ | |
| 2237 | - | |
| 2238 | - | |
| 2239 | - | |
| 2240 | -@@ -100,10 +100,7 @@ | |
| 2241 | - * | |
| 2242 | - * ARP receiver routine | |
| 2243 | - */ | |
| 2244 | --static int arp_recv(buf, bufsize, addr) | |
| 2245 | --unsigned char *buf; | |
| 2246 | --int bufsize; | |
| 2247 | --unsigned char *addr; | |
| 2248 | -+static int arp_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) | |
| 2249 | - { | |
| 2250 | - register struct arphdr *ahp = (struct arphdr *)buf; | |
| 2251 | - | |
| 2252 | -@@ -144,7 +141,7 @@ | |
| 2253 | - * | |
| 2254 | - * Resolve IP address and return pointer to hardware address. | |
| 2255 | - */ | |
| 2256 | --unsigned char *ip_resolve(ip) | |
| 2257 | -+const unsigned char *ip_resolve(ip) | |
| 2258 | - t_ipaddr ip; | |
| 2259 | - { | |
| 2260 | - int i; | |
| 2261 | -@@ -230,14 +227,11 @@ | |
| 2262 | - */ | |
| 2263 | - int init_arp() | |
| 2264 | - { | |
| 2265 | -- /* Set name of module for error messages */ | |
| 2266 | -- net_module_name = "arp"; | |
| 2267 | -- | |
| 2268 | - #ifndef NOARP | |
| 2269 | - /* Register ARP packet type and set send buffer pointer */ | |
| 2270 | - if ((arpbuf = (struct arphdr *)reg_type(htons(ETH_P_ARP), arp_recv)) == NULL) | |
| 2271 | - return(FALSE); | |
| 2272 | - #endif | |
| 2273 | -- | |
| 2274 | -+ def_gw = IP_ANY; | |
| 2275 | - return(TRUE); | |
| 2276 | - } | |
| 2277 | -diff -ruN proll_18.orig/src/arp.h proll-patch-15/src/arp.h | |
| 2278 | ---- proll_18.orig/src/arp.h 1999-03-18 03:39:43.000000000 +0000 | |
| 2279 | -+++ proll-patch-15/src/arp.h 2004-11-13 15:50:49.000000000 +0000 | |
| 2280 | -@@ -104,7 +104,7 @@ | |
| 2281 | - extern int init_arp __P((void)); | |
| 2282 | - | |
| 2283 | - /* Resolve IP address and return pointer to hardware address */ | |
| 2284 | --extern unsigned char *ip_resolve __P((t_ipaddr ip)); | |
| 2285 | -+extern const unsigned char *ip_resolve __P((t_ipaddr ip)); | |
| 2286 | - | |
| 2287 | - /* Add a new antry to the ARP cache */ | |
| 2288 | - extern void addcache __P((unsigned char *ha, t_ipaddr ip)); | |
| 2289 | -diff -ruN proll_18.orig/src/bootp.c proll-patch-15/src/bootp.c | |
| 2290 | ---- proll_18.orig/src/bootp.c 1999-12-15 17:20:30.000000000 +0000 | |
| 2291 | -+++ proll-patch-15/src/bootp.c 2005-08-14 10:16:09.000000000 +0000 | |
| 2292 | -@@ -151,7 +151,7 @@ | |
| 2293 | - while (TRUE) { | |
| 2294 | - boot_xid = get_ticks() + random(); | |
| 2295 | - bootp_send(); | |
| 2296 | -- i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout, CHR_ESC); | |
| 2297 | -+ i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout); | |
| 2298 | - if (i < 0) { /* user pressed ESC */ | |
| 2299 | - printf("\nAborted\n"); | |
| 2300 | - return(1); | |
| 2301 | -diff -ruN proll_18.orig/src/esp.c proll-patch-15/src/esp.c | |
| 2302 | ---- proll_18.orig/src/esp.c 1970-01-01 00:00:00.000000000 +0000 | |
| 2303 | -+++ proll-patch-15/src/esp.c 2005-08-15 18:42:46.000000000 +0000 | |
| 2304 | -@@ -0,0 +1,305 @@ | |
| 2305 | -+#include <system.h> /* == <asm/system.h> */ | |
| 2306 | -+#include <general.h> /* __P for netpriv.h */ | |
| 2307 | -+#include <dma.h> /* dmaga */ | |
| 2308 | -+#include <romlib.h> | |
| 2309 | -+ | |
| 2310 | -+#define PHYS_JJ_ESPDMA 0x78400000 /* ESP DMA controller */ | |
| 2311 | -+#define PHYS_JJ_ESP 0x78800000 /* ESP SCSI */ | |
| 2312 | -+#define PHYS_JJ_ESP_IRQ 4 | |
| 2313 | -+#define BUFSIZE 4096 | |
| 2314 | -+/* | |
| 2315 | -+ * XXX Crude | |
| 2316 | -+ */ | |
| 2317 | -+struct esp_dma { | |
| 2318 | -+ struct sparc_dma_registers *regs; | |
| 2319 | -+ enum dvma_rev revision; | |
| 2320 | -+}; | |
| 2321 | -+ | |
| 2322 | -+struct esp_regs { | |
| 2323 | -+ unsigned int regs[16]; | |
| 2324 | -+}; | |
| 2325 | -+ | |
| 2326 | -+struct esp_private { | |
| 2327 | -+ int active; /* initialized */ | |
| 2328 | -+ int inst; /* iface number */ | |
| 2329 | -+ | |
| 2330 | -+ volatile struct esp_regs *ll; | |
| 2331 | -+ __u32 buffer_dvma; | |
| 2332 | -+ unsigned int irq; /* device IRQ number */ | |
| 2333 | -+ int interrupt; | |
| 2334 | -+ | |
| 2335 | -+ struct esp_dma *espdma; /* If set this points to espdma */ | |
| 2336 | -+ | |
| 2337 | -+ unsigned char *buffer; | |
| 2338 | -+ struct disk_info { | |
| 2339 | -+ unsigned int hw_sector; | |
| 2340 | -+ unsigned int part_offset[8]; | |
| 2341 | -+ } disk[8]; | |
| 2342 | -+}; | |
| 2343 | -+ | |
| 2344 | -+static void esp_interrupt(void *dev_id) | |
| 2345 | -+{ | |
| 2346 | -+ struct esp_private *lp = (struct esp_private *)dev_id; | |
| 2347 | -+ | |
| 2348 | -+ lp->interrupt = 1; | |
| 2349 | -+ /* Acknowledge all the interrupt sources ASAP */ | |
| 2350 | -+ | |
| 2351 | -+ lp->interrupt = 0; | |
| 2352 | -+} | |
| 2353 | -+ | |
| 2354 | -+static int esp_open (void *dev) | |
| 2355 | -+{ | |
| 2356 | -+ struct esp_private *lp = (struct esp_private *)dev; | |
| 2357 | -+ int status = 0; | |
| 2358 | -+ | |
| 2359 | -+ if (request_irq(lp->irq, &esp_interrupt, (void *)dev)) { | |
| 2360 | -+ printk ("Esp: Can't get irq %d\n", lp->irq); | |
| 2361 | -+ return -1; | |
| 2362 | -+ } | |
| 2363 | -+ | |
| 2364 | -+ /* On the 4m, setup the espdma to provide the upper bits for buffers */ | |
| 2365 | -+ if (lp->espdma) | |
| 2366 | -+ lp->espdma->regs->dma_test = ((__u32) lp->buffer_dvma) & 0xff000000; | |
| 2367 | -+ | |
| 2368 | -+ return status; | |
| 2369 | -+} | |
| 2370 | -+ | |
| 2371 | -+static int esp_close (void *dev) | |
| 2372 | -+{ | |
| 2373 | -+ struct esp_private *lp = (struct esp_private *)dev; | |
| 2374 | -+ | |
| 2375 | -+ free_irq (lp->irq, (void *) dev); | |
| 2376 | -+ return 0; | |
| 2377 | -+} | |
| 2378 | -+ | |
| 2379 | -+static int | |
| 2380 | -+esp_init(struct esp_private *esp, struct esp_dma *espdma, int irq) | |
| 2381 | -+{ | |
| 2382 | -+ volatile struct esp_regs *ll; | |
| 2383 | -+ | |
| 2384 | -+ /* Get the IO region */ | |
| 2385 | -+ ll = map_io(PHYS_JJ_ESP, sizeof (struct esp_regs)); | |
| 2386 | -+ if (ll == 0) return -1; | |
| 2387 | -+ | |
| 2388 | -+ esp->buffer = dvma_alloc(BUFSIZE, &esp->buffer_dvma); | |
| 2389 | -+ esp->ll = ll; | |
| 2390 | -+ esp->espdma = espdma; | |
| 2391 | -+ esp->irq = irq; | |
| 2392 | -+ | |
| 2393 | -+ // Chip reset | |
| 2394 | -+ stb_bypass((int)ll + 3*2, 2); | |
| 2395 | -+ return 0; | |
| 2396 | -+} | |
| 2397 | -+ | |
| 2398 | -+static int espdma_init(struct esp_dma *espdma) | |
| 2399 | -+{ | |
| 2400 | -+ void *p; | |
| 2401 | -+ | |
| 2402 | -+ /* Hardcode everything for MrCoffee. */ | |
| 2403 | -+ if ((p = map_io(PHYS_JJ_ESPDMA, 0x10)) == 0) { | |
| 2404 | -+ printk("espdma_init: cannot map registers\n"); | |
| 2405 | -+ return -1; | |
| 2406 | -+ } | |
| 2407 | -+ espdma->regs = p; | |
| 2408 | -+ | |
| 2409 | -+ printk("dma1: "); | |
| 2410 | -+ | |
| 2411 | -+ switch((espdma->regs->cond_reg)&DMA_DEVICE_ID) { | |
| 2412 | -+ case DMA_VERS0: | |
| 2413 | -+ espdma->revision=dvmarev0; | |
| 2414 | -+ printk("Revision 0 "); | |
| 2415 | -+ break; | |
| 2416 | -+ case DMA_ESCV1: | |
| 2417 | -+ espdma->revision=dvmaesc1; | |
| 2418 | -+ printk("ESC Revision 1 "); | |
| 2419 | -+ break; | |
| 2420 | -+ case DMA_VERS1: | |
| 2421 | -+ espdma->revision=dvmarev1; | |
| 2422 | -+ printk("Revision 1 "); | |
| 2423 | -+ break; | |
| 2424 | -+ case DMA_VERS2: | |
| 2425 | -+ espdma->revision=dvmarev2; | |
| 2426 | -+ printk("Revision 2 "); | |
| 2427 | -+ break; | |
| 2428 | -+ case DMA_VERHME: | |
| 2429 | -+ espdma->revision=dvmahme; | |
| 2430 | -+ printk("HME DVMA gate array "); | |
| 2431 | -+ break; | |
| 2432 | -+ case DMA_VERSPLUS: | |
| 2433 | -+ espdma->revision=dvmarevplus; | |
| 2434 | -+ printk("Revision 1 PLUS "); | |
| 2435 | -+ break; | |
| 2436 | -+ default: | |
| 2437 | -+ printk("unknown dma version %x", | |
| 2438 | -+ (espdma->regs->cond_reg)&DMA_DEVICE_ID); | |
| 2439 | -+ /* espdma->allocated = 1; */ | |
| 2440 | -+ break; | |
| 2441 | -+ } | |
| 2442 | -+ printk("\n"); | |
| 2443 | -+ return 0; | |
| 2444 | -+} | |
| 2445 | -+ | |
| 2446 | -+static struct esp_dma espdma0; | |
| 2447 | -+static struct esp_private esp; | |
| 2448 | -+/* | |
| 2449 | -+ * Find all the esp cards on the system and initialize them | |
| 2450 | -+ */ | |
| 2451 | -+void esp_probe () | |
| 2452 | -+{ | |
| 2453 | -+ if (espdma_init(&espdma0) != 0) { | |
| 2454 | -+ return; | |
| 2455 | -+ } | |
| 2456 | -+ | |
| 2457 | -+ if (esp_init(&esp, &espdma0, PHYS_JJ_ESP_IRQ) != 0) { | |
| 2458 | -+ printk("esp_probe: esp0 init failed\n"); | |
| 2459 | -+ return; | |
| 2460 | -+ } | |
| 2461 | -+ return; | |
| 2462 | -+} | |
| 2463 | -+ | |
| 2464 | -+void esp_read_capacity(int unit) | |
| 2465 | -+{ | |
| 2466 | -+ // Set SCSI target | |
| 2467 | -+ stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); | |
| 2468 | -+ // Set DMA address | |
| 2469 | -+ st_bypass(PHYS_JJ_ESPDMA + 4, esp.buffer_dvma); | |
| 2470 | -+ // Set DMA length | |
| 2471 | -+ stb_bypass(PHYS_JJ_ESP + 0*4, 10); | |
| 2472 | -+ stb_bypass(PHYS_JJ_ESP + 1*4, 0); | |
| 2473 | -+ // Set DMA direction | |
| 2474 | -+ st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); | |
| 2475 | -+ // Setup command = Read Capacity | |
| 2476 | -+ esp.buffer[0] = 0x80; | |
| 2477 | -+ esp.buffer[1] = 0x25; | |
| 2478 | -+ esp.buffer[2] = 0x00; | |
| 2479 | -+ esp.buffer[3] = 0x00; | |
| 2480 | -+ esp.buffer[4] = 0x00; | |
| 2481 | -+ esp.buffer[5] = 0x00; | |
| 2482 | -+ esp.buffer[6] = 0x00; | |
| 2483 | -+ esp.buffer[7] = 0x00; | |
| 2484 | -+ esp.buffer[8] = 0x00; | |
| 2485 | -+ esp.buffer[9] = 0x00; | |
| 2486 | -+ esp.buffer[10] = 0x00; | |
| 2487 | -+ // Set ATN, issue command | |
| 2488 | -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); | |
| 2489 | -+ | |
| 2490 | -+ // Set DMA length = 512 * read length | |
| 2491 | -+ stb_bypass(PHYS_JJ_ESP + 0*4, 0); | |
| 2492 | -+ stb_bypass(PHYS_JJ_ESP + 1*4, 8 & 0xff); | |
| 2493 | -+ // Set DMA direction | |
| 2494 | -+ st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); | |
| 2495 | -+ // Transfer | |
| 2496 | -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); | |
| 2497 | -+ esp.disk[unit].hw_sector = (esp.buffer[4] << 24) | (esp.buffer[5] << 16) | (esp.buffer[6] << 8) | esp.buffer[7]; | |
| 2498 | -+} | |
| 2499 | -+ | |
| 2500 | -+// offset is multiple of 512, len in bytes | |
| 2501 | -+void *esp_read(int unit, int part, int offset, short len) | |
| 2502 | -+{ | |
| 2503 | -+ int pos, hw_sect, sect_offset, spb; | |
| 2504 | -+ | |
| 2505 | -+ // Set SCSI target | |
| 2506 | -+ stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); | |
| 2507 | -+ // Set DMA address | |
| 2508 | -+ st_bypass(PHYS_JJ_ESPDMA + 4, esp.buffer_dvma); | |
| 2509 | -+ // Set DMA length | |
| 2510 | -+ stb_bypass(PHYS_JJ_ESP + 0*4, 10); | |
| 2511 | -+ stb_bypass(PHYS_JJ_ESP + 1*4, 0); | |
| 2512 | -+ // Set DMA direction | |
| 2513 | -+ st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); | |
| 2514 | -+ hw_sect = esp.disk[unit].hw_sector; | |
| 2515 | -+ offset += esp.disk[unit].part_offset[part]; | |
| 2516 | -+ spb = hw_sect / 512; | |
| 2517 | -+ sect_offset = offset / spb; | |
| 2518 | -+ pos = (offset - sect_offset * spb) * 512; | |
| 2519 | -+ len /= 512; | |
| 2520 | -+ //printk("Read unit %d, offset %d -> offset %d, pos %d, hw_sect %d\n", unit, offset, sect_offset, pos, hw_sect); | |
| 2521 | -+ // Setup command = Read(10) | |
| 2522 | -+ esp.buffer[0] = 0x80; | |
| 2523 | -+ esp.buffer[1] = 0x28; | |
| 2524 | -+ esp.buffer[2] = 0x00; | |
| 2525 | -+ esp.buffer[3] = (sect_offset >> 24) & 0xff; | |
| 2526 | -+ esp.buffer[4] = (sect_offset >> 16) & 0xff; | |
| 2527 | -+ esp.buffer[5] = (sect_offset >> 8) & 0xff; | |
| 2528 | -+ esp.buffer[6] = sect_offset & 0xff; | |
| 2529 | -+ esp.buffer[7] = 0x00; | |
| 2530 | -+ esp.buffer[8] = (len >> 8) & 0xff; | |
| 2531 | -+ esp.buffer[9] = len & 0xff; | |
| 2532 | -+ // Set ATN, issue command | |
| 2533 | -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); | |
| 2534 | -+ | |
| 2535 | -+ // Set DMA length = sector size * read length | |
| 2536 | -+ stb_bypass(PHYS_JJ_ESP + 0*4, (len * hw_sect) & 0xff); | |
| 2537 | -+ stb_bypass(PHYS_JJ_ESP + 1*4, ((len * hw_sect) >> 8) & 0xff); | |
| 2538 | -+ // Set DMA direction | |
| 2539 | -+ st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); | |
| 2540 | -+ // Transfer | |
| 2541 | -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); | |
| 2542 | -+ return esp.buffer + pos; | |
| 2543 | -+} | |
| 2544 | -+ | |
| 2545 | -+// Sparc boot sequence can be found in SILO docs, | |
| 2546 | -+// first-isofs/README.SILO_ISOFS | |
| 2547 | -+int esp_boot(int unit) | |
| 2548 | -+{ | |
| 2549 | -+ struct sun_disklabel { | |
| 2550 | -+ unsigned char info[128]; /* Informative text string */ | |
| 2551 | -+ unsigned char spare0[14]; | |
| 2552 | -+ struct sun_info { | |
| 2553 | -+ unsigned char spare1; | |
| 2554 | -+ unsigned char id; | |
| 2555 | -+ unsigned char spare2; | |
| 2556 | -+ unsigned char flags; | |
| 2557 | -+ } infos[8]; | |
| 2558 | -+ unsigned char spare[246]; /* Boot information etc. */ | |
| 2559 | -+ short rspeed; /* Disk rotational speed */ | |
| 2560 | -+ short pcylcount; /* Physical cylinder count */ | |
| 2561 | -+ short sparecyl; /* extra sects per cylinder */ | |
| 2562 | -+ unsigned char spare2[4]; /* More magic... */ | |
| 2563 | -+ short ilfact; /* Interleave factor */ | |
| 2564 | -+ short ncyl; /* Data cylinder count */ | |
| 2565 | -+ short nacyl; /* Alt. cylinder count */ | |
| 2566 | -+ short ntrks; /* Tracks per cylinder */ | |
| 2567 | -+ short nsect; /* Sectors per track */ | |
| 2568 | -+ unsigned char spare3[4]; /* Even more magic... */ | |
| 2569 | -+ struct sun_partition { | |
| 2570 | -+ int start_cylinder; | |
| 2571 | -+ int num_sectors; | |
| 2572 | -+ } partitions[8]; | |
| 2573 | -+ short magic; /* Magic number */ | |
| 2574 | -+ short csum; /* Label xor'd checksum */ | |
| 2575 | -+ } *label; | |
| 2576 | -+ unsigned int i, offset; | |
| 2577 | -+ void *src, *dst; | |
| 2578 | -+ | |
| 2579 | -+ printk("Loading partition table from target %d:\n", unit); | |
| 2580 | -+ // Chip reset | |
| 2581 | -+ stb_bypass(PHYS_JJ_ESP + 3*4, 2); | |
| 2582 | -+ | |
| 2583 | -+ esp_open(&esp); | |
| 2584 | -+ esp_read_capacity(unit); | |
| 2585 | -+ | |
| 2586 | -+ label = esp_read(unit, 0, 0, 512); | |
| 2587 | -+ printk("hw sector: %d, CHS: %d/%d/%d, partitions:\n", esp.disk[unit].hw_sector, | |
| 2588 | -+ label->ncyl, label->ntrks, label->nsect); | |
| 2589 | -+ for (i = 0; i < 8; i++) { | |
| 2590 | -+ printk("%c: %d + %d, id %x, flags %x\n", 'a' + i, label->partitions[i].start_cylinder, | |
| 2591 | -+ label->partitions[i].num_sectors, label->infos[i].id, label->infos[i].flags); | |
| 2592 | -+ esp.disk[unit].part_offset[i] = label->partitions[3].start_cylinder * label->ntrks * label->nsect; | |
| 2593 | -+ } | |
| 2594 | -+ offset = 1; | |
| 2595 | -+ printk("booting sd(0,%d,0):d (offset %d)\n", unit, offset); | |
| 2596 | -+ // Skip a.out header (0x20) | |
| 2597 | -+ dst = (void *)0x4000; | |
| 2598 | -+ src = esp_read(unit, 3, offset, 512); | |
| 2599 | -+ src = (void *)((unsigned int) src + 0x20); | |
| 2600 | -+ memcpy(dst, src, 512 - 0x20); | |
| 2601 | -+ dst = (void *)0x4000 + 512 - 0x20; | |
| 2602 | -+ for (i = 1; i < 7680/512; i++) { | |
| 2603 | -+ src = esp_read(unit, 3, offset + i, 512); | |
| 2604 | -+ memcpy(dst, src, 512); | |
| 2605 | -+ dst += 512; | |
| 2606 | -+ } | |
| 2607 | -+ esp_close(&esp); | |
| 2608 | -+ return 0; | |
| 2609 | -+} | |
| 2610 | -diff -ruN proll_18.orig/src/hconsole.c proll-patch-15/src/hconsole.c | |
| 2611 | ---- proll_18.orig/src/hconsole.c 2002-07-23 05:52:48.000000000 +0000 | |
| 2612 | -+++ proll-patch-15/src/hconsole.c 2005-11-09 18:46:34.000000000 +0000 | |
| 2613 | -@@ -29,6 +29,10 @@ | |
| 2614 | - struct raster r_master; /* For a case of resize, whole fb */ | |
| 2615 | - struct raster r_0; /* malloc() erzatz */ | |
| 2616 | - | |
| 2617 | -+#ifdef QEMU | |
| 2618 | -+extern unsigned int q_height, q_width; | |
| 2619 | -+#endif | |
| 2620 | -+ | |
| 2621 | - int hcon_init(struct hconsole *t, unsigned int a0) | |
| 2622 | - { | |
| 2623 | - struct raster *q, *r; | |
| 2624 | -@@ -42,7 +46,11 @@ | |
| 2625 | - * No probing sequence or argument passing, hardcode everything. XXX | |
| 2626 | - */ | |
| 2627 | - raster8_cons_a(q, 768, 1024, (char *)a0); | |
| 2628 | -+#ifndef QEMU | |
| 2629 | - raster_cons_2(r, q, 768-(24*11)-1, 1024-(8*80)-1, (24*11), (8*80)); | |
| 2630 | -+#else | |
| 2631 | -+ raster_cons_2(r, q, 0, 0, q_height, q_width); | |
| 2632 | -+#endif | |
| 2633 | - t->r_ = r; | |
| 2634 | - t->r0_ = q; | |
| 2635 | - t->f_ = &f_master; | |
| 2636 | -@@ -67,7 +75,7 @@ | |
| 2637 | - return 0; | |
| 2638 | - } | |
| 2639 | - | |
| 2640 | --void hcon_fini (struct hconsole *t) | |
| 2641 | -+void hcon_fini (__attribute((unused)) struct hconsole *t) | |
| 2642 | - { | |
| 2643 | - return; | |
| 2644 | - } | |
| 2645 | -@@ -77,12 +85,12 @@ | |
| 2646 | - { | |
| 2647 | - struct rfont *f = t->f_; | |
| 2648 | - | |
| 2649 | -- if (sy < 0 || sy >= t->ydim_) return -1; | |
| 2650 | -- if (sx < 0 || sx >= t->xdim_) return -1; | |
| 2651 | -+ if (sy < 0 || (unsigned)sy >= t->ydim_) return -1; | |
| 2652 | -+ if (sx < 0 || (unsigned)sx >= t->xdim_) return -1; | |
| 2653 | - if (height < 0) return -1; | |
| 2654 | -- if (sy + height > t->ydim_) height = t->ydim_ - sy; | |
| 2655 | -+ if ((unsigned)sy + (unsigned)height > t->ydim_) height = t->ydim_ - sy; | |
| 2656 | - if (width < 0) return -1; | |
| 2657 | -- if (sx + width > t->xdim_) width = t->xdim_ - sx; | |
| 2658 | -+ if ((unsigned)sx + (unsigned)width > t->xdim_) width = t->xdim_ - sx; | |
| 2659 | - | |
| 2660 | - /* XXX Clear with correct background color */ | |
| 2661 | - (*t->r_->clear_)(t->r_, | |
| 2662 | -@@ -107,10 +115,10 @@ | |
| 2663 | - char c0 = c; | |
| 2664 | - RC_color rfg, rbg; | |
| 2665 | - | |
| 2666 | -- if (y < 0 || y >= t->ydim_) return -1; | |
| 2667 | -- if (x < 0 || x >= t->xdim_) return -1; | |
| 2668 | -+ if (y < 0 || (unsigned)y >= t->ydim_) return -1; | |
| 2669 | -+ if (x < 0 || (unsigned)x >= t->xdim_) return -1; | |
| 2670 | - | |
| 2671 | -- if (t->curson_ && t->ypos_ == y && t->xpos_ == x) { | |
| 2672 | -+ if (t->curson_ && t->ypos_ == (unsigned)y && t->xpos_ == (unsigned)x) { | |
| 2673 | - rfg = t->bg_; rbg = t->fg_; | |
| 2674 | - } else { | |
| 2675 | - rfg = t->fg_; rbg = t->bg_; | |
| 2676 | -@@ -126,9 +134,9 @@ | |
| 2677 | - { | |
| 2678 | - struct rfont *f = t->f_; | |
| 2679 | - | |
| 2680 | -- if (y < 0 || y >= t->ydim_) return -1; | |
| 2681 | -- if (x < 0 || x >= t->xdim_) return -1; | |
| 2682 | -- if (x + count >= t->xdim_) count = t->xdim_ - x; | |
| 2683 | -+ if (y < 0 || (unsigned)y >= t->ydim_) return -1; | |
| 2684 | -+ if (x < 0 || (unsigned)x >= t->xdim_) return -1; | |
| 2685 | -+ if ((unsigned)x + (unsigned)count >= t->xdim_) count = t->xdim_ - x; | |
| 2686 | - | |
| 2687 | - (*t->r_->render_)(t->r_, y*f->height_, x*f->width_, | |
| 2688 | - s, count, t->bg_, t->fg_, f); | |
| 2689 | -@@ -200,8 +208,8 @@ | |
| 2690 | - | |
| 2691 | - rc = 0; | |
| 2692 | - if (dir == SM_UP) { | |
| 2693 | -- if (d < 0 || d >= t->ydim_) return -1; | |
| 2694 | -- if (b <= d || b > t->ydim_) return -1; | |
| 2695 | -+ if (d < 0 || (unsigned)d >= t->ydim_) return -1; | |
| 2696 | -+ if (b <= d || (unsigned)b > t->ydim_) return -1; | |
| 2697 | - if (d + count >= b) count = b - d; | |
| 2698 | - if (d + count >= b) count = b - d; | |
| 2699 | - (*t->r_->yscroll_)(t->r_, | |
| 2700 | -@@ -213,8 +221,8 @@ | |
| 2701 | - count*f->height_, raster_qwidth(t->r_), | |
| 2702 | - t->bg_); | |
| 2703 | - } else if (dir == SM_DOWN) { | |
| 2704 | -- if (d < 0 || d >= t->ydim_) return -1; | |
| 2705 | -- if (b <= d || b > t->ydim_) return -1; | |
| 2706 | -+ if (d < 0 || (unsigned)d >= t->ydim_) return -1; | |
| 2707 | -+ if (b <= d || (unsigned)b > t->ydim_) return -1; | |
| 2708 | - if (d + count >= b) count = b - d; | |
| 2709 | - (*t->r_->yscroll_)(t->r_, | |
| 2710 | - d*f->height_, 0, | |
| 2711 | -diff -ruN proll_18.orig/src/hme.c proll-patch-15/src/hme.c | |
| 2712 | ---- proll_18.orig/src/hme.c 2002-07-23 05:52:52.000000000 +0000 | |
| 2713 | -+++ proll-patch-15/src/hme.c 2005-04-16 06:16:20.000000000 +0000 | |
| 2714 | -@@ -655,10 +655,10 @@ | |
| 2715 | - unsigned int flags, | |
| 2716 | - unsigned int addr) | |
| 2717 | - { | |
| 2718 | -- __asm__ __volatile__(" | |
| 2719 | -- stwa %3, [%0] %2 | |
| 2720 | -- stwa %4, [%1] %2 | |
| 2721 | --" : /* no outputs */ | |
| 2722 | -+ __asm__ __volatile__( | |
| 2723 | -+ "stwa %3, [%0] %2\n\t" | |
| 2724 | -+ "stwa %4, [%1] %2\n\t" | |
| 2725 | -+ : /* no outputs */ | |
| 2726 | - : "r" (&rp->rx_addr), "r" (&rp->rx_flags), | |
| 2727 | - "i" (ASI_PL), "r" (addr), "r" (flags)); | |
| 2728 | - } | |
| 2729 | -@@ -667,10 +667,10 @@ | |
| 2730 | - unsigned int flags, | |
| 2731 | - unsigned int addr) | |
| 2732 | - { | |
| 2733 | -- __asm__ __volatile__(" | |
| 2734 | -- stwa %3, [%0] %2 | |
| 2735 | -- stwa %4, [%1] %2 | |
| 2736 | --" : /* no outputs */ | |
| 2737 | -+ __asm__ __volatile__( | |
| 2738 | -+ "stwa %3, [%0] %2\n\t" | |
| 2739 | -+ "stwa %4, [%1] %2\n\t" | |
| 2740 | -+ : /* no outputs */ | |
| 2741 | - : "r" (&tp->tx_addr), "r" (&tp->tx_flags), | |
| 2742 | - "i" (ASI_PL), "r" (addr), "r" (flags)); | |
| 2743 | - } | |
| 2744 | -@@ -2404,7 +2404,7 @@ | |
| 2745 | - TXD(("[%d]", elem)); | |
| 2746 | - this = &txbase[elem]; | |
| 2747 | - #ifdef __sparc_v9__ | |
| 2748 | -- __asm__ __volatile__("lduwa [%1] %2, %0" | |
| 2749 | -+ __asm__ __volatile__("lduwa [%1] %2, %0\n\t" | |
| 2750 | - : "=r" (flags) | |
| 2751 | - : "r" (&this->tx_flags), "i" (ASI_PL)); | |
| 2752 | - #else | |
| 2753 | -@@ -2447,7 +2447,7 @@ | |
| 2754 | - RXD(("RX<")); | |
| 2755 | - this = &rxbase[elem]; | |
| 2756 | - #ifdef __sparc_v9__ | |
| 2757 | -- __asm__ __volatile__("lduwa [%1] %2, %0" | |
| 2758 | -+ __asm__ __volatile__("lduwa [%1] %2, %0\n\t" | |
| 2759 | - : "=r" (flags) | |
| 2760 | - : "r" (&this->rx_flags), "i" (ASI_PL)); | |
| 2761 | - #else | |
| 2762 | -@@ -2530,7 +2530,7 @@ | |
| 2763 | - elem = NEXT_RX(elem); | |
| 2764 | - this = &rxbase[elem]; | |
| 2765 | - #ifdef __sparc_v9__ | |
| 2766 | -- __asm__ __volatile__("lduwa [%1] %2, %0" | |
| 2767 | -+ __asm__ __volatile__("lduwa [%1] %2, %0\n\t" | |
| 2768 | - : "=r" (flags) | |
| 2769 | - : "r" (&this->rx_flags), "i" (ASI_PL)); | |
| 2770 | - #else | |
| 2771 | -diff -ruN proll_18.orig/src/iommu.c proll-patch-15/src/iommu.c | |
| 2772 | ---- proll_18.orig/src/iommu.c 2002-07-23 05:52:49.000000000 +0000 | |
| 2773 | -+++ proll-patch-15/src/iommu.c 2005-08-14 10:08:17.000000000 +0000 | |
| 2774 | -@@ -36,7 +36,7 @@ | |
| 2775 | - unsigned int pa, ba; | |
| 2776 | - unsigned int npages; | |
| 2777 | - unsigned int mva, mpa; | |
| 2778 | -- int i; | |
| 2779 | -+ unsigned int i; | |
| 2780 | - unsigned int *iopte; | |
| 2781 | - | |
| 2782 | - npages = (size + (PAGE_SIZE-1)) / PAGE_SIZE; | |
| 2783 | -diff -ruN proll_18.orig/src/lat7_2.bm proll-patch-15/src/lat7_2.bm | |
| 2784 | ---- proll_18.orig/src/lat7_2.bm 1999-02-27 05:48:54.000000000 +0000 | |
| 2785 | -+++ proll-patch-15/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 | |
| 2786 | -@@ -1,6 +1,6 @@ | |
| 2787 | - #define lat7_2_width 128 | |
| 2788 | - #define lat7_2_height 88 | |
| 2789 | --static unsigned char lat7_2_bits[] = { | |
| 2790 | -+static unsigned const char lat7_2_bits[] = { | |
| 2791 | - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2792 | - 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18, | |
| 2793 | - 0x22, 0x22, 0x18, 0x00, 0x00, 0x18, 0x18, 0xff, 0x18, 0x00, 0x12, 0x02, | |
| 2794 | -diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch-15/src/lat7_2_swapped.bm | |
| 2795 | ---- proll_18.orig/src/lat7_2_swapped.bm 1970-01-01 00:00:00.000000000 +0000 | |
| 2796 | -+++ proll-patch-15/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 | |
| 2797 | -@@ -0,0 +1,121 @@ | |
| 2798 | -+#define lat7_2_width 128 | |
| 2799 | -+#define lat7_2_height 88 | |
| 2800 | -+static unsigned const char lat7_2_bits[] = { | |
| 2801 | -+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2802 | -+ 0x55, 0x00, 0x2a, 0x00, 0x55, 0x00, 0x2a, 0x00, 0x55, 0x00, 0x00, 0x48, | |
| 2803 | -+ 0x48, 0x78, 0x48, 0x5f, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x78, 0x40, | |
| 2804 | -+ 0x70, 0x40, 0x4f, 0x08, 0x0e, 0x08, 0x08, 0x00, 0x00, 0x30, 0x40, 0x40, | |
| 2805 | -+ 0x40, 0x3e, 0x09, 0x0e, 0x0a, 0x09, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, | |
| 2806 | -+ 0x7f, 0x08, 0x0e, 0x08, 0x08, 0x00, 0x00, 0x0e, 0x0a, 0x0e, 0x00, 0x00, | |
| 2807 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, | |
| 2808 | -+ 0x7e, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x54, 0x4c, 0x54, 0x10, 0x10, | |
| 2809 | -+ 0x10, 0x1f, 0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x1f, 0x04, 0x04, 0x04, | |
| 2810 | -+ 0x04, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, | |
| 2811 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x00, | |
| 2812 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, | |
| 2813 | -+ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, | |
| 2814 | -+ 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, | |
| 2815 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, | |
| 2816 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2817 | -+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2818 | -+ 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2819 | -+ 0x00, 0x00, 0xff, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, | |
| 2820 | -+ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, | |
| 2821 | -+ 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, | |
| 2822 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x00, | |
| 2823 | -+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, | |
| 2824 | -+ 0x06, 0x0c, 0x18, 0x30, 0x18, 0x6c, 0x36, 0x18, 0x0c, 0x00, 0x00, 0x60, | |
| 2825 | -+ 0x30, 0x18, 0x0c, 0x18, 0x36, 0x6c, 0x18, 0x30, 0x00, 0x00, 0x7f, 0x36, | |
| 2826 | -+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x7e, | |
| 2827 | -+ 0x18, 0x7e, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36, 0x30, 0x78, | |
| 2828 | -+ 0x30, 0x72, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, | |
| 2829 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, | |
| 2830 | -+ 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2831 | -+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, | |
| 2832 | -+ 0x00, 0x00, 0x00, 0x66, 0x66, 0x22, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2833 | -+ 0x00, 0x00, 0x36, 0x7f, 0x36, 0x36, 0x36, 0x7f, 0x36, 0x00, 0x00, 0x00, | |
| 2834 | -+ 0x00, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, | |
| 2835 | -+ 0x72, 0x56, 0x6c, 0x18, 0x36, 0x6a, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x18, | |
| 2836 | -+ 0x24, 0x28, 0x30, 0x4a, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, | |
| 2837 | -+ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x18, | |
| 2838 | -+ 0x18, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x18, 0x18, | |
| 2839 | -+ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x7e, 0x3c, | |
| 2840 | -+ 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, | |
| 2841 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, | |
| 2842 | -+ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, | |
| 2843 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, | |
| 2844 | -+ 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00, 0x00, 0x00, | |
| 2845 | -+ 0x00, 0x3c, 0x46, 0x4e, 0x5a, 0x72, 0x62, 0x3c, 0x00, 0x00, 0x00, 0x00, | |
| 2846 | -+ 0x18, 0x38, 0x58, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, | |
| 2847 | -+ 0x66, 0x06, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, | |
| 2848 | -+ 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, | |
| 2849 | -+ 0x66, 0x7e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x60, 0x7c, 0x66, | |
| 2850 | -+ 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x60, 0x7c, 0x66, 0x66, | |
| 2851 | -+ 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x46, 0x06, 0x0c, 0x18, 0x30, | |
| 2852 | -+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, | |
| 2853 | -+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x3c, 0x00, | |
| 2854 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, | |
| 2855 | -+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00, | |
| 2856 | -+ 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, | |
| 2857 | -+ 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, | |
| 2858 | -+ 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, | |
| 2859 | -+ 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x5e, | |
| 2860 | -+ 0x56, 0x5e, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, 0x66, | |
| 2861 | -+ 0x7e, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x66, | |
| 2862 | -+ 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, | |
| 2863 | -+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, | |
| 2864 | -+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x62, 0x60, 0x78, 0x60, 0x62, 0x7e, 0x00, | |
| 2865 | -+ 0x00, 0x00, 0x00, 0x7e, 0x62, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, 0x00, | |
| 2866 | -+ 0x00, 0x00, 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, | |
| 2867 | -+ 0x00, 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, | |
| 2868 | -+ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, | |
| 2869 | -+ 0x46, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6c, | |
| 2870 | -+ 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, | |
| 2871 | -+ 0x60, 0x60, 0x62, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x41, 0x63, 0x77, 0x7f, | |
| 2872 | -+ 0x6b, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x76, 0x7e, 0x6e, | |
| 2873 | -+ 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, | |
| 2874 | -+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, | |
| 2875 | -+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6e, 0x3c, 0x02, | |
| 2876 | -+ 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x00, 0x00, | |
| 2877 | -+ 0x00, 0x00, 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, | |
| 2878 | -+ 0x00, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, | |
| 2879 | -+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, | |
| 2880 | -+ 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, | |
| 2881 | -+ 0x63, 0x6b, 0x6b, 0x7f, 0x36, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3c, | |
| 2882 | -+ 0x18, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, | |
| 2883 | -+ 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x46, 0x0c, 0x18, 0x30, | |
| 2884 | -+ 0x62, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, | |
| 2885 | -+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, | |
| 2886 | -+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, | |
| 2887 | -+ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2888 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, | |
| 2889 | -+ 0x00, 0x08, 0x10, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2890 | -+ 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, | |
| 2891 | -+ 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2892 | -+ 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, | |
| 2893 | -+ 0x3e, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, | |
| 2894 | -+ 0x7e, 0x60, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36, 0x30, 0x30, 0x78, | |
| 2895 | -+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, | |
| 2896 | -+ 0x3e, 0x06, 0x3c, 0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, | |
| 2897 | -+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x1c, 0x00, | |
| 2898 | -+ 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, | |
| 2899 | -+ 0x00, 0x00, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x7c, 0x66, 0x00, 0x00, 0x00, | |
| 2900 | -+ 0x00, 0x60, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, | |
| 2901 | -+ 0x00, 0x00, 0x76, 0x7f, 0x6b, 0x6b, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2902 | -+ 0x00, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 2903 | -+ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, | |
| 2904 | -+ 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, | |
| 2905 | -+ 0x66, 0x66, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x72, 0x60, | |
| 2906 | -+ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x60, 0x3c, 0x06, | |
| 2907 | -+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x78, 0x30, 0x30, 0x36, 0x1c, | |
| 2908 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3a, 0x00, | |
| 2909 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, | |
| 2910 | -+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x6b, 0x6b, 0x6b, 0x36, 0x00, 0x00, 0x00, | |
| 2911 | -+ 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, | |
| 2912 | -+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x3c, 0x00, 0x00, 0x00, | |
| 2913 | -+ 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, | |
| 2914 | -+ 0x18, 0x30, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, | |
| 2915 | -+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x30, 0x18, 0x18, 0x0c, | |
| 2916 | -+ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00, | |
| 2917 | -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, | |
| 2918 | -+ 0x00, 0x00, 0x00, 0x00}; | |
| 2919 | -diff -ruN proll_18.orig/src/le.c proll-patch-15/src/le.c | |
| 2920 | ---- proll_18.orig/src/le.c 2002-07-23 05:52:49.000000000 +0000 | |
| 2921 | -+++ proll-patch-15/src/le.c 2005-04-16 06:16:20.000000000 +0000 | |
| 2922 | -@@ -185,8 +185,6 @@ | |
| 2923 | - unsigned short rap; /* register address port */ | |
| 2924 | - }; | |
| 2925 | - | |
| 2926 | --int sparc_lance_debug = 2; | |
| 2927 | -- | |
| 2928 | - /* The Lance uses 24 bit addresses */ | |
| 2929 | - /* On the Sun4c the DVMA will provide the remaining bytes for us */ | |
| 2930 | - /* On the Sun4m we have to instruct the ledma to provide them */ | |
| 2931 | -@@ -771,7 +769,7 @@ | |
| 2932 | - /* Clear the slack of the packet, do I need this? */ | |
| 2933 | - /* For a firewall its a good idea - AC */ | |
| 2934 | - if (len != skblen) | |
| 2935 | -- bzero((char *) &ib->tx_buf [entry][skblen], len - skblen); | |
| 2936 | -+ memset((char *) &ib->tx_buf [entry][skblen], 0, len - skblen); | |
| 2937 | - | |
| 2938 | - /* Now, give the packet to the lance */ | |
| 2939 | - ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN); | |
| 2940 | -diff -ruN proll_18.orig/src/net.h proll-patch-15/src/net.h | |
| 2941 | ---- proll_18.orig/src/net.h 1999-12-15 17:20:17.000000000 +0000 | |
| 2942 | -+++ proll-patch-15/src/net.h 2005-08-14 10:17:02.000000000 +0000 | |
| 2943 | -@@ -124,7 +124,7 @@ | |
| 2944 | - extern int udp_open __P((t_ipaddr daddr, int source, int dest)); | |
| 2945 | - | |
| 2946 | - /* Read from a UDP socket */ | |
| 2947 | --extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); | |
| 2948 | -+extern int udp_read(char *buf, unsigned int bufsize, int timeout); | |
| 2949 | - | |
| 2950 | - /* Write to a UDP socket */ | |
| 2951 | - extern int udp_write __P((char *buf, int writelen)); | |
| 2952 | -diff -ruN proll_18.orig/src/netinit.c proll-patch-15/src/netinit.c | |
| 2953 | ---- proll_18.orig/src/netinit.c 2002-09-13 21:53:33.000000000 +0000 | |
| 2954 | -+++ proll-patch-15/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 | |
| 2955 | -@@ -49,13 +49,20 @@ | |
| 2956 | - unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */ | |
| 2957 | - t_ipaddr myipaddr; /* my own IP address */ | |
| 2958 | - t_ipaddr mynetmask; /* my own netmask */ | |
| 2959 | -- char *net_module_name; /* name of init module */ | |
| 2960 | - t_ipaddr servaddr; /* IP of RARP&TFTP server */ | |
| 2961 | - | |
| 2962 | - /* Broadcast hardware address */ | |
| 2963 | --unsigned char bcasthw[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; | |
| 2964 | -+const unsigned char bcasthw[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; | |
| 2965 | - | |
| 2966 | - | |
| 2967 | -+unsigned int seed; | |
| 2968 | -+ | |
| 2969 | -+/* This is taken from x86 to be used in network kernel. Returns 15 bits. */ | |
| 2970 | -+short int random() | |
| 2971 | -+{ | |
| 2972 | -+ seed = (seed + 23968)*0x015A4E35 >> 1; | |
| 2973 | -+ return seed & 0x7FFF; | |
| 2974 | -+} | |
| 2975 | - | |
| 2976 | - /* | |
| 2977 | - ************************************************************************** | |
| 2978 | -@@ -104,10 +111,17 @@ | |
| 2979 | - */ | |
| 2980 | - void init_net() | |
| 2981 | - { | |
| 2982 | -+ /* Avoid data segment allocations */ | |
| 2983 | -+ seed = 151; | |
| 2984 | -+ | |
| 2985 | - /* Initialize the different network layer modules */ | |
| 2986 | - init_packet(); | |
| 2987 | -- if (!init_arp() || !init_udp()) { | |
| 2988 | -- printf("\nERROR: init_%s\n", net_module_name); | |
| 2989 | -+ if (!init_arp()) { | |
| 2990 | -+ printf("\nERROR: init_arp\n"); | |
| 2991 | -+ fatal(); | |
| 2992 | -+ } | |
| 2993 | -+ if (!init_udp()) { | |
| 2994 | -+ printf("\nERROR: init_udp\n"); | |
| 2995 | - fatal(); | |
| 2996 | - } | |
| 2997 | - } | |
| 2998 | -diff -ruN proll_18.orig/src/netpriv.h proll-patch-15/src/netpriv.h | |
| 2999 | ---- proll_18.orig/src/netpriv.h 1999-04-27 05:39:37.000000000 +0000 | |
| 3000 | -+++ proll-patch-15/src/netpriv.h 2005-08-14 10:12:20.000000000 +0000 | |
| 3001 | -@@ -83,7 +83,7 @@ | |
| 3002 | - */ | |
| 3003 | - struct device *dev; | |
| 3004 | - char *data; | |
| 3005 | -- int len; | |
| 3006 | -+ unsigned int len; | |
| 3007 | - int protocol; | |
| 3008 | - unsigned char ip_summed; | |
| 3009 | - }; | |
| 3010 | -@@ -130,10 +130,9 @@ | |
| 3011 | - * | |
| 3012 | - */ | |
| 3013 | - extern unsigned char myhwaddr[ETH_ALEN]; /* my own hardware address */ | |
| 3014 | --extern unsigned char bcasthw[ETH_ALEN]; /* broadcast hardware addr */ | |
| 3015 | -+extern const unsigned char bcasthw[ETH_ALEN]; /* broadcast hardware addr */ | |
| 3016 | - extern t_ipaddr myipaddr; /* my own IP address */ | |
| 3017 | - extern t_ipaddr mynetmask; /* netmask for my network */ | |
| 3018 | --extern char *net_module_name; /* initialized module's name */ | |
| 3019 | - extern t_ipaddr servaddr; /* server IP address */ | |
| 3020 | - | |
| 3021 | - | |
| 3022 | -@@ -150,7 +149,7 @@ | |
| 3023 | - extern unsigned char *reg_type __P((int typeval, int (* receive)())); | |
| 3024 | - | |
| 3025 | - /* Write a packet to the network */ | |
| 3026 | --extern int write_packet __P((int bufsize, int typeval, unsigned char *addr)); | |
| 3027 | -+extern int write_packet __P((int bufsize, int typeval, const unsigned char *addr)); | |
| 3028 | - | |
| 3029 | - /* Empty read buffer */ | |
| 3030 | - extern void empty_buf __P((void)); | |
| 3031 | -diff -ruN proll_18.orig/src/openprom.h proll-patch-15/src/openprom.h | |
| 3032 | ---- proll_18.orig/src/openprom.h 2002-07-14 02:26:30.000000000 +0000 | |
| 3033 | -+++ proll-patch-15/src/openprom.h 2005-05-13 16:23:14.000000000 +0000 | |
| 3034 | -@@ -54,29 +54,29 @@ | |
| 3035 | - }; | |
| 3036 | - | |
| 3037 | - struct linux_mem_v0 { | |
| 3038 | -- struct linux_mlist_v0 **v0_totphys; | |
| 3039 | -- struct linux_mlist_v0 **v0_prommap; | |
| 3040 | -- struct linux_mlist_v0 **v0_available; /* What we can use */ | |
| 3041 | -+ struct linux_mlist_v0 * const *v0_totphys; | |
| 3042 | -+ struct linux_mlist_v0 * const *v0_prommap; | |
| 3043 | -+ struct linux_mlist_v0 * const *v0_available; /* What we can use */ | |
| 3044 | - }; | |
| 3045 | - | |
| 3046 | - /* Arguments sent to the kernel from the boot prompt. */ | |
| 3047 | - struct linux_arguments_v0 { | |
| 3048 | -- char *argv[8]; | |
| 3049 | -+ const char *argv[8]; | |
| 3050 | - char args[100]; | |
| 3051 | - char boot_dev[2]; | |
| 3052 | - int boot_dev_ctrl; | |
| 3053 | - int boot_dev_unit; | |
| 3054 | - int dev_partition; | |
| 3055 | -- char *kernel_file_name; | |
| 3056 | -+ const char *kernel_file_name; | |
| 3057 | - void *aieee1; /* XXX */ | |
| 3058 | - }; | |
| 3059 | - | |
| 3060 | - /* V2 and up boot things. */ | |
| 3061 | - struct linux_bootargs_v2 { | |
| 3062 | -- char **bootpath; | |
| 3063 | -- char **bootargs; | |
| 3064 | -- int *fd_stdin; | |
| 3065 | -- int *fd_stdout; | |
| 3066 | -+ const char **bootpath; | |
| 3067 | -+ const char **bootargs; | |
| 3068 | -+ const int *fd_stdin; | |
| 3069 | -+ const int *fd_stdout; | |
| 3070 | - }; | |
| 3071 | - | |
| 3072 | - /* The top level PROM vector. */ | |
| 3073 | -@@ -91,13 +91,13 @@ | |
| 3074 | - struct linux_mem_v0 pv_v0mem; | |
| 3075 | - | |
| 3076 | - /* Node operations. */ | |
| 3077 | -- struct linux_nodeops *pv_nodeops; | |
| 3078 | -+ const struct linux_nodeops *pv_nodeops; | |
| 3079 | - | |
| 3080 | - char **pv_bootstr; | |
| 3081 | - struct linux_dev_v0_funcs pv_v0devops; | |
| 3082 | - | |
| 3083 | -- char *pv_stdin; | |
| 3084 | -- char *pv_stdout; | |
| 3085 | -+ const char *pv_stdin; | |
| 3086 | -+ const char *pv_stdout; | |
| 3087 | - #define PROMDEV_KBD 0 /* input from keyboard */ | |
| 3088 | - #define PROMDEV_SCREEN 0 /* output to screen */ | |
| 3089 | - #define PROMDEV_TTYA 1 /* in/out to ttya */ | |
| 3090 | -@@ -127,7 +127,7 @@ | |
| 3091 | - void (*v2_eval)(char *str); | |
| 3092 | - } pv_fortheval; | |
| 3093 | - | |
| 3094 | -- struct linux_arguments_v0 **pv_v0bootargs; | |
| 3095 | -+ const struct linux_arguments_v0 * const *pv_v0bootargs; | |
| 3096 | - | |
| 3097 | - /* Get ether address. */ | |
| 3098 | - unsigned int (*pv_enaddr)(int d, char *enaddr); | |
| 3099 | -@@ -175,7 +175,7 @@ | |
| 3100 | - int (*no_proplen)(int node, char *name); | |
| 3101 | - int (*no_getprop)(int node, char *name, char *val); | |
| 3102 | - int (*no_setprop)(int node, char *name, char *val, int len); | |
| 3103 | -- char * (*no_nextprop)(int node, char *name); | |
| 3104 | -+ const char * (*no_nextprop)(int node, char *name); | |
| 3105 | - }; | |
| 3106 | - | |
| 3107 | - /* More fun PROM structures for device probing. */ | |
| 3108 | -diff -ruN proll_18.orig/src/packet.c proll-patch-15/src/packet.c | |
| 3109 | ---- proll_18.orig/src/packet.c 2000-02-11 04:56:45.000000000 +0000 | |
| 3110 | -+++ proll-patch-15/src/packet.c 2005-08-14 10:12:49.000000000 +0000 | |
| 3111 | -@@ -41,7 +41,7 @@ | |
| 3112 | - int aligner; | |
| 3113 | - } wbuf; | |
| 3114 | - static struct sk_buff *rskb; | |
| 3115 | --static int nqskb = 0; | |
| 3116 | -+static int nqskb; | |
| 3117 | - | |
| 3118 | - | |
| 3119 | - void init_packet() | |
| 3120 | -@@ -62,6 +62,8 @@ | |
| 3121 | - for (i = 0; i < MAXSKBS; i++) { | |
| 3122 | - skev[i].skb.allocn = i; | |
| 3123 | - } | |
| 3124 | -+ | |
| 3125 | -+ nqskb = 0; | |
| 3126 | - } | |
| 3127 | - | |
| 3128 | - unsigned char *reg_type(int ptype, int (*func)()) | |
| 3129 | -@@ -81,7 +83,7 @@ | |
| 3130 | - return wbuf.s; | |
| 3131 | - } | |
| 3132 | - | |
| 3133 | --int write_packet(int leng, int type, unsigned char *dst) | |
| 3134 | -+int write_packet(int leng, int type, const unsigned char *dst) | |
| 3135 | - { | |
| 3136 | - struct sk_buff *skb; | |
| 3137 | - unsigned char *s; | |
| 3138 | -@@ -209,12 +211,12 @@ | |
| 3139 | - /* | |
| 3140 | - */ | |
| 3141 | - void | |
| 3142 | --eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, int base) | |
| 3143 | -+eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, __attribute__((unused)) int base) | |
| 3144 | - { | |
| 3145 | - bcopy(src, dest->data, len); | |
| 3146 | - } | |
| 3147 | - | |
| 3148 | --unsigned short eth_type_trans(struct sk_buff *skb, struct device *dev) | |
| 3149 | -+unsigned short eth_type_trans(struct sk_buff *skb, __attribute__((unused)) struct device *dev) | |
| 3150 | - { | |
| 3151 | - unsigned char *s = skb->data + 12; | |
| 3152 | - return s[0] << 8 | s[1]; /* Network order word */ | |
| 3153 | -diff -ruN proll_18.orig/src/printf.c proll-patch-15/src/printf.c | |
| 3154 | ---- proll_18.orig/src/printf.c 1999-03-19 07:03:59.000000000 +0000 | |
| 3155 | -+++ proll-patch-15/src/printf.c 2005-08-14 10:07:26.000000000 +0000 | |
| 3156 | -@@ -19,7 +19,7 @@ | |
| 3157 | - static void printn(struct prf_fp *, unsigned long, unsigned int); | |
| 3158 | - static void putchar(char, struct prf_fp *); | |
| 3159 | - | |
| 3160 | --static char hextab[] = "0123456789ABCDEF"; | |
| 3161 | -+static const char hextab[] = "0123456789ABCDEF"; | |
| 3162 | - | |
| 3163 | - /* | |
| 3164 | - * Scaled down version of C Library printf. | |
| 3165 | -@@ -41,7 +41,7 @@ | |
| 3166 | - void | |
| 3167 | - prf(struct prf_fp *filog, char *fmt, va_list adx) | |
| 3168 | - { | |
| 3169 | -- register c; | |
| 3170 | -+ register int c; | |
| 3171 | - char *s; | |
| 3172 | - | |
| 3173 | - for(;;) { | |
| 3174 | -@@ -60,7 +60,7 @@ | |
| 3175 | - putchar(va_arg(adx,unsigned), filog); | |
| 3176 | - } else if(c == 's') { | |
| 3177 | - s = va_arg(adx,char*); | |
| 3178 | -- while(c = *s++) | |
| 3179 | -+ while((c = *s++)) | |
| 3180 | - putchar(c,filog); | |
| 3181 | - } else if (c == 'l' || c == 'O') { | |
| 3182 | - printn(filog, (long)va_arg(adx,long), c=='l'?10:8); | |
| 3183 | -@@ -77,10 +77,6 @@ | |
| 3184 | - char prbuf[24]; | |
| 3185 | - register char *cp; | |
| 3186 | - | |
| 3187 | -- if (b == 10 && n < 0) { | |
| 3188 | -- putchar('-',filog); | |
| 3189 | -- n = (~n) + 1; /* n = -n */ | |
| 3190 | -- } | |
| 3191 | - cp = prbuf; | |
| 3192 | - do | |
| 3193 | - *cp++ = hextab[(unsigned int)(n%b)]; | |
| 3194 | -diff -ruN proll_18.orig/src/rconsole.c proll-patch-15/src/rconsole.c | |
| 3195 | ---- proll_18.orig/src/rconsole.c 1999-01-16 07:16:55.000000000 +0000 | |
| 3196 | -+++ proll-patch-15/src/rconsole.c 2005-08-14 10:25:53.000000000 +0000 | |
| 3197 | -@@ -28,12 +28,18 @@ | |
| 3198 | - * move to California. Only plain lat7 survived. | |
| 3199 | - * I recreated lat7-1 changes in lat7-2. --zaitcev | |
| 3200 | - */ | |
| 3201 | -+#ifdef ORIG | |
| 3202 | - #include "lat7_2.bm" /* lat7_1.bm */ | |
| 3203 | -+#else | |
| 3204 | -+#include "lat7_2_swapped.bm" /* lat7_1.bm */ | |
| 3205 | -+#endif | |
| 3206 | - #define LAT7_NCHARS 128 | |
| 3207 | - #define LAT7_HEIGHT 11 | |
| 3208 | - #define LAT7_WIDTH 8 | |
| 3209 | - | |
| 3210 | -+#ifdef ORIG | |
| 3211 | - static Rf_scan lat7_body[ LAT7_NCHARS*LAT7_HEIGHT ]; | |
| 3212 | -+#endif | |
| 3213 | - | |
| 3214 | - #if 1 | |
| 3215 | - /* | |
| 3216 | -@@ -46,18 +52,18 @@ | |
| 3217 | - #endif | |
| 3218 | - | |
| 3219 | - static __inline__ void stfb_w(void *ptr, unsigned int data) { | |
| 3220 | -- __asm__ __volatile__ ("sta %0, [%1] %2" : : | |
| 3221 | -+ __asm__ __volatile__ ("sta %0, [%1] %2\n\t" : : | |
| 3222 | - "r" (data), "r" (ptr), "i" (ASI_M_BYPASS)); | |
| 3223 | - } | |
| 3224 | - | |
| 3225 | - static __inline__ void stfb_b(void *ptr, unsigned int data) { | |
| 3226 | -- __asm__ __volatile__ ("stba %0, [%1] %2" : : | |
| 3227 | -+ __asm__ __volatile__ ("stba %0, [%1] %2\n\t" : : | |
| 3228 | - "r" (data), "r" (ptr), "i" (ASI_M_BYPASS)); | |
| 3229 | - } | |
| 3230 | - | |
| 3231 | - static __inline__ unsigned int ldfb_w(void *ptr) { | |
| 3232 | - unsigned int data; | |
| 3233 | -- __asm__ __volatile__ ("lda [%1] %2, %0" : | |
| 3234 | -+ __asm__ __volatile__ ("lda [%1] %2, %0\n\t" : | |
| 3235 | - "=r" (data) : | |
| 3236 | - "r" (ptr), "i" (ASI_M_BYPASS)); | |
| 3237 | - return data; | |
| 3238 | -@@ -65,7 +71,7 @@ | |
| 3239 | - | |
| 3240 | - static __inline__ unsigned int ldfb_b(void *ptr) { | |
| 3241 | - unsigned int data; | |
| 3242 | -- __asm__ __volatile__ ("lduba [%1] %2, %0" : | |
| 3243 | -+ __asm__ __volatile__ ("lduba [%1] %2, %0\n\t" : | |
| 3244 | - "=r" (data) : | |
| 3245 | - "r" (ptr), "i" (ASI_M_BYPASS)); | |
| 3246 | - return data; | |
| 3247 | -@@ -94,6 +100,7 @@ | |
| 3248 | - | |
| 3249 | - #endif | |
| 3250 | - | |
| 3251 | -+#ifdef ORIG | |
| 3252 | - static inline int swapbits(int w0) | |
| 3253 | - { | |
| 3254 | - int w1 = 0; | |
| 3255 | -@@ -105,13 +112,16 @@ | |
| 3256 | - } | |
| 3257 | - return w1; | |
| 3258 | - } | |
| 3259 | -+#endif | |
| 3260 | - | |
| 3261 | - void font_cons_7(struct rfont *p) | |
| 3262 | - { | |
| 3263 | -+#ifdef ORIG | |
| 3264 | - int x; | |
| 3265 | - int col = 0; | |
| 3266 | - int row = 0; | |
| 3267 | - int erow = 0; | |
| 3268 | -+ | |
| 3269 | - for (x = 0; x < LAT7_NCHARS*LAT7_HEIGHT; x++ ) { | |
| 3270 | - lat7_body[ (erow * lat7_2_width/8 + col) * LAT7_HEIGHT + row ] = | |
| 3271 | - swapbits(lat7_2_bits[x]) & 0xFF; | |
| 3272 | -@@ -124,6 +134,9 @@ | |
| 3273 | - } | |
| 3274 | - } | |
| 3275 | - p->body_ = lat7_body; | |
| 3276 | -+#else | |
| 3277 | -+ p->body_ = lat7_2_bits; | |
| 3278 | -+#endif | |
| 3279 | - p->nchars_ = LAT7_NCHARS; | |
| 3280 | - p->width_ = LAT7_WIDTH; | |
| 3281 | - p->height_ = LAT7_HEIGHT; | |
| 3282 | -@@ -175,7 +188,7 @@ | |
| 3283 | - r->render_ = p->render_; | |
| 3284 | - } | |
| 3285 | - | |
| 3286 | --void raster_dest(struct raster *r) | |
| 3287 | -+void raster_dest(__attribute((unused)) struct raster *r) | |
| 3288 | - { | |
| 3289 | - } | |
| 3290 | - | |
| 3291 | -diff -ruN proll_18.orig/src/rconsole.h proll-patch-15/src/rconsole.h | |
| 3292 | ---- proll_18.orig/src/rconsole.h 1999-01-16 05:00:59.000000000 +0000 | |
| 3293 | -+++ proll-patch-15/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 | |
| 3294 | -@@ -13,10 +13,10 @@ | |
| 3295 | - */ | |
| 3296 | - | |
| 3297 | - #define RF_MAXWIDTH 16 | |
| 3298 | --typedef unsigned short Rf_scan; /* __w16 to be used */ | |
| 3299 | -+typedef unsigned char Rf_scan; /* __w16 to be used */ | |
| 3300 | - | |
| 3301 | - struct rfont { | |
| 3302 | -- Rf_scan *body_; | |
| 3303 | -+ const Rf_scan *body_; | |
| 3304 | - int nchars_; /* 128 for ASCII ... 65536 for Unicode */ | |
| 3305 | - int width_; /* [Pixels]. Maximum size is 16. */ | |
| 3306 | - int height_; /* [Pixels == scan lines]. */ | |
| 3307 | -diff -ruN proll_18.orig/src/romlib.h proll-patch-15/src/romlib.h | |
| 3308 | ---- proll_18.orig/src/romlib.h 1999-04-20 04:26:45.000000000 +0000 | |
| 3309 | -+++ proll-patch-15/src/romlib.h 2005-04-16 20:32:49.000000000 +0000 | |
| 3310 | -@@ -72,13 +72,13 @@ | |
| 3311 | - */ | |
| 3312 | - #define memcpy(dst, src, len) bcopy(src, dst, len) | |
| 3313 | - #define memcmp(x1, x2, len) bcmp(x1, x2, len) | |
| 3314 | --#define memset(p, len, zero) bzero(p, len) | |
| 3315 | --extern void bcopy(void *b1, void *b2, int length); | |
| 3316 | --extern int bcmp(void *b1, void *b2, int length); | |
| 3317 | --extern void bzero(void *b, int c); | |
| 3318 | -+extern void bcopy(const void *b1, void *b2, int length); | |
| 3319 | -+extern int bcmp(const void *b1, const void *b2, int length); | |
| 3320 | -+typedef unsigned int size_t; | |
| 3321 | -+extern void *memset(void *p, int c, size_t len); | |
| 3322 | - /* gcc complains about "conflicting types for builtin function strlen". */ | |
| 3323 | - #define strlen(s) ssize(s) | |
| 3324 | --extern int ssize(char *s); | |
| 3325 | -+extern int ssize(const char *s); | |
| 3326 | - | |
| 3327 | - | |
| 3328 | - /* | |
| 3329 | -diff -ruN proll_18.orig/src/sched_4m.c proll-patch-15/src/sched_4m.c | |
| 3330 | ---- proll_18.orig/src/sched_4m.c 1999-04-27 05:48:51.000000000 +0000 | |
| 3331 | -+++ proll-patch-15/src/sched_4m.c 2005-08-14 10:18:14.000000000 +0000 | |
| 3332 | -@@ -108,7 +108,7 @@ | |
| 3333 | - static int set_bolt; /* Tick counter limit */ | |
| 3334 | - static struct handsc hndv[16]; | |
| 3335 | - | |
| 3336 | --static unsigned int intr_to_mask[16] = { | |
| 3337 | -+static unsigned const int intr_to_mask[16] = { | |
| 3338 | - 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0, | |
| 3339 | - 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3340 | - }; | |
| 3341 | -@@ -130,7 +130,7 @@ | |
| 3342 | - int /* 0 - not expired yet; <>0 - timer expired */ | |
| 3343 | - chk_timeout() | |
| 3344 | - { | |
| 3345 | -- int lim = (((1000000/HZ) + 1) << 10); | |
| 3346 | -+ unsigned int lim = (((1000000/HZ) + 1) << 10); | |
| 3347 | - unsigned int clear; | |
| 3348 | - unsigned int intc; | |
| 3349 | - int n; | |
| 3350 | -@@ -182,7 +182,7 @@ | |
| 3351 | - struct handsc *hndp; | |
| 3352 | - unsigned int mask; | |
| 3353 | - | |
| 3354 | -- if (irq < 0 || irq >= 16) { | |
| 3355 | -+ if (irq == 0 || irq >= 16) { | |
| 3356 | - printk("request_irq: bad irq %d\n", irq); | |
| 3357 | - return -1; | |
| 3358 | - } | |
| 3359 | -@@ -207,7 +207,7 @@ | |
| 3360 | - { | |
| 3361 | - struct handsc *hndp; | |
| 3362 | - | |
| 3363 | -- if (irq < 0 || irq >= 16) { | |
| 3364 | -+ if (irq == 0 || irq >= 16) { | |
| 3365 | - printk("free_irq: bad irq %d\n", irq); | |
| 3366 | - return; | |
| 3367 | - } | |
| 3368 | -diff -ruN proll_18.orig/src/swap.c proll-patch-15/src/swap.c | |
| 3369 | ---- proll_18.orig/src/swap.c 1970-01-01 00:00:00.000000000 +0000 | |
| 3370 | -+++ proll-patch-15/src/swap.c 2004-11-13 15:50:49.000000000 +0000 | |
| 3371 | -@@ -0,0 +1,21 @@ | |
| 3372 | -+// Convert the lat7 font so that no conversion is needed at runtime. | |
| 3373 | -+#define ORIG | |
| 3374 | -+#include "rconsole.c" | |
| 3375 | -+ | |
| 3376 | -+#include <stdio.h> | |
| 3377 | -+ | |
| 3378 | -+int main() | |
| 3379 | -+{ | |
| 3380 | -+ struct rfont p; | |
| 3381 | -+ int i; | |
| 3382 | -+ | |
| 3383 | -+ font_cons_7(&p); | |
| 3384 | -+ | |
| 3385 | -+ printf(" "); | |
| 3386 | -+ for (i = 0; i < LAT7_NCHARS*LAT7_HEIGHT; i++) { | |
| 3387 | -+ printf("0x%02x, ", p.body_[i]); | |
| 3388 | -+ if ((i % 12) == 11) | |
| 3389 | -+ printf("\n "); | |
| 3390 | -+ } | |
| 3391 | -+ printf("\n"); | |
| 3392 | -+} | |
| 3393 | -diff -ruN proll_18.orig/src/system.c proll-patch-15/src/system.c | |
| 3394 | ---- proll_18.orig/src/system.c 2002-07-23 05:52:49.000000000 +0000 | |
| 3395 | -+++ proll-patch-15/src/system.c 2005-04-16 06:16:20.000000000 +0000 | |
| 3396 | -@@ -298,8 +298,8 @@ | |
| 3397 | - } | |
| 3398 | - | |
| 3399 | - /* We need to start from LOADBASE, but kernel wants PAGE_SIZE. */ | |
| 3400 | -- pa = PAGE_SIZE; | |
| 3401 | -- for (va = PAGE_SIZE; va < LOWMEMSZ; va += PAGE_SIZE) { | |
| 3402 | -+ pa = 0; | |
| 3403 | -+ for (va = 0; va < LOWMEMSZ; va += PAGE_SIZE) { | |
| 3404 | - map_page(l1, va, pa, 0, highbase); | |
| 3405 | - pa += PAGE_SIZE; | |
| 3406 | - } | |
| 3407 | -@@ -507,30 +507,44 @@ | |
| 3408 | - { | |
| 3409 | - char *p; | |
| 3410 | - | |
| 3411 | -- if ((p = mem_alloc(t, size, align)) != 0) bzero(p, size); | |
| 3412 | -+ if ((p = mem_alloc(t, size, align)) != 0) memset(p, 0, size); | |
| 3413 | - return p; | |
| 3414 | - } | |
| 3415 | - | |
| 3416 | - /* | |
| 3417 | - * Library functions | |
| 3418 | - */ | |
| 3419 | --void bzero(void *s, int len) { | |
| 3420 | -- while (len--) *((char *)s)++ = 0; | |
| 3421 | -+void *memset(void *s, int c, size_t len) | |
| 3422 | -+{ | |
| 3423 | -+ void *p = s; | |
| 3424 | -+ | |
| 3425 | -+ while (len--) { | |
| 3426 | -+ *(char *)s = c; | |
| 3427 | -+ s++; | |
| 3428 | -+ } | |
| 3429 | -+ return p; | |
| 3430 | - } | |
| 3431 | - | |
| 3432 | --void bcopy(void *f, void *t, int len) { | |
| 3433 | -- while (len--) *((char *)t)++ = *((char *)f)++; | |
| 3434 | -+void bcopy(const void *f, void *t, int len) { | |
| 3435 | -+ while (len--) { | |
| 3436 | -+ *(char *)t = *(char *)f; | |
| 3437 | -+ f++; | |
| 3438 | -+ t++; | |
| 3439 | -+ } | |
| 3440 | - } | |
| 3441 | - | |
| 3442 | - /* Comparison is 7-bit */ | |
| 3443 | --int bcmp(void *s1, void *s2, int len) | |
| 3444 | -+int bcmp(const void *s1, const void *s2, int len) | |
| 3445 | - { | |
| 3446 | - int i; | |
| 3447 | - char ch; | |
| 3448 | - | |
| 3449 | - while (len--) { | |
| 3450 | -- ch = *((char *)s1)++; | |
| 3451 | -- if ((i = ch - *((char *)s2)++) != 0) | |
| 3452 | -+ ch = *(char *)s1; | |
| 3453 | -+ i = ch - *(char *)s2; | |
| 3454 | -+ s1++; | |
| 3455 | -+ s2++; | |
| 3456 | -+ if (i != 0) | |
| 3457 | - return i; | |
| 3458 | - if (ch == 0) | |
| 3459 | - return 0; | |
| 3460 | -@@ -538,8 +552,8 @@ | |
| 3461 | - return 0; | |
| 3462 | - } | |
| 3463 | - | |
| 3464 | --int strlen(char *s) { | |
| 3465 | -- char *p; | |
| 3466 | -+int strlen(const char *s) { | |
| 3467 | -+ const char *p; | |
| 3468 | - for (p = s; *p != 0; p++) { } | |
| 3469 | - return p - s; | |
| 3470 | - } | |
| 3471 | -@@ -560,14 +574,6 @@ | |
| 3472 | - va_end(x1); | |
| 3473 | - } | |
| 3474 | - | |
| 3475 | --/* This is taken from x86 to be used in network kernel. Returns 15 bits. */ | |
| 3476 | --short int random() | |
| 3477 | --{ | |
| 3478 | -- static unsigned int seed = 151; | |
| 3479 | -- seed = (seed + 23968)*0x015A4E35 >> 1; | |
| 3480 | -- return seed & 0x7FFF; | |
| 3481 | --} | |
| 3482 | -- | |
| 3483 | - void fatal() | |
| 3484 | - { | |
| 3485 | - printk("fatal."); | |
| 3486 | -diff -ruN proll_18.orig/src/system.h proll-patch-15/src/system.h | |
| 3487 | ---- proll_18.orig/src/system.h 2002-09-13 21:53:32.000000000 +0000 | |
| 3488 | -+++ proll-patch-15/src/system.h 2005-04-16 06:16:20.000000000 +0000 | |
| 3489 | -@@ -16,7 +16,7 @@ | |
| 3490 | - #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */ | |
| 3491 | - #define NCTX_SWIFT 0x100 | |
| 3492 | - | |
| 3493 | --#define MAX_BANKS 3 /* Allocation for all machines */ | |
| 3494 | -+#define MAX_BANKS 8 /* Allocation for all machines */ | |
| 3495 | - | |
| 3496 | - #ifndef __ASSEMBLY__ | |
| 3497 | - struct bank { | |
| 3498 | -@@ -164,10 +164,10 @@ | |
| 3499 | - | |
| 3500 | - extern __inline__ void setipl(unsigned long __orig_psr) | |
| 3501 | - { | |
| 3502 | -- __asm__ __volatile__(" | |
| 3503 | -- wr %0, 0x0, %%psr | |
| 3504 | -- nop; nop; nop | |
| 3505 | --" : /* no outputs */ | |
| 3506 | -+ __asm__ __volatile__( | |
| 3507 | -+ "wr %0, 0x0, %%psr\n\t" | |
| 3508 | -+ "nop; nop; nop\n\t" | |
| 3509 | -+ : /* no outputs */ | |
| 3510 | - : "r" (__orig_psr) | |
| 3511 | - : "memory", "cc"); | |
| 3512 | - } | |
| 3513 | -@@ -176,13 +176,13 @@ | |
| 3514 | - { | |
| 3515 | - unsigned long tmp; | |
| 3516 | - | |
| 3517 | -- __asm__ __volatile__(" | |
| 3518 | -- rd %%psr, %0 | |
| 3519 | -- nop; nop; nop; /* Sun4m + Cypress + SMP bug */ | |
| 3520 | -- or %0, %1, %0 | |
| 3521 | -- wr %0, 0x0, %%psr | |
| 3522 | -- nop; nop; nop | |
| 3523 | --" : "=r" (tmp) | |
| 3524 | -+ __asm__ __volatile__( | |
| 3525 | -+ "rd %%psr, %0\n\t" | |
| 3526 | -+ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */ | |
| 3527 | -+ "or %0, %1, %0\n\t" | |
| 3528 | -+ "wr %0, 0x0, %%psr\n\t" | |
| 3529 | -+ "nop; nop; nop\n\t" | |
| 3530 | -+ : "=r" (tmp) | |
| 3531 | - : "i" (PSR_PIL) | |
| 3532 | - : "memory"); | |
| 3533 | - } | |
| 3534 | -@@ -191,13 +191,13 @@ | |
| 3535 | - { | |
| 3536 | - unsigned long tmp; | |
| 3537 | - | |
| 3538 | -- __asm__ __volatile__(" | |
| 3539 | -- rd %%psr, %0 | |
| 3540 | -- nop; nop; nop; /* Sun4m + Cypress + SMP bug */ | |
| 3541 | -- andn %0, %1, %0 | |
| 3542 | -- wr %0, 0x0, %%psr | |
| 3543 | -- nop; nop; nop | |
| 3544 | --" : "=r" (tmp) | |
| 3545 | -+ __asm__ __volatile__( | |
| 3546 | -+ "rd %%psr, %0\n\t" | |
| 3547 | -+ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */ | |
| 3548 | -+ "andn %0, %1, %0\n\t" | |
| 3549 | -+ "wr %0, 0x0, %%psr\n\t" | |
| 3550 | -+ "nop; nop; nop\n\t" | |
| 3551 | -+ : "=r" (tmp) | |
| 3552 | - : "i" (PSR_PIL) | |
| 3553 | - : "memory"); | |
| 3554 | - } | |
| 3555 | -@@ -214,18 +214,18 @@ | |
| 3556 | - { | |
| 3557 | - unsigned long retval; | |
| 3558 | - | |
| 3559 | -- __asm__ __volatile__(" | |
| 3560 | -- rd %%psr, %0 | |
| 3561 | -- nop; nop; nop; /* Sun4m + Cypress + SMP bug */ | |
| 3562 | -- and %0, %2, %%g1 | |
| 3563 | -- and %1, %2, %%g2 | |
| 3564 | -- xorcc %%g1, %%g2, %%g0 | |
| 3565 | -- be 1f | |
| 3566 | -- nop | |
| 3567 | -- wr %0, %2, %%psr | |
| 3568 | -- nop; nop; nop; | |
| 3569 | --1: | |
| 3570 | --" : "=r" (retval) | |
| 3571 | -+ __asm__ __volatile__( | |
| 3572 | -+ "rd %%psr, %0\n\t" | |
| 3573 | -+ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */ | |
| 3574 | -+ "and %0, %2, %%g1\n\t" | |
| 3575 | -+ "and %1, %2, %%g2\n\t" | |
| 3576 | -+ "xorcc %%g1, %%g2, %%g0\n\t" | |
| 3577 | -+ "be 1f\n\t" | |
| 3578 | -+ "nop\n\t" | |
| 3579 | -+ "wr %0, %2, %%psr\n\t" | |
| 3580 | -+ "nop; nop; nop;\n\t" | |
| 3581 | -+ "1:\n\t" | |
| 3582 | -+ : "=r" (retval) | |
| 3583 | - : "r" (__new_psr), "i" (PSR_PIL) | |
| 3584 | - : "g1", "g2", "memory", "cc"); | |
| 3585 | - | |
| 3586 | -@@ -236,13 +236,13 @@ | |
| 3587 | - { | |
| 3588 | - unsigned long retval; | |
| 3589 | - | |
| 3590 | -- __asm__ __volatile__(" | |
| 3591 | -- rd %%psr, %0 | |
| 3592 | -- nop; nop; nop; /* Sun4m + Cypress + SMP bug */ | |
| 3593 | -- or %0, %1, %%g1 | |
| 3594 | -- wr %%g1, 0x0, %%psr | |
| 3595 | -- nop; nop; nop | |
| 3596 | --" : "=r" (retval) | |
| 3597 | -+ __asm__ __volatile__( | |
| 3598 | -+ "rd %%psr, %0\n\t" | |
| 3599 | -+ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */ | |
| 3600 | -+ "or %0, %1, %%g1\n\t" | |
| 3601 | -+ "wr %%g1, 0x0, %%psr\n\t" | |
| 3602 | -+ "nop; nop; nop\n\t" | |
| 3603 | -+ : "=r" (retval) | |
| 3604 | - : "i" (PSR_PIL) | |
| 3605 | - : "g1", "memory"); | |
| 3606 | - | |
| 3607 | -diff -ruN proll_18.orig/src/tftp.c proll-patch-15/src/tftp.c | |
| 3608 | ---- proll_18.orig/src/tftp.c 2002-09-13 21:53:34.000000000 +0000 | |
| 3609 | -+++ proll-patch-15/src/tftp.c 2005-08-14 10:16:15.000000000 +0000 | |
| 3610 | -@@ -127,7 +127,7 @@ | |
| 3611 | - int len; | |
| 3612 | - | |
| 3613 | - /* Read packet with timeout */ | |
| 3614 | -- len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT, CHR_ESC); | |
| 3615 | -+ len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT); | |
| 3616 | - if (len == 0) { | |
| 3617 | - printf("TFTP: Timeout\n"); | |
| 3618 | - return(ERR_TIMEOUT); | |
| 3619 | -diff -ruN proll_18.orig/src/udp.c proll-patch-15/src/udp.c | |
| 3620 | ---- proll_18.orig/src/udp.c 2001-12-24 05:12:53.000000000 +0000 | |
| 3621 | -+++ proll-patch-15/src/udp.c 2005-08-14 10:17:19.000000000 +0000 | |
| 3622 | -@@ -76,12 +76,9 @@ | |
| 3623 | - * | |
| 3624 | - * Open a new UDP socket. | |
| 3625 | - */ | |
| 3626 | --int udp_open(daddr, source, dest) | |
| 3627 | --t_ipaddr daddr; | |
| 3628 | --int source; | |
| 3629 | --int dest; | |
| 3630 | -+int udp_open(t_ipaddr daddr, int source, int dest) | |
| 3631 | - { | |
| 3632 | -- register unsigned char *addr; | |
| 3633 | -+ const unsigned char *addr; | |
| 3634 | - | |
| 3635 | - /* Set global variables */ | |
| 3636 | - usource = source; | |
| 3637 | -@@ -101,16 +98,13 @@ | |
| 3638 | - * | |
| 3639 | - * IP receiver routine | |
| 3640 | - */ | |
| 3641 | --static int ip_recv(buf, bufsize, addr) | |
| 3642 | --unsigned char *buf; | |
| 3643 | --int bufsize; | |
| 3644 | --unsigned char *addr; | |
| 3645 | -+static int ip_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) | |
| 3646 | - { | |
| 3647 | - struct iphdr *ipp = ((struct iphdr *)buf); | |
| 3648 | - struct udphdr *udpp = ((struct udphdr *)(buf + IP_MIN_HSIZE)); | |
| 3649 | - struct udp_pseudo psehdr; | |
| 3650 | - | |
| 3651 | -- int size; | |
| 3652 | -+ unsigned int size; | |
| 3653 | - t_ipaddr dadr; | |
| 3654 | - | |
| 3655 | - #ifdef DEBUG | |
| 3656 | -@@ -194,13 +188,9 @@ | |
| 3657 | - * | |
| 3658 | - * Read one packet from a UDP socket | |
| 3659 | - */ | |
| 3660 | --int udp_read(buf, bufsize, timeout, abortch) | |
| 3661 | --char *buf; | |
| 3662 | --int bufsize; | |
| 3663 | --int timeout; | |
| 3664 | --char abortch; | |
| 3665 | -+int udp_read(char *buf, unsigned int bufsize, int timeout) | |
| 3666 | - { | |
| 3667 | -- int len; | |
| 3668 | -+ unsigned int len; | |
| 3669 | - | |
| 3670 | - /* Wait until we get something */ | |
| 3671 | - set_timeout(timeout); | |
| 3672 | -@@ -299,9 +289,6 @@ | |
| 3673 | - */ | |
| 3674 | - int init_udp() | |
| 3675 | - { | |
| 3676 | -- /* Set module name for error handling */ | |
| 3677 | -- net_module_name = "udp"; | |
| 3678 | -- | |
| 3679 | - /* Register IP packet type and set write buffer pointer */ | |
| 3680 | - if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL) | |
| 3681 | - return(FALSE); | |
| 3682 | -diff -ruN proll_18.orig/src/udp.h proll-patch-15/src/udp.h | |
| 3683 | ---- proll_18.orig/src/udp.h 2001-12-24 05:12:34.000000000 +0000 | |
| 3684 | -+++ proll-patch-15/src/udp.h 2005-08-14 10:16:40.000000000 +0000 | |
| 3685 | -@@ -53,7 +53,7 @@ | |
| 3686 | - extern int udp_open __P((t_ipaddr daddr, int source, int dest)); | |
| 3687 | - | |
| 3688 | - /* Read from a UDP socket */ | |
| 3689 | --extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); | |
| 3690 | -+extern int udp_read(char *buf, unsigned int bufsize, int timeout); | |
| 3691 | - | |
| 3692 | - /* Write to a UDP socket */ | |
| 3693 | - extern int udp_write __P((char *buf, int writelen)); | |
| 3694 | -diff -ruN proll_18.orig/src/vcons_zs.c proll-patch-15/src/vcons_zs.c | |
| 3695 | ---- proll_18.orig/src/vcons_zs.c 1970-01-01 00:00:00.000000000 +0000 | |
| 3696 | -+++ proll-patch-15/src/vcons_zs.c 2005-08-14 10:25:51.000000000 +0000 | |
| 3697 | -@@ -0,0 +1,68 @@ | |
| 3698 | -+/** | |
| 3699 | -+ ** Console over 'zs' (Zilog serial port) | |
| 3700 | -+ ** Copyright 1999 Pete Zaitcev | |
| 3701 | -+ ** This code is licensed under GNU General Public License. | |
| 3702 | -+ **/ | |
| 3703 | -+ | |
| 3704 | -+#include "vconsole.h" | |
| 3705 | -+#include <system.h> | |
| 3706 | -+ | |
| 3707 | -+#define ZS_DATA 0x02 | |
| 3708 | -+ | |
| 3709 | -+int vcon_zs_init(struct vconterm *t, unsigned int a0) | |
| 3710 | -+{ | |
| 3711 | -+ | |
| 3712 | -+ t->impl = (void *) a0; | |
| 3713 | -+ | |
| 3714 | -+ t->vc_x = 0; t->vc_y = 0; | |
| 3715 | -+ t->backp = 0; t->backc = 0; | |
| 3716 | -+ | |
| 3717 | -+ stb_bypass(a0, 3); // reg 3 | |
| 3718 | -+ stb_bypass(a0, 1); // enable rx | |
| 3719 | -+ | |
| 3720 | -+ stb_bypass(a0, 5); // reg 5 | |
| 3721 | -+ stb_bypass(a0, 8); // enable tx | |
| 3722 | -+ | |
| 3723 | -+ return 0; | |
| 3724 | -+} | |
| 3725 | -+ | |
| 3726 | -+int vcon_zs_putch(struct vconterm *t, char c) | |
| 3727 | -+{ | |
| 3728 | -+ unsigned zs_ptr = (unsigned) t->impl; | |
| 3729 | -+ | |
| 3730 | -+ //while ((ldb_bypass(zs_ptr + ZS_LSR) & 0x60) != 0x60) { } | |
| 3731 | -+ stb_bypass(zs_ptr + ZS_DATA, c); | |
| 3732 | -+ return 0; | |
| 3733 | -+} | |
| 3734 | -+ | |
| 3735 | -+int vcon_zs_write(struct vconterm *t, char *data, int leng) | |
| 3736 | -+{ | |
| 3737 | -+ while (leng != 0) { | |
| 3738 | -+ leng--; | |
| 3739 | -+ vcon_zs_putch(t, *data++); | |
| 3740 | -+ } | |
| 3741 | -+ return leng; | |
| 3742 | -+} | |
| 3743 | -+ | |
| 3744 | -+int vcon_zs_read(struct vconterm *t, char *data, __attribute((unused)) int leng) | |
| 3745 | -+{ | |
| 3746 | -+ unsigned zs_ptr = (unsigned) t->impl; | |
| 3747 | -+ | |
| 3748 | -+ while ((ldb_bypass(zs_ptr) & 1) != 1) { } | |
| 3749 | -+ *data = ldb_bypass(zs_ptr + ZS_DATA); | |
| 3750 | -+ return 0; | |
| 3751 | -+} | |
| 3752 | -+ | |
| 3753 | -+int vcon_zs_getch(struct vconterm *t) | |
| 3754 | -+{ | |
| 3755 | -+ unsigned zs_ptr = (unsigned) t->impl; | |
| 3756 | -+ | |
| 3757 | -+ while ((ldb_bypass(zs_ptr) & 1) != 1) { } | |
| 3758 | -+ return ldb_bypass(zs_ptr + ZS_DATA) & 0xff; | |
| 3759 | -+} | |
| 3760 | -+ | |
| 3761 | -+void vcon_zs_fini(__attribute((unused)) struct vconterm *t) | |
| 3762 | -+{ | |
| 3763 | -+ /* violent crash in the end */ | |
| 3764 | -+ ; | |
| 3765 | -+} | |
| 3766 | -diff -ruN proll_18.orig/src/vconsole.c proll-patch-15/src/vconsole.c | |
| 3767 | ---- proll_18.orig/src/vconsole.c 1999-11-08 03:10:28.000000000 +0000 | |
| 3768 | -+++ proll-patch-15/src/vconsole.c 2005-08-14 10:24:49.000000000 +0000 | |
| 3769 | -@@ -7,12 +7,17 @@ | |
| 3770 | - #include "vconsole.h" | |
| 3771 | - | |
| 3772 | - #include "hconsole.h" | |
| 3773 | -+#include <system.h> | |
| 3774 | - | |
| 3775 | - static void vcon_i_cursfeed(struct vconterm *t); | |
| 3776 | - static void vcon_i_backflush(struct vconterm *t); | |
| 3777 | - | |
| 3778 | - struct hconsole hcons0; | |
| 3779 | - | |
| 3780 | -+enum { ESnormal, ESesc, ESsquare, ESgetpars, ESgotpars, ESfunckey, | |
| 3781 | -+ EShash, ESsetG0, ESsetG1, ESpercent, ESignore, ESnonstd, | |
| 3782 | -+ ESpalette }; | |
| 3783 | -+ | |
| 3784 | - int vcon_init(struct vconterm *t, unsigned int a0) | |
| 3785 | - { | |
| 3786 | - struct hconsole *hconp; | |
| 3787 | -@@ -25,11 +30,49 @@ | |
| 3788 | - | |
| 3789 | - t->vc_x = 0; t->vc_y = 0; | |
| 3790 | - t->backp = 0; t->backc = 0; | |
| 3791 | -+ t->vc_state = ESnormal; | |
| 3792 | - | |
| 3793 | - hcon_clear(hconp, 0, 0, hconp->ydim_, hconp->xdim_); | |
| 3794 | - return 0; | |
| 3795 | - } | |
| 3796 | - | |
| 3797 | -+/* | |
| 3798 | -+ * gotoxy() must verify all boundaries, because the arguments | |
| 3799 | -+ * might also be negative. If the given position is out of | |
| 3800 | -+ * bounds, the cursor is placed at the nearest margin. | |
| 3801 | -+ */ | |
| 3802 | -+static void gotoxy(struct vconterm *vc, int new_x, int new_y) | |
| 3803 | -+{ | |
| 3804 | -+ int max_x, max_y; | |
| 3805 | -+ struct hconsole *hconp = vc->impl; | |
| 3806 | -+ | |
| 3807 | -+ max_x = hcon_qxdim(hconp); | |
| 3808 | -+ max_y = hcon_qydim(hconp); | |
| 3809 | -+ | |
| 3810 | -+ if (new_x < 0) | |
| 3811 | -+ vc->vc_x = 0; | |
| 3812 | -+ else { | |
| 3813 | -+ if (new_x >= max_x) | |
| 3814 | -+ vc->vc_x = max_x - 1; | |
| 3815 | -+ else | |
| 3816 | -+ vc->vc_x = new_x; | |
| 3817 | -+ } | |
| 3818 | -+ | |
| 3819 | -+ if (new_y < 0) | |
| 3820 | -+ vc->vc_y = 0; | |
| 3821 | -+ else if (new_y >= max_y) | |
| 3822 | -+ vc->vc_y = max_y - 1; | |
| 3823 | -+ else | |
| 3824 | -+ vc->vc_y = new_y; | |
| 3825 | -+ | |
| 3826 | -+} | |
| 3827 | -+ | |
| 3828 | -+/* for absolute user moves, when decom is set */ | |
| 3829 | -+static void gotoxay(struct vconterm *t, int new_x, int new_y) | |
| 3830 | -+{ | |
| 3831 | -+ gotoxy(t, new_x, new_y); | |
| 3832 | -+} | |
| 3833 | -+ | |
| 3834 | - int vcon_write(struct vconterm *t, char *data, int leng) | |
| 3835 | - { | |
| 3836 | - int l = leng; | |
| 3837 | -@@ -40,29 +83,101 @@ | |
| 3838 | - if (l <= 0) break; | |
| 3839 | - c = *data++; --l; | |
| 3840 | - | |
| 3841 | -- switch (c) { | |
| 3842 | -- case 0x07: /* Bell */ | |
| 3843 | -- vcon_i_backflush(t); | |
| 3844 | -- break; | |
| 3845 | -- case 0x0A: /* Linefeed */ | |
| 3846 | -- vcon_i_backflush(t); | |
| 3847 | -- vcon_i_cursfeed(t); | |
| 3848 | -+ switch(t->vc_state) { | |
| 3849 | -+ case ESesc: | |
| 3850 | -+ t->vc_state = ESnormal; | |
| 3851 | -+ switch (c) { | |
| 3852 | -+ case '[': | |
| 3853 | -+ t->vc_state = ESsquare; | |
| 3854 | -+ break; | |
| 3855 | -+ case 'M': | |
| 3856 | -+ hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); | |
| 3857 | -+ break; | |
| 3858 | -+ default: | |
| 3859 | -+ //printk("Unhandled escape code '%c'\n", c); | |
| 3860 | -+ break; | |
| 3861 | -+ } | |
| 3862 | - break; | |
| 3863 | -- case 0x0D: /* Return */ | |
| 3864 | -- vcon_i_backflush(t); | |
| 3865 | -- t->vc_x = 0; | |
| 3866 | -+ case ESsquare: | |
| 3867 | -+ for(t->vc_npar = 0 ; t->vc_npar < NPAR ; t->vc_npar++) | |
| 3868 | -+ t->vc_par[t->vc_npar] = 0; | |
| 3869 | -+ t->vc_npar = 0; | |
| 3870 | -+ t->vc_state = ESgetpars; | |
| 3871 | -+ case ESgetpars: | |
| 3872 | -+ if (c==';' && t->vc_npar<NPAR-1) { | |
| 3873 | -+ t->vc_npar++; | |
| 3874 | -+ break; | |
| 3875 | -+ } else if (c>='0' && c<='9') { | |
| 3876 | -+ t->vc_par[t->vc_npar] *= 10; | |
| 3877 | -+ t->vc_par[t->vc_npar] += c-'0'; | |
| 3878 | -+ break; | |
| 3879 | -+ } else t->vc_state=ESgotpars; | |
| 3880 | -+ case ESgotpars: | |
| 3881 | -+ t->vc_state = ESnormal; | |
| 3882 | -+ switch(c) { | |
| 3883 | -+ case 'H': case 'f': | |
| 3884 | -+ if (t->vc_par[0]) t->vc_par[0]--; | |
| 3885 | -+ if (t->vc_par[1]) t->vc_par[1]--; | |
| 3886 | -+ gotoxay(t, t->vc_par[1], t->vc_par[0]); | |
| 3887 | -+ break; | |
| 3888 | -+ case 'J': | |
| 3889 | -+ if (t->vc_par[0] == 0) { | |
| 3890 | -+ //erase from cursor to end of display | |
| 3891 | -+ hcon_clear(hconp, t->vc_y, t->vc_x, hconp->ydim_, hconp->xdim_); | |
| 3892 | -+ } | |
| 3893 | -+ break; | |
| 3894 | -+ case 'M': | |
| 3895 | -+ hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); | |
| 3896 | -+ break; | |
| 3897 | -+ case 'm': | |
| 3898 | -+ break; | |
| 3899 | -+ default: | |
| 3900 | -+#if 0 | |
| 3901 | -+ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n", | |
| 3902 | -+ c, t->vc_par[0], t->vc_par[1], t->vc_par[2], t->vc_par[3], t->vc_par[4]); | |
| 3903 | -+#endif | |
| 3904 | -+ break; | |
| 3905 | -+ } | |
| 3906 | - break; | |
| 3907 | - default: | |
| 3908 | -- if (t->backp == 0) { | |
| 3909 | -- t->backc = 1; | |
| 3910 | -- t->backp = data-1; | |
| 3911 | -- } else { | |
| 3912 | -- t->backc++; | |
| 3913 | -- } | |
| 3914 | -- if (t->vc_x + t->backc >= hcon_qxdim(hconp)) { | |
| 3915 | -+ t->vc_state = ESnormal; | |
| 3916 | -+ switch (c) { | |
| 3917 | -+ case 0x07: /* Bell */ | |
| 3918 | -+ vcon_i_backflush(t); | |
| 3919 | -+ break; | |
| 3920 | -+ case 0x08: /* BS */ | |
| 3921 | -+ vcon_i_backflush(t); | |
| 3922 | -+ if (t->vc_x > 0) | |
| 3923 | -+ t->vc_x--; | |
| 3924 | -+ break; | |
| 3925 | -+ case 0x0A: /* Linefeed */ | |
| 3926 | - vcon_i_backflush(t); | |
| 3927 | -- t->vc_x = 0; | |
| 3928 | - vcon_i_cursfeed(t); | |
| 3929 | -+ break; | |
| 3930 | -+ case 0x0D: /* Return */ | |
| 3931 | -+ vcon_i_backflush(t); | |
| 3932 | -+ t->vc_x = 0; | |
| 3933 | -+ break; | |
| 3934 | -+ case 24: case 26: | |
| 3935 | -+ vcon_i_backflush(t); | |
| 3936 | -+ t->vc_state = ESnormal; | |
| 3937 | -+ break; | |
| 3938 | -+ case 27: | |
| 3939 | -+ vcon_i_backflush(t); | |
| 3940 | -+ t->vc_state = ESesc; | |
| 3941 | -+ break; | |
| 3942 | -+ default: | |
| 3943 | -+ if (t->backp == 0) { | |
| 3944 | -+ t->backc = 1; | |
| 3945 | -+ t->backp = data-1; | |
| 3946 | -+ } else { | |
| 3947 | -+ t->backc++; | |
| 3948 | -+ } | |
| 3949 | -+ if ((unsigned int)t->vc_x + t->backc >= hcon_qxdim(hconp)) { | |
| 3950 | -+ vcon_i_backflush(t); | |
| 3951 | -+ t->vc_x = 0; | |
| 3952 | -+ vcon_i_cursfeed(t); | |
| 3953 | -+ } | |
| 3954 | - } | |
| 3955 | - } | |
| 3956 | - } | |
| 3957 | -@@ -73,7 +188,7 @@ | |
| 3958 | - static void vcon_i_cursfeed(struct vconterm *t) { | |
| 3959 | - struct hconsole *hconp = t->impl; | |
| 3960 | - | |
| 3961 | -- if (++t->vc_y >= hcon_qydim(hconp)) { | |
| 3962 | -+ if ((unsigned int)++t->vc_y >= hcon_qydim(hconp)) { | |
| 3963 | - t->vc_y = hcon_qydim(hconp)-1; | |
| 3964 | - hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); | |
| 3965 | - } | |
| 3966 | -@@ -90,22 +205,75 @@ | |
| 3967 | - t->backp = 0; t->backc = 0; | |
| 3968 | - } | |
| 3969 | - | |
| 3970 | --int vcon_putch(struct vconterm *t, char c) | |
| 3971 | -+int vcon_putch(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char c) | |
| 3972 | - { | |
| 3973 | - return -1; | |
| 3974 | - } | |
| 3975 | - | |
| 3976 | --int vcon_read(struct vconterm *t, char *data, int leng) | |
| 3977 | -+int vcon_read(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char *data, __attribute__((unused)) int leng) | |
| 3978 | - { | |
| 3979 | - return 0; | |
| 3980 | - } | |
| 3981 | - | |
| 3982 | --int vcon_getch(struct vconterm *t) | |
| 3983 | -+static const unsigned char sunkbd_keycode[128] = { | |
| 3984 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3985 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3986 | -+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0, 8, | |
| 3987 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, | |
| 3988 | -+ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', | |
| 3989 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3990 | -+ 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '\\', 13, | |
| 3991 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3992 | -+ 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', | |
| 3993 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3994 | -+ ' ', | |
| 3995 | -+}; | |
| 3996 | -+ | |
| 3997 | -+static const unsigned char sunkbd_keycode_shifted[128] = { | |
| 3998 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 3999 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 4000 | -+ '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 0, 8, | |
| 4001 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, | |
| 4002 | -+ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', | |
| 4003 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 4004 | -+ 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '|', 13, | |
| 4005 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 4006 | -+ 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', | |
| 4007 | -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 4008 | -+ ' ', | |
| 4009 | -+}; | |
| 4010 | -+ | |
| 4011 | -+static int shiftstate; | |
| 4012 | -+ | |
| 4013 | -+int vcon_getch(__attribute__((unused)) struct vconterm *t) | |
| 4014 | - { | |
| 4015 | -- return -1; | |
| 4016 | -+ int ch; | |
| 4017 | -+ | |
| 4018 | -+ while ((ldb_bypass(0x71000004) & 1) != 1) { } | |
| 4019 | -+ do { | |
| 4020 | -+ ch = ldb_bypass(0x71000006) & 0xff; | |
| 4021 | -+ if (ch == 99) | |
| 4022 | -+ shiftstate |= 1; | |
| 4023 | -+ else if (ch == 110) | |
| 4024 | -+ shiftstate |= 2; | |
| 4025 | -+ else if (ch == 227) | |
| 4026 | -+ shiftstate &= ~1; | |
| 4027 | -+ else if (ch == 238) | |
| 4028 | -+ shiftstate &= ~2; | |
| 4029 | -+ //printk("getch: %d\n", ch); | |
| 4030 | -+ } | |
| 4031 | -+ while ((ch & 0x80) == 0 || ch == 238 || ch == 227); // Wait for key release | |
| 4032 | -+ //printk("getch rel: %d\n", ch); | |
| 4033 | -+ ch &= 0x7f; | |
| 4034 | -+ if (shiftstate) | |
| 4035 | -+ ch = sunkbd_keycode_shifted[ch]; | |
| 4036 | -+ else | |
| 4037 | -+ ch = sunkbd_keycode[ch]; | |
| 4038 | -+ //printk("getch xlate: %d\n", ch); | |
| 4039 | -+ return ch; | |
| 4040 | - } | |
| 4041 | - | |
| 4042 | --void vcon_fini(struct vconterm *t) | |
| 4043 | -+void vcon_fini(__attribute__((unused)) struct vconterm *t) | |
| 4044 | - { | |
| 4045 | - /* violent crash in the end */ | |
| 4046 | - ; | |
| 4047 | -diff -ruN proll_18.orig/src/vconsole.h proll-patch-15/src/vconsole.h | |
| 4048 | ---- proll_18.orig/src/vconsole.h 1999-11-08 00:58:13.000000000 +0000 | |
| 4049 | -+++ proll-patch-15/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 | |
| 4050 | -@@ -6,6 +6,8 @@ | |
| 4051 | - #ifndef VCONSOLE_H | |
| 4052 | - #define VCONSOLE_H | |
| 4053 | - | |
| 4054 | -+#define NPAR 16 | |
| 4055 | -+ | |
| 4056 | - struct vconterm { | |
| 4057 | - void *impl; | |
| 4058 | - | |
| 4059 | -@@ -13,6 +15,8 @@ | |
| 4060 | - int backc; /* Same, count */ | |
| 4061 | - | |
| 4062 | - int vc_x, vc_y; /* XXX Make vcon_xxx() to use cellmap->xpos_ */ | |
| 4063 | -+ int vc_state; | |
| 4064 | -+ unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ | |
| 4065 | - }; | |
| 4066 | - | |
| 4067 | - int vcon_init(struct vconterm *t, unsigned int a0); |