PERFORCE change 106702 for review

Matt Jacob mjacob at FreeBSD.org
Mon Sep 25 20:42:40 PDT 2006


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

Change 106702 by mjacob at newisp on 2006/09/26 03:42:06

	IFC

Affected files ...

.. //depot/projects/newisp/amd64/conf/NOTES#2 integrate
.. //depot/projects/newisp/amd64/ia32/ia32_sigtramp.S#2 integrate
.. //depot/projects/newisp/bsm/audit_kevents.h#3 integrate
.. //depot/projects/newisp/compat/freebsd32/freebsd32_proto.h#6 integrate
.. //depot/projects/newisp/compat/freebsd32/freebsd32_syscall.h#6 integrate
.. //depot/projects/newisp/compat/freebsd32/freebsd32_syscalls.c#6 integrate
.. //depot/projects/newisp/compat/freebsd32/freebsd32_sysent.c#6 integrate
.. //depot/projects/newisp/compat/freebsd32/syscalls.master#6 integrate
.. //depot/projects/newisp/compat/linux/linux_file.c#3 integrate
.. //depot/projects/newisp/compat/linux/linux_socket.c#2 integrate
.. //depot/projects/newisp/conf/NOTES#4 integrate
.. //depot/projects/newisp/conf/files#3 integrate
.. //depot/projects/newisp/conf/files.amd64#3 integrate
.. //depot/projects/newisp/conf/files.i386#2 integrate
.. //depot/projects/newisp/dev/acpica/Osd/OsdHardware.c#2 integrate
.. //depot/projects/newisp/dev/ata/ata-chipset.c#6 integrate
.. //depot/projects/newisp/dev/bge/if_bge.c#6 integrate
.. //depot/projects/newisp/dev/exca/exca.c#2 integrate
.. //depot/projects/newisp/dev/ipmi/ipmi.c#2 integrate
.. //depot/projects/newisp/dev/ipmi/ipmi_acpi.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmi_isa.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmi_kcs.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmi_pci.c#2 integrate
.. //depot/projects/newisp/dev/ipmi/ipmi_smbios.c#2 integrate
.. //depot/projects/newisp/dev/ipmi/ipmi_smbus.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmi_smic.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmi_ssif.c#1 branch
.. //depot/projects/newisp/dev/ipmi/ipmivars.h#2 integrate
.. //depot/projects/newisp/dev/mfi/mfi.c#5 integrate
.. //depot/projects/newisp/dev/mfi/mfi_debug.c#1 branch
.. //depot/projects/newisp/dev/mfi/mfivar.h#3 integrate
.. //depot/projects/newisp/dev/sound/pcm/buffer.c#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/buffer.h#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/channel.c#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/channel.h#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/channel_if.m#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/dsp.c#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/dsp.h#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/mixer.c#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/mixer.h#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/sound.c#2 integrate
.. //depot/projects/newisp/dev/sound/pcm/sound.h#2 integrate
.. //depot/projects/newisp/i386/conf/NOTES#3 integrate
.. //depot/projects/newisp/i386/i386/busdma_machdep.c#4 integrate
.. //depot/projects/newisp/kern/init_main.c#2 integrate
.. //depot/projects/newisp/kern/kern_descrip.c#2 integrate
.. //depot/projects/newisp/kern/kern_event.c#2 integrate
.. //depot/projects/newisp/kern/kern_proc.c#3 integrate
.. //depot/projects/newisp/kern/tty.c#4 integrate
.. //depot/projects/newisp/kern/tty_pty.c#2 integrate
.. //depot/projects/newisp/kern/tty_tty.c#2 integrate
.. //depot/projects/newisp/kern/vfs_aio.c#3 integrate
.. //depot/projects/newisp/modules/ipmi/Makefile#2 integrate
.. //depot/projects/newisp/modules/mfi/Makefile#2 integrate
.. //depot/projects/newisp/net/if_bridge.c#3 integrate
.. //depot/projects/newisp/netinet/if_ether.c#2 integrate
.. //depot/projects/newisp/netinet/in_var.h#2 integrate
.. //depot/projects/newisp/netinet/ip_carp.c#2 integrate
.. //depot/projects/newisp/netinet/ip_output.c#4 integrate
.. //depot/projects/newisp/netinet/ip_var.h#2 integrate
.. //depot/projects/newisp/netinet/tcp_input.c#5 integrate
.. //depot/projects/newisp/netinet/tcp_timer.h#3 integrate
.. //depot/projects/newisp/security/audit/audit_worker.c#4 integrate
.. //depot/projects/newisp/sys/copyright.h#2 integrate
.. //depot/projects/newisp/sys/event.h#2 integrate
.. //depot/projects/newisp/sys/ipmi.h#2 integrate
.. //depot/projects/newisp/sys/mbuf.h#5 integrate
.. //depot/projects/newisp/sys/param.h#5 integrate
.. //depot/projects/newisp/sys/soundcard.h#2 integrate

