Commit 6d82d04a498a7c8a74a04f6b59c623eb3c2d69b7

Authored by bellard
1 parent ad81218e

proll update: IDE HDD/CD support (Blue Swirl)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1405 c046a42c-6fe2-441c-8c8c-71466251a162
pc-bios/proll.elf
No preview for this file type
pc-bios/proll.patch
1 -diff -ruN proll_18.orig/Makefile proll-patch8/Makefile 1 +diff -ruN proll_18.orig/Makefile proll-patch10/Makefile
2 --- proll_18.orig/Makefile 2002-09-13 14:16:59.000000000 +0000 2 --- proll_18.orig/Makefile 2002-09-13 14:16:59.000000000 +0000
3 -+++ proll-patch8/Makefile 2004-11-13 15:50:49.000000000 +0000 3 ++++ proll-patch10/Makefile 2004-11-13 15:50:49.000000000 +0000
4 @@ -4,6 +4,7 @@ 4 @@ -4,6 +4,7 @@
5 make -C krups-ser all 5 make -C krups-ser all
6 make -C espresso all 6 make -C espresso all
@@ -14,14 +14,14 @@ diff -ruN proll_18.orig/Makefile proll-patch8/Makefile @@ -14,14 +14,14 @@ diff -ruN proll_18.orig/Makefile proll-patch8/Makefile
14 make -C espresso clean 14 make -C espresso clean
15 make -C espresso-ser clean 15 make -C espresso-ser clean
16 + make -C qemu clean 16 + make -C qemu clean
17 -diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile 17 +diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile
18 --- proll_18.orig/qemu/Makefile 1970-01-01 00:00:00.000000000 +0000 18 --- proll_18.orig/qemu/Makefile 1970-01-01 00:00:00.000000000 +0000
19 -+++ proll-patch8/qemu/Makefile 2005-03-02 16:41:50.000000000 +0000  
20 -@@ -0,0 +1,122 @@ 19 ++++ proll-patch10/qemu/Makefile 2005-04-12 14:42:23.000000000 +0000
  20 +@@ -0,0 +1,123 @@
21 +# 21 +#
22 +# proll: 22 +# proll:
23 +# qemu/Makefile - make PROLL for QEMU 23 +# qemu/Makefile - make PROLL for QEMU
24 -+# $Id: proll.patch,v 1.4 2005-04-06 20:45:26 bellard Exp $ 24 ++# $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $
25 +# 25 +#
26 +# Copyright 1999 Pete Zaitcev 26 +# Copyright 1999 Pete Zaitcev
27 +# This is Free Software is licensed under terms of GNU General Public License. 27 +# This is Free Software is licensed under terms of GNU General Public License.
@@ -47,8 +47,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile @@ -47,8 +47,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile
47 +# want to shift it to form a PGD entry. A relocatable label will not work. 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>. 48 +# Linux kernel expects us to be at LINUX_OPPROM_BEGVM <asm-sparc/openprom.h>.
49 +PROLBASE = 0xffd00000 49 +PROLBASE = 0xffd00000
50 -+PROLRODATA = 0xffd07000  
51 -+PROLDATA = 0xffd09000 50 ++PROLRODATA = 0xffd08000
  51 ++PROLDATA = 0xffd0b000
52 +PROLSIZE = 240*1024 52 +PROLSIZE = 240*1024
53 + 53 +
54 +# Linux 54 +# Linux
@@ -68,7 +68,7 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile @@ -68,7 +68,7 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile
68 +OBJS = head.o wuf.o wof.o main.o $(CONSOLE) \ 68 +OBJS = head.o wuf.o wof.o main.o $(CONSOLE) \
69 + printf.o le.o system_qemu.o iommu.o \ 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 \ 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 71 ++ vconsole.o hconsole.o rconsole.o vcons_zs.o esp.o
72 + 72 +
73 +all: $(ALL) 73 +all: $(ALL)
74 + 74 +
@@ -106,7 +106,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile @@ -106,7 +106,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile
106 + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.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 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 108 + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c
109 -+ 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
110 +arp.o: $(SRC)/arp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h 111 +arp.o: $(SRC)/arp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h
111 + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c 112 + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c
112 +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 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
@@ -140,9 +141,9 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile @@ -140,9 +141,9 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile
140 + 141 +
141 +proll.aout: $(PROLLEXE) 142 +proll.aout: $(PROLLEXE)
142 + $(ELFTOAOUT) -o proll.aout $(PROLLEXE) 143 + $(ELFTOAOUT) -o proll.aout $(PROLLEXE)
143 -diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S 144 +diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S
144 --- proll_18.orig/qemu/head.S 1970-01-01 00:00:00.000000000 +0000 145 --- proll_18.orig/qemu/head.S 1970-01-01 00:00:00.000000000 +0000
145 -+++ proll-patch8/qemu/head.S 2005-03-02 15:30:47.000000000 +0000 146 ++++ proll-patch10/qemu/head.S 2005-03-02 15:30:47.000000000 +0000
146 @@ -0,0 +1,539 @@ 147 @@ -0,0 +1,539 @@
147 +/** 148 +/**
148 + ** Standalone startup code for Linux PROM emulator. 149 + ** Standalone startup code for Linux PROM emulator.
@@ -150,7 +151,7 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S @@ -150,7 +151,7 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S
150 + ** This code is licensed under GNU General Public License. 151 + ** This code is licensed under GNU General Public License.
151 + **/ 152 + **/
152 +/* 153 +/*
153 -+ * $Id: proll.patch,v 1.4 2005-04-06 20:45:26 bellard Exp $ 154 ++ * $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $
154 + */ 155 + */
155 + 156 +
156 +#include <psr.h> 157 +#include <psr.h>
@@ -683,10 +684,10 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S @@ -683,10 +684,10 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S
683 +C_LABEL(ldb_bypass): 684 +C_LABEL(ldb_bypass):
684 + retl 685 + retl
685 + lduba [%o0] ASI_M_BYPASS, %o0 686 + lduba [%o0] ASI_M_BYPASS, %o0
686 -diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c 687 +diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c
687 --- proll_18.orig/qemu/main.c 1970-01-01 00:00:00.000000000 +0000 688 --- proll_18.orig/qemu/main.c 1970-01-01 00:00:00.000000000 +0000
688 -+++ proll-patch8/qemu/main.c 2005-04-03 11:58:46.000000000 +0000  
689 -@@ -0,0 +1,173 @@ 689 ++++ proll-patch10/qemu/main.c 2005-04-16 18:03:23.000000000 +0000
  690 +@@ -0,0 +1,185 @@
