Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset fb48a0e in mainline


Ignore:
Timestamp:
2011-11-30T13:36:49Z (10 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master
Children:
317a463, c48f6ab
Parents:
83285fd
Message:

simplify RAM disk creation and usage
get rid of the useless HORD header

Files:
1 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • boot/Makefile

    r83285fd rfb48a0e  
    4040        $(PACK) $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) arch/$(KARCH) $(COMPONENTS)
    4141
    42 $(INITRD).img: $(INITRD).fs
    43         $(MKHORD) $(PAGE_SIZE) $< $@
    44 
    45 $(INITRD).fs: build_dist
     42$(INITRD).img: build_dist
    4643ifeq ($(RDFMT),tmpfs)
    4744        $(MKTMPFS) $(DIST_PATH) $@
     
    9592
    9693clean_dist:
    97         rm -f $(INITRD).fs $(INITRD).img $(COMPS_H) $(COMPS_C) $(LINK) $(LINK).comp *.co
     94        rm -f $(INITRD).img $(COMPS_H) $(COMPS_C) $(LINK) $(LINK).comp *.co
    9895        rm -f $(USPACE_PATH)/dist/srv/*
    9996        rm -rf $(USPACE_PATH)/dist/drv/*
  • boot/Makefile.common

    r83285fd rfb48a0e  
    5353SANDBOX = pack
    5454PACK = $(TOOLS_PATH)/pack.py
    55 MKHORD = $(TOOLS_PATH)/mkhord.py
    5655MKTMPFS = $(TOOLS_PATH)/mktmpfs.py
    5756MKFAT = $(TOOLS_PATH)/mkfat.py
  • boot/arch/amd64/Makefile.inc

    r83285fd rfb48a0e  
    2626# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727#
    28 
    29 PAGE_SIZE = 4096
    3028
    3129RD_SRVS_ESSENTIAL += \
  • boot/arch/arm32/Makefile.inc

    r83285fd rfb48a0e  
    3939BITS = 32
    4040ENDIANESS = LE
    41 PAGE_SIZE = 4096
    4241
    4342RD_SRVS_ESSENTIAL += \
  • boot/arch/ia64/Makefile.inc

    r83285fd rfb48a0e  
    3333BITS = 64
    3434ENDIANESS = LE
    35 PAGE_SIZE = 16384
    3635EXTRA_CFLAGS = -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -mno-sdata
    3736
  • boot/arch/mips32/Makefile.inc

    r83285fd rfb48a0e  
    2929BFD_ARCH = mips
    3030BITS = 32
    31 PAGE_SIZE = 16384
    3231EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=32
    3332
  • boot/arch/mips64/Makefile.inc

    r83285fd rfb48a0e  
    2929BFD_ARCH = mips:4000
    3030BITS = 64
    31 PAGE_SIZE = 16384
    3231EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=64
    3332
  • boot/arch/ppc32/Makefile.inc

    r83285fd rfb48a0e  
    3737BITS = 32
    3838ENDIANESS = BE
    39 PAGE_SIZE = 4096
    4039EXTRA_CFLAGS = -mcpu=powerpc -msoft-float -m32
    4140
  • boot/arch/sparc64/Makefile.inc

    r83285fd rfb48a0e  
    3737BITS = 64
    3838ENDIANESS = BE
    39 PAGE_SIZE = 16384
    4039EXTRA_CFLAGS = -mcpu=ultrasparc -m64 -mno-fpu -mcmodel=medlow
    4140
  • kernel/generic/include/lib/rd.h

    r83285fd rfb48a0e  
    3838#include <typedefs.h>
    3939
    40 /**
    41  * RAM disk version
    42  */
    43 #define RD_VERSION      1
    44 
    45 /**
    46  * RAM disk magic number
    47  */
    48 #define RD_MAGIC_SIZE   4
    49 #define RD_MAG0                 'H'
    50 #define RD_MAG1                 'O'
    51 #define RD_MAG2                 'R'
    52 #define RD_MAG3                 'D'
    53 
    54 /**
    55  * RAM disk data encoding types
    56  */
    57 #define RD_DATA_NONE    0
    58 #define RD_DATA_LSB             1               /* Least significant byte first (little endian) */
    59 #define RD_DATA_MSB             2               /* Most signigicant byte first (big endian) */
    60 
    61 /**
    62  * RAM disk error return codes
    63  */
    64 #define RE_OK                   0       /* No error */
    65 #define RE_INVALID              1       /* Invalid RAM disk image */
    66 #define RE_UNSUPPORTED          2       /* Non-supported image (e.g. wrong version) */
    67 
    68 /** RAM disk header */
    69 struct rd_header {
    70         uint8_t magic[RD_MAGIC_SIZE];
    71         uint8_t version;
    72         uint8_t data_type;
    73         uint32_t header_size;
    74         uint64_t data_size;
    75 } __attribute__ ((packed));
    76 
    77 typedef struct rd_header rd_header_t;
    78 
    79 extern int init_rd(rd_header_t *addr, size_t size);
     40extern void init_rd(void *, size_t);
    8041
    8142#endif
  • kernel/generic/src/lib/rd.c

    r83285fd rfb48a0e  
    3333/**
    3434 * @file
    35  * @brief       RAM disk support.
     35 * @brief RAM disk support.
    3636 *
    3737 * Support for RAM disk images.
     
    3939
    4040#include <lib/rd.h>
    41 #include <byteorder.h>
    4241#include <mm/frame.h>
    4342#include <sysinfo/sysinfo.h>
    4443#include <ddi/ddi.h>
    45 #include <align.h>
    4644
    47 static parea_t rd_parea;                /**< Physical memory area for rd. */
     45/** Physical memory area for RAM disk. */
     46static parea_t rd_parea;
    4847
    49 /**
    50  * RAM disk initialization routine. At this point, the RAM disk memory is shared
    51  * and information about the share is provided as sysinfo values to the
    52  * userspace tasks.
    53  */ 
    54 int init_rd(rd_header_t *header, size_t size)
     48/** RAM disk initialization routine
     49 *
     50 * The information about the RAM disk is provided as sysinfo
     51 * values to the uspace tasks.
     52 *
     53 */
     54void init_rd(void *data, size_t size)
    5555{
    56         /* Identify RAM disk */
    57         if ((header->magic[0] != RD_MAG0) || (header->magic[1] != RD_MAG1) ||
    58             (header->magic[2] != RD_MAG2) || (header->magic[3] != RD_MAG3))
    59                 return RE_INVALID;
     56        uintptr_t base = KA2PA((uintptr_t) data);
     57        ASSERT((base % FRAME_SIZE) == 0);
    6058       
    61         /* Identify version */ 
    62         if (header->version != RD_VERSION)
    63                 return RE_UNSUPPORTED;
    64        
    65         uint32_t hsize;
    66         uint64_t dsize;
    67         switch (header->data_type) {
    68         case RD_DATA_LSB:
    69                 hsize = uint32_t_le2host(header->header_size);
    70                 dsize = uint64_t_le2host(header->data_size);
    71                 break;
    72         case RD_DATA_MSB:
    73                 hsize = uint32_t_be2host(header->header_size);
    74                 dsize = uint64_t_be2host(header->data_size);
    75                 break;
    76         default:
    77                 return RE_UNSUPPORTED;
    78         }
    79        
    80         if ((hsize % FRAME_SIZE) || (dsize % FRAME_SIZE))
    81                 return RE_UNSUPPORTED;
    82                
    83         if (hsize > size)
    84                 return RE_INVALID;
    85        
    86         if ((uint64_t) hsize + dsize > size)
    87                 dsize = size - hsize;
    88        
    89         rd_parea.pbase = ALIGN_DOWN((uintptr_t) KA2PA((void *) header + hsize),
    90             FRAME_SIZE);
    91         rd_parea.frames = SIZE2FRAMES(dsize);
     59        rd_parea.pbase = base;
     60        rd_parea.frames = SIZE2FRAMES(size);
    9261        rd_parea.unpriv = false;
    9362        rd_parea.mapped = false;
    9463        ddi_parea_register(&rd_parea);
    95 
     64       
    9665        sysinfo_set_item_val("rd", NULL, true);
    97         sysinfo_set_item_val("rd.header_size", NULL, hsize);   
    98         sysinfo_set_item_val("rd.size", NULL, dsize);
    99         sysinfo_set_item_val("rd.address.physical", NULL,
    100             (sysarg_t) KA2PA((void *) header + hsize));
    101 
    102         return RE_OK;
     66        sysinfo_set_item_val("rd.size", NULL, size);
     67        sysinfo_set_item_val("rd.address.physical", NULL, (sysarg_t) base);
    10368}
    10469
  • kernel/generic/src/main/kinit.c

    r83285fd rfb48a0e  
    179179        for (i = 0; i < init.cnt; i++) {
    180180                if (init.tasks[i].addr % FRAME_SIZE) {
    181                         printf("init[%zu].addr is not frame aligned\n", i);
     181                        printf("init[%zu]: Address is not frame aligned\n", i);
    182182                        programs[i].task = NULL;
    183183                        continue;
     
    203203                    namebuf, &programs[i]);
    204204               
    205                 if ((rc == 0) && (programs[i].task != NULL)) {
     205                if (rc == 0) {
     206                        if (programs[i].task != NULL) {
     207                                /*
     208                                 * Set capabilities to init userspace tasks.
     209                                 */
     210                                cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER |
     211                                    CAP_IO_MANAGER | CAP_IRQ_REG);
     212                               
     213                                if (!ipc_phone_0)
     214                                        ipc_phone_0 = &programs[i].task->answerbox;
     215                        }
     216                       
    206217                        /*
    207                          * Set capabilities to init userspace tasks.
     218                         * If programs[i].task == NULL then it is
     219                         * the program loader and it was registered
     220                         * successfully.
    208221                         */
    209                         cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER |
    210                             CAP_IO_MANAGER | CAP_IRQ_REG);
    211                        
    212                         if (!ipc_phone_0)
    213                                 ipc_phone_0 = &programs[i].task->answerbox;
    214                 } else if (rc == 0) {
    215                         /* It was the program loader and was registered */
    216                 } else {
    217                         /* RAM disk image */
    218                         int rd = init_rd((rd_header_t *) init.tasks[i].addr, init.tasks[i].size);
    219                        
    220                         if (rd != RE_OK)
    221                                 printf("Init binary %zu not used (error %d)\n", i, rd);
    222                 }
     222                } else if (i == init.cnt - 1) {
     223                        /*
     224                         * Assume the last task is the RAM disk.
     225                         */
     226                        init_rd((void *) init.tasks[i].addr, init.tasks[i].size);
     227                } else
     228                        printf("init[%zu]: Init binary load failed (error %d)\n", i, rc);
    223229        }
    224230       
Note: See TracChangeset for help on using the changeset viewer.