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>

Reply via email to