diff -r e1e78b464024 sys/dev/gxemul/cons/gxemul_cons.c --- a/sys/dev/gxemul/cons/gxemul_cons.c Sat May 18 16:09:18 2013 -0400 +++ b/sys/dev/gxemul/cons/gxemul_cons.c Mon Aug 26 20:01:28 2013 -0400 @@ -99,8 +99,8 @@ * XXXRW: Should be using FreeBSD's bus routines here, but they are not * available until later in the boot. */ -typedef uint64_t paddr_t; -typedef uint64_t vaddr_t; +typedef uint32_t paddr_t; +typedef uint32_t vaddr_t; static inline vaddr_t mips_phys_to_uncached(paddr_t phys) diff -r e1e78b464024 sys/dev/gxemul/disk/gxemul_disk.c --- a/sys/dev/gxemul/disk/gxemul_disk.c Sat May 18 16:09:18 2013 -0400 +++ b/sys/dev/gxemul/disk/gxemul_disk.c Mon Aug 26 20:01:28 2013 -0400 @@ -214,7 +214,12 @@ if (off < 0 || off % GXEMUL_DISK_DEV_BLOCKSIZE != 0) return (EINVAL); +#ifdef _LP64 GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET, (uint64_t)off); +#else + GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET_LO, (uint32_t)off); + GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET_HI, (uint32_t)(off >> 32)); +#endif GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_DISKID, diskid); GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_START, GXEMUL_DISK_DEV_START_READ); switch (GXEMUL_DISK_DEV_READ(GXEMUL_DISK_DEV_STATUS)) { @@ -280,7 +285,12 @@ if (off < 0 || off % GXEMUL_DISK_DEV_BLOCKSIZE != 0) return (EINVAL); +#ifdef _LP64 GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET, (uint64_t)off); +#else + GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET_LO, (uint32_t)off); + GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_OFFSET_HI, (uint32_t)(off >> 32)); +#endif GXEMUL_DISK_DEV_WRITE(GXEMUL_DISK_DEV_DISKID, diskid); dst = GXEMUL_DISK_DEV_FUNCTION(GXEMUL_DISK_DEV_BLOCK); diff -r e1e78b464024 sys/dev/gxemul/disk/gxemul_diskreg.h --- a/sys/dev/gxemul/disk/gxemul_diskreg.h Sat May 18 16:09:18 2013 -0400 +++ b/sys/dev/gxemul/disk/gxemul_diskreg.h Mon Aug 26 20:01:28 2013 -0400 @@ -36,16 +36,28 @@ #define GXEMUL_DISK_DEV_ID_START (0x0000) #define GXEMUL_DISK_DEV_ID_END (0x0100) +#ifdef _LP64 #define GXEMUL_DISK_DEV_OFFSET (0x0000) +#else +#define GXEMUL_DISK_DEV_OFFSET_LO (0x0000) +#define GXEMUL_DISK_DEV_OFFSET_HI (0x0008) +#endif #define GXEMUL_DISK_DEV_DISKID (0x0010) #define GXEMUL_DISK_DEV_START (0x0020) #define GXEMUL_DISK_DEV_STATUS (0x0030) #define GXEMUL_DISK_DEV_BLOCK (0x4000) +#ifdef _LP64 #define GXEMUL_DISK_DEV_FUNCTION(f) \ (volatile uint64_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_DISK_DEV_BASE + (f)) #define GXEMUL_DISK_DEV_READ(f) \ (volatile uint64_t)*GXEMUL_DISK_DEV_FUNCTION(f) +#else +#define GXEMUL_DISK_DEV_FUNCTION(f) \ + (volatile uint32_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_DISK_DEV_BASE + (f)) +#define GXEMUL_DISK_DEV_READ(f) \ + (volatile uint32_t)*GXEMUL_DISK_DEV_FUNCTION(f) +#endif #define GXEMUL_DISK_DEV_WRITE(f, v) \ *GXEMUL_DISK_DEV_FUNCTION(f) = (v) diff -r e1e78b464024 sys/dev/gxemul/ether/gxreg.h --- a/sys/dev/gxemul/ether/gxreg.h Sat May 18 16:09:18 2013 -0400 +++ b/sys/dev/gxemul/ether/gxreg.h Mon Aug 26 20:01:28 2013 -0400 @@ -40,10 +40,17 @@ #define GXEMUL_ETHER_DEV_COMMAND (0x4020) #define GXEMUL_ETHER_DEV_MAC (0x4040) +#ifdef _LP64 #define GXEMUL_ETHER_DEV_FUNCTION(f) \ (volatile uint64_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_ETHER_DEV_BASE + (f)) #define GXEMUL_ETHER_DEV_READ(f) \ (volatile uint64_t)*GXEMUL_ETHER_DEV_FUNCTION(f) +#else +#define GXEMUL_ETHER_DEV_FUNCTION(f) \ + (volatile uint32_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_ETHER_DEV_BASE + (f)) +#define GXEMUL_ETHER_DEV_READ(f) \ + (volatile uint32_t)*GXEMUL_ETHER_DEV_FUNCTION(f) +#endif #define GXEMUL_ETHER_DEV_WRITE(f, v) \ *GXEMUL_ETHER_DEV_FUNCTION(f) = (v) diff -r e1e78b464024 sys/mips/conf/GXEMUL --- a/sys/mips/conf/GXEMUL Sat May 18 16:09:18 2013 -0400 +++ b/sys/mips/conf/GXEMUL Mon Aug 26 20:01:28 2013 -0400 @@ -6,14 +6,16 @@ ident GXEMUL -machine mips mips64 +machine mips mips +#machine mips mips32 cpu CPU_MIPS4KC options HZ=100 -makeoptions ARCH_FLAGS="-march=mips64 -mabi=64" +#makeoptions ARCH_FLAGS="-march=mips64 -mabi=64" -makeoptions KERNLOADADDR=0xffffffff80100000 +#makeoptions KERNLOADADDR=0xffffffff80100000 +makeoptions KERNLOADADDR=0x80100000 include "../gxemul/std.gxemul" @@ -34,6 +36,8 @@ options INET6 # IPv6 communications protocols options FFS #Berkeley Fast Filesystem +options NFSCL +options NFSLOCKD # Debugging for use in -current #options DEADLKRES #Enable the deadlock resolver diff -r e1e78b464024 sys/mips/gxemul/gxemul_machdep.c --- a/sys/mips/gxemul/gxemul_machdep.c Sat May 18 16:09:18 2013 -0400 +++ b/sys/mips/gxemul/gxemul_machdep.c Mon Aug 26 20:01:28 2013 -0400 @@ -71,6 +71,23 @@ extern int *edata; extern int *end; +static struct _mem_reserved +{ + vm_paddr_t res_start; + vm_size_t res_len; +} phys_reserved[] = { + { 0x00010000000, 0x20 }, /* cons */ + { 0x00011000000, 0x100 }, /* mp */ + { 0x00012000000, 0xf00000 }, /* fb */ + { 0x00012f00000, 0x20 }, /* fbctrl */ + { 0x00013000000, 0x4000 }, /* disk [control] */ + { 0x00013004000, 0x1000 }, /* disk [data buffer] */ + { 0x00014000000, 0x4000 }, /* ether [data buffer] */ + { 0x00014004000, 0x4000 }, /* ether [control] */ + { 0x00015000000, 0x200 }, /* rtc */ + { 0x00000000000, 0x0 } /* end marker */ +}; + void platform_cpu_init() { @@ -80,7 +97,7 @@ static void mips_init(void) { - int i; + int i, j; for (i = 0; i < 10; i++) { phys_avail[i] = 0; @@ -90,6 +107,12 @@ phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end); phys_avail[1] = ctob(realmem); + for (i = 0; phys_reserved[i].res_len != 0; i++) { + if (phys_reserved[i].res_start < phys_avail[i]) { + (void)j; + } + } + dump_avail[0] = phys_avail[0]; dump_avail[1] = phys_avail[1]; diff -r e1e78b464024 sys/mips/gxemul/mpreg.h --- a/sys/mips/gxemul/mpreg.h Sat May 18 16:09:18 2013 -0400 +++ b/sys/mips/gxemul/mpreg.h Mon Aug 26 20:01:28 2013 -0400 @@ -43,13 +43,21 @@ #define GXEMUL_MP_DEV_IPI_READ 0x00c0 #define GXEMUL_MP_DEV_CYCLES 0x00d0 +#ifdef _LP64 #define GXEMUL_MP_DEV_FUNCTION(f) \ (volatile uint64_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_MP_DEV_BASE + (f)) #define GXEMUL_MP_DEV_READ(f) \ (volatile uint64_t)*GXEMUL_MP_DEV_FUNCTION(f) +#else +#define GXEMUL_MP_DEV_FUNCTION(f) \ + (volatile uint32_t *)MIPS_PHYS_TO_DIRECT_UNCACHED(GXEMUL_MP_DEV_BASE + (f)) +#define GXEMUL_MP_DEV_READ(f) \ + (volatile uint32_t)*GXEMUL_MP_DEV_FUNCTION(f) +#endif #define GXEMUL_MP_DEV_WRITE(f, v) \ *GXEMUL_MP_DEV_FUNCTION(f) = (v) + #define GXEMUL_MP_DEV_IPI_INTERRUPT (6) #endif /* !_MIPS_GXEMUL_MPREG_H */