Differences ...

==== //depot/projects/newisp/amd64/conf/NOTES#2 (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/amd64/conf/NOTES,v 1.58 2006/07/29 18:38:53 marcel Exp $
+# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.59 2006/09/22 22:11:28 jhb Exp $
 #
 
 #
@@ -346,6 +346,7 @@
 #
 # Miscellaneous hardware:
 #
+# ipmi: Intelligent Platform Management Interface
 # smbios: DMI/SMBIOS entry point
 # vpd: Vital Product Data kernel interface
 # cy: Cyclades serial driver
@@ -368,6 +369,7 @@
 device		digi_Xe
 device		digi_Xem
 device		digi_Xr
+device		ipmi
 # Parallel (8255 PPI) basic I/O (mode 0) port (e.g. Advantech PCL-724)
 device		pbio
 hint.pbio.0.at="isa"

==== //depot/projects/newisp/amd64/ia32/ia32_sigtramp.S#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/ia32/ia32_sigtramp.S,v 1.2 2003/08/22 23:19:02 peter Exp $
+ * $FreeBSD: src/sys/amd64/ia32/ia32_sigtramp.S,v 1.3 2006/09/23 13:42:09 davidxu Exp $
  */
 
 #include "opt_compat.h"
@@ -45,8 +45,6 @@
 	calll	*IA32_SIGF_HANDLER(%esp)
 	leal	IA32_SIGF_UC(%esp),%eax	/* get ucontext */
 	pushl	%eax
-	movl	IA32_UC_GS(%eax),%gs	/* restore %gs */
-	movl	IA32_UC_FS(%eax),%fs	/* restore %fs */
 	movl	IA32_UC_ES(%eax),%es	/* restore %es */
 	movl	IA32_UC_DS(%eax),%ds	/* restore %ds */
 	movl	$SYS_sigreturn,%eax
@@ -62,8 +60,6 @@
 	calll	*IA32_SIGF_HANDLER(%esp)
 	leal	IA32_SIGF_UC4(%esp),%eax/* get ucontext */
 	pushl	%eax
-	movl	IA32_UC4_GS(%eax),%gs	/* restore %gs */
-	movl	IA32_UC4_FS(%eax),%fs	/* restore %fs */
 	movl	IA32_UC4_ES(%eax),%es	/* restore %es */
 	movl	IA32_UC4_DS(%eax),%ds	/* restore %ds */
 	movl	$344,%eax		/* 4.x SYS_sigreturn */

==== //depot/projects/newisp/bsm/audit_kevents.h#3 (text) ====

@@ -30,8 +30,8 @@
  *
  * @APPLE_BSD_LICENSE_HEADER_END@
  *
- * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#28 $
- * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.8 2006/09/21 07:27:02 rwatson Exp $
+ * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#29 $
+ * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.9 2006/09/25 12:22:07 rwatson Exp $
  */
 
 #ifndef _BSM_AUDIT_KEVENTS_H_
@@ -471,6 +471,10 @@
 #define	AUE_KENV		43114	/* FreeBSD. */
 #define	AUE_JAIL_ATTACH		43115	/* FreeBSD. */
 #define	AUE_SYSCTL_WRITE	43116	/* FreeBSD. */
+#define	AUE_IOPERM		43117	/* Linux. */
+#define	AUE_READDIR		43118	/* Linux. */
+#define	AUE_IOPL		43119	/* Linux. */
+#define	AUE_VM86		43120	/* Linux. */
 
 /*
  * Darwin BSM uses a number of AUE_O_* definitions, which are aliased to the

==== //depot/projects/newisp/compat/freebsd32/freebsd32_proto.h#6 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.65 2006/09/22 15:05:33 davidxu Exp $
- * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.78 2006/09/22 15:04:28 davidxu Exp 
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.66 2006/09/23 00:27:53 davidxu Exp $
+ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.79 2006/09/23 00:27:11 davidxu Exp 
  */
 
 #ifndef _FREEBSD32_SYSPROTO_H_

==== //depot/projects/newisp/compat/freebsd32/freebsd32_syscall.h#6 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.63 2006/09/22 15:05:33 davidxu Exp $
- * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.78 2006/09/22 15:04:28 davidxu Exp 
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.64 2006/09/23 00:27:53 davidxu Exp $
+ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.79 2006/09/23 00:27:11 davidxu Exp 
  */
 
 #define	FREEBSD32_SYS_syscall	0
@@ -300,6 +300,7 @@
 #define	FREEBSD32_SYS_freebsd32_getcontext	421
 #define	FREEBSD32_SYS_freebsd32_setcontext	422
 #define	FREEBSD32_SYS_freebsd32_swapcontext	423
+#define	FREEBSD32_SYS_sigwait	429
 #define	FREEBSD32_SYS_thr_exit	431
 #define	FREEBSD32_SYS_thr_self	432
 #define	FREEBSD32_SYS_thr_kill	433

