annotate packages/hal/arm/arch/current/src/redboot_linux_exec.c @ 1661:431860e2ee69

Improve Linux 'exec' to be sensitive to load failures
author gthomas
date Thu, 27 May 2004 13:22:05 +0000
parents fa95d14326ad
children 30d12b1c7bb0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
2 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
3 // redboot_linux_boot.c
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
4 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
5 // RedBoot command to boot Linux on ARM platforms
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
6 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
7 //==========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
610
9c94e977cc10 fix syntax error
msalter
parents: 607
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
1661
431860e2ee69 Improve Linux 'exec' to be sensitive to load failures
gthomas
parents: 821
diff changeset
12 // Copyright (C) 2003, 2004 Gary Thomas
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
13 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
14 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
15 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
16 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
17 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
21 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
22 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
23 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
26 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
27 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
28 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
29 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
30 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
31 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
32 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
33 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
34 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
35 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
36 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
38 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
39 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
40 //####ECOSGPLCOPYRIGHTEND####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
41 //####OTHERCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
42 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
43 // The structure definitions below are taken from include/asm-arm/setup.h in
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
44 // the Linux kernel, Copyright (C) 1997-1999 Russell King. Their presence
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
45 // here is for the express purpose of communication with the Linux kernel
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
46 // being booted and is considered 'fair use' by the original author and
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
47 // are included with his permission.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
48 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
49 //####OTHERCOPYRIGHTEND####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
50 //==========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
51 //#####DESCRIPTIONBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
52 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
53 // Author(s): gthomas
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
54 // Contributors: gthomas, jskov,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
55 // Russell King <rmk@arm.linux.org.uk>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
56 // Date: 2001-02-20
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
57 // Purpose:
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
58 // Description:
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
59 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
60 // This code is part of RedBoot (tm).
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
61 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
62 //####DESCRIPTIONEND####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
63 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
64 //==========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
65
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
66 #include <pkgconf/hal.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
67 #include <redboot.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
68
821
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
69 #ifdef CYGPKG_IO_ETH_DRIVERS
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
70 #include <cyg/io/eth/eth_drv.h> // Logical driver interfaces
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
71 #endif
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
72
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
73 #include <cyg/hal/hal_intr.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
74 #include <cyg/hal/hal_cache.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
75 #include CYGHWR_MEMORY_LAYOUT_H
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
76
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
77 #include <cyg/hal/hal_io.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
78
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
79 #ifndef CYGARC_PHYSICAL_ADDRESS
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
80 # error
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
81 # define CYGARC_PHYSICAL_ADDRESS(x) (x)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
82 #endif
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
83
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
84 // FIXME: This should be a CDL variable, and CYGSEM_REDBOOT_ARM_LINUX_BOOT
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
85 // active_if CYGHWR_HAL_ARM_REDBOOT_MACHINE_TYPE>0
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
86 #ifdef HAL_PLATFORM_MACHINE_TYPE
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
87 #define CYGHWR_REDBOOT_ARM_MACHINE_TYPE HAL_PLATFORM_MACHINE_TYPE
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
88
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
89 // Exported CLI function(s)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
90 static void do_exec(int argc, char *argv[]);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
91 RedBoot_cmd("exec",
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
92 "Execute an image - with MMU off",
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
93 "[-w timeout] [-b <load addr> [-l <length>]]\n"
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
94 " [-r <ramdisk addr> [-s <ramdisk length>]]\n"
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
95 " [-c \"kernel command line\"] [<entry_point>]",
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
96 do_exec
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
97 );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
98
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
99 // CYGARC_HAL_MMU_OFF inserts code to turn off MMU and jump to a physical
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
100 // address. Some ARM implementations may need special handling and define
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
101 // their own version.
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
102 #ifndef CYGARC_HAL_MMU_OFF
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
103 #define CYGARC_HAL_MMU_OFF(__paddr__) \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
104 " mcr p15,0,r0,c7,c10,4\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
105 " mcr p15,0,r0,c7,c7,0\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
106 " mrc p15,0,r0,c1,c0,0\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
107 " bic r0,r0,#0xd\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
108 " bic r0,r0,#0x1000\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
109 " mcr p15,0,r0,c1,c0,0\n" \
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
110 " mov pc," #__paddr__ "\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
111 #endif
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
112
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
113 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
114 // Parameter info for Linux kernel
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
115 // ** C A U T I O N ** This setup must match "asm-arm/setup.h"
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
116 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
117 // Info is passed at a fixed location, using a sequence of tagged
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
118 // data entries.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
119 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
120
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
121 typedef unsigned long u32;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
122 typedef unsigned short u16;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
123 typedef unsigned char u8;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
124
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
125 //=========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
126 // From Linux <asm-arm/setup.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
127
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
128 #define ATAG_NONE 0x00000000
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
129 struct tag_header {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
130 u32 size; // Size of tag (hdr+data) in *longwords*
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
131 u32 tag;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
132 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
133
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
134 #define ATAG_CORE 0x54410001
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
135 struct tag_core {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
136 u32 flags; /* bit 0 = read-only */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
137 u32 pagesize;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
138 u32 rootdev;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
139 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
140
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
141 #define ATAG_MEM 0x54410002
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
142 struct tag_mem32 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
143 u32 size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
144 u32 start;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
145 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
146
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
147 #define ATAG_VIDEOTEXT 0x54410003
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
148 struct tag_videotext {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
149 u8 x;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
150 u8 y;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
151 u16 video_page;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
152 u8 video_mode;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
153 u8 video_cols;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
154 u16 video_ega_bx;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
155 u8 video_lines;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
156 u8 video_isvga;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
157 u16 video_points;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
158 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
159
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
160 #define ATAG_RAMDISK 0x54410004
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
161 struct tag_ramdisk {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
162 u32 flags; /* b0 = load, b1 = prompt */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
163 u32 size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
164 u32 start;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
165 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
166
498
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
167 /*
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
168 * this one accidentally used virtual addresses - as such,
524
9ffbb7d747b0 Fix spelling typo in comment
jlarmour
parents: 498
diff changeset
169 * its deprecated.
498
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
170 */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
171 #define ATAG_INITRD 0x54410005
498
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
172
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
173 /* describes where the compressed ramdisk image lives (physical address) */
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
174 #define ATAG_INITRD2 0x54420005
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
175 struct tag_initrd {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
176 u32 start;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
177 u32 size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
178 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
179
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
180 #define ATAG_SERIAL 0x54410006
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
181 struct tag_serialnr {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
182 u32 low;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
183 u32 high;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
184 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
185
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
186 #define ATAG_REVISION 0x54410007
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
187 struct tag_revision {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
188 u32 rev;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
189 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
190
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
191 #define ATAG_VIDEOLFB 0x54410008
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
192 struct tag_videolfb {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
193 u16 lfb_width;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
194 u16 lfb_height;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
195 u16 lfb_depth;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
196 u16 lfb_linelength;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
197 u32 lfb_base;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
198 u32 lfb_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
199 u8 red_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
200 u8 red_pos;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
201 u8 green_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
202 u8 green_pos;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
203 u8 blue_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
204 u8 blue_pos;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
205 u8 rsvd_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
206 u8 rsvd_pos;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
207 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
209 #define ATAG_CMDLINE 0x54410009
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
210 struct tag_cmdline {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
211 char cmdline[1];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
212 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
213
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
214 #define ATAG_ACORN 0x41000101
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
215 struct tag_acorn {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
216 u32 memc_control_reg;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
217 u32 vram_pages;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
218 u8 sounddefault;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
219 u8 adfsdrives;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
220 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
221
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
222 #define ATAG_MEMCLK 0x41000402
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
223 struct tag_memclk {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
224 u32 fmemclk;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
225 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
226
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
227 struct tag {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
228 struct tag_header hdr;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
229 union {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
230 struct tag_core core;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
231 struct tag_mem32 mem;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
232 struct tag_videotext videotext;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
233 struct tag_ramdisk ramdisk;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
234 struct tag_initrd initrd;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
235 struct tag_serialnr serialnr;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
236 struct tag_revision revision;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
237 struct tag_videolfb videolfb;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
238 struct tag_cmdline cmdline;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
239
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
240 /*
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
241 * Acorn specific
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
242 */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
243 struct tag_acorn acorn;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
244
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
245 /*
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
246 * DC21285 specific
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
247 */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
248 struct tag_memclk memclk;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
249 } u;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
250 };
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
251
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
252 // End of inclusion from <asm-arm/setup.h>
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
253 //=========================================================================
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
254
600
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
255 // Default memory layout - can be overridden by platform, typically in
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
256 // <cyg/hal/plf_io.h>
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
257 #ifndef CYGHWR_REDBOOT_LINUX_ATAG_MEM
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
258 #define CYGHWR_REDBOOT_LINUX_ATAG_MEM(_p_) \
607
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
259 CYG_MACRO_START \
600
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
260 /* Next ATAG_MEM. */ \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
261 _p_->hdr.size = (sizeof(struct tag_mem32) + sizeof(struct tag_header))/sizeof(long); \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
262 _p_->hdr.tag = ATAG_MEM; \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
263 /* Round up so there's only one bit set in the memory size. \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
264 * Don't double it if it's already a power of two, though. \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
265 */ \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
266 _p_->u.mem.size = 1<<hal_msbindex(CYGMEM_REGION_ram_SIZE); \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
267 if (_p_->u.mem.size < CYGMEM_REGION_ram_SIZE) \
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
268 _p_->u.mem.size <<= 1; \
607
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
269 _p_->u.mem.start = CYGARC_PHYSICAL_ADDRESS(CYGMEM_REGION_ram); \
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
270 CYG_MACRO_END
600
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
271 #endif
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
272
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
273
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
274 // Round up a quantity to a longword (32 bit) length
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
275 #define ROUNDUP(n) (((n)+3)&~3)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
276
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
277 static void
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
278 do_exec(int argc, char *argv[])
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
279 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
280 unsigned long entry;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
281 unsigned long oldints;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
282 bool wait_time_set;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
283 int wait_time, res;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
284 bool base_addr_set, length_set, cmd_line_set;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
285 bool ramdisk_addr_set, ramdisk_size_set;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
286 unsigned long base_addr, length;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
287 unsigned long ramdisk_addr, ramdisk_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
288 struct option_info opts[6];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
289 char line[8];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
290 char *cmd_line;
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
291 struct tag *params = (struct tag *)CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS;
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
292 extern char __tramp_start__[], __tramp_end__[];
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
293
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
294 // Default physical entry point for Linux is kernel base.
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
295 entry = (unsigned long)CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS;
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
296
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
297 base_addr = load_address;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
298 length = load_address_end - load_address;
498
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
299 // Round length up to the next quad word
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
300 length = (length + 3) & ~0x3;
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
301
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
302 ramdisk_size = 4096*1024;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
303 init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
304 (void **)&wait_time, (bool *)&wait_time_set, "wait timeout");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
305 init_opts(&opts[1], 'b', true, OPTION_ARG_TYPE_NUM,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
306 (void **)&base_addr, (bool *)&base_addr_set, "base address");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
307 init_opts(&opts[2], 'l', true, OPTION_ARG_TYPE_NUM,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
308 (void **)&length, (bool *)&length_set, "length");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
309 init_opts(&opts[3], 'c', true, OPTION_ARG_TYPE_STR,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
310 (void **)&cmd_line, (bool *)&cmd_line_set, "kernel command line");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
311 init_opts(&opts[4], 'r', true, OPTION_ARG_TYPE_NUM,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
312 (void **)&ramdisk_addr, (bool *)&ramdisk_addr_set, "ramdisk_addr");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
313 init_opts(&opts[5], 's', true, OPTION_ARG_TYPE_NUM,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
314 (void **)&ramdisk_size, (bool *)&ramdisk_size_set, "ramdisk_size");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
315 if (!scan_opts(argc, argv, 1, opts, 6, (void *)&entry, OPTION_ARG_TYPE_NUM, "[physical] starting address"))
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
316 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
317 return;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
318 }
1661
431860e2ee69 Improve Linux 'exec' to be sensitive to load failures
gthomas
parents: 821
diff changeset
319 if (entry == (unsigned long)NO_MEMORY) {
431860e2ee69 Improve Linux 'exec' to be sensitive to load failures
gthomas
parents: 821
diff changeset
320 diag_printf("Can't execute Linux - invalid entry address\n");
431860e2ee69 Improve Linux 'exec' to be sensitive to load failures
gthomas
parents: 821
diff changeset
321 return;
431860e2ee69 Improve Linux 'exec' to be sensitive to load failures
gthomas
parents: 821
diff changeset
322 }
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
323
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
324 // Set up parameters to pass to kernel
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
325
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
326 // CORE tag must be present & first
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
327 params->hdr.size = (sizeof(struct tag_core) + sizeof(struct tag_header))/sizeof(long);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
328 params->hdr.tag = ATAG_CORE;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
329 params->u.core.flags = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
330 params->u.core.pagesize = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
331 params->u.core.rootdev = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
332 params = (struct tag *)((long *)params + params->hdr.size);
607
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
333
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
334 // Fill in the details of the memory layout
610
9c94e977cc10 fix syntax error
msalter
parents: 607
diff changeset
335 CYGHWR_REDBOOT_LINUX_ATAG_MEM(params);
607
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
336
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
337 params = (struct tag *)((long *)params + params->hdr.size);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
338 if (ramdisk_addr_set) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
339 params->hdr.size = (sizeof(struct tag_initrd) + sizeof(struct tag_header))/sizeof(long);
498
ae6f2695b07a Misc fixes to Linux boot code - from Patrick Doyle
gthomas
parents: 212
diff changeset
340 params->hdr.tag = ATAG_INITRD2;
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
341 params->u.initrd.start = CYGARC_PHYSICAL_ADDRESS(ramdisk_addr);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
342 params->u.initrd.size = ramdisk_size;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
343 params = (struct tag *)((long *)params + params->hdr.size);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
344 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
345 if (cmd_line_set) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
346 params->hdr.size = (ROUNDUP(strlen(cmd_line)) + sizeof(struct tag_header))/sizeof(long);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
347 params->hdr.tag = ATAG_CMDLINE;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
348 strcpy(params->u.cmdline.cmdline, cmd_line);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
349 params = (struct tag *)((long *)params + params->hdr.size);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
350 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
351 // Mark end of parameter list
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
352 params->hdr.size = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
353 params->hdr.tag = ATAG_NONE;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
354
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
355 if (wait_time_set) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
356 int script_timeout_ms = wait_time * 1000;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
357 #ifdef CYGFUN_REDBOOT_BOOT_SCRIPT
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
358 unsigned char *hold_script = script;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
359 script = (unsigned char *)0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
360 #endif
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
361 diag_printf("About to start execution at %p - abort with ^C within %d seconds\n",
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
362 (void *)entry, wait_time);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
363 while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
364 res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
365 if (res == _GETS_CTRLC) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
366 #ifdef CYGFUN_REDBOOT_BOOT_SCRIPT
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
367 script = hold_script; // Re-enable script
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
368 #endif
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
369 return;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
370 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
371 script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
372 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
373 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
374 if (!base_addr_set) {
600
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
375 if ((base_addr == 0) || (length == 0)) {
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
376 // Probably not valid - don't try it
607
bb6fe957336b Add CYG_MACRO_START/END markers for completeness.
gthomas
parents: 600
diff changeset
377 diag_printf("Base address unknown - use \"-b\" option\n");
600
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
378 return;
a4f75ab7f357 Provide platform specific override for Linux memory layout.
gthomas
parents: 580
diff changeset
379 }
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
380 diag_printf("Using base address %p and length %p\n",
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
381 (void*)base_addr, (void*)length);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
382 } else if (base_addr_set && !length_set) {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
383 diag_printf("Length required for non-standard base address\n");
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
384 return;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
385 }
821
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
386
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
387 #ifdef CYGPKG_IO_ETH_DRIVERS
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
388 eth_drv_stop();
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
389 #endif
fa95d14326ad linux exec fix
msalter
parents: 610
diff changeset
390
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
391 HAL_DISABLE_INTERRUPTS(oldints);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
392 HAL_DCACHE_SYNC();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
393 HAL_ICACHE_DISABLE();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
394 HAL_DCACHE_DISABLE();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
395 HAL_DCACHE_SYNC();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
396 HAL_ICACHE_INVALIDATE_ALL();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
397 HAL_DCACHE_INVALIDATE_ALL();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
398
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
399 // Tricky code. We are currently running with the MMU on and the
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
400 // memory map possibly convoluted from 1-1. The trampoline code
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
401 // between labels __tramp_start__ and __tramp_end__ must be copied
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
402 // to RAM and then executed at the non-mapped address.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
403 //
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
404 // This magic was created in order to be able to execute standard
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
405 // Linux kernels with as little change/perturberance as possible.
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
406
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
407 // copy the trampline code
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
408 memcpy((char *)CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS,
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
409 __tramp_start__,
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
410 __tramp_end__ - __tramp_start__);
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
411
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
412 asm volatile (
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
413 CYGARC_HAL_MMU_OFF(%5)
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
414 "__tramp_start__:\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
415 " cmp %1,%4;\n" // Default kernel load address. Relocate
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
416 " beq 2f;\n" // kernel image there if necessary, and
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
417 " cmp %2,#0;\n" // if size is non-zero
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
418 " beq 2f;\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
419 "1:\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
420 " ldr r0,[%1],#4;\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
421 " str r0,[%4],#4;\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
422 " subs %2,%2,#4;\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
423 " bne 1b;\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
424 "2:\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
425 " mov r0,#0;\n" // Set board type
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
426 " mov r1,%3;\n" // Machine type
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
427 " mov r2,%6;\n" // Kernel parameters
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
428 " mov pc,%0;\n" // Jump to kernel
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
429 "__tramp_end__:\n"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
430 : :
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
431 "r"(entry),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
432 "r"(CYGARC_PHYSICAL_ADDRESS(base_addr)),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
433 "r"(length),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
434 "r"(CYGHWR_REDBOOT_ARM_MACHINE_TYPE),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
435 "r"(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
436 "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS)),
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
437 "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS))
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
438 : "r0", "r1"
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
439 );
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
440 }
212
94b558c9fb67 Merge from eCos master repository on 2002-05-31-00:05:29-BST
jlarmour
parents: 210
diff changeset
441
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
442 #endif // HAL_PLATFORM_MACHINE_TYPE - otherwise we do not support this stuff...
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
443
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
diff changeset
444 // EOF redboot_linux_exec.c