- Timestamp:
- 2011-11-06T22:21:05Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 898e847
- Parents:
- 2bdf8313 (diff), 7b5f4c9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- boot
- Files:
-
- 17 added
- 2 deleted
- 17 edited
- 1 moved
-
Makefile (modified) (4 diffs)
-
Makefile.common (modified) (7 diffs)
-
Makefile.silo (modified) (1 diff)
-
Makefile.uboot (modified) (2 diffs)
-
arch/amd64/Makefile.inc (modified) (1 diff)
-
arch/ia64/Makefile.inc (modified) (1 diff)
-
arch/ia64/include/pal.h (added)
-
arch/ia64/include/sal.h (added)
-
arch/ia64/include/types.h (modified) (3 diffs)
-
arch/ia64/src/boot.S (modified) (2 diffs)
-
arch/ia64/src/main.c (modified) (3 diffs)
-
arch/ia64/src/pal.c (added)
-
arch/ia64/src/pal_asm.S (added)
-
arch/ia64/src/sal.c (added)
-
arch/ia64/src/sal_asm.S (added)
-
arch/mips32/Makefile.inc (modified) (1 diff)
-
arch/mips32/src/asm.S (modified) (1 diff)
-
arch/mips64/Makefile.inc (added)
-
arch/mips64/_link.ld.in (added)
-
arch/mips64/include/arch.h (added)
-
arch/mips64/include/asm.h (added)
-
arch/mips64/include/main.h (added)
-
arch/mips64/include/regname.h (added)
-
arch/mips64/include/types.h (added)
-
arch/mips64/src/asm.S (added)
-
arch/mips64/src/main.c (added)
-
arch/mips64/src/putchar.c (added)
-
arch/ppc32/Makefile.inc (modified) (1 diff)
-
arch/ppc32/src/asm.S (modified) (2 diffs)
-
arch/sparc64/Makefile.inc (modified) (1 diff)
-
arch/sparc64/src/main.c (modified) (1 diff)
-
genarch/include/efi.h (moved) (moved from kernel/genarch/include/ofw/fhc.h ) (2 diffs)
-
genarch/src/efi.c (added)
-
generic/src/printf_core.c (modified) (4 diffs)
-
generic/src/version.c (modified) (1 diff)
-
silo/raw/isofs.b (deleted)
-
silo/raw/second.b (deleted)
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile
r2bdf8313 rb0f00a9 50 50 $(MKFAT) 1048576 $(DIST_PATH) $@ 51 51 endif 52 ifeq ($(RDFMT),ext2fs) 53 $(MKEXT2) 1048576 $(DIST_PATH) $@ 54 endif 52 55 53 56 build_dist: clean_dist … … 58 61 cp "$$file" "$(DIST_PATH)/lib/" ; \ 59 62 done 63 ifeq ($(CONFIG_DEVEL_FILES), y) 64 mkdir "$(DIST_PATH)/inc/c/" 65 cp -r -L "$(USPACE_PATH)/lib/c/include/." "$(DIST_PATH)/inc/c/" 66 cat "$(USPACE_PATH)/lib/c/arch/$(UARCH)/_link.ld" | sed 's/^STARTUP(.*)$$//g' > "$(DIST_PATH)/inc/_link.ld" 67 endif 60 68 for file in $(RD_APPS) ; do \ 61 69 cp "$$file" "$(DIST_PATH)/app/" ; \ … … 65 73 done 66 74 for drv in $(RD_DRVS) ; do \ 67 mkdir -p "$(DIST_PATH)/$(DRVS_PATH)/$$drv" ; \ 68 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$drv/$$drv" "$(DIST_PATH)/$(DRVS_PATH)/$$drv/$$drv" ; \ 69 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$drv/$$drv.ma" "$(DIST_PATH)/$(DRVS_PATH)/$$drv/$$drv.ma" ; \ 75 drv_dir="`dirname "$$drv"`" ; \ 76 drv_name="`basename "$$drv"`" ; \ 77 mkdir -p "$(DIST_PATH)/$(DRVS_PATH)/$$drv_name" ; \ 78 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$drv_dir/$$drv_name/$$drv_name" "$(DIST_PATH)/$(DRVS_PATH)/$$drv_name/" ; \ 79 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$drv_dir/$$drv_name/$$drv_name.ma" "$(DIST_PATH)/$(DRVS_PATH)/$$drv_name/" ; \ 70 80 done 71 81 for file in $(RD_DRV_CFG) ; do \ 72 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$file" "$(DIST_PATH)/$(DRVS_PATH)/$$file" ; \ 82 file_dir="`dirname "$$file"`" ; \ 83 file_name="`basename "$$file"`" ; \ 84 cp "$(USPACE_PATH)/$(DRVS_PATH)/$$file_dir/$$file_name/$$file_name.dev" "$(DIST_PATH)/$(DRVS_PATH)/$$file_name/" ; \ 73 85 done 74 86 75 87 clean: clean_dist 76 88 $(MAKE) -f $(BUILD) clean PRECHECK=$(PRECHECK) … … 87 99 rm -rf $(USPACE_PATH)/dist/drv/* 88 100 rm -f $(USPACE_PATH)/dist/lib/* 101 rm -rf $(USPACE_PATH)/dist/inc/* 89 102 rm -f $(USPACE_PATH)/dist/app/* 90 103 rm -f $(USPACE_PATH)/dist/cfg/net/* -
boot/Makefile.common
r2bdf8313 rb0f00a9 56 56 MKTMPFS = $(TOOLS_PATH)/mktmpfs.py 57 57 MKFAT = $(TOOLS_PATH)/mkfat.py 58 MKEXT2 = $(TOOLS_PATH)/mkext2.py 58 59 MKUIMAGE = $(TOOLS_PATH)/mkuimage.py 59 60 … … 72 73 $(USPACE_PATH)/srv/loader/loader \ 73 74 $(USPACE_PATH)/app/init/init \ 74 $(USPACE_PATH)/srv/ devmap/devmap\75 $(USPACE_PATH)/srv/loc/loc \ 75 76 $(USPACE_PATH)/srv/bd/rd/rd \ 76 77 $(USPACE_PATH)/srv/vfs/vfs … … 84 85 endif 85 86 87 ifeq ($(RDFMT),ext2fs) 88 INIT_TASKS += $(USPACE_PATH)/srv/fs/ext2fs/ext2fs 89 endif 90 86 91 RD_SRVS_ESSENTIAL = \ 87 92 $(USPACE_PATH)/srv/hid/fb/fb \ 88 $(USPACE_PATH)/srv/hid/ kbd/kbd\93 $(USPACE_PATH)/srv/hid/input/input \ 89 94 $(USPACE_PATH)/srv/hid/console/console \ 90 $(USPACE_PATH)/srv/fs/ devfs/devfs95 $(USPACE_PATH)/srv/fs/locfs/locfs 91 96 92 97 RD_SRVS_NON_ESSENTIAL = \ … … 97 102 $(USPACE_PATH)/srv/fs/tmpfs/tmpfs \ 98 103 $(USPACE_PATH)/srv/fs/fat/fat \ 104 $(USPACE_PATH)/srv/fs/mfs/mfs \ 105 $(USPACE_PATH)/srv/fs/cdfs/cdfs \ 106 $(USPACE_PATH)/srv/fs/exfat/exfat \ 107 $(USPACE_PATH)/srv/fs/ext2fs/ext2fs \ 99 108 $(USPACE_PATH)/srv/taskmon/taskmon \ 100 $(USPACE_PATH)/srv/hw/netif/ne2000/ne2000 \101 $(USPACE_PATH)/srv/net/netif/lo/lo \102 109 $(USPACE_PATH)/srv/net/nil/eth/eth \ 103 110 $(USPACE_PATH)/srv/net/nil/nildummy/nildummy \ … … 109 116 $(USPACE_PATH)/srv/net/net/net \ 110 117 $(USPACE_PATH)/srv/devman/devman 111 118 112 119 RD_DRVS = \ 113 root \ 114 rootvirt \ 115 test1 \ 116 test2 117 118 RD_DRV_CFG = 120 infrastructure/root \ 121 infrastructure/rootvirt \ 122 test/test1 \ 123 test/test2 \ 124 test/test3 \ 125 nic/lo \ 126 nic/ne2k 127 128 RD_DRV_CFG = 119 129 120 130 RD_LIBS = 131 132 ifeq ($(CONFIG_DEVEL_FILES), y) 133 RD_LIBS += \ 134 $(USPACE_PATH)/lib/c/libc.a \ 135 $(USPACE_PATH)/lib/softint/libsoftint.a \ 136 $(USPACE_PATH)/lib/softfloat/libsoftfloat.a 137 endif 121 138 122 139 ifeq ($(CONFIG_BUILD_SHARED_LIBS), y) … … 134 151 135 152 RD_APPS_NON_ESSENTIAL = \ 153 $(USPACE_PATH)/app/blkdump/blkdump \ 154 $(USPACE_PATH)/app/bnchmark/bnchmark \ 155 $(USPACE_PATH)/app/devctl/devctl \ 136 156 $(USPACE_PATH)/app/dltest/dltest \ 137 157 $(USPACE_PATH)/app/dltest2/dltest2 \ 138 158 $(USPACE_PATH)/app/dload/dload \ 139 159 $(USPACE_PATH)/app/edit/edit \ 160 $(USPACE_PATH)/app/ext2info/ext2info \ 140 161 $(USPACE_PATH)/app/kill/kill \ 141 162 $(USPACE_PATH)/app/killall/killall \ 163 $(USPACE_PATH)/app/locinfo/locinfo \ 142 164 $(USPACE_PATH)/app/mkfat/mkfat \ 165 $(USPACE_PATH)/app/mkmfs/mkmfs \ 166 $(USPACE_PATH)/app/lsusb/lsusb \ 143 167 $(USPACE_PATH)/app/sbi/sbi \ 168 $(USPACE_PATH)/app/sportdmp/sportdmp \ 144 169 $(USPACE_PATH)/app/redir/redir \ 145 170 $(USPACE_PATH)/app/taskdump/taskdump \ 146 171 $(USPACE_PATH)/app/tester/tester \ 172 $(USPACE_PATH)/app/testread/testread \ 147 173 $(USPACE_PATH)/app/tetris/tetris \ 148 174 $(USPACE_PATH)/app/trace/trace \ … … 152 178 $(USPACE_PATH)/app/ping/ping \ 153 179 $(USPACE_PATH)/app/stats/stats \ 180 $(USPACE_PATH)/app/sysinfo/sysinfo \ 154 181 $(USPACE_PATH)/app/top/top \ 155 $(USPACE_PATH)/app/sysinfo/sysinfo \ 182 $(USPACE_PATH)/app/usbinfo/usbinfo \ 183 $(USPACE_PATH)/app/vuhid/vuh \ 184 $(USPACE_PATH)/app/mkbd/mkbd \ 156 185 $(USPACE_PATH)/app/websrv/websrv 186 187 ifeq ($(CONFIG_PCC),y) 188 RD_APPS_NON_ESSENTIAL += \ 189 $(USPACE_PATH)/app/cc/cc \ 190 $(USPACE_PATH)/app/ccom/ccom \ 191 $(USPACE_PATH)/app/ccom/mkext/cc_mkext \ 192 $(USPACE_PATH)/app/cpp/cpp 193 endif 194 195 ifeq ($(CONFIG_BINUTILS),y) 196 RD_APPS_NON_ESSENTIAL += \ 197 $(USPACE_PATH)/app/binutils/bin/as \ 198 $(USPACE_PATH)/app/binutils/bin/ld 199 endif 157 200 158 201 ifneq ($(CONFIG_BAREBONE),y) 159 202 NET_CFG = \ 160 203 $(USPACE_PATH)/srv/net/cfg/general \ 161 $(USPACE_PATH)/srv/net/cfg/lo \162 $(USPACE_PATH)/srv/net/cfg/ne2k 204 $(USPACE_PATH)/srv/net/cfg/lo.nic \ 205 $(USPACE_PATH)/srv/net/cfg/ne2k.nic 163 206 endif 164 207 -
boot/Makefile.silo
r2bdf8313 rb0f00a9 31 31 include Makefile.common 32 32 33 ifeq ($(CONFIG_AOUT_ISOFS_B),y) 34 SILO_PACKAGE = a.out 35 else 36 SILO_PACKAGE = raw 37 endif 33 SILO_PACKAGE = a.out 38 34 39 35 ISOFS_B = silo/$(SILO_PACKAGE)/isofs.b -
boot/Makefile.uboot
r2bdf8313 rb0f00a9 31 31 include Makefile.common 32 32 33 IMAGE_NAME =HelenOS-$(RELEASE)34 BIN_OUTPUT =image.bin33 IMAGE_NAME = HelenOS-$(RELEASE) 34 BIN_OUTPUT = image.bin 35 35 36 36 all: $(POST_OUTPUT) … … 40 40 41 41 $(POST_OUTPUT): $(BIN_OUTPUT) 42 $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr 0x30008000 -saddr 0x30008000 \ 43 $< $@ 42 $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr 0x30008000 -saddr 0x30008000 $< $@ 44 43 45 44 clean: -
boot/arch/amd64/Makefile.inc
r2bdf8313 rb0f00a9 35 35 36 36 RD_SRVS_NON_ESSENTIAL += \ 37 $(USPACE_PATH)/srv/bd/ata_bd/ata_bd \ 38 $(USPACE_PATH)/srv/hid/char_mouse/char_ms 37 $(USPACE_PATH)/srv/bd/ata_bd/ata_bd 39 38 40 39 RD_DRVS += \ 41 rootpc \ 42 pciintel \ 43 isa \ 44 ns8250 40 infrastructure/rootpc \ 41 bus/pci/pciintel \ 42 bus/isa \ 43 char/ns8250 \ 44 bus/usb/ehci\ 45 bus/usb/ohci \ 46 bus/usb/uhci \ 47 bus/usb/uhcirh \ 48 bus/usb/usbflbk \ 49 bus/usb/usbhub \ 50 bus/usb/usbhid \ 51 bus/usb/usbmast \ 52 bus/usb/usbmid \ 53 bus/usb/vhc 45 54 46 55 RD_DRV_CFG += \ 47 isa/isa.dev56 bus/isa 48 57 49 58 BOOT_OUTPUT = $(ROOT_PATH)/image.iso -
boot/arch/ia64/Makefile.inc
r2bdf8313 rb0f00a9 45 45 arch/$(BARCH)/src/asm.S \ 46 46 arch/$(BARCH)/src/main.c \ 47 arch/$(BARCH)/src/sal.c \ 48 arch/$(BARCH)/src/sal_asm.S \ 49 arch/$(BARCH)/src/pal.c \ 50 arch/$(BARCH)/src/pal_asm.S \ 47 51 arch/$(BARCH)/src/putchar.c \ 48 52 $(COMPS_C) \ 53 genarch/src/efi.c \ 49 54 genarch/src/division.c \ 50 55 generic/src/balloc.c \ -
boot/arch/ia64/include/types.h
r2bdf8313 rb0f00a9 30 30 #define BOOT_ia64_TYPES_H_ 31 31 32 #include <arch/common.h> 33 32 34 #define TASKMAP_MAX_RECORDS 32 33 35 #define BOOTINFO_TASK_NAME_BUFLEN 32 34 #define MEMMAP_ITEMS 128 36 #define MEMMAP_ITEMS 128 35 37 36 38 typedef uint64_t size_t; … … 53 55 unsigned long base; 54 56 unsigned long size; 55 } efi_memmap_item_t;57 } memmap_item_t; 56 58 57 59 typedef struct { 58 60 binit_t taskmap; 59 61 60 efi_memmap_item_t memmap[MEMMAP_ITEMS];62 memmap_item_t memmap[MEMMAP_ITEMS]; 61 63 unsigned int memmap_items; 62 64 … … 65 67 unsigned long freq_scale; 66 68 unsigned int wakeup_intno; 67 int hello_configured;68 69 } bootinfo_t; 69 70 71 /** This is a minimal ELILO-compatible boot parameter structure. */ 72 typedef struct { 73 uint64_t cmd_line; 74 uint64_t efi_system_table; 75 uint64_t efi_memmap; 76 uint64_t efi_memmap_sz; 77 uint64_t efi_memdesc_sz; 78 } boot_param_t; 79 70 80 #endif -
boot/arch/ia64/src/boot.S
r2bdf8313 rb0f00a9 37 37 38 38 # 39 # Save the boot parameter structure address passed from the 40 # ELILO-compatible EFI loader. 41 # 42 movl r8 = bootpar ;; 43 st8 [r8] = r28 44 45 # 39 46 # Initialize the register stack to some sane value. 40 47 # … … 62 69 .bss 63 70 71 .global bootpar 72 bootpar: 73 .quad 0 74 64 75 .align STACK_SIZE 65 76 initial_stack: -
boot/arch/ia64/src/main.c
r2bdf8313 rb0f00a9 30 30 31 31 #include <arch/main.h> 32 #include <arch/types.h> 32 33 #include <arch/arch.h> 33 34 #include <arch/asm.h> 34 35 #include <arch/_components.h> 36 #include <genarch/efi.h> 37 #include <arch/sal.h> 38 #include <arch/pal.h> 35 39 #include <halt.h> 36 40 #include <printf.h> … … 51 55 #define DEFAULT_SYS_FREQ 100000000ULL /* 100MHz */ 52 56 53 #define EFI_MEMMAP_FREE_MEM 0 54 #define EFI_MEMMAP_IO 1 55 #define EFI_MEMMAP_IO_PORTS 2 57 #define MEMMAP_FREE_MEM 0 58 #define MEMMAP_IO 1 59 #define MEMMAP_IO_PORTS 2 60 61 extern boot_param_t *bootpar; 56 62 57 63 static bootinfo_t bootinfo; 64 65 static void read_efi_memmap(void) 66 { 67 memmap_item_t *memmap = bootinfo.memmap; 68 size_t items = 0; 69 70 if (!bootpar) { 71 /* Fake-up a memory map for simulators. */ 72 memmap[items].base = DEFAULT_MEMORY_BASE; 73 memmap[items].size = DEFAULT_MEMORY_SIZE; 74 memmap[items].type = MEMMAP_FREE_MEM; 75 items++; 76 77 memmap[items].base = DEFAULT_LEGACY_IO_BASE; 78 memmap[items].size = DEFAULT_LEGACY_IO_SIZE; 79 memmap[items].type = MEMMAP_IO_PORTS; 80 items++; 81 } else { 82 char *cur, *mm_base = (char *) bootpar->efi_memmap; 83 size_t mm_size = bootpar->efi_memmap_sz; 84 size_t md_size = bootpar->efi_memdesc_sz; 85 86 /* 87 * Walk the EFI memory map using the V1 memory descriptor 88 * format. The actual memory descriptor can use newer format, 89 * but it must always be backwards compatible with the V1 90 * format. 91 */ 92 for (cur = mm_base; 93 (cur < mm_base + (mm_size - md_size)) && 94 (items < MEMMAP_ITEMS); 95 cur += md_size) { 96 efi_v1_memdesc_t *md = (efi_v1_memdesc_t *) cur; 97 98 switch ((efi_memory_type_t) md->type) { 99 case EFI_CONVENTIONAL_MEMORY: 100 memmap[items].type = MEMMAP_FREE_MEM; 101 break; 102 case EFI_MEMORY_MAPPED_IO: 103 memmap[items].type = MEMMAP_IO; 104 break; 105 case EFI_MEMORY_MAPPED_IO_PORT_SPACE: 106 memmap[items].type = MEMMAP_IO_PORTS; 107 break; 108 default: 109 continue; 110 } 111 112 memmap[items].base = md->phys_start; 113 memmap[items].size = md->pages * EFI_PAGE_SIZE; 114 items++; 115 } 116 } 117 118 bootinfo.memmap_items = items; 119 } 120 121 static void read_pal_configuration(void) 122 { 123 if (bootpar) { 124 bootinfo.freq_scale = pal_proc_freq_ratio(); 125 } else { 126 /* Configure default values for simulators. */ 127 bootinfo.freq_scale = DEFAULT_FREQ_SCALE; 128 } 129 } 130 131 static void read_sal_configuration(void) 132 { 133 if (bootpar && bootpar->efi_system_table) { 134 efi_guid_t sal_guid = SAL_SYSTEM_TABLE_GUID; 135 sal_system_table_header_t *sal_st; 136 137 sal_st = efi_vendor_table_find( 138 (efi_system_table_t *) bootpar->efi_system_table, sal_guid); 139 140 sal_system_table_parse(sal_st); 141 142 bootinfo.sys_freq = sal_base_clock_frequency(); 143 } else { 144 /* Configure default values for simulators. */ 145 bootinfo.sys_freq = DEFAULT_SYS_FREQ; 146 } 147 } 58 148 59 149 void bootstrap(void) … … 113 203 114 204 printf(".\n"); 115 116 if (!bootinfo.hello_configured) { /* XXX */ 117 /* 118 * Load configuration defaults for simulators. 119 */ 120 bootinfo.memmap_items = 0; 121 122 bootinfo.memmap[bootinfo.memmap_items].base = 123 DEFAULT_MEMORY_BASE; 124 bootinfo.memmap[bootinfo.memmap_items].size = 125 DEFAULT_MEMORY_SIZE; 126 bootinfo.memmap[bootinfo.memmap_items].type = 127 EFI_MEMMAP_FREE_MEM; 128 bootinfo.memmap_items++; 129 130 bootinfo.memmap[bootinfo.memmap_items].base = 131 DEFAULT_LEGACY_IO_BASE; 132 bootinfo.memmap[bootinfo.memmap_items].size = 133 DEFAULT_LEGACY_IO_SIZE; 134 bootinfo.memmap[bootinfo.memmap_items].type = 135 EFI_MEMMAP_IO_PORTS; 136 bootinfo.memmap_items++; 137 138 bootinfo.freq_scale = DEFAULT_FREQ_SCALE; 139 bootinfo.sys_freq = DEFAULT_SYS_FREQ; 140 } 141 205 206 read_efi_memmap(); 207 read_sal_configuration(); 208 read_pal_configuration(); 142 209 143 210 printf("Booting the kernel ...\n"); -
boot/arch/mips32/Makefile.inc
r2bdf8313 rb0f00a9 30 30 BITS = 32 31 31 PAGE_SIZE = 16384 32 EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 33 34 RD_SRVS_ESSENTIAL += 32 EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=32 35 33 36 34 RD_SRVS_NON_ESSENTIAL += \ -
boot/arch/mips32/src/asm.S
r2bdf8313 rb0f00a9 44 44 * Setup the CP0 configuration 45 45 * - Disable 64-bit kernel addressing mode 46 * - D Isable 64-bit supervisor adressing mode46 * - Disable 64-bit supervisor adressing mode 47 47 * - Disable 64-bit user addressing mode 48 48 */ -
boot/arch/ppc32/Makefile.inc
r2bdf8313 rb0f00a9 43 43 $(USPACE_PATH)/srv/hw/bus/cuda_adb/cuda_adb 44 44 45 RD_ SRVS_NON_ESSENTIAL+= \46 $(USPACE_PATH)/srv/hid/adb_mouse/adb_ms45 RD_DRVS += \ 46 infrastructure/rootmac 47 47 48 48 SOURCES = \ -
boot/arch/ppc32/src/asm.S
r2bdf8313 rb0f00a9 58 58 .endm 59 59 60 .macro BAT_COMPUTE base size mask lower upper 61 # less than 128 KB -> no BAT 62 63 lis \upper, 0x0002 64 cmpw \size, \upper 65 blt no_bat 66 67 # mask = total >> 18 68 69 li \upper, 18 70 srw \mask, \size, \upper 71 72 # create Block Length mask by replicating 73 # the leading logical one 14 times 74 75 li \upper, 14 76 mtctr \mask 77 li \upper, 1 78 79 0: 80 # mask = (mask >> 1) | mask 81 82 srw \lower, \mask, \upper 83 or \mask, \mask, \lower 84 85 bdnz 0b 86 87 # mask = mask & 0x07ff 88 # (BAT can map up to 256 MB) 89 90 andi. \mask, \mask, 0x07ff 91 92 # mask = (mask << 2) | 0x0002 93 # (priviledged access only) 94 95 li \upper, 2 96 slw \mask, \mask, \upper 97 ori \mask, \mask, 0x0002 98 99 lis \upper, (0x8000 + \base) 100 or \upper, \upper, \mask 101 102 lis \lower, \base 103 ori \lower, \lower, 0x0002 104 .endm 105 60 106 .global start 61 107 .global halt … … 247 293 lwz r31, 4(r3) # r31 = memory size 248 294 249 lis r29, 0x0002 250 cmpw r31, r29 251 blt no_bat # less than 128 KB -> no BAT 252 253 li r29, 18 254 srw r31, r31, r29 # r31 = total >> 18 255 256 # create Block Length mask by replicating 257 # the leading logical one 14 times 258 259 li r29, 14 260 mtctr r31 261 li r29, 1 262 263 bat_mask: 264 srw r30, r31, r29 # r30 = mask >> 1 265 or r31, r31, r30 # mask = mask | r30 266 267 bdnz bat_mask 268 269 andi. r31, r31, 0x07ff # mask = mask & 0x07ff (BAT can map up to 256 MB) 270 271 li r29, 2 272 slw r31, r31, r29 # mask = mask << 2 273 ori r31, r31, 0x0002 # mask = mask | 0x0002 (priviledged access only) 274 275 lis r29, 0x8000 276 or r29, r29, r31 277 278 lis r30, 0x0000 279 ori r30, r30, 0x0002 280 281 mtspr ibat0u, r29 282 mtspr ibat0l, r30 283 284 mtspr dbat0u, r29 285 mtspr dbat0l, r30 295 lis r30, 268435456@h 296 ori r30, r30, 268435456@l # r30 = 256 MB 297 298 # BAT0 299 300 # r29 = min(r31, r30) 301 302 cmpw r31, r30 303 blt bat0_r31 304 305 mr r29, r30 306 b bat0_r30 307 308 bat0_r31: 309 310 mr r29, r31 311 312 bat0_r30: 313 314 BAT_COMPUTE 0x0000 r29 r28 r27 r26 315 mtspr ibat0u, r26 316 mtspr ibat0l, r27 317 318 mtspr dbat0u, r26 319 mtspr dbat0l, r27 320 321 # BAT1 322 323 sub r31, r31, r29 # r31 = r31 - r29 324 325 # r29 = min(r31, r30) 326 327 cmpw r31, r30 328 blt bat1_r31 329 330 mr r29, r30 331 b bat1_r30 332 333 bat1_r31: 334 335 mr r29, r31 336 337 bat1_r30: 338 339 BAT_COMPUTE 0x1000 r29 r28 r27 r26 340 mtspr ibat1u, r26 341 mtspr ibat1l, r27 342 343 mtspr dbat1u, r26 344 mtspr dbat1l, r27 345 346 # BAT2 347 348 sub r31, r31, r29 # r31 = r31 - r29 349 350 # r29 = min(r31, r30) 351 352 cmpw r31, r30 353 blt bat2_r31 354 355 mr r29, r30 356 b bat2_r30 357 358 bat2_r31: 359 360 mr r29, r31 361 362 bat2_r30: 363 364 BAT_COMPUTE 0x2000 r29 r28 r27 r26 365 mtspr ibat2u, r26 366 mtspr ibat2l, r27 367 368 mtspr dbat2u, r26 369 mtspr dbat2l, r27 370 371 # BAT3 372 373 sub r31, r31, r29 # r31 = r31 - r29 374 375 # r29 = min(r31, r30) 376 377 cmpw r31, r30 378 blt bat3_r31 379 380 mr r29, r30 381 b bat3_r30 382 383 bat3_r31: 384 385 mr r29, r31 386 387 bat3_r30: 388 389 BAT_COMPUTE 0x3000 r29 r28 r27 r26 390 mtspr ibat3u, r26 391 mtspr ibat3l, r27 392 393 mtspr dbat3u, r26 394 mtspr dbat3l, r27 286 395 287 396 no_bat: -
boot/arch/sparc64/Makefile.inc
r2bdf8313 rb0f00a9 43 43 44 44 RD_SRVS_ESSENTIAL += \ 45 $(USPACE_PATH)/srv/hw/irc/fhc/fhc \46 45 $(USPACE_PATH)/srv/hw/irc/obio/obio 47 46 -
boot/arch/sparc64/src/main.c
r2bdf8313 rb0f00a9 182 182 * of the "/memory" node to find out which parts of memory 183 183 * are used by OBP and redesign the algorithm of copying 184 * kernel/init tasks/ramdisk from the bootable image to memory 185 * (which we must do anyway because of issues with claiming the memory 186 * on Serengeti). 187 * 184 * kernel/init tasks/ramdisk from the bootable image to memory. 188 185 */ 189 186 bootinfo.physmem_start += OBP_BIAS; -
boot/genarch/include/efi.h
r2bdf8313 rb0f00a9 1 1 /* 2 * Copyright (c) 20 06Jakub Jermar2 * Copyright (c) 2011 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 #ifndef KERN_FHC_H_30 #define KERN_FHC_H_29 #ifndef BOOT_EFI_H_ 30 #define BOOT_EFI_H_ 31 31 32 #include <genarch/ofw/ofw_tree.h> 33 #include <typedefs.h> 34 #include <ddi/irq.h> 35 #include <typedefs.h> 32 #include <arch/types.h> 36 33 37 34 typedef struct { 38 uint64_t addr; 39 uint32_t size; 40 } __attribute__ ((packed)) ofw_fhc_reg_t; 35 uint64_t signature; 36 uint32_t revision; 37 uint32_t header_size; 38 uint32_t crc32; 39 uint32_t reserved; 40 } efi_table_header_t; 41 42 #define SAL_SYSTEM_TABLE_GUID \ 43 { \ 44 { \ 45 0x32, 0x2d, 0x9d, 0xeb, 0x88, 0x2d, 0xd3, 0x11, \ 46 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d \ 47 } \ 48 } 49 50 typedef union { 51 uint8_t bytes[16]; 52 struct { 53 uint64_t low; 54 uint64_t high; 55 }; 56 } efi_guid_t; 41 57 42 58 typedef struct { 43 uint64_t child_base; 44 uint64_t parent_base; 45 uint32_t size; 46 } __attribute__ ((packed)) ofw_fhc_range_t; 59 efi_guid_t guid; 60 void *table; 61 } efi_configuration_table_t; 47 62 48 63 typedef struct { 49 uint64_t addr; 50 uint32_t size; 51 } __attribute__ ((packed)) ofw_central_reg_t; 64 efi_table_header_t hdr; 65 char *fw_vendor; 66 uint32_t fw_revision; 67 void *cons_in_handle; 68 void *cons_in; 69 void *cons_out_handle; 70 void *cons_out; 71 void *cons_err_handle; 72 void *cons_err; 73 void *runtime_services; 74 void *boot_services; 75 sysarg_t conf_table_entries; 76 efi_configuration_table_t *conf_table; 77 } efi_system_table_t; 78 79 typedef enum { 80 EFI_RESERVED, 81 EFI_LOADER_CODE, 82 EFI_LOADER_DATA, 83 EFI_BOOT_SERVICES_CODE, 84 EFI_BOOT_SERVICES_DATA, 85 EFI_RUNTIME_SERVICES_CODE, 86 EFI_RUNTIME_SERVICES_DATA, 87 EFI_CONVENTIONAL_MEMORY, 88 EFI_UNUSABLE_MEMORY, 89 EFI_ACPI_RECLAIM_MEMORY, 90 EFI_ACPI_MEMORY_NVS, 91 EFI_MEMORY_MAPPED_IO, 92 EFI_MEMORY_MAPPED_IO_PORT_SPACE, 93 EFI_PAL_CODE 94 } efi_memory_type_t; 52 95 53 96 typedef struct { 54 uint64_t child_base; 55 uint64_t parent_base; 56 uint32_t size; 57 } __attribute__ ((packed)) ofw_central_range_t; 97 uint32_t type; 98 uint64_t phys_start; 99 uint64_t virt_start; 100 uint64_t pages; 101 uint64_t attribute; 102 } efi_v1_memdesc_t; 58 103 59 extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *, ofw_fhc_reg_t *, 60 uintptr_t *); 61 extern bool ofw_central_apply_ranges(ofw_tree_node_t *, ofw_central_reg_t *, 62 uintptr_t *); 104 #define EFI_PAGE_SIZE 4096 63 105 64 extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *, 65 uint32_t, int *, cir_t *, void **); 106 extern void *efi_vendor_table_find(efi_system_table_t *, efi_guid_t); 66 107 67 108 #endif -
boot/generic/src/printf_core.c
r2bdf8313 rb0f00a9 70 70 */ 71 71 #define PRINT_NUMBER_BUFFER_SIZE (64 + 5) 72 73 /** Get signed or unsigned integer argument */ 74 #define PRINTF_GET_INT_ARGUMENT(type, ap, flags) \ 75 ({ \ 76 unsigned type res; \ 77 \ 78 if ((flags) & __PRINTF_FLAG_SIGNED) { \ 79 signed type arg = va_arg((ap), signed type); \ 80 \ 81 if (arg < 0) { \ 82 res = -arg; \ 83 (flags) |= __PRINTF_FLAG_NEGATIVE; \ 84 } else \ 85 res = arg; \ 86 } else \ 87 res = va_arg((ap), unsigned type); \ 88 \ 89 res; \ 90 }) 72 91 73 92 /** Enumeration of possible arguments types. … … 171 190 } 172 191 173 return (int) (counter + 1);192 return (int) (counter); 174 193 } 175 194 … … 698 717 size_t size; 699 718 uint64_t number; 719 700 720 switch (qualifier) { 701 721 case PrintfQualifierByte: 702 722 size = sizeof(unsigned char); 703 number = (uint64_t) va_arg(ap, unsigned int);723 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 704 724 break; 705 725 case PrintfQualifierShort: 706 726 size = sizeof(unsigned short); 707 number = (uint64_t) va_arg(ap, unsigned int);727 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 708 728 break; 709 729 case PrintfQualifierInt: 710 730 size = sizeof(unsigned int); 711 number = (uint64_t) va_arg(ap, unsigned int);731 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 712 732 break; 713 733 case PrintfQualifierLong: 714 734 size = sizeof(unsigned long); 715 number = (uint64_t) va_arg(ap, unsigned long);735 number = PRINTF_GET_INT_ARGUMENT(long, ap, flags); 716 736 break; 717 737 case PrintfQualifierLongLong: 718 738 size = sizeof(unsigned long long); 719 number = (uint64_t) va_arg(ap, unsigned long long);739 number = PRINTF_GET_INT_ARGUMENT(long long, ap, flags); 720 740 break; 721 741 case PrintfQualifierPointer: … … 732 752 counter = -counter; 733 753 goto out; 734 }735 736 if (flags & __PRINTF_FLAG_SIGNED) {737 if (number & (0x1 << (size * 8 - 1))) {738 flags |= __PRINTF_FLAG_NEGATIVE;739 740 if (size == sizeof(uint64_t)) {741 number = -((int64_t) number);742 } else {743 number = ~number;744 number &=745 ~(0xFFFFFFFFFFFFFFFFll <<746 (size * 8));747 number++;748 }749 }750 754 } 751 755 -
boot/generic/src/version.c
r2bdf8313 rb0f00a9 32 32 33 33 static const char *project = "HelenOS bootloader"; 34 static const char *copyright = "Copyright (c) 2001-201 0HelenOS project";34 static const char *copyright = "Copyright (c) 2001-2011 HelenOS project"; 35 35 static const char *release = STRING(RELEASE); 36 36 static const char *name = STRING(NAME);
Note:
See TracChangeset
for help on using the changeset viewer.