==== //depot/projects/newisp/compat/freebsd32/freebsd32_syscalls.c#6 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.54 2006/09/22 15:05:33 davidxu Exp $
- * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.78 2006/09/22 15:04:28 davidxu Exp 
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.55 2006/09/23 00:27:53 davidxu Exp $
+ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.79 2006/09/23 00:27:11 davidxu Exp 
  */
 
 const char *freebsd32_syscallnames[] = {
@@ -436,7 +436,7 @@
 	"#426",			/* 426 = __acl_set_link */
 	"#427",			/* 427 = __acl_delete_link */
 	"#428",			/* 428 = __acl_aclcheck_link */
-	"#429",			/* 429 = sigwait */
+	"sigwait",			/* 429 = sigwait */
 	"#430",			/* 430 = thr_create; */
 	"thr_exit",			/* 431 = thr_exit */
 	"thr_self",			/* 432 = thr_self */

==== //depot/projects/newisp/compat/freebsd32/freebsd32_sysent.c#6 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.64 2006/09/22 15:05:34 davidxu Exp $
- * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.78 2006/09/22 15:04:28 davidxu Exp 
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.65 2006/09/23 00:27:53 davidxu Exp $
+ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.79 2006/09/23 00:27:11 davidxu Exp 
  */
 
 #include "opt_compat.h"
@@ -461,7 +461,7 @@
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },			/* 426 = __acl_set_link */
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },			/* 427 = __acl_delete_link */
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },			/* 428 = __acl_aclcheck_link */
-	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },			/* 429 = sigwait */
+	{ AS(sigwait_args), (sy_call_t *)sigwait, AUE_SIGWAIT, NULL, 0, 0 },	/* 429 = sigwait */
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 },			/* 430 = thr_create; */
 	{ AS(thr_exit_args), (sy_call_t *)thr_exit, AUE_NULL, NULL, 0, 0 },	/* 431 = thr_exit */
 	{ AS(thr_self_args), (sy_call_t *)thr_self, AUE_NULL, NULL, 0, 0 },	/* 432 = thr_self */

==== //depot/projects/newisp/compat/freebsd32/syscalls.master#6 (text+ko) ====

@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.78 2006/09/22 15:04:28 davidxu Exp $
+ $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.79 2006/09/23 00:27:11 davidxu Exp $
 ;	from: @(#)syscalls.master	8.2 (Berkeley) 1/13/94
 ;	from: src/sys/kern/syscalls.master 1.107
 ;
@@ -714,7 +714,8 @@
 427	AUE_NULL	UNIMPL	__acl_delete_link
 428	AUE_NULL	UNIMPL	__acl_aclcheck_link
 ; XXX implement
-429	AUE_SIGWAIT	UNIMPL	sigwait
+429	AUE_SIGWAIT	NOPROTO	{ int sigwait(const sigset_t *set, \
+				    int *sig); }
 430	AUE_NULL	UNIMPL	thr_create;
 431	AUE_NULL	NOPROTO	{ void thr_exit(long *state); }
 432	AUE_NULL	NOPROTO	{ int thr_self(long *id); }

==== //depot/projects/newisp/compat/linux/linux_file.c#3 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_file.c,v 1.97 2006/09/10 13:47:56 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_file.c,v 1.98 2006/09/23 19:06:54 netchild Exp $");
 
 #include "opt_compat.h"
 #include "opt_mac.h"
@@ -49,6 +49,7 @@
 #include <sys/syscallsubr.h>
 #include <sys/sysproto.h>
 #include <sys/tty.h>
+#include <sys/unistd.h>
 #include <sys/vnode.h>
 
 #include <ufs/ufs/extattr.h>
@@ -480,6 +481,10 @@
 	char *path;
 	int error;
 
+	/* linux convention */
+	if (args->flags & ~(F_OK | X_OK | W_OK | R_OK))
+		return (EINVAL);
+
 	LCONVPATHEXIST(td, args->path, &path);
 
 #ifdef DEBUG
@@ -488,6 +493,7 @@
 #endif
 	error = kern_access(td, path, UIO_SYSSPACE, args->flags);
 	LFREEPATH(path);
+
 	return (error);
 }
 
@@ -724,12 +730,28 @@
 	struct linux_pread_args *uap;
 {
 	struct pread_args bsd;
+	struct vnode *vp;
+	int error;
 
 	bsd.fd = uap->fd;
 	bsd.buf = uap->buf;
 	bsd.nbyte = uap->nbyte;
 	bsd.offset = uap->offset;
-	return pread(td, &bsd);
+
+	error = pread(td, &bsd);
+
+	if (error == 0) {
+   	   	/* This seems to violate POSIX but linux does it */
+   	   	if ((error = fgetvp(td, uap->fd, &vp)) != 0)
+   		   	return (error);
+		if (vp->v_type == VDIR) {
+   		   	vrele(vp);
+			return (EISDIR);
+		}
+		vrele(vp);
+	}
+
+	return (error);
 }
 
 int

