Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm26/podulebus General tidying up, notably:



details:   https://anonhg.NetBSD.org/src/rev/f75c44026619
branches:  trunk
changeset: 495064:f75c44026619
user:      bjh21 <bjh21%NetBSD.org@localhost>
date:      Thu Jul 20 20:25:10 2000 +0000

description:
General tidying up, notably:
 - Get the Ethernet address from the card's description string, rather than
   relying on RISC OS to set it.
 - Don't mention this is a SEEQ8005 -- that's all an "ea" can be.
 - Use format_bytes to display the amount of buffer RAM.

diffstat:

 sys/arch/arm26/podulebus/if_ea.c |  79 +++++++++++++++------------------------
 1 files changed, 31 insertions(+), 48 deletions(-)

diffs (138 lines):

diff -r cedcf847ac48 -r f75c44026619 sys/arch/arm26/podulebus/if_ea.c
--- a/sys/arch/arm26/podulebus/if_ea.c  Thu Jul 20 19:43:10 2000 +0000
+++ b/sys/arch/arm26/podulebus/if_ea.c  Thu Jul 20 20:25:10 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ea.c,v 1.1 2000/05/09 21:56:03 bjh21 Exp $ */
+/* $NetBSD: if_ea.c,v 1.2 2000/07/20 20:25:10 bjh21 Exp $ */
 
 /*
  * Copyright (c) 1995 Mark Brinicombe
@@ -118,7 +118,6 @@
 struct ea_softc {
        struct device sc_dev;
        struct irq_handler *sc_ih;
-       int sc_podule_number;           /* Our podule number */
        u_int sc_iobase;                /* base I/O addr */
        struct ethercom sc_ethercom;    /* Ethernet common */
        char sc_pktbuf[EA_BUFSIZ];      /* frame buffer */
@@ -156,6 +155,10 @@
 int eaprobe __P((struct device *, struct cfdata *, void *));
 void eaattach __P((struct device *, struct device *, void *));
 
+void ea_dump_buffer __P((struct ea_softc *, int));
+void ea_claimirq __P((struct ea_softc *));
+void ea_releaseirq __P((struct ea_softc *));
+
 /* driver structure for autoconf */
 
 struct cfattach ea_ca = {
@@ -274,57 +277,34 @@
        struct ea_softc *sc = (void *)self;
        struct podulebus_attach_args *pa = (void *)aux;
        struct ifnet *ifp = &sc->sc_ethercom.ec_if;
-       int loop;
-       int sum;
        u_int8_t myaddr[ETHER_ADDR_LEN];
-
+       char *ptr;
+       int i;
+       
 /*     dprintf(("Attaching %s...\n", sc->sc_dev.dv_xname));*/
 
-/* Note the podule number and validate */
-
-       sc->sc_podule_number = pa->pa_slotnum;
-
-/* Set the address of the controller for easy access */
-       
+       /* Set the address of the controller for easy access */
        sc->sc_iobase = pa->pa_memc_h + EA_8005_BASE;
 
-/* Read the station address - the receiver must be off */
-
-       WriteShort(sc->sc_iobase + EA_8005_CONFIG1, EA_BUFCODE_STATION_ADDR0);
-       
-       for (sum = 0, loop = 0; loop < ETHER_ADDR_LEN; ++loop) {
-               myaddr[loop] =
-                   ReadByte(sc->sc_iobase + EA_8005_BUFWIN);
-               sum += myaddr[loop];
+       /* Get the Ethernet address from the device description string. */
+       ptr = strchr(pa->pa_descr, '(');
+       if (ptr == NULL) {
+               printf(": Ethernet address not found in description\n");
+               return;
        }
-
-/*
- * Hard code the ether address if we don't have one.
- * Need to work out how I get the real address
- * until then use the one a network slot card
- * would used, based on the machine id.
- */
-
-/*
- * Unfortunately, arm26 machines don't necessarily have a SSN, and I don't
- * support them yet anyway.  Erm, ideas anyone?
- */
-
-       if (sum == 0) {
-               printf(": Ethernet address not found.  Giving up.\n");
-#if 0
-               myaddr[0] = 0x00;
-               myaddr[1] = 0x00;
-               myaddr[2] = bootconfig.machine_id[3];
-               myaddr[3] = bootconfig.machine_id[2];
-               myaddr[4] = bootconfig.machine_id[1];
-               myaddr[5] = bootconfig.machine_id[0];
-#endif
+       ptr++;
+       for (i = 0; i < ETHER_ADDR_LEN; i++) {
+               myaddr[i] = strtoul(ptr, &ptr, 16);
+               if (*ptr++ != (i == ETHER_ADDR_LEN - 1 ? ')' : ':')) {
+                       printf(": Bad Ethernet address found in "
+                              "description\n");
+                       return;
+               }
        }
 
        /* Print out some information for the user. */
 
-       printf(": SEEQ8005 address %s", ether_sprintf(myaddr));
+       printf(": address %s", ether_sprintf(myaddr));
 
        sc->sc_irqclaimed = 0;
 
@@ -364,7 +344,8 @@
        /* Should test the RAM */
 
        ea_ramtest(sc);
-       
+
+       printf("\n");
 /*     dprintf(("eaattach() finished.\n"));*/
 }
 
@@ -380,6 +361,7 @@
        register u_int iobase = sc->sc_iobase;
        register int loop;
        register u_int sum = 0;
+       char pbuf[9];
 
 /*     dprintf(("ea_ramtest()\n"));*/
 
@@ -469,10 +451,11 @@
 
        /* Report */
 
-       if (sum == 0)
-               printf(" %dK buffer RAM\n", EA_BUFFER_SIZE / 1024);
-       else
-               printf(" buffer RAM failed self test, %d faults\n", sum);
+       if (sum == 0) {
+               format_bytes(pbuf, sizeof(pbuf), EA_BUFFER_SIZE);
+               printf(", %s buffer RAM", pbuf);
+       } else
+               printf(", buffer RAM failed self test, %d faults", sum);
 }
 
 



Home | Main Index | Thread Index | Old Index