PERFORCE change 148286 for review
Marius Strobl
marius at FreeBSD.org
Sun Aug 24 21:07:50 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=148286
Change 148286 by marius at flak on 2008/08/24 21:07:02
IFC @148283
Affected files ...
.. //depot/projects/usiii/amd64/amd64/local_apic.c#6 integrate
.. //depot/projects/usiii/arm/include/endian.h#3 integrate
.. //depot/projects/usiii/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h#3 integrate
.. //depot/projects/usiii/conf/files#15 integrate
.. //depot/projects/usiii/conf/files.i386#9 integrate
.. //depot/projects/usiii/conf/files.sparc64#8 integrate
.. //depot/projects/usiii/conf/options#14 integrate
.. //depot/projects/usiii/dev/acpica/acpi.c#9 integrate
.. //depot/projects/usiii/dev/agp/agp.c#2 integrate
.. //depot/projects/usiii/dev/dc/if_dc.c#5 integrate
.. //depot/projects/usiii/dev/drm/ati_pcigart.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm-subprocess.pl#2 integrate
.. //depot/projects/usiii/dev/drm/drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/drmP.h#3 integrate
.. //depot/projects/usiii/dev/drm/drm_agpsupport.c#3 integrate
.. //depot/projects/usiii/dev/drm/drm_auth.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_bufs.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_context.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_dma.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_drawable.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_drv.c#3 integrate
.. //depot/projects/usiii/dev/drm/drm_fops.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_internal.h#1 branch
.. //depot/projects/usiii/dev/drm/drm_ioctl.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_lock.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_memory.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_pci.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_pciids.h#4 integrate
.. //depot/projects/usiii/dev/drm/drm_sarea.h#2 integrate
.. //depot/projects/usiii/dev/drm/drm_scatter.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_sysctl.c#2 integrate
.. //depot/projects/usiii/dev/drm/drm_vm.c#2 integrate
.. //depot/projects/usiii/dev/drm/i915_dma.c#3 integrate
.. //depot/projects/usiii/dev/drm/i915_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/i915_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/i915_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/i915_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/i915_mem.c#2 integrate
.. //depot/projects/usiii/dev/drm/i915_suspend.c#1 branch
.. //depot/projects/usiii/dev/drm/mach64_dma.c#2 integrate
.. //depot/projects/usiii/dev/drm/mach64_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/mach64_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/mach64_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/mach64_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/mach64_state.c#2 integrate
.. //depot/projects/usiii/dev/drm/mga_dma.c#2 integrate
.. //depot/projects/usiii/dev/drm/mga_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/mga_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/mga_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/mga_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/mga_state.c#2 integrate
.. //depot/projects/usiii/dev/drm/mga_warp.c#2 integrate
.. //depot/projects/usiii/dev/drm/r128_cce.c#2 integrate
.. //depot/projects/usiii/dev/drm/r128_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/r128_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/r128_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/r128_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/r128_state.c#2 integrate
.. //depot/projects/usiii/dev/drm/r300_cmdbuf.c#2 integrate
.. //depot/projects/usiii/dev/drm/r300_reg.h#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_cp.c#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_irq.c#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_mem.c#2 integrate
.. //depot/projects/usiii/dev/drm/radeon_microcode.h#1 branch
.. //depot/projects/usiii/dev/drm/radeon_state.c#2 integrate
.. //depot/projects/usiii/dev/drm/savage_bci.c#2 integrate
.. //depot/projects/usiii/dev/drm/savage_drm.h#2 integrate
.. //depot/projects/usiii/dev/drm/savage_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/savage_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/savage_state.c#2 integrate
.. //depot/projects/usiii/dev/drm/sis_drv.c#2 integrate
.. //depot/projects/usiii/dev/drm/sis_drv.h#2 integrate
.. //depot/projects/usiii/dev/drm/sis_mm.c#2 integrate
.. //depot/projects/usiii/dev/drm/tdfx_drv.c#2 integrate
.. //depot/projects/usiii/dev/ex/if_ex.c#3 integrate
.. //depot/projects/usiii/dev/ex/if_ex_isa.c#3 integrate
.. //depot/projects/usiii/dev/ex/if_exvar.h#3 integrate
.. //depot/projects/usiii/dev/gem/if_gem.c#9 integrate
.. //depot/projects/usiii/dev/iicbus/iiconf.c#3 integrate
.. //depot/projects/usiii/dev/lmc/if_lmc.c#3 integrate
.. //depot/projects/usiii/dev/mfi/mfi.c#6 integrate
.. //depot/projects/usiii/dev/mii/mii.c#2 integrate
.. //depot/projects/usiii/dev/mii/mlphy.c#2 integrate
.. //depot/projects/usiii/dev/mii/tlphy.c#2 integrate
.. //depot/projects/usiii/dev/pci/pci.c#7 integrate
.. //depot/projects/usiii/dev/sis/if_sis.c#2 integrate
.. //depot/projects/usiii/dev/sound/pci/csa.c#2 integrate
.. //depot/projects/usiii/dev/sound/usb/uaudio.c#2 integrate
.. //depot/projects/usiii/dev/syscons/syscons.c#7 integrate
.. //depot/projects/usiii/dev/syscons/sysmouse.c#4 integrate
.. //depot/projects/usiii/dev/usb/uvisor.c#2 integrate
.. //depot/projects/usiii/dev/xen/blkfront/blkfront.c#3 integrate
.. //depot/projects/usiii/i386/conf/NOTES#8 integrate
.. //depot/projects/usiii/i386/cpufreq/est.c#8 integrate
.. //depot/projects/usiii/i386/i386/local_apic.c#5 integrate
.. //depot/projects/usiii/i386/isa/dpms.c#1 branch
.. //depot/projects/usiii/isa/isa_common.c#2 integrate
.. //depot/projects/usiii/isa/isavar.h#2 integrate
.. //depot/projects/usiii/kern/kern_exec.c#9 integrate
.. //depot/projects/usiii/kern/kern_intr.c#6 integrate
.. //depot/projects/usiii/kern/tty.c#7 integrate
.. //depot/projects/usiii/kern/tty_outq.c#2 integrate
.. //depot/projects/usiii/kern/tty_pty.c#7 integrate
.. //depot/projects/usiii/kern/vfs_cache.c#9 integrate
.. //depot/projects/usiii/kern/vfs_mount.c#11 integrate
.. //depot/projects/usiii/kern/vfs_subr.c#12 integrate
.. //depot/projects/usiii/mips/mips/mp_machdep.c#2 integrate
.. //depot/projects/usiii/modules/Makefile#13 integrate
.. //depot/projects/usiii/modules/dpms/Makefile#1 branch
.. //depot/projects/usiii/modules/drm/i915/Makefile#2 integrate
.. //depot/projects/usiii/net/if.c#9 integrate
.. //depot/projects/usiii/net/if_spppsubr.c#3 integrate
.. //depot/projects/usiii/netinet/sctp_output.c#8 integrate
.. //depot/projects/usiii/netinet/tcp_lro.c#2 integrate
.. //depot/projects/usiii/netinet/tcp_syncache.c#8 integrate
.. //depot/projects/usiii/security/audit/audit_bsm_klib.c#8 integrate
.. //depot/projects/usiii/security/audit/audit_syscalls.c#7 integrate
.. //depot/projects/usiii/security/mac/mac_framework.c#2 integrate
.. //depot/projects/usiii/security/mac/mac_framework.h#7 integrate
.. //depot/projects/usiii/security/mac/mac_inet.c#5 integrate
.. //depot/projects/usiii/security/mac/mac_internal.h#4 integrate
.. //depot/projects/usiii/security/mac/mac_net.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_pipe.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_policy.h#7 integrate
.. //depot/projects/usiii/security/mac/mac_posix_sem.c#5 integrate
.. //depot/projects/usiii/security/mac/mac_posix_shm.c#2 integrate
.. //depot/projects/usiii/security/mac/mac_process.c#4 integrate
.. //depot/projects/usiii/security/mac/mac_socket.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_syscalls.c#5 integrate
.. //depot/projects/usiii/security/mac/mac_sysv_msg.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_sysv_sem.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_sysv_shm.c#3 integrate
.. //depot/projects/usiii/security/mac/mac_vfs.c#4 integrate
.. //depot/projects/usiii/security/mac_biba/mac_biba.c#5 integrate
.. //depot/projects/usiii/security/mac_bsdextended/mac_bsdextended.c#5 integrate
.. //depot/projects/usiii/security/mac_ifoff/mac_ifoff.c#3 integrate
.. //depot/projects/usiii/security/mac_lomac/mac_lomac.c#5 integrate
.. //depot/projects/usiii/security/mac_mls/mac_mls.c#6 integrate
.. //depot/projects/usiii/security/mac_none/mac_none.c#3 integrate
.. //depot/projects/usiii/security/mac_partition/mac_partition.c#4 integrate
.. //depot/projects/usiii/security/mac_portacl/mac_portacl.c#4 integrate
.. //depot/projects/usiii/security/mac_seeotheruids/mac_seeotheruids.c#3 integrate
.. //depot/projects/usiii/security/mac_stub/mac_stub.c#6 integrate
.. //depot/projects/usiii/security/mac_test/mac_test.c#6 integrate
.. //depot/projects/usiii/sparc64/central/central.c#2 integrate
.. //depot/projects/usiii/sparc64/conf/GENERIC#12 integrate
.. //depot/projects/usiii/sparc64/conf/NOTES#3 integrate
.. //depot/projects/usiii/sparc64/ebus/ebus.c#2 integrate
.. //depot/projects/usiii/sparc64/fhc/fhc.c#5 integrate
.. //depot/projects/usiii/sparc64/include/cpufunc.h#4 integrate
.. //depot/projects/usiii/sparc64/pci/ofw_pcibus.c#10 integrate
.. //depot/projects/usiii/sparc64/pci/psycho.c#13 integrate
.. //depot/projects/usiii/sparc64/sbus/dma_sbus.c#2 integrate
.. //depot/projects/usiii/sparc64/sbus/sbus.c#6 integrate
.. //depot/projects/usiii/sparc64/sparc64/trap.c#6 integrate
.. //depot/projects/usiii/sys/copyright.h#4 integrate
.. //depot/projects/usiii/ufs/ufs/ufs_vnops.c#5 integrate
.. //depot/projects/usiii/vm/uma_core.c#4 integrate
Differences ...
==== //depot/projects/usiii/amd64/amd64/local_apic.c#6 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.45 2008/05/24 06:32:26 jb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.46 2008/08/23 12:35:43 jhb Exp $");
#include "opt_hwpmc_hooks.h"
#include "opt_kdtrace.h"
@@ -77,10 +77,6 @@
CTASSERT(APIC_LOCAL_INTS == 240);
CTASSERT(IPI_STOP < APIC_SPURIOUS_INT);
-#define LAPIC_TIMER_HZ_DIVIDER 2
-#define LAPIC_TIMER_STATHZ_DIVIDER 15
-#define LAPIC_TIMER_PROFHZ_DIVIDER 3
-
/* Magic IRQ values for the timer and syscalls. */
#define IRQ_TIMER (NUM_IO_INTS + 1)
#define IRQ_SYSCALL (NUM_IO_INTS + 2)
@@ -389,13 +385,24 @@
lapic_timer_divisor, value);
/*
- * We will drive the timer at a small multiple of hz and drive
- * both of the other timers with similarly small but relatively
- * prime divisors.
+ * We want to run stathz in the neighborhood of 128hz. We would
+ * like profhz to run as often as possible, so we let it run on
+ * each clock tick. We try to honor the requested 'hz' value as
+ * much as possible.
+ *
+ * If 'hz' is above 1500, then we just let the lapic timer
+ * (and profhz) run at hz. If 'hz' is below 1500 but above
+ * 750, then we let the lapic timer run at 2 * 'hz'. If 'hz'
+ * is below 750 then we let the lapic timer run at 4 * 'hz'.
*/
- lapic_timer_hz = hz * LAPIC_TIMER_HZ_DIVIDER;
- stathz = lapic_timer_hz / LAPIC_TIMER_STATHZ_DIVIDER;
- profhz = lapic_timer_hz / LAPIC_TIMER_PROFHZ_DIVIDER;
+ if (hz >= 1500)
+ lapic_timer_hz = hz;
+ else if (hz >= 750)
+ lapic_timer_hz = hz * 2;
+ else
+ lapic_timer_hz = hz * 4;
+ stathz = lapic_timer_hz / (lapic_timer_hz / 128);
+ profhz = lapic_timer_hz;
lapic_timer_period = value / lapic_timer_hz;
/*
==== //depot/projects/usiii/arm/include/endian.h#3 (text+ko) ====
@@ -27,7 +27,7 @@
*
* @(#)endian.h 8.1 (Berkeley) 6/10/93
* $NetBSD: endian.h,v 1.7 1999/08/21 05:53:51 simonb Exp $
- * $FreeBSD: src/sys/arm/include/endian.h,v 1.11 2007/09/09 11:58:38 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/endian.h,v 1.12 2008/08/23 23:35:08 imp Exp $
*/
#ifndef _ENDIAN_H_
@@ -94,7 +94,7 @@
: "+r" (v), "=r" (t1));
return (v);
- }
+}
static __inline __uint16_t
__bswap16_var(__uint16_t v)
==== //depot/projects/usiii/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h#3 (text+ko) ====
@@ -382,6 +382,49 @@
#define _DONT_USE_1275_GENERIC_NAMES
#define _HAVE_CPUID_INSN
+#elif defined(__mips__)
+
+/*
+ * Define the appropriate "processor characteristics"
+ */
+#define _STACK_GROWS_DOWNWARD
+#define _LONG_LONG_LTOH
+#define _BIT_FIELDS_LTOH
+#define _IEEE_754
+#define _CHAR_IS_SIGNED
+#define _BOOL_ALIGNMENT 1
+#define _CHAR_ALIGNMENT 1
+#define _SHORT_ALIGNMENT 2
+#define _INT_ALIGNMENT 4
+#define _FLOAT_ALIGNMENT 4
+#define _FLOAT_COMPLEX_ALIGNMENT 4
+#define _LONG_ALIGNMENT 4
+#define _LONG_LONG_ALIGNMENT 4
+#define _DOUBLE_ALIGNMENT 4
+#define _DOUBLE_COMPLEX_ALIGNMENT 4
+#define _LONG_DOUBLE_ALIGNMENT 4
+#define _LONG_DOUBLE_COMPLEX_ALIGNMENT 4
+#define _POINTER_ALIGNMENT 4
+#define _MAX_ALIGNMENT 4
+#define _ALIGNMENT_REQUIRED 0
+
+#define _LONG_LONG_ALIGNMENT_32 _LONG_LONG_ALIGNMENT
+
+/*
+ * Define the appropriate "implementation choices".
+ */
+#define _ILP32
+#if !defined(_I32LPx) && defined(_KERNEL)
+#define _I32LPx
+#endif
+#define _SUNOS_VTOC_16
+#define _DMA_USES_PHYSADDR
+#define _FIRMWARE_NEEDS_FDISK
+#define _PSM_MODULES
+#define _RTC_CONFIG
+#define _DONT_USE_1275_GENERIC_NAMES
+#define _HAVE_CPUID_INSN
+
#elif defined(__powerpc__)
/*
==== //depot/projects/usiii/conf/files#15 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1331 2008/08/20 08:31:58 ed Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1332 2008/08/23 20:59:12 rnoland Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -572,6 +572,7 @@
dev/drm/i915_drv.c optional i915drm
dev/drm/i915_irq.c optional i915drm
dev/drm/i915_mem.c optional i915drm
+dev/drm/i915_suspend.c optional i915drm
dev/drm/mach64_dma.c optional mach64drm
dev/drm/mach64_drv.c optional mach64drm
dev/drm/mach64_irq.c optional mach64drm
==== //depot/projects/usiii/conf/files.i386#9 (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.i386,v 1.604 2008/08/17 23:44:09 kmacy Exp $
+# $FreeBSD: src/sys/conf/files.i386,v 1.605 2008/08/23 21:00:40 jhb Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -329,6 +329,7 @@
#i386/isa/atpic_vector.s standard
i386/isa/clock.c optional native
i386/xen/clock.c optional xen
+i386/isa/dpms.c optional dpms
i386/isa/elcr.c standard
i386/isa/elink.c optional ep | ie
i386/isa/isa.c optional isa
==== //depot/projects/usiii/conf/files.sparc64#8 (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.95 2008/04/26 11:01:37 marius Exp $
+# $FreeBSD: src/sys/conf/files.sparc64,v 1.96 2008/08/23 14:28:44 marius Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -74,7 +74,7 @@
libkern/flsl.c standard
sparc64/central/central.c optional central
sparc64/ebus/ebus.c optional ebus
-sparc64/fhc/clkbrd.c optional clkbrd fhc
+sparc64/fhc/clkbrd.c optional fhc
sparc64/fhc/fhc.c optional fhc
sparc64/isa/isa.c optional isa
sparc64/isa/isa_dma.c optional isa
==== //depot/projects/usiii/conf/options#14 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.636 2008/08/20 08:31:58 ed Exp $
+# $FreeBSD: src/sys/conf/options,v 1.637 2008/08/23 15:26:36 rwatson Exp $
#
# On the handling of kernel options
#
@@ -114,7 +114,6 @@
KTRACE_REQUEST_POOL opt_ktrace.h
LIBICONV
MAC
-MAC_ALWAYS_LABEL_MBUF opt_mac.h
MAC_BIBA opt_dontuse.h
MAC_BSDEXTENDED opt_dontuse.h
MAC_IFOFF opt_dontuse.h
==== //depot/projects/usiii/dev/acpica/acpi.c#9 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.251 2008/08/22 02:14:23 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.252 2008/08/23 16:38:20 imp Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -665,7 +665,9 @@
* device has an _SxD method for the next sleep state, use that power
* state instead.
*/
- device_get_children(dev, &devlist, &numdevs);
+ error = device_get_children(dev, &devlist, &numdevs);
+ if (error)
+ return (error);
for (i = 0; i < numdevs; i++) {
/* If the device is not attached, we've powered it down elsewhere. */
child = devlist[i];
@@ -692,7 +694,7 @@
acpi_resume(device_t dev)
{
ACPI_HANDLE handle;
- int i, numdevs;
+ int i, numdevs, error;
device_t child, *devlist;
GIANT_REQUIRED;
@@ -701,7 +703,9 @@
* Put all devices in D0 before resuming them. Call _S0D on each one
* since some systems expect this.
*/
- device_get_children(dev, &devlist, &numdevs);
+ error = device_get_children(dev, &devlist, &numdevs);
+ if (error)
+ return (error);
for (i = 0; i < numdevs; i++) {
child = devlist[i];
handle = acpi_get_handle(child);
@@ -801,7 +805,8 @@
int i, numdevs;
DEVICE_IDENTIFY(driver, dev);
- device_get_children(dev, &devlist, &numdevs);
+ if (device_get_children(dev, &devlist, &numdevs))
+ return;
for (i = 0; i < numdevs; i++) {
child = devlist[i];
if (device_get_state(child) == DS_NOTPRESENT) {
==== //depot/projects/usiii/dev/agp/agp.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/agp/agp.c,v 1.58 2007/11/12 21:51:36 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/agp/agp.c,v 1.59 2008/08/23 15:57:43 imp Exp $");
#include "opt_bus.h"
@@ -118,7 +118,8 @@
bus = devclass_get_device(pci, busnum);
if (!bus)
continue;
- device_get_children(bus, &kids, &numkids);
+ if (device_get_children(bus, &kids, &numkids) != 0)
+ continue;
for (i = 0; i < numkids; i++) {
dev = kids[i];
if (pci_get_class(dev) == PCIC_DISPLAY
==== //depot/projects/usiii/dev/dc/if_dc.c#5 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/dc/if_dc.c,v 1.195 2008/06/08 02:52:26 yongari Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/dc/if_dc.c,v 1.196 2008/08/23 20:57:48 marius Exp $");
/*
* DEC "tulip" clone ethernet driver. Supports the DEC/Intel 21143
@@ -3138,7 +3138,7 @@
bus_dma_segment_t segs[DC_MAXFRAGS];
struct dc_desc *f;
struct mbuf *m;
- int chainlen, cur, error, first, frag, i, idx, nseg;
+ int cur, defragged, error, first, frag, i, idx, nseg;
/*
* If there's no way we can send any packets, return now.
@@ -3146,22 +3146,30 @@
if (DC_TX_LIST_CNT - sc->dc_cdata.dc_tx_cnt <= DC_TX_LIST_RSVD)
return (ENOBUFS);
- /*
- * Count the number of frags in this chain to see if
- * we need to m_defrag. Since the descriptor list is shared
- * by all packets, we'll m_defrag long chains so that they
- * do not use up the entire list, even if they would fit.
- */
- chainlen = 0;
- for (m = *m_head; m != NULL; m = m->m_next)
- chainlen++;
-
m = NULL;
- if ((sc->dc_flags & DC_TX_COALESCE && ((*m_head)->m_next != NULL ||
- sc->dc_flags & DC_TX_ALIGN)) || (chainlen > DC_TX_LIST_CNT / 4) ||
- (DC_TX_LIST_CNT - (chainlen + sc->dc_cdata.dc_tx_cnt) <=
- DC_TX_LIST_RSVD)) {
+ defragged = 0;
+ if (sc->dc_flags & DC_TX_COALESCE &&
+ ((*m_head)->m_next != NULL || sc->dc_flags & DC_TX_ALIGN)) {
m = m_defrag(*m_head, M_DONTWAIT);
+ defragged = 1;
+ } else {
+ /*
+ * Count the number of frags in this chain to see if we
+ * need to m_collapse. Since the descriptor list is shared
+ * by all packets, we'll m_collapse long chains so that they
+ * do not use up the entire list, even if they would fit.
+ */
+ i = 0;
+ for (m = *m_head; m != NULL; m = m->m_next)
+ i++;
+ if (i > DC_TX_LIST_CNT / 4 ||
+ DC_TX_LIST_CNT - i + sc->dc_cdata.dc_tx_cnt <=
+ DC_TX_LIST_RSVD) {
+ m = m_collapse(*m_head, M_DONTWAIT, DC_MAXFRAGS);
+ defragged = 1;
+ }
+ }
+ if (defragged != 0) {
if (m == NULL) {
m_freem(*m_head);
*m_head = NULL;
@@ -3169,15 +3177,16 @@
}
*m_head = m;
}
+
idx = sc->dc_cdata.dc_tx_prod;
error = bus_dmamap_load_mbuf_sg(sc->dc_mtag,
sc->dc_cdata.dc_tx_map[idx], *m_head, segs, &nseg, 0);
if (error == EFBIG) {
- m = m_defrag(*m_head, M_DONTWAIT);
- if (m == NULL) {
+ if (defragged != 0 || (m = m_collapse(*m_head, M_DONTWAIT,
+ DC_MAXFRAGS)) == NULL) {
m_freem(*m_head);
*m_head = NULL;
- return (ENOBUFS);
+ return (defragged != 0 ? error : ENOBUFS);
}
*m_head = m;
error = bus_dmamap_load_mbuf_sg(sc->dc_mtag,
==== //depot/projects/usiii/dev/drm/ati_pcigart.c#2 (text+ko) ====
@@ -1,6 +1,3 @@
-/* ati_pcigart.h -- ATI PCI GART support -*- linux-c -*-
- * Created: Wed Dec 13 21:52:19 2000 by gareth at valinux.com
- */
/*-
* Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
* All Rights Reserved.
@@ -30,74 +27,135 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/drm/ati_pcigart.c,v 1.3 2005/11/28 23:13:52 anholt Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/drm/ati_pcigart.c,v 1.4 2008/08/23 20:59:12 rnoland Exp $");
+
+/** @file ati_pcigart.c
+ * Implementation of ATI's PCIGART, which provides an aperture in card virtual
+ * address space with addresses remapped to system memory.
+ */
#include "dev/drm/drmP.h"
#define ATI_PCIGART_PAGE_SIZE 4096 /* PCI GART page size */
-#define ATI_MAX_PCIGART_PAGES 8192 /* 32 MB aperture, 4K pages */
-#define ATI_PCIGART_TABLE_SIZE 32768
+#define ATI_PCIGART_PAGE_MASK (~(ATI_PCIGART_PAGE_SIZE-1))
+
+#define ATI_PCIE_WRITE 0x4
+#define ATI_PCIE_READ 0x8
+
+static int drm_ati_alloc_pcigart_table(struct drm_device *dev,
+ struct drm_ati_pcigart_info *gart_info)
+{
+ dev->sg->dmah = drm_pci_alloc(dev, gart_info->table_size,
+ PAGE_SIZE,
+ gart_info->table_mask);
+ if (dev->sg->dmah == NULL)
+ return ENOMEM;
+
+ return 0;
+}
+
+static void drm_ati_free_pcigart_table(struct drm_device *dev,
+ struct drm_ati_pcigart_info *gart_info)
+{
+ drm_pci_free(dev, dev->sg->dmah);
+ dev->sg->dmah = NULL;
+}
+
+int drm_ati_pcigart_cleanup(struct drm_device *dev, struct drm_ati_pcigart_info *gart_info)
+{
+ /* we need to support large memory configurations */
+ if (dev->sg == NULL) {
+ DRM_ERROR("no scatter/gather memory!\n");
+ return 0;
+ }
+
+ if (gart_info->bus_addr) {
+ if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) {
+ gart_info->bus_addr = 0;
+ if (dev->sg->dmah)
+ drm_ati_free_pcigart_table(dev, gart_info);
+ }
+ }
+
+ return 1;
+}
-int drm_ati_pcigart_init(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
+int drm_ati_pcigart_init(struct drm_device *dev,
+ struct drm_ati_pcigart_info *gart_info)
{
+
+ void *address = NULL;
unsigned long pages;
- u32 *pci_gart = NULL, page_base;
- int i, j;
+ u32 *pci_gart, page_base;
+ dma_addr_t bus_address = 0;
+ int i, j, ret = 0;
+ int max_pages;
+ dma_addr_t entry_addr;
+ /* we need to support large memory configurations */
if (dev->sg == NULL) {
- DRM_ERROR( "no scatter/gather memory!\n" );
- return 0;
+ DRM_ERROR("no scatter/gather memory!\n");
+ goto done;
}
if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) {
- /* GART table in system memory */
- dev->sg->dmah = drm_pci_alloc(dev, ATI_PCIGART_TABLE_SIZE, 0,
- 0xfffffffful);
- if (dev->sg->dmah == NULL) {
- DRM_ERROR("cannot allocate PCI GART table!\n");
- return 0;
+ DRM_DEBUG("PCI: no table in VRAM: using normal RAM\n");
+
+ ret = drm_ati_alloc_pcigart_table(dev, gart_info);
+ if (ret) {
+ DRM_ERROR("cannot allocate PCI GART page!\n");
+ goto done;
}
-
- gart_info->addr = (void *)dev->sg->dmah->vaddr;
- gart_info->bus_addr = dev->sg->dmah->busaddr;
- pci_gart = (u32 *)dev->sg->dmah->vaddr;
+
+ address = (void *)dev->sg->dmah->vaddr;
+ bus_address = dev->sg->dmah->busaddr;
} else {
- /* GART table in framebuffer memory */
- pci_gart = gart_info->addr;
+ address = gart_info->addr;
+ bus_address = gart_info->bus_addr;
+ DRM_DEBUG("PCI: Gart Table: VRAM %08X mapped at %08lX\n",
+ (unsigned int)bus_address, (unsigned long)address);
}
-
- pages = DRM_MIN(dev->sg->pages, ATI_MAX_PCIGART_PAGES);
+
+ pci_gart = (u32 *) address;
+
+ max_pages = (gart_info->table_size / sizeof(u32));
+ pages = (dev->sg->pages <= max_pages)
+ ? dev->sg->pages : max_pages;
- bzero(pci_gart, ATI_PCIGART_TABLE_SIZE);
+ memset(pci_gart, 0, max_pages * sizeof(u32));
KASSERT(PAGE_SIZE >= ATI_PCIGART_PAGE_SIZE, ("page size too small"));
- for ( i = 0 ; i < pages ; i++ ) {
- page_base = (u32) dev->sg->busaddr[i];
-
+ for (i = 0; i < pages; i++) {
+ entry_addr = dev->sg->busaddr[i];
for (j = 0; j < (PAGE_SIZE / ATI_PCIGART_PAGE_SIZE); j++) {
- if (gart_info->is_pcie)
- *pci_gart = (cpu_to_le32(page_base) >> 8) | 0xc;
- else
- *pci_gart = cpu_to_le32(page_base);
+ page_base = (u32) entry_addr & ATI_PCIGART_PAGE_MASK;
+ switch(gart_info->gart_reg_if) {
+ case DRM_ATI_GART_IGP:
+ page_base |= (upper_32_bits(entry_addr) & 0xff) << 4;
+ page_base |= 0xc;
+ break;
+ case DRM_ATI_GART_PCIE:
+ page_base >>= 8;
+ page_base |= (upper_32_bits(entry_addr) & 0xff) << 24;
+ page_base |= ATI_PCIE_READ | ATI_PCIE_WRITE;
+ break;
+ default:
+ case DRM_ATI_GART_PCI:
+ break;
+ }
+ *pci_gart = cpu_to_le32(page_base);
pci_gart++;
- page_base += ATI_PCIGART_PAGE_SIZE;
+ entry_addr += ATI_PCIGART_PAGE_SIZE;
}
}
DRM_MEMORYBARRIER();
- return 1;
-}
+ ret = 1;
-int drm_ati_pcigart_cleanup(drm_device_t *dev, drm_ati_pcigart_info *gart_info)
-{
- if (dev->sg == NULL) {
- DRM_ERROR( "no scatter/gather memory!\n" );
- return 0;
- }
-
- drm_pci_free(dev, dev->sg->dmah);
-
- return 1;
+ done:
+ gart_info->addr = address;
+ gart_info->bus_addr = bus_address;
+ return ret;
}
==== //depot/projects/usiii/dev/drm/drm-subprocess.pl#2 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/dev/drm/drm-subprocess.pl,v 1.1 2005/11/28 23:13:52 anholt Exp $
+# $FreeBSD: src/sys/dev/drm/drm-subprocess.pl,v 1.2 2008/08/23 20:59:12 rnoland Exp $
#
# Props to Daniel Stone for starting this script for me. I hate perl.
@@ -23,7 +23,7 @@
print $lastline;
}
} elsif ($foundopening && !$foundclosing && /\*\//) {
- # print the $FreeBSD: src/sys/dev/drm/drm-subprocess.pl,v 1.1 2005/11/28 23:13:52 anholt Exp $ bits after the end of the license block
+ # print the $FreeBSD: src/sys/dev/drm/drm-subprocess.pl,v 1.2 2008/08/23 20:59:12 rnoland Exp $ bits after the end of the license block
$foundclosing = 1;
print;
print "\n";
@@ -37,6 +37,7 @@
s/#include "(.*)_drm.h/#include "dev\/drm\/\1_drm.h/;
s/#include "mga_ucode.h/#include "dev\/drm\/mga_ucode.h/;
s/#include "r300_reg.h/#include "dev\/drm\/r300_reg.h/;
+ s/#include "radeon_microcode.h/#include "dev\/drm\/radeon_microcode.h/;
s/#include "sis_ds.h/#include "dev\/drm\/sis_ds.h/;
s/#include "drm/#include "dev\/drm\/drm/;
print;
@@ -47,4 +48,4 @@
# if we never found the copyright header, then we're still a line behind.
if (!$foundopening) {
print $lastline;
-}+}
==== //depot/projects/usiii/dev/drm/drm.h#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/drm/drm.h,v 1.12 2006/05/17 06:36:28 anholt Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/drm/drm.h,v 1.13 2008/08/23 20:59:12 rnoland Exp $");
/**
* \mainpage
@@ -64,6 +64,9 @@
#ifndef __user
#define __user
#endif
+#ifndef __iomem
+#define __iomem
+#endif
#ifdef __GNUC__
# define DEPRECATED __attribute__ ((deprecated))
@@ -72,9 +75,6 @@
#endif
#if defined(__linux__)
-#if defined(__KERNEL__)
-#include <linux/config.h>
-#endif
#include <asm/ioctl.h> /* For _IO* macros */
#define DRM_IOCTL_NR(n) _IOC_NR(n)
#define DRM_IOC_VOID _IOC_NONE
@@ -83,14 +83,7 @@
#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE
#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-#if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && defined(IN_MODULE)
-/* Prevent name collision when including sys/ioccom.h */
-#undef ioctl
-#include <sys/ioccom.h>
-#define ioctl(a,b,c) xf86ioctl(a,b,c)
-#else
#include <sys/ioccom.h>
-#endif /* __FreeBSD__ && xf86ioctl */
#define DRM_IOCTL_NR(n) ((n) & 0xff)
#define DRM_IOC_VOID IOC_VOID
#define DRM_IOC_READ IOC_OUT
@@ -99,24 +92,6 @@
#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
#endif
-#define XFREE86_VERSION(major,minor,patch,snap) \
- ((major << 16) | (minor << 8) | patch)
-
-#ifndef CONFIG_XFREE86_VERSION
-#define CONFIG_XFREE86_VERSION XFREE86_VERSION(4,1,0,0)
-#endif
-
-#if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
-#define DRM_PROC_DEVICES "/proc/devices"
-#define DRM_PROC_MISC "/proc/misc"
-#define DRM_PROC_DRM "/proc/drm"
-#define DRM_DEV_DRM "/dev/drm"
-#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
-#define DRM_DEV_UID 0
-#define DRM_DEV_GID 0
-#endif
-
-#if CONFIG_XFREE86_VERSION >= XFREE86_VERSION(4,1,0,0)
#ifdef __OpenBSD__
#define DRM_MAJOR 81
#endif
@@ -124,7 +99,7 @@
#define DRM_MAJOR 226
#endif
#define DRM_MAX_MINOR 15
-#endif
+
#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */
#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */
#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */
@@ -139,6 +114,7 @@
#if defined(__linux__)
typedef unsigned int drm_handle_t;
#else
+#include <sys/types.h>
typedef unsigned long drm_handle_t; /**< To mapped regions */
#endif
typedef unsigned int drm_context_t; /**< GLXContext handle */
@@ -154,23 +130,23 @@
* \note KW: Actually it's illegal to change either for
* backwards-compatibility reasons.
*/
-typedef struct drm_clip_rect {
+struct drm_clip_rect {
unsigned short x1;
unsigned short y1;
unsigned short x2;
unsigned short y2;
-} drm_clip_rect_t;
+};
/**
* Texture region,
*/
-typedef struct drm_tex_region {
+struct drm_tex_region {
unsigned char next;
unsigned char prev;
unsigned char in_use;
unsigned char padding;
unsigned int age;
-} drm_tex_region_t;
+};
/**
* Hardware lock.
@@ -179,10 +155,10 @@
* processor bus contention on a multiprocessor system, there should not be any
* other data stored in the same cache line.
*/
-typedef struct drm_hw_lock {
+struct drm_hw_lock {
__volatile__ unsigned int lock; /**< lock variable */
char padding[60]; /**< Pad to cache line */
-} drm_hw_lock_t;
+};
/* This is beyond ugly, and only works on GCC. However, it allows me to use
* drm.h in places (i.e., in the X-server) where I can't use size_t. The real
@@ -205,7 +181,7 @@
*
* \sa drmGetVersion().
*/
-typedef struct drm_version {
+struct drm_version {
int version_major; /**< Major version */
int version_minor; /**< Minor version */
int version_patchlevel; /**< Patch level */
@@ -215,35 +191,35 @@
char __user *date; /**< User-space buffer to hold date */
DRM_SIZE_T desc_len; /**< Length of desc buffer */
char __user *desc; /**< User-space buffer to hold desc */
-} drm_version_t;
+};
/**
* DRM_IOCTL_GET_UNIQUE ioctl argument type.
*
* \sa drmGetBusid() and drmSetBusId().
*/
-typedef struct drm_unique {
+struct drm_unique {
DRM_SIZE_T unique_len; /**< Length of unique */
char __user *unique; /**< Unique name for driver instantiation */
-} drm_unique_t;
+};
#undef DRM_SIZE_T
-typedef struct drm_list {
+struct drm_list {
int count; /**< Length of user-space structures */
- drm_version_t __user *version;
-} drm_list_t;
+ struct drm_version __user *version;
+};
-typedef struct drm_block {
+struct drm_block {
int unused;
-} drm_block_t;
+};
/**
* DRM_IOCTL_CONTROL ioctl argument type.
*
* \sa drmCtlInstHandler() and drmCtlUninstHandler().
*/
-typedef struct drm_control {
+struct drm_control {
enum {
DRM_ADD_COMMAND,
DRM_RM_COMMAND,
@@ -251,37 +227,39 @@
DRM_UNINST_HANDLER
} func;
int irq;
-} drm_control_t;
+};
/**
* Type of memory to map.
*/
-typedef enum drm_map_type {
+enum drm_map_type {
_DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */
_DRM_REGISTERS = 1, /**< no caching, no core dump */
_DRM_SHM = 2, /**< shared, cached */
_DRM_AGP = 3, /**< AGP/GART */
_DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */
- _DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */
-} drm_map_type_t;
+ _DRM_CONSISTENT = 5, /**< Consistent memory for PCI DMA */
+ _DRM_TTM = 6
+};
/**
* Memory mapping flags.
*/
-typedef enum drm_map_flags {
+enum drm_map_flags {
_DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */
_DRM_READ_ONLY = 0x02,
_DRM_LOCKED = 0x04, /**< shared, cached, locked */
_DRM_KERNEL = 0x08, /**< kernel requires access */
_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
_DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */
- _DRM_REMOVABLE = 0x40 /**< Removable mapping */
-} drm_map_flags_t;
+ _DRM_REMOVABLE = 0x40, /**< Removable mapping */
+ _DRM_DRIVER = 0x80 /**< Managed by driver */
+};
-typedef struct drm_ctx_priv_map {
+struct drm_ctx_priv_map {
unsigned int ctx_id; /**< Context requesting private mapping */
void *handle; /**< Handle of map */
-} drm_ctx_priv_map_t;
+};
/**
* DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
@@ -289,30 +267,30 @@
*
* \sa drmAddMap().
*/
-typedef struct drm_map {
+struct drm_map {
unsigned long offset; /**< Requested physical address (0 for SAREA)*/
unsigned long size; /**< Requested physical size (bytes) */
- drm_map_type_t type; /**< Type of memory to map */
- drm_map_flags_t flags; /**< Flags */
+ enum drm_map_type type; /**< Type of memory to map */
+ enum drm_map_flags flags; /**< Flags */
void *handle; /**< User-space: "Handle" to pass to mmap() */
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list