==== //depot/projects/newisp/compat/linux/linux_socket.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_socket.c,v 1.70 2006/07/19 18:28:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_socket.c,v 1.71 2006/09/23 19:06:54 netchild Exp $");
 
 /* XXX we use functions that might not exist. */
 #include "opt_compat.h"
@@ -611,6 +611,8 @@
 
 	error = kern_bind(td, linux_args.s, sa);
 	free(sa, M_SONAME);
+	if (error == EADDRNOTAVAIL && linux_args.namelen != sizeof(struct sockaddr_in))
+	   	return (EINVAL);
 	return (error);
 }
 
@@ -719,8 +721,11 @@
 	bsd_args.anamelen = PTRIN(linux_args.namelen);/* XXX */
 	error = accept(td, &bsd_args);
 	bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name);
-	if (error)
+	if (error) {
+	   	if (error == EFAULT && linux_args.namelen != sizeof(struct sockaddr_in))
+		   	return (EINVAL);
 		return (error);
+	}
 	if (linux_args.addr) {
 		error = linux_sa_put(PTRIN(linux_args.addr));
 		if (error) {
@@ -1135,7 +1140,7 @@
 		break;
 	}
 	if (name == -1)
-		return (EINVAL);
+		return (ENOPROTOOPT);
 
 	bsd_args.name = name;
 	bsd_args.val = PTRIN(linux_args.optval);

==== //depot/projects/newisp/conf/NOTES#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1381 2006/09/20 13:33:40 rwatson Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1382 2006/09/25 11:40:14 scottl Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -1544,6 +1544,7 @@
 device		mlx		# Mylex DAC960
 device		amr		# AMI MegaRAID
 device		mfi		# LSI MegaRAID SAS
+options		MFI_DEBUG
 
 #
 # 3ware ATA RAID

==== //depot/projects/newisp/conf/files#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1142 2006/09/18 17:23:35 sam Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1143 2006/09/25 11:40:14 scottl Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -713,6 +713,7 @@
 dev/md/md.c			optional md
 dev/mem/memdev.c		optional mem
 dev/mfi/mfi.c			optional mfi
+dev/mfi/mfi_debug.c		optional mfi
 dev/mfi/mfi_pci.c		optional mfi pci
 dev/mfi/mfi_disk.c		optional mfi
 dev/mfi/mfi_linux.c		optional mfi compat_linux

==== //depot/projects/newisp/conf/files.amd64#3 (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.amd64,v 1.93 2006/09/05 16:55:12 anholt Exp $
+# $FreeBSD: src/sys/conf/files.amd64,v 1.94 2006/09/22 22:11:28 jhb Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -161,7 +161,13 @@
 dev/if_ndis/if_ndis_usb.c	optional	ndis usb
 dev/io/iodev.c			optional	io
 dev/ipmi/ipmi.c			optional	ipmi
-dev/ipmi/ipmi_smbios.c		optional	ipmi isa
+dev/ipmi/ipmi_acpi.c		optional	ipmi acpi
+dev/ipmi/ipmi_isa.c		optional	ipmi isa
+dev/ipmi/ipmi_kcs.c		optional	ipmi
+dev/ipmi/ipmi_smic.c		optional	ipmi
+dev/ipmi/ipmi_smbus.c		optional	ipmi smbus
+dev/ipmi/ipmi_smbios.c		optional	ipmi
+dev/ipmi/ipmi_ssif.c		optional	ipmi smbus
 dev/ipmi/ipmi_pci.c		optional	ipmi pci
 dev/fdc/fdc.c			optional	fdc
 dev/fdc/fdc_acpi.c		optional	fdc

==== //depot/projects/newisp/conf/files.i386#2 (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.565 2006/08/15 12:54:28 netchild Exp $
+# $FreeBSD: src/sys/conf/files.i386,v 1.566 2006/09/22 22:11:28 jhb Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -196,7 +196,13 @@
 dev/if_ndis/if_ndis_usb.c	optional ndis usb
 dev/io/iodev.c			optional io
 dev/ipmi/ipmi.c			optional ipmi
-dev/ipmi/ipmi_smbios.c		optional ipmi isa
+dev/ipmi/ipmi_acpi.c		optional ipmi acpi
+dev/ipmi/ipmi_isa.c		optional ipmi isa
+dev/ipmi/ipmi_kcs.c		optional ipmi
+dev/ipmi/ipmi_smic.c		optional ipmi
+dev/ipmi/ipmi_smbus.c		optional ipmi smbus
+dev/ipmi/ipmi_smbios.c		optional ipmi
+dev/ipmi/ipmi_ssif.c		optional ipmi smbus
 dev/ipmi/ipmi_pci.c		optional ipmi pci
 dev/kbd/kbd.c			optional atkbd | sc | ukbd | vt
 dev/le/if_le_isa.c		optional le isa

==== //depot/projects/newisp/dev/acpica/Osd/OsdHardware.c#2 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdHardware.c,v 1.20 2006/04/04 02:22:38 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdHardware.c,v 1.21 2006/09/24 09:39:17 hrs Exp $");
 
 #include <contrib/dev/acpica/acpi.h>
 
@@ -126,7 +126,9 @@
 
     error = acpi_os_check_port(InPort, Width);
     if (error != 0) {
-	printf("acpi: bad read from port 0x%03x (%d)\n", (int)InPort, Width);
+	if (bootverbose)
+		printf("acpi: bad read from port 0x%03x (%d)\n",
+			(int)InPort, Width);
 	if (error == -1)
 	    return (AE_BAD_PARAMETER);
     }
@@ -159,8 +161,9 @@
 
     error = acpi_os_check_port(OutPort, Width);
     if (error != 0) {
-	printf("acpi: bad write to port 0x%03x (%d), val %#x\n", (int)OutPort,
-	    Width, Value);
+	if (bootverbose)
+		printf("acpi: bad write to port 0x%03x (%d), val %#x\n",
+			(int)OutPort, Width, Value);
 	if (error == -1)
 	    return (AE_BAD_PARAMETER);
     }

==== //depot/projects/newisp/dev/ata/ata-chipset.c#6 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.175 2006/09/12 22:06:39 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.176 2006/09/25 11:26:29 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -985,6 +985,13 @@
 	ctlr->allocate = ata_ali_sata_allocate;
 	ctlr->setmode = ata_sata_setmode;
 
+	/* if we have a memory resource we can likely do AHCI */
+	ctlr->r_type2 = SYS_RES_MEMORY;
+	ctlr->r_rid2 = PCIR_BAR(5);
+	if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
+						   &ctlr->r_rid2, RF_ACTIVE)))
+	    return ata_ahci_chipinit(dev);
+
 	/* enable PCI interrupt */
 	pci_write_config(dev, PCIR_COMMAND,
 			 pci_read_config(dev, PCIR_COMMAND, 2) & ~0x0400, 2);

