PERFORCE change 64860 for review

Marcel Moolenaar marcel at FreeBSD.org
Wed Nov 10 19:49:39 PST 2004


http://perforce.freebsd.org/chv.cgi?CH=64860

Change 64860 by marcel at marcel_nfs on 2004/11/11 03:49:01

	IFC @64859

Affected files ...

.. //depot/projects/uart/arm/arm/pmap.c#3 integrate
.. //depot/projects/uart/arm/conf/IQ31244#4 integrate
.. //depot/projects/uart/arm/xscale/i80321/iq31244_machdep.c#3 integrate
.. //depot/projects/uart/conf/files#33 integrate
.. //depot/projects/uart/conf/files.sparc64#7 integrate
.. //depot/projects/uart/conf/options.arm#2 integrate
.. //depot/projects/uart/dev/ed/if_ed.c#5 integrate
.. //depot/projects/uart/dev/ed/if_ed_cbus.c#5 integrate
.. //depot/projects/uart/dev/esp/esp_sbus.c#2 integrate
.. //depot/projects/uart/dev/esp/lsi64854.c#2 delete
.. //depot/projects/uart/dev/esp/lsi64854reg.h#2 delete
.. //depot/projects/uart/dev/esp/lsi64854var.h#2 delete
.. //depot/projects/uart/fs/autofs/autofs.h#2 delete
.. //depot/projects/uart/fs/autofs/autofs_util.c#2 delete
.. //depot/projects/uart/fs/autofs/autofs_vfsops.c#3 delete
.. //depot/projects/uart/fs/autofs/autofs_vnops.c#2 delete
.. //depot/projects/uart/i386/i386/autoconf.c#3 integrate
.. //depot/projects/uart/kern/vfs_mount.c#7 integrate
.. //depot/projects/uart/modules/Makefile#13 integrate
.. //depot/projects/uart/modules/autofs/Makefile#2 delete
.. //depot/projects/uart/modules/esp/Makefile#2 integrate
.. //depot/projects/uart/netgraph/ng_device.c#5 integrate
.. //depot/projects/uart/pc98/conf/NOTES#6 integrate
.. //depot/projects/uart/pci/if_sf.c#5 integrate
.. //depot/projects/uart/pci/if_sfreg.h#3 integrate
.. //depot/projects/uart/sparc64/sbus/lsi64854.c#2 integrate

Differences ...

==== //depot/projects/uart/arm/arm/pmap.c#3 (text+ko) ====

@@ -144,8 +144,10 @@
  */
 /* Include header files */
 
+#include "opt_vm.h"
+
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.15 2004/11/07 23:01:36 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.17 2004/11/10 22:11:08 cognet Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -2811,7 +2813,6 @@
 	if (flags & KENTER_CACHE)
 		*pte |= pte_l2_s_cache_mode;
 	PTE_SYNC(pte);
-	cpu_dcache_wbinv_all(); /* XXX: shouldn't be needed */
 }
 
 void
@@ -2895,6 +2896,7 @@
 		    KENTER_CACHE);
 		va += PAGE_SIZE;
 	}
+	cpu_dcache_wbinv_all(); /* XXX: shouldn't be needed */
 }
 
 
@@ -3392,7 +3394,6 @@
 
 		pmap_vac_me_harder(m, pmap, va);
 	}
-	pmap_dcache_wbinv_all(pmap) /* XXX: Shouldn't be needed. */;
 	vm_page_unlock_queues();
 }
 
@@ -3411,6 +3412,7 @@
 pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte)
 {
 	pmap_enter(pmap, va, m, VM_PROT_READ|VM_PROT_EXECUTE, FALSE);
+	pmap_dcache_wbinv_all(pmap); /* XXX: shouldn't be needed */
 	return (NULL);
 }
 

==== //depot/projects/uart/arm/conf/IQ31244#4 (text+ko) ====

@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first 
 # in NOTES.
 #
-# $FreeBSD: src/sys/arm/conf/IQ31244,v 1.4 2004/11/07 23:02:15 cognet Exp $
+# $FreeBSD: src/sys/arm/conf/IQ31244,v 1.5 2004/11/10 22:09:39 cognet Exp $
 
 machine		arm
 ident		IQ31244
