From 9e61bde56a65c92ff67559f8ab94887f8aa57a4d Mon Sep 17 00:00:00 2001 From: bellard Date: Fri, 11 Nov 2005 00:24:58 +0000 Subject: [PATCH] sparc merge (Blue Swirl) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1620 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/esp.c | 42 +- pc-bios/proll.elf | Bin 152807 -> 132317 bytes pc-bios/proll.patch | 842 +++++++++++++++++++++++++++++++-------- target-sparc/helper.c | 8 +- target-sparc/op_helper.c | 8 + target-sparc/translate.c | 10 +- 6 files changed, 736 insertions(+), 174 deletions(-) diff --git a/hw/esp.c b/hw/esp.c index 6890bd144c0..169531ff17a 100644 --- a/hw/esp.c +++ b/hw/esp.c @@ -29,6 +29,8 @@ #ifdef DEBUG_ESP #define DPRINTF(fmt, args...) \ do { printf("ESP: " fmt , ##args); } while (0) +#define pic_set_irq(irq, level) \ +do { printf("ESP: set_irq(%d): %d\n", (irq), (level)); pic_set_irq((irq),(level));} while (0) #else #define DPRINTF(fmt, args...) #endif @@ -38,6 +40,8 @@ do { printf("ESP: " fmt , ##args); } while (0) #define ESP_MAXREG 0x3f #define TI_BUFSZ 65536 #define DMA_VER 0xa0000000 +#define DMA_INTR 1 +#define DMA_INTREN 0x10 #define DMA_LOADED 0x04000000 typedef struct ESPState { @@ -66,6 +70,7 @@ typedef struct ESPState { #define INTR_FC 0x08 #define INTR_BS 0x10 #define INTR_DC 0x20 +#define INTR_RST 0x80 #define SEQ_0 0x0 #define SEQ_CD 0x4 @@ -98,11 +103,11 @@ static void handle_satn(ESPState *s) s->ti_rptr = 0; s->ti_wptr = 0; - if (target > 4 || !s->bd[target]) { // No such drive + if (target >= 4 || !s->bd[target]) { // No such drive s->rregs[4] = STAT_IN; s->rregs[5] = INTR_DC; s->rregs[6] = SEQ_0; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); return; } @@ -192,7 +197,7 @@ static void handle_satn(ESPState *s) s->rregs[4] = STAT_IN | STAT_TC | STAT_DI; s->rregs[5] = INTR_BS | INTR_FC; s->rregs[6] = SEQ_CD; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); } @@ -209,13 +214,14 @@ static void dma_write(ESPState *s, const uint8_t *buf, uint32_t len) s->rregs[4] = STAT_IN | STAT_TC | STAT_ST; s->rregs[5] = INTR_BS | INTR_FC; s->rregs[6] = SEQ_CD; - s->espdmaregs[0] |= 1; } else { memcpy(s->ti_buf, buf, len); s->ti_size = dmalen; s->ti_rptr = 0; s->ti_wptr = 0; + s->rregs[7] = dmalen; } + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); } @@ -242,11 +248,12 @@ static void handle_ti(ESPState *s) s->rregs[4] = STAT_IN | STAT_TC | STAT_ST; s->rregs[5] = INTR_BS; s->rregs[6] = 0; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; } else { s->ti_size = dmalen; s->ti_rptr = 0; s->ti_wptr = 0; + s->rregs[7] = dmalen; } pic_set_irq(s->irq, 1); } @@ -265,6 +272,7 @@ static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr) uint32_t saddr; saddr = (addr & ESP_MAXREG) >> 2; + DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]); switch (saddr) { case 2: // FIFO @@ -278,11 +286,16 @@ static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr) s->ti_wptr = 0; } break; + case 5: + // interrupt + // Clear status bits except TC + s->rregs[4] &= STAT_TC; + pic_set_irq(s->irq, 0); + s->espdmaregs[0] &= ~DMA_INTR; + break; default: break; } - DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]); - return s->rregs[saddr]; } @@ -317,8 +330,9 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 1: DPRINTF("Flush FIFO (%2.2x)\n", val); - s->rregs[6] = 0; + //s->ti_size = 0; s->rregs[5] = INTR_FC; + s->rregs[6] = 0; break; case 2: DPRINTF("Chip reset (%2.2x)\n", val); @@ -326,6 +340,11 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 3: DPRINTF("Bus reset (%2.2x)\n", val); + s->rregs[5] = INTR_RST; + if (!(s->wregs[8] & 0x40)) { + s->espdmaregs[0] |= DMA_INTR; + pic_set_irq(s->irq, 1); + } break; case 0x10: handle_ti(s); @@ -362,7 +381,10 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 9 ... 10: break; - case 11 ... 15: + case 11: + s->rregs[saddr] = val & 0x15; + break; + case 12 ... 15: s->rregs[saddr] = val; break; default: @@ -403,7 +425,7 @@ static void espdma_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t va DPRINTF("write dmareg[%d]: 0x%8.8x -> 0x%8.8x\n", saddr, s->espdmaregs[saddr], val); switch (saddr) { case 0: - if (!(val & 0x10)) + if (!(val & DMA_INTREN)) pic_set_irq(s->irq, 0); if (val & 0x80) { esp_reset(s); diff --git a/pc-bios/proll.elf b/pc-bios/proll.elf index f6198f4d60c4e1e47f5ac8f371b5a0c5a6ca9196..21c739cac684e8db33020c48e2716f586249955c 100644 GIT binary patch literal 132317 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 POR$Mjr4mOM@nP@(B?J2w diff --git a/pc-bios/proll.patch b/pc-bios/proll.patch index fb215a0c611..dbe01e432ac 100644 --- a/pc-bios/proll.patch +++ b/pc-bios/proll.patch @@ -1,6 +1,6 @@ -diff -ruN proll_18.orig/Makefile proll-patch10/Makefile +diff -ruN proll_18.orig/Makefile proll-patch-15/Makefile --- proll_18.orig/Makefile 2002-09-13 14:16:59.000000000 +0000 -+++ proll-patch10/Makefile 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/Makefile 2005-11-09 18:14:51.000000000 +0000 @@ -4,6 +4,7 @@ make -C krups-ser all make -C espresso all @@ -14,14 +14,14 @@ diff -ruN proll_18.orig/Makefile proll-patch10/Makefile make -C espresso clean make -C espresso-ser clean + make -C qemu clean -diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile +diff -ruN proll_18.orig/qemu/Makefile proll-patch-15/qemu/Makefile --- proll_18.orig/qemu/Makefile 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/Makefile 2005-04-12 14:42:23.000000000 +0000 ++++ proll-patch-15/qemu/Makefile 2005-08-14 10:25:06.000000000 +0000 @@ -0,0 +1,123 @@ +# +# proll: +# qemu/Makefile - make PROLL for QEMU -+# $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $ ++# $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ +# +# Copyright 1999 Pete Zaitcev +# This is Free Software is licensed under terms of GNU General Public License. @@ -55,8 +55,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile +# Fixed %g6 is for arch/sparc/kernel/head.S, it seems ok w/o -ffixed-g6. +# Kernel uses -fcall-used-g5 -fcall-used-g7, we probably do not need them. +# __ANSI__ is supposed to be on by default but it is not. -+CFLAGS = -O2 -Wall -DPROLBASE=$(PROLBASE) -DPROLDATA=$(PROLDATA) -DPROLRODATA=$(PROLRODATA) -D__ANSI__=1 -I$(SRC) -mcpu=hypersparc -g -DQEMU -+ASFLAGS = -D__ASSEMBLY__ -I$(SRC) -DPROLRODATA=$(PROLRODATA) -DPROLDATA=$(PROLDATA) -DPROLSIZE=$(PROLSIZE) -g ++CFLAGS = -O2 -W -Wall -DPROLBASE=$(PROLBASE) -DPROLDATA=$(PROLDATA) -DPROLRODATA=$(PROLRODATA) -D__ANSI__=1 -I$(SRC) -mcpu=hypersparc -Wa,-xarch=v8 -g -DQEMU -m32 -fno-builtin ++ASFLAGS = -D__ASSEMBLY__ -I$(SRC) -DPROLRODATA=$(PROLRODATA) -DPROLDATA=$(PROLDATA) -DPROLSIZE=$(PROLSIZE) -g -Wa,-xarch=v8 -Wa,-32 +# Solaris or Linux/i386 cross compilation +#CFLAGS = -Iinclude -O + @@ -141,17 +141,17 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile + +proll.aout: $(PROLLEXE) + $(ELFTOAOUT) -o proll.aout $(PROLLEXE) -diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +diff -ruN proll_18.orig/qemu/head.S proll-patch-15/qemu/head.S --- proll_18.orig/qemu/head.S 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/head.S 2005-03-02 15:30:47.000000000 +0000 -@@ -0,0 +1,539 @@ ++++ proll-patch-15/qemu/head.S 2005-07-12 22:24:17.000000000 +0000 +@@ -0,0 +1,543 @@ +/** + ** Standalone startup code for Linux PROM emulator. + ** Copyright 1999 Pete A. Zaitcev + ** This code is licensed under GNU General Public License. + **/ +/* -+ * $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $ ++ * $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ + */ + +#include @@ -443,6 +443,10 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +C_LABEL(bootup_user_stack): .skip 0x2000 + + .section ".text" ++ .register %g2, #scratch ++ .register %g3, #scratch ++ .register %g6, #scratch ++ .register %g7, #scratch + +goprol: + ! %g1 contains end of memory @@ -684,9 +688,9 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +C_LABEL(ldb_bypass): + retl + lduba [%o0] ASI_M_BYPASS, %o0 -diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c +diff -ruN proll_18.orig/qemu/main.c proll-patch-15/qemu/main.c --- proll_18.orig/qemu/main.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/main.c 2005-04-16 18:03:23.000000000 +0000 ++++ proll-patch-15/qemu/main.c 2005-08-14 10:07:48.000000000 +0000 @@ -0,0 +1,185 @@ +/** + ** Proll (PROM replacement) @@ -852,7 +856,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c + +/* + */ -+void udelay(unsigned long usecs) ++void udelay(__attribute__((unused)) unsigned long usecs) +{ + // Qemu hardware is perfect and does not need any delays! +} @@ -873,10 +877,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c + hw_idprom = va_prom; +} + -diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +diff -ruN proll_18.orig/qemu/openprom.c proll-patch-15/qemu/openprom.c --- proll_18.orig/qemu/openprom.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/openprom.c 2005-04-16 17:30:19.000000000 +0000 -@@ -0,0 +1,741 @@ ++++ proll-patch-15/qemu/openprom.c 2005-11-07 20:11:04.000000000 +0000 +@@ -0,0 +1,910 @@ +/* + * PROM interface support + * Copyright 1996 The Australian National University. @@ -900,7 +904,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +struct property { + const char *name; + const char *value; -+ const int length; ++ int length; +}; + +struct node { @@ -920,12 +924,13 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const struct property null_properties = { NULL, NULL, -1 }; +static const int prop_true = -1; + -+static const struct property propv_root[] = { -+ {"name", "SUNW,JavaStation-1", sizeof("SUNW,JavaStation-1") }, ++static struct property propv_root[7]; ++ ++static const struct property propv_root_templ[] = { ++ {"name", "SUNW,SparcStation-5", sizeof("SUNW,SparcStation-5") }, + {"idprom", obp_idprom, IDPROM_SIZE}, -+ {"banner-name", "JavaStation", sizeof("JavaStation")}, ++ {"banner-name", "SparcStation", sizeof("SparcStation")}, + {"compatible", "sun4m", 6}, -+ {NULL, NULL, -1} +}; + +static const int prop_iommu_reg[] = { @@ -986,7 +991,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const int height = 0x300; +static const int width = 0x400; +static const int linebytes = 0x400; -+static const int depth = 8; ++static const int depth = 24; +static const int tcx_intr[] = { 5, 0 }; +static const int tcx_interrupts = 5; +static const struct property propv_sbus_tcx[] = { @@ -1004,7 +1009,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {"linebytes", (char*)&linebytes, sizeof(int)}, + {"depth", (char*)&depth, sizeof(int)}, + {"reg", (char*)&prop_tcx_regs[0], sizeof(prop_tcx_regs)}, -+ {"tcx-8-bit", (char*)&prop_true, 0}, ++ {"tcx-8-bit", 0, -1}, + {"intr", (char*)&tcx_intr[0], sizeof(tcx_intr)}, + {"interrupts", (char*)&tcx_interrupts, sizeof(tcx_interrupts)}, + {"device_type", "display", sizeof("display")}, @@ -1101,15 +1106,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const int prop_zs_reg[] = { + 0x0, 0x00000000, 0x00000008, +}; -+static const int prop_zs_slave[] = { 1 }; +static void *prop_zs_addr; ++static const int prop_zs_slave = 1; +static const struct property propv_obio_zs[] = { + {"name", "zs", sizeof("zs")}, + {"reg", (char*)&prop_zs_reg[0], sizeof(prop_zs_reg) }, -+ {"slave", (char*)&prop_zs_slave[0], sizeof(prop_zs_slave) }, ++ {"slave", (char*)&prop_zs_slave, sizeof(prop_zs_slave) }, + {"device_type", "serial", sizeof("serial") }, + {"intr", (char*)&prop_zs_intr[0], sizeof(prop_zs_intr) }, + {"address", (char*)&prop_zs_addr, sizeof(prop_zs_addr) }, ++ {"keyboard", (char*)&prop_true, 0}, ++ {"mouse", (char*)&prop_true, 0}, + {NULL, NULL, -1} +}; + @@ -1118,11 +1125,11 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + 0x0, 0x00100000, 0x00000008, +}; +static void *prop_zs1_addr; -+static const int prop_zs1_slave[] = { 0 }; ++static const int prop_zs1_slave = 0; +static const struct property propv_obio_zs1[] = { + {"name", "zs", sizeof("zs")}, + {"reg", (char*)&prop_zs1_reg[0], sizeof(prop_zs1_reg) }, -+ {"slave", (char*)&prop_zs1_slave[0], sizeof(prop_zs1_slave) }, ++ {"slave", (char*)&prop_zs1_slave, sizeof(prop_zs1_slave) }, + {"device_type", "serial", sizeof("serial") }, + {"intr", (char*)&prop_zs1_intr[0], sizeof(prop_zs1_intr) }, + {"address", (char*)&prop_zs1_addr, sizeof(prop_zs1_addr) }, @@ -1185,6 +1192,15 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {NULL, NULL, -1} +}; + ++static const int prop_apc_reg[] = { ++ 0x4, 0x0a000000, 0x00000010, ++}; ++static const struct property propv_sbus_apc[] = { ++ {"name", "xxxpower-management", sizeof("xxxpower-management")}, ++ {"reg", (char*)&prop_apc_reg[0], sizeof(prop_apc_reg) }, ++ {NULL, NULL, -1} ++}; ++ +static const int prop_fd_intr[] = { 0x2b, 0x0 }; +static const int prop_fd_reg[] = { + 0x0, 0x00400000, 0x0000000f, @@ -1221,41 +1237,62 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {"name", "options", sizeof("options")}, + {"screen-#columns", "80", sizeof("80")}, + {"screen-#rows", "25", sizeof("25")}, -+ {"tpe-link-test?", "true", sizeof("true")}, ++ {"tpe-link-test?", (char *)&prop_true, 0}, + {"ttya-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, -+ {"ttya-ignore-cd", "true", sizeof("true")}, -+ {"ttya-rts-dtr-off", "false", sizeof("false")}, ++ {"ttya-ignore-cd", (char *)&prop_true, 0}, ++ {"ttya-rts-dtr-off", 0, -1}, + {"ttyb-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, -+ {"ttyb-ignore-cd", "true", sizeof("true")}, -+ {"ttyb-rts-dtr-off", "false", sizeof("false")}, ++ {"ttyb-ignore-cd", (char *)&prop_true, 0}, ++ {"ttyb-rts-dtr-off", 0, -1}, ++ {NULL, NULL, -1} ++}; ++ ++static int prop_mem_reg[3]; ++static int prop_mem_avail[3]; ++ ++static const struct property propv_memory[] = { ++ {"name", "memory", sizeof("memory")}, ++ {"reg", (char*)&prop_mem_reg[0], sizeof(prop_mem_reg) }, ++ {"available", (char*)&prop_mem_avail[0], sizeof(prop_mem_avail) }, ++ {NULL, NULL, -1} ++}; ++ ++static int prop_vmem_avail[6]; ++ ++static const struct property propv_vmemory[] = { ++ {"name", "virtual-memory", sizeof("virtual-memory")}, ++ {"available", (char*)&prop_vmem_avail[0], sizeof(prop_vmem_avail) }, + {NULL, NULL, -1} +}; + +static const struct node nodes[] = { + { &null_properties, 1, 0 }, /* 0 = big brother of root */ + { propv_root, 0, 2 }, /* 1 "/" */ -+ { propv_iommu, 11, 3 }, /* 2 "/iommu" */ ++ { propv_iommu, 12, 3 }, /* 2 "/iommu" */ + { propv_sbus, 0, 4 }, /* 3 "/iommu/sbus" */ + { propv_sbus_tcx, 5, 0 }, /* 4 "/iommu/sbus/SUNW,tcx" */ + { propv_sbus_ledma, 7, 6 }, /* 5 "/iommu/sbus/ledma" */ + { propv_sbus_ledma_le, 0, 0 }, /* 6 "/iommu/sbus/ledma/le" */ + { propv_sbus_cs4231, 8, 0 }, /* 7 "/iommu/sbus/SUNW,CS4231 */ + { propv_sbus_bpp, 9, 0 }, /* 8 "/iommu/sbus/SUNW,bpp */ -+ { propv_sbus_espdma, 0, 10 }, /* 9 "/iommu/sbus/espdma" */ ++ { propv_sbus_espdma, 11, 10 }, /* 9 "/iommu/sbus/espdma" */ + { propv_sbus_espdma_esp, 0, 0 }, /* 10 "/iommu/sbus/espdma/esp" */ -+ { propv_cpu, 12, 0 }, /* 11 "/STP1012PGA" */ -+ { propv_obio, 22, 13 }, /* 12 "/obio" */ -+ { propv_obio_int, 14, 0 }, /* 13 "/obio/interrupt" */ -+ { propv_obio_cnt, 15, 0 }, /* 14 "/obio/counter" */ -+ { propv_obio_eep, 16, 0 }, /* 15 "/obio/eeprom" */ -+ { propv_obio_auxio, 17, 0 }, /* 16 "/obio/auxio" */ -+ { propv_obio_zs1, 18, 0 }, /* 17 "/obio/zs@0,100000" ++ { propv_sbus_apc, 0, 0 }, /* 11 "/iommu/sbus/power-management */ ++ { propv_cpu, 13, 0 }, /* 12 "/STP1012PGA" */ ++ { propv_obio, 23, 14 }, /* 13 "/obio" */ ++ { propv_obio_int, 15, 0 }, /* 14 "/obio/interrupt" */ ++ { propv_obio_cnt, 16, 0 }, /* 15 "/obio/counter" */ ++ { propv_obio_eep, 17, 0 }, /* 16 "/obio/eeprom" */ ++ { propv_obio_auxio, 18, 0 }, /* 17 "/obio/auxio" */ ++ { propv_obio_zs1, 19, 0 }, /* 18 "/obio/zs@0,100000" + Must be before zs@0,0! */ -+ { propv_obio_zs, 19, 0 }, /* 18 "/obio/zs@0,0" */ -+ { propv_obio_fd, 20, 0 }, /* 19 "/obio/SUNW,fdtwo" */ -+ { propv_obio_pw, 21, 0 }, /* 20 "/obio/power" */ -+ { propv_obio_cf, 0, 0 }, /* 21 "/obio/slavioconfig@0,800000" */ -+ { propv_options, 0, 0 }, /* 22 "/options" */ ++ { propv_obio_zs, 20, 0 }, /* 19 "/obio/zs@0,0" */ ++ { propv_obio_fd, 21, 0 }, /* 20 "/obio/SUNW,fdtwo" */ ++ { propv_obio_pw, 22, 0 }, /* 21 "/obio/power" */ ++ { propv_obio_cf, 0, 0 }, /* 22 "/obio/slavioconfig@0,800000" */ ++ { propv_options, 24, 0 }, /* 23 "/options" */ ++ { propv_memory, 25, 0 }, /* 24 "/memory" */ ++ { propv_vmemory, 0, 0 }, /* 25 "/virtual-memory" */ +}; + +static struct linux_mlist_v0 totphys[MAX_BANKS]; @@ -1281,6 +1318,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + +static void (*synch_hook)(void); +static char obp_stdin, obp_stdout; ++static int obp_fd_stdin, obp_fd_stdout; + +static int obp_nbgetchar(void); +static int obp_nbputchar(int ch); @@ -1289,9 +1327,13 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static void obp_halt(void); +static int obp_devopen(char *str); +static int obp_devclose(int dev_desc); ++static int obp_devread(int dev_desc, char *buf, int nbytes); ++static int obp_devwrite(int dev_desc, char *buf, int nbytes); ++static int obp_devseek(int dev_desc, int hi, int lo); +static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf); +static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size); +static void obp_dumb_munmap(char *va, unsigned int size); ++static int obp_inst2pkg(int dev_desc); + +static void doublewalk(unsigned ptab1, unsigned va) +{ @@ -1304,6 +1346,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + +static struct linux_romvec romvec0; + ++struct fd { ++ int unit, part; ++ int offset; ++ int (*pread)(int dev_desc, int offset, char *buf, unsigned int nbytes); ++ int (*pwrite)(int dev_desc, int offset, char *buf, unsigned int nbytes); ++} fd_table[16]; ++ ++static int fd_index; ++static int con_pread(int dev_desc, int offset, char *buf, unsigned int nbytes); ++static int con_pwrite(int dev_desc, int offset, char *buf, unsigned int nbytes); ++ +void * +init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, + const char *cmdline, char boot_device, int nographic) @@ -1345,6 +1398,18 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + totmap[0].theres_more = 0; + totmap[0].start_adr = (char*) PROLBASE; + totmap[0].num_bytes = PROLSIZE; ++ prop_mem_reg[0] = 0; ++ prop_mem_reg[1] = 0; ++ prop_mem_reg[2] = bankv[0].length; ++ prop_mem_avail[0] = 0; ++ prop_mem_avail[1] = 0; ++ prop_mem_avail[2] = hiphybas; ++ prop_vmem_avail[0] = 0; ++ prop_vmem_avail[1] = 0; ++ prop_vmem_avail[2] = PROLBASE-1; ++ prop_vmem_avail[3] = 0; ++ prop_vmem_avail[4] = 0xffe00000; ++ prop_vmem_avail[5] = 0x00200000; + + /* + * idprom @@ -1353,6 +1418,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + + // Linux wants a R/W romvec table + romvec0.pv_magic_cookie = LINUX_OPPROM_MAGIC; ++ romvec0.pv_romvers = 3; + romvec0.pv_plugin_revision = 77; + romvec0.pv_printrev = 0x10203; + romvec0.pv_v0mem.v0_totphys = &ptphys; @@ -1375,10 +1441,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + romvec0.pv_halt = obp_halt; + romvec0.pv_synchook = &synch_hook; + romvec0.pv_v0bootargs = &obp_argp; ++ romvec0.pv_v2devops.v2_inst2pkg = obp_inst2pkg; + romvec0.pv_v2devops.v2_dumb_mmap = obp_dumb_mmap; + romvec0.pv_v2devops.v2_dumb_munmap = obp_dumb_munmap; ++ romvec0.pv_v2devops.v2_dev_open = obp_devopen; ++ romvec0.pv_v2devops.v2_dev_close = (void (*)(int))obp_devclose; ++ romvec0.pv_v2devops.v2_dev_read = obp_devread; ++ romvec0.pv_v2devops.v2_dev_write = obp_devwrite; ++ romvec0.pv_v2devops.v2_dev_seek = obp_devseek; + obp_arg.boot_dev_ctrl = 0; + obp_arg.boot_dev_unit = '0'; ++ obp_arg.argv[0] = "sd(0,0,0):d"; + switch(boot_device) { + default: + case 'a': @@ -1388,9 +1461,9 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + break; + case 'd': + obp_arg.boot_dev_unit = '2'; ++ obp_arg.argv[0] = "sd(0,2,0):d"; + // Fall through + case 'c': -+ obp_arg.argv[0] = "sd()"; + obp_arg.boot_dev[0] = 's'; + obp_arg.boot_dev[1] = 'd'; + break; @@ -1401,13 +1474,39 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + break; + } + obp_arg.argv[1] = cmdline; -+ ++ romvec0.pv_v2bootargs.bootpath = &obp_arg.argv[0]; ++ romvec0.pv_v2bootargs.bootargs = &cmdline; ++ romvec0.pv_v2bootargs.fd_stdin = &obp_fd_stdin; ++ romvec0.pv_v2bootargs.fd_stdout = &obp_fd_stdout; ++ ++ bcopy(propv_root_templ, propv_root, sizeof(propv_root_templ)); ++ propv_root[4].name = "stdin-path"; ++ propv_root[5].name = "stdout-path"; ++ obp_fd_stdin = 0; ++ obp_fd_stdout = 1; ++ fd_table[0].pread = con_pread; ++ fd_table[0].pwrite = con_pwrite; ++ fd_table[1].pread = con_pread; ++ fd_table[1].pwrite = con_pwrite; ++ fd_index = 2; + if (nographic) { + obp_stdin = PROMDEV_TTYA; ++ propv_root[4].value = "/obio/zs@0,100000:a"; ++ propv_root[4].length = sizeof("/obio/zs@0,100000:a"); ++ fd_table[0].unit = 18; + obp_stdout = PROMDEV_TTYA; ++ propv_root[5].value = "/obio/zs@0,100000:a"; ++ propv_root[5].length = sizeof("/obio/zs@0,100000:a"); ++ fd_table[1].unit = 18; + } else { + obp_stdin = PROMDEV_KBD; ++ propv_root[4].value = "/obio/zs@0,0"; ++ propv_root[4].length = sizeof("/obio/zs@0,0"); ++ fd_table[0].unit = 19; + obp_stdout = PROMDEV_SCREEN; ++ propv_root[5].value = "/iommu/sbus/SUNW,tcx"; ++ propv_root[5].length = sizeof("/iommu/sbus/SUNW,tcx"); ++ fd_table[1].unit = 4; + } + prop_zs_addr = map_io(0x71000000, 8); + prop_zs1_addr = map_io(0x71100000, 8); @@ -1481,7 +1580,10 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + return -1; +} + -+static int obp_setprop(int node, char *name, char *value, int len) ++static int obp_setprop(__attribute__((unused)) int node, ++ __attribute__((unused)) char *name, ++ __attribute__((unused)) char *value, ++ __attribute__((unused)) int len) +{ +#ifdef DEBUG_OBP + printk("obp_setprop(%d, %s) = %s (%d)\n", node, name, value, len); @@ -1511,7 +1613,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +#ifdef DEBUG_OBP + printk("obp_nextprop(%d, %s): not found\n", node, name); +#endif -+ return (const char *)-1; ++ return ""; +} + +extern int (*getch_fn)(struct vconterm *v); @@ -1527,21 +1629,60 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +} + +static void obp_reboot(char *str) { -+ printk("rebooting (%s): not implemented, freezing\n", str); ++ printk("rebooting (%s)\n", str); ++ stb_bypass(0x71f00000, 1); + for (;;) {} +} + +static void obp_abort() { -+ printk("abort, freezing\n"); ++ printk("abort, power off\n"); ++ stb_bypass(0x71910000, 1); + for (;;) {} +} + +static void obp_halt() { -+ printk("halt, freezing\n"); ++ printk("halt, power off\n"); ++ stb_bypass(0x71910000, 1); + for (;;) {} +} ++ ++extern void *esp_read(int unit, int part, int offset, short len); ++ ++static int esp_pread(int dev_desc, int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ void *src; ++ ++ for(i = 0; i < nbytes; i += 512) { ++ src = esp_read(fd_table[dev_desc].unit, fd_table[dev_desc].part, (offset + i) / 512, 512); ++ memcpy(&buf[i], src, 512); ++ } ++ return nbytes; ++} ++ ++static int con_pread(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ ++ for(i = 0; i < nbytes; i ++) { ++ buf[i] = obp_nbgetchar(); ++ } ++ return nbytes; ++} ++ ++static int con_pwrite(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ ++ for(i = 0; i < nbytes; i ++) { ++ obp_nbputchar(buf[i]); ++ } ++ return nbytes; ++} ++ +#define isnum(c) ((c >= '0') && (c < '9')) +#define ctoi(c) (c - '0') ++ +static int obp_devopen(char *str) { +#ifdef DEBUG_OBP + printk("obp_devopen(%s)\n", str); @@ -1557,39 +1698,32 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + else { + target = ctoi(str[5]) & 7; + } -+ return 's' + target; ++ fd_table[fd_index].unit = target; ++ fd_table[fd_index].part = str[10] - 'a'; ++ fd_table[fd_index].pread = esp_pread; ++ return fd_index++; // XXX + } + return 0; +} + -+static int obp_devclose(int dev_desc) { ++static int obp_devclose(__attribute__((unused)) int dev_desc) { +#ifdef DEBUG_OBP + printk("obp_devclose %d\n", dev_desc); +#endif ++ fd_index--; // XXX + return 0; +} + -+extern void *esp_read(int unit, int offset, short len); -+ +static int obp_rdblkdev(int dev_desc, int num_blks, int offset, char *buf) +{ -+ unsigned int i; -+ void *src; -+ +#ifdef DEBUG_OBP + printk("obp_rdblkdev: fd %d, num_blks %d, offset %d, buf 0x%x\n", dev_desc, num_blks, offset, buf); +#endif -+ if (dev_desc >= 's' && dev_desc < 'v') { -+ for(i = 0; i < num_blks; i++) { -+ src = esp_read(dev_desc - 's', offset + i, 1); -+ memcpy(&buf[i << 9], src, 512); -+ } -+ return num_blks; -+ } -+ return -1; ++ return fd_table[dev_desc].pread(dev_desc, offset, buf, num_blks * 512); +} + -+static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size) ++static char *obp_dumb_mmap(char *va, __attribute__((unused)) int which_io, ++ unsigned int pa, unsigned int size) +{ + unsigned int npages; + unsigned int off; @@ -1611,16 +1745,55 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + return va; +} + -+static void obp_dumb_munmap(char *va, unsigned int size) ++static void obp_dumb_munmap(__attribute__((unused)) char *va, ++ __attribute__((unused)) unsigned int size) +{ +#ifdef DEBUG_OBP + printk("obp_dumb_munmap: virta %x, sz %d\n", va, size); +#endif -+ +} -diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch10/qemu/system_qemu.c ++ ++static int obp_devread(int dev_desc, char *buf, int nbytes) ++{ ++ int ret; ++#ifdef DEBUG_OBP ++ printk("obp_devread: fd %d, nbytes %d\n", dev_desc, nbytes); ++#endif ++ ret = fd_table[dev_desc].pread(dev_desc, fd_table[dev_desc].offset, buf, nbytes); ++ fd_table[dev_desc].offset += nbytes; ++ return ret; ++} ++ ++static int obp_devwrite(int dev_desc, char *buf, int nbytes) ++{ ++ int ret; ++#ifdef DEBUG_OBP ++ printk("obp_devwrite: fd %d, buf %s, nbytes %d\n", dev_desc, buf, nbytes); ++#endif ++ ret = fd_table[dev_desc].pwrite(dev_desc, fd_table[dev_desc].offset, buf, nbytes); ++ fd_table[dev_desc].offset += nbytes; ++ return ret; ++} ++ ++static int obp_devseek(int dev_desc, __attribute__((unused)) int hi, int lo) ++{ ++#ifdef DEBUG_OBP ++ printk("obp_devseek: fd %d, hi %d, lo %d\n", dev_desc, hi, lo); ++#endif ++ fd_table[dev_desc].offset = lo; ++ return 0; ++} ++ ++static int obp_inst2pkg(int dev_desc) ++{ ++#ifdef DEBUG_OBP ++ printk("obp_inst2pkg: fd %d\n", dev_desc); ++#endif ++ return fd_table[dev_desc].unit; ++} +diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch-15/qemu/system_qemu.c --- proll_18.orig/qemu/system_qemu.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000 @@ -0,0 +1,430 @@ +/** + ** Proll (PROM replacement) @@ -2052,9 +2225,9 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch10/qemu/system_qemu.c + n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); + st_bypass(ptr, n); +}; -diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c +diff -ruN proll_18.orig/src/arp.c proll-patch-15/src/arp.c --- proll_18.orig/src/arp.c 2001-12-24 05:12:31.000000000 +0000 -+++ proll-patch10/src/arp.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/arp.c 2005-08-14 10:10:11.000000000 +0000 @@ -45,7 +45,7 @@ #endif static struct arp_cache arp_list[ARPNUM]; /* ARP address cache */ @@ -2064,7 +2237,19 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c -@@ -144,7 +144,7 @@ +@@ -100,10 +100,7 @@ + * + * ARP receiver routine + */ +-static int arp_recv(buf, bufsize, addr) +-unsigned char *buf; +-int bufsize; +-unsigned char *addr; ++static int arp_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) + { + register struct arphdr *ahp = (struct arphdr *)buf; + +@@ -144,7 +141,7 @@ * * Resolve IP address and return pointer to hardware address. */ @@ -2073,7 +2258,7 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c t_ipaddr ip; { int i; -@@ -230,14 +230,11 @@ +@@ -230,14 +227,11 @@ */ int init_arp() { @@ -2089,9 +2274,9 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c + def_gw = IP_ANY; return(TRUE); } -diff -ruN proll_18.orig/src/arp.h proll-patch10/src/arp.h +diff -ruN proll_18.orig/src/arp.h proll-patch-15/src/arp.h --- proll_18.orig/src/arp.h 1999-03-18 03:39:43.000000000 +0000 -+++ proll-patch10/src/arp.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/arp.h 2004-11-13 15:50:49.000000000 +0000 @@ -104,7 +104,7 @@ extern int init_arp __P((void)); @@ -2101,10 +2286,22 @@ diff -ruN proll_18.orig/src/arp.h proll-patch10/src/arp.h /* Add a new antry to the ARP cache */ extern void addcache __P((unsigned char *ha, t_ipaddr ip)); -diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c +diff -ruN proll_18.orig/src/bootp.c proll-patch-15/src/bootp.c +--- proll_18.orig/src/bootp.c 1999-12-15 17:20:30.000000000 +0000 ++++ proll-patch-15/src/bootp.c 2005-08-14 10:16:09.000000000 +0000 +@@ -151,7 +151,7 @@ + while (TRUE) { + boot_xid = get_ticks() + random(); + bootp_send(); +- i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout, CHR_ESC); ++ i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout); + if (i < 0) { /* user pressed ESC */ + printf("\nAborted\n"); + return(1); +diff -ruN proll_18.orig/src/esp.c proll-patch-15/src/esp.c --- proll_18.orig/src/esp.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/esp.c 2005-04-16 06:24:23.000000000 +0000 -@@ -0,0 +1,252 @@ ++++ proll-patch-15/src/esp.c 2005-08-15 18:42:46.000000000 +0000 +@@ -0,0 +1,305 @@ +#include /* == */ +#include /* __P for netpriv.h */ +#include /* dmaga */ @@ -2138,6 +2335,10 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + struct esp_dma *espdma; /* If set this points to espdma */ + + unsigned char *buffer; ++ struct disk_info { ++ unsigned int hw_sector; ++ unsigned int part_offset[8]; ++ } disk[8]; +}; + +static void esp_interrupt(void *dev_id) @@ -2260,7 +2461,7 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + return; +} + -+void *esp_read(int unit, int offset, short len) ++void esp_read_capacity(int unit) +{ + // Set SCSI target + stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); @@ -2271,28 +2472,74 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + stb_bypass(PHYS_JJ_ESP + 1*4, 0); + // Set DMA direction + st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); ++ // Setup command = Read Capacity ++ esp.buffer[0] = 0x80; ++ esp.buffer[1] = 0x25; ++ esp.buffer[2] = 0x00; ++ esp.buffer[3] = 0x00; ++ esp.buffer[4] = 0x00; ++ esp.buffer[5] = 0x00; ++ esp.buffer[6] = 0x00; ++ esp.buffer[7] = 0x00; ++ esp.buffer[8] = 0x00; ++ esp.buffer[9] = 0x00; ++ esp.buffer[10] = 0x00; ++ // Set ATN, issue command ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); ++ ++ // Set DMA length = 512 * read length ++ stb_bypass(PHYS_JJ_ESP + 0*4, 0); ++ stb_bypass(PHYS_JJ_ESP + 1*4, 8 & 0xff); ++ // Set DMA direction ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); ++ // Transfer ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); ++ esp.disk[unit].hw_sector = (esp.buffer[4] << 24) | (esp.buffer[5] << 16) | (esp.buffer[6] << 8) | esp.buffer[7]; ++} ++ ++// offset is multiple of 512, len in bytes ++void *esp_read(int unit, int part, int offset, short len) ++{ ++ int pos, hw_sect, sect_offset, spb; ++ ++ // Set SCSI target ++ stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); ++ // Set DMA address ++ st_bypass(PHYS_JJ_ESPDMA + 4, esp.buffer_dvma); ++ // Set DMA length ++ stb_bypass(PHYS_JJ_ESP + 0*4, 10); ++ stb_bypass(PHYS_JJ_ESP + 1*4, 0); ++ // Set DMA direction ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); ++ hw_sect = esp.disk[unit].hw_sector; ++ offset += esp.disk[unit].part_offset[part]; ++ spb = hw_sect / 512; ++ sect_offset = offset / spb; ++ pos = (offset - sect_offset * spb) * 512; ++ len /= 512; ++ //printk("Read unit %d, offset %d -> offset %d, pos %d, hw_sect %d\n", unit, offset, sect_offset, pos, hw_sect); + // Setup command = Read(10) + esp.buffer[0] = 0x80; + esp.buffer[1] = 0x28; + esp.buffer[2] = 0x00; -+ esp.buffer[3] = (offset >> 24) & 0xff; -+ esp.buffer[4] = (offset >> 16) & 0xff; -+ esp.buffer[5] = (offset >> 8) & 0xff; -+ esp.buffer[6] = offset & 0xff; ++ esp.buffer[3] = (sect_offset >> 24) & 0xff; ++ esp.buffer[4] = (sect_offset >> 16) & 0xff; ++ esp.buffer[5] = (sect_offset >> 8) & 0xff; ++ esp.buffer[6] = sect_offset & 0xff; + esp.buffer[7] = 0x00; + esp.buffer[8] = (len >> 8) & 0xff; + esp.buffer[9] = len & 0xff; + // Set ATN, issue command -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x42); ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); + -+ // Set DMA length = 512 * read length -+ stb_bypass(PHYS_JJ_ESP + 0*4, 0); -+ stb_bypass(PHYS_JJ_ESP + 1*4, (len << 1) & 0xff); ++ // Set DMA length = sector size * read length ++ stb_bypass(PHYS_JJ_ESP + 0*4, (len * hw_sect) & 0xff); ++ stb_bypass(PHYS_JJ_ESP + 1*4, ((len * hw_sect) >> 8) & 0xff); + // Set DMA direction + st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); + // Transfer -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x10); -+ return esp.buffer; ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); ++ return esp.buffer + pos; +} + +// Sparc boot sequence can be found in SILO docs, @@ -2334,32 +2581,35 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + stb_bypass(PHYS_JJ_ESP + 3*4, 2); + + esp_open(&esp); ++ esp_read_capacity(unit); + -+ label = esp_read(unit, 0, 1); -+ printk("CHS: %d/%d/%d, partitions:\n", label->ncyl, label->ntrks, label->nsect); ++ label = esp_read(unit, 0, 0, 512); ++ printk("hw sector: %d, CHS: %d/%d/%d, partitions:\n", esp.disk[unit].hw_sector, ++ label->ncyl, label->ntrks, label->nsect); + for (i = 0; i < 8; i++) { -+ printk("%c: %d + %d\n", 'a' + i, label->partitions[i].start_cylinder, -+ label->partitions[i].num_sectors); ++ printk("%c: %d + %d, id %x, flags %x\n", 'a' + i, label->partitions[i].start_cylinder, ++ label->partitions[i].num_sectors, label->infos[i].id, label->infos[i].flags); ++ esp.disk[unit].part_offset[i] = label->partitions[3].start_cylinder * label->ntrks * label->nsect; + } -+ offset = label->partitions[4].start_cylinder * label->ntrks * label->nsect + 1; ++ offset = 1; + printk("booting sd(0,%d,0):d (offset %d)\n", unit, offset); + // Skip a.out header (0x20) + dst = (void *)0x4000; -+ src = esp_read(unit, offset, 1); ++ src = esp_read(unit, 3, offset, 512); + src = (void *)((unsigned int) src + 0x20); + memcpy(dst, src, 512 - 0x20); + dst = (void *)0x4000 + 512 - 0x20; + for (i = 1; i < 7680/512; i++) { -+ src = esp_read(unit, offset + i, 1); ++ src = esp_read(unit, 3, offset + i, 512); + memcpy(dst, src, 512); + dst += 512; + } + esp_close(&esp); + return 0; +} -diff -ruN proll_18.orig/src/hconsole.c proll-patch10/src/hconsole.c +diff -ruN proll_18.orig/src/hconsole.c proll-patch-15/src/hconsole.c --- proll_18.orig/src/hconsole.c 2002-07-23 05:52:48.000000000 +0000 -+++ proll-patch10/src/hconsole.c 2005-03-02 17:03:09.000000000 +0000 ++++ proll-patch-15/src/hconsole.c 2005-11-09 18:46:34.000000000 +0000 @@ -29,6 +29,10 @@ struct raster r_master; /* For a case of resize, whole fb */ struct raster r_0; /* malloc() erzatz */ @@ -2383,9 +2633,84 @@ diff -ruN proll_18.orig/src/hconsole.c proll-patch10/src/hconsole.c t->r_ = r; t->r0_ = q; t->f_ = &f_master; -diff -ruN proll_18.orig/src/hme.c proll-patch10/src/hme.c +@@ -67,7 +75,7 @@ + return 0; + } + +-void hcon_fini (struct hconsole *t) ++void hcon_fini (__attribute((unused)) struct hconsole *t) + { + return; + } +@@ -77,12 +85,12 @@ + { + struct rfont *f = t->f_; + +- if (sy < 0 || sy >= t->ydim_) return -1; +- if (sx < 0 || sx >= t->xdim_) return -1; ++ if (sy < 0 || (unsigned)sy >= t->ydim_) return -1; ++ if (sx < 0 || (unsigned)sx >= t->xdim_) return -1; + if (height < 0) return -1; +- if (sy + height > t->ydim_) height = t->ydim_ - sy; ++ if ((unsigned)sy + (unsigned)height > t->ydim_) height = t->ydim_ - sy; + if (width < 0) return -1; +- if (sx + width > t->xdim_) width = t->xdim_ - sx; ++ if ((unsigned)sx + (unsigned)width > t->xdim_) width = t->xdim_ - sx; + + /* XXX Clear with correct background color */ + (*t->r_->clear_)(t->r_, +@@ -107,10 +115,10 @@ + char c0 = c; + RC_color rfg, rbg; + +- if (y < 0 || y >= t->ydim_) return -1; +- if (x < 0 || x >= t->xdim_) return -1; ++ if (y < 0 || (unsigned)y >= t->ydim_) return -1; ++ if (x < 0 || (unsigned)x >= t->xdim_) return -1; + +- if (t->curson_ && t->ypos_ == y && t->xpos_ == x) { ++ if (t->curson_ && t->ypos_ == (unsigned)y && t->xpos_ == (unsigned)x) { + rfg = t->bg_; rbg = t->fg_; + } else { + rfg = t->fg_; rbg = t->bg_; +@@ -126,9 +134,9 @@ + { + struct rfont *f = t->f_; + +- if (y < 0 || y >= t->ydim_) return -1; +- if (x < 0 || x >= t->xdim_) return -1; +- if (x + count >= t->xdim_) count = t->xdim_ - x; ++ if (y < 0 || (unsigned)y >= t->ydim_) return -1; ++ if (x < 0 || (unsigned)x >= t->xdim_) return -1; ++ if ((unsigned)x + (unsigned)count >= t->xdim_) count = t->xdim_ - x; + + (*t->r_->render_)(t->r_, y*f->height_, x*f->width_, + s, count, t->bg_, t->fg_, f); +@@ -200,8 +208,8 @@ + + rc = 0; + if (dir == SM_UP) { +- if (d < 0 || d >= t->ydim_) return -1; +- if (b <= d || b > t->ydim_) return -1; ++ if (d < 0 || (unsigned)d >= t->ydim_) return -1; ++ if (b <= d || (unsigned)b > t->ydim_) return -1; + if (d + count >= b) count = b - d; + if (d + count >= b) count = b - d; + (*t->r_->yscroll_)(t->r_, +@@ -213,8 +221,8 @@ + count*f->height_, raster_qwidth(t->r_), + t->bg_); + } else if (dir == SM_DOWN) { +- if (d < 0 || d >= t->ydim_) return -1; +- if (b <= d || b > t->ydim_) return -1; ++ if (d < 0 || (unsigned)d >= t->ydim_) return -1; ++ if (b <= d || (unsigned)b > t->ydim_) return -1; + if (d + count >= b) count = b - d; + (*t->r_->yscroll_)(t->r_, + d*f->height_, 0, +diff -ruN proll_18.orig/src/hme.c proll-patch-15/src/hme.c --- proll_18.orig/src/hme.c 2002-07-23 05:52:52.000000000 +0000 -+++ proll-patch10/src/hme.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/hme.c 2005-04-16 06:16:20.000000000 +0000 @@ -655,10 +655,10 @@ unsigned int flags, unsigned int addr) @@ -2443,9 +2768,21 @@ diff -ruN proll_18.orig/src/hme.c proll-patch10/src/hme.c : "=r" (flags) : "r" (&this->rx_flags), "i" (ASI_PL)); #else -diff -ruN proll_18.orig/src/lat7_2.bm proll-patch10/src/lat7_2.bm +diff -ruN proll_18.orig/src/iommu.c proll-patch-15/src/iommu.c +--- proll_18.orig/src/iommu.c 2002-07-23 05:52:49.000000000 +0000 ++++ proll-patch-15/src/iommu.c 2005-08-14 10:08:17.000000000 +0000 +@@ -36,7 +36,7 @@ + unsigned int pa, ba; + unsigned int npages; + unsigned int mva, mpa; +- int i; ++ unsigned int i; + unsigned int *iopte; + + npages = (size + (PAGE_SIZE-1)) / PAGE_SIZE; +diff -ruN proll_18.orig/src/lat7_2.bm proll-patch-15/src/lat7_2.bm --- proll_18.orig/src/lat7_2.bm 1999-02-27 05:48:54.000000000 +0000 -+++ proll-patch10/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 @@ -1,6 +1,6 @@ #define lat7_2_width 128 #define lat7_2_height 88 @@ -2454,9 +2791,9 @@ diff -ruN proll_18.orig/src/lat7_2.bm proll-patch10/src/lat7_2.bm 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18, 0x22, 0x22, 0x18, 0x00, 0x00, 0x18, 0x18, 0xff, 0x18, 0x00, 0x12, 0x02, -diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch10/src/lat7_2_swapped.bm +diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch-15/src/lat7_2_swapped.bm --- proll_18.orig/src/lat7_2_swapped.bm 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 @@ -0,0 +1,121 @@ +#define lat7_2_width 128 +#define lat7_2_height 88 @@ -2579,9 +2916,9 @@ diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch10/src/lat7_2_swapped.b + 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; -diff -ruN proll_18.orig/src/le.c proll-patch10/src/le.c +diff -ruN proll_18.orig/src/le.c proll-patch-15/src/le.c --- proll_18.orig/src/le.c 2002-07-23 05:52:49.000000000 +0000 -+++ proll-patch10/src/le.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/le.c 2005-04-16 06:16:20.000000000 +0000 @@ -185,8 +185,6 @@ unsigned short rap; /* register address port */ }; @@ -2600,9 +2937,21 @@ diff -ruN proll_18.orig/src/le.c proll-patch10/src/le.c /* Now, give the packet to the lance */ ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN); -diff -ruN proll_18.orig/src/netinit.c proll-patch10/src/netinit.c +diff -ruN proll_18.orig/src/net.h proll-patch-15/src/net.h +--- proll_18.orig/src/net.h 1999-12-15 17:20:17.000000000 +0000 ++++ proll-patch-15/src/net.h 2005-08-14 10:17:02.000000000 +0000 +@@ -124,7 +124,7 @@ + extern int udp_open __P((t_ipaddr daddr, int source, int dest)); + + /* Read from a UDP socket */ +-extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); ++extern int udp_read(char *buf, unsigned int bufsize, int timeout); + + /* Write to a UDP socket */ + extern int udp_write __P((char *buf, int writelen)); +diff -ruN proll_18.orig/src/netinit.c proll-patch-15/src/netinit.c --- proll_18.orig/src/netinit.c 2002-09-13 21:53:33.000000000 +0000 -+++ proll-patch10/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 @@ -49,13 +49,20 @@ unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */ t_ipaddr myipaddr; /* my own IP address */ @@ -2646,9 +2995,18 @@ diff -ruN proll_18.orig/src/netinit.c proll-patch10/src/netinit.c fatal(); } } -diff -ruN proll_18.orig/src/netpriv.h proll-patch10/src/netpriv.h +diff -ruN proll_18.orig/src/netpriv.h proll-patch-15/src/netpriv.h --- proll_18.orig/src/netpriv.h 1999-04-27 05:39:37.000000000 +0000 -+++ proll-patch10/src/netpriv.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/netpriv.h 2005-08-14 10:12:20.000000000 +0000 +@@ -83,7 +83,7 @@ + */ + struct device *dev; + char *data; +- int len; ++ unsigned int len; + int protocol; + unsigned char ip_summed; + }; @@ -130,10 +130,9 @@ * */ @@ -2670,10 +3028,10 @@ diff -ruN proll_18.orig/src/netpriv.h proll-patch10/src/netpriv.h /* Empty read buffer */ extern void empty_buf __P((void)); -diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h +diff -ruN proll_18.orig/src/openprom.h proll-patch-15/src/openprom.h --- proll_18.orig/src/openprom.h 2002-07-14 02:26:30.000000000 +0000 -+++ proll-patch10/src/openprom.h 2004-11-13 15:50:49.000000000 +0000 -@@ -54,20 +54,20 @@ ++++ proll-patch-15/src/openprom.h 2005-05-13 16:23:14.000000000 +0000 +@@ -54,29 +54,29 @@ }; struct linux_mem_v0 { @@ -2699,6 +3057,19 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h void *aieee1; /* XXX */ }; + /* V2 and up boot things. */ + struct linux_bootargs_v2 { +- char **bootpath; +- char **bootargs; +- int *fd_stdin; +- int *fd_stdout; ++ const char **bootpath; ++ const char **bootargs; ++ const int *fd_stdin; ++ const int *fd_stdout; + }; + + /* The top level PROM vector. */ @@ -91,13 +91,13 @@ struct linux_mem_v0 pv_v0mem; @@ -2734,9 +3105,9 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h }; /* More fun PROM structures for device probing. */ -diff -ruN proll_18.orig/src/packet.c proll-patch10/src/packet.c +diff -ruN proll_18.orig/src/packet.c proll-patch-15/src/packet.c --- proll_18.orig/src/packet.c 2000-02-11 04:56:45.000000000 +0000 -+++ proll-patch10/src/packet.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/packet.c 2005-08-14 10:12:49.000000000 +0000 @@ -41,7 +41,7 @@ int aligner; } wbuf; @@ -2764,9 +3135,24 @@ diff -ruN proll_18.orig/src/packet.c proll-patch10/src/packet.c { struct sk_buff *skb; unsigned char *s; -diff -ruN proll_18.orig/src/printf.c proll-patch10/src/printf.c +@@ -209,12 +211,12 @@ + /* + */ + void +-eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, int base) ++eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, __attribute__((unused)) int base) + { + bcopy(src, dest->data, len); + } + +-unsigned short eth_type_trans(struct sk_buff *skb, struct device *dev) ++unsigned short eth_type_trans(struct sk_buff *skb, __attribute__((unused)) struct device *dev) + { + unsigned char *s = skb->data + 12; + return s[0] << 8 | s[1]; /* Network order word */ +diff -ruN proll_18.orig/src/printf.c proll-patch-15/src/printf.c --- proll_18.orig/src/printf.c 1999-03-19 07:03:59.000000000 +0000 -+++ proll-patch10/src/printf.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/printf.c 2005-08-14 10:07:26.000000000 +0000 @@ -19,7 +19,7 @@ static void printn(struct prf_fp *, unsigned long, unsigned int); static void putchar(char, struct prf_fp *); @@ -2794,9 +3180,20 @@ diff -ruN proll_18.orig/src/printf.c proll-patch10/src/printf.c putchar(c,filog); } else if (c == 'l' || c == 'O') { printn(filog, (long)va_arg(adx,long), c=='l'?10:8); -diff -ruN proll_18.orig/src/rconsole.c proll-patch10/src/rconsole.c +@@ -77,10 +77,6 @@ + char prbuf[24]; + register char *cp; + +- if (b == 10 && n < 0) { +- putchar('-',filog); +- n = (~n) + 1; /* n = -n */ +- } + cp = prbuf; + do + *cp++ = hextab[(unsigned int)(n%b)]; +diff -ruN proll_18.orig/src/rconsole.c proll-patch-15/src/rconsole.c --- proll_18.orig/src/rconsole.c 1999-01-16 07:16:55.000000000 +0000 -+++ proll-patch10/src/rconsole.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/rconsole.c 2005-08-14 10:25:53.000000000 +0000 @@ -28,12 +28,18 @@ * move to California. Only plain lat7 survived. * I recreated lat7-1 changes in lat7-2. --zaitcev @@ -2882,9 +3279,18 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch10/src/rconsole.c p->nchars_ = LAT7_NCHARS; p->width_ = LAT7_WIDTH; p->height_ = LAT7_HEIGHT; -diff -ruN proll_18.orig/src/rconsole.h proll-patch10/src/rconsole.h +@@ -175,7 +188,7 @@ + r->render_ = p->render_; + } + +-void raster_dest(struct raster *r) ++void raster_dest(__attribute((unused)) struct raster *r) + { + } + +diff -ruN proll_18.orig/src/rconsole.h proll-patch-15/src/rconsole.h --- proll_18.orig/src/rconsole.h 1999-01-16 05:00:59.000000000 +0000 -+++ proll-patch10/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 @@ -13,10 +13,10 @@ */ @@ -2898,9 +3304,9 @@ diff -ruN proll_18.orig/src/rconsole.h proll-patch10/src/rconsole.h int nchars_; /* 128 for ASCII ... 65536 for Unicode */ int width_; /* [Pixels]. Maximum size is 16. */ int height_; /* [Pixels == scan lines]. */ -diff -ruN proll_18.orig/src/romlib.h proll-patch10/src/romlib.h +diff -ruN proll_18.orig/src/romlib.h proll-patch-15/src/romlib.h --- proll_18.orig/src/romlib.h 1999-04-20 04:26:45.000000000 +0000 -+++ proll-patch10/src/romlib.h 2005-04-16 20:32:49.000000000 +0000 ++++ proll-patch-15/src/romlib.h 2005-04-16 20:32:49.000000000 +0000 @@ -72,13 +72,13 @@ */ #define memcpy(dst, src, len) bcopy(src, dst, len) @@ -2920,9 +3326,9 @@ diff -ruN proll_18.orig/src/romlib.h proll-patch10/src/romlib.h /* -diff -ruN proll_18.orig/src/sched_4m.c proll-patch10/src/sched_4m.c +diff -ruN proll_18.orig/src/sched_4m.c proll-patch-15/src/sched_4m.c --- proll_18.orig/src/sched_4m.c 1999-04-27 05:48:51.000000000 +0000 -+++ proll-patch10/src/sched_4m.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/sched_4m.c 2005-08-14 10:18:14.000000000 +0000 @@ -108,7 +108,7 @@ static int set_bolt; /* Tick counter limit */ static struct handsc hndv[16]; @@ -2932,9 +3338,36 @@ diff -ruN proll_18.orig/src/sched_4m.c proll-patch10/src/sched_4m.c 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -diff -ruN proll_18.orig/src/swap.c proll-patch10/src/swap.c +@@ -130,7 +130,7 @@ + int /* 0 - not expired yet; <>0 - timer expired */ + chk_timeout() + { +- int lim = (((1000000/HZ) + 1) << 10); ++ unsigned int lim = (((1000000/HZ) + 1) << 10); + unsigned int clear; + unsigned int intc; + int n; +@@ -182,7 +182,7 @@ + struct handsc *hndp; + unsigned int mask; + +- if (irq < 0 || irq >= 16) { ++ if (irq == 0 || irq >= 16) { + printk("request_irq: bad irq %d\n", irq); + return -1; + } +@@ -207,7 +207,7 @@ + { + struct handsc *hndp; + +- if (irq < 0 || irq >= 16) { ++ if (irq == 0 || irq >= 16) { + printk("free_irq: bad irq %d\n", irq); + return; + } +diff -ruN proll_18.orig/src/swap.c proll-patch-15/src/swap.c --- proll_18.orig/src/swap.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/swap.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/swap.c 2004-11-13 15:50:49.000000000 +0000 @@ -0,0 +1,21 @@ +// Convert the lat7 font so that no conversion is needed at runtime. +#define ORIG @@ -2957,9 +3390,9 @@ diff -ruN proll_18.orig/src/swap.c proll-patch10/src/swap.c + } + printf("\n"); +} -diff -ruN proll_18.orig/src/system.c proll-patch10/src/system.c +diff -ruN proll_18.orig/src/system.c proll-patch-15/src/system.c --- proll_18.orig/src/system.c 2002-07-23 05:52:49.000000000 +0000 -+++ proll-patch10/src/system.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/system.c 2005-04-16 06:16:20.000000000 +0000 @@ -298,8 +298,8 @@ } @@ -3050,9 +3483,9 @@ diff -ruN proll_18.orig/src/system.c proll-patch10/src/system.c void fatal() { printk("fatal."); -diff -ruN proll_18.orig/src/system.h proll-patch10/src/system.h +diff -ruN proll_18.orig/src/system.h proll-patch-15/src/system.h --- proll_18.orig/src/system.h 2002-09-13 21:53:32.000000000 +0000 -+++ proll-patch10/src/system.h 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/system.h 2005-04-16 06:16:20.000000000 +0000 @@ -16,7 +16,7 @@ #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */ #define NCTX_SWIFT 0x100 @@ -3171,19 +3604,72 @@ diff -ruN proll_18.orig/src/system.h proll-patch10/src/system.h : "i" (PSR_PIL) : "g1", "memory"); -diff -ruN proll_18.orig/src/udp.c proll-patch10/src/udp.c +diff -ruN proll_18.orig/src/tftp.c proll-patch-15/src/tftp.c +--- proll_18.orig/src/tftp.c 2002-09-13 21:53:34.000000000 +0000 ++++ proll-patch-15/src/tftp.c 2005-08-14 10:16:15.000000000 +0000 +@@ -127,7 +127,7 @@ + int len; + + /* Read packet with timeout */ +- len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT, CHR_ESC); ++ len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT); + if (len == 0) { + printf("TFTP: Timeout\n"); + return(ERR_TIMEOUT); +diff -ruN proll_18.orig/src/udp.c proll-patch-15/src/udp.c --- proll_18.orig/src/udp.c 2001-12-24 05:12:53.000000000 +0000 -+++ proll-patch10/src/udp.c 2004-11-13 15:50:49.000000000 +0000 -@@ -81,7 +81,7 @@ - int source; - int dest; ++++ proll-patch-15/src/udp.c 2005-08-14 10:17:19.000000000 +0000 +@@ -76,12 +76,9 @@ + * + * Open a new UDP socket. + */ +-int udp_open(daddr, source, dest) +-t_ipaddr daddr; +-int source; +-int dest; ++int udp_open(t_ipaddr daddr, int source, int dest) { - register unsigned char *addr; -+ const register unsigned char *addr; ++ const unsigned char *addr; /* Set global variables */ usource = source; -@@ -299,9 +299,6 @@ +@@ -101,16 +98,13 @@ + * + * IP receiver routine + */ +-static int ip_recv(buf, bufsize, addr) +-unsigned char *buf; +-int bufsize; +-unsigned char *addr; ++static int ip_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) + { + struct iphdr *ipp = ((struct iphdr *)buf); + struct udphdr *udpp = ((struct udphdr *)(buf + IP_MIN_HSIZE)); + struct udp_pseudo psehdr; + +- int size; ++ unsigned int size; + t_ipaddr dadr; + + #ifdef DEBUG +@@ -194,13 +188,9 @@ + * + * Read one packet from a UDP socket + */ +-int udp_read(buf, bufsize, timeout, abortch) +-char *buf; +-int bufsize; +-int timeout; +-char abortch; ++int udp_read(char *buf, unsigned int bufsize, int timeout) + { +- int len; ++ unsigned int len; + + /* Wait until we get something */ + set_timeout(timeout); +@@ -299,9 +289,6 @@ */ int init_udp() { @@ -3193,9 +3679,21 @@ diff -ruN proll_18.orig/src/udp.c proll-patch10/src/udp.c /* Register IP packet type and set write buffer pointer */ if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL) return(FALSE); -diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c +diff -ruN proll_18.orig/src/udp.h proll-patch-15/src/udp.h +--- proll_18.orig/src/udp.h 2001-12-24 05:12:34.000000000 +0000 ++++ proll-patch-15/src/udp.h 2005-08-14 10:16:40.000000000 +0000 +@@ -53,7 +53,7 @@ + extern int udp_open __P((t_ipaddr daddr, int source, int dest)); + + /* Read from a UDP socket */ +-extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); ++extern int udp_read(char *buf, unsigned int bufsize, int timeout); + + /* Write to a UDP socket */ + extern int udp_write __P((char *buf, int writelen)); +diff -ruN proll_18.orig/src/vcons_zs.c proll-patch-15/src/vcons_zs.c --- proll_18.orig/src/vcons_zs.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/vcons_zs.c 2005-04-10 07:01:03.000000000 +0000 ++++ proll-patch-15/src/vcons_zs.c 2005-08-14 10:25:51.000000000 +0000 @@ -0,0 +1,68 @@ +/** + ** Console over 'zs' (Zilog serial port) @@ -3243,7 +3741,7 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c + return leng; +} + -+int vcon_zs_read(struct vconterm *t, char *data, int leng) ++int vcon_zs_read(struct vconterm *t, char *data, __attribute((unused)) int leng) +{ + unsigned zs_ptr = (unsigned) t->impl; + @@ -3260,14 +3758,14 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c + return ldb_bypass(zs_ptr + ZS_DATA) & 0xff; +} + -+void vcon_zs_fini(struct vconterm *t) ++void vcon_zs_fini(__attribute((unused)) struct vconterm *t) +{ + /* violent crash in the end */ + ; +} -diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c +diff -ruN proll_18.orig/src/vconsole.c proll-patch-15/src/vconsole.c --- proll_18.orig/src/vconsole.c 1999-11-08 03:10:28.000000000 +0000 -+++ proll-patch10/src/vconsole.c 2005-04-17 19:23:21.000000000 +0000 ++++ proll-patch-15/src/vconsole.c 2005-08-14 10:24:49.000000000 +0000 @@ -7,12 +7,17 @@ #include "vconsole.h" @@ -3336,7 +3834,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c int vcon_write(struct vconterm *t, char *data, int leng) { int l = leng; -@@ -40,29 +83,99 @@ +@@ -40,29 +83,101 @@ if (l <= 0) break; c = *data++; --l; @@ -3358,7 +3856,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); + break; + default: -+ printk("Unhandled escape code '%c'\n", c); ++ //printk("Unhandled escape code '%c'\n", c); + break; + } break; @@ -3399,8 +3897,10 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + case 'm': + break; + default: -+ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n", ++#if 0 ++ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n", + c, t->vc_par[0], t->vc_par[1], t->vc_par[2], t->vc_par[3], t->vc_par[4]); ++#endif + break; + } break; @@ -3446,7 +3946,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + } else { + t->backc++; + } -+ if (t->vc_x + t->backc >= hcon_qxdim(hconp)) { ++ if ((unsigned int)t->vc_x + t->backc >= hcon_qxdim(hconp)) { + vcon_i_backflush(t); + t->vc_x = 0; + vcon_i_cursfeed(t); @@ -3454,10 +3954,32 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c } } } -@@ -100,9 +213,62 @@ +@@ -73,7 +188,7 @@ + static void vcon_i_cursfeed(struct vconterm *t) { + struct hconsole *hconp = t->impl; + +- if (++t->vc_y >= hcon_qydim(hconp)) { ++ if ((unsigned int)++t->vc_y >= hcon_qydim(hconp)) { + t->vc_y = hcon_qydim(hconp)-1; + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); + } +@@ -90,22 +205,75 @@ + t->backp = 0; t->backc = 0; + } + +-int vcon_putch(struct vconterm *t, char c) ++int vcon_putch(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char c) + { + return -1; + } + +-int vcon_read(struct vconterm *t, char *data, int leng) ++int vcon_read(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char *data, __attribute__((unused)) int leng) + { return 0; } +-int vcon_getch(struct vconterm *t) +static const unsigned char sunkbd_keycode[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3488,7 +4010,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + +static int shiftstate; + - int vcon_getch(struct vconterm *t) ++int vcon_getch(__attribute__((unused)) struct vconterm *t) { - return -1; + int ch; @@ -3517,10 +4039,14 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + return ch; } - void vcon_fini(struct vconterm *t) -diff -ruN proll_18.orig/src/vconsole.h proll-patch10/src/vconsole.h +-void vcon_fini(struct vconterm *t) ++void vcon_fini(__attribute__((unused)) struct vconterm *t) + { + /* violent crash in the end */ + ; +diff -ruN proll_18.orig/src/vconsole.h proll-patch-15/src/vconsole.h --- proll_18.orig/src/vconsole.h 1999-11-08 00:58:13.000000000 +0000 -+++ proll-patch10/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 ++++ proll-patch-15/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 @@ -6,6 +6,8 @@ #ifndef VCONSOLE_H #define VCONSOLE_H diff --git a/target-sparc/helper.c b/target-sparc/helper.c index ad1ae5bbb9c..7436e4ff40a 100644 --- a/target-sparc/helper.c +++ b/target-sparc/helper.c @@ -195,15 +195,17 @@ int get_physical_address (CPUState *env, target_phys_addr_t *physical, int *prot int cpu_sparc_handle_mmu_fault (CPUState *env, target_ulong address, int rw, int is_user, int is_softmmu) { - target_ulong virt_addr; target_phys_addr_t paddr; unsigned long vaddr; int error_code = 0, prot, ret = 0, access_index; error_code = get_physical_address(env, &paddr, &prot, &access_index, address, rw, is_user); if (error_code == 0) { - virt_addr = address & TARGET_PAGE_MASK; - vaddr = virt_addr + ((address & TARGET_PAGE_MASK) & (TARGET_PAGE_SIZE - 1)); + vaddr = address & TARGET_PAGE_MASK; + paddr &= TARGET_PAGE_MASK; +#ifdef DEBUG_MMU + printf("Translate at 0x%lx -> 0x%lx, vaddr 0x%lx\n", (long)address, (long)paddr, (long)vaddr); +#endif ret = tlb_set_page(env, vaddr, paddr, prot, is_user, is_softmmu); return ret; } diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 695bc21e09f..eaf5cb64e02 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -276,6 +276,10 @@ void helper_ld_asi(int asi, int size, int sign) case 4: ret = ldl_phys(T0 & ~3); break; + case 8: + ret = ldl_phys(T0 & ~3); + T0 = ldl_phys((T0 + 4) & ~3); + break; } break; default: @@ -396,6 +400,10 @@ void helper_st_asi(int asi, int size, int sign) default: stl_phys(T0 & ~3, T1); break; + case 8: + stl_phys(T0 & ~3, T1); + stl_phys((T0 + 4) & ~3, T2); + break; } } return; diff --git a/target-sparc/translate.c b/target-sparc/translate.c index c2ba2e35cd6..9abcedda730 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -1897,6 +1897,11 @@ static void disas_sparc_insn(DisasContext * dc) #else gen_op_xor_T1_T0(); gen_op_wrpsr(); + save_state(dc); + gen_op_next_insn(); + gen_op_movl_T0_0(); + gen_op_exit_tb(); + dc->is_br = 1; #endif } break; @@ -2343,8 +2348,8 @@ static void disas_sparc_insn(DisasContext * dc) gen_op_store_FT0_fpr(rd); break; case 0x21: /* load fsr */ + gen_op_ldst(ldf); gen_op_ldfsr(); - gen_op_store_FT0_fpr(rd); break; case 0x22: /* load quad fpreg */ goto nfpu_insn; @@ -2426,9 +2431,8 @@ static void disas_sparc_insn(DisasContext * dc) gen_op_ldst(stf); break; case 0x25: /* stfsr, V9 stxfsr */ - gen_op_load_fpr_FT0(rd); - // XXX gen_op_stfsr(); + gen_op_ldst(stf); break; case 0x26: /* stdfq */ goto nfpu_insn; -- 2.39.5