==== //depot/projects/newisp/dev/bge/if_bge.c#6 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.148 2006/09/18 22:18:21 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.149 2006/09/23 18:55:49 scottl Exp $");
 
 /*
  * Broadcom BCM570x family gigabit ethernet driver for FreeBSD.
@@ -79,6 +79,7 @@
 #include <sys/kernel.h>
 #include <sys/module.h>
 #include <sys/socket.h>
+#include <sys/sysctl.h>
 
 #include <net/if.h>
 #include <net/if_arp.h>
@@ -419,7 +420,16 @@
 DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0);
 
 static int bge_fake_autoneg = 0;
+static int bge_allow_asf = 1;
+
 TUNABLE_INT("hw.bge.fake_autoneg", &bge_fake_autoneg);
+TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf);
+
+SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters");
+SYSCTL_INT(_hw_bge, OID_AUTO, fake_autoneg, CTLFLAG_RD, &bge_fake_autoneg, 0,
+	"Enable fake autonegotiation for certain blade systems");
+SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0,
+	"Allow ASF mode if available");
 
 static uint32_t
 bge_readmem_ind(struct bge_softc *sc, int off)
@@ -2179,8 +2189,8 @@
 	}
 
 	sc->bge_asf_mode = 0;
-	if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG)
-	    == BGE_MAGIC_NUMBER) {
+	if (bge_allow_asf && (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG)
+	    == BGE_MAGIC_NUMBER)) {
 		if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_NICCFG)
 		    & BGE_HWCFG_ASF) {
 			sc->bge_asf_mode |= ASF_ENABLE;

==== //depot/projects/newisp/dev/exca/exca.c#2 (text+ko) ====

@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/exca/exca.c,v 1.24 2006/03/09 16:28:24 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/exca/exca.c,v 1.25 2006/09/24 00:26:33 imp Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -179,11 +179,7 @@
 	struct mem_map_index_st *map;
 	struct pccard_mem_handle *mem;
 	uint32_t offset;
-#if 0
-	int mem8 = (mem->kind == PCCARD_A_MEM_ATTR);
-#else
-	int mem8 = 1;
-#endif
+	int mem8 = 1 /* mem->kind == PCCARD_A_MEM_ATTR */;
 	
 	map = &mem_map_index[win];
 	mem = &sc->mem[win];

==== //depot/projects/newisp/dev/ipmi/ipmi.c#2 (text) ====

@@ -25,24 +25,21 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ipmi/ipmi.c,v 1.3 2006/05/16 14:36:26 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ipmi/ipmi.c,v 1.4 2006/09/22 22:11:29 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/condvar.h>
+#include <sys/conf.h>
 #include <sys/kernel.h>
 #include <sys/malloc.h>
