Commit 6d82d04a498a7c8a74a04f6b59c623eb3c2d69b7
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
Showing
2 changed files
with
792 additions
and
97 deletions
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 |