Changeset 7ba16eb in mainline


Ignore:
Timestamp:
2016-05-09T15:16:03Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
147a066
Parents:
fa9f8ad
Message:

Use autogenerated offsets to access multiboot info and memory map

Location:
kernel
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • kernel/Makefile

    rfa9f8ad r7ba16eb  
    377377GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
    378378
     379GENARCH_AUTOGENS_H := $(addsuffix .h,$(basename $(GENARCH_AUTOGENS_AG)))
     380GENARCH_AUTOGENS_PROBE_C := $(addsuffix .ag.probe.c,$(basename $(GENARCH_AUTOGENS_AG)))
     381GENARCH_AUTOGENS_PROBE_S := $(addsuffix .ag.probe.s,$(basename $(GENARCH_AUTOGENS_AG)))
     382
    379383ARCH_AUTOGENS_H := $(addsuffix .h,$(basename $(ARCH_AUTOGENS_AG)))
    380384ARCH_AUTOGENS_PROBE_C := $(addsuffix .ag.probe.c,$(basename $(ARCH_AUTOGENS_AG)))
     
    460464        $(GENMAP) $(MAP_PREV) $(DUMP) $@
    461465
    462 $(DEPEND): $(COMMON_HEADER_ARCH) $(ARCH_AUTOGENS_H)
     466$(DEPEND): $(COMMON_HEADER_ARCH) $(ARCH_AUTOGENS_H) $(GENARCH_AUTOGENS_H)
    463467        makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > $@ 2> /dev/null
    464468        -[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
     
    469473autogen_clean:
    470474        -rm $(ARCH_AUTOGENS_H) $(ARCH_AUTOGENS_PROBE_C) $(ARCH_AUTOGENS_PROBE_S)
     475        -rm $(GENARCH_AUTOGENS_H) $(GENARCH_AUTOGENS_PROBE_C) $(GENARCH_AUTOGENS_PROBE_S)
  • kernel/arch/amd64/Makefile.inc

    rfa9f8ad r7ba16eb  
    9393        arch/$(KARCH)/include/arch/istate_struct.ag \
    9494        arch/$(KARCH)/include/arch/context_struct.ag \
    95         arch/$(KARCH)/include/arch/kseg_struct.ag
     95        arch/$(KARCH)/include/arch/kseg_struct.ag \
     96        arch/$(KARCH)/include/arch/boot/memmap_struct.ag
  • kernel/arch/ia32/Makefile.inc

    rfa9f8ad r7ba16eb  
    110110ARCH_AUTOGENS_AG = \
    111111        arch/$(KARCH)/include/arch/istate_struct.ag \
    112         arch/$(KARCH)/include/arch/context_struct.ag
     112        arch/$(KARCH)/include/arch/context_struct.ag \
     113        arch/$(KARCH)/include/arch/boot/memmap_struct.ag
    113114
  • kernel/arch/ia32/include/arch/boot/memmap.h

    rfa9f8ad r7ba16eb  
    3636#define KERN_ia32_MEMMAP_H_
    3737
     38#include <arch/boot/memmap_struct.h>
     39
    3840/* E820h memory range types */
    3941
     
    6365#include <typedefs.h>
    6466
    65 typedef struct {
    66         uint64_t base_address;
    67         uint64_t size;
    68         uint32_t type;
    69 } __attribute__ ((packed)) e820memmap_t;
    70 
    7167extern e820memmap_t e820table[MEMMAP_E820_MAX_RECORDS];
    7268extern uint8_t e820counter;
  • kernel/arch/ia32/src/boot/multiboot.S

    rfa9f8ad r7ba16eb  
    3131#include <abi/asmtool.h>
    3232#include <arch/boot/boot.h>
     33#include <arch/boot/memmap.h>
    3334#include <arch/mm/page.h>
    3435#include <arch/pm.h>
     
    315316                /* Check if memory map flag is present */
    316317                movl (%ebx), %edx
    317                 andl $(1 << 6), %edx
     318                andl $MULTIBOOT_INFO_FLAGS_MMAP, %edx
    318319                jnz use_multiboot_map
    319320                       
     
    323324               
    324325                /* Copy address of the memory map to edx */
    325                 movl 48(%ebx), %edx
     326                movl MULTIBOOT_INFO_OFFSET_MMAP_ADDR(%ebx), %edx
    326327                movl %edx, %ecx
    327328               
    328                 addl 44(%ebx), %ecx
     329                addl MULTIBOOT_INFO_OFFSET_MMAP_LENGTH(%ebx), %ecx
    329330               
    330331                /* Find a free region at least 2M in size */
     
    332333                       
    333334                        /* Is this a free region? */
    334                         cmp $1, 20(%edx)
     335                        cmpl $MEMMAP_MEMORY_AVAILABLE, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_TYPE(%edx)
    335336                        jnz next_region
    336337                       
    337338                        /* Check size */
    338                         cmp $0, 16(%edx)
     339                        cmpl $0, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE + 4(%edx)
    339340                        jnz next_region
    340                        
    341                         cmpl $(2 * 1024 * 1024 + 4 * 1024), 12(%edx)
     341                        cmpl $(2 * 1024 * 1024 + PAGE_SIZE), MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE(%edx)
    342342                        jbe next_region
    343343                       
    344                         cmp $0, 8(%edx)
     344                        cmpl $0, MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_BASE_ADDRESS + 4(%edx)
    345345                        jz found_region
    346346               
     
    354354                next_region_do:
    355355                       
    356                         addl (%edx), %edx
    357                         addl $4, %edx
     356                        addl MULTIBOOT_MEMMAP_OFFSET_SIZE(%edx), %edx
     357                        addl $MULTIBOOT_MEMMAP_SIZE_SIZE, %edx
    358358                        jmp check_memmap_loop
    359359                       
     
    361361                       
    362362                        /* Use end of the found region */
    363                         mov 4(%edx), %ecx
    364                         add 12(%edx), %ecx
     363                        mov MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_BASE_ADDRESS(%edx), %ecx
     364                        add MULTIBOOT_MEMMAP_OFFSET_MM_INFO + E820MEMMAP_OFFSET_SIZE(%edx), %ecx
    365365                        sub $(2 * 1024 * 1024), %ecx
    366366                        mov %ecx, free_area
  • kernel/genarch/Makefile.inc

    rfa9f8ad r7ba16eb  
    3030
    3131ifeq ($(CONFIG_ACPI),y)
    32         GENARCH_SOURCES += \
    33                 genarch/src/acpi/acpi.c \
    34                 genarch/src/acpi/madt.c
     32GENARCH_SOURCES += \
     33        genarch/src/acpi/acpi.c \
     34        genarch/src/acpi/madt.c
    3535endif
    3636
    3737ifeq ($(CONFIG_PAGE_PT),y)
    38         GENARCH_SOURCES += \
    39                 genarch/src/mm/page_pt.c \
    40                 genarch/src/mm/as_pt.c
     38GENARCH_SOURCES += \
     39        genarch/src/mm/page_pt.c \
     40        genarch/src/mm/as_pt.c
    4141endif
    4242
    4343ifeq ($(CONFIG_PAGE_HT),y)
    44         GENARCH_SOURCES += \
    45                 genarch/src/mm/page_ht.c \
    46                 genarch/src/mm/as_ht.c
     44GENARCH_SOURCES += \
     45        genarch/src/mm/page_ht.c \
     46        genarch/src/mm/as_ht.c
    4747endif
    4848
    4949ifeq ($(CONFIG_ASID),y)
    50         GENARCH_SOURCES += \
    51                 genarch/src/mm/asid.c
     50GENARCH_SOURCES += \
     51        genarch/src/mm/asid.c
    5252endif
    5353
    5454ifeq ($(CONFIG_ASID_FIFO),y)
    55         GENARCH_SOURCES += \
    56                 genarch/src/mm/asid_fifo.c
     55GENARCH_SOURCES += \
     56        genarch/src/mm/asid_fifo.c
    5757endif
    5858
    5959ifeq ($(CONFIG_SOFTINT),y)
    60         GENARCH_SOURCES += \
    61                 genarch/src/softint/division.c \
    62                 genarch/src/softint/multiplication.c
     60GENARCH_SOURCES += \
     61        genarch/src/softint/division.c \
     62        genarch/src/softint/multiplication.c
    6363endif
    6464
    6565ifeq ($(CONFIG_FB),y)
    66         GENARCH_SOURCES += \
    67                 genarch/src/fb/font-8x16.c \
    68                 genarch/src/fb/fb.c \
    69                 genarch/src/fb/bfb.c
     66GENARCH_SOURCES += \
     67        genarch/src/fb/font-8x16.c \
     68        genarch/src/fb/fb.c \
     69        genarch/src/fb/bfb.c
    7070endif
    7171
    7272ifeq ($(CONFIG_DSRLNIN),y)
    73         GENARCH_SOURCES += \
    74                 genarch/src/drivers/dsrln/dsrlnin.c
     73GENARCH_SOURCES += \
     74        genarch/src/drivers/dsrln/dsrlnin.c
    7575endif
    7676
    7777ifeq ($(CONFIG_DSRLNOUT),y)
    78         GENARCH_SOURCES += \
    79                 genarch/src/drivers/dsrln/dsrlnout.c
     78GENARCH_SOURCES += \
     79        genarch/src/drivers/dsrln/dsrlnout.c
    8080endif
    8181
    8282ifeq ($(CONFIG_I8042),y)
    83         GENARCH_SOURCES += \
    84                 genarch/src/drivers/i8042/i8042.c
     83GENARCH_SOURCES += \
     84        genarch/src/drivers/i8042/i8042.c
    8585endif
    8686
    8787ifeq ($(CONFIG_NS16550),y)
    88         GENARCH_SOURCES += \
    89                 genarch/src/drivers/ns16550/ns16550.c
     88GENARCH_SOURCES += \
     89        genarch/src/drivers/ns16550/ns16550.c
    9090endif
    9191
    9292ifeq ($(CONFIG_PL011_UART),y)
    93         GENARCH_SOURCES += \
    94                 genarch/src/drivers/pl011/pl011.c
     93GENARCH_SOURCES += \
     94        genarch/src/drivers/pl011/pl011.c
    9595endif
    9696
    9797ifeq ($(CONFIG_S3C24XX_IRQC),y)
    98         GENARCH_SOURCES += \
    99                 genarch/src/drivers/s3c24xx/irqc.c
     98GENARCH_SOURCES += \
     99        genarch/src/drivers/s3c24xx/irqc.c
    100100endif
    101101
    102102ifeq ($(CONFIG_S3C24XX_UART),y)
    103         GENARCH_SOURCES += \
    104                 genarch/src/drivers/s3c24xx/uart.c
     103GENARCH_SOURCES += \
     104        genarch/src/drivers/s3c24xx/uart.c
    105105endif
    106106
    107107ifeq ($(CONFIG_OMAP_UART),y)
    108         GENARCH_SOURCES += \
    109                 genarch/src/drivers/omap/uart.c
     108GENARCH_SOURCES += \
     109        genarch/src/drivers/omap/uart.c
    110110endif
    111111
    112112ifeq ($(CONFIG_GRLIB_UART),y)
    113         GENARCH_SOURCES += \
    114                 genarch/src/drivers/grlib/uart.c
     113GENARCH_SOURCES += \
     114        genarch/src/drivers/grlib/uart.c
    115115endif
    116116
    117117ifeq ($(CONFIG_GRLIB_IRQMP),y)
    118         GENARCH_SOURCES += \
    119                 genarch/src/drivers/grlib/irqmp.c
     118GENARCH_SOURCES += \
     119        genarch/src/drivers/grlib/irqmp.c
    120120endif
    121121
    122122ifeq ($(CONFIG_AM335X_TIMERS),y)
    123         GENARCH_SOURCES += \
    124                 genarch/src/drivers/am335x/timer.c
     123GENARCH_SOURCES += \
     124        genarch/src/drivers/am335x/timer.c
    125125endif
    126126
    127127ifeq ($(CONFIG_BCM2835_MAILBOX),y)
    128         GENARCH_SOURCES += \
    129                 genarch/src/drivers/bcm2835/mbox.c
     128GENARCH_SOURCES += \
     129        genarch/src/drivers/bcm2835/mbox.c
    130130endif
    131131
    132132ifeq ($(CONFIG_VIA_CUDA),y)
    133         GENARCH_SOURCES += \
    134                 genarch/src/drivers/via-cuda/cuda.c
     133GENARCH_SOURCES += \
     134        genarch/src/drivers/via-cuda/cuda.c
    135135endif
    136136
    137137ifeq ($(CONFIG_PC_KBD),y)
    138         GENARCH_SOURCES += \
    139                 genarch/src/kbrd/kbrd.c \
    140                 genarch/src/kbrd/scanc_pc.c
     138GENARCH_SOURCES += \
     139        genarch/src/kbrd/kbrd.c \
     140        genarch/src/kbrd/scanc_pc.c
    141141endif
    142142
    143143ifeq ($(CONFIG_SUN_KBD),y)
    144         GENARCH_SOURCES += \
    145                 genarch/src/kbrd/kbrd.c \
    146                 genarch/src/kbrd/scanc_sun.c
     144GENARCH_SOURCES += \
     145        genarch/src/kbrd/kbrd.c \
     146        genarch/src/kbrd/scanc_sun.c
    147147endif
    148148
    149149ifeq ($(CONFIG_MAC_KBD),y)
    150         GENARCH_SOURCES += \
    151                 genarch/src/kbrd/kbrd.c \
    152                 genarch/src/kbrd/scanc_mac.c
     150GENARCH_SOURCES += \
     151        genarch/src/kbrd/kbrd.c \
     152        genarch/src/kbrd/scanc_mac.c
    153153endif
    154154
    155155ifeq ($(CONFIG_SRLN),y)
    156         GENARCH_SOURCES += \
    157                 genarch/src/srln/srln.c
     156GENARCH_SOURCES += \
     157        genarch/src/srln/srln.c
    158158endif
    159159
    160160ifeq ($(CONFIG_OFW_TREE),y)
    161         GENARCH_SOURCES += \
    162                 genarch/src/ofw/ofw_tree.c
     161GENARCH_SOURCES += \
     162        genarch/src/ofw/ofw_tree.c
    163163endif
    164164
    165165ifeq ($(CONFIG_OFW_PCI),y)
    166         GENARCH_SOURCES += \
    167                 genarch/src/ofw/ebus.c \
    168                 genarch/src/ofw/pci.c  \
    169                 genarch/src/ofw/sbus.c \
    170                 genarch/src/ofw/upa.c
     166GENARCH_SOURCES += \
     167        genarch/src/ofw/ebus.c \
     168        genarch/src/ofw/pci.c  \
     169        genarch/src/ofw/sbus.c \
     170        genarch/src/ofw/upa.c
    171171endif
    172172
    173173ifeq ($(CONFIG_MULTIBOOT), y)
    174         GENARCH_SOURCES += \
    175                 genarch/src/multiboot/multiboot.c \
    176                 genarch/src/multiboot/multiboot2.c
     174GENARCH_SOURCES += \
     175        genarch/src/multiboot/multiboot.c \
     176        genarch/src/multiboot/multiboot2.c
     177GENARCH_AUTOGENS_AG += \
     178        genarch/include/genarch/multiboot/multiboot_memmap_struct.ag \
     179        genarch/include/genarch/multiboot/multiboot_info_struct.ag
     180
     181#
     182# Currently there is no automated way to describe dependencies between two autogenerated headers,
     183# so we need to do it manually
     184genarch/include/genarch/multiboot/multiboot_memmap_struct.h: arch/$(KARCH)/include/arch/boot/memmap_struct.h
     185
    177186endif
    178187
    179188ifeq ($(CONFIG_EGA), y)
    180         GENARCH_SOURCES += \
    181                 genarch/src/drivers/ega/ega.c
     189GENARCH_SOURCES += \
     190        genarch/src/drivers/ega/ega.c
    182191endif
    183192
    184193ifeq ($(CONFIG_IOMAP_BITMAP), y)
    185         GENARCH_SOURCES += \
    186                 genarch/src/ddi/ddi-bitmap.c
     194GENARCH_SOURCES += \
     195        genarch/src/ddi/ddi-bitmap.c
    187196endif
    188197
    189198ifeq ($(CONFIG_IOMAP_DUMMY), y)
    190         GENARCH_SOURCES += \
    191                 genarch/src/ddi/ddi-dummy.c
    192 endif
    193 
     199GENARCH_SOURCES += \
     200        genarch/src/ddi/ddi-dummy.c
     201endif
     202
  • kernel/genarch/include/genarch/multiboot/multiboot.h

    rfa9f8ad r7ba16eb  
    3636#define KERN_MULTIBOOT_H_
    3737
     38#include <genarch/multiboot/multiboot_memmap_struct.h>
     39#include <genarch/multiboot/multiboot_info_struct.h>
     40
    3841#define MULTIBOOT_HEADER_MAGIC  0x1badb002
    3942#define MULTIBOOT_HEADER_FLAGS  0x00010003
    4043
    4144#define MULTIBOOT_LOADER_MAGIC  0x2badb002
     45
     46#define MULTIBOOT_INFO_FLAGS_MEM        0x01
     47#define MULTIBOOT_INFO_FLAGS_BOOT       0x02
     48#define MULTIBOOT_INFO_FLAGS_CMDLINE    0x04
     49#define MULTIBOOT_INFO_FLAGS_MODS       0x08
     50#define MULTIBOOT_INFO_FLAGS_SYMS1      0x10
     51#define MULTIBOOT_INFO_FLAGS_SYMS2      0x20
     52#define MULTIBOOT_INFO_FLAGS_MMAP       0x40
    4253
    4354#ifndef __ASM__
     
    6071} __attribute__((packed)) multiboot_module_t;
    6172
    62 /** Multiboot mmap structure */
    63 typedef struct {
    64         uint32_t size;
    65         e820memmap_t mm_info;
    66 } __attribute__((packed)) multiboot_memmap_t;
    67 
    68 /** Multiboot information structure */
    69 typedef struct {
    70         uint32_t flags;
    71         uint32_t mem_lower;
    72         uint32_t mem_upper;
    73        
    74         uint32_t boot_device;
    75         uint32_t cmdline;
    76        
    77         uint32_t mods_count;
    78         mbaddr_t mods_addr;
    79        
    80         uint32_t syms[4];
    81        
    82         uint32_t mmap_length;
    83         mbaddr_t mmap_addr;
    84        
    85         /* ... */
    86 } __attribute__((packed)) multiboot_info_t;
    87 
    88 enum multiboot_info_flags {
    89         MULTIBOOT_INFO_FLAGS_MEM     = 0x01,
    90         MULTIBOOT_INFO_FLAGS_BOOT    = 0x02,
    91         MULTIBOOT_INFO_FLAGS_CMDLINE = 0x04,
    92         MULTIBOOT_INFO_FLAGS_MODS    = 0x08,
    93         MULTIBOOT_INFO_FLAGS_SYMS1   = 0x10,
    94         MULTIBOOT_INFO_FLAGS_SYMS2   = 0x20,
    95         MULTIBOOT_INFO_FLAGS_MMAP    = 0x40
    96        
    97         /* ... */
    98 };
    99 
    10073extern void multiboot_extract_command(char *, size_t, const char *);
    10174extern void multiboot_extract_argument(char *, size_t, const char *);
Note: See TracChangeset for help on using the changeset viewer.