+#include <sys/module.h>
 #include <sys/poll.h>
+#include <sys/rman.h>
 #include <sys/selinfo.h>
-
-#include <sys/disk.h>
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/rman.h>
+#include <sys/sysctl.h>
 #include <sys/watchdog.h>
-#include <sys/sysctl.h>
 
 #ifdef LOCAL_MODULE
 #include <ipmi.h>
@@ -52,29 +49,7 @@
 #include <dev/ipmi/ipmivars.h>
 #endif
 
-struct ipmi_done_list {
-	u_char		*data;
-	int		channel;
-	int		msgid;
-	int		len;
-	TAILQ_ENTRY(ipmi_done_list) list;
-};
-
-#define MAX_TIMEOUT 3 * hz
-
-static int ipmi_wait_for_ibf(device_t, int);
-static int ipmi_wait_for_obf(device_t, int);
-static void ipmi_clear_obf(device_t, int);
-static void ipmi_error(device_t);
-static void ipmi_check_read(device_t);
-static int ipmi_write(device_t, u_char *, int);
-static void ipmi_wait_for_tx_okay(device_t);
-static void ipmi_wait_for_rx_okay(device_t);
-static void ipmi_wait_for_not_busy(device_t);
-static void ipmi_set_busy(device_t);
-static int ipmi_ready_to_read(device_t);
 #ifdef IPMB
-static int ipmi_handle_attn(device_t dev);
 static int ipmi_ipmb_checksum(u_char, int);
 static int ipmi_ipmb_send_message(device_t, u_char, u_char, u_char,
      u_char, u_char, int)
