svn commit: r222812 - in projects/largeSMP: contrib/top
share/man/man4 share/misc share/mk sys/boot/ia64/common
sys/boot/ia64/efi sys/ddb sys/dev/amdsbwd sys/dev/atkbdc
sys/ia64/ia64 sys/kern sys/n...
Attilio Rao
attilio at FreeBSD.org
Tue Jun 7 08:24:29 UTC 2011
Author: attilio
Date: Tue Jun 7 08:24:29 2011
New Revision: 222812
URL: http://svn.freebsd.org/changeset/base/222812
Log:
MFC
Added:
projects/largeSMP/sys/boot/ia64/common/icache.c
- copied unchanged from r222811, head/sys/boot/ia64/common/icache.c
Modified:
projects/largeSMP/share/man/man4/amdsbwd.4
projects/largeSMP/share/man/man4/atkbd.4
projects/largeSMP/share/misc/committers-ports.dot
projects/largeSMP/sys/boot/ia64/common/Makefile
projects/largeSMP/sys/boot/ia64/common/exec.c
projects/largeSMP/sys/boot/ia64/common/libia64.h
projects/largeSMP/sys/boot/ia64/efi/efimd.c
projects/largeSMP/sys/boot/ia64/efi/main.c
projects/largeSMP/sys/boot/ia64/efi/version
projects/largeSMP/sys/ddb/db_command.c
projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c
projects/largeSMP/sys/dev/atkbdc/atkbd.c
projects/largeSMP/sys/dev/atkbdc/atkbdreg.h
projects/largeSMP/sys/ia64/ia64/machdep.c
projects/largeSMP/sys/kern/kern_shutdown.c
projects/largeSMP/sys/kern/ksched.c
projects/largeSMP/sys/kern/subr_prf.c
projects/largeSMP/sys/netgraph/ng_nat.c
projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c
projects/largeSMP/sys/netinet/libalias/alias_sctp.h
projects/largeSMP/sys/sys/conf.h
projects/largeSMP/usr.sbin/rtsold/Makefile
Directory Properties:
projects/largeSMP/ (props changed)
projects/largeSMP/cddl/contrib/opensolaris/ (props changed)
projects/largeSMP/contrib/bind9/ (props changed)
projects/largeSMP/contrib/binutils/ (props changed)
projects/largeSMP/contrib/bzip2/ (props changed)
projects/largeSMP/contrib/compiler-rt/ (props changed)
projects/largeSMP/contrib/dialog/ (props changed)
projects/largeSMP/contrib/ee/ (props changed)
projects/largeSMP/contrib/expat/ (props changed)
projects/largeSMP/contrib/file/ (props changed)
projects/largeSMP/contrib/gcc/ (props changed)
projects/largeSMP/contrib/gdb/ (props changed)
projects/largeSMP/contrib/gdtoa/ (props changed)
projects/largeSMP/contrib/gnu-sort/ (props changed)
projects/largeSMP/contrib/groff/ (props changed)
projects/largeSMP/contrib/less/ (props changed)
projects/largeSMP/contrib/libpcap/ (props changed)
projects/largeSMP/contrib/libstdc++/ (props changed)
projects/largeSMP/contrib/llvm/ (props changed)
projects/largeSMP/contrib/llvm/tools/clang/ (props changed)
projects/largeSMP/contrib/ncurses/ (props changed)
projects/largeSMP/contrib/netcat/ (props changed)
projects/largeSMP/contrib/ntp/ (props changed)
projects/largeSMP/contrib/one-true-awk/ (props changed)
projects/largeSMP/contrib/openbsm/ (props changed)
projects/largeSMP/contrib/openpam/ (props changed)
projects/largeSMP/contrib/pf/ (props changed)
projects/largeSMP/contrib/sendmail/ (props changed)
projects/largeSMP/contrib/tcpdump/ (props changed)
projects/largeSMP/contrib/tcsh/ (props changed)
projects/largeSMP/contrib/top/ (props changed)
projects/largeSMP/contrib/top/install-sh (props changed)
projects/largeSMP/contrib/tzcode/stdtime/ (props changed)
projects/largeSMP/contrib/tzcode/zic/ (props changed)
projects/largeSMP/contrib/tzdata/ (props changed)
projects/largeSMP/contrib/wpa/ (props changed)
projects/largeSMP/contrib/xz/ (props changed)
projects/largeSMP/crypto/openssh/ (props changed)
projects/largeSMP/crypto/openssl/ (props changed)
projects/largeSMP/gnu/lib/ (props changed)
projects/largeSMP/gnu/usr.bin/binutils/ (props changed)
projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed)
projects/largeSMP/gnu/usr.bin/gdb/ (props changed)
projects/largeSMP/lib/libc/ (props changed)
projects/largeSMP/lib/libc/stdtime/ (props changed)
projects/largeSMP/lib/libutil/ (props changed)
projects/largeSMP/lib/libz/ (props changed)
projects/largeSMP/sbin/ (props changed)
projects/largeSMP/sbin/ipfw/ (props changed)
projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed)
projects/largeSMP/share/zoneinfo/ (props changed)
projects/largeSMP/sys/ (props changed)
projects/largeSMP/sys/amd64/include/xen/ (props changed)
projects/largeSMP/sys/boot/ (props changed)
projects/largeSMP/sys/boot/i386/efi/ (props changed)
projects/largeSMP/sys/boot/ia64/efi/ (props changed)
projects/largeSMP/sys/boot/ia64/ski/ (props changed)
projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed)
projects/largeSMP/sys/boot/powerpc/ofw/ (props changed)
projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed)
projects/largeSMP/sys/conf/ (props changed)
projects/largeSMP/sys/contrib/dev/acpica/ (props changed)
projects/largeSMP/sys/contrib/octeon-sdk/ (props changed)
projects/largeSMP/sys/contrib/pf/ (props changed)
projects/largeSMP/sys/contrib/x86emu/ (props changed)
projects/largeSMP/usr.bin/calendar/ (props changed)
projects/largeSMP/usr.bin/csup/ (props changed)
projects/largeSMP/usr.bin/procstat/ (props changed)
projects/largeSMP/usr.sbin/ndiscvt/ (props changed)
projects/largeSMP/usr.sbin/zic/ (props changed)
Modified: projects/largeSMP/share/man/man4/amdsbwd.4
==============================================================================
--- projects/largeSMP/share/man/man4/amdsbwd.4 Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/share/man/man4/amdsbwd.4 Tue Jun 7 08:24:29 2011 (r222812)
@@ -25,12 +25,12 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 30, 2009
+.Dd June 7, 2011
.Dt AMDSBWD 4
.Os
.Sh NAME
.Nm amdsbwd
-.Nd device driver for the AMD SB600/SB700/SB710/SB750 watchdog timer
+.Nd device driver for the AMD SB600/SB7xx/SB8xx watchdog timers
.Sh SYNOPSIS
To compile this driver into the kernel,
place the following line in your
@@ -51,7 +51,7 @@ The
driver provides
.Xr watchdog 4
support for the watchdog timers present on
-AMD SB600 and SB7xx south bridge chips.
+AMD SB600, SB7xx and SB8xx southbridges.
.Sh SEE ALSO
.Xr watchdog 4 ,
.Xr watchdog 8 ,
Modified: projects/largeSMP/share/man/man4/atkbd.4
==============================================================================
--- projects/largeSMP/share/man/man4/atkbd.4 Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/share/man/man4/atkbd.4 Tue Jun 7 08:24:29 2011 (r222812)
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 20, 2011
+.Dd January 29, 2008
.Dt ATKBD 4
.Os
.Sh NAME
@@ -176,11 +176,6 @@ When this option is given, the
.Nm
driver will not test the keyboard port during the probe routine.
Some machines hang during boot when this test is performed.
-.It bit 4 (PROBE_TYPEMATIC)
-When this option is given, the
-.Nm
-driver will try to probe the keyboard typematic rate on boot.
-Some machines hang during boot when this test is performed.
.El
.\".Sh FILES
.Sh EXAMPLES
Modified: projects/largeSMP/share/misc/committers-ports.dot
==============================================================================
--- projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 08:24:29 2011 (r222812)
@@ -97,6 +97,7 @@ itetcu [label="Ion-Mihai Tetcu\nitetcu at F
jacula [label="Giuseppe Pilichi\njacula at FreeBSD.org\n2010/04/05"]
jadawin [label="Philippe Audeoud\njadawin at FreeBSD.org\n2008/03/02"]
jkim [label="Jung-uk Kim\njkim at FreeBSD.org\n2007/09/12"]
+jlaffaye [label="Julien Laffaye\njlaffaye at FreeBSD.org\n2011/06/06"]
jmelo [label="Jean Milanez Melo\njmelo at FreeBSD.org\n2006/03/31"]
joerg [label="Joerg Wunsch\njoerg at FreeBSD.org\n1994/08/22"]
johans [label="Johan Selst\njohans at FreeBSD.org\n2006/04/01"]
Modified: projects/largeSMP/sys/boot/ia64/common/Makefile
==============================================================================
--- projects/largeSMP/sys/boot/ia64/common/Makefile Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/common/Makefile Tue Jun 7 08:24:29 2011 (r222812)
@@ -6,7 +6,7 @@ MK_SSP= no
LIB= ia64
INTERNALLIB=
-SRCS= autoload.c bootinfo.c copy.c devicename.c exec.c
+SRCS= autoload.c bootinfo.c copy.c devicename.c exec.c icache.c
CFLAGS+= -I${.CURDIR}/../../efi/include
CFLAGS+= -I${.CURDIR}/../../efi/include/${MACHINE_CPUARCH}
Modified: projects/largeSMP/sys/boot/ia64/common/exec.c
==============================================================================
--- projects/largeSMP/sys/boot/ia64/common/exec.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/common/exec.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -258,6 +258,8 @@ ia64_loadseg(Elf_Ehdr *eh, Elf_Phdr *ph,
if (ph->p_flags & PF_X) {
ia64_text_start = ph->p_vaddr + delta;
ia64_text_size = ph->p_memsz;
+
+ ia64_sync_icache(ia64_text_start, ia64_text_size);
} else {
ia64_data_start = ph->p_vaddr + delta;
ia64_data_size = ph->p_memsz;
Copied: projects/largeSMP/sys/boot/ia64/common/icache.c (from r222811, head/sys/boot/ia64/common/icache.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/largeSMP/sys/boot/ia64/common/icache.c Tue Jun 7 08:24:29 2011 (r222812, copy of r222811, head/sys/boot/ia64/common/icache.c)
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2011 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stand.h>
+#include <machine/ia64_cpu.h>
+
+#include "libia64.h"
+
+void
+ia64_sync_icache(vm_offset_t va, size_t sz)
+{
+ uintptr_t pa;
+ size_t cnt, max;
+
+ while (sz > 0) {
+ max = sz;
+ pa = (uintptr_t)ia64_va2pa(va, &max);
+ for (cnt = 0; cnt < max; cnt += 32)
+ ia64_fc_i(pa + cnt);
+ ia64_sync_i();
+ va += max;
+ sz -= max;
+ }
+ ia64_srlz_i();
+}
Modified: projects/largeSMP/sys/boot/ia64/common/libia64.h
==============================================================================
--- projects/largeSMP/sys/boot/ia64/common/libia64.h Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/common/libia64.h Tue Jun 7 08:24:29 2011 (r222812)
@@ -64,6 +64,7 @@ void ia64_loadseg(void *, void *, uint64
ssize_t ia64_copyin(const void *, vm_offset_t, size_t);
ssize_t ia64_copyout(vm_offset_t, void *, size_t);
+void ia64_sync_icache(vm_offset_t, size_t);
ssize_t ia64_readin(int, vm_offset_t, size_t);
void *ia64_va2pa(vm_offset_t, size_t *);
Modified: projects/largeSMP/sys/boot/ia64/efi/efimd.c
==============================================================================
--- projects/largeSMP/sys/boot/ia64/efi/efimd.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/efi/efimd.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -230,3 +230,35 @@ ia64_platform_enter(const char *kernel)
return (0);
}
+
+COMMAND_SET(pbvm, "pbvm", "show PBVM details", command_pbvm);
+
+static int
+command_pbvm(int argc, char *argv[])
+{
+ uint64_t limit, pg, start;
+ u_int idx;
+
+ printf("Page table @ %p, size %x\n", ia64_pgtbl, ia64_pgtblsz);
+
+ if (ia64_pgtbl == NULL)
+ return (0);
+
+ limit = ~0;
+ start = ~0;
+ idx = 0;
+ while (ia64_pgtbl[idx] != 0) {
+ pg = ia64_pgtbl[idx];
+ if (pg != limit) {
+ if (start != ~0)
+ printf("%#lx-%#lx\n", start, limit);
+ start = pg;
+ }
+ limit = pg + IA64_PBVM_PAGE_SIZE;
+ idx++;
+ }
+ if (start != ~0)
+ printf("%#lx-%#lx\n", start, limit);
+
+ return (0);
+}
Modified: projects/largeSMP/sys/boot/ia64/efi/main.c
==============================================================================
--- projects/largeSMP/sys/boot/ia64/efi/main.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/efi/main.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -153,9 +153,7 @@ main(int argc, CHAR16 *argv[])
*/
cons_probe();
- printf("\n");
- printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
- printf("(%s, %s)\n", bootprog_maker, bootprog_date);
+ printf("\n%s, Revision %s\n", bootprog_name, bootprog_rev);
find_pal_proc();
@@ -214,6 +212,18 @@ static int
command_quit(int argc, char *argv[])
{
exit(0);
+ /* NOTREACHED */
+ return (CMD_OK);
+}
+
+COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot);
+
+static int
+command_reboot(int argc, char *argv[])
+{
+
+ RS->ResetSystem(EfiResetWarm, EFI_SUCCESS, 0, NULL);
+ /* NOTREACHED */
return (CMD_OK);
}
@@ -585,3 +595,24 @@ command_hcdp(int argc, char *argv[])
printf("<EOT>\n");
return (CMD_OK);
}
+
+COMMAND_SET(about, "about", "about the loader", command_about);
+
+extern uint64_t _start_plabel[];
+
+static int
+command_about(int argc, char *argv[])
+{
+ EFI_LOADED_IMAGE *img;
+
+ printf("%s\n", bootprog_name);
+ printf("revision %s\n", bootprog_rev);
+ printf("built by %s\n", bootprog_maker);
+ printf("built on %s\n", bootprog_date);
+
+ printf("\n");
+
+ BS->HandleProtocol(IH, &imgid, (VOID**)&img);
+ printf("image loaded at %p\n", img->ImageBase);
+ printf("entry at %#lx (%#lx)\n", _start_plabel[0], _start_plabel[1]);
+}
Modified: projects/largeSMP/sys/boot/ia64/efi/version
==============================================================================
--- projects/largeSMP/sys/boot/ia64/efi/version Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/boot/ia64/efi/version Tue Jun 7 08:24:29 2011 (r222812)
@@ -3,6 +3,8 @@ $FreeBSD$
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
file is important. Make sure the current version number is on line 6.
+3.1: Add the about, reboot and pbvm commands.
+ I-cache coherency is maintained.
3.0: Add support for PBVM.
2.2: Create direct mapping based on start address instead of mapping
first 256M.
Modified: projects/largeSMP/sys/ddb/db_command.c
==============================================================================
--- projects/largeSMP/sys/ddb/db_command.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/ddb/db_command.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <sys/signalvar.h>
#include <sys/systm.h>
#include <sys/cons.h>
+#include <sys/conf.h>
#include <sys/watchdog.h>
#include <sys/kernel.h>
@@ -64,6 +65,7 @@ db_addr_t db_last_addr;
db_addr_t db_prev;
db_addr_t db_next;
+static db_cmdfcn_t db_dump;
static db_cmdfcn_t db_fncall;
static db_cmdfcn_t db_gdb;
static db_cmdfcn_t db_halt;
@@ -102,6 +104,7 @@ static struct command db_cmds[] = {
{ "w", db_write_cmd, CS_MORE|CS_SET_DOT, 0 },
{ "delete", db_delete_cmd, 0, 0 },
{ "d", db_delete_cmd, 0, 0 },
+ { "dump", db_dump, 0, 0 },
{ "break", db_breakpoint_cmd, 0, 0 },
{ "b", db_breakpoint_cmd, 0, 0 },
{ "dwatch", db_deletewatch_cmd, 0, 0 },
@@ -526,6 +529,27 @@ db_error(s)
kdb_reenter();
}
+static void
+db_dump(db_expr_t dummy, boolean_t dummy2, db_expr_t dummy3, char *dummy4)
+{
+ int error;
+
+ error = doadump(FALSE);
+ if (error) {
+ db_printf("Cannot dump: ");
+ switch (error) {
+ case EBUSY:
+ db_printf("debugger got invoked while dumping.\n");
+ break;
+ case ENXIO:
+ db_printf("no dump device specified.\n");
+ break;
+ default:
+ db_printf("unknown error (error=%d).\n", error);
+ break;
+ }
+ }
+}
/*
* Call random function:
Modified: projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c
==============================================================================
--- projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -25,8 +25,8 @@
*/
/*
- * This is a driver for watchdog timer present in AMD SB600/SB7xx
- * south bridges and other watchdog timers advertised via WDRT ACPI table.
+ * This is a driver for watchdog timer present in AMD SB600/SB7xx/SB8xx
+ * southbridges.
* Please see the following specifications for the descriptions of the
* registers and flags:
* - AMD SB600 Register Reference Guide, Public Version, Rev. 3.03 (SB600 RRG)
@@ -35,11 +35,13 @@
* http://developer.amd.com/assets/43009_sb7xx_rrg_pub_1.00.pdf
* - AMD SB700/710/750 Register Programming Requirements (RPR)
* http://developer.amd.com/assets/42413_sb7xx_rpr_pub_1.00.pdf
+ * - AMD SB800-Series Southbridges Register Reference Guide (RRG)
+ * http://support.amd.com/us/Embedded_TechDocs/45482.pdf
* Please see the following for Watchdog Resource Table specification:
* - Watchdog Timer Hardware Requirements for Windows Server 2003 (WDRT)
* http://www.microsoft.com/whdc/system/sysinternals/watchdog.mspx
- * AMD SB600/SB7xx watchdog hardware seems to conform to the above,
- * but my system doesn't provide the table.
+ * AMD SB600/SB7xx/SB8xx watchdog hardware seems to conform to the above
+ * specifications, but the table hasn't been spotted in the wild yet.
*/
#include <sys/cdefs.h>
@@ -59,15 +61,15 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcivar.h>
#include <isa/isavar.h>
-/* RRG 2.3.3.1.1, page 161. */
+/* SB7xx RRG 2.3.3.1.1. */
#define AMDSB_PMIO_INDEX 0xcd6
#define AMDSB_PMIO_DATA (PMIO_INDEX + 1)
#define AMDSB_PMIO_WIDTH 2
-/* RRG 2.3.3.2, page 181. */
+/* SB7xx RRG 2.3.3.2. */
#define AMDSB_PM_RESET_STATUS0 0x44
#define AMDSB_PM_RESET_STATUS1 0x45
#define AMDSB_WD_RST_STS 0x02
-/* RRG 2.3.3.2, page 188; RPR 2.36, page 30. */
+/* SB7xx RRG 2.3.3.2, RPR 2.36. */
#define AMDSB_PM_WDT_CTRL 0x69
#define AMDSB_WDT_DISABLE 0x01
#define AMDSB_WDT_RES_MASK (0x02 | 0x04)
@@ -77,7 +79,18 @@ __FBSDID("$FreeBSD$");
#define AMDSB_WDT_RES_1S 0x06
#define AMDSB_PM_WDT_BASE_LSB 0x6c
#define AMDSB_PM_WDT_BASE_MSB 0x6f
-/* RRG 2.3.4, page 223, WDRT. */
+/* SB8xx RRG 2.3.3. */
+#define AMDSB8_PM_WDT_EN 0x48
+#define AMDSB8_WDT_DEC_EN 0x01
+#define AMDSB8_WDT_DISABLE 0x02
+#define AMDSB8_PM_WDT_CTRL 0x4c
+#define AMDSB8_WDT_32KHZ 0x00
+#define AMDSB8_WDT_1HZ 0x03
+#define AMDSB8_WDT_RES_MASK 0x03
+#define AMDSB8_PM_RESET_STATUS0 0xC0
+#define AMDSB8_PM_RESET_STATUS1 0xC1
+#define AMDSB8_WD_RST_STS 0x20
+/* SB7xx RRG 2.3.4, WDRT. */
#define AMDSB_WD_CTRL 0x00
#define AMDSB_WD_RUN 0x01
#define AMDSB_WD_FIRED 0x02
@@ -90,8 +103,9 @@ __FBSDID("$FreeBSD$");
#define AMDSB_WDIO_REG_WIDTH 4
/* WDRT */
#define MAXCOUNT_MIN_VALUE 511
-/* RRG 2.3.1.1, page 122; SB600 RRG 2.3.1.1, page 97. */
-#define AMDSB7xx_SMBUS_DEVID 0x43851002
+/* SB7xx RRG 2.3.1.1, SB600 RRG 2.3.1.1, SB8xx RRG 2.3.1. */
+#define AMDSB_SMBUS_DEVID 0x43851002
+#define AMDSB8_SMBUS_REVID 0x40
#define amdsbwd_verbose_printf(dev, ...) \
do { \
@@ -265,7 +279,7 @@ amdsbwd_identify(driver_t *driver, devic
smb_dev = pci_find_bsf(0, 20, 0);
if (smb_dev == NULL)
return;
- if (pci_get_devid(smb_dev) != AMDSB7xx_SMBUS_DEVID)
+ if (pci_get_devid(smb_dev) != AMDSB_SMBUS_DEVID)
return;
child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "amdsbwd", -1);
@@ -273,15 +287,102 @@ amdsbwd_identify(driver_t *driver, devic
device_printf(parent, "add amdsbwd child failed\n");
}
+
+static void
+amdsbwd_probe_sb7xx(device_t dev, struct resource *pmres, uint32_t *addr)
+{
+ uint32_t val;
+ int i;
+
+ /* Report cause of previous reset for user's convenience. */
+ val = pmio_read(pmres, AMDSB_PM_RESET_STATUS0);
+ if (val != 0)
+ amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val);
+ val = pmio_read(pmres, AMDSB_PM_RESET_STATUS1);
+ if (val != 0)
+ amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val);
+ if ((val & AMDSB_WD_RST_STS) != 0)
+ device_printf(dev, "Previous Reset was caused by Watchdog\n");
+
+ /* Find base address of memory mapped WDT registers. */
+ for (*addr = 0, i = 0; i < 4; i++) {
+ *addr <<= 8;
+ *addr |= pmio_read(pmres, AMDSB_PM_WDT_BASE_MSB - i);
+ }
+ /* Set watchdog timer tick to 1s. */
+ val = pmio_read(pmres, AMDSB_PM_WDT_CTRL);
+ val &= ~AMDSB_WDT_RES_MASK;
+ val |= AMDSB_WDT_RES_10MS;
+ pmio_write(pmres, AMDSB_PM_WDT_CTRL, val);
+
+ /* Enable watchdog device (in stopped state). */
+ val = pmio_read(pmres, AMDSB_PM_WDT_CTRL);
+ val &= ~AMDSB_WDT_DISABLE;
+ pmio_write(pmres, AMDSB_PM_WDT_CTRL, val);
+
+ /*
+ * XXX TODO: Ensure that watchdog decode is enabled
+ * (register 0x41, bit 3).
+ */
+ device_set_desc(dev, "AMD SB600/SB7xx Watchdog Timer");
+}
+
+static void
+amdsbwd_probe_sb8xx(device_t dev, struct resource *pmres, uint32_t *addr)
+{
+ uint32_t val;
+ int i;
+
+ /* Report cause of previous reset for user's convenience. */
+ val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS0);
+ if (val != 0)
+ amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val);
+ val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS1);
+ if (val != 0)
+ amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val);
+ if ((val & AMDSB8_WD_RST_STS) != 0)
+ device_printf(dev, "Previous Reset was caused by Watchdog\n");
+
+ /* Find base address of memory mapped WDT registers. */
+ for (*addr = 0, i = 0; i < 4; i++) {
+ *addr <<= 8;
+ *addr |= pmio_read(pmres, AMDSB8_PM_WDT_EN + 3 - i);
+ }
+ *addr &= ~0x07u;
+
+ /* Set watchdog timer tick to 1s. */
+ val = pmio_read(pmres, AMDSB8_PM_WDT_CTRL);
+ val &= ~AMDSB8_WDT_RES_MASK;
+ val |= AMDSB8_WDT_1HZ;
+ pmio_write(pmres, AMDSB8_PM_WDT_CTRL, val);
+#ifdef AMDSBWD_DEBUG
+ val = pmio_read(pmres, AMDSB8_PM_WDT_CTRL);
+ amdsbwd_verbose_printf(dev, "AMDSB8_PM_WDT_CTRL value = %#02x\n", val);
+#endif
+
+ /*
+ * Enable watchdog device (in stopped state)
+ * and decoding of its address.
+ */
+ val = pmio_read(pmres, AMDSB8_PM_WDT_EN);
+ val &= ~AMDSB8_WDT_DISABLE;
+ val |= AMDSB8_WDT_DEC_EN;
+ pmio_write(pmres, AMDSB8_PM_WDT_EN, val);
+#ifdef AMDSBWD_DEBUG
+ val = pmio_read(pmres, AMDSB8_PM_WDT_EN);
+ device_printf(dev, "AMDSB8_PM_WDT_EN value = %#02x\n", val);
+#endif
+ device_set_desc(dev, "AMD SB8xx Watchdog Timer");
+}
+
static int
amdsbwd_probe(device_t dev)
{
struct resource *res;
+ device_t smb_dev;
uint32_t addr;
- uint32_t val;
int rid;
int rc;
- int i;
/* Do not claim some ISA PnP device by accident. */
if (isa_get_logicalid(dev) != 0)
@@ -301,21 +402,16 @@ amdsbwd_probe(device_t dev)
return (ENXIO);
}
- /* Report cause of previous reset for user's convenience. */
- val = pmio_read(res, AMDSB_PM_RESET_STATUS0);
- if (val != 0)
- amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val);
- val = pmio_read(res, AMDSB_PM_RESET_STATUS1);
- if (val != 0)
- amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val);
- if ((val & AMDSB_WD_RST_STS) != 0)
- device_printf(dev, "Previous Reset was caused by Watchdog\n");
+ smb_dev = pci_find_bsf(0, 20, 0);
+ KASSERT(smb_dev != NULL, ("can't find SMBus PCI device\n"));
+ if (pci_get_revid(smb_dev) < AMDSB8_SMBUS_REVID)
+ amdsbwd_probe_sb7xx(dev, res, &addr);
+ else
+ amdsbwd_probe_sb8xx(dev, res, &addr);
+
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, res);
+ bus_delete_resource(dev, SYS_RES_IOPORT, rid);
- /* Find base address of memory mapped WDT registers. */
- for (addr = 0, i = 0; i < 4; i++) {
- addr <<= 8;
- addr |= pmio_read(res, AMDSB_PM_WDT_BASE_MSB - i);
- }
amdsbwd_verbose_printf(dev, "memory base address = %#010x\n", addr);
rc = bus_set_resource(dev, SYS_RES_MEMORY, 0, addr + AMDSB_WD_CTRL,
AMDSB_WDIO_REG_WIDTH);
@@ -330,36 +426,25 @@ amdsbwd_probe(device_t dev)
return (ENXIO);
}
- /* Set watchdog timer tick to 10ms. */
- val = pmio_read(res, AMDSB_PM_WDT_CTRL);
- val &= ~AMDSB_WDT_RES_MASK;
- val |= AMDSB_WDT_RES_10MS;
- pmio_write(res, AMDSB_PM_WDT_CTRL, val);
-
- /* Enable watchdog device (in stopped state). */
- val = pmio_read(res, AMDSB_PM_WDT_CTRL);
- val &= ~AMDSB_WDT_DISABLE;
- pmio_write(res, AMDSB_PM_WDT_CTRL, val);
-
- /*
- * XXX TODO: Ensure that watchdog decode is enabled
- * (register 0x41, bit 3).
- */
- bus_release_resource(dev, SYS_RES_IOPORT, rid, res);
- bus_delete_resource(dev, SYS_RES_IOPORT, rid);
-
- device_set_desc(dev, "AMD SB600/SB7xx Watchdog Timer");
return (0);
}
static int
amdsbwd_attach_sb(device_t dev, struct amdsbwd_softc *sc)
{
+ device_t smb_dev;
+
sc->max_ticks = UINT16_MAX;
- sc->ms_per_tick = 10;
sc->rid_ctrl = 0;
sc->rid_count = 1;
+ smb_dev = pci_find_bsf(0, 20, 0);
+ KASSERT(smb_dev != NULL, ("can't find SMBus PCI device\n"));
+ if (pci_get_revid(smb_dev) < AMDSB8_SMBUS_REVID)
+ sc->ms_per_tick = 10;
+ else
+ sc->ms_per_tick = 1000;
+
sc->res_ctrl = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
&sc->rid_ctrl, RF_ACTIVE);
if (sc->res_ctrl == NULL) {
@@ -388,6 +473,11 @@ amdsbwd_attach(device_t dev)
if (rc != 0)
goto fail;
+#ifdef AMDSBWD_DEBUG
+ device_printf(dev, "wd ctrl = %#04x\n", wdctrl_read(sc));
+ device_printf(dev, "wd count = %#04x\n", wdcount_read(sc));
+#endif
+
/* Setup initial state of Watchdog Control. */
wdctrl_write(sc, AMDSB_WD_FIRED);
Modified: projects/largeSMP/sys/dev/atkbdc/atkbd.c
==============================================================================
--- projects/largeSMP/sys/dev/atkbdc/atkbd.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/dev/atkbdc/atkbd.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -1097,10 +1097,8 @@ get_typematic(keyboard_t *kbd)
x86regs_t regs;
uint8_t *p;
- if (!(kbd->kb_config & KB_CONF_PROBE_TYPEMATIC))
- return (ENODEV);
-
- if (x86bios_get_intr(0x15) == 0 || x86bios_get_intr(0x16) == 0)
+ if (x86bios_get_intr(0x15) != 0xf000f859 ||
+ x86bios_get_intr(0x16) != 0xf000e82e)
return (ENODEV);
/* Is BIOS system configuration table supported? */
Modified: projects/largeSMP/sys/dev/atkbdc/atkbdreg.h
==============================================================================
--- projects/largeSMP/sys/dev/atkbdc/atkbdreg.h Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/dev/atkbdc/atkbdreg.h Tue Jun 7 08:24:29 2011 (r222812)
@@ -36,7 +36,6 @@
#define KB_CONF_NO_RESET (1 << 1) /* don't reset the keyboard */
#define KB_CONF_ALT_SCANCODESET (1 << 2) /* assume the XT type keyboard */
#define KB_CONF_NO_PROBE_TEST (1 << 3) /* don't test keyboard during probe */
-#define KB_CONF_PROBE_TYPEMATIC (1 << 4) /* probe keyboard typematic */
#ifdef _KERNEL
Modified: projects/largeSMP/sys/ia64/ia64/machdep.c
==============================================================================
--- projects/largeSMP/sys/ia64/ia64/machdep.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/ia64/ia64/machdep.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -786,6 +786,8 @@ ia64_init(void)
ia64_sal_init();
calculate_frequencies();
+ set_cputicker(ia64_get_itc, (u_long)itc_freq * 1000000, 0);
+
/*
* Setup the PCPU data for the bootstrap processor. It is needed
* by printf(). Also, since printf() has critical sections, we
Modified: projects/largeSMP/sys/kern/kern_shutdown.c
==============================================================================
--- projects/largeSMP/sys/kern/kern_shutdown.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/kern/kern_shutdown.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -233,30 +233,32 @@ print_uptime(void)
printf("%lds\n", (long)ts.tv_sec);
}
-static void
-doadump(void)
+int
+doadump(boolean_t textdump)
{
+ boolean_t coredump;
- /*
- * Sometimes people have to call this from the kernel debugger.
- * (if 'panic' can not dump)
- * Give them a clue as to why they can't dump.
- */
- if (dumper.dumper == NULL) {
- printf("Cannot dump. Device not defined or unavailable.\n");
- return;
- }
+ if (dumping)
+ return (EBUSY);
+ if (dumper.dumper == NULL)
+ return (ENXIO);
savectx(&dumppcb);
dumptid = curthread->td_tid;
dumping++;
+
+ coredump = TRUE;
#ifdef DDB
- if (textdump_pending)
+ if (textdump && textdump_pending) {
+ coredump = FALSE;
textdump_dumpsys(&dumper);
- else
+ }
#endif
+ if (coredump)
dumpsys(&dumper);
+
dumping--;
+ return (0);
}
static int
@@ -425,7 +427,7 @@ kern_reboot(int howto)
EVENTHANDLER_INVOKE(shutdown_post_sync, howto);
if ((howto & (RB_HALT|RB_DUMP)) == RB_DUMP && !cold && !dumping)
- doadump();
+ doadump(TRUE);
/* Now that we're going to really halt the system... */
EVENTHANDLER_INVOKE(shutdown_final, howto);
Modified: projects/largeSMP/sys/kern/ksched.c
==============================================================================
--- projects/largeSMP/sys/kern/ksched.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/kern/ksched.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -206,7 +206,7 @@ ksched_setscheduler(struct ksched *ksche
if (param->sched_priority >= 0 &&
param->sched_priority <= (PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE)) {
rtp.type = RTP_PRIO_NORMAL;
- rtp.prio = p4prio_to_rtpprio(param->sched_priority);
+ rtp.prio = p4prio_to_tsprio(param->sched_priority);
rtp_to_pri(&rtp, td);
} else
e = EINVAL;
Modified: projects/largeSMP/sys/kern/subr_prf.c
==============================================================================
--- projects/largeSMP/sys/kern/subr_prf.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/kern/subr_prf.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -163,6 +163,7 @@ uprintf(const char *fmt, ...)
goto out;
}
pca.flags = TOTTY;
+ pca.p_bufr = NULL;
va_start(ap, fmt);
tty_lock(pca.tty);
retval = kvprintf(fmt, putchar, &pca, 10, ap);
@@ -206,6 +207,7 @@ tprintf(struct proc *p, int pri, const c
pca.pri = pri;
pca.tty = tp;
pca.flags = flags;
+ pca.p_bufr = NULL;
va_start(ap, fmt);
if (pca.tty != NULL)
tty_lock(pca.tty);
@@ -234,6 +236,7 @@ ttyprintf(struct tty *tp, const char *fm
va_start(ap, fmt);
pca.tty = tp;
pca.flags = TOTTY;
+ pca.p_bufr = NULL;
retval = kvprintf(fmt, putchar, &pca, 10, ap);
va_end(ap);
return (retval);
Modified: projects/largeSMP/sys/netgraph/ng_nat.c
==============================================================================
--- projects/largeSMP/sys/netgraph/ng_nat.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/netgraph/ng_nat.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -43,6 +43,7 @@
#include <machine/in_cksum.h>
#include <netinet/libalias/alias.h>
+#include <netinet/libalias/alias_local.h>
#include <netgraph/ng_message.h>
#include <netgraph/ng_parse.h>
@@ -696,22 +697,35 @@ ng_nat_rcvdata(hook_p hook, item_p item
KASSERT(m->m_pkthdr.len == ntohs(ip->ip_len),
("ng_nat: ip_len != m_pkthdr.len"));
+ /*
+ * We drop packet when:
+ * 1. libalias returns PKT_ALIAS_ERROR;
+ * 2. For incoming packets:
+ * a) for unresolved fragments;
+ * b) libalias returns PKT_ALIAS_IGNORED and
+ * PKT_ALIAS_DENY_INCOMING flag is set.
+ */
if (hook == priv->in) {
rval = LibAliasIn(priv->lib, c, m->m_len + M_TRAILINGSPACE(m));
- if (rval != PKT_ALIAS_OK &&
- rval != PKT_ALIAS_FOUND_HEADER_FRAGMENT) {
+ if (rval == PKT_ALIAS_ERROR ||
+ rval == PKT_ALIAS_UNRESOLVED_FRAGMENT ||
+ (rval == PKT_ALIAS_IGNORED &&
+ (priv->lib->packetAliasMode &
+ PKT_ALIAS_DENY_INCOMING) != 0)) {
NG_FREE_ITEM(item);
return (EINVAL);
}
} else if (hook == priv->out) {
rval = LibAliasOut(priv->lib, c, m->m_len + M_TRAILINGSPACE(m));
- if (rval != PKT_ALIAS_OK) {
+ if (rval == PKT_ALIAS_ERROR) {
NG_FREE_ITEM(item);
return (EINVAL);
}
} else
panic("ng_nat: unknown hook!\n");
+ if (rval == PKT_ALIAS_RESPOND)
+ m->m_flags |= M_SKIP_FIREWALL;
m->m_pkthdr.len = m->m_len = ntohs(ip->ip_len);
if ((ip->ip_off & htons(IP_OFFMASK)) == 0 &&
Modified: projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c
==============================================================================
--- projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c Tue Jun 7 08:24:29 2011 (r222812)
@@ -262,17 +262,27 @@ ipfw_nat(struct ip_fw_args *args, struct
else
retval = LibAliasOut(t->lib, c,
mcl->m_len + M_TRAILINGSPACE(mcl));
- if (retval == PKT_ALIAS_RESPOND) {
- m->m_flags |= M_SKIP_FIREWALL;
- retval = PKT_ALIAS_OK;
- }
- if (retval != PKT_ALIAS_OK &&
- retval != PKT_ALIAS_FOUND_HEADER_FRAGMENT) {
+
+ /*
+ * We drop packet when:
+ * 1. libalias returns PKT_ALIAS_ERROR;
+ * 2. For incoming packets:
+ * a) for unresolved fragments;
+ * b) libalias returns PKT_ALIAS_IGNORED and
+ * PKT_ALIAS_DENY_INCOMING flag is set.
+ */
+ if (retval == PKT_ALIAS_ERROR ||
+ (args->oif == NULL && (retval == PKT_ALIAS_UNRESOLVED_FRAGMENT ||
+ (retval == PKT_ALIAS_IGNORED &&
+ (t->lib->packetAliasMode & PKT_ALIAS_DENY_INCOMING) != 0)))) {
/* XXX - should i add some logging? */
m_free(mcl);
args->m = NULL;
return (IP_FW_DENY);
}
+
+ if (retval == PKT_ALIAS_RESPOND)
+ m->m_flags |= M_SKIP_FIREWALL;
mcl->m_pkthdr.len = mcl->m_len = ntohs(ip->ip_len);
/*
Modified: projects/largeSMP/sys/netinet/libalias/alias_sctp.h
==============================================================================
--- projects/largeSMP/sys/netinet/libalias/alias_sctp.h Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/netinet/libalias/alias_sctp.h Tue Jun 7 08:24:29 2011 (r222812)
@@ -135,13 +135,13 @@ struct sctp_nat_assoc {
struct in_addr a_addr; /**< alias ip address */
int state; /**< current state of NAT association */
int TableRegister; /**< stores which look up tables association is registered in */
- int exp; /**< timer expiration in seconds from uptime */
+ int exp; /**< timer expiration in seconds from uptime */
int exp_loc; /**< current location in timer_Q */
int num_Gaddr; /**< number of global IP addresses in the list */
LIST_HEAD(sctpGlobalAddresshead,sctp_GlobalAddress) Gaddr; /**< List of global addresses */
- LIST_ENTRY (sctp_nat_assoc) list_L; /**< Linked list of pointers for Local table*/
- LIST_ENTRY (sctp_nat_assoc) list_G; /**< Linked list of pointers for Global table */
- LIST_ENTRY (sctp_nat_assoc) timer_Q; /**< Linked list of pointers for timer Q */
+ LIST_ENTRY (sctp_nat_assoc) list_L; /**< Linked list of pointers for Local table*/
+ LIST_ENTRY (sctp_nat_assoc) list_G; /**< Linked list of pointers for Global table */
+ LIST_ENTRY (sctp_nat_assoc) timer_Q; /**< Linked list of pointers for timer Q */
//Using libalias locking
};
Modified: projects/largeSMP/sys/sys/conf.h
==============================================================================
--- projects/largeSMP/sys/sys/conf.h Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/sys/sys/conf.h Tue Jun 7 08:24:29 2011 (r222812)
@@ -332,6 +332,7 @@ struct dumperinfo {
int set_dumper(struct dumperinfo *);
int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t);
void dumpsys(struct dumperinfo *);
+int doadump(boolean_t);
extern int dumping; /* system is dumping */
#endif /* _KERNEL */
Modified: projects/largeSMP/usr.sbin/rtsold/Makefile
==============================================================================
--- projects/largeSMP/usr.sbin/rtsold/Makefile Tue Jun 7 08:07:41 2011 (r222811)
+++ projects/largeSMP/usr.sbin/rtsold/Makefile Tue Jun 7 08:24:29 2011 (r222812)
@@ -19,6 +19,7 @@ MAN= rtsold.8
MLINKS= rtsold.8 rtsol.8
SRCS= rtsold.c rtsol.c if.c probe.c dump.c rtsock.c
+WARNS?= 3
CFLAGS+= -DHAVE_ARC4RANDOM -DHAVE_POLL_H
DPADD= ${LIBKVM}
LDADD= -lkvm
More information about the svn-src-projects
mailing list