@@ -25,6 +25,7 @@
 options		KERNVIRTADDR=0xc0200000		# Used in ldscript.arm
 
 options STARTUP_PAGETABLE_ADDR=0xa0000000
+options	ARM32_NEW_VM_LAYOUT
 include		"../xscale/i80321/std.iq31244"
 #To statically compile in device wiring instead of /boot/device.hints
 #hints		"GENERIC.hints"		#Default places to look for devices.

==== //depot/projects/uart/arm/xscale/i80321/iq31244_machdep.c#3 (text+ko) ====

@@ -48,7 +48,7 @@
 #include "opt_msgbuf.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.2 2004/11/05 19:52:55 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.3 2004/11/10 22:09:39 cognet Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -105,7 +105,7 @@
 #define	KERNEL_PT_IOPXS		(KERNEL_PT_KERNEL + KERNEL_PT_KERNEL_NUM)
 
 #define	KERNEL_PT_VMDATA	(KERNEL_PT_IOPXS + 1)
-#define	KERNEL_PT_VMDATA_NUM	4
+#define	KERNEL_PT_VMDATA_NUM	10
 #define	NUM_KERNEL_PTS		(KERNEL_PT_VMDATA + KERNEL_PT_VMDATA_NUM)
 
 /* Define various stack sizes in pages */
@@ -262,8 +262,17 @@
 		freemempos -= PAGE_SIZE;
 	valloc_pages(kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE);
 	for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) {
-		valloc_pages(kernel_pt_table[loop],
-		    L2_TABLE_SIZE / PAGE_SIZE);
+		if (!(loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL))) {
+			valloc_pages(kernel_pt_table[loop],
+			    L2_TABLE_SIZE / PAGE_SIZE);
+		} else {
+			kernel_pt_table[loop].pv_pa = freemempos -
+			    (loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL)) *
+			    L2_TABLE_SIZE_REAL;
+			kernel_pt_table[loop].pv_va = 
+			    kernel_pt_table[loop].pv_pa + 0x20000000;
+		}
+		i++;
 	}
 
 	/*
@@ -301,14 +310,14 @@
 
 
 	/* Map the L2 pages tables in the L1 page table */