@@ -92,11 +67,10 @@
 static int on = 1;
 SYSCTL_NODE(_hw, OID_AUTO, ipmi, CTLFLAG_RD, 0, "IPMI driver parameters");
 SYSCTL_INT(_hw_ipmi, OID_AUTO, on, CTLFLAG_RW,
-        &on, 0, "");
+	&on, 0, "");
 
 static struct cdevsw ipmi_cdevsw = {
 	.d_version =    D_VERSION,
-	.d_flags =      D_NEEDGIANT,
 	.d_open =	ipmi_open,
 	.d_close =	ipmi_close,
 	.d_ioctl =	ipmi_ioctl,
@@ -106,60 +80,126 @@
 
 MALLOC_DEFINE(M_IPMI, "ipmi", "ipmi");
 
-static	int
-ipmi_open(struct cdev *dev, int flags, int fmt, struct thread *td)
+static int
+ipmi_open(struct cdev *cdev, int flags, int fmt, struct thread *td)
 {
+	struct ipmi_device *dev;
 	struct ipmi_softc *sc;
 
 	if (!on)
-		return ENOENT;
+		return (ENOENT);
 
-	sc = dev->si_drv1;
-	if (sc->ipmi_refcnt) {
-		return EBUSY;
+	dev = cdev->si_drv1;
+	sc = dev->ipmi_softc;
+	IPMI_LOCK(sc);
+	if (dev->ipmi_open) {
+		IPMI_UNLOCK(sc);
+		return (EBUSY);
 	}
-	sc->ipmi_refcnt = 1;
+	dev->ipmi_open = 1;
+	IPMI_UNLOCK(sc);
 
-	return 0;
+	return (0);
 }
 
-static	int
-ipmi_poll(struct cdev *dev, int poll_events, struct thread *td)
+static int
+ipmi_poll(struct cdev *cdev, int poll_events, struct thread *td)
 {
+	struct ipmi_device *dev;
 	struct ipmi_softc *sc;
 	int revents = 0;
 
-	sc = dev->si_drv1;
+	dev = cdev->si_drv1;
+	sc = dev->ipmi_softc;
 
-	ipmi_check_read(sc->ipmi_dev);
-
+	IPMI_LOCK(sc);
 	if (poll_events & (POLLIN | POLLRDNORM)) {
-		if (!TAILQ_EMPTY(&sc->ipmi_done))
+		if (!TAILQ_EMPTY(&dev->ipmi_completed_requests))
 		    revents |= poll_events & (POLLIN | POLLRDNORM);
-		if (TAILQ_EMPTY(&sc->ipmi_done) && sc->ipmi_requests == 0) {
+		if (dev->ipmi_requests == 0)
 		    revents |= POLLERR;
-		}
 	}
 
 	if (revents == 0) {
 		if (poll_events & (POLLIN | POLLRDNORM))
-			selrecord(td, &sc->ipmi_select);
+			selrecord(td, &dev->ipmi_select);
 	}
+	IPMI_UNLOCK(sc);
+
+	return (revents);
+}
+
+static void
+ipmi_purge_completed_requests(struct ipmi_device *dev)
+{
+	struct ipmi_request *req;
 
-	return revents;
+	while (!TAILQ_EMPTY(&dev->ipmi_completed_requests)) {
+		req = TAILQ_FIRST(&dev->ipmi_completed_requests);
+		TAILQ_REMOVE(&dev->ipmi_completed_requests, req, ir_link);
+		dev->ipmi_requests--;
+		ipmi_free_request(req);
+	}
 }
 
-static	int
-ipmi_close(struct cdev *dev, int flags, int fmt, struct thread *td)
+static int
+ipmi_close(struct cdev *cdev, int flags, int fmt, struct thread *td)
 {
+	struct ipmi_request *req, *nreq;
+	struct ipmi_device *dev;
 	struct ipmi_softc *sc;
-	int error = 0;
+#ifdef CLONING
+	int bit;
+#endif
+
+	dev = cdev->si_drv1;
+	sc = dev->ipmi_softc;
+
+	IPMI_LOCK(sc);
+	if (dev->ipmi_requests) {
+		/* Throw away any pending requests for this device. */
+		TAILQ_FOREACH_SAFE(req, &sc->ipmi_pending_requests, ir_link,
+		    nreq) {
+			if (req->ir_owner == dev) {
+				TAILQ_REMOVE(&sc->ipmi_pending_requests, req,
+				    ir_link);
+				dev->ipmi_requests--;
+				ipmi_free_request(req);
+			}
+		}
+
+		/* Throw away any pending completed requests for this device. */
+		ipmi_purge_completed_requests(dev);
+
+		/*
+		 * If we still have outstanding requests, they must be stuck
+		 * in an interface driver, so wait for those to drain.
+		 */
+		dev->ipmi_closing = 1;
+		while (dev->ipmi_requests > 0) {
+			msleep(&dev->ipmi_requests, &sc->ipmi_lock, PWAIT,
+			    "ipmidrain", 0);
+			ipmi_purge_completed_requests(dev);
+		}
+	}
 
-	sc = dev->si_drv1;
+#ifdef CLONING
+	/* Detach this sub-device from the main driver. */
+	bit = minor(cdev) % 32;
+	sc->ipmi_cdev_mask &= ~(1 << bit);
+	TAILQ_REMOVE(&sc->ipmi_cdevs, dev, ipmi_link);
+	IPMI_UNLOCK(sc);
 
-	sc->ipmi_refcnt = 0;
+	/* Cleanup. */
+	cdev->si_drv1 = NULL;
+	free(dev, M_IPMI);
+	destroy_dev(cdev);
+#else
+	dev->ipmi_open = 0;
+	IPMI_UNLOCK(sc);
+#endif
 
-	return error;
+	return (0);
 }
 
 #ifdef IPMB
@@ -171,707 +211,384 @@
 	for (; len; len--) {
 		sum += *data++;
 	}
-	return -sum;
+	return (-sum);
 }
 
+/* XXX: Needs work */
 static int
 ipmi_ipmb_send_message(device_t dev, u_char channel, u_char netfn,
     u_char command, u_char seq, u_char *data, int data_len)
 {
-	u_char *temp;
 	struct ipmi_softc *sc = device_get_softc(dev);
+	struct ipmi_request *req;
+	u_char slave_addr = 0x52;
 	int error;
-	u_char slave_addr = 0x52;
 
-	temp = malloc(data_len + 10, M_IPMI, M_WAITOK);
-	bzero(temp, data_len + 10);
-	temp[0] = IPMI_APP_REQUEST << 2;
-	temp[1] = IPMI_SEND_MSG;
-	temp[2] = channel;
-	temp[3] = slave_addr;
-	temp[4] = netfn << 2;
-	temp[5] = ipmi_ipmb_check_sum(&temp[3], 2);
-	temp[6] = sc->ipmi_address;
-	temp[7] = seq << 2 | sc->ipmi_lun;
-	temp[8] = command;
+	req = ipmi_alloc_driver_request(IPMI_ADDR(IPMI_APP_REQUEST, 0),
+	    IPMI_SEND_MSG, data_len + 8, 0);
+	req->ir_request[0] = channel;
+	req->ir_request[1] = slave_addr;
+	req->ir_request[2] = IPMI_ADDR(netfn, 0);
+	req->ir_request[3] = ipmi_ipmb_checksum(&req->ir_request[1], 2);
+	req->ir_request[4] = sc->ipmi_address;
+	req->ir_request[5] = IPMI_ADDR(seq, sc->ipmi_lun);
+	req->ir_request[6] = command;
 
-	bcopy(data, &temp[9], data_len);
-	temp[data_len + 9] = ipmi_ipmb_check(&temp[6], data_len + 3);
-	ipmi_write(sc->ipmi_dev, temp, data_len + 9);
-	free(temp, M_IPMI);
+	bcopy(data, &req->ir_request[7], data_len);
+	temp[data_len + 7] = ipmi_ipmb_checksum(&req->ir_request[4],
+	    data_len + 3);
 
-	while (!ipmi_ready_to_read(dev))
-		DELAY(1000);
-	temp = malloc(IPMI_MAX_RX, M_IPMI, M_WAITOK);
-	bzero(temp, IPMI_MAX_RX);
-	error = ipmi_read(dev, temp, IPMI_MAX_RX);
-	free(temp, M_IPMI);
+	ipmi_submit_driver_request(sc, req);
+	error = req->ir_error;
+	ipmi_free_request(req);
 
-	return error;
+	return (error);
 }
 
 static int
-ipmi_handle_attn(device_t dev)
+ipmi_handle_attn(struct ipmi_softc *sc)
 {
-	u_char temp[IPMI_MAX_RX];
-	struct ipmi_softc *sc = device_get_softc(dev);
+	struct ipmi_request *req;
 	int error;
 
 	device_printf(sc->ipmi_dev, "BMC has a message\n");
-	temp[0] = IPMI_APP_REQUEST << 2;
-	temp[1] = IPMI_GET_MSG_FLAGS;
-	ipmi_write(sc->ipmi_dev, temp, 2);
-	while (!ipmi_ready_to_read(dev))
-		DELAY(1000);
-	bzero(temp, IPMI_MAX_RX);
-	error = ipmi_read(dev, temp, IPMI_MAX_RX);
+	req = ipmi_alloc_driver_request(IPMI_ADDR(IPMI_APP_REQUEST, 0),
+	    IPMI_GET_MSG_FLAGS, 0, 1);
+
+	ipmi_submit_driver_request(sc, req);
 
-	if (temp[2] == 0) {
-		if (temp[3] & IPMI_MSG_BUFFER_FULL) {
+	if (req->ir_error == 0 && req->ir_compcode == 0) {
+		if (req->ir_reply[0] & IPMI_MSG_BUFFER_FULL) {
 			device_printf(sc->ipmi_dev, "message buffer full");
 		}
-		if (temp[3] & IPMI_WDT_PRE_TIMEOUT) {
+		if (req->ir_reply[0] & IPMI_WDT_PRE_TIMEOUT) {
 			device_printf(sc->ipmi_dev,
 			    "watchdog about to go off");
 		}
-		if (temp[3] & IPMI_MSG_AVAILABLE) {
-			temp[0] = IPMI_APP_REQUEST << 2;
-			temp[1] = IPMI_GET_MSG;
-			ipmi_write(sc->ipmi_dev, temp, 2);
-			while (!ipmi_ready_to_read(dev))
-				DELAY(1000);
-			bzero(temp, IPMI_MAX_RX);
-			error = ipmi_read(dev, temp, IPMI_MAX_RX);
+		if (req->ir_reply[0] & IPMI_MSG_AVAILABLE) {
+			ipmi_free_request(req);
+
+			req = ipmi_alloc_driver_request(
+			    IPMI_ADDR(IPMI_APP_REQUEST, 0), IPMI_GET_MSG, 0,
+			    16);
 
 			device_printf(sc->ipmi_dev, "throw out message ");
 			dump_buf(temp, 16);
 		}
-	} else
-		return -1;
-	return error;
+	}
+	error = req->ir_error;
+	ipmi_free_request(req);
+
+	return (error);
 }
 #endif
 
-static int
-ipmi_ready_to_read(device_t dev)
-{
-	struct ipmi_softc *sc = device_get_softc(dev);
-	int status, flags;
-
-	if (sc->ipmi_bios_info.smic_mode) {
-		flags = INB(sc, sc->ipmi_smic_flags);
-#ifdef IPMB
-		if (flags & SMIC_STATUS_SMS_ATN) {
-			ipmi_handle_attn(dev);
-			return 0;
-		}
-#endif
-		if (flags & SMIC_STATUS_RX_RDY)
-			 return 1;
-	} else if (sc->ipmi_bios_info.kcs_mode) {
-		status = INB(sc, sc->ipmi_kcs_status_reg);
-#ifdef IPMB
-		if (status & KCS_STATUS_SMS_ATN) {
-			ipmi_handle_attn(dev);
-			return 0;
-		}
+#ifdef IPMICTL_SEND_COMMAND_32
+#define	PTRIN(p)	((void *)(uintptr_t)(p))
+#define	PTROUT(p)	((uintptr_t)(p))
 #endif
-		if (status & KCS_STATUS_OBF)
-			 return 1;
-	} else {
-		device_printf(dev,"Unsupported mode\n");
-	}
-
-	return 0;
-}
 
-void
-ipmi_intr(void *arg) {
-	device_t  dev = arg;
-
-	ipmi_check_read(dev);
-}
-
-static void
-ipmi_check_read(device_t dev){
-	struct ipmi_softc *sc = device_get_softc(dev);
-	struct ipmi_done_list *item;
-	int status;
-	u_char *temp;
-
-	if (!sc->ipmi_requests)

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list