Changeset 7c34822e in mainline for kernel


Ignore:
Timestamp:
2006-11-30T15:38:45Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7bf7ef7
Parents:
8c19cf28
Message:

update rd

Location:
kernel/generic
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/lib/rd.h

    r8c19cf28 r7c34822e  
    7676} rd_header;
    7777
    78 extern int init_rd(rd_header * addr);
     78extern int init_rd(rd_header * addr, size_t size);
    7979
    8080#endif
  • kernel/generic/src/lib/rd.c

    r8c19cf28 r7c34822e  
    4040#include <lib/rd.h>
    4141#include <arch/byteorder.h>
     42#include <mm/frame.h>
     43#include <sysinfo/sysinfo.h>
    4244
    43 int init_rd(rd_header * header)
     45int init_rd(rd_header * header, size_t size)
    4446{
    4547        /* Identify RAM disk */
     
    5153                return RE_UNSUPPORTED;
    5254       
    53         uint64_t hsize;
     55        uint32_t hsize;
     56        uint64_t dsize;
    5457        switch (header->data_type) {
    5558        case RD_DATA_LSB:
    56                 hsize = uint64_t_le2host(header->header_size);
     59                hsize = uint32_t_le2host(header->header_size);
     60                dsize = uint64_t_le2host(header->data_size);
    5761                break;
    58 //      case RD_DATA_MSB:
    59 //              hsize = uint64_t_be2host(header->header_size);
    60 //              break;
     62        case RD_DATA_MSB:
     63                hsize = uint32_t_be2host(header->header_size);
     64                dsize = uint64_t_le2host(header->data_size);
     65                break;
    6166        default:
    6267                return RE_UNSUPPORTED;
    6368        }
    64                
     69       
     70        if ((hsize % FRAME_SIZE) || (dsize % FRAME_SIZE))
     71                return RE_UNSUPPORTED;
     72       
     73        if (hsize > size)
     74                return RE_INVALID;
     75       
     76        if ((uint64_t) hsize + dsize > size)
     77                dsize = size - hsize;
     78       
     79        sysinfo_set_item_val("rd", NULL, true);
     80        sysinfo_set_item_val("rd.size", NULL, dsize);
     81        sysinfo_set_item_val("rd.address.physical", NULL, (unative_t) KA2PA((void *) header + hsize));
    6582
    6683        return RE_OK;
  • kernel/generic/src/main/kinit.c

    r8c19cf28 r7c34822e  
    181181                                ipc_phone_0 = &utask->answerbox;
    182182                } else {
    183                         int rd = init_rd((void *) init.tasks[i].addr);
     183                        int rd = init_rd((rd_header *) init.tasks[i].addr, init.tasks[i].size);
    184184                       
    185185                        if (rd != RE_OK)
Note: See TracChangeset for help on using the changeset viewer.