-	pmap_link_l2pt(l1pagetable, ARM_VECTORS_HIGH & ~(0x00400000 - 1),
+	pmap_link_l2pt(l1pagetable, ARM_VECTORS_HIGH & ~(0x00100000 - 1),
 	    &kernel_pt_table[KERNEL_PT_SYS]);
 	for (i = 0; i < KERNEL_PT_KERNEL_NUM; i++) {
-		pmap_link_l2pt(l1pagetable, KERNBASE + i * 0x00400000,
+		pmap_link_l2pt(l1pagetable, KERNBASE + i * 0x00100000,
 	    &kernel_pt_table[KERNEL_PT_KERNEL + i]);
 	}
 	for (loop = 0; loop < KERNEL_PT_VMDATA_NUM; ++loop)
-		pmap_link_l2pt(l1pagetable, KERNBASE + (i + loop) * 0x00400000,
+		pmap_link_l2pt(l1pagetable, KERNBASE + (i + loop) * 0x00100000,
 		    &kernel_pt_table[KERNEL_PT_VMDATA + loop]);
 	pmap_link_l2pt(l1pagetable, IQ80321_IOPXS_VBASE,
 	                &kernel_pt_table[KERNEL_PT_IOPXS]);

==== //depot/projects/uart/conf/files#33 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.961 2004/11/08 19:05:21 phk Exp $
+# $FreeBSD: src/sys/conf/files,v 1.962 2004/11/10 19:54:17 markm Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -853,9 +853,6 @@
 dev/zs/zs.c			optional zs
 dev/zs/zs_sbus.c		optional zs fhc
 dev/zs/zs_sbus.c		optional zs sbus
-fs/autofs/autofs_vnops.c	optional autofs
-fs/autofs/autofs_vfsops.c	optional autofs
-fs/autofs/autofs_util.c		optional autofs
 fs/deadfs/dead_vnops.c	standard
 fs/devfs/devfs_devs.c		standard
 fs/devfs/devfs_rule.c		standard

==== //depot/projects/uart/conf/files.sparc64#7 (text+ko) ====

@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: src/sys/conf/files.sparc64,v 1.61 2004/10/25 10:29:56 yongari Exp $
+# $FreeBSD: src/sys/conf/files.sparc64,v 1.62 2004/11/10 14:09:51 trhodes Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -15,7 +15,6 @@
 dev/auxio/auxio.c		optional	auxio sbus
 dev/auxio/auxio.c		optional	auxio ebus
 dev/esp/esp_sbus.c		optional	esp sbus
-dev/esp/lsi64854.c		optional	esp sbus
 dev/fb/creator.c		optional	creator sc
 dev/fb/fb.c			optional	sc
 dev/fb/splash.c			optional	splash
@@ -68,6 +67,7 @@
 sparc64/pci/ofw_pci_if.m	standard
 sparc64/pci/psycho.c		optional	pci
 sparc64/sbus/sbus.c		optional	sbus
+sparc64/sbus/lsi64854.c         optional        esp sbus
 sparc64/sparc64/autoconf.c	standard
 sparc64/sparc64/bus_machdep.c	standard
 sparc64/sparc64/cache.c		standard

==== //depot/projects/uart/conf/options.arm#2 (text+ko) ====

@@ -1,4 +1,6 @@
-#$FreeBSD: src/sys/conf/options.arm,v 1.2 2004/09/23 22:52:25 cognet Exp $
+#$FreeBSD: src/sys/conf/options.arm,v 1.3 2004/11/10 22:08:27 cognet Exp $
+ARM32_NEW_VM_LAYOUT	opt_vm.h
+ARM9_CACHE_WRITE_THROUGH	opt_global.h
 ARMFPE			opt_global.h
 CPU_SA1100		opt_global.h
 CPU_SA1110		opt_global.h

==== //depot/projects/uart/dev/ed/if_ed.c#5 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ed/if_ed.c,v 1.234 2004/09/06 21:14:32 glebius Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ed/if_ed.c,v 1.235 2004/11/10 13:16:12 nyan Exp $");
 
 /*
  * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
@@ -370,8 +370,8 @@
 	if (error)
 		return (error);
 
-#if ED_DEBUG
-	printf("type = %x type_str=%s isa16bit=%d memsize=%d id_msize=%d\n",
+#ifdef ED_DEBUG
+	printf("type = %x type_str=%s isa16bit=%d memsize=%d id_msize=%lu\n",
 	       sc->type, sc->type_str, isa16bit, memsize, conf_msize);
 	for (i = 0; i < 8; i++)
 		printf("%x -> %x\n", i, ed_asic_inb(sc, i));

==== //depot/projects/uart/dev/ed/if_ed_cbus.c#5 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/ed/if_ed_cbus.c,v 1.12 2003/10/31 18:31:58 brooks Exp $
+ * $FreeBSD: src/sys/dev/ed/if_ed_cbus.c,v 1.13 2004/11/10 13:16:12 nyan Exp $
  */
 
 #include <sys/param.h>
@@ -1682,7 +1682,7 @@
 	ed_nic_outb(sc, ED_P0_PSTART, page_offset / ED_PAGE_SIZE);
 	ed_nic_outb(sc, ED_P0_PSTOP, (page_offset + memsize) / ED_PAGE_SIZE);
 #ifdef ED_DEBUG
-	printf("ed?: ed_pio_testmem: page start=%x, end=%x",
+	printf("ed?: ed_pio_testmem: page start=%x, end=%lx",
 		      page_offset, page_offset + memsize);
 #endif
 

==== //depot/projects/uart/dev/esp/esp_sbus.c#2 (text+ko) ====

@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/esp/esp_sbus.c,v 1.7 2004/09/13 15:15:38 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/esp/esp_sbus.c,v 1.8 2004/11/10 14:11:10 trhodes Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -82,14 +82,14 @@
 #include <machine/ofw_machdep.h>
 #include <machine/resource.h>
 #include <sys/rman.h>
-#include <sparc64/sbus/sbusvar.h>
 
 #include <cam/cam.h>
 #include <cam/cam_ccb.h>
 #include <cam/scsi/scsi_all.h>
 
-#include <dev/esp/lsi64854reg.h>
-#include <dev/esp/lsi64854var.h>
+#include <sparc64/sbus/lsi64854reg.h>
+#include <sparc64/sbus/lsi64854var.h>
+#include <sparc64/sbus/sbusvar.h>
 
 #include <dev/esp/ncr53c9xreg.h>
 #include <dev/esp/ncr53c9xvar.h>

==== //depot/projects/uart/i386/i386/autoconf.c#3 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/autoconf.c,v 1.179 2004/10/01 15:57:23 nyan Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/autoconf.c,v 1.180 2004/11/10 12:28:06 nyan Exp $");
 
 /*
  * Setup the system to run on the current machine.
@@ -130,8 +130,8 @@
 
 	if (bootverbose) {
 #ifdef PC98
-		{
 		int i;
+
 		/*
 		 * Print out the BIOS's idea of the disk geometries.
 		 */
@@ -147,11 +147,7 @@
 			 * when the get-disk-geometry interrupt fails.  Skip
 			 * drives that have this geometry.
 			 */
-#ifdef PC98
 			if (bios_geom == 0x4f020f)
-#else
-			if (bios_geom == 0x4f010f)
-#endif
 				continue;
 
 			printf(" %x:%08lx ", i, bios_geom);
@@ -165,7 +161,6 @@
 			       max_sector, max_sector);
 		}
 		printf(" %d accounted for\n", bootinfo.bi_n_bios_used);
-		}
 #endif
 
 		printf("Device configuration finished.\n");

==== //depot/projects/uart/kern/vfs_mount.c#7 (text+ko) ====

@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.146 2004/11/10 07:36:09 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.147 2004/11/10 09:56:28 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -1290,7 +1290,6 @@
 {
         struct mount	*mp;
 	char		*vfsname, *path;
-	const char	*devname;
 	int		error;
 	char		patt[32];
 	int		s;

==== //depot/projects/uart/modules/Makefile#13 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/modules/Makefile,v 1.406 2004/11/08 19:05:22 phk Exp $
+# $FreeBSD: src/sys/modules/Makefile,v 1.407 2004/11/10 19:54:18 markm Exp $
 
 # pcic -- currently broken and being worked on out of tree.
 # oldcard -- specialized use for debugging only.
@@ -27,7 +27,6 @@
 	ath \
 	${_ath_hal} \
 	aue \
-	autofs \
 	${_auxio} \
 	${_awi} \
 	axe \

==== //depot/projects/uart/modules/esp/Makefile#2 (text+ko) ====

@@ -1,6 +1,6 @@
-# $FreeBSD: src/sys/modules/esp/Makefile,v 1.3 2004/08/12 17:41:30 marius Exp $
+# $FreeBSD: src/sys/modules/esp/Makefile,v 1.4 2004/11/10 14:09:51 trhodes Exp $
 
-.PATH: ${.CURDIR}/../../dev/esp
+.PATH: ${.CURDIR}/../../dev/esp ${.CURDIR}/../../sparc64/sbus
 
 KMOD=	esp
 

==== //depot/projects/uart/netgraph/ng_device.c#5 (text+ko) ====

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2002 Mark Santcroos <marks at ripe.net>
+ * Copyright (c) 2004 Gleb Smirnoff <glebius at FreeBSD.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,7 +27,7 @@
  * This node presents a /dev/ngd%d device that interfaces to an other
  * netgraph node.
  *
- * $FreeBSD: src/sys/netgraph/ng_device.c,v 1.14 2004/10/31 17:32:51 glebius Exp $
+ * $FreeBSD: src/sys/netgraph/ng_device.c,v 1.15 2004/11/10 11:18:05 glebius Exp $
  *
  */
 

==== //depot/projects/uart/pc98/conf/NOTES#6 (text+ko) ====

@@ -4,7 +4,7 @@
 # This file contains machine dependent kernel configuration notes.  For
 # machine independent notes, look in /sys/conf/NOTES.
 #
-# $FreeBSD: src/sys/pc98/conf/NOTES,v 1.43 2004/09/02 12:50:47 ru Exp $
+# $FreeBSD: src/sys/pc98/conf/NOTES,v 1.44 2004/11/10 12:24:30 nyan Exp $
 #
 
 #
@@ -88,9 +88,11 @@
 # I/O device(s).
 #
 # CPU_DISABLE_CMPXCHG disables the CMPXCHG instruction on > i386 IA32
-# machines.  VmWare seems to emulate this instruction poorly, causing
-# the guest OS to run very slowly.  Enabling this with an SMP kernel
-# will cause the kernel to be unusable.
+# machines.  VmWare 3.x seems to emulate this instruction poorly, causing
+# the guest OS to run very slowly.  This problem appears to be fixed in
+# VmWare 4.x, at least in version 4.5.2, so that enabling this option with
+# VmWare 4.x will result in locking operations to be 20-30 times slower.
+# Enabling this with an SMP kernel will cause the kernel to be unusable.
 #
 # CPU_DISABLE_SSE explicitly prevents I686_CPU from turning on SSE.
 #

==== //depot/projects/uart/pci/if_sf.c#5 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/pci/if_sf.c,v 1.73 2004/08/28 15:10:35 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/pci/if_sf.c,v 1.74 2004/11/10 23:04:39 brueffer Exp $");
 
 /*
  * Adaptec AIC-6915 "Starfire" PCI fast ethernet driver for FreeBSD.
@@ -164,6 +164,12 @@
 static int sf_miibus_readreg	(device_t, int, int);
 static int sf_miibus_writereg	(device_t, int, int, int);
 static void sf_miibus_statchg	(device_t);
+#ifdef DEVICE_POLLING
+static void sf_poll		(struct ifnet *ifp, enum poll_cmd cmd,
+				 int count);
+static void sf_poll_locked	(struct ifnet *ifp, enum poll_cmd cmd,
+				 int count);
+#endif /* DEVICE_POLLING */
 
 static u_int32_t csr_read_4	(struct sf_softc *, int);
 static void csr_write_4		(struct sf_softc *, int, u_int32_t);
@@ -534,6 +540,10 @@
 		mii = device_get_softc(sc->sf_miibus);
 		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
 		break;
+	case SIOCSIFCAP:
+		ifp->if_capenable &= ~IFCAP_POLLING;
+		ifp->if_capenable |= ifr->ifr_reqcap & IFCAP_POLLING;
+		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
 		break;
@@ -714,6 +724,10 @@
 	ifp->if_init = sf_init;
 	ifp->if_baudrate = 10000000;
 	ifp->if_snd.ifq_maxlen = SF_TX_DLIST_CNT - 1;
+#ifdef DEVICE_POLLING
+	ifp->if_capabilities |= IFCAP_POLLING;
+#endif /* DEVICE_POLLING */
+	ifp->if_capenable = ifp->if_capabilities;
 
 	/*
 	 * Call MI attach routine.
@@ -903,6 +917,14 @@
 	while (cmpconsidx != cmpprodidx) {
 		struct mbuf		*m0;
 
+#ifdef DEVICE_POLLING
+		if (ifp->if_flags & IFF_POLLING) {
+			if (sc->rxcycles <= 0)
+				break;
+			sc->rxcycles--;
+		}
+#endif /* DEVICE_POLLING */
+
 		cur_rx = &sc->sf_ldata->sf_rx_clist[cmpconsidx];
 		desc = &sc->sf_ldata->sf_rx_dlist_big[cur_rx->sf_endidx];
 		m = desc->sf_mbuf;
@@ -1010,6 +1032,63 @@
 	}
 }
 
