Changeset b0f00a9 in mainline for boot


Ignore:
Timestamp:
2011-11-06T22:21:05Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
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.
Message:

Merge mainline changes.

Location:
boot
Files:
17 added
2 deleted
17 edited
1 moved

Legend:

Unmodified
Added
Removed
  • boot/Makefile

    r2bdf8313 rb0f00a9  
    5050        $(MKFAT) 1048576 $(DIST_PATH) $@
    5151endif
     52ifeq ($(RDFMT),ext2fs)
     53        $(MKEXT2) 1048576 $(DIST_PATH) $@
     54endif
    5255
    5356build_dist: clean_dist
     
    5861                cp "$$file" "$(DIST_PATH)/lib/" ; \
    5962        done
     63ifeq ($(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"
     67endif
    6068        for file in $(RD_APPS) ; do \
    6169                cp "$$file" "$(DIST_PATH)/app/" ; \
     
    6573        done
    6674        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/" ; \
    7080        done
    7181        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/" ; \
    7385        done
    74        
     86
    7587clean: clean_dist
    7688        $(MAKE) -f $(BUILD) clean PRECHECK=$(PRECHECK)
     
    8799        rm -rf $(USPACE_PATH)/dist/drv/*
    88100        rm -f $(USPACE_PATH)/dist/lib/*
     101        rm -rf $(USPACE_PATH)/dist/inc/*
    89102        rm -f $(USPACE_PATH)/dist/app/*
    90103        rm -f $(USPACE_PATH)/dist/cfg/net/*
  • boot/Makefile.common

    r2bdf8313 rb0f00a9  
    5656MKTMPFS = $(TOOLS_PATH)/mktmpfs.py
    5757MKFAT = $(TOOLS_PATH)/mkfat.py
     58MKEXT2 = $(TOOLS_PATH)/mkext2.py
    5859MKUIMAGE = $(TOOLS_PATH)/mkuimage.py
    5960
     
    7273        $(USPACE_PATH)/srv/loader/loader \
    7374        $(USPACE_PATH)/app/init/init \
    74         $(USPACE_PATH)/srv/devmap/devmap \
     75        $(USPACE_PATH)/srv/loc/loc \
    7576        $(USPACE_PATH)/srv/bd/rd/rd \
    7677        $(USPACE_PATH)/srv/vfs/vfs
     
    8485endif
    8586
     87ifeq ($(RDFMT),ext2fs)
     88        INIT_TASKS += $(USPACE_PATH)/srv/fs/ext2fs/ext2fs
     89endif
     90
    8691RD_SRVS_ESSENTIAL = \
    8792        $(USPACE_PATH)/srv/hid/fb/fb \
    88         $(USPACE_PATH)/srv/hid/kbd/kbd \
     93        $(USPACE_PATH)/srv/hid/input/input \
    8994        $(USPACE_PATH)/srv/hid/console/console \
    90         $(USPACE_PATH)/srv/fs/devfs/devfs
     95        $(USPACE_PATH)/srv/fs/locfs/locfs
    9196
    9297RD_SRVS_NON_ESSENTIAL = \
     
    97102        $(USPACE_PATH)/srv/fs/tmpfs/tmpfs \
    98103        $(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 \
    99108        $(USPACE_PATH)/srv/taskmon/taskmon \
    100         $(USPACE_PATH)/srv/hw/netif/ne2000/ne2000 \
    101         $(USPACE_PATH)/srv/net/netif/lo/lo \
    102109        $(USPACE_PATH)/srv/net/nil/eth/eth \
    103110        $(USPACE_PATH)/srv/net/nil/nildummy/nildummy \
     
    109116        $(USPACE_PATH)/srv/net/net/net \
    110117        $(USPACE_PATH)/srv/devman/devman
    111        
     118
    112119RD_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
     128RD_DRV_CFG =
    119129
    120130RD_LIBS =
     131
     132ifeq ($(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
     137endif
    121138
    122139ifeq ($(CONFIG_BUILD_SHARED_LIBS), y)
     
    134151
    135152RD_APPS_NON_ESSENTIAL = \
     153        $(USPACE_PATH)/app/blkdump/blkdump \
     154        $(USPACE_PATH)/app/bnchmark/bnchmark \
     155        $(USPACE_PATH)/app/devctl/devctl \
    136156        $(USPACE_PATH)/app/dltest/dltest \
    137157        $(USPACE_PATH)/app/dltest2/dltest2 \
    138158        $(USPACE_PATH)/app/dload/dload \
    139159        $(USPACE_PATH)/app/edit/edit \
     160        $(USPACE_PATH)/app/ext2info/ext2info \
    140161        $(USPACE_PATH)/app/kill/kill \
    141162        $(USPACE_PATH)/app/killall/killall \
     163        $(USPACE_PATH)/app/locinfo/locinfo \
    142164        $(USPACE_PATH)/app/mkfat/mkfat \
     165        $(USPACE_PATH)/app/mkmfs/mkmfs \
     166        $(USPACE_PATH)/app/lsusb/lsusb \
    143167        $(USPACE_PATH)/app/sbi/sbi \
     168        $(USPACE_PATH)/app/sportdmp/sportdmp \
    144169        $(USPACE_PATH)/app/redir/redir \
    145170        $(USPACE_PATH)/app/taskdump/taskdump \
    146171        $(USPACE_PATH)/app/tester/tester \
     172        $(USPACE_PATH)/app/testread/testread \
    147173        $(USPACE_PATH)/app/tetris/tetris \
    148174        $(USPACE_PATH)/app/trace/trace \
     
    152178        $(USPACE_PATH)/app/ping/ping \
    153179        $(USPACE_PATH)/app/stats/stats \
     180        $(USPACE_PATH)/app/sysinfo/sysinfo \
    154181        $(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 \
    156185        $(USPACE_PATH)/app/websrv/websrv
     186
     187ifeq ($(CONFIG_PCC),y)
     188RD_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
     193endif
     194
     195ifeq ($(CONFIG_BINUTILS),y)
     196RD_APPS_NON_ESSENTIAL += \
     197        $(USPACE_PATH)/app/binutils/bin/as \
     198        $(USPACE_PATH)/app/binutils/bin/ld
     199endif
    157200
    158201ifneq ($(CONFIG_BAREBONE),y)
    159202NET_CFG = \
    160203        $(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
    163206endif
    164207
  • boot/Makefile.silo

    r2bdf8313 rb0f00a9  
    3131include Makefile.common
    3232
    33 ifeq ($(CONFIG_AOUT_ISOFS_B),y)
    34         SILO_PACKAGE = a.out
    35 else
    36         SILO_PACKAGE = raw
    37 endif
     33SILO_PACKAGE = a.out
    3834
    3935ISOFS_B = silo/$(SILO_PACKAGE)/isofs.b
  • boot/Makefile.uboot

    r2bdf8313 rb0f00a9  
    3131include Makefile.common
    3232
    33 IMAGE_NAME=HelenOS-$(RELEASE)
    34 BIN_OUTPUT=image.bin
     33IMAGE_NAME = HelenOS-$(RELEASE)
     34BIN_OUTPUT = image.bin
    3535
    3636all: $(POST_OUTPUT)
     
    4040
    4141$(POST_OUTPUT): $(BIN_OUTPUT)
    42         $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr 0x30008000 -saddr 0x30008000 \
    43     $< $@
     42        $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr 0x30008000 -saddr 0x30008000 $< $@
    4443
    4544clean:
  • boot/arch/amd64/Makefile.inc

    r2bdf8313 rb0f00a9  
    3535
    3636RD_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
    3938
    4039RD_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
    4554
    4655RD_DRV_CFG += \
    47         isa/isa.dev
     56        bus/isa
    4857
    4958BOOT_OUTPUT = $(ROOT_PATH)/image.iso
  • boot/arch/ia64/Makefile.inc

    r2bdf8313 rb0f00a9  
    4545        arch/$(BARCH)/src/asm.S \
    4646        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 \
    4751        arch/$(BARCH)/src/putchar.c \
    4852        $(COMPS_C) \
     53        genarch/src/efi.c \
    4954        genarch/src/division.c \
    5055        generic/src/balloc.c \
  • boot/arch/ia64/include/types.h

    r2bdf8313 rb0f00a9  
    3030#define BOOT_ia64_TYPES_H_
    3131
     32#include <arch/common.h>
     33
    3234#define TASKMAP_MAX_RECORDS             32
    3335#define BOOTINFO_TASK_NAME_BUFLEN       32
    34 #define MEMMAP_ITEMS                    128     
     36#define MEMMAP_ITEMS                    128
    3537
    3638typedef uint64_t size_t;
     
    5355        unsigned long base;
    5456        unsigned long size;
    55 } efi_memmap_item_t;
     57} memmap_item_t;
    5658
    5759typedef struct {
    5860        binit_t taskmap;
    5961
    60         efi_memmap_item_t memmap[MEMMAP_ITEMS];
     62        memmap_item_t memmap[MEMMAP_ITEMS];
    6163        unsigned int memmap_items;
    6264
     
    6567        unsigned long freq_scale;
    6668        unsigned int wakeup_intno;
    67         int hello_configured;
    6869} bootinfo_t;
    6970
     71/** This is a minimal ELILO-compatible boot parameter structure. */
     72typedef 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
    7080#endif
  • boot/arch/ia64/src/boot.S

    r2bdf8313 rb0f00a9  
    3737
    3838        #
     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        #
    3946        # Initialize the register stack to some sane value.
    4047        #
     
    6269.bss
    6370
     71.global bootpar
     72bootpar:
     73        .quad 0
     74
    6475.align STACK_SIZE
    6576initial_stack:
  • boot/arch/ia64/src/main.c

    r2bdf8313 rb0f00a9  
    3030
    3131#include <arch/main.h>
     32#include <arch/types.h>
    3233#include <arch/arch.h>
    3334#include <arch/asm.h>
    3435#include <arch/_components.h>
     36#include <genarch/efi.h>
     37#include <arch/sal.h>
     38#include <arch/pal.h>
    3539#include <halt.h>
    3640#include <printf.h>
     
    5155#define DEFAULT_SYS_FREQ                100000000ULL            /* 100MHz */
    5256
    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
     61extern boot_param_t *bootpar;
    5662
    5763static bootinfo_t bootinfo;
     64
     65static 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
     121static 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
     131static 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}
    58148
    59149void bootstrap(void)
     
    113203       
    114204        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();
    142209       
    143210        printf("Booting the kernel ...\n");
  • boot/arch/mips32/Makefile.inc

    r2bdf8313 rb0f00a9  
    3030BITS = 32
    3131PAGE_SIZE = 16384
    32 EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3
    33 
    34 RD_SRVS_ESSENTIAL +=
     32EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=32
    3533
    3634RD_SRVS_NON_ESSENTIAL += \
  • boot/arch/mips32/src/asm.S

    r2bdf8313 rb0f00a9  
    4444         * Setup the CP0 configuration
    4545         *  - Disable 64-bit kernel addressing mode
    46          *  - DIsable 64-bit supervisor adressing mode
     46         *  - Disable 64-bit supervisor adressing mode
    4747         *  - Disable 64-bit user addressing mode
    4848         */
  • boot/arch/ppc32/Makefile.inc

    r2bdf8313 rb0f00a9  
    4343        $(USPACE_PATH)/srv/hw/bus/cuda_adb/cuda_adb
    4444
    45 RD_SRVS_NON_ESSENTIAL += \
    46         $(USPACE_PATH)/srv/hid/adb_mouse/adb_ms
     45RD_DRVS += \
     46        infrastructure/rootmac
    4747
    4848SOURCES = \
  • boot/arch/ppc32/src/asm.S

    r2bdf8313 rb0f00a9  
    5858.endm
    5959
     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
    60106.global start
    61107.global halt
     
    247293        lwz r31, 4(r3)                # r31 = memory size
    248294       
    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
    286395       
    287396        no_bat:
  • boot/arch/sparc64/Makefile.inc

    r2bdf8313 rb0f00a9  
    4343
    4444RD_SRVS_ESSENTIAL += \
    45         $(USPACE_PATH)/srv/hw/irc/fhc/fhc \
    4645        $(USPACE_PATH)/srv/hw/irc/obio/obio
    4746
  • boot/arch/sparc64/src/main.c

    r2bdf8313 rb0f00a9  
    182182         * of the "/memory" node to find out which parts of memory
    183183         * 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.
    188185         */
    189186        bootinfo.physmem_start += OBP_BIAS;
  • boot/genarch/include/efi.h

    r2bdf8313 rb0f00a9  
    11/*
    2  * Copyright (c) 2006 Jakub Jermar
     2 * Copyright (c) 2011 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 #ifndef KERN_FHC_H_
    30 #define KERN_FHC_H_
     29#ifndef BOOT_EFI_H_
     30#define BOOT_EFI_H_
    3131
    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>
    3633
    3734typedef 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
     50typedef union {
     51        uint8_t bytes[16];
     52        struct {
     53                uint64_t low;
     54                uint64_t high;
     55        };
     56} efi_guid_t;
    4157
    4258typedef 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;
    4762
    4863typedef 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
     79typedef 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;
    5295
    5396typedef 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;
    58103
    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
    63105
    64 extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *,
    65     uint32_t, int *, cir_t *, void **);
     106extern void *efi_vendor_table_find(efi_system_table_t *, efi_guid_t);
    66107
    67108#endif
  • boot/generic/src/printf_core.c

    r2bdf8313 rb0f00a9  
    7070 */
    7171#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        })
    7291
    7392/** Enumeration of possible arguments types.
     
    171190        }
    172191       
    173         return (int) (counter + 1);
     192        return (int) (counter);
    174193}
    175194
     
    698717                        size_t size;
    699718                        uint64_t number;
     719                       
    700720                        switch (qualifier) {
    701721                        case PrintfQualifierByte:
    702722                                size = sizeof(unsigned char);
    703                                 number = (uint64_t) va_arg(ap, unsigned int);
     723                                number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);
    704724                                break;
    705725                        case PrintfQualifierShort:
    706726                                size = sizeof(unsigned short);
    707                                 number = (uint64_t) va_arg(ap, unsigned int);
     727                                number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);
    708728                                break;
    709729                        case PrintfQualifierInt:
    710730                                size = sizeof(unsigned int);
    711                                 number = (uint64_t) va_arg(ap, unsigned int);
     731                                number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);
    712732                                break;
    713733                        case PrintfQualifierLong:
    714734                                size = sizeof(unsigned long);
    715                                 number = (uint64_t) va_arg(ap, unsigned long);
     735                                number = PRINTF_GET_INT_ARGUMENT(long, ap, flags);
    716736                                break;
    717737                        case PrintfQualifierLongLong:
    718738                                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);
    720740                                break;
    721741                        case PrintfQualifierPointer:
     
    732752                                counter = -counter;
    733753                                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                                 }
    750754                        }
    751755                       
  • boot/generic/src/version.c

    r2bdf8313 rb0f00a9  
    3232
    3333static const char *project = "HelenOS bootloader";
    34 static const char *copyright = "Copyright (c) 2001-2010 HelenOS project";
     34static const char *copyright = "Copyright (c) 2001-2011 HelenOS project";
    3535static const char *release = STRING(RELEASE);
    3636static const char *name = STRING(NAME);
Note: See TracChangeset for help on using the changeset viewer.