Subversion Repositories Kolibri OS

Rev

Rev 854 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
854 serge 1
 
2
 
3
4
#include "multiboot.h"
5
 
6
extern u32_t pg_balloc;
7
 
8
extern u32_t mem_amount;
9
 
10
extern u32_t rd_fat      ;
11
extern u32_t rd_fat_end  ;
12
extern u32_t rd_root     ;
13
extern u32_t rd_root_end ;
14
15
extern multiboot_info_t *boot_mbi;
16
 
17
/* Check if the bit BIT in FLAGS is set.  */
18
 
19
20
void init()
21
 
22
   u32_t   last_page = 0;
23
24
   if (CHECK_FLAG (boot_mbi->flags, 1))
25
 
26
27
  /* Is the command line passed?  */
28
 
29
     printf ("cmdline = %s\n", (char *) boot_mbi->cmdline);
30
31
  /* Are mods_* valid?  */
32
 
33
   {
34
     module_t *mod;
35
     int i;
36
37
   //  printf ("mods_count = %d, mods_addr = 0x%x\n",
38
 
861 serge 39
     for (i = 0, mod = (module_t *) boot_mbi->mods_addr;
40
          i < boot_mbi->mods_count;i++, mod++)
854 serge 41
     {
42
        pg_balloc = mod->mod_end;
43
    //    printf (" mod_start = 0x%x, mod_end = 0x%x, string = %s\n",
44
    //          (u32_t) mod->mod_start,(u32_t) mod->mod_end, (char *) mod->string);
861 serge 45
     };
46
     mod--;
854 serge 47
     rd_base     = mod->mod_start+OS_BASE;
48
     rd_fat      = rd_base + 512;
49
     rd_fat_end  = rd_base + 512 + 4278;
50
     rd_root     = rd_base + 512*19;
51
     rd_root_end = rd_base + 512*33;
52
   //  printf(" rd_base = %x\n", rd_base);
53
   }
861 serge 54
854 serge 55
   if (CHECK_FLAG (boot_mbi->flags, 6))
56
 
57
      memory_map_t *mmap;
58
      u32_t page;
59
60
    //  printf ("mmap_addr = 0x%x, mmap_length = 0x%x\n",
61
 
861 serge 62
63
      for (mmap = (memory_map_t *) boot_mbi->mmap_addr;
854 serge 64
 
65
           mmap = (memory_map_t *) ((u32_t) mmap
66
				    + mmap->size + sizeof (mmap->size)))
67
      {
68
         u32_t page;
69
        /*
70
         printf (" size = 0x%x, base_addr = 0x%x%x,"
861 serge 71
                 " length = 0x%x%x, type = 0x%x\n",
854 serge 72
                 (unsigned) mmap->size,
73
                 (unsigned) mmap->base_addr_high,
74
                 (unsigned) mmap->base_addr_low,
75
                 (unsigned) mmap->length_high,
76
                 (unsigned) mmap->length_low,
77
                 (unsigned) mmap->type);
78
          */
79
         if( mmap->type != 1)
861 serge 80
           continue;
854 serge 81
         page = (mmap->base_addr_low+mmap->length_low)&(~4095);
82
         if(page > last_page)
83
         last_page = page;
84
      }
85
   }
86
87
   if(last_page > 256*1024*1024)
88
 
89
90
   mem_amount = last_page;
91
 
92
 };
93