+#ifdef DEVICE_POLLING
+static void
+sf_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
+{
+	struct sf_softc *sc = ifp->if_softc;
+
+	SF_LOCK(sc);
+	sf_poll_locked(ifp, cmd, count);
+	SF_UNLOCK(sc);
+}
+
+static void
+sf_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
+{
+	struct sf_softc *sc = ifp->if_softc;
+
+	SF_LOCK_ASSERT(sc);
+
+	if (!(ifp->if_capenable & IFCAP_POLLING)) {
+		ether_poll_deregister(ifp);
+		cmd = POLL_DEREGISTER;
+	}
+
+	if (cmd == POLL_DEREGISTER) {
+		/* Final call, enable interrupts. */
+		csr_write_4(sc, SF_IMR, SF_INTRS);
+		return;
+	}
+
+	sc->rxcycles = count;
+	sf_rxeof(sc);
+	sf_txeof(sc);
+	if (ifp->if_snd.ifq_head != NULL)
+		sf_start(ifp);
+
+	if (cmd == POLL_AND_CHECK_STATUS) {
+		u_int32_t status;
+
+		status = csr_read_4(sc, SF_ISR);
+		if (status)
+			csr_write_4(sc, SF_ISR, status);
+
+		if (status & SF_ISR_TX_LOFIFO)
+			sf_txthresh_adjust(sc);
+
+		if (status & SF_ISR_ABNORMALINTR) {
+			if (status & SF_ISR_STATSOFLOW) {
+				untimeout(sf_stats_update, sc,
+				    sc->sf_stat_ch);
+				sf_stats_update(sc);
+			} else
+				sf_init(sc);
+		}
+	}
+}
+#endif /* DEVICE_POLLING */
+
 static void
 sf_intr(arg)
 	void			*arg;
