Module Name: src Committed By: phx Date: Fri Mar 11 17:46:30 UTC 2011
Modified Files: src/sys/arch/sandpoint/stand/altboot: brdsetup.c stg.c Log Message: Some code cleanup, suggested by nisimura@. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sandpoint/stand/altboot/brdsetup.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/sandpoint/stand/altboot/stg.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sandpoint/stand/altboot/brdsetup.c diff -u src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.8 src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.9 --- src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.8 Thu Mar 10 21:11:49 2011 +++ src/sys/arch/sandpoint/stand/altboot/brdsetup.c Fri Mar 11 17:46:30 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: brdsetup.c,v 1.8 2011/03/10 21:11:49 phx Exp $ */ +/* $NetBSD: brdsetup.c,v 1.9 2011/03/11 17:46:30 phx Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -969,27 +969,29 @@ } /* - * For cost saving reasons some NAS boxes are missing the ROM for the - * NIC's ethernet address and keep it in their Flash memory. + * For cost saving reasons some NAS boxes lack SEEPROM for NIC's + * ethernet address and keep it in their Flash memory instead. */ void read_mac_from_flash(uint8_t *mac) { uint8_t *p; - if (brdtype == BRD_SYNOLOGY) { + switch (brdtype) { + case BRD_SYNOLOGY: p = redboot_fis_lookup("vendor"); - if (p != NULL) { - memcpy(mac, p, 6); - return; - } - } else if (brdtype == BRD_DLINKDSM) { + if (p == NULL) + break; + memcpy(mac, p, 6); + return; + case BRD_DLINKDSM: read_mac_string(mac, (char *)0xfff0ff80); return; - } - else + default: printf("Warning: This board has no known method defined " "to determine its MAC address!\n"); + break; + } /* set to 00:00:00:00:00:00 in case of error */ memset(mac, 0, 6); Index: src/sys/arch/sandpoint/stand/altboot/stg.c diff -u src/sys/arch/sandpoint/stand/altboot/stg.c:1.3 src/sys/arch/sandpoint/stand/altboot/stg.c:1.4 --- src/sys/arch/sandpoint/stand/altboot/stg.c:1.3 Thu Mar 10 21:11:50 2011 +++ src/sys/arch/sandpoint/stand/altboot/stg.c Fri Mar 11 17:46:30 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: stg.c,v 1.3 2011/03/10 21:11:50 phx Exp $ */ +/* $NetBSD: stg.c,v 1.4 2011/03/11 17:46:30 phx Exp $ */ /*- * Copyright (c) 2011 Frank Wille. @@ -55,12 +55,13 @@ uint64_t xd0, xd1, xd2, dummy; }; #define T1_EMPTY (1U << 31) /* no Tx frame available */ -#define T1_NOALIGN (03 << 16) /* allow any Tx alignment */ +#define T1_NOALIGN (3U << 16) /* allow any Tx alignment */ #define T1_CNTSHIFT 24 /* Tx fragment count */ -#define T2_LENSHIFT 48 /* Tx frame length */ +#define T2_LENSHIFT 48 /* Tx fragment length */ #define R1_DONE (1U << 31) /* desc has a Rx frame */ #define R1_FL_MASK 0xffff /* Rx frame length */ #define R1_ER_MASK 0x3f0000 /* Rx error indication */ +#define R2_LENSHIFT 48 /* Rx fragment length */ #define STGE_DMACtrl 0x00 #define DMAC_RxDMAPollNow (1U << 4) @@ -161,6 +162,10 @@ uint8_t *en; unsigned i; uint32_t macctl, reg; + static uint8_t bad[2][6] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } + }; l = ALLOC(struct local, 32); /* desc alignment */ memset(l, 0, sizeof(struct local)); @@ -187,20 +192,10 @@ /* read ethernet address */ en = data; - if (PCI_PRODUCT(pcicfgread(tag, PCI_ID_REG)) != 0x1023) { - /* read from station address registers when not ST1023 */ - en[0] = CSR_READ_2(l, STGE_StationAddress0) & 0xff; - en[1] = CSR_READ_2(l, STGE_StationAddress0) >> 8; - en[2] = CSR_READ_2(l, STGE_StationAddress1) & 0xff; - en[3] = CSR_READ_2(l, STGE_StationAddress1) >> 8; - en[4] = CSR_READ_2(l, STGE_StationAddress2) & 0xff; - en[5] = CSR_READ_2(l, STGE_StationAddress2) >> 8; - } else { - /* ST1023: read the address from the serial EEPROM */ - static uint8_t bad[2][6] = { - { 0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0xff,0xff,0xff,0xff,0xff,0xff } - }; + for (i = 0; i < 6; i++) + en[i] = CSR_READ_1(l, STGE_StationAddress0 + i); + + if (memcmp(en, bad[0], 6) == 0 || memcmp(en, bad[1], 6) == 0) { uint16_t addr[3]; for (i = 0; i < 3; i++) { @@ -223,6 +218,7 @@ for (i = 0; i < 6; i++) CSR_WRITE_1(l, STGE_StationAddress0 + i, en[i]); } + printf("MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", en[0], en[1], en[2], en[3], en[4], en[5]); @@ -237,10 +233,10 @@ txd[1].xd1 = htole64(T1_EMPTY); rxd = &l->rxd[0]; rxd[0].xd0 = htole64(VTOPHYS(&rxd[1])); - rxd[0].xd2 = htole64((uint64_t)VTOPHYS(l->rxstore[0]) | + rxd[0].xd2 = htole64(VTOPHYS(l->rxstore[0]) | ((uint64_t)FRAMESIZE << 48)); rxd[1].xd0 = htole64(VTOPHYS(&rxd[0])); - rxd[1].xd2 = htole64((uint64_t)VTOPHYS(l->rxstore[1]) | + rxd[1].xd2 = htole64(VTOPHYS(l->rxstore[1]) | ((uint64_t)FRAMESIZE << 48)); wbinv(l, sizeof(struct local));