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>