@@ -1023,6 +1102,19 @@
 
 	ifp = &sc->arpcom.ac_if;
 
+#ifdef DEVICE_POLLING
+	if (ifp->if_flags & IFF_POLLING)
+		goto done_locked;
+
+	if ((ifp->if_capenable & IFCAP_POLLING) &&
+	    ether_poll_register(sf_poll, ifp)) {
+		/* OK, disable interrupts. */
+		csr_write_4(sc, SF_IMR, 0x00000000);
+		sf_poll_locked(ifp, 0, 1);
+		goto done_locked;
+	}
+#endif /* DEVICE_POLLING */
+
 	if (!(csr_read_4(sc, SF_ISR_SHADOW) & SF_ISR_PCIINT_ASSERTED)) {
 		SF_UNLOCK(sc);
 		return;
@@ -1066,6 +1158,9 @@
 	if (ifp->if_snd.ifq_head != NULL)
 		sf_start(ifp);
 
+#ifdef DEVICE_POLLING
+done_locked:
+#endif /* DEVICE_POLLING */
 	SF_UNLOCK(sc);
 }
 
@@ -1163,6 +1258,13 @@
 	/* Enable autopadding of short TX frames. */
 	SF_SETBIT(sc, SF_MACCFG_1, SF_MACCFG1_AUTOPAD);
 