690 +/** 691 +/**
691 + ** Proll (PROM replacement) 692 + ** Proll (PROM replacement)
692 + ** Copyright 1999 Pete Zaitcev 693 + ** Copyright 1999 Pete Zaitcev
@@ -711,7 +712,9 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -711,7 +712,9 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
711 +void *init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, const char *cmdline, char boot_device, int nographic); 712 +void *init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, const char *cmdline, char boot_device, int nographic);
712 +int vcon_zs_init(struct vconterm *t, unsigned int a0); 713 +int vcon_zs_init(struct vconterm *t, unsigned int a0);
713 +int vcon_zs_write(struct vconterm *t, char *data, int leng); 714 +int vcon_zs_write(struct vconterm *t, char *data, int leng);
714 -+ 715 ++int vcon_zs_getch(struct vconterm *t);
  716 ++void esp_probe();
  717 ++int esp_boot(int unit);
715 +static void init_idprom(void); 718 +static void init_idprom(void);
716 + 719 +
717 +struct vconterm dp0; 720 +struct vconterm dp0;
@@ -733,7 +736,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -733,7 +736,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
733 +} *hw_idprom; 736 +} *hw_idprom;
734 + 737 +
735 +int ignore_fault, fault_ignored; 738 +int ignore_fault, fault_ignored;
736 -+void *printk_fn; 739 ++void *printk_fn, *getch_fn;
737 +unsigned int q_height, q_width; 740 +unsigned int q_height, q_width;
738 + 741 +
739 +/* 742 +/*
@@ -745,7 +748,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -745,7 +748,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
745 + unsigned int hiphybas; 748 + unsigned int hiphybas;
746 + const void *romvec; 749 + const void *romvec;
747 + unsigned int ram_size; 750 + unsigned int ram_size;
748 -+ char nographic; 751 ++ char nographic, bootdev;
749 + 752 +
750 + nographic = ldb_bypass(PHYS_JJ_EEPROM + 0x2F); 753 + nographic = ldb_bypass(PHYS_JJ_EEPROM + 0x2F);
751 + if (!nographic) { 754 + if (!nographic) {
@@ -753,10 +756,12 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -753,10 +756,12 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
753 + q_height = ldh_bypass(PHYS_JJ_EEPROM + 0x56); 756 + q_height = ldh_bypass(PHYS_JJ_EEPROM + 0x56);
754 + vcon_init(&dp0, PHYS_JJ_TCX_FB); 757 + vcon_init(&dp0, PHYS_JJ_TCX_FB);
755 + printk_fn = vcon_write; 758 + printk_fn = vcon_write;
  759 ++ getch_fn = vcon_getch;
756 + } 760 + }
757 + else { 761 + else {
758 + vcon_zs_init(&dp0, 0x71100004); 762 + vcon_zs_init(&dp0, 0x71100004);
759 + printk_fn = vcon_zs_write; 763 + printk_fn = vcon_zs_write;
  764 ++ getch_fn = vcon_zs_getch;
760 + } 765 + }
761 + 766 +
762 + 767 +
@@ -790,9 +795,13 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -790,9 +795,13 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
790 + sched_init(); 795 + sched_init();
791 + le_probe(); 796 + le_probe();
792 + init_net(); 797 + init_net();
  798 ++ esp_probe();
793 + 799 +
794 -+ printk("Boot device: %c\n", hw_idprom->boot_device);  
795 -+ if (hw_idprom->boot_device == 'n') { 800 ++ bootdev = hw_idprom->boot_device;
  801 ++ printk("Boot device: %c\n", bootdev);
  802 ++ if (hw_idprom->kernel_size > 0) {
  803 ++ printk("Kernel already loaded\n");
  804 ++ } else if (bootdev == 'n') {
796 + if (bootp() != 0) fatal(); 805 + if (bootp() != 0) fatal();
797 + /* 806 + /*
798 + * boot_rec.bp_file cannot be used because system PROM 807 + * boot_rec.bp_file cannot be used because system PROM
@@ -809,6 +818,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -809,6 +818,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
809 + fname[14] = 0; 818 + fname[14] = 0;
810 + 819 +
811 + if (load(boot_rec.bp_siaddr, fname) != 0) fatal(); 820 + if (load(boot_rec.bp_siaddr, fname) != 0) fatal();
  821 ++ } else if (bootdev == 'c') {
  822 ++ if (esp_boot(0) != 0) fatal();
  823 ++ } else if (bootdev == 'd') {
  824 ++ if (esp_boot(2) != 0) fatal();
812 + } 825 + }
813 + 826 +
814 + romvec = init_openprom_qemu(bb.nbanks, bb.bankv, hiphybas, 827 + romvec = init_openprom_qemu(bb.nbanks, bb.bankv, hiphybas,
@@ -860,10 +873,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c @@ -860,10 +873,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c
860 + hw_idprom = va_prom; 873 + hw_idprom = va_prom;
861 +} 874 +}
862 + 875 +
863 -diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c 876 +diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c
864 --- proll_18.orig/qemu/openprom.c 1970-01-01 00:00:00.000000000 +0000 877 --- proll_18.orig/qemu/openprom.c 1970-01-01 00:00:00.000000000 +0000
865 -+++ proll-patch8/qemu/openprom.c 2005-04-06 16:53:31.000000000 +0000  
866 -@@ -0,0 +1,665 @@ 878 ++++ proll-patch10/qemu/openprom.c 2005-04-16 17:30:19.000000000 +0000
  879 +@@ -0,0 +1,741 @@
867 +/* 880 +/*
868 + * PROM interface support 881 + * PROM interface support
869 + * Copyright 1996 The Australian National University. 882 + * Copyright 1996 The Australian National University.
@@ -882,6 +895,8 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c @@ -882,6 +895,8 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c
882 + 895 +
883 +//#define DEBUG_OBP 896 +//#define DEBUG_OBP
884 + 897 +
  898 ++#define PAGE_SIZE 4096
  899 ++
885 +struct property { 900 +struct property {
886 + const char *name; 901 + const char *name;
887 + const char *value; 902 + const char *value;
@@ -1275,6 +1290,8 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c @@ -1275,6 +1290,8 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c
1275 +static int obp_devopen(char *str); 1290 +static int obp_devopen(char *str);
1276 +static int obp_devclose(int dev_desc); 1291 +static int obp_devclose(int dev_desc);
1277 +static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf); 1292 +static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf);
  1293 ++static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size);
  1294 ++static void obp_dumb_munmap(char *va, unsigned int size);
1278 + 1295 +
1279 +static void doublewalk(unsigned ptab1, unsigned va) 1296 +static void doublewalk(unsigned ptab1, unsigned va)
1280 +{ 1297 +{
@@ -1353,20 +1370,34 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c @@ -1353,20 +1370,34 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c
1353 + romvec0.pv_nbgetchar = obp_nbgetchar; 1370 + romvec0.pv_nbgetchar = obp_nbgetchar;
1354 + romvec0.pv_nbputchar = obp_nbputchar; 1371 + romvec0.pv_nbputchar = obp_nbputchar;
1355 + romvec0.pv_reboot = obp_reboot; 1372 + romvec0.pv_reboot = obp_reboot;
  1373 ++ romvec0.pv_printf = (void (*)(const char *fmt, ...))printk;
1356 + romvec0.pv_abort = obp_abort; 1374 + romvec0.pv_abort = obp_abort;
1357 + romvec0.pv_halt = obp_halt; 1375 + romvec0.pv_halt = obp_halt;
1358 + romvec0.pv_synchook = &synch_hook; 1376 + romvec0.pv_synchook = &synch_hook;
1359 + romvec0.pv_v0bootargs = &obp_argp; 1377 + romvec0.pv_v0bootargs = &obp_argp;
  1378 ++ romvec0.pv_v2devops.v2_dumb_mmap = obp_dumb_mmap;
  1379 ++ romvec0.pv_v2devops.v2_dumb_munmap = obp_dumb_munmap;
  1380 ++ obp_arg.boot_dev_ctrl = 0;
  1381 ++ obp_arg.boot_dev_unit = '0';
1360 + switch(boot_device) { 1382 + switch(boot_device) {
1361 + default: 1383 + default:
1362 + case 'a': 1384 + case 'a':
1363 + obp_arg.argv[0] = "fd()"; 1385 + obp_arg.argv[0] = "fd()";
  1386 ++ obp_arg.boot_dev[0] = 'f';
  1387 ++ obp_arg.boot_dev[1] = 'd';
1364 + break; 1388 + break;
  1389 ++ case 'd':
  1390 ++ obp_arg.boot_dev_unit = '2';
  1391 ++ // Fall through
1365 + case 'c': 1392 + case 'c':
1366 + obp_arg.argv[0] = "sd()"; 1393 + obp_arg.argv[0] = "sd()";
  1394 ++ obp_arg.boot_dev[0] = 's';
  1395 ++ obp_arg.boot_dev[1] = 'd';
1367 + break; 1396 + break;
1368 + case 'n': 1397 + case 'n':
1369 + obp_arg.argv[0] = "le()"; 1398 + obp_arg.argv[0] = "le()";
  1399 ++ obp_arg.boot_dev[0] = 'l';
  1400 ++ obp_arg.boot_dev[1] = 'e';
1370 + break; 1401 + break;
1371 + } 1402 + }
1372 + obp_arg.argv[1] = cmdline; 1403 + obp_arg.argv[1] = cmdline;
@@ -1483,9 +1514,11 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c @@ -1483,9 +1514,11 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c
1483 + return (const char *)-1; 1514 + return (const char *)-1;
1484 +} 1515 +}
1485 + 1516 +
  1517 ++extern int (*getch_fn)(struct vconterm *v);
  1518 ++
1486 +static int obp_nbgetchar(void) { 1519 +static int obp_nbgetchar(void) {
1487 + extern struct vconterm dp0; 1520 + extern struct vconterm dp0;
1488 -+ return vcon_getch(&dp0); 1521 ++ return getch_fn(&dp0);
1489 +} 1522 +}
1490 + 1523 +
1491 +static int obp_nbputchar(int ch) { 1524 +static int obp_nbputchar(int ch) {
@@ -1507,32 +1540,88 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c @@ -1507,32 +1540,88 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c
1507 + printk("halt, freezing\n"); 1540 + printk("halt, freezing\n");
1508 + for (;;) {} 1541 + for (;;) {}
1509 +} 1542 +}
1510 -+ 1543 ++#define isnum(c) ((c >= '0') && (c < '9'))
  1544 ++#define ctoi(c) (c - '0')
1511 +static int obp_devopen(char *str) { 1545 +static int obp_devopen(char *str) {
1512 +#ifdef DEBUG_OBP 1546 +#ifdef DEBUG_OBP
1513 -+ printk("open %s\n", str); 1547 ++ printk("obp_devopen(%s)\n", str);
1514 +#endif 1548 +#endif
  1549 ++ if (str[0] == 's' && str[1] == 'd' && str[4] == ',') {
  1550 ++ unsigned int target;
  1551 ++
  1552 ++ if (str[5] < 7)
  1553 ++ target = str[5];
  1554 ++ else if (isnum(str[6]) && isnum(str[5])) {
  1555 ++ target = (ctoi(str[5]) * 10 + ctoi(str[6])) & 7;
  1556 ++ }
  1557 ++ else {
  1558 ++ target = ctoi(str[5]) & 7;
  1559 ++ }
  1560 ++ return 's' + target;
  1561 ++ }
1515 + return 0; 1562 + return 0;
1516 +} 1563 +}
1517 + 1564 +
1518 +static int obp_devclose(int dev_desc) { 1565 +static int obp_devclose(int dev_desc) {
1519 +#ifdef DEBUG_OBP 1566 +#ifdef DEBUG_OBP
1520 -+ printk("close %d\n", dev_desc); 1567 ++ printk("obp_devclose %d\n", dev_desc);
1521 +#endif 1568 +#endif
1522 + return 0; 1569 + return 0;
1523 +} 1570 +}
1524 + 1571 +
1525 -+static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf) { 1572 ++extern void *esp_read(int unit, int offset, short len);
  1573 ++
  1574 ++static int obp_rdblkdev(int dev_desc, int num_blks, int offset, char *buf)
  1575 ++{
  1576 ++ unsigned int i;
  1577 ++ void *src;
  1578 ++
1526 +#ifdef DEBUG_OBP 1579 +#ifdef DEBUG_OBP
1527 -+ printk("rdblkdev: fd %d, num_blks %d, blk_st %d, buf 0x%x\n", dev_desc, num_blks, blk_st, buf); 1580 ++ printk("obp_rdblkdev: fd %d, num_blks %d, offset %d, buf 0x%x\n", dev_desc, num_blks, offset, buf);
1528 +#endif 1581 +#endif
1529 -+ //buf[8] = 'L';  
1530 -+ return num_blks; 1582 ++ if (dev_desc >= 's' && dev_desc < 'v') {
  1583 ++ for(i = 0; i < num_blks; i++) {
  1584 ++ src = esp_read(dev_desc - 's', offset + i, 1);
  1585 ++ memcpy(&buf[i << 9], src, 512);
  1586 ++ }
  1587 ++ return num_blks;
  1588 ++ }
  1589 ++ return -1;
1531 +} 1590 +}
1532 -diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c 1591 ++
  1592 ++static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size)
  1593 ++{
  1594 ++ unsigned int npages;
  1595 ++ unsigned int off;
  1596 ++ unsigned int mva;
  1597 ++
  1598 ++#ifdef DEBUG_OBP
  1599 ++ printk("obp_dumb_mmap: virta %x, which_io %d, paddr %x, sz %d\n", va, which_io, pa, size);
  1600 ++#endif
  1601 ++ off = pa & (PAGE_SIZE-1);
  1602 ++ npages = (off + size + (PAGE_SIZE-1)) / PAGE_SIZE;
  1603 ++ pa &= ~(PAGE_SIZE-1);
  1604 ++
  1605 ++ mva = (unsigned int) va;
  1606 ++ while (npages-- != 0) {
  1607 ++ map_page(pmem.pl1, mva, pa, 1, pmem.pbas);
  1608 ++ mva += PAGE_SIZE;
  1609 ++ pa += PAGE_SIZE;
  1610 ++ }
  1611 ++ return va;
  1612 ++}
  1613 ++
  1614 ++static void obp_dumb_munmap(char *va, unsigned int size)
  1615 ++{
  1616 ++#ifdef DEBUG_OBP
  1617 ++ printk("obp_dumb_munmap: virta %x, sz %d\n", va, size);
  1618 ++#endif
  1619 ++
  1620 ++}
  1621 +diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch10/qemu/system_qemu.c
1533 --- proll_18.orig/qemu/system_qemu.c 1970-01-01 00:00:00.000000000 +0000 1622 --- proll_18.orig/qemu/system_qemu.c 1970-01-01 00:00:00.000000000 +0000
1534 -+++ proll-patch8/qemu/system_qemu.c 2005-03-02 16:10:20.000000000 +0000  
1535 -@@ -0,0 +1,416 @@ 1623 ++++ proll-patch10/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000
  1624 +@@ -0,0 +1,430 @@
1536 +/** 1625 +/**
1537 + ** Proll (PROM replacement) 1626 + ** Proll (PROM replacement)
1538 + ** system.c: shared miscallenea. 1627 + ** system.c: shared miscallenea.
@@ -1859,19 +1948,30 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c @@ -1859,19 +1948,30 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c
1859 +{ 1948 +{
1860 + char *p; 1949 + char *p;
1861 + 1950 +
1862 -+ if ((p = mem_alloc(t, size, align)) != 0) bzero(p, size); 1951 ++ if ((p = mem_alloc(t, size, align)) != 0) memset(p, 0, size);
1863 + return p; 1952 + return p;
1864 +} 1953 +}
1865 + 1954 +
1866 +/* 1955 +/*
1867 + * Library functions 1956 + * Library functions
1868 + */ 1957 + */
1869 -+void bzero(void *s, int len) {  
1870 -+ while (len--) *((char *)s)++ = 0; 1958 ++void *memset(void *s, int c, size_t len)
  1959 ++{
  1960 ++ void *p = s;
  1961 ++
  1962 ++ while (len--) {
  1963 ++ *(char *)s = c;
  1964 ++ s++;
  1965 ++ }
  1966 ++ return p;
1871 +} 1967 +}
1872 + 1968 +
1873 +void bcopy(const void *f, void *t, int len) { 1969 +void bcopy(const void *f, void *t, int len) {
1874 -+ while (len--) *((char *)t)++ = *((char *)f)++; 1970 ++ while (len--) {
  1971 ++ *(char *)t = *(char *)f;
  1972 ++ f++;
  1973 ++ t++;
  1974 ++ }
1875 +} 1975 +}
1876 + 1976 +
1877 +/* Comparison is 7-bit */ 1977 +/* Comparison is 7-bit */
@@ -1881,8 +1981,11 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c @@ -1881,8 +1981,11 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c
1881 + char ch; 1981 + char ch;
1882 + 1982 +
1883 + while (len--) { 1983 + while (len--) {
1884 -+ ch = *((char *)s1)++;  
1885 -+ if ((i = ch - *((char *)s2)++) != 0) 1984 ++ ch = *(char *)s1;
  1985 ++ i = ch - *(char *)s2;
  1986 ++ s1++;
  1987 ++ s2++;
  1988 ++ if (i != 0)
1886 + return i; 1989 + return i;
1887 + if (ch == 0) 1990 + if (ch == 0)
1888 + return 0; 1991 + return 0;
@@ -1949,9 +2052,9 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c @@ -1949,9 +2052,9 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c
1949 + n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); 2052 + n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24);
1950 + st_bypass(ptr, n); 2053 + st_bypass(ptr, n);
1951 +}; 2054 +};
1952 -diff -ruN proll_18.orig/src/arp.c proll-patch8/src/arp.c 2055 +diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c
1953 --- proll_18.orig/src/arp.c 2001-12-24 05:12:31.000000000 +0000 2056 --- proll_18.orig/src/arp.c 2001-12-24 05:12:31.000000000 +0000
1954 -+++ proll-patch8/src/arp.c 2004-11-13 15:50:49.000000000 +0000 2057 ++++ proll-patch10/src/arp.c 2004-11-13 15:50:49.000000000 +0000
1955 @@ -45,7 +45,7 @@ 2058 @@ -45,7 +45,7 @@
1956 #endif 2059 #endif
1957 static struct arp_cache arp_list[ARPNUM]; /* ARP address cache */ 2060 static struct arp_cache arp_list[ARPNUM]; /* ARP address cache */
@@ -1986,9 +2089,9 @@ diff -ruN proll_18.orig/src/arp.c proll-patch8/src/arp.c @@ -1986,9 +2089,9 @@ diff -ruN proll_18.orig/src/arp.c proll-patch8/src/arp.c
1986 + def_gw = IP_ANY; 2089 + def_gw = IP_ANY;
1987 return(TRUE); 2090 return(TRUE);
1988 } 2091 }
1989 -diff -ruN proll_18.orig/src/arp.h proll-patch8/src/arp.h 2092 +diff -ruN proll_18.orig/src/arp.h proll-patch10/src/arp.h
1990 --- proll_18.orig/src/arp.h 1999-03-18 03:39:43.000000000 +0000 2093 --- proll_18.orig/src/arp.h 1999-03-18 03:39:43.000000000 +0000
1991 -+++ proll-patch8/src/arp.h 2004-11-13 15:50:49.000000000 +0000 2094 ++++ proll-patch10/src/arp.h 2004-11-13 15:50:49.000000000 +0000
1992 @@ -104,7 +104,7 @@ 2095 @@ -104,7 +104,7 @@
1993 extern int init_arp __P((void)); 2096 extern int init_arp __P((void));
1994 2097
@@ -1998,9 +2101,265 @@ diff -ruN proll_18.orig/src/arp.h proll-patch8/src/arp.h @@ -1998,9 +2101,265 @@ diff -ruN proll_18.orig/src/arp.h proll-patch8/src/arp.h
1998 2101
1999 /* Add a new antry to the ARP cache */ 2102 /* Add a new antry to the ARP cache */
2000 extern void addcache __P((unsigned char *ha, t_ipaddr ip)); 2103 extern void addcache __P((unsigned char *ha, t_ipaddr ip));
2001 -diff -ruN proll_18.orig/src/hconsole.c proll-patch8/src/hconsole.c 2104 +diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c
  2105 +--- proll_18.orig/src/esp.c 1970-01-01 00:00:00.000000000 +0000
  2106 ++++ proll-patch10/src/esp.c 2005-04-16 06:24:23.000000000 +0000
  2107 +@@ -0,0 +1,252 @@
  2108 ++#include <system.h> /* == <asm/system.h> */
  2109 ++#include <general.h> /* __P for netpriv.h */
  2110 ++#include <dma.h> /* dmaga */
  2111 ++#include <romlib.h>
  2112 ++
  2113 ++#define PHYS_JJ_ESPDMA 0x78400000 /* ESP DMA controller */
  2114 ++#define PHYS_JJ_ESP 0x78800000 /* ESP SCSI */
  2115 ++#define PHYS_JJ_ESP_IRQ 4
  2116 ++#define BUFSIZE 4096
  2117 ++/*
  2118 ++ * XXX Crude
  2119 ++ */
  2120 ++struct esp_dma {
  2121 ++ struct sparc_dma_registers *regs;
  2122 ++ enum dvma_rev revision;
  2123 ++};
  2124 ++
  2125 ++struct esp_regs {
  2126 ++ unsigned int regs[16];
  2127 ++};
  2128 ++
  2129 ++struct esp_private {
  2130 ++ int active; /* initialized */
  2131 ++ int inst; /* iface number */
  2132 ++
  2133 ++ volatile struct esp_regs *ll;
  2134 ++ __u32 buffer_dvma;
  2135 ++ unsigned int irq; /* device IRQ number */
  2136 ++ int interrupt;
  2137 ++
  2138 ++ struct esp_dma *espdma; /* If set this points to espdma */
  2139 ++
  2140 ++ unsigned char *buffer;
  2141 ++};
  2142 ++
  2143 ++static void esp_interrupt(void *dev_id)
  2144 ++{
  2145 ++ struct esp_private *lp = (struct esp_private *)dev_id;
  2146 ++
  2147 ++ lp->interrupt = 1;
  2148 ++ /* Acknowledge all the interrupt sources ASAP */
  2149 ++
  2150 ++ lp->interrupt = 0;
  2151 ++}
  2152 ++
  2153 ++static int esp_open (void *dev)
  2154 ++{
  2155 ++ struct esp_private *lp = (struct esp_private *)dev;
  2156 ++ int status = 0;
  2157 ++
  2158 ++ if (request_irq(lp->irq, &esp_interrupt, (void *)dev)) {
  2159 ++ printk ("Esp: Can't get irq %d\n", lp->irq);
  2160 ++ return -1;
  2161 ++ }
  2162 ++
  2163 ++ /* On the 4m, setup the espdma to provide the upper bits for buffers */
  2164 ++ if (lp->espdma)
  2165 ++ lp->espdma->regs->dma_test = ((__u32) lp->buffer_dvma) & 0xff000000;
  2166 ++
  2167 ++ return status;
  2168 ++}
  2169 ++
  2170 ++static int esp_close (void *dev)
  2171 ++{
  2172 ++ struct esp_private *lp = (struct esp_private *)dev;
  2173 ++
  2174 ++ free_irq (lp->irq, (void *) dev);
  2175 ++ return 0;
  2176 ++}
  2177 ++
  2178 ++static int
  2179 ++esp_init(struct esp_private *esp, struct esp_dma *espdma, int irq)
  2180 ++{
  2181 ++ volatile struct esp_regs *ll;
  2182 ++
  2183 ++ /* Get the IO region */
  2184 ++ ll = map_io(PHYS_JJ_ESP, sizeof (struct esp_regs));
  2185 ++ if (ll == 0) return -1;
  2186 ++
  2187 ++ esp->buffer = dvma_alloc(BUFSIZE, &esp->buffer_dvma);
  2188 ++ esp->ll = ll;
  2189 ++ esp->espdma = espdma;
  2190 ++ esp->irq = irq;
  2191 ++
  2192 ++ // Chip reset
  2193 ++ stb_bypass((int)ll + 3*2, 2);
  2194 ++ return 0;
  2195 ++}
  2196 ++
  2197 ++static int espdma_init(struct esp_dma *espdma)
  2198 ++{
  2199 ++ void *p;
  2200 ++
  2201 ++ /* Hardcode everything for MrCoffee. */
  2202 ++ if ((p = map_io(PHYS_JJ_ESPDMA, 0x10)) == 0) {
  2203 ++ printk("espdma_init: cannot map registers\n");
  2204 ++ return -1;
  2205 ++ }
  2206 ++ espdma->regs = p;
  2207 ++
  2208 ++ printk("dma1: ");
  2209 ++
  2210 ++ switch((espdma->regs->cond_reg)&DMA_DEVICE_ID) {
  2211 ++ case DMA_VERS0:
  2212 ++ espdma->revision=dvmarev0;
  2213 ++ printk("Revision 0 ");
  2214 ++ break;
  2215 ++ case DMA_ESCV1:
  2216 ++ espdma->revision=dvmaesc1;
  2217 ++ printk("ESC Revision 1 ");
  2218 ++ break;
  2219 ++ case DMA_VERS1:
  2220 ++ espdma->revision=dvmarev1;
  2221 ++ printk("Revision 1 ");
  2222 ++ break;
  2223 ++ case DMA_VERS2:
  2224 ++ espdma->revision=dvmarev2;
  2225 ++ printk("Revision 2 ");
  2226 ++ break;
  2227 ++ case DMA_VERHME:
  2228 ++ espdma->revision=dvmahme;
  2229 ++ printk("HME DVMA gate array ");
  2230 ++ break;
  2231 ++ case DMA_VERSPLUS:
  2232 ++ espdma->revision=dvmarevplus;
  2233 ++ printk("Revision 1 PLUS ");
  2234 ++ break;
  2235 ++ default:
  2236 ++ printk("unknown dma version %x",
  2237 ++ (espdma->regs->cond_reg)&DMA_DEVICE_ID);
  2238 ++ /* espdma->allocated = 1; */
  2239 ++ break;
  2240 ++ }
  2241 ++ printk("\n");
  2242 ++ return 0;
  2243 ++}
  2244 ++
  2245 ++static struct esp_dma espdma0;
  2246 ++static struct esp_private esp;
  2247 ++/*
  2248 ++ * Find all the esp cards on the system and initialize them
  2249 ++ */
  2250 ++void esp_probe ()
  2251 ++{
  2252 ++ if (espdma_init(&espdma0) != 0) {
  2253 ++ return;
  2254 ++ }
  2255 ++
  2256 ++ if (esp_init(&esp, &espdma0, PHYS_JJ_ESP_IRQ) != 0) {
  2257 ++ printk("esp_probe: esp0 init failed\n");
  2258 ++ return;
  2259 ++ }
  2260 ++ return;
  2261 ++}
  2262 ++
  2263 ++void *esp_read(int unit, int offset, short len)
  2264 ++{
  2265 ++ // Set SCSI target
  2266 ++ stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7);
  2267 ++ // Set DMA address
  2268 ++ st_bypass(PHYS_JJ_ESPDMA + 4, esp.buffer_dvma);
  2269 ++ // Set DMA length
  2270 ++ stb_bypass(PHYS_JJ_ESP + 0*4, 10);
  2271 ++ stb_bypass(PHYS_JJ_ESP + 1*4, 0);
  2272 ++ // Set DMA direction
  2273 ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x000);
  2274 ++ // Setup command = Read(10)
  2275 ++ esp.buffer[0] = 0x80;
  2276 ++ esp.buffer[1] = 0x28;
  2277 ++ esp.buffer[2] = 0x00;
  2278 ++ esp.buffer[3] = (offset >> 24) & 0xff;
  2279 ++ esp.buffer[4] = (offset >> 16) & 0xff;
  2280 ++ esp.buffer[5] = (offset >> 8) & 0xff;
  2281 ++ esp.buffer[6] = offset & 0xff;
  2282 ++ esp.buffer[7] = 0x00;
  2283 ++ esp.buffer[8] = (len >> 8) & 0xff;
  2284 ++ esp.buffer[9] = len & 0xff;
  2285 ++ // Set ATN, issue command
  2286 ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x42);
  2287 ++
  2288 ++ // Set DMA length = 512 * read length
  2289 ++ stb_bypass(PHYS_JJ_ESP + 0*4, 0);
  2290 ++ stb_bypass(PHYS_JJ_ESP + 1*4, (len << 1) & 0xff);
  2291 ++ // Set DMA direction
  2292 ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x100);
  2293 ++ // Transfer
  2294 ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x10);
  2295 ++ return esp.buffer;
  2296 ++}
  2297 ++
  2298 ++// Sparc boot sequence can be found in SILO docs,
  2299 ++// first-isofs/README.SILO_ISOFS
  2300 ++int esp_boot(int unit)
  2301 ++{
  2302 ++ struct sun_disklabel {
  2303 ++ unsigned char info[128]; /* Informative text string */
  2304 ++ unsigned char spare0[14];
  2305 ++ struct sun_info {
  2306 ++ unsigned char spare1;
  2307 ++ unsigned char id;
  2308 ++ unsigned char spare2;
  2309 ++ unsigned char flags;
  2310 ++ } infos[8];
  2311 ++ unsigned char spare[246]; /* Boot information etc. */
  2312 ++ short rspeed; /* Disk rotational speed */
  2313 ++ short pcylcount; /* Physical cylinder count */
  2314 ++ short sparecyl; /* extra sects per cylinder */
  2315 ++ unsigned char spare2[4]; /* More magic... */
  2316 ++ short ilfact; /* Interleave factor */
  2317 ++ short ncyl; /* Data cylinder count */
  2318 ++ short nacyl; /* Alt. cylinder count */
  2319 ++ short ntrks; /* Tracks per cylinder */
  2320 ++ short nsect; /* Sectors per track */
  2321 ++ unsigned char spare3[4]; /* Even more magic... */
  2322 ++ struct sun_partition {
  2323 ++ int start_cylinder;
  2324 ++ int num_sectors;
  2325 ++ } partitions[8];
  2326 ++ short magic; /* Magic number */
  2327 ++ short csum; /* Label xor'd checksum */
  2328 ++ } *label;
  2329 ++ unsigned int i, offset;
  2330 ++ void *src, *dst;
  2331 ++
  2332 ++ printk("Loading partition table from target %d:\n", unit);
  2333 ++ // Chip reset
  2334 ++ stb_bypass(PHYS_JJ_ESP + 3*4, 2);
  2335 ++
  2336 ++ esp_open(&esp);
  2337 ++
  2338 ++ label = esp_read(unit, 0, 1);
  2339 ++ printk("CHS: %d/%d/%d, partitions:\n", label->ncyl, label->ntrks, label->nsect);
  2340 ++ for (i = 0; i < 8; i++) {
  2341 ++ printk("%c: %d + %d\n", 'a' + i, label->partitions[i].start_cylinder,
  2342 ++ label->partitions[i].num_sectors);
  2343 ++ }
  2344 ++ offset = label->partitions[4].start_cylinder * label->ntrks * label->nsect + 1;
  2345 ++ printk("booting sd(0,%d,0):d (offset %d)\n", unit, offset);
  2346 ++ // Skip a.out header (0x20)
  2347 ++ dst = (void *)0x4000;
  2348 ++ src = esp_read(unit, offset, 1);
  2349 ++ src = (void *)((unsigned int) src + 0x20);
  2350 ++ memcpy(dst, src, 512 - 0x20);
  2351 ++ dst = (void *)0x4000 + 512 - 0x20;
  2352 ++ for (i = 1; i < 7680/512; i++) {
  2353 ++ src = esp_read(unit, offset + i, 1);
  2354 ++ memcpy(dst, src, 512);
  2355 ++ dst += 512;
  2356 ++ }
  2357 ++ esp_close(&esp);
  2358 ++ return 0;
  2359 ++}
  2360 +diff -ruN proll_18.orig/src/hconsole.c proll-patch10/src/hconsole.c
