コード例 #1
0
ファイル: memory_catalog.c プロジェクト: jasonpr59/asbestos
void memory_catalog_initialize(struct MultibootInfo *multiboot_info) {
  next_unused_block = (struct MemoryCatalogBlock *)
    boot_allocate(sizeof(struct MemoryCatalogBlock) * kPagesPerMemorySpace);

  int memory_size_kibibytes = (multiboot_info->mem_lower +
			       multiboot_info->mem_upper);
  cprintf("Found %dMB of usable RAM.\n", memory_size_kibibytes / 1024);

  size_t mmap_length = (size_t) multiboot_info->mmap_length;
  uintptr_t mmap_addr = (uintptr_t) multiboot_info->mmap_addr;

  size_t offset = 0;
  while (offset < mmap_length) {
    struct MultibootMemoryMapEntry *mmap_entry =
      (struct MultibootMemoryMapEntry *) (mmap_addr + offset);
    if (mmap_entry->type == MULTIBOOT_MEMORY_USABLE) {
      uintptr_t base_addr = mmap_entry->base_addr;
      if (base_addr % kMemoryCatalogBlockSize) {
	// TODO(jasonpr): Don't panic. Just round up, lessen the
	// length accordingly, and carry on.
	panic("Got misaligned memory mapping from bootloader: 0x%0x.\n",
	      base_addr);
      }
      catalog_memory_range(base_addr, mmap_entry->length);
    }
    // Skip over the size field, and then the rest of the entry.
    offset += sizeof(mmap_entry->size) + mmap_entry->size; 
  }
}
コード例 #2
0
void init_buddy() {

    get_mmap();
    print_mmap();

    // request memory for page descriptors
    // requested pages for all memory until the last available address -- because I can
    dt_size = (find_max_available_address() / PAGE_SIZE) * sizeof(page_descr);
    descr_table = (page_descr*) boot_allocate(dt_size);

    // initialize dt
    page_descr* prev = heads + 0;
    for(unsigned int i = 0; i < dt_size; ++i) {
        set_page_descr(descr_table + i, i, PAGE_DESCRIPTOR_RESERVED, 0, prev, NULL);
    }

    //initialize heads
    for(int i = 0; i < MAX_SIZE; ++i) {
        set_page_descr(heads + i, 0, PAGE_DESCRIPTOR_FICT, i, NULL, NULL);
    }

    //initialize actually available descriptors
    activate_available_mem();

    //print_pages();
}
コード例 #3
0
ファイル: irfboot.c プロジェクト: agaurav/QT-GRETL
static irfboot *irf_boot_new (const GRETL_VAR *var, int periods)
{
    irfboot *b;
    int err = 0;

    b = malloc(sizeof *b);
    if (b == NULL) {
	return NULL;
    }

    b->rE = NULL;
    b->Xt = NULL;
    b->Yt = NULL;
    b->Et = NULL;
    b->rtmp = NULL;
    b->ctmp = NULL;
    b->resp = NULL;
    b->C0 = NULL;

    b->sample = NULL;
    b->dset = NULL;

    b->horizon = periods;

    if (var->jinfo != NULL) {
	b->ncoeff = var->ncoeff + (var->neqns - jrank(var)) + 
	    n_restricted_terms(var); /* FIXME? */
    } else {
	b->ncoeff = var->ncoeff;
    }

#if BDEBUG
    fprintf(stderr, "boot: t1=%d, t2=%d, ncoeff=%d, horizon=%d\n",
	    var->t1, var->t2, b->ncoeff, b->horizon);
    fprintf(stderr, " T=%d, neqns=%d, order=%d, rank=%d, ifc=%d\n",
	    var->T, var->neqns, var->order, jrank(var), var->ifc); 
#endif

    err = boot_allocate(b, var);

    if (err) {
	irf_boot_free(b);
	b = NULL;
    }

    return b;
}