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