PERFORCE change 151138 for review
Marko Zec
zec at FreeBSD.org
Wed Oct 8 15:28:51 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=151138
Change 151138 by zec at zec_tca51 on 2008/10/08 15:28:27
IFC @ 151135
Affected files ...
.. //depot/projects/vimage/src/sys/amd64/amd64/vm_machdep.c#7 integrate
.. //depot/projects/vimage/src/sys/amd64/conf/GENERIC#21 integrate
.. //depot/projects/vimage/src/sys/arm/at91/at91_mci.c#8 integrate
.. //depot/projects/vimage/src/sys/arm/at91/at91_spi.c#3 integrate
.. //depot/projects/vimage/src/sys/arm/at91/if_ate.c#10 integrate
.. //depot/projects/vimage/src/sys/arm/at91/uart_dev_at91usart.c#8 integrate
.. //depot/projects/vimage/src/sys/boot/arm/at91/boot2/boot2.c#6 integrate
.. //depot/projects/vimage/src/sys/boot/arm/at91/boot2/centipad_board.c#2 integrate
.. //depot/projects/vimage/src/sys/boot/arm/at91/boot2/kb920x_board.c#3 integrate
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/Makefile.inc#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/Makefile#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/arm_init.S#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/boot2.c#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/cf_ata.h#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/ixp425_board.c#1 branch
.. //depot/projects/vimage/src/sys/boot/arm/ixp425/boot2/lib.h#1 branch
.. //depot/projects/vimage/src/sys/boot/forth/loader.conf#15 integrate
.. //depot/projects/vimage/src/sys/boot/i386/libi386/bootinfo64.c#2 integrate
.. //depot/projects/vimage/src/sys/boot/sparc64/loader/main.c#8 integrate
.. //depot/projects/vimage/src/sys/boot/uboot/lib/api_public.h#3 integrate
.. //depot/projects/vimage/src/sys/boot/uboot/lib/glue.c#4 integrate
.. //depot/projects/vimage/src/sys/boot/uboot/lib/glue.h#4 integrate
.. //depot/projects/vimage/src/sys/boot/uboot/lib/net.c#4 integrate
.. //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#25 integrate
.. //depot/projects/vimage/src/sys/compat/linux/linux_misc.c#26 integrate
.. //depot/projects/vimage/src/sys/conf/NOTES#32 integrate
.. //depot/projects/vimage/src/sys/conf/files#38 integrate
.. //depot/projects/vimage/src/sys/conf/newvers.sh#6 integrate
.. //depot/projects/vimage/src/sys/contrib/pf/net/pf.c#17 integrate
.. //depot/projects/vimage/src/sys/dev/ae/if_ae.c#1 branch
.. //depot/projects/vimage/src/sys/dev/ae/if_aereg.h#1 branch
.. //depot/projects/vimage/src/sys/dev/ae/if_aevar.h#1 branch
.. //depot/projects/vimage/src/sys/dev/aha/aha_isa.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/aha/aha_mca.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drmP.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_agpsupport.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_atomic.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_auth.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_bufs.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_context.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_dma.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_drawable.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_drv.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_fops.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_ioctl.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_irq.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_lock.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_memory.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_pci.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_scatter.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_sysctl.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/drm_vm.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_dma.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_drm.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_drv.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_irq.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/i915_suspend.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/drm/mach64_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/mga_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/r128_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/radeon_cp.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/radeon_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/savage_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/sis_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/drm/tdfx_drv.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/hptiop/hptiop.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/hwpmc/pmc_events.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/if_ndis/if_ndis.c#16 integrate
.. //depot/projects/vimage/src/sys/dev/if_ndis/if_ndisvar.h#7 integrate
.. //depot/projects/vimage/src/sys/dev/mii/atphy.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/mii/miidevs#16 integrate
.. //depot/projects/vimage/src/sys/dev/sio/sio.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/twa/tw_osl_freebsd.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/usb/umass.c#13 integrate
.. //depot/projects/vimage/src/sys/dev/usb/usbdevs#30 integrate
.. //depot/projects/vimage/src/sys/fs/cd9660/cd9660_node.c#2 integrate
.. //depot/projects/vimage/src/sys/fs/fdescfs/fdesc_vnops.c#9 integrate
.. //depot/projects/vimage/src/sys/fs/portalfs/portal_vnops.c#6 integrate
.. //depot/projects/vimage/src/sys/fs/procfs/procfs_map.c#5 integrate
.. //depot/projects/vimage/src/sys/i386/conf/GENERIC#24 integrate
.. //depot/projects/vimage/src/sys/i386/i386/vm_machdep.c#11 integrate
.. //depot/projects/vimage/src/sys/kern/imgact_elf.c#9 integrate
.. //depot/projects/vimage/src/sys/kern/subr_firmware.c#4 integrate
.. //depot/projects/vimage/src/sys/kern/subr_witness.c#16 integrate
.. //depot/projects/vimage/src/sys/kern/sys_socket.c#13 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_sockbuf.c#11 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_socket.c#24 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_usrreq.c#19 integrate
.. //depot/projects/vimage/src/sys/modules/Makefile#29 integrate
.. //depot/projects/vimage/src/sys/modules/ae/Makefile#1 branch
.. //depot/projects/vimage/src/sys/modules/wpifw/Makefile#2 integrate
.. //depot/projects/vimage/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#6 integrate
.. //depot/projects/vimage/src/sys/netgraph/netflow/netflow.c#5 integrate
.. //depot/projects/vimage/src/sys/netgraph/netflow/ng_netflow.c#5 integrate
.. //depot/projects/vimage/src/sys/netgraph/netflow/ng_netflow.h#3 integrate
.. //depot/projects/vimage/src/sys/netinet/in_pcb.c#35 integrate
.. //depot/projects/vimage/src/sys/netinet/in_pcb.h#18 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw2.c#50 integrate
.. //depot/projects/vimage/src/sys/netinet/raw_ip.c#30 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_input.c#39 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#54 integrate
.. //depot/projects/vimage/src/sys/netinet/udp_usrreq.c#36 integrate
.. //depot/projects/vimage/src/sys/netinet6/in6_pcb.c#24 integrate
.. //depot/projects/vimage/src/sys/netinet6/udp6_usrreq.c#32 integrate
.. //depot/projects/vimage/src/sys/sys/un.h#2 integrate
Differences ...
==== //depot/projects/vimage/src/sys/amd64/amd64/vm_machdep.c#7 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.258 2008/09/11 18:33:57 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.259 2008/10/05 02:03:54 davidxu Exp $");
#include "opt_isa.h"
#include "opt_cpu.h"
@@ -280,6 +280,14 @@
*/
bcopy(td0->td_frame, td->td_frame, sizeof(struct trapframe));
+ /* If the current thread has the trap bit set (i.e. a debugger had
+ * single stepped the process to the system call), we need to clear
+ * the trap flag from the new frame. Otherwise, the new thread will
+ * receive a (likely unexpected) SIGTRAP when it executes the first
+ * instruction after returning to userland.
+ */
+ td->td_frame->tf_rflags &= ~PSL_T;
+
/*
* Set registers for trampoline to user mode. Leave space for the
* return address on stack. These are the kernel mode register values.
==== //depot/projects/vimage/src/sys/amd64/conf/GENERIC#21 (text+ko) ====
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.507 2008/08/20 08:31:58 ed Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.508 2008/10/03 10:31:31 stas Exp $
cpu HAMMER
ident GENERIC
@@ -200,6 +200,7 @@
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
+device ae # Attansic/Atheros L2 FastEthernet
device age # Attansic/Atheros L1 Gigabit Ethernet
device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device bfe # Broadcom BCM440x 10/100 Ethernet
==== //depot/projects/vimage/src/sys/arm/at91/at91_mci.c#8 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/at91_mci.c,v 1.7 2008/09/30 02:32:41 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/at91_mci.c,v 1.8 2008/10/07 17:23:16 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -175,9 +175,9 @@
/*
* Allocate DMA tags and maps
*/
- err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, MAXPHYS, 1, MAXPHYS,
- BUS_DMA_ALLOCNOW, NULL, NULL, &sc->dmatag);
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, US_SPACE_MAXADDR, NULL, NULL, MAXPHYS, 1,
+ MAXPHYS, BUS_DMA_ALLOCNOW, NULL, NULL, &sc->dmatag);
if (err != 0)
goto out;
==== //depot/projects/vimage/src/sys/arm/at91/at91_spi.c#3 (text) ====
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/at91_spi.c,v 1.6 2007/02/27 17:15:39 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/at91_spi.c,v 1.7 2008/10/07 17:23:16 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -97,9 +97,9 @@
/*
* Allocate DMA tags and maps
*/
- err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, 2058, 1, 2048, BUS_DMA_ALLOCNOW,
- NULL, NULL, &sc->dmatag);
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, 2058, 1,
+ 2048, BUS_DMA_ALLOCNOW, NULL, NULL, &sc->dmatag);
if (err != 0)
goto out;
for (i = 0; i < 4; i++) {
==== //depot/projects/vimage/src/sys/arm/at91/if_ate.c#10 (text) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.28 2008/08/31 18:20:01 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.29 2008/10/07 17:23:16 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -359,9 +359,9 @@
/*
* Allocate DMA tags and maps
*/
- err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, 1, MCLBYTES, 0,
- busdma_lock_mutex, &sc->sc_mtx, &sc->mtag);
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
+ 1, MCLBYTES, 0, busdma_lock_mutex, &sc->sc_mtx, &sc->mtag);
if (err != 0)
goto errout;
for (i = 0; i < ATE_MAX_TX_BUFFERS; i++) {
@@ -377,15 +377,15 @@
/*
* Allocate DMA tags and maps for RX.
*/
- err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, 1, MCLBYTES, 0,
- busdma_lock_mutex, &sc->sc_mtx, &sc->rxtag);
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
+ 1, MCLBYTES, 0, busdma_lock_mutex, &sc->sc_mtx, &sc->rxtag);
if (err != 0)
goto errout;
/* Dma TAG and MAP for the rx descriptors. */
- err = bus_dma_tag_create(NULL, sizeof(eth_rx_desc_t), 0,
- BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), sizeof(eth_rx_desc_t),
+ 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
ATE_MAX_RX_BUFFERS * sizeof(eth_rx_desc_t), 1,
ATE_MAX_RX_BUFFERS * sizeof(eth_rx_desc_t), 0, busdma_lock_mutex,
&sc->sc_mtx, &sc->rx_desc_tag);
==== //depot/projects/vimage/src/sys/arm/at91/uart_dev_at91usart.c#8 (text) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.15 2008/08/02 08:01:56 ed Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.16 2008/10/07 17:23:16 imp Exp $");
#include "opt_comconsole.h"
@@ -350,9 +350,10 @@
/*
* Allocate DMA tags and maps
*/
- err = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
- BUS_SPACE_MAXADDR, NULL, NULL, USART_BUFFER_SIZE, 1,
- USART_BUFFER_SIZE, BUS_DMA_ALLOCNOW, NULL, NULL, &atsc->dmatag);
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ USART_BUFFER_SIZE, 1, USART_BUFFER_SIZE, BUS_DMA_ALLOCNOW, NULL,
+ NULL, &atsc->dmatag);
if (err != 0)
goto errout;
err = bus_dmamap_create(atsc->dmatag, 0, &atsc->tx_map);
==== //depot/projects/vimage/src/sys/boot/arm/at91/boot2/boot2.c#6 (text+ko) ====
@@ -1,4 +1,6 @@
/*-
+ * Copyright (c) 2008 John Hay
+ * Copyright (c) 2006 Warner Losh
* Copyright (c) 1998 Robert Nordier
* All rights reserved.
*
@@ -14,7 +16,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/boot2.c,v 1.8 2007/10/26 21:02:31 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/boot2.c,v 1.12 2008/10/07 17:44:04 imp Exp $");
#include <sys/param.h>
#include <sys/disklabel.h>
@@ -51,7 +53,7 @@
/* 0x13 is reserved for boot programs. */
/* #define RBX_PAUSE 0x14 -p */
/* #define RBX_QUIET 0x15 -q */
-/* #define RBX_NOINTR 0x1c -n */
+#define RBX_NOINTR 0x1c /* -n */
/* 0x1d is reserved for log2(RB_MULTIPLE) and is just misnamed here. */
/* #define RBX_DUAL 0x1d -D */
/* 0x1f is reserved for log2(RB_BOOTINFO). */
@@ -66,20 +68,21 @@
//#define PATH_KERNEL "/boot/kernel/kernel"
#define PATH_KERNEL "/boot/kernel/kernel.gz.tramp"
-#define NOPT 5
+extern uint32_t _end;
+
+#define NOPT 6
#define OPT_SET(opt) (1 << (opt))
#define OPT_CHECK(opt) ((opts) & OPT_SET(opt))
-extern uint32_t _end;
-
-static const char optstr[NOPT] = "agrsv";
+static const char optstr[NOPT] = "agnrsv";
static const unsigned char flags[NOPT] = {
- RBX_ASKNAME,
- RBX_GDB,
- RBX_DFLTROOT,
- RBX_SINGLE,
- RBX_VERBOSE
+ RBX_ASKNAME,
+ RBX_GDB,
+ RBX_NOINTR,
+ RBX_DFLTROOT,
+ RBX_SINGLE,
+ RBX_VERBOSE
};
unsigned dsk_start;
@@ -92,206 +95,299 @@
static int parse(void);
static int xfsread(ino_t, void *, size_t);
static int dskread(void *, unsigned, unsigned);
+#ifdef FIXUP_BOOT_DRV
+static void fixup_boot_drv(caddr_t, int, int, int);
+#endif
#define UFS_SMALL_CGBASE
#include "ufsread.c"
+#ifdef DEBUG
+#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__)
+#else
+#define DPRINTF(fmt, ...)
+#endif
+
static inline int
xfsread(ino_t inode, void *buf, size_t nbyte)
{
- if ((size_t)fsread(inode, buf, nbyte) != nbyte)
- return -1;
- return 0;
+ if ((size_t)fsread(inode, buf, nbyte) != nbyte)
+ return -1;
+ return 0;
}
static inline void
getstr(int c)
{
- char *s;
+ char *s;
- s = cmd;
- if (c == 0)
- c = getc(10000);
- for (;;) {
- switch (c) {
- case 0:
- break;
- case '\177':
- case '\b':
- if (s > cmd) {
- s--;
- printf("\b \b");
- }
- break;
- case '\n':
- case '\r':
- *s = 0;
- return;
- default:
- if (s - cmd < sizeof(cmd) - 1)
- *s++ = c;
- xputchar(c);
+ s = cmd;
+ if (c == 0)
+ c = getc(10000);
+ for (;;) {
+ switch (c) {
+ case 0:
+ break;
+ case '\177':
+ case '\b':
+ if (s > cmd) {
+ s--;
+ printf("\b \b");
+ }
+ break;
+ case '\n':
+ case '\r':
+ *s = 0;
+ return;
+ default:
+ if (s - cmd < sizeof(cmd) - 1)
+ *s++ = c;
+ xputchar(c);
+ }
+ c = getc(10000);
}
- c = getc(10000);
- }
}
int
main(void)
{
- int autoboot, c = 0;
- ino_t ino;
+ int autoboot, c = 0;
+ ino_t ino;
- board_init();
+ dmadat = (void *)(0x20000000 + (16 << 20));
+ board_init();
- dmadat = (void *)(0x20000000 + (16 << 20));
- /* Process configuration file */
+ autoboot = 1;
- autoboot = 1;
+ /* Process configuration file */
+ if ((ino = lookup(PATH_CONFIG)))
+ fsread(ino, cmd, sizeof(cmd));
- if ((ino = lookup(PATH_CONFIG)))
- fsread(ino, cmd, sizeof(cmd));
+ if (*cmd) {
+ if (parse())
+ autoboot = 0;
+ printf("%s: %s\n", PATH_CONFIG, cmd);
+ /* Do not process this command twice */
+ *cmd = 0;
+ }
- if (*cmd) {
- if (parse())
- autoboot = 0;
- printf("%s: %s", PATH_CONFIG, cmd);
- /* Do not process this command twice */
- *cmd = 0;
- }
+ if (*kname == '\0')
+ strcpy(kname, PATH_KERNEL);
- /* Present the user with the boot2 prompt. */
-
- if (*kname == '\0')
- strcpy(kname, PATH_KERNEL);
- for (;;) {
- printf("\nDefault: %s\nboot: ", kname);
- if (!autoboot || (c = getc(2)) != -1)
- getstr(c);
- xputchar('\n');
- autoboot = 0;
- c = 0;
- if (parse())
- xputchar('\a');
-#ifdef XMODEM_DL
- else if (*cmd == '*')
- Update();
-#endif
- else
- load();
- }
+ /* Present the user with the boot2 prompt. */
+ for (;;) {
+ printf("\nDefault: %s\nboot: ", kname);
+ if (!autoboot ||
+ (OPT_CHECK(RBX_NOINTR) == 0 && (c = getc(2)) != 0))
+ getstr(c);
+ xputchar('\n');
+ autoboot = 0;
+ c = 0;
+ if (parse())
+ xputchar('\a');
+ else
+ load();
+ }
}
static void
load(void)
{
- Elf32_Ehdr eh;
- static Elf32_Phdr ep[2];
- caddr_t p;
- ino_t ino;
- uint32_t addr;
- int i, j;
+ Elf32_Ehdr eh;
+ static Elf32_Phdr ep[2];
+ caddr_t p;
+ ino_t ino;
+ uint32_t addr;
+ int i, j;
+#ifdef FIXUP_BOOT_DRV
+ caddr_t staddr;
+ int klen;
- if (!(ino = lookup(kname))) {
- if (!ls)
- printf("No %s\n", kname);
- return;
- }
- if (xfsread(ino, &eh, sizeof(eh)))
- return;
- if (!IS_ELF(eh)) {
- printf("Invalid %s\n", "format");
- return;
- }
- fs_off = eh.e_phoff;
- for (j = i = 0; i < eh.e_phnum && j < 2; i++) {
- if (xfsread(ino, ep + j, sizeof(ep[0])))
- return;
- if (ep[j].p_type == PT_LOAD)
- j++;
- }
- for (i = 0; i < 2; i++) {
- p = (caddr_t)ep[i].p_paddr;
- fs_off = ep[i].p_offset;
- if (xfsread(ino, p, ep[i].p_filesz))
- return;
- }
- addr = eh.e_entry;
- ((void(*)(int))addr)(opts & RBX_MASK);
+ staddr = (caddr_t)0xffffffff;
+ klen = 0;
+#endif
+ if (!(ino = lookup(kname))) {
+ if (!ls)
+ printf("No %s\n", kname);
+ return;
+ }
+ if (xfsread(ino, &eh, sizeof(eh)))
+ return;
+ if (!IS_ELF(eh)) {
+ printf("Invalid %s\n", "format");
+ return;
+ }
+ fs_off = eh.e_phoff;
+ for (j = i = 0; i < eh.e_phnum && j < 2; i++) {
+ if (xfsread(ino, ep + j, sizeof(ep[0])))
+ return;
+ if (ep[j].p_type == PT_LOAD)
+ j++;
+ }
+ for (i = 0; i < 2; i++) {
+ p = (caddr_t)ep[i].p_paddr;
+ fs_off = ep[i].p_offset;
+#ifdef FIXUP_BOOT_DRV
+ if (staddr == (caddr_t)0xffffffff)
+ staddr = p;
+ klen += ep[i].p_filesz;
+#endif
+ if (xfsread(ino, p, ep[i].p_filesz))
+ return;
+ }
+ addr = eh.e_entry;
+#ifdef FIXUP_BOOT_DRV
+ fixup_boot_drv(staddr, klen, bootslice, bootpart);
+#endif
+ ((void(*)(int))addr)(opts & RBX_MASK);
}
static int
parse()
{
- char *arg = cmd;
- char *ep, *p;
- int c, i;
+ char *arg = cmd;
+ char *ep, *p;
+ int c, i;
- while ((c = *arg++)) {
- if (c == ' ' || c == '\t' || c == '\n')
- continue;
- for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++);
- ep = p;
- if (*p)
- *p++ = 0;
- if (c == '-') {
- while ((c = *arg++)) {
- for (i = 0; c != optstr[i]; i++)
- if (i == NOPT - 1)
- return -1;
- opts ^= OPT_SET(flags[i]);
- }
- } else {
- arg--;
- if ((i = ep - arg)) {
- if ((size_t)i >= sizeof(kname))
- return -1;
- memcpy(kname, arg, i + 1);
- }
+ while ((c = *arg++)) {
+ if (c == ' ' || c == '\t' || c == '\n')
+ continue;
+ for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++);
+ ep = p;
+ if (*p)
+ *p++ = 0;
+ if (c == '-') {
+ while ((c = *arg++)) {
+ for (i = 0; c != optstr[i]; i++)
+ if (i == NOPT - 1)
+ return -1;
+ opts ^= OPT_SET(flags[i]);
+ }
+ } else {
+ arg--;
+ if ((i = ep - arg)) {
+ if ((size_t)i >= sizeof(kname))
+ return -1;
+ memcpy(kname, arg, i + 1);
+ }
+ }
+ arg = p;
}
- arg = p;
- }
- return 0;
+ return 0;
}
static int
dskread(void *buf, unsigned lba, unsigned nblk)
{
- struct dos_partition *dp;
- struct disklabel *d;
- char *sec;
- int i;
+ struct dos_partition *dp;
+ struct disklabel *d;
+ char *sec;
+ int i;
- if (!dsk_meta) {
- sec = dmadat->secbuf;
- dsk_start = 0;
- if (drvread(sec, DOSBBSECTOR, 1))
- return -1;
- dp = (void *)(sec + DOSPARTOFF);
- for (i = 0; i < NDOSPART; i++) {
- if (dp[i].dp_typ == DOSPTYP_386BSD)
- break;
+ if (!dsk_meta) {
+ sec = dmadat->secbuf;
+ dsk_start = 0;
+ if (drvread(sec, DOSBBSECTOR, 1))
+ return -1;
+ dp = (void *)(sec + DOSPARTOFF);
+ for (i = 0; i < NDOSPART; i++) {
+ if (dp[i].dp_typ == DOSPTYP_386BSD)
+ break;
+ }
+ if (i == NDOSPART)
+ return -1;
+ /*
+ * Although dp_start is aligned within the disk
+ * partition structure, DOSPARTOFF is 446, which is
+ * only word (2) aligned, not longword (4) aligned.
+ * Cope by using memcpy to fetch the start of this
+ * partition.
+ */
+ memcpy(&dsk_start, &dp[1].dp_start, 4);
+ if (drvread(sec, dsk_start + LABELSECTOR, 1))
+ return -1;
+ d = (void *)(sec + LABELOFFSET);
+ if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) {
+ printf("Invalid %s\n", "label");
+ return -1;
+ }
+ if (!d->d_partitions[0].p_size) {
+ printf("Invalid %s\n", "partition");
+ return -1;
+ }
+ dsk_start += d->d_partitions[0].p_offset;
+ dsk_start -= d->d_partitions[RAW_PART].p_offset;
+ dsk_meta++;
}
- if (i == NDOSPART)
- return -1;
- // Although dp_start is aligned within the disk partition structure,
- // DOSPARTOFF is 446, which is only word (2) aligned, not longword (4)
- // aligned. Cope by using memcpy to fetch the start of this partition.
- memcpy(&dsk_start, &dp[1].dp_start, 4);
- if (drvread(sec, dsk_start + LABELSECTOR, 1))
- return -1;
- d = (void *)(sec + LABELOFFSET);
- if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) {
- printf("Invalid %s\n", "label");
- return -1;
+ return drvread(buf, dsk_start + lba, nblk);
+}
+
+#ifdef FIXUP_BOOT_DRV
+/*
+ * fixup_boot_drv() will try to find the ROOTDEVNAME spec in the kernel
+ * and change it to what was specified on the comandline or /boot.conf
+ * file or to what was encountered on the disk. It will try to handle 3
+ * different disk layouts, raw (dangerously dedicated), slice only and
+ * slice + partition. It will look for the following strings in the
+ * kernel, but if it is one of the first three, the string in the kernel
+ * must use the correct form to match the actual disk layout:
+ * - ufs:ad0a
+ * - ufs:ad0s1
+ * - ufs:ad0s1a
+ * - ufs:ROOTDEVNAME
+ * In the case of the first three strings, only the "a" at the end and
+ * the "1" after the "s" will be modified, if they exist. The string
+ * length will not be changed. In the case of the last string, the
+ * whole string will be built up and nul, '\0' terminated.
+ */
+static void
+fixup_boot_drv(caddr_t addr, int klen, int bs, int bp)
+{
+ const u_int8_t op[] = "ufs:ROOTDEVNAME";
+ const u_int8_t op2[] = "ufs:ad0";
+ u_int8_t *p, *ps;
+
+ DPRINTF("fixup_boot_drv: 0x%x, %d, slice %d, partition %d\n",
+ (int)addr, klen, bs, bp);
+ if (bs > 4)
+ return;
+ if (bp > 7)
+ return;
+ ps = memmem(addr, klen, op, sizeof(op));
+ if (ps != NULL) {
+ p = ps + 4; /* past ufs: */
+ DPRINTF("Found it at 0x%x\n", (int)ps);
+ p[0] = 'a'; p[1] = 'd'; p[2] = '0'; /* ad0 */
+ p += 3;
+ if (bs > 0) {
+ /* append slice */
+ *p++ = 's';
+ *p++ = bs + '0';
+ }
+ if (disk_layout != DL_SLICE) {
+ /* append partition */
+ *p++ = bp + 'a';
+ }
+ *p = '\0';
+ } else {
+ ps = memmem(addr, klen, op2, sizeof(op2) - 1);
+ if (ps != NULL) {
+ p = ps + sizeof(op2) - 1;
+ DPRINTF("Found it at 0x%x\n", (int)ps);
+ if (*p == 's') {
+ /* fix slice */
+ p++;
+ *p++ = bs + '0';
+ }
+ if (*p == 'a')
+ *p = bp + 'a';
+ }
}
- if (!d->d_partitions[0].p_size) {
- printf("Invalid %s\n", "partition");
- return -1;
+ if (ps == NULL) {
+ printf("Could not locate \"%s\" to fix kernel boot device, "
+ "check ROOTDEVNAME is set\n", op);
+ return;
}
- dsk_start += d->d_partitions[0].p_offset;
- dsk_start -= d->d_partitions[RAW_PART].p_offset;
- dsk_meta++;
- }
- return drvread(buf, dsk_start + lba, nblk);
+ DPRINTF("Changed boot device to %s\n", ps);
}
+#endif
==== //depot/projects/vimage/src/sys/boot/arm/at91/boot2/centipad_board.c#2 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/centipad_board.c,v 1.1 2007/07/13 14:27:04 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/centipad_board.c,v 1.2 2008/10/05 23:39:28 imp Exp $");
#include <sys/param.h>
@@ -51,11 +51,6 @@
}
void
-Update(void)
-{
-}
-
-void
board_init(void)
{
InitEEPROM();
==== //depot/projects/vimage/src/sys/boot/arm/at91/boot2/kb920x_board.c#3 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/kb920x_board.c,v 1.4 2007/07/13 14:27:04 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/arm/at91/boot2/kb920x_board.c,v 1.5 2008/10/05 23:39:28 imp Exp $");
#include <sys/param.h>
@@ -49,11 +49,6 @@
}
void
-Update(void)
-{
-}
-
-void
board_init(void)
{
InitEEPROM();
==== //depot/projects/vimage/src/sys/boot/forth/loader.conf#15 (text+ko) ====
@@ -6,7 +6,7 @@
#
# All arguments must be in double quotes.
#
-# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.133 2008/09/10 18:36:58 jhb Exp $
+# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.134 2008/10/04 11:49:53 stas Exp $
##############################################################
### Basic configuration options ############################
@@ -208,6 +208,7 @@
##############################################################
miibus_load="NO" # miibus support, needed for some drivers
+if_ae_load="NO" # Attansic/Atheros L2 FastEthernet
if_age_load="NO" # Attansic/Atheros L1 Gigabit Ethernet
if_an_load="NO" # Aironet 4500/4800 802.11 wireless NICs
if_ar_load="NO" # Digi SYNC/570i
==== //depot/projects/vimage/src/sys/boot/i386/libi386/bootinfo64.c#2 (text+ko) ====
@@ -25,13 +25,16 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/bootinfo64.c,v 1.37 2006/09/29 20:27:41 ru Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/bootinfo64.c,v 1.38 2008/10/07 14:05:42 jhb Exp $");
#include <stand.h>
#include <sys/param.h>
#include <sys/reboot.h>
#include <sys/linker.h>
#include <machine/bootinfo.h>
+#include <machine/cpufunc.h>
+#include <machine/psl.h>
+#include <machine/specialreg.h>
#include "bootstrap.h"
#include "libi386.h"
#include "btxv86.h"
@@ -124,7 +127,45 @@
}
/*
- * Load the information expected by an i386 kernel.
+ * Check to see if this CPU supports long mode.
+ */
+static int
+bi_checkcpu(void)
+{
+ char *cpu_vendor;
+ int vendor[3];
+ int eflags, regs[4];
+
+ /* Check for presence of "cpuid". */
+ eflags = read_eflags();
+ write_eflags(eflags ^ PSL_ID);
+ if (!((eflags ^ read_eflags()) & PSL_ID))
+ return (0);
+
+ /* Fetch the vendor string. */
+ do_cpuid(0, regs);
+ vendor[0] = regs[1];
+ vendor[1] = regs[3];
+ vendor[2] = regs[2];
+ cpu_vendor = (char *)vendor;
+
+ /* Check for vendors that support AMD features. */
+ if (strncmp(cpu_vendor, "GenuineIntel", 12) != 0 &&
+ strncmp(cpu_vendor, "AuthenticAMD", 12) != 0)
+ return (0);
+
+ /* Has to support AMD features. */
+ do_cpuid(0x80000000, regs);
+ if (!(regs[0] >= 0x80000001))
+ return (0);
+
+ /* Check for long mode. */
+ do_cpuid(0x80000001, regs);
+ return (regs[3] & AMDID_LM);
+}
+
+/*
+ * Load the information expected by an amd64 kernel.
*
* - The 'boothowto' argument is constructed
* - The 'bootdev' argument is constructed
@@ -145,6 +186,11 @@
char *rootdevname;
int howto;
+ if (!bi_checkcpu()) {
+ printf("CPU doesn't support long mode\n");
+ return (EINVAL);
+ }
+
howto = bi_getboothowto(args);
/*
==== //depot/projects/vimage/src/sys/boot/sparc64/loader/main.c#8 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/sparc64/loader/main.c,v 1.38 2008/09/10 20:07:08 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/sparc64/loader/main.c,v 1.39 2008/10/05 14:00:44 marius Exp $");
/*
* FreeBSD/sparc64 kernel loader - machine dependent part
@@ -261,7 +261,7 @@
sparc64_autoload(void)
{
- printf("nothing to autoload yet.\n");
+ setenv("hw.ata.atapi_dma", "0", 0);
return (0);
}
==== //depot/projects/vimage/src/sys/boot/uboot/lib/api_public.h#3 (text+ko) ====
@@ -48,7 +48,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/boot/uboot/lib/api_public.h,v 1.3 2008/03/13 17:54:21 obrien Exp $
+ * $FreeBSD: src/sys/boot/uboot/lib/api_public.h,v 1.5 2008/10/04 13:19:15 raj Exp $
*
* This file needs to be kept in sync with U-Boot reference:
* http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=include/api_public.h
@@ -62,6 +62,7 @@
#define API_ENOMEM 3 /* no memory */
#define API_EBUSY 4 /* busy, occupied etc. */
#define API_EIO 5 /* I/O error */
+#define API_ESYSC 6 /* syscall error */
typedef int (*scp_t)(int, int *, ...);
@@ -117,7 +118,7 @@
#undef CFG_64BIT_LBA
#ifdef CFG_64BIT_LBA
-typedef u_int64_t lbasize_t;
+typedef uint64_t lbasize_t;
#else
typedef unsigned long lbasize_t;
#endif
==== //depot/projects/vimage/src/sys/boot/uboot/lib/glue.c#4 (text+ko) ====
@@ -25,7 +25,7 @@
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list