2002 --- proll_18.orig/src/hconsole.c 2002-07-23 05:52:48.000000000 +0000 2361 --- proll_18.orig/src/hconsole.c 2002-07-23 05:52:48.000000000 +0000
2003 -+++ proll-patch8/src/hconsole.c 2005-03-02 17:03:09.000000000 +0000 2362 ++++ proll-patch10/src/hconsole.c 2005-03-02 17:03:09.000000000 +0000
2004 @@ -29,6 +29,10 @@ 2363 @@ -29,6 +29,10 @@
2005 struct raster r_master; /* For a case of resize, whole fb */ 2364 struct raster r_master; /* For a case of resize, whole fb */
2006 struct raster r_0; /* malloc() erzatz */ 2365 struct raster r_0; /* malloc() erzatz */
@@ -2024,9 +2383,69 @@ diff -ruN proll_18.orig/src/hconsole.c proll-patch8/src/hconsole.c @@ -2024,9 +2383,69 @@ diff -ruN proll_18.orig/src/hconsole.c proll-patch8/src/hconsole.c
2024 t->r_ = r; 2383 t->r_ = r;
2025 t->r0_ = q; 2384 t->r0_ = q;
2026 t->f_ = &f_master; 2385 t->f_ = &f_master;
2027 -diff -ruN proll_18.orig/src/lat7_2.bm proll-patch8/src/lat7_2.bm 2386 +diff -ruN proll_18.orig/src/hme.c proll-patch10/src/hme.c
  2387 +--- proll_18.orig/src/hme.c 2002-07-23 05:52:52.000000000 +0000
  2388 ++++ proll-patch10/src/hme.c 2005-04-16 06:16:20.000000000 +0000
  2389 +@@ -655,10 +655,10 @@
  2390 + unsigned int flags,
  2391 + unsigned int addr)
  2392 + {
  2393 +- __asm__ __volatile__("
  2394 +- stwa %3, [%0] %2
  2395 +- stwa %4, [%1] %2
  2396 +-" : /* no outputs */
  2397 ++ __asm__ __volatile__(
  2398 ++ "stwa %3, [%0] %2\n\t"
  2399 ++ "stwa %4, [%1] %2\n\t"
  2400 ++ : /* no outputs */
  2401 + : "r" (&rp->rx_addr), "r" (&rp->rx_flags),
  2402 + "i" (ASI_PL), "r" (addr), "r" (flags));
  2403 + }
  2404 +@@ -667,10 +667,10 @@
  2405 + unsigned int flags,
  2406 + unsigned int addr)
  2407 + {
  2408 +- __asm__ __volatile__("
  2409 +- stwa %3, [%0] %2
  2410 +- stwa %4, [%1] %2
  2411 +-" : /* no outputs */
  2412 ++ __asm__ __volatile__(
  2413 ++ "stwa %3, [%0] %2\n\t"
  2414 ++ "stwa %4, [%1] %2\n\t"
  2415 ++ : /* no outputs */
  2416 + : "r" (&tp->tx_addr), "r" (&tp->tx_flags),
  2417 + "i" (ASI_PL), "r" (addr), "r" (flags));
  2418 + }
  2419 +@@ -2404,7 +2404,7 @@
  2420 + TXD(("[%d]", elem));
  2421 + this = &txbase[elem];
  2422 + #ifdef __sparc_v9__
  2423 +- __asm__ __volatile__("lduwa [%1] %2, %0"
  2424 ++ __asm__ __volatile__("lduwa [%1] %2, %0\n\t"
  2425 + : "=r" (flags)
  2426 + : "r" (&this->tx_flags), "i" (ASI_PL));
  2427 + #else
  2428 +@@ -2447,7 +2447,7 @@
  2429 + RXD(("RX<"));
  2430 + this = &rxbase[elem];
  2431 + #ifdef __sparc_v9__
  2432 +- __asm__ __volatile__("lduwa [%1] %2, %0"
  2433 ++ __asm__ __volatile__("lduwa [%1] %2, %0\n\t"
  2434 + : "=r" (flags)
  2435 + : "r" (&this->rx_flags), "i" (ASI_PL));
  2436 + #else
  2437 +@@ -2530,7 +2530,7 @@
  2438 + elem = NEXT_RX(elem);
  2439 + this = &rxbase[elem];
  2440 + #ifdef __sparc_v9__
  2441 +- __asm__ __volatile__("lduwa [%1] %2, %0"
  2442 ++ __asm__ __volatile__("lduwa [%1] %2, %0\n\t"
  2443 + : "=r" (flags)
  2444 + : "r" (&this->rx_flags), "i" (ASI_PL));
  2445 + #else
  2446 +diff -ruN proll_18.orig/src/lat7_2.bm proll-patch10/src/lat7_2.bm
2028 --- proll_18.orig/src/lat7_2.bm 1999-02-27 05:48:54.000000000 +0000 2447 --- proll_18.orig/src/lat7_2.bm 1999-02-27 05:48:54.000000000 +0000
2029 -+++ proll-patch8/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 2448 ++++ proll-patch10/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000
2030 @@ -1,6 +1,6 @@ 2449 @@ -1,6 +1,6 @@
2031 #define lat7_2_width 128 2450 #define lat7_2_width 128
2032 #define lat7_2_height 88 2451 #define lat7_2_height 88
@@ -2035,9 +2454,9 @@ diff -ruN proll_18.orig/src/lat7_2.bm proll-patch8/src/lat7_2.bm @@ -2035,9 +2454,9 @@ diff -ruN proll_18.orig/src/lat7_2.bm proll-patch8/src/lat7_2.bm
2035 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2036 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18, 2455 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18,
2037 0x22, 0x22, 0x18, 0x00, 0x00, 0x18, 0x18, 0xff, 0x18, 0x00, 0x12, 0x02, 2456 0x22, 0x22, 0x18, 0x00, 0x00, 0x18, 0x18, 0xff, 0x18, 0x00, 0x12, 0x02,
2038 -diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch8/src/lat7_2_swapped.bm 2457 +diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch10/src/lat7_2_swapped.bm
2039 --- proll_18.orig/src/lat7_2_swapped.bm 1970-01-01 00:00:00.000000000 +0000 2458 --- proll_18.orig/src/lat7_2_swapped.bm 1970-01-01 00:00:00.000000000 +0000
2040 -+++ proll-patch8/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 2459 ++++ proll-patch10/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000
2041 @@ -0,0 +1,121 @@ 2460 @@ -0,0 +1,121 @@
2042 +#define lat7_2_width 128 2461 +#define lat7_2_width 128
2043 +#define lat7_2_height 88 2462 +#define lat7_2_height 88
@@ -2160,9 +2579,9 @@ diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch8/src/lat7_2_swapped.bm @@ -2160,9 +2579,9 @@ diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch8/src/lat7_2_swapped.bm
2160 + 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00, 2579 + 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00,
2161 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, 2580 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00,
2162 + 0x00, 0x00, 0x00, 0x00}; 2581 + 0x00, 0x00, 0x00, 0x00};
2163 -diff -ruN proll_18.orig/src/le.c proll-patch8/src/le.c 2582 +diff -ruN proll_18.orig/src/le.c proll-patch10/src/le.c
2164 --- proll_18.orig/src/le.c 2002-07-23 05:52:49.000000000 +0000 2583 --- proll_18.orig/src/le.c 2002-07-23 05:52:49.000000000 +0000
2165 -+++ proll-patch8/src/le.c 2004-11-13 15:50:49.000000000 +0000 2584 ++++ proll-patch10/src/le.c 2005-04-16 06:16:20.000000000 +0000
2166 @@ -185,8 +185,6 @@ 2585 @@ -185,8 +185,6 @@
2167 unsigned short rap; /* register address port */ 2586 unsigned short rap; /* register address port */
2168 }; 2587 };
@@ -2172,9 +2591,18 @@ diff -ruN proll_18.orig/src/le.c proll-patch8/src/le.c @@ -2172,9 +2591,18 @@ diff -ruN proll_18.orig/src/le.c proll-patch8/src/le.c
2172 /* The Lance uses 24 bit addresses */ 2591 /* The Lance uses 24 bit addresses */
2173 /* On the Sun4c the DVMA will provide the remaining bytes for us */ 2592 /* On the Sun4c the DVMA will provide the remaining bytes for us */
2174 /* On the Sun4m we have to instruct the ledma to provide them */ 2593 /* On the Sun4m we have to instruct the ledma to provide them */
2175 -diff -ruN proll_18.orig/src/netinit.c proll-patch8/src/netinit.c 2594 +@@ -771,7 +769,7 @@
  2595 + /* Clear the slack of the packet, do I need this? */
  2596 + /* For a firewall its a good idea - AC */
  2597 + if (len != skblen)
  2598 +- bzero((char *) &ib->tx_buf [entry][skblen], len - skblen);
  2599 ++ memset((char *) &ib->tx_buf [entry][skblen], 0, len - skblen);
  2600 +
  2601 + /* Now, give the packet to the lance */
  2602 + ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN);
  2603 +diff -ruN proll_18.orig/src/netinit.c proll-patch10/src/netinit.c
