Lines Matching refs:memory

99 	size_t Hash(aperture_memory *memory) const
100 { return (memory->base - fInfo.base) / B_PAGE_SIZE; }
101 bool Compare(const KeyType &base, aperture_memory *memory) const
102 { return base == memory->base; }
103 aperture_memory *&GetLink(aperture_memory *memory) const
104 { return memory->hash_link; }
124 void DeleteMemory(aperture_memory *memory);
127 status_t AllocateMemory(aperture_memory *memory, uint32 flags);
129 status_t UnbindMemory(aperture_memory *memory);
130 status_t BindMemory(aperture_memory *memory, addr_t base, size_t size);
143 void _Free(aperture_memory *memory);
144 void _Remove(aperture_memory *memory);
145 status_t _Insert(aperture_memory *memory, size_t size, size_t alignment,
454 Aperture::DeleteMemory(aperture_memory *memory)
456 TRACE("delete memory %p\n", memory);
458 UnbindMemory(memory);
459 _Free(memory);
460 _Remove(memory);
461 fHashTable.Remove(memory);
462 delete memory;
469 aperture_memory *memory = new(std::nothrow) aperture_memory;
470 if (memory == NULL)
473 status_t status = _Insert(memory, size, alignment, flags);
476 "this memory object\n");
477 delete memory;
481 TRACE("create memory %p, base %" B_PRIxADDR ", size %" B_PRIxSIZE
482 ", flags %" B_PRIx32 "\n", memory, memory->base, memory->size, flags);
484 memory->flags = flags;
486 memory->pages = NULL;
488 memory->area = -1;
491 fHashTable.Insert(memory);
492 return memory;
518 Aperture::AllocateMemory(aperture_memory *memory, uint32 flags)
520 // We don't need to allocate reserved memory - it's
522 addr_t base = memory->base;
523 size_t size = memory->size;
526 TRACE("allocation is made of reserved memory\n");
530 memset((void *)memory->base, 0, memory->size - size);
532 TRACE("allocate %ld bytes out of %ld\n", size, memory->size);
544 memory->page = vm_page_allocate_page_run(
547 if (memory->page == NULL) {
554 memory->pages = (vm_page **)malloc(count * sizeof(vm_page *));
555 if (memory->pages == NULL)
573 memory->pages[i] = page + i;
578 memory->pages[i] = vm_page_allocate_page(&reservation,
586 memory->allocating_thread = find_thread(NULL);
591 memory->area = create_area("GART memory", &address, B_ANY_KERNEL_ADDRESS,
594 if (memory->area < B_OK) {
600 memory->flags |= ALLOCATED_APERTURE;
606 Aperture::UnbindMemory(aperture_memory *memory)
608 if ((memory->flags & BIND_APERTURE) == 0)
611 // We must not unbind reserved memory
612 addr_t base = memory->base;
613 size_t size = memory->size;
615 memory->flags &= ~BIND_APERTURE;
622 for (addr_t offset = 0; offset < memory->size; offset += B_PAGE_SIZE) {
628 memory->flags &= ~BIND_APERTURE;
635 Aperture::BindMemory(aperture_memory *memory, addr_t address, size_t size)
639 if ((memory->flags & ALLOCATED_APERTURE) != 0) {
640 // We allocated this memory, get the base and size from there
641 size = memory->size;
645 // We don't need to bind reserved memory
646 addr_t base = memory->base;
650 TRACE("reserved memory already bound\n");
651 memory->flags |= BIND_APERTURE;
678 if ((memory->flags & B_APERTURE_NEED_PHYSICAL) != 0)
679 page = memory->page + index;
681 page = memory->pages[index];
695 memory->flags |= BIND_APERTURE;
702 Aperture::_Free(aperture_memory *memory)
704 if ((memory->flags & ALLOCATED_APERTURE) == 0)
709 size_t size = memory->size;
711 if (memory->base < reservedEnd)
712 size -= reservedEnd - memory->base;
717 if ((memory->flags & B_APERTURE_NEED_PHYSICAL) != 0) {
718 vm_page *page = memory->page;
720 DEBUG_PAGE_ACCESS_TRANSFER(page, memory->allocating_thread);
724 memory->page = NULL;
727 DEBUG_PAGE_ACCESS_TRANSFER(memory->pages[i],
728 memory->allocating_thread);
729 vm_page_set_state(memory->pages[i], PAGE_STATE_FREE);
732 free(memory->pages);
733 memory->pages = NULL;
736 delete_area(memory->area);
737 memory->area = -1;
740 memory->flags &= ~ALLOCATED_APERTURE;
745 Aperture::_Remove(aperture_memory *memory)
750 if (memory == current) {
766 Aperture::_Insert(aperture_memory *memory, size_t size, size_t alignment,
804 memory->base = ROUNDUP(start, alignment);
827 memory->base = ROUNDUP(last->base + last->size, alignment);
828 if (memory->base < start)
829 memory->base = start;
836 memory->size = size;
838 memory->next = last->next;
839 last->next = memory;
841 memory->next = fFirstMemory;
842 fFirstMemory = memory;
1044 aperture_memory *memory = aperture->CreateMemory(size, alignment, flags);
1045 if (memory == NULL)
1048 status_t status = aperture->AllocateMemory(memory, flags);
1050 status = aperture->BindMemory(memory, 0, 0);
1052 aperture->DeleteMemory(memory);
1059 = (phys_addr_t)memory->page->physical_page_number * B_PAGE_SIZE;
1062 status = get_memory_map((void *)memory->base, B_PAGE_SIZE, &entry, 1);
1064 aperture->DeleteMemory(memory);
1072 *_apertureBase = memory->base;
1085 aperture_memory *memory = aperture->GetMemory(base);
1086 if (memory == NULL)
1089 aperture->DeleteMemory(memory);
1140 aperture_memory *memory = NULL;
1143 memory = aperture->GetMemory(reservedBase);
1144 if (memory == NULL)
1147 // create new memory object
1148 memory = aperture->CreateMemory(size, alignment,
1150 if (memory == NULL)
1154 // just bind the physical pages backing the memory into the GART
1156 status_t status = aperture->BindMemory(memory, base, size);
1159 aperture->DeleteMemory(memory);
1165 *_apertureBase = memory->base;
1179 aperture_memory *memory = aperture->GetMemory(base);
1180 if (memory == NULL || (memory->flags & BIND_APERTURE) == 0)
1183 if ((memory->flags & ALLOCATED_APERTURE) != 0)
1184 panic("unbind memory %lx (%p) allocated by agp_gart.", base, memory);
1186 status_t status = aperture->UnbindMemory(memory);
1190 if ((memory->flags & RESERVED_APERTURE) == 0)
1191 aperture->DeleteMemory(memory);
1218 // Since there can be custom aperture modules (for memory management only),