From owner-p4-projects@FreeBSD.ORG Tue Oct 23 20:08:49 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 54F0316A46E; Tue, 23 Oct 2007 20:08:49 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E5BEC16A41A for ; Tue, 23 Oct 2007 20:08:48 +0000 (UTC) (envelope-from raj@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E5C9613C4C3 for ; Tue, 23 Oct 2007 20:08:48 +0000 (UTC) (envelope-from raj@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l9NK8lR9002365 for ; Tue, 23 Oct 2007 20:08:47 GMT (envelope-from raj@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l9NK8l8f002362 for perforce@freebsd.org; Tue, 23 Oct 2007 20:08:47 GMT (envelope-from raj@freebsd.org) Date: Tue, 23 Oct 2007 20:08:47 GMT Message-Id: <200710232008.l9NK8l8f002362@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to raj@freebsd.org using -f From: Rafal Jaworowski To: Perforce Change Reviews Cc: Subject: PERFORCE change 127972 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Oct 2007 20:08:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=127972 Change 127972 by raj@raj_mimi on 2007/10/23 20:07:56 Adapt loader(8) and surroundings to the new U-Boot API This update requires that loader(8) is run on top of U-Boot that is fresh enough to include this new API; up-to-date support for FreeBSD can always be found at: http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot/u-boot-freebsd.git Affected files ... .. //depot/projects/e500/lib/libstand/Makefile#3 edit .. //depot/projects/e500/sys/boot/ficl/Makefile#2 edit .. //depot/projects/e500/sys/boot/powerpc/uboot/Makefile#2 edit .. //depot/projects/e500/sys/boot/powerpc/uboot/conf.c#2 edit .. //depot/projects/e500/sys/boot/powerpc/uboot/defs.sh#2 delete .. //depot/projects/e500/sys/boot/powerpc/uboot/gnu/NOTES#2 delete .. //depot/projects/e500/sys/boot/powerpc/uboot/gnu/global_data.h#2 delete .. //depot/projects/e500/sys/boot/powerpc/uboot/gnu/u-boot.h#2 delete .. //depot/projects/e500/sys/boot/powerpc/uboot/metadata.c#2 edit .. //depot/projects/e500/sys/boot/powerpc/uboot/start.S#2 edit .. //depot/projects/e500/sys/boot/powerpc/uboot/version#2 edit .. //depot/projects/e500/sys/boot/uboot/common/calls.sh#2 delete .. //depot/projects/e500/sys/boot/uboot/common/main.c#3 edit .. //depot/projects/e500/sys/boot/uboot/gnu/NOTES#2 delete .. //depot/projects/e500/sys/boot/uboot/gnu/_exports.h#2 delete .. //depot/projects/e500/sys/boot/uboot/lib/Makefile#3 edit .. //depot/projects/e500/sys/boot/uboot/lib/api_public.h#1 add .. //depot/projects/e500/sys/boot/uboot/lib/console.c#2 edit .. //depot/projects/e500/sys/boot/uboot/lib/devicename.c#2 edit .. //depot/projects/e500/sys/boot/uboot/lib/glue.c#1 add .. //depot/projects/e500/sys/boot/uboot/lib/libuboot.h#2 edit .. //depot/projects/e500/sys/boot/uboot/lib/net.c#2 edit .. //depot/projects/e500/sys/boot/uboot/lib/reboot.c#2 edit .. //depot/projects/e500/sys/boot/uboot/lib/time.c#2 edit .. //depot/projects/e500/sys/powerpc/include/bootinfo.h#3 edit Differences ... ==== //depot/projects/e500/lib/libstand/Makefile#3 (text+ko) ==== @@ -23,7 +23,7 @@ CFLAGS+= -mno-sse3 .endif .if ${MACHINE_ARCH} == "powerpc" -CFLAGS+= -msoft-float -D_STANDALONE +CFLAGS+= -ffixed-r14 -ffixed-r29 -msoft-float -D_STANDALONE .endif .if ${MACHINE_ARCH} == "amd64" CFLAGS+= -m32 -I. ==== //depot/projects/e500/sys/boot/ficl/Makefile#2 (text+ko) ==== @@ -15,7 +15,13 @@ CFLAGS+= -mno-sse3 .endif .if ${MACHINE_ARCH} == "powerpc" -CFLAGS+= -msoft-float +# +# Important notice: registers dedicated for U-Boot must NOT be used by the +# loader code, as we are going to jump between loader(8) and U-Boot code back +# and forth safely. For PowerPC these are r14 and r29, but always make +# sure in the U-Boot cpu/{CPU}/config.mk, e.g. cpu/mpc85xx/config.mk +# +CFLAGS+= -ffixed-r14 -ffixed-r29 -msoft-float .endif .if ${MACHINE} == "pc98" CFLAGS+= -DPC98 ==== //depot/projects/e500/sys/boot/powerpc/uboot/Makefile#2 (text+ko) ==== @@ -64,10 +64,10 @@ # # Important notice: registers dedicated for U-Boot must NOT be used by the # loader code, as we are going to jump between loader(8) and U-Boot code back -# and forth safely. For PowerPC these are r2, r14 and r29, but always make +# and forth safely. For PowerPC these are r14 and r29, but always make # sure in the U-Boot cpu/{CPU}/config.mk, e.g. cpu/mpc85xx/config.mk # -CFLAGS+= -ffreestanding -ffixed-r2 -ffixed-r14 -ffixed-r29 +CFLAGS+= -ffreestanding -ffixed-r14 -ffixed-r29 LDFLAGS= -nostdlib -static -T ${.CURDIR}/ldscript.powerpc ==== //depot/projects/e500/sys/boot/powerpc/uboot/conf.c#2 (text+ko) ==== @@ -1,5 +1,4 @@ /*- - * Copyright (c) 2007 Semihalf, Rafal Jaworowski * Copyright (c) 1999 Michael Smith * All rights reserved. * ==== //depot/projects/e500/sys/boot/powerpc/uboot/metadata.c#2 (text+ko) ==== @@ -39,10 +39,11 @@ #include #include +#include "api_public.h" #include "bootstrap.h" -#include "u-boot_defs.h" -extern gd_t *uboot_global_data; +/* XXX should this go into header? */ +struct sys_info *ub_get_sys_info(void); /* * Return a 'boothowto' value corresponding to the kernel arguments in @@ -270,7 +271,7 @@ vm_offset_t envp; vm_offset_t size; vm_offset_t vaddr; - bd_t *bd = uboot_global_data->bd; + struct sys_info *si; char *rootdevname; int howto; int i; @@ -309,18 +310,31 @@ addr = roundup(addr, PAGE_SIZE); /* Fill information structure */ + if (!(si = ub_get_sys_info())) + panic("can't retrieve U-Boot sysinfo"); + + /* Extract mem info */ + for (i = 0; i < si->mr_no; i++) + if (si->mr[i].flags == MR_ATTR_DRAM) { + bootinfo.mem_base = si->mr[i].start; + bootinfo.mem_size = si->mr[i].size; + break; + } + + if (i == si->mr_no) + panic("can't retrieve memory info"); + bootinfo.version = 1; - bootinfo.mem_base = bd->bi_memstart; - bootinfo.mem_size = bd->bi_memsize; - bootinfo.bar_base = bd->BI_BAR_BASE; - bootinfo.cpu_clk = uboot_global_data->cpu_clk; - bootinfo.bus_clk = uboot_global_data->bus_clk; - bootinfo.baudrate = uboot_global_data->baudrate; + bootinfo.bar_base = si->bar; + bootinfo.cpu_clk = si->clk_cpu; + bootinfo.bus_clk = si->clk_bus; + +#if 0 memcpy(bootinfo.eth0_addr, bd->bi_enetaddr, sizeof(bootinfo.eth0_addr)); #ifdef CONFIG_HAS_ETH1 memcpy(bootinfo.eth1_addr, bd->bi_enet1addr, sizeof(bootinfo.eth1_addr)); #endif - bootinfo.eth_speed = bd->bi_ethspeed; +#endif kernend = 0; kfp = file_findfile(NULL, "elf32 kernel"); @@ -340,7 +354,7 @@ md = file_findmetadata(kfp, MODINFOMD_KERNEND); bcopy(&kernend, md->md_data, sizeof kernend); - /* Convert the address to the final VA */ + /* Convert addresses to the final VA */ *modulep -= __elfN(relocation_offset); for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) { ==== //depot/projects/e500/sys/boot/powerpc/uboot/start.S#2 (text+ko) ==== @@ -25,7 +25,6 @@ */ #include -#include "u-boot_calls.h" #define STACK_SIZE 8192 @@ -39,43 +38,17 @@ lis %r1, stack@ha addi %r1, %r1, stack@l addi %r1, %r1, (STACK_SIZE - 32) - - /* The global_data ptr is passed in R29 - save it */ - lis %r4, uboot_global_data@ha - addi %r4, %r4, uboot_global_data@l - stw %r29, 0(%r4) - b main - -#define UB_CALL(FUNC) \ - ENTRY(ub_ ## FUNC) \ - lis %r11, uboot_jump_table@ha; \ - addi %r11, %r11, uboot_jump_table@l; \ - lwz %r11, 0(%r11); \ - \ - lwz %r11, 4*XF_ ## FUNC(%r11); \ - mtctr %r11; \ - bctr - /* - * U-Boot jump table entries - refer to /include/exports.h - * - * The calls can then be used in the loader code with ub_ prefix like - * ub_getc() etc. + * syscall() */ -UB_CALL(get_version); -UB_CALL(getc); -UB_CALL(tstc); -UB_CALL(putc); -UB_CALL(udelay); -UB_CALL(get_timer); -UB_CALL(do_reset); -UB_CALL(eth_init); -UB_CALL(eth_halt); -UB_CALL(eth_send); -UB_CALL(eth_receive); - +ENTRY(syscall) + lis %r11, syscall_ptr@ha + addi %r11, %r11, syscall_ptr@l + lwz %r11, 0(%r11) + mtctr %r11 + bctr /* * Data section @@ -85,8 +58,5 @@ stack: .space STACK_SIZE -GLOBAL(uboot_global_data) - .long 0 - -GLOBAL(uboot_jump_table) +GLOBAL(syscall_ptr) .long 0 ==== //depot/projects/e500/sys/boot/powerpc/uboot/version#2 (text+ko) ==== @@ -3,6 +3,7 @@ NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this file is important. Make sure the current version number is on line 6. +0.6: Integrated with the new U-Boot API 0.5: Full network functionality. 0.2: Initial U-Boot/PowerPC version derived from the existing OpenFirmware-based. ==== //depot/projects/e500/sys/boot/uboot/common/main.c#3 (text+ko) ==== @@ -33,12 +33,13 @@ #include "bootstrap.h" #include "libuboot.h" -#include "u-boot_defs.h" +#include "api_public.h" -#define XF_VERSION 4 /* required U-Boot API version */ +#define DEBUG struct uboot_devdesc currdev; struct arch_switch archsw; /* MI/MD interface boundary */ +int devs_no; extern char end[]; extern char bootprog_name[]; @@ -46,9 +47,6 @@ extern char bootprog_date[]; extern char bootprog_maker[]; -extern gd_t *uboot_global_data; -extern void **uboot_jump_table; - static char bootargs[128]; extern unsigned char _etext[]; @@ -58,24 +56,59 @@ extern unsigned char __sbss_end[]; extern unsigned char _end[]; +extern void * syscall_ptr; + +struct sys_info * ub_get_sys_info(void); + + +void dump_si(struct sys_info *si) +{ +#ifdef DEBUG + printf("sys info:\n"); + printf(" clkbus\t= 0x%08x\n", si->clk_bus); + printf(" clkcpu\t= 0x%08x\n", si->clk_cpu); + printf(" bar\t\t= 0x%08x\n", si->bar); +#endif +} + +static void dump_sig(struct api_signature *sig) +{ +#ifdef DEBUG + printf("signature:\n"); + printf(" version\t= %d\n", sig->version); + printf(" checksum\t= 0x%08x\n", sig->checksum); + printf(" sc entry\t= 0x%08x\n", sig->syscall); +#endif +} static void dump_addr_info(void) { - printf("\nimage addresses:\n"); +#ifdef DEBUG + printf("\naddresses info:\n"); printf(" _etext (sdata) = 0x%08x\n", (u_int32_t)_etext); printf(" _edata = 0x%08x\n", (u_int32_t)_edata); printf(" __sbss_start = 0x%08x\n", (u_int32_t)__sbss_start); printf(" __sbss_end = 0x%08x\n", (u_int32_t)__sbss_end); printf(" __sbss_start = 0x%08x\n", (u_int32_t)__bss_start); printf(" _end = 0x%08x\n", (u_int32_t)_end); - printf(" global_data = 0x%08x\n", (u_int32_t)uboot_global_data); - printf(" jumptable = 0x%08x\n", (u_int32_t)uboot_jump_table); + printf(" syscall entry = 0x%08x\n", (u_int32_t)syscall_ptr); +#endif } -uint64_t -memsize(void) +static uint64_t +memsize(int flags) { - return (uboot_global_data->ram_size); + int i; + struct sys_info * si; + + if ((si = ub_get_sys_info()) == NULL) + return 0; + + for (i = 0; i < si->mr_no; i++) + if (si->mr[i].flags == flags && si->mr[i].size) + return (si->mr[i].size); + + return 0; } int @@ -86,8 +119,17 @@ int bargc; char **bargv; - /* Extract JT pointer */ - uboot_jump_table = uboot_global_data->jt; + struct api_signature *sig = NULL; + + if (!api_search_sig(&sig)) + return -1; + + syscall_ptr = sig->syscall; + if (syscall_ptr == NULL) + return -2; + + if (sig->version > API_SIG_VERSION) + return -3; /* Clear BSS sections */ bzero(__sbss_start, __sbss_end - __sbss_start); @@ -98,22 +140,26 @@ */ cons_probe(); - /* Check if we're compatible */ - if (ub_get_version() < XF_VERSION) - panic("U-Boot API version too low: %d, expected: %d", - ub_get_version(), XF_VERSION); + printf("Compatible API signature found @%x\n", sig); - printf("Found compatible API, ver. %d\n", ub_get_version()); -#if 0 + dump_sig(sig); dump_addr_info(); -#endif + /* * Initialise the heap as early as possible. Once this is done, * alloc() is usable. The stack is buried inside us, so this is * safe. */ - setheap((void *)end, (void *)(end + 512*1024)); + setheap((void *)end, (void *)(end + 512 * 1024)); + + /* + * Enumerate U-Boot devices + */ + if ((devs_no = ub_dev_enum()) == 0) + panic("no devices found"); + printf("Number of U-Boot devices found %d\n", devs_no); + /* XXX all our dv_init()s currently don't do anything... */ /* * March through the device switch probing for things. */ @@ -124,20 +170,21 @@ printf("\n"); printf("%s, Revision %s\n", bootprog_name, bootprog_rev); printf("(%s, %s)\n", bootprog_maker, bootprog_date); - printf("Memory: %lldMB\n", memsize() / 1024 / 1024); + printf("Memory: %lldMB\n", memsize(MR_ATTR_DRAM) / 1024 / 1024); + printf("FLASH: %lldMB\n", memsize(MR_ATTR_FLASH) / 1024 / 1024); +// printf("SRAM: %lldMB\n", memsize(MR_ATTR_SRAM) / 1024 / 1024); /* XXX only support netbooting for now */ - for (i = 0; devsw[i] != NULL; i++) { - if (strncmp(devsw[i]->dv_name, "net", - strlen(devsw[i]->dv_name)) == 0) + for (i = 0; devsw[i] != NULL; i++) + if (strncmp(devsw[i]->dv_name, "net", strlen(devsw[i]->dv_name)) == 0) break; - } + if (devsw[i] == NULL) panic("no network devices?!"); currdev.d_dev = devsw[i]; currdev.d_type = currdev.d_dev->dv_type; - currdev.d_kind.netif.unit = 0; + currdev.d_unit = 0; env_setenv("currdev", EV_VOLATILE, uboot_fmtdev(&currdev), uboot_setcurrdev, env_nounset); @@ -174,8 +221,8 @@ command_reboot(int argc, char *argv[]) { printf("Resetting...\n"); - ub_eth_halt(); - ub_do_reset(); + ub_reset(); - panic("Reset failed!"); + printf("Reset failed!\n"); + while(1); } ==== //depot/projects/e500/sys/boot/uboot/lib/Makefile#3 (text+ko) ==== @@ -1,11 +1,9 @@ -# $FreeBSD: src/sys/boot/ofw/libofw/Makefile,v 1.9 2004/10/24 15:32:50 ru Exp $ LIB= uboot INTERNALLIB= SRCS= devicename.c elf_freebsd.c console.c copy.c disk.c \ - module.c net.c reboot.c \ - time.c + module.c net.c reboot.c time.c glue.c CFLAGS+= -I${.CURDIR}/../../../../lib/libstand/ @@ -13,15 +11,16 @@ CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../../.. -I. CFLAGS+= -ffreestanding + .if ${MACHINE_ARCH} == "powerpc" # # Important notice: registers dedicated for U-Boot must NOT be used by the # loader code, as we are going to jump between loader(8) and U-Boot code back -# and forth safely. For PowerPC these are r2, r14 and r29, but always make +# and forth safely. For PowerPC these are r14 and r29, but always make # sure in the U-Boot cpu/{CPU}/config.mk, e.g. cpu/mpc85xx/config.mk # # FIXME this should be integrated with the whole system build settings -CFLAGS+= -msoft-float -Wa,-me500 -ffixed-r2 -ffixed-r14 -ffixed-r29 +CFLAGS+= -msoft-float -Wa,-me500 -ffixed-r14 -ffixed-r29 .endif .ifdef(BOOT_DISK_DEBUG) @@ -32,16 +31,8 @@ machine: ln -sf ${.CURDIR}/../../../${MACHINE_ARCH}/include machine -defs: - sh ${.CURDIR}/../../${MACHINE_ARCH}/uboot/defs.sh \ - ${.CURDIR}/../../${MACHINE_ARCH}/uboot > u-boot_defs.h - -calls: - sh ${.CURDIR}/../common/calls.sh \ - ${.CURDIR}/../gnu/_exports.h > u-boot_calls.h - -CLEANFILES+= machine u-boot_defs.h u-boot_calls.h +CLEANFILES+= machine .include -beforedepend ${OBJS}: machine defs calls +beforedepend ${OBJS}: machine ==== //depot/projects/e500/sys/boot/uboot/lib/console.c#2 (text+ko) ==== @@ -24,15 +24,16 @@ * SUCH DAMAGE. */ +#include #include "bootstrap.h" int console; static void uboot_cons_probe(struct console *cp); static int uboot_cons_init(int); -void uboot_cons_putchar(int); -int uboot_cons_getchar(void); -int uboot_cons_poll(void); +static void uboot_cons_putchar(int); +static int uboot_cons_getchar(void); +static int uboot_cons_poll(void); struct console uboot_console = { "uboot", @@ -57,7 +58,7 @@ return 0; } -void +static void uboot_cons_putchar(int c) { if (c == '\n') @@ -66,13 +67,13 @@ ub_putc(c); } -int +static int uboot_cons_getchar() { return (ub_getc()); } -int +static int uboot_cons_poll() { return (ub_tstc()); ==== //depot/projects/e500/sys/boot/uboot/lib/devicename.c#2 (text+ko) ==== @@ -143,7 +143,7 @@ goto fail; } - idev->d_kind.disk.unit = unit; + idev->d_unit = unit; idev->d_kind.disk.slice = slice; idev->d_kind.disk.partition = partition; if (path != NULL) @@ -166,7 +166,7 @@ } if (dv->dv_type == DEVT_NET) - idev->d_kind.netif.unit = unit; + idev->d_unit = unit; if (path != NULL) *path = (*cp == 0) ? cp : cp + 1; @@ -205,7 +205,7 @@ case DEVT_DISK: cp = buf; - cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_kind.disk.unit); + cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit); if (dev->d_kind.disk.slice > 0) cp += sprintf(cp, "s%d", dev->d_kind.disk.slice); if (dev->d_kind.disk.partition >= 0) @@ -214,7 +214,7 @@ break; case DEVT_NET: - sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit); + sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit); break; } return(buf); ==== //depot/projects/e500/sys/boot/uboot/lib/libuboot.h#2 (text+ko) ==== @@ -34,20 +34,15 @@ { struct devsw *d_dev; int d_type; + int d_unit; union { struct { - int unit; + void *data; int slice; int partition; - void *data; } disk; - - struct - { - int unit; - } netif; } d_kind; }; ==== //depot/projects/e500/sys/boot/uboot/lib/net.c#2 (text+ko) ==== @@ -42,13 +42,14 @@ #include #include +#include "api_public.h" #include "libuboot.h" -#include "u-boot_defs.h" +#define NETIF_DEBUG +#define NETIF_VERBOSE_DEBUG #undef NETIF_DEBUG #undef NETIF_VERBOSE_DEBUG -extern gd_t *uboot_global_data; static int net_probe(struct netif *, void *); static int net_match(struct netif *, void *); @@ -57,6 +58,9 @@ static int net_put(struct iodesc *, void *, size_t); static void net_end(struct netif *); +struct device_info * ub_dev_get(int i); + +extern int devs_no; extern struct netif_stats net_stats[]; struct netif_dif net_ifs[] = { @@ -83,6 +87,7 @@ u_int8_t sc_rxbuf[ETHER_MAX_LEN]; u_int8_t sc_txbuf[ETHER_MAX_LEN + PKTALIGN]; u_int8_t *sc_txbufp; + int sc_handle; /* device handle for ub_dev_xxx */ }; static struct uboot_softc uboot_softc; @@ -102,6 +107,24 @@ static int net_probe(struct netif *nif, void *machdep_hint) { + int i; + struct device_info *di; + + for (i = 0; i < devs_no; i++) + if (di = ub_dev_get(i)) + if (di->type == DEV_TYP_NET) + break; + if (i == devs_no) { + printf("net_probe: no network devices found, maybe not\ + enumerated yet..?\n"); + return -1; + } + +#if defined(NETIF_DEBUG) + printf("net_probe: network device found: %d\n", i); +#endif + uboot_softc.sc_handle = i; + return 0; } @@ -131,10 +154,10 @@ memcpy(sc->sc_txbufp, pkt, len); - rv = ub_eth_send(sc->sc_txbufp, sendlen); + rv = ub_dev_send(sc->sc_handle, sc->sc_txbufp, sendlen); #if defined(NETIF_DEBUG) - printf("net_put: eth_send returned %d\n", rv); + printf("net_put: ub_send returned %d\n", rv); #endif if (rv == 0) rv = len; @@ -160,7 +183,7 @@ t = getsecs(); do { - length = ub_eth_receive(sc->sc_rxbuf, len); + length = ub_dev_recv(sc->sc_handle, sc->sc_rxbuf, len); } while ((length == -1 || length == 0) && (getsecs() - t < timeout)); @@ -185,13 +208,20 @@ static void net_init(struct iodesc *desc, void *machdep_hint) { - int i; - bd_t *bd = uboot_global_data->bd; + int i, err; struct netif *nif = desc->io_netif; struct uboot_softc *sc; + struct device_info *di; + + sc = nif->nif_devdata = &uboot_softc; + if (err = ub_dev_open(sc->sc_handle)) + panic("%s%d: initialisation failed with error %d\n", + nif->nif_driver->netif_bname, nif->nif_unit, err); + /* Get MAC address */ - memcpy(desc->myea, bd->bi_enetaddr, 6); + di = ub_dev_get(sc->sc_handle); + memcpy(desc->myea, di->di_net.hwaddr, 6); if (memcmp (desc->myea, "\0\0\0\0\0\0", 6) == 0) { panic("%s%d: empty ethernet address!", nif->nif_driver->netif_bname, nif->nif_unit); @@ -202,21 +232,21 @@ nif->nif_unit, ether_sprintf(desc->myea)); #endif - sc = nif->nif_devdata = &uboot_softc; - /* Set correct alignment for TX packets */ sc->sc_txbufp = sc->sc_txbuf; if ((unsigned long)sc->sc_txbufp % PKTALIGN) sc->sc_txbufp += PKTALIGN - (unsigned long)sc->sc_txbufp % PKTALIGN; +} - if (!ub_eth_init(bd)) - panic("%s%d: initialisation failed.\n", - nif->nif_driver->netif_bname, nif->nif_unit); -} static void net_end(struct netif *nif) { - ub_eth_halt(); + int err; + struct uboot_softc *sc = nif->nif_devdata; + + if (err = ub_dev_close(sc->sc_handle)) + panic("%s%d: net_end failed with error %d\n", + nif->nif_driver->netif_bname, nif->nif_unit, err); } ==== //depot/projects/e500/sys/boot/uboot/lib/reboot.c#2 (text+ko) ==== @@ -27,5 +27,5 @@ void exit(int code) { - ub_do_reset(); + ub_reset(); } ==== //depot/projects/e500/sys/boot/uboot/lib/time.c#2 (text+ko) ==== @@ -30,12 +30,15 @@ #include +/* + * Return the time in seconds since the beginning of the day. + */ time_t time(time_t *tloc) { int secs; - secs = ub_get_timer() / 1000; + secs = ub_get_timer(0) / 1000; if (tloc) *tloc = secs; @@ -45,10 +48,7 @@ int getsecs() { - time_t n = 0; - - time(&n); - return n; + return (time(NULL)); } /* ==== //depot/projects/e500/sys/powerpc/include/bootinfo.h#3 (text+ko) ==== @@ -37,10 +37,7 @@ vm_offset_t bar_base; u_int32_t cpu_clk; u_int32_t bus_clk; - u_int32_t baudrate; u_int8_t eth0_addr[6]; - u_int8_t eth1_addr[6]; - u_int16_t eth_speed; }; extern struct bootinfo *bootinfo;