+#ifdef DEVICE_POLLING
+	/* Disable interrupts if we are polling. */
+	if (ifp->if_flags & IFF_POLLING)
+		csr_write_4(sc, SF_IMR, 0x00000000);
+	else
+#endif /* DEVICE_POLLING */
+
 	/* Enable interrupts. */
 	csr_write_4(sc, SF_IMR, SF_INTRS);
 	SF_SETBIT(sc, SF_PCI_DEVCFG, SF_PCIDEVCFG_INTR_ENB);
@@ -1339,6 +1441,10 @@
 
 	untimeout(sf_stats_update, sc, sc->sf_stat_ch);
 
+#ifdef DEVICE_POLLING
+	ether_poll_deregister(ifp);
+#endif /* DEVICE_POLLING */
+	
 	csr_write_4(sc, SF_GEN_ETH_CTL, 0);
 	csr_write_4(sc, SF_CQ_CONSIDX, 0);
 	csr_write_4(sc, SF_CQ_PRODIDX, 0);

==== //depot/projects/uart/pci/if_sfreg.h#3 (text+ko) ====

@@ -29,7 +29,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/pci/if_sfreg.h,v 1.10 2003/11/14 19:00:31 sam Exp $
+ * $FreeBSD: src/sys/pci/if_sfreg.h,v 1.11 2004/11/10 23:04:39 brueffer Exp $
  */
 
 /*
@@ -1046,6 +1046,9 @@
 	int			sf_if_flags;
 	struct callout_handle	sf_stat_ch;
 	struct mtx		sf_mtx;
+#ifdef DEVICE_POLLING
+	int			rxcycles;
+#endif
 };
 
 

==== //depot/projects/uart/sparc64/sbus/lsi64854.c#2 (text+ko) ====

@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/sparc64/sbus/lsi64854.c,v 1.1 2004/06/10 05:11:39 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/sparc64/sbus/lsi64854.c,v 1.2 2004/11/10 14:09:52 trhodes Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -80,8 +80,8 @@
 #include <cam/cam_ccb.h>
 #include <cam/scsi/scsi_all.h>
 
-#include <dev/esp/lsi64854reg.h>
-#include <dev/esp/lsi64854var.h>
+#include <sparc64/sbus/lsi64854reg.h>
+#include <sparc64/sbus/lsi64854var.h>
 
 #include <dev/esp/ncr53c9xreg.h>
 #include <dev/esp/ncr53c9xvar.h>


More information about the p4-projects mailing list