2176 --- proll_18.orig/src/netinit.c 2002-09-13 21:53:33.000000000 +0000 2604 --- proll_18.orig/src/netinit.c 2002-09-13 21:53:33.000000000 +0000
2177 -+++ proll-patch8/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 2605 ++++ proll-patch10/src/netinit.c 2004-11-13 15:50:49.000000000 +0000
2178 @@ -49,13 +49,20 @@ 2606 @@ -49,13 +49,20 @@
2179 unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */ 2607 unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */
2180 t_ipaddr myipaddr; /* my own IP address */ 2608 t_ipaddr myipaddr; /* my own IP address */
@@ -2218,9 +2646,9 @@ diff -ruN proll_18.orig/src/netinit.c proll-patch8/src/netinit.c @@ -2218,9 +2646,9 @@ diff -ruN proll_18.orig/src/netinit.c proll-patch8/src/netinit.c
2218 fatal(); 2646 fatal();
2219 } 2647 }
2220 } 2648 }
2221 -diff -ruN proll_18.orig/src/netpriv.h proll-patch8/src/netpriv.h 2649 +diff -ruN proll_18.orig/src/netpriv.h proll-patch10/src/netpriv.h
2222 --- proll_18.orig/src/netpriv.h 1999-04-27 05:39:37.000000000 +0000 2650 --- proll_18.orig/src/netpriv.h 1999-04-27 05:39:37.000000000 +0000
2223 -+++ proll-patch8/src/netpriv.h 2004-11-13 15:50:49.000000000 +0000 2651 ++++ proll-patch10/src/netpriv.h 2004-11-13 15:50:49.000000000 +0000
2224 @@ -130,10 +130,9 @@ 2652 @@ -130,10 +130,9 @@
2225 * 2653 *
2226 */ 2654 */
@@ -2242,9 +2670,9 @@ diff -ruN proll_18.orig/src/netpriv.h proll-patch8/src/netpriv.h @@ -2242,9 +2670,9 @@ diff -ruN proll_18.orig/src/netpriv.h proll-patch8/src/netpriv.h
2242 2670
2243 /* Empty read buffer */ 2671 /* Empty read buffer */
2244 extern void empty_buf __P((void)); 2672 extern void empty_buf __P((void));
2245 -diff -ruN proll_18.orig/src/openprom.h proll-patch8/src/openprom.h 2673 +diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h
2246 --- proll_18.orig/src/openprom.h 2002-07-14 02:26:30.000000000 +0000 2674 --- proll_18.orig/src/openprom.h 2002-07-14 02:26:30.000000000 +0000
2247 -+++ proll-patch8/src/openprom.h 2004-11-13 15:50:49.000000000 +0000 2675 ++++ proll-patch10/src/openprom.h 2004-11-13 15:50:49.000000000 +0000
2248 @@ -54,20 +54,20 @@ 2676 @@ -54,20 +54,20 @@
2249 }; 2677 };
2250 2678
@@ -2306,9 +2734,9 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch8/src/openprom.h @@ -2306,9 +2734,9 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch8/src/openprom.h
2306 }; 2734 };
2307 2735
2308 /* More fun PROM structures for device probing. */ 2736 /* More fun PROM structures for device probing. */
2309 -diff -ruN proll_18.orig/src/packet.c proll-patch8/src/packet.c 2737 +diff -ruN proll_18.orig/src/packet.c proll-patch10/src/packet.c
2310 --- proll_18.orig/src/packet.c 2000-02-11 04:56:45.000000000 +0000 2738 --- proll_18.orig/src/packet.c 2000-02-11 04:56:45.000000000 +0000
2311 -+++ proll-patch8/src/packet.c 2004-11-13 15:50:49.000000000 +0000 2739 ++++ proll-patch10/src/packet.c 2004-11-13 15:50:49.000000000 +0000
2312 @@ -41,7 +41,7 @@ 2740 @@ -41,7 +41,7 @@
2313 int aligner; 2741 int aligner;
2314 } wbuf; 2742 } wbuf;
@@ -2336,9 +2764,9 @@ diff -ruN proll_18.orig/src/packet.c proll-patch8/src/packet.c @@ -2336,9 +2764,9 @@ diff -ruN proll_18.orig/src/packet.c proll-patch8/src/packet.c
2336 { 2764 {
2337 struct sk_buff *skb; 2765 struct sk_buff *skb;
2338 unsigned char *s; 2766 unsigned char *s;
2339 -diff -ruN proll_18.orig/src/printf.c proll-patch8/src/printf.c 2767 +diff -ruN proll_18.orig/src/printf.c proll-patch10/src/printf.c
2340 --- proll_18.orig/src/printf.c 1999-03-19 07:03:59.000000000 +0000 2768 --- proll_18.orig/src/printf.c 1999-03-19 07:03:59.000000000 +0000
2341 -+++ proll-patch8/src/printf.c 2004-11-13 15:50:49.000000000 +0000 2769 ++++ proll-patch10/src/printf.c 2004-11-13 15:50:49.000000000 +0000
2342 @@ -19,7 +19,7 @@ 2770 @@ -19,7 +19,7 @@
2343 static void printn(struct prf_fp *, unsigned long, unsigned int); 2771 static void printn(struct prf_fp *, unsigned long, unsigned int);
2344 static void putchar(char, struct prf_fp *); 2772 static void putchar(char, struct prf_fp *);
@@ -2366,9 +2794,9 @@ diff -ruN proll_18.orig/src/printf.c proll-patch8/src/printf.c @@ -2366,9 +2794,9 @@ diff -ruN proll_18.orig/src/printf.c proll-patch8/src/printf.c
2366 putchar(c,filog); 2794 putchar(c,filog);
2367 } else if (c == 'l' || c == 'O') { 2795 } else if (c == 'l' || c == 'O') {
2368 printn(filog, (long)va_arg(adx,long), c=='l'?10:8); 2796 printn(filog, (long)va_arg(adx,long), c=='l'?10:8);
2369 -diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c 2797 +diff -ruN proll_18.orig/src/rconsole.c proll-patch10/src/rconsole.c
2370 --- proll_18.orig/src/rconsole.c 1999-01-16 07:16:55.000000000 +0000 2798 --- proll_18.orig/src/rconsole.c 1999-01-16 07:16:55.000000000 +0000
2371 -+++ proll-patch8/src/rconsole.c 2004-11-13 15:50:49.000000000 +0000 2799 ++++ proll-patch10/src/rconsole.c 2005-04-16 06:16:20.000000000 +0000
2372 @@ -28,12 +28,18 @@ 2800 @@ -28,12 +28,18 @@
2373 * move to California. Only plain lat7 survived. 2801 * move to California. Only plain lat7 survived.
2374 * I recreated lat7-1 changes in lat7-2. --zaitcev 2802 * I recreated lat7-1 changes in lat7-2. --zaitcev
@@ -2388,6 +2816,37 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c @@ -2388,6 +2816,37 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c
2388 2816
2389 #if 1 2817 #if 1
2390 /* 2818 /*
  2819 +@@ -46,18 +52,18 @@
  2820 + #endif
  2821 +
  2822 + static __inline__ void stfb_w(void *ptr, unsigned int data) {
  2823 +- __asm__ __volatile__ ("sta %0, [%1] %2" : :
  2824 ++ __asm__ __volatile__ ("sta %0, [%1] %2\n\t" : :
  2825 + "r" (data), "r" (ptr), "i" (ASI_M_BYPASS));
  2826 + }
  2827 +
  2828 + static __inline__ void stfb_b(void *ptr, unsigned int data) {
  2829 +- __asm__ __volatile__ ("stba %0, [%1] %2" : :
  2830 ++ __asm__ __volatile__ ("stba %0, [%1] %2\n\t" : :
  2831 + "r" (data), "r" (ptr), "i" (ASI_M_BYPASS));
  2832 + }
  2833 +
  2834 + static __inline__ unsigned int ldfb_w(void *ptr) {
  2835 + unsigned int data;
  2836 +- __asm__ __volatile__ ("lda [%1] %2, %0" :
  2837 ++ __asm__ __volatile__ ("lda [%1] %2, %0\n\t" :
  2838 + "=r" (data) :
  2839 + "r" (ptr), "i" (ASI_M_BYPASS));
  2840 + return data;
  2841 +@@ -65,7 +71,7 @@
  2842 +
  2843 + static __inline__ unsigned int ldfb_b(void *ptr) {
  2844 + unsigned int data;
  2845 +- __asm__ __volatile__ ("lduba [%1] %2, %0" :
  2846 ++ __asm__ __volatile__ ("lduba [%1] %2, %0\n\t" :
  2847 + "=r" (data) :
  2848 + "r" (ptr), "i" (ASI_M_BYPASS));
  2849 + return data;
2391 @@ -94,6 +100,7 @@ 2850 @@ -94,6 +100,7 @@
2392 2851
2393 #endif 2852 #endif
@@ -2423,9 +2882,9 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c @@ -2423,9 +2882,9 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c
2423 p->nchars_ = LAT7_NCHARS; 2882 p->nchars_ = LAT7_NCHARS;
2424 p->width_ = LAT7_WIDTH; 2883 p->width_ = LAT7_WIDTH;
2425 p->height_ = LAT7_HEIGHT; 2884 p->height_ = LAT7_HEIGHT;
2426 -diff -ruN proll_18.orig/src/rconsole.h proll-patch8/src/rconsole.h 2885 +diff -ruN proll_18.orig/src/rconsole.h proll-patch10/src/rconsole.h
2427 --- proll_18.orig/src/rconsole.h 1999-01-16 05:00:59.000000000 +0000 2886 --- proll_18.orig/src/rconsole.h 1999-01-16 05:00:59.000000000 +0000
2428 -+++ proll-patch8/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 2887 ++++ proll-patch10/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000
2429 @@ -13,10 +13,10 @@ 2888 @@ -13,10 +13,10 @@
2430 */ 2889 */
2431 2890
@@ -2439,18 +2898,21 @@ diff -ruN proll_18.orig/src/rconsole.h proll-patch8/src/rconsole.h @@ -2439,18 +2898,21 @@ diff -ruN proll_18.orig/src/rconsole.h proll-patch8/src/rconsole.h
2439 int nchars_; /* 128 for ASCII ... 65536 for Unicode */ 2898 int nchars_; /* 128 for ASCII ... 65536 for Unicode */
2440 int width_; /* [Pixels]. Maximum size is 16. */ 2899 int width_; /* [Pixels]. Maximum size is 16. */
2441 int height_; /* [Pixels == scan lines]. */ 2900 int height_; /* [Pixels == scan lines]. */
2442 -diff -ruN proll_18.orig/src/romlib.h proll-patch8/src/romlib.h 2901 +diff -ruN proll_18.orig/src/romlib.h proll-patch10/src/romlib.h
2443 --- proll_18.orig/src/romlib.h 1999-04-20 04:26:45.000000000 +0000 2902 --- proll_18.orig/src/romlib.h 1999-04-20 04:26:45.000000000 +0000
2444 -+++ proll-patch8/src/romlib.h 2004-11-13 15:50:49.000000000 +0000  
2445 -@@ -73,12 +73,12 @@ 2903 ++++ proll-patch10/src/romlib.h 2005-04-16 20:32:49.000000000 +0000
  2904 +@@ -72,13 +72,13 @@
  2905 + */
2446 #define memcpy(dst, src, len) bcopy(src, dst, len) 2906 #define memcpy(dst, src, len) bcopy(src, dst, len)
2447 #define memcmp(x1, x2, len) bcmp(x1, x2, len) 2907 #define memcmp(x1, x2, len) bcmp(x1, x2, len)
2448 - #define memset(p, len, zero) bzero(p, len) 2908 +-#define memset(p, len, zero) bzero(p, len)
2449 -extern void bcopy(void *b1, void *b2, int length); 2909 -extern void bcopy(void *b1, void *b2, int length);
2450 -extern int bcmp(void *b1, void *b2, int length); 2910 -extern int bcmp(void *b1, void *b2, int length);
  2911 +-extern void bzero(void *b, int c);
2451 +extern void bcopy(const void *b1, void *b2, int length); 2912 +extern void bcopy(const void *b1, void *b2, int length);
2452 +extern int bcmp(const void *b1, const void *b2, int length); 2913 +extern int bcmp(const void *b1, const void *b2, int length);
2453 - extern void bzero(void *b, int c); 2914 ++typedef unsigned int size_t;
  2915 ++extern void *memset(void *p, int c, size_t len);
2454 /* gcc complains about "conflicting types for builtin function strlen". */ 2916 /* gcc complains about "conflicting types for builtin function strlen". */
2455 #define strlen(s) ssize(s) 2917 #define strlen(s) ssize(s)
2456 -extern int ssize(char *s); 2918 -extern int ssize(char *s);
@@ -2458,9 +2920,9 @@ diff -ruN proll_18.orig/src/romlib.h proll-patch8/src/romlib.h @@ -2458,9 +2920,9 @@ diff -ruN proll_18.orig/src/romlib.h proll-patch8/src/romlib.h
2458 2920
2459 2921
2460 /* 2922 /*
2461 -diff -ruN proll_18.orig/src/sched_4m.c proll-patch8/src/sched_4m.c 2923 +diff -ruN proll_18.orig/src/sched_4m.c proll-patch10/src/sched_4m.c
2462 --- proll_18.orig/src/sched_4m.c 1999-04-27 05:48:51.000000000 +0000 2924 --- proll_18.orig/src/sched_4m.c 1999-04-27 05:48:51.000000000 +0000
2463 -+++ proll-patch8/src/sched_4m.c 2004-11-13 15:50:49.000000000 +0000 2925 ++++ proll-patch10/src/sched_4m.c 2004-11-13 15:50:49.000000000 +0000
2464 @@ -108,7 +108,7 @@ 2926 @@ -108,7 +108,7 @@
2465 static int set_bolt; /* Tick counter limit */ 2927 static int set_bolt; /* Tick counter limit */
2466 static struct handsc hndv[16]; 2928 static struct handsc hndv[16];
@@ -2470,9 +2932,9 @@ diff -ruN proll_18.orig/src/sched_4m.c proll-patch8/src/sched_4m.c @@ -2470,9 +2932,9 @@ diff -ruN proll_18.orig/src/sched_4m.c proll-patch8/src/sched_4m.c
2470 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0, 2932 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0,
2471 0, 0, 0, 0, 0, 0, 0, 0, 2933 0, 0, 0, 0, 0, 0, 0, 0,
2472 }; 2934 };
2473 -diff -ruN proll_18.orig/src/swap.c proll-patch8/src/swap.c 2935 +diff -ruN proll_18.orig/src/swap.c proll-patch10/src/swap.c
2474 --- proll_18.orig/src/swap.c 1970-01-01 00:00:00.000000000 +0000 2936 --- proll_18.orig/src/swap.c 1970-01-01 00:00:00.000000000 +0000
2475 -+++ proll-patch8/src/swap.c 2004-11-13 15:50:49.000000000 +0000 2937 ++++ proll-patch10/src/swap.c 2004-11-13 15:50:49.000000000 +0000
2476 @@ -0,0 +1,21 @@ 2938 @@ -0,0 +1,21 @@
2477 +// Convert the lat7 font so that no conversion is needed at runtime. 2939 +// Convert the lat7 font so that no conversion is needed at runtime.
2478 +#define ORIG 2940 +#define ORIG
@@ -2495,9 +2957,9 @@ diff -ruN proll_18.orig/src/swap.c proll-patch8/src/swap.c @@ -2495,9 +2957,9 @@ diff -ruN proll_18.orig/src/swap.c proll-patch8/src/swap.c
2495 + } 2957 + }
2496 + printf("\n"); 2958 + printf("\n");
2497 +} 2959 +}
2498 -diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c 2960 +diff -ruN proll_18.orig/src/system.c proll-patch10/src/system.c
2499 --- proll_18.orig/src/system.c 2002-07-23 05:52:49.000000000 +0000 2961 --- proll_18.orig/src/system.c 2002-07-23 05:52:49.000000000 +0000
2500 -+++ proll-patch8/src/system.c 2004-11-13 15:50:49.000000000 +0000 2962 ++++ proll-patch10/src/system.c 2005-04-16 06:16:20.000000000 +0000
2501 @@ -298,8 +298,8 @@ 2963 @@ -298,8 +298,8 @@
2502 } 2964 }
2503 2965
@@ -2509,13 +2971,39 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c @@ -2509,13 +2971,39 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c
2509 map_page(l1, va, pa, 0, highbase); 2971 map_page(l1, va, pa, 0, highbase);
2510 pa += PAGE_SIZE; 2972 pa += PAGE_SIZE;
2511 } 2973 }
2512 -@@ -518,12 +518,12 @@  
2513 - while (len--) *((char *)s)++ = 0; 2974 +@@ -507,30 +507,44 @@
  2975 + {
  2976 + char *p;
  2977 +
  2978 +- if ((p = mem_alloc(t, size, align)) != 0) bzero(p, size);
  2979 ++ if ((p = mem_alloc(t, size, align)) != 0) memset(p, 0, size);
  2980 + return p;
  2981 + }
  2982 +
  2983 + /*
  2984 + * Library functions
  2985 + */
  2986 +-void bzero(void *s, int len) {
  2987 +- while (len--) *((char *)s)++ = 0;
  2988 ++void *memset(void *s, int c, size_t len)
  2989 ++{
  2990 ++ void *p = s;
  2991 ++
  2992 ++ while (len--) {
  2993 ++ *(char *)s = c;
  2994 ++ s++;
  2995 ++ }
  2996 ++ return p;
2514 } 2997 }
2515 2998
2516 -void bcopy(void *f, void *t, int len) { 2999 -void bcopy(void *f, void *t, int len) {
  3000 +- while (len--) *((char *)t)++ = *((char *)f)++;
2517 +void bcopy(const void *f, void *t, int len) { 3001 +void bcopy(const void *f, void *t, int len) {
2518 - while (len--) *((char *)t)++ = *((char *)f)++; 3002 ++ while (len--) {
  3003 ++ *(char *)t = *(char *)f;
  3004 ++ f++;
  3005 ++ t++;
  3006 ++ }
2519 } 3007 }
2520 3008
2521 /* Comparison is 7-bit */ 3009 /* Comparison is 7-bit */
@@ -2524,7 +3012,19 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c @@ -2524,7 +3012,19 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c
2524 { 3012 {
2525 int i; 3013 int i;
2526 char ch; 3014 char ch;
2527 -@@ -538,8 +538,8 @@ 3015 +
  3016 + while (len--) {
  3017 +- ch = *((char *)s1)++;
  3018 +- if ((i = ch - *((char *)s2)++) != 0)
  3019 ++ ch = *(char *)s1;
  3020 ++ i = ch - *(char *)s2;
  3021 ++ s1++;
  3022 ++ s2++;
  3023 ++ if (i != 0)
  3024 + return i;
  3025 + if (ch == 0)
  3026 + return 0;
  3027 +@@ -538,8 +552,8 @@
2528 return 0; 3028 return 0;
2529 } 3029 }
2530 3030
@@ -2535,7 +3035,7 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c @@ -2535,7 +3035,7 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c
2535 for (p = s; *p != 0; p++) { } 3035 for (p = s; *p != 0; p++) { }
2536 return p - s; 3036 return p - s;
2537 } 3037 }
2538 -@@ -560,14 +560,6 @@ 3038 +@@ -560,14 +574,6 @@
2539 va_end(x1); 3039 va_end(x1);
2540 } 3040 }
2541 3041
@@ -2550,9 +3050,9 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c @@ -2550,9 +3050,9 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c
2550 void fatal() 3050 void fatal()
2551 { 3051 {
2552 printk("fatal."); 3052 printk("fatal.");
2553 -diff -ruN proll_18.orig/src/system.h proll-patch8/src/system.h 3053 +diff -ruN proll_18.orig/src/system.h proll-patch10/src/system.h
2554 --- proll_18.orig/src/system.h 2002-09-13 21:53:32.000000000 +0000 3054 --- proll_18.orig/src/system.h 2002-09-13 21:53:32.000000000 +0000
2555 -+++ proll-patch8/src/system.h 2004-11-13 15:50:49.000000000 +0000 3055 ++++ proll-patch10/src/system.h 2005-04-16 06:16:20.000000000 +0000
2556 @@ -16,7 +16,7 @@ 3056 @@ -16,7 +16,7 @@
2557 #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */ 3057 #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */
2558 #define NCTX_SWIFT 0x100 3058 #define NCTX_SWIFT 0x100
@@ -2562,9 +3062,118 @@ diff -ruN proll_18.orig/src/system.h proll-patch8/src/system.h @@ -2562,9 +3062,118 @@ diff -ruN proll_18.orig/src/system.h proll-patch8/src/system.h
2562 3062
2563 #ifndef __ASSEMBLY__ 3063 #ifndef __ASSEMBLY__
2564 struct bank { 3064 struct bank {
2565 -diff -ruN proll_18.orig/src/udp.c proll-patch8/src/udp.c 3065 +@@ -164,10 +164,10 @@
  3066 +
  3067 + extern __inline__ void setipl(unsigned long __orig_psr)
  3068 + {
  3069 +- __asm__ __volatile__("
  3070 +- wr %0, 0x0, %%psr
  3071 +- nop; nop; nop
  3072 +-" : /* no outputs */
  3073 ++ __asm__ __volatile__(
  3074 ++ "wr %0, 0x0, %%psr\n\t"
  3075 ++ "nop; nop; nop\n\t"
  3076 ++ : /* no outputs */
  3077 + : "r" (__orig_psr)
  3078 + : "memory", "cc");
  3079 + }
  3080 +@@ -176,13 +176,13 @@
  3081 + {
  3082 + unsigned long tmp;
  3083 +
  3084 +- __asm__ __volatile__("
  3085 +- rd %%psr, %0
  3086 +- nop; nop; nop; /* Sun4m + Cypress + SMP bug */
  3087 +- or %0, %1, %0
  3088 +- wr %0, 0x0, %%psr
  3089 +- nop; nop; nop
  3090 +-" : "=r" (tmp)
  3091 ++ __asm__ __volatile__(
  3092 ++ "rd %%psr, %0\n\t"
  3093 ++ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */
  3094 ++ "or %0, %1, %0\n\t"
  3095 ++ "wr %0, 0x0, %%psr\n\t"
  3096 ++ "nop; nop; nop\n\t"
  3097 ++ : "=r" (tmp)
  3098 + : "i" (PSR_PIL)
  3099 + : "memory");
  3100 + }
  3101 +@@ -191,13 +191,13 @@
  3102 + {
  3103 + unsigned long tmp;
  3104 +
  3105 +- __asm__ __volatile__("
  3106 +- rd %%psr, %0
  3107 +- nop; nop; nop; /* Sun4m + Cypress + SMP bug */
  3108 +- andn %0, %1, %0
  3109 +- wr %0, 0x0, %%psr
  3110 +- nop; nop; nop
  3111 +-" : "=r" (tmp)
  3112 ++ __asm__ __volatile__(
  3113 ++ "rd %%psr, %0\n\t"
  3114 ++ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */
  3115 ++ "andn %0, %1, %0\n\t"
  3116 ++ "wr %0, 0x0, %%psr\n\t"
  3117 ++ "nop; nop; nop\n\t"
  3118 ++ : "=r" (tmp)
  3119 + : "i" (PSR_PIL)
  3120 + : "memory");
  3121 + }
  3122 +@@ -214,18 +214,18 @@
  3123 + {
  3124 + unsigned long retval;
  3125 +
  3126 +- __asm__ __volatile__("
  3127 +- rd %%psr, %0
  3128 +- nop; nop; nop; /* Sun4m + Cypress + SMP bug */
  3129 +- and %0, %2, %%g1
  3130 +- and %1, %2, %%g2
  3131 +- xorcc %%g1, %%g2, %%g0
  3132 +- be 1f
  3133 +- nop
  3134 +- wr %0, %2, %%psr
  3135 +- nop; nop; nop;
  3136 +-1:
  3137 +-" : "=r" (retval)
  3138 ++ __asm__ __volatile__(
  3139 ++ "rd %%psr, %0\n\t"
  3140 ++ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */
  3141 ++ "and %0, %2, %%g1\n\t"
  3142 ++ "and %1, %2, %%g2\n\t"
  3143 ++ "xorcc %%g1, %%g2, %%g0\n\t"
  3144 ++ "be 1f\n\t"
  3145 ++ "nop\n\t"
  3146 ++ "wr %0, %2, %%psr\n\t"
  3147 ++ "nop; nop; nop;\n\t"
  3148 ++ "1:\n\t"
  3149 ++ : "=r" (retval)
  3150 + : "r" (__new_psr), "i" (PSR_PIL)
  3151 + : "g1", "g2", "memory", "cc");
  3152 +
  3153 +@@ -236,13 +236,13 @@
  3154 + {
  3155 + unsigned long retval;
  3156 +
  3157 +- __asm__ __volatile__("
  3158 +- rd %%psr, %0
  3159 +- nop; nop; nop; /* Sun4m + Cypress + SMP bug */
  3160 +- or %0, %1, %%g1
  3161 +- wr %%g1, 0x0, %%psr
  3162 +- nop; nop; nop
  3163 +-" : "=r" (retval)
  3164 ++ __asm__ __volatile__(
  3165 ++ "rd %%psr, %0\n\t"
  3166 ++ "nop; nop; nop;\n\t" /* Sun4m + Cypress + SMP bug */
  3167 ++ "or %0, %1, %%g1\n\t"
  3168 ++ "wr %%g1, 0x0, %%psr\n\t"
  3169 ++ "nop; nop; nop\n\t"
  3170 ++ : "=r" (retval)
  3171 + : "i" (PSR_PIL)
  3172 + : "g1", "memory");
  3173 +
  3174 +diff -ruN proll_18.orig/src/udp.c proll-patch10/src/udp.c
2566 --- proll_18.orig/src/udp.c 2001-12-24 05:12:53.000000000 +0000 3175 --- proll_18.orig/src/udp.c 2001-12-24 05:12:53.000000000 +0000
2567 -+++ proll-patch8/src/udp.c 2004-11-13 15:50:49.000000000 +0000 3176 ++++ proll-patch10/src/udp.c 2004-11-13 15:50:49.000000000 +0000
2568 @@ -81,7 +81,7 @@ 3177 @@ -81,7 +81,7 @@
2569 int source; 3178 int source;
2570 int dest; 3179 int dest;
@@ -2584,9 +3193,9 @@ diff -ruN proll_18.orig/src/udp.c proll-patch8/src/udp.c @@ -2584,9 +3193,9 @@ diff -ruN proll_18.orig/src/udp.c proll-patch8/src/udp.c
2584 /* Register IP packet type and set write buffer pointer */ 3193 /* Register IP packet type and set write buffer pointer */
2585 if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL) 3194 if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL)
2586 return(FALSE); 3195 return(FALSE);
2587 -diff -ruN proll_18.orig/src/vcons_zs.c proll-patch8/src/vcons_zs.c 3196 +diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c
2588 --- proll_18.orig/src/vcons_zs.c 1970-01-01 00:00:00.000000000 +0000 3197 --- proll_18.orig/src/vcons_zs.c 1970-01-01 00:00:00.000000000 +0000
2589 -+++ proll-patch8/src/vcons_zs.c 2005-03-20 10:25:39.000000000 +0000 3198 ++++ proll-patch10/src/vcons_zs.c 2005-04-10 07:01:03.000000000 +0000
2590 @@ -0,0 +1,68 @@ 3199 @@ -0,0 +1,68 @@
2591 +/** 3200 +/**
2592 + ** Console over 'zs' (Zilog serial port) 3201 + ** Console over 'zs' (Zilog serial port)
@@ -2648,7 +3257,7 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch8/src/vcons_zs.c @@ -2648,7 +3257,7 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch8/src/vcons_zs.c
2648 + unsigned zs_ptr = (unsigned) t->impl; 3257 + unsigned zs_ptr = (unsigned) t->impl;
2649 + 3258 +
2650 + while ((ldb_bypass(zs_ptr) & 1) != 1) { } 3259 + while ((ldb_bypass(zs_ptr) & 1) != 1) { }
2651 -+ return ldb_bypass(zs_ptr + ZS_DATA); 3260 ++ return ldb_bypass(zs_ptr + ZS_DATA) & 0xff;
2652 +} 3261 +}
2653 + 3262 +
2654 +void vcon_zs_fini(struct vconterm *t) 3263 +void vcon_zs_fini(struct vconterm *t)
@@ -2656,10 +3265,17 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch8/src/vcons_zs.c @@ -2656,10 +3265,17 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch8/src/vcons_zs.c
2656 + /* violent crash in the end */ 3265 + /* violent crash in the end */
2657 + ; 3266 + ;
2658 +} 3267 +}
2659 -diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c 3268 +diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c
2660 --- proll_18.orig/src/vconsole.c 1999-11-08 03:10:28.000000000 +0000 3269 --- proll_18.orig/src/vconsole.c 1999-11-08 03:10:28.000000000 +0000
2661 -+++ proll-patch8/src/vconsole.c 2005-03-02 14:29:05.000000000 +0000  
2662 -@@ -13,6 +13,10 @@ 3270 ++++ proll-patch10/src/vconsole.c 2005-04-17 19:23:21.000000000 +0000
  3271 +@@ -7,12 +7,17 @@
  3272 + #include "vconsole.h"
  3273 +
  3274 + #include "hconsole.h"
  3275 ++#include <system.h>
  3276 +
  3277 + static void vcon_i_cursfeed(struct vconterm *t);
  3278 + static void vcon_i_backflush(struct vconterm *t);
2663 3279
2664 struct hconsole hcons0; 3280 struct hconsole hcons0;
2665 3281
@@ -2670,7 +3286,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c @@ -2670,7 +3286,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c
2670 int vcon_init(struct vconterm *t, unsigned int a0) 3286 int vcon_init(struct vconterm *t, unsigned int a0)
2671 { 3287 {
2672 struct hconsole *hconp; 3288 struct hconsole *hconp;
2673 -@@ -25,11 +29,49 @@ 3289 +@@ -25,11 +30,49 @@
2674 3290
2675 t->vc_x = 0; t->vc_y = 0; 3291 t->vc_x = 0; t->vc_y = 0;
2676 t->backp = 0; t->backc = 0; 3292 t->backp = 0; t->backc = 0;
@@ -2720,7 +3336,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c @@ -2720,7 +3336,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c
2720 int vcon_write(struct vconterm *t, char *data, int leng) 3336 int vcon_write(struct vconterm *t, char *data, int leng)
2721 { 3337 {
2722 int l = leng; 3338 int l = leng;
2723 -@@ -40,29 +82,84 @@ 3339 +@@ -40,29 +83,99 @@
2724 if (l <= 0) break; 3340 if (l <= 0) break;
2725 c = *data++; --l; 3341 c = *data++; --l;
2726 3342
@@ -2741,6 +3357,9 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c @@ -2741,6 +3357,9 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c
2741 + case 'M': 3357 + case 'M':
2742 + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); 3358 + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1);
2743 + break; 3359 + break;
  3360 ++ default:
  3361 ++ printk("Unhandled escape code '%c'\n", c);
  3362 ++ break;
2744 + } 3363 + }
2745 break; 3364 break;
2746 - case 0x0D: /* Return */ 3365 - case 0x0D: /* Return */
@@ -2768,9 +3387,21 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c @@ -2768,9 +3387,21 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c
2768 + if (t->vc_par[1]) t->vc_par[1]--; 3387 + if (t->vc_par[1]) t->vc_par[1]--;
2769 + gotoxay(t, t->vc_par[1], t->vc_par[0]); 3388 + gotoxay(t, t->vc_par[1], t->vc_par[0]);
2770 + break; 3389 + break;
  3390 ++ case 'J':
  3391 ++ if (t->vc_par[0] == 0) {
  3392 ++ //erase from cursor to end of display
  3393 ++ hcon_clear(hconp, t->vc_y, t->vc_x, hconp->ydim_, hconp->xdim_);
  3394 ++ }
  3395 ++ break;
2771 + case 'M': 3396 + case 'M':
2772 + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); 3397 + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1);
2773 + break; 3398 + break;
  3399 ++ case 'm':
  3400 ++ break;
  3401 ++ default:
  3402 ++ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n",
  3403 ++ c, t->vc_par[0], t->vc_par[1], t->vc_par[2], t->vc_par[3], t->vc_par[4]);
  3404 ++ break;
2774 + } 3405 + }
2775 break; 3406 break;
2776 default: 3407 default:
@@ -2823,9 +3454,73 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c @@ -2823,9 +3454,73 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c
2823 } 3454 }
2824 } 3455 }
2825 } 3456 }
2826 -diff -ruN proll_18.orig/src/vconsole.h proll-patch8/src/vconsole.h 3457 +@@ -100,9 +213,62 @@
  3458 + return 0;
  3459 + }
  3460 +
  3461 ++static const unsigned char sunkbd_keycode[128] = {
  3462 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3463 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3464 ++ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0, 8,
  3465 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  3466 ++ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']',
  3467 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3468 ++ 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '\\', 13,
  3469 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3470 ++ 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/',
  3471 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3472 ++ ' ',
  3473 ++};
  3474 ++
  3475 ++static const unsigned char sunkbd_keycode_shifted[128] = {
  3476 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3477 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3478 ++ '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 0, 8,
  3479 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  3480 ++ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}',
  3481 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3482 ++ 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '|', 13,
  3483 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3484 ++ 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?',
  3485 ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  3486 ++ ' ',
  3487 ++};
  3488 ++
  3489 ++static int shiftstate;
  3490 ++
  3491 + int vcon_getch(struct vconterm *t)
  3492 + {
  3493 +- return -1;
  3494 ++ int ch;
  3495 ++
  3496 ++ while ((ldb_bypass(0x71000004) & 1) != 1) { }
  3497 ++ do {
  3498 ++ ch = ldb_bypass(0x71000006) & 0xff;
  3499 ++ if (ch == 99)
  3500 ++ shiftstate |= 1;
  3501 ++ else if (ch == 110)
  3502 ++ shiftstate |= 2;
  3503 ++ else if (ch == 227)
  3504 ++ shiftstate &= ~1;
  3505 ++ else if (ch == 238)
  3506 ++ shiftstate &= ~2;
  3507 ++ //printk("getch: %d\n", ch);
  3508 ++ }
  3509 ++ while ((ch & 0x80) == 0 || ch == 238 || ch == 227); // Wait for key release
  3510 ++ //printk("getch rel: %d\n", ch);
  3511 ++ ch &= 0x7f;
  3512 ++ if (shiftstate)
  3513 ++ ch = sunkbd_keycode_shifted[ch];
  3514 ++ else
  3515 ++ ch = sunkbd_keycode[ch];
  3516 ++ //printk("getch xlate: %d\n", ch);
  3517 ++ return ch;
  3518 + }
  3519 +
  3520 + void vcon_fini(struct vconterm *t)
  3521 +diff -ruN proll_18.orig/src/vconsole.h proll-patch10/src/vconsole.h
2827 --- proll_18.orig/src/vconsole.h 1999-11-08 00:58:13.000000000 +0000 3522 --- proll_18.orig/src/vconsole.h 1999-11-08 00:58:13.000000000 +0000
2828 -+++ proll-patch8/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 3523 ++++ proll-patch10/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000
2829 @@ -6,6 +6,8 @@ 3524 @@ -6,6 +6,8 @@
2830 #ifndef VCONSOLE_H 3525 #ifndef VCONSOLE_H
2831 #define VCONSOLE_H 3526 #define VCONSOLE_H