Changeset 7c34822e in mainline for kernel/generic/src/lib/rd.c


Ignore:
Timestamp:
2006-11-30T15:38:45Z (18 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.