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 | 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 | @@ -4,6 +4,7 @@ |
| 5 | 5 | make -C krups-ser all |
| 6 | 6 | make -C espresso all |
| ... | ... | @@ -14,14 +14,14 @@ diff -ruN proll_18.orig/Makefile proll-patch8/Makefile |
| 14 | 14 | make -C espresso clean |
| 15 | 15 | make -C espresso-ser clean |
| 16 | 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 | 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 | 22 | +# proll: |
| 23 | 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 | 26 | +# Copyright 1999 Pete Zaitcev |
| 27 | 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 | 47 | +# want to shift it to form a PGD entry. A relocatable label will not work. |
| 48 | 48 | +# Linux kernel expects us to be at LINUX_OPPROM_BEGVM <asm-sparc/openprom.h>. |
| 49 | 49 | +PROLBASE = 0xffd00000 |
| 50 | -+PROLRODATA = 0xffd07000 | |
| 51 | -+PROLDATA = 0xffd09000 | |
| 50 | ++PROLRODATA = 0xffd08000 | |
| 51 | ++PROLDATA = 0xffd0b000 | |
| 52 | 52 | +PROLSIZE = 240*1024 |
| 53 | 53 | + |
| 54 | 54 | +# Linux |
| ... | ... | @@ -68,7 +68,7 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile |
| 68 | 68 | +OBJS = head.o wuf.o wof.o main.o $(CONSOLE) \ |
| 69 | 69 | + printf.o le.o system_qemu.o iommu.o \ |
| 70 | 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 | 73 | +all: $(ALL) |
| 74 | 74 | + |
| ... | ... | @@ -106,7 +106,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch8/qemu/Makefile |
| 106 | 106 | + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c |
| 107 | 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 | 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 | 111 | +arp.o: $(SRC)/arp.c $(SRC)/general.h $(SRC)/net.h $(SRC)/romlib.h $(SRC)/netpriv.h $(SRC)/arp.h |
| 111 | 112 | + $(CROSSCC) $(CFLAGS) -c $(SRC)/$*.c |
| 112 | 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 | 141 | + |
| 141 | 142 | +proll.aout: $(PROLLEXE) |
| 142 | 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 | 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 | 147 | @@ -0,0 +1,539 @@ |
| 147 | 148 | +/** |
| 148 | 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 | 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 | 157 | +#include <psr.h> |
| ... | ... | @@ -683,10 +684,10 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch8/qemu/head.S |
| 683 | 684 | +C_LABEL(ldb_bypass): |
| 684 | 685 | + retl |
| 685 | 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 | 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 | 692 | + ** Proll (PROM replacement) |
| 692 | 693 | + ** Copyright 1999 Pete Zaitcev |
| ... | ... | @@ -711,7 +712,9 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c |
| 711 | 712 | +void *init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, const char *cmdline, char boot_device, int nographic); |
| 712 | 713 | +int vcon_zs_init(struct vconterm *t, unsigned int a0); |
| 713 | 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 | 718 | +static void init_idprom(void); |
| 716 | 719 | + |
| 717 | 720 | +struct vconterm dp0; |
| ... | ... | @@ -733,7 +736,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c |
| 733 | 736 | +} *hw_idprom; |
| 734 | 737 | + |
| 735 | 738 | +int ignore_fault, fault_ignored; |
| 736 | -+void *printk_fn; | |
| 739 | ++void *printk_fn, *getch_fn; | |
| 737 | 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 | 748 | + unsigned int hiphybas; |
| 746 | 749 | + const void *romvec; |
| 747 | 750 | + unsigned int ram_size; |
| 748 | -+ char nographic; | |
| 751 | ++ char nographic, bootdev; | |
| 749 | 752 | + |
| 750 | 753 | + nographic = ldb_bypass(PHYS_JJ_EEPROM + 0x2F); |
| 751 | 754 | + if (!nographic) { |
| ... | ... | @@ -753,10 +756,12 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch8/qemu/main.c |
| 753 | 756 | + q_height = ldh_bypass(PHYS_JJ_EEPROM + 0x56); |
| 754 | 757 | + vcon_init(&dp0, PHYS_JJ_TCX_FB); |
| 755 | 758 | + printk_fn = vcon_write; |
| 759 | ++ getch_fn = vcon_getch; | |
| 756 | 760 | + } |
| 757 | 761 | + else { |
| 758 | 762 | + vcon_zs_init(&dp0, 0x71100004); |
| 759 | 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 | 795 | + sched_init(); |
| 791 | 796 | + le_probe(); |
| 792 | 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 | 805 | + if (bootp() != 0) fatal(); |
| 797 | 806 | + /* |
| 798 | 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 | 818 | + fname[14] = 0; |
| 810 | 819 | + |
| 811 | 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 | 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 | 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 | 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 | 881 | + * PROM interface support |
| 869 | 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 | 895 | + |
| 883 | 896 | +//#define DEBUG_OBP |
| 884 | 897 | + |
| 898 | ++#define PAGE_SIZE 4096 | |
| 899 | ++ | |
| 885 | 900 | +struct property { |
| 886 | 901 | + const char *name; |
| 887 | 902 | + const char *value; |
| ... | ... | @@ -1275,6 +1290,8 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c |
| 1275 | 1290 | +static int obp_devopen(char *str); |
| 1276 | 1291 | +static int obp_devclose(int dev_desc); |
| 1277 | 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 | 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 | 1370 | + romvec0.pv_nbgetchar = obp_nbgetchar; |
| 1354 | 1371 | + romvec0.pv_nbputchar = obp_nbputchar; |
| 1355 | 1372 | + romvec0.pv_reboot = obp_reboot; |
| 1373 | ++ romvec0.pv_printf = (void (*)(const char *fmt, ...))printk; | |
| 1356 | 1374 | + romvec0.pv_abort = obp_abort; |
| 1357 | 1375 | + romvec0.pv_halt = obp_halt; |
| 1358 | 1376 | + romvec0.pv_synchook = &synch_hook; |
| 1359 | 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 | 1382 | + switch(boot_device) { |
| 1361 | 1383 | + default: |
| 1362 | 1384 | + case 'a': |
| 1363 | 1385 | + obp_arg.argv[0] = "fd()"; |
| 1386 | ++ obp_arg.boot_dev[0] = 'f'; | |
| 1387 | ++ obp_arg.boot_dev[1] = 'd'; | |
| 1364 | 1388 | + break; |
| 1389 | ++ case 'd': | |
| 1390 | ++ obp_arg.boot_dev_unit = '2'; | |
| 1391 | ++ // Fall through | |
| 1365 | 1392 | + case 'c': |
| 1366 | 1393 | + obp_arg.argv[0] = "sd()"; |
| 1394 | ++ obp_arg.boot_dev[0] = 's'; | |
| 1395 | ++ obp_arg.boot_dev[1] = 'd'; | |
| 1367 | 1396 | + break; |
| 1368 | 1397 | + case 'n': |
| 1369 | 1398 | + obp_arg.argv[0] = "le()"; |
| 1399 | ++ obp_arg.boot_dev[0] = 'l'; | |
| 1400 | ++ obp_arg.boot_dev[1] = 'e'; | |
| 1370 | 1401 | + break; |
| 1371 | 1402 | + } |
| 1372 | 1403 | + obp_arg.argv[1] = cmdline; |
| ... | ... | @@ -1483,9 +1514,11 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch8/qemu/openprom.c |
| 1483 | 1514 | + return (const char *)-1; |
| 1484 | 1515 | +} |
| 1485 | 1516 | + |
| 1517 | ++extern int (*getch_fn)(struct vconterm *v); | |
| 1518 | ++ | |
| 1486 | 1519 | +static int obp_nbgetchar(void) { |
| 1487 | 1520 | + extern struct vconterm dp0; |
| 1488 | -+ return vcon_getch(&dp0); | |
| 1521 | ++ return getch_fn(&dp0); | |
| 1489 | 1522 | +} |
| 1490 | 1523 | + |
| 1491 | 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 | 1540 | + printk("halt, freezing\n"); |
| 1508 | 1541 | + for (;;) {} |
| 1509 | 1542 | +} |
| 1510 | -+ | |
| 1543 | ++#define isnum(c) ((c >= '0') && (c < '9')) | |
| 1544 | ++#define ctoi(c) (c - '0') | |
| 1511 | 1545 | +static int obp_devopen(char *str) { |
| 1512 | 1546 | +#ifdef DEBUG_OBP |
| 1513 | -+ printk("open %s\n", str); | |
| 1547 | ++ printk("obp_devopen(%s)\n", str); | |
| 1514 | 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 | 1562 | + return 0; |
| 1516 | 1563 | +} |
| 1517 | 1564 | + |
| 1518 | 1565 | +static int obp_devclose(int dev_desc) { |
| 1519 | 1566 | +#ifdef DEBUG_OBP |
| 1520 | -+ printk("close %d\n", dev_desc); | |
| 1567 | ++ printk("obp_devclose %d\n", dev_desc); | |
| 1521 | 1568 | +#endif |
| 1522 | 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 | 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 | 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 | 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 | 1626 | + ** Proll (PROM replacement) |
| 1538 | 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 | 1948 | +{ |
| 1860 | 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 | 1952 | + return p; |
| 1864 | 1953 | +} |
| 1865 | 1954 | + |
| 1866 | 1955 | +/* |
| 1867 | 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 | 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 | 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 | 1981 | + char ch; |
| 1882 | 1982 | + |
| 1883 | 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 | 1989 | + return i; |
| 1887 | 1990 | + if (ch == 0) |
| 1888 | 1991 | + return 0; |
| ... | ... | @@ -1949,9 +2052,9 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch8/qemu/system_qemu.c |
| 1949 | 2052 | + n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); |
| 1950 | 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 | 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 | 2058 | @@ -45,7 +45,7 @@ |
| 1956 | 2059 | #endif |
| 1957 | 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 | 2089 | + def_gw = IP_ANY; |
| 1987 | 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 | 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 | 2095 | @@ -104,7 +104,7 @@ |
| 1993 | 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 | 2101 | |
| 1999 | 2102 | /* Add a new antry to the ARP cache */ |
| 2000 | 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 | 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 | 2363 | @@ -29,6 +29,10 @@ |
| 2005 | 2364 | struct raster r_master; /* For a case of resize, whole fb */ |
| 2006 | 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 | 2383 | t->r_ = r; |
| 2025 | 2384 | t->r0_ = q; |
| 2026 | 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 | 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 | 2449 | @@ -1,6 +1,6 @@ |
| 2031 | 2450 | #define lat7_2_width 128 |
| 2032 | 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 | 2454 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 2036 | 2455 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18, |
| 2037 | 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 | 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 | 2460 | @@ -0,0 +1,121 @@ |
| 2042 | 2461 | +#define lat7_2_width 128 |
| 2043 | 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 | 2579 | + 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00, |
| 2161 | 2580 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, |
| 2162 | 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 | 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 | 2585 | @@ -185,8 +185,6 @@ |
| 2167 | 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 | 2591 | /* The Lance uses 24 bit addresses */ |
| 2173 | 2592 | /* On the Sun4c the DVMA will provide the remaining bytes for us */ |
| 2174 | 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 | 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 | 2606 | @@ -49,13 +49,20 @@ |
| 2179 | 2607 | unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */ |
| 2180 | 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 | 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 | 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 | 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 | 2670 | |
| 2243 | 2671 | /* Empty read buffer */ |
| 2244 | 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 | 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 | 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 | 2734 | }; |
| 2307 | 2735 | |
| 2308 | 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 | 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 | 2740 | @@ -41,7 +41,7 @@ |
| 2313 | 2741 | int aligner; |
| 2314 | 2742 | } wbuf; |
| ... | ... | @@ -2336,9 +2764,9 @@ diff -ruN proll_18.orig/src/packet.c proll-patch8/src/packet.c |
| 2336 | 2764 | { |
| 2337 | 2765 | struct sk_buff *skb; |
| 2338 | 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 | 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 | 2770 | @@ -19,7 +19,7 @@ |
| 2343 | 2771 | static void printn(struct prf_fp *, unsigned long, unsigned int); |
| 2344 | 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 | 2794 | putchar(c,filog); |
| 2367 | 2795 | } else if (c == 'l' || c == 'O') { |
| 2368 | 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 | 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 | 2800 | @@ -28,12 +28,18 @@ |
| 2373 | 2801 | * move to California. Only plain lat7 survived. |
| 2374 | 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 | 2816 | |
| 2389 | 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 | 2850 | @@ -94,6 +100,7 @@ |
| 2392 | 2851 | |
| 2393 | 2852 | #endif |
| ... | ... | @@ -2423,9 +2882,9 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch8/src/rconsole.c |
| 2423 | 2882 | p->nchars_ = LAT7_NCHARS; |
| 2424 | 2883 | p->width_ = LAT7_WIDTH; |
| 2425 | 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 | 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 | 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 | 2898 | int nchars_; /* 128 for ASCII ... 65536 for Unicode */ |
| 2440 | 2899 | int width_; /* [Pixels]. Maximum size is 16. */ |
| 2441 | 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 | 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 | 2906 | #define memcpy(dst, src, len) bcopy(src, dst, len) |
| 2447 | 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 | 2909 | -extern void bcopy(void *b1, void *b2, int length); |
| 2450 | 2910 | -extern int bcmp(void *b1, void *b2, int length); |
| 2911 | +-extern void bzero(void *b, int c); | |
| 2451 | 2912 | +extern void bcopy(const void *b1, void *b2, int length); |
| 2452 | 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 | 2916 | /* gcc complains about "conflicting types for builtin function strlen". */ |
| 2455 | 2917 | #define strlen(s) ssize(s) |
| 2456 | 2918 | -extern int ssize(char *s); |
| ... | ... | @@ -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 | 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 | 2926 | @@ -108,7 +108,7 @@ |
| 2465 | 2927 | static int set_bolt; /* Tick counter limit */ |
| 2466 | 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 | 2932 | 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0, |
| 2471 | 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 | 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 | 2938 | @@ -0,0 +1,21 @@ |
| 2477 | 2939 | +// Convert the lat7 font so that no conversion is needed at runtime. |
| 2478 | 2940 | +#define ORIG |
| ... | ... | @@ -2495,9 +2957,9 @@ diff -ruN proll_18.orig/src/swap.c proll-patch8/src/swap.c |
| 2495 | 2957 | + } |
| 2496 | 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 | 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 | 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 | 2971 | map_page(l1, va, pa, 0, highbase); |
| 2510 | 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 | 2999 | -void bcopy(void *f, void *t, int len) { |
| 3000 | +- while (len--) *((char *)t)++ = *((char *)f)++; | |
| 2517 | 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 | 3009 | /* Comparison is 7-bit */ |
| ... | ... | @@ -2524,7 +3012,19 @@ diff -ruN proll_18.orig/src/system.c proll-patch8/src/system.c |
| 2524 | 3012 | { |
| 2525 | 3013 | int i; |
| 2526 | 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 | 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 | 3035 | for (p = s; *p != 0; p++) { } |
| 2536 | 3036 | return p - s; |
| 2537 | 3037 | } |
| 2538 | -@@ -560,14 +560,6 @@ | |
| 3038 | +@@ -560,14 +574,6 @@ | |
| 2539 | 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 | 3050 | void fatal() |
| 2551 | 3051 | { |
| 2552 | 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 | 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 | 3056 | @@ -16,7 +16,7 @@ |
| 2557 | 3057 | #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */ |
| 2558 | 3058 | #define NCTX_SWIFT 0x100 |
| ... | ... | @@ -2562,9 +3062,118 @@ diff -ruN proll_18.orig/src/system.h proll-patch8/src/system.h |
| 2562 | 3062 | |
| 2563 | 3063 | #ifndef __ASSEMBLY__ |
| 2564 | 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 | 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 | 3177 | @@ -81,7 +81,7 @@ |
| 2569 | 3178 | int source; |
| 2570 | 3179 | int dest; |
| ... | ... | @@ -2584,9 +3193,9 @@ diff -ruN proll_18.orig/src/udp.c proll-patch8/src/udp.c |
| 2584 | 3193 | /* Register IP packet type and set write buffer pointer */ |
| 2585 | 3194 | if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL) |
| 2586 | 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 | 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 | 3199 | @@ -0,0 +1,68 @@ |
| 2591 | 3200 | +/** |
| 2592 | 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 | 3257 | + unsigned zs_ptr = (unsigned) t->impl; |
| 2649 | 3258 | + |
| 2650 | 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 | 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 | 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 | 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 | 3280 | struct hconsole hcons0; |
| 2665 | 3281 | |
| ... | ... | @@ -2670,7 +3286,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c |
| 2670 | 3286 | int vcon_init(struct vconterm *t, unsigned int a0) |
| 2671 | 3287 | { |
| 2672 | 3288 | struct hconsole *hconp; |
| 2673 | -@@ -25,11 +29,49 @@ | |
| 3289 | +@@ -25,11 +30,49 @@ | |
| 2674 | 3290 | |
| 2675 | 3291 | t->vc_x = 0; t->vc_y = 0; |
| 2676 | 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 | 3336 | int vcon_write(struct vconterm *t, char *data, int leng) |
| 2721 | 3337 | { |
| 2722 | 3338 | int l = leng; |
| 2723 | -@@ -40,29 +82,84 @@ | |
| 3339 | +@@ -40,29 +83,99 @@ | |
| 2724 | 3340 | if (l <= 0) break; |
| 2725 | 3341 | c = *data++; --l; |
| 2726 | 3342 | |
| ... | ... | @@ -2741,6 +3357,9 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c |
| 2741 | 3357 | + case 'M': |
| 2742 | 3358 | + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); |
| 2743 | 3359 | + break; |
| 3360 | ++ default: | |
| 3361 | ++ printk("Unhandled escape code '%c'\n", c); | |
| 3362 | ++ break; | |
| 2744 | 3363 | + } |
| 2745 | 3364 | break; |
| 2746 | 3365 | - case 0x0D: /* Return */ |
| ... | ... | @@ -2768,9 +3387,21 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch8/src/vconsole.c |
| 2768 | 3387 | + if (t->vc_par[1]) t->vc_par[1]--; |
| 2769 | 3388 | + gotoxay(t, t->vc_par[1], t->vc_par[0]); |
| 2770 | 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 | 3396 | + case 'M': |
| 2772 | 3397 | + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); |
| 2773 | 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 | 3406 | break; |
| 2776 | 3407 | default: |
| ... | ... | @@ -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 | 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 | 3524 | @@ -6,6 +6,8 @@ |
| 2830 | 3525 | #ifndef VCONSOLE_H |
| 2831 | 3526 | #define VCONSOLE_H | ... | ... |