Module Name: src
Committed By: nisimura
Date: Mon Jul 20 11:43:09 UTC 2009
Modified Files:
src/sys/arch/sandpoint/stand/netboot: Makefile devopen.c globals.h
nif.c rge.c
Added Files:
src/sys/arch/sandpoint/stand: Makefile
Log Message:
- fix rge.c breakage.
- stand/netboot is reported working for KuroBox and TeraStatation.
Some more fixes will follow.
- withdraw files which remain work-in-progress for now.
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/sandpoint/stand/Makefile
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/sandpoint/stand/netboot/Makefile
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/sandpoint/stand/netboot/devopen.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sandpoint/stand/netboot/globals.h \
src/sys/arch/sandpoint/stand/netboot/nif.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/sandpoint/stand/netboot/rge.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/netboot/Makefile
diff -u src/sys/arch/sandpoint/stand/netboot/Makefile:1.14 src/sys/arch/sandpoint/stand/netboot/Makefile:1.15
--- src/sys/arch/sandpoint/stand/netboot/Makefile:1.14 Mon Jan 12 08:06:54 2009
+++ src/sys/arch/sandpoint/stand/netboot/Makefile Mon Jul 20 11:43:08 2009
@@ -1,11 +1,10 @@
-# $NetBSD: Makefile,v 1.14 2009/01/12 08:06:54 tsutsui Exp $
+# $NetBSD: Makefile,v 1.15 2009/07/20 11:43:08 nisimura Exp $
S= ${.CURDIR}/../../../..
PROG= netboot
SRCS= entry.S main.c brdsetup.c pci.c devopen.c dev_net.c nif.c \
- fxp.c tlp.c pcn.c sip.c nvt.c kse.c sme.c rge.c vge.c wm.c \
- atawd.c pciide.c siisata.c printf.c
+ fxp.c tlp.c rge.c printf.c
CLEANFILES+= vers.c vers.o ${PROG} ${PROG}.bin
CFLAGS+= -Wall -Wno-main -ffreestanding -msoft-float -mmultiple
CFLAGS+= -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith
Index: src/sys/arch/sandpoint/stand/netboot/devopen.c
diff -u src/sys/arch/sandpoint/stand/netboot/devopen.c:1.9 src/sys/arch/sandpoint/stand/netboot/devopen.c:1.10
--- src/sys/arch/sandpoint/stand/netboot/devopen.c:1.9 Sat Mar 14 15:36:13 2009
+++ src/sys/arch/sandpoint/stand/netboot/devopen.c Mon Jul 20 11:43:09 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: devopen.c,v 1.9 2009/03/14 15:36:13 dsl Exp $ */
+/* $NetBSD: devopen.c,v 1.10 2009/07/20 11:43:09 nisimura Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -31,34 +31,21 @@
#include <sys/param.h>
-#include <sys/disklabel.h>
#include <netinet/in.h>
-#include <dev/ic/wdcreg.h>
-#include <dev/ata/atareg.h>
-
#include <lib/libsa/stand.h>
#include <lib/libsa/nfs.h>
-#include <lib/libsa/ufs.h>
-#include <lib/libsa/ext2fs.h>
-#include <lib/libsa/dosfs.h>
#include <lib/libkern/libkern.h>
#include "globals.h"
-static void parseunit(const char *, int *, int *, char **);
-
struct devsw devsw[] = {
{ "net", net_strategy, net_open, net_close, noioctl },
- { "dsk", wdstrategy, wdopen, wdclose, noioctl },
};
int ndevs = sizeof(devsw) / sizeof(devsw[0]);
struct fs_ops fssw[] = {
FS_OPS(nfs),
- FS_OPS(ffsv1),
- FS_OPS(ext2fs),
- FS_OPS(dosfs),
};
struct fs_ops file_system[1];
int nfsys = 1;
@@ -66,7 +53,7 @@
int
devopen(struct open_file *of, const char *name, char **file)
{
- int error, unit, part;
+ int error;
extern char bootfile[]; /* handed by DHCP */
if (of->f_flags != F_READ)
@@ -80,6 +67,7 @@
*file = bootfile; /* resolved fname */
return 0; /* NFS */
}
+#if 0 /* later */
if (name[0] == 'w' && name[1] == 'd') {
parseunit(&name[2], &unit, &part, file);
of->f_dev = &devsw[1];
@@ -96,6 +84,7 @@
}
return 0;
}
+#endif
return ENOENT;
}
@@ -107,6 +96,7 @@
return EINVAL;
}
+#if 0
static void
parseunit(const char *name, int *unitp, int *partp, char **pathp)
{
@@ -125,3 +115,4 @@
*partp = (part == -1) ? 0 : part;
*pathp = (*p == ':') ? (char *)p + 1 : NULL;
}
+#endif
Index: src/sys/arch/sandpoint/stand/netboot/globals.h
diff -u src/sys/arch/sandpoint/stand/netboot/globals.h:1.10 src/sys/arch/sandpoint/stand/netboot/globals.h:1.11
--- src/sys/arch/sandpoint/stand/netboot/globals.h:1.10 Fri Jul 3 10:31:19 2009
+++ src/sys/arch/sandpoint/stand/netboot/globals.h Mon Jul 20 11:43:09 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: globals.h,v 1.10 2009/07/03 10:31:19 nisimura Exp $ */
+/* $NetBSD: globals.h,v 1.11 2009/07/20 11:43:09 nisimura Exp $ */
/* clock feed */
#ifndef TICKS_PER_SEC
@@ -88,64 +88,4 @@
NIF_DECL(fxp);
NIF_DECL(tlp);
-NIF_DECL(nvt);
-NIF_DECL(sip);
-NIF_DECL(pcn);
-NIF_DECL(kse);
-NIF_DECL(sme);
-NIF_DECL(vge);
NIF_DECL(rge);
-NIF_DECL(wm);
-
-#ifdef LABELSECTOR
-/* IDE/SATA and disk */
-int wdopen(struct open_file *, ...);
-int wdclose(struct open_file *);
-int wdstrategy(void *, int, daddr_t, size_t, void *, size_t *);
-int parsefstype(void *);
-
-struct atac_channel {
- volatile uint8_t *c_cmdbase;
- volatile uint8_t *c_ctlbase;
- volatile uint8_t *c_cmdreg[8 + 2];
- volatile uint16_t *c_data;
- int compatchan;
-#define WDC_READ_CMD(chp, reg) *(chp)->c_cmdreg[(reg)]
-#define WDC_WRITE_CMD(chp, reg, val) *(chp)->c_cmdreg[(reg)] = (val)
-#define WDC_READ_CTL(chp, reg) (chp)->c_ctlbase[(reg)]
-#define WDC_WRITE_CTL(chp, reg, val) (chp)->c_ctlbase[(reg)] = (val)
-#define WDC_READ_DATA(chp) *(chp)->c_data
-};
-
-struct atac_command {
- uint8_t drive; /* drive id */
- uint8_t r_command; /* Parameters to upload to registers */
- uint8_t r_head;
- uint16_t r_cyl;
- uint8_t r_sector;
- uint8_t r_count;
- uint8_t r_precomp;
- uint16_t bcount;
- void *data;
- uint64_t r_blkno;
-};
-
-struct atac_softc {
- unsigned tag;
- unsigned chvalid;
- struct atac_channel channel[4];
-};
-
-struct wd_softc {
-#define WDF_LBA 0x0001
-#define WDF_LBA48 0x0002
- int sc_flags;
- int sc_unit, sc_part;
- uint64_t sc_capacity;
- struct atac_channel *sc_channel;
- struct atac_command sc_command;
- struct ataparams sc_params;
- struct disklabel sc_label;
- uint8_t sc_buf[DEV_BSIZE];
-};
-#endif
Index: src/sys/arch/sandpoint/stand/netboot/nif.c
diff -u src/sys/arch/sandpoint/stand/netboot/nif.c:1.10 src/sys/arch/sandpoint/stand/netboot/nif.c:1.11
--- src/sys/arch/sandpoint/stand/netboot/nif.c:1.10 Sat Mar 14 15:36:13 2009
+++ src/sys/arch/sandpoint/stand/netboot/nif.c Mon Jul 20 11:43:09 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: nif.c,v 1.10 2009/03/14 15:36:13 dsl Exp $ */
+/* $NetBSD: nif.c,v 1.11 2009/07/20 11:43:09 nisimura Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -54,14 +54,7 @@
static struct nifdv vnifdv[] = {
{ "fxp", fxp_match, fxp_init, fxp_send, fxp_recv },
{ "tlp", tlp_match, tlp_init, tlp_send, tlp_recv },
- { "nvt", nvt_match, nvt_init, nvt_send, nvt_recv },
- { "sip", sip_match, sip_init, sip_send, sip_recv },
- { "pcn", pcn_match, pcn_init, pcn_send, pcn_recv },
- { "kse", kse_match, kse_init, kse_send, kse_recv },
- { "sme", sme_match, sme_init, sme_send, sme_recv },
- { "vge", vge_match, vge_init, vge_send, vge_recv },
- { "rge", rge_match, rge_init, rge_send, rge_recv },
- { "wm", wm_match, wm_init, wm_send, wm_recv }
+ { "re", rge_match, rge_init, rge_send, rge_recv },
};
static int nnifdv = sizeof(vnifdv)/sizeof(vnifdv[0]);
Index: src/sys/arch/sandpoint/stand/netboot/rge.c
diff -u src/sys/arch/sandpoint/stand/netboot/rge.c:1.15 src/sys/arch/sandpoint/stand/netboot/rge.c:1.16
--- src/sys/arch/sandpoint/stand/netboot/rge.c:1.15 Mon Jan 12 09:41:59 2009
+++ src/sys/arch/sandpoint/stand/netboot/rge.c Mon Jul 20 11:43:09 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: rge.c,v 1.15 2009/01/12 09:41:59 tsutsui Exp $ */
+/* $NetBSD: rge.c,v 1.16 2009/07/20 11:43:09 nisimura Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -64,30 +64,17 @@
#define T0_EOR 0x40000000 /* end of ring */
#define T0_FS 0x20000000 /* first descriptor */
#define T0_LS 0x10000000 /* last descriptor */
-#define T0_LSGEN 0x08000000 /* TCP segmentation offload */
-#define T0_IPCS 0x00040000 /* generate IP checksum */
-#define T0_UDPCS 0x00020000 /* generate UDP checksum */
-#define T0_TCPCS 0x00010000 /* generate TCP checksum */
#define T0_FRMASK 0x0000ffff
-#define T1_TAGC 0x00020000 /* insert VTAG */
-#define T1_VTAG 0x0000ffff /* VTAG value */
#define R0_OWN 0x80000000 /* empty for HW to load anew */
#define R0_EOR 0x40000000 /* end mark to form a ring */
#define R0_BUFLEN 0x00003ff8 /* max frag. size to receive */
-/* RX status upon Rx completed */
#define R0_FS 0x20000000 /* start of frame */
#define R0_LS 0x10000000 /* end of frame */
#define R0_RES 0x00200000 /* Rx error summary */
#define R0_RUNT 0x00100000 /* runt frame received */
#define R0_CRC 0x00080000 /* CRC error found */
-#define R0_PID 0x00060000 /* protocol type; 1:TCP, 2:UDP, 3:IP */
-#define R0_IPF 0x00010000 /* IP checksum bad */
-#define R0_UDPF 0x00008000 /* UDP checksum bad */
-#define R0_TCPF 0x00004000 /* TCP checksum bad */
#define R0_FRMASK 0x00003fff /* 13:0 frame length */
-#define R1_TAVA 0x00010000 /* VTAG exists */
-#define R1_VTAG 0x0000ffff /* TAG value */
#define RGE_IDR0 0x00 /* MAC address [0] */
#define RGE_IDR1 0x01 /* MAC address [1] */
@@ -95,49 +82,41 @@
#define RGE_IDR3 0x03 /* MAC address [3] */
#define RGE_IDR4 0x04 /* MAC address [4] */
#define RGE_IDR5 0x05 /* MAC address [5] */
-#define RGE_MAR0 0x08 /* multicast filter [31:00] */
-#define RGE_MAR1 0x0c /* multicast filter [63:32] */
#define RGE_TNPDS 0x20 /* Tx descriptor base paddr */
#define RGE_THPDS 0x28 /* high pro. Tx des. base paddr */
#define RGE_CR 0x37 /* command */
-#define CR_RESET (1U << 4) /* reset S1C */
-#define CR_RXEN (1U << 3) /* Rx enable */
-#define CR_TXEN (1U << 2) /* Tx enable */
+#define CR_RESET (1U << 4) /* reset S1C */
+#define CR_RXEN (1U << 3) /* Rx enable */
+#define CR_TXEN (1U << 2) /* Tx enable */
#define RGE_TPPOLL 0x38 /* activate desc polling */
#define RGE_IMR 0x3c /* interrupt mask */
#define RGE_ISR 0x3e /* interrupt status */
-#define ISR_TXERR 0x0088 /* Tx error conditions */
-#define ISR_RXERR 0x0072 /* Rx error conditions */
-#define ISR_LNKCHG (1U << 5) /* link status change found */
-#define ISR_TXOK (1U << 2) /* Tx done */
-#define ISR_RXOK (1U << 0) /* Rx frame available */
#define RGE_TCR 0x40 /* Tx control */
-#define TCR_MAXDMA 0x0700 /* 10:8 Tx DMA burst size */
+#define TCR_MAXDMA 0x0700 /* 10:8 Tx DMA burst size */
#define RGE_RCR 0x44 /* Rx control */
-#define RCR_RXTFH 0xe000 /* 15:13 Rx FIFO threshold */
-#define RCR_MAXDMA 0x0700 /* 10:8 Rx DMA burst size */
-#define RCR_AE (1U << 5) /* accept error frame */
-#define RCR_RE (1U << 4) /* accept runt frame */
-#define RCR_AB (1U << 3) /* accept broadcast frame */
-#define RCR_AM (1U << 2) /* accept multicast frame */
-#define RCR_APM (1U << 1) /* accept unicast frame */
-#define RCR_AAP (1U << 0) /* promiscuous */
+#define RCR_RXTFH 0xe000 /* 15:13 Rx FIFO threshold */
+#define RCR_MAXDMA 0x0700 /* 10:8 Rx DMA burst size */
+#define RCR_AE (1U << 5) /* accept error frame */
+#define RCR_RE (1U << 4) /* accept runt frame */
+#define RCR_AB (1U << 3) /* accept broadcast frame */
+#define RCR_AM (1U << 2) /* accept multicast frame */
+#define RCR_APM (1U << 1) /* accept unicast frame */
+#define RCR_AAP (1U << 0) /* promiscuous */
#define RGE_PHYAR 0x60 /* PHY access */
#define RGE_PHYSR 0x6c /* PHY status */
#define RGE_RMS 0xda /* Rx maximum frame size */
-#define RGE_CCCR 0xe0 /* C+CR */
-#define CCCR_VLAN (1U << 6) /* Rx VTAG removal */
-#define CCCR_CSUM (1U << 5) /* Rx checksum offload */
#define RGE_RDSAR 0xe4 /* Rx descriptor base paddr */
#define RGE_ETTHR 0xec /* Tx threshold */
#define FRAMESIZE 1536
struct local {
- struct desc txd;
- struct desc rxd[2];
+ struct desc txd[2]; /* 256B align */
+ uint8_t _hole0[256 - 2 * sizeof(struct desc)];
+ struct desc rxd[2]; /* 256B align */
+ uint8_t _hole1[256 - 2 * sizeof(struct desc)];
uint8_t rxstore[2][FRAMESIZE];
- unsigned csr, rx;
+ unsigned csr, tx, rx;
unsigned phy, bmsr, anlpar;
unsigned tcr, rcr;
};
@@ -168,10 +147,6 @@
struct desc *txd, *rxd;
uint8_t *en = data;
- val = pcicfgread(tag, PCI_ID_REG);
- if (PCI_DEVICE(0x10ec, 0x8169) != val)
- return NULL;
-
l = ALLOC(struct local, 256); /* desc alignment */
memset(l, 0, sizeof(struct local));
l->csr = DEVTOV(pcicfgread(tag, 0x14)); /* use mem space */
@@ -200,25 +175,31 @@
/* speed and duplexity can be seen in PHYSR */
val = CSR_READ_1(l, RGE_PHYSR);
- if (val & (1U << 4)) printf("1000Mbps");
- if (val & (1U << 3)) printf("100Mbps");
- if (val & (1U << 2)) printf("10Mbps");
- if (val & (1U << 0)) printf("-FDX\n");
+ if (val & (1U << 4))
+ printf("1000Mbps");
+ if (val & (1U << 3))
+ printf("100Mbps");
+ if (val & (1U << 2))
+ printf("10Mbps");
+ if (val & (1U << 0))
+ printf("-FDX");
+ printf("\n");
- txd = &l->txd;
+ txd = &l->txd[0];
+ txd[1].xd0 = htole32(T0_EOR);
rxd = &l->rxd[0];
rxd[0].xd0 = htole32(R0_OWN | FRAMESIZE);
rxd[0].xd2 = htole32(VTOPHYS(l->rxstore[0]));
rxd[1].xd0 = htole32(R0_OWN | R0_EOR | FRAMESIZE);
rxd[1].xd2 = htole32(VTOPHYS(l->rxstore[1]));
wbinv(l, sizeof(struct local));
- l->rx = 0;
+ l->tx = l->rx = 0;
l->tcr = (03 << 24) | (07 << 8);
l->rcr = (07 << 13) | (07 << 8) | RCR_APM;
CSR_WRITE_1(l, RGE_CR, CR_TXEN | CR_RXEN);
CSR_WRITE_1(l, RGE_ETTHR, 0x3f);
- CSR_WRITE_2(l, RGE_RMS, 0x8000);
+ CSR_WRITE_2(l, RGE_RMS, FRAMELEN);
CSR_WRITE_4(l, RGE_TCR, l->tcr);
CSR_WRITE_4(l, RGE_RCR, l->rcr);
CSR_WRITE_4(l, RGE_TNPDS, VTOPHYS(txd));
@@ -239,10 +220,10 @@
unsigned loop;
wbinv(buf, len);
- txd = &l->txd;
+ txd = &l->txd[l->tx];
txd->xd2 = htole32(VTOPHYS(buf));
- txd->xd1 = 0;
- txd->xd0 = htole32(T0_OWN|T0_EOR|T0_FS|T0_LS| (len & T0_FRMASK));
+ txd->xd0 &= htole32(T0_EOR);
+ txd->xd0 |= htole32(T0_OWN | T0_FS | T0_LS | (len & T0_FRMASK));
wbinv(txd, sizeof(struct desc));
CSR_WRITE_1(l, RGE_TPPOLL, 0x40);
loop = 100;
@@ -255,6 +236,7 @@
printf("xmit failed\n");
return -1;
done:
+ l->tx ^= 1;
return len;
}
@@ -267,7 +249,9 @@
uint8_t *ptr;
bound = 1000 * timo;
+#if 0
printf("recving with %u sec. timeout\n", timo);
+#endif
again:
rxd = &l->rxd[l->rx];
do {
Added files:
Index: src/sys/arch/sandpoint/stand/Makefile
diff -u /dev/null src/sys/arch/sandpoint/stand/Makefile:1.1
--- /dev/null Mon Jul 20 11:43:09 2009
+++ src/sys/arch/sandpoint/stand/Makefile Mon Jul 20 11:43:08 2009
@@ -0,0 +1,5 @@
+# $NetBSD: Makefile,v 1.1 2009/07/20 11:43:08 nisimura Exp $
+
+SUBDIR= netboot
+
+.include <bsd.subdir.mk>