seg 96 bsp/hal/x86/arch/cpu.c struct seg_desc *seg = &gdt[vec];
seg 102 bsp/hal/x86/arch/cpu.c seg->limit_lo = limit;
seg 103 bsp/hal/x86/arch/cpu.c seg->base_lo = (u_int)base & 0xffff;
seg 104 bsp/hal/x86/arch/cpu.c seg->base_mid = ((u_int)base >> 16) & 0xff;
seg 105 bsp/hal/x86/arch/cpu.c seg->limit_hi = limit >> 16;
seg 106 bsp/hal/x86/arch/cpu.c seg->base_hi = (u_int)base >> 24;
seg 107 bsp/hal/x86/arch/cpu.c seg->type = (u_int)type | ST_PRESENT;
seg 108 bsp/hal/x86/arch/cpu.c seg->size = size;
seg 41 sys/include/vm.h struct seg {
seg 42 sys/include/vm.h struct seg *prev; /* segment list sorted by address */
seg 43 sys/include/vm.h struct seg *next;
seg 44 sys/include/vm.h struct seg *sh_prev; /* link for all shared segments */
seg 45 sys/include/vm.h struct seg *sh_next;
seg 70 sys/include/vm.h struct seg head; /* list head of segements */
seg 57 sys/mem/vm.c static void seg_init(struct seg *);
seg 58 sys/mem/vm.c static struct seg *seg_create(struct seg *, vaddr_t, size_t);
seg 59 sys/mem/vm.c static void seg_delete(struct seg *, struct seg *);
seg 60 sys/mem/vm.c static struct seg *seg_lookup(struct seg *, vaddr_t, size_t);
seg 61 sys/mem/vm.c static struct seg *seg_alloc(struct seg *, size_t);
seg 62 sys/mem/vm.c static void seg_free(struct seg *, struct seg *);
seg 63 sys/mem/vm.c static struct seg *seg_reserve(struct seg *, vaddr_t, size_t);
seg 121 sys/mem/vm.c struct seg *seg;
seg 135 sys/mem/vm.c if ((seg = seg_alloc(&map->head, size)) == NULL)
seg 142 sys/mem/vm.c if ((seg = seg_reserve(&map->head, start, size)) == NULL)
seg 145 sys/mem/vm.c seg->flags = SEG_READ | SEG_WRITE;
seg 153 sys/mem/vm.c if (mmu_map(map->pgd, pa, seg->addr, size, PG_WRITE))
seg 156 sys/mem/vm.c seg->phys = pa;
seg 159 sys/mem/vm.c memset(ptokv(pa), 0, seg->size);
seg 160 sys/mem/vm.c *addr = (void *)seg->addr;
seg 167 sys/mem/vm.c seg_free(&map->head, seg);
seg 209 sys/mem/vm.c struct seg *seg;
seg 217 sys/mem/vm.c seg = seg_lookup(&map->head, va, 1);
seg 218 sys/mem/vm.c if (seg == NULL || seg->addr != va || (seg->flags & SEG_FREE))
seg 224 sys/mem/vm.c mmu_map(map->pgd, seg->phys, seg->addr, seg->size, PG_UNMAP);
seg 229 sys/mem/vm.c if (!(seg->flags & SEG_SHARED) && !(seg->flags & SEG_MAPPED))
seg 230 sys/mem/vm.c page_free(seg->phys, seg->size);
seg 232 sys/mem/vm.c map->total -= seg->size;
seg 233 sys/mem/vm.c seg_free(&map->head, seg);
seg 278 sys/mem/vm.c struct seg *seg;
seg 288 sys/mem/vm.c seg = seg_lookup(&map->head, va, 1);
seg 289 sys/mem/vm.c if (seg == NULL || seg->addr != va || (seg->flags & SEG_FREE)) {
seg 295 sys/mem/vm.c if (seg->flags & SEG_MAPPED)
seg 302 sys/mem/vm.c if (seg->flags & SEG_WRITE) {
seg 317 sys/mem/vm.c if (seg->flags & SEG_SHARED) {
seg 319 sys/mem/vm.c old_pa = seg->phys;
seg 322 sys/mem/vm.c if ((new_pa = page_alloc(seg->size)) == 0)
seg 326 sys/mem/vm.c memcpy(ptokv(new_pa), ptokv(old_pa), seg->size);
seg 329 sys/mem/vm.c if (mmu_map(map->pgd, new_pa, seg->addr, seg->size,
seg 331 sys/mem/vm.c page_free(new_pa, seg->size);
seg 334 sys/mem/vm.c seg->phys = new_pa;
seg 337 sys/mem/vm.c seg->sh_prev->sh_next = seg->sh_next;
seg 338 sys/mem/vm.c seg->sh_next->sh_prev = seg->sh_prev;
seg 339 sys/mem/vm.c if (seg->sh_prev == seg->sh_next)
seg 340 sys/mem/vm.c seg->sh_prev->flags &= ~SEG_SHARED;
seg 341 sys/mem/vm.c seg->sh_next = seg->sh_prev = seg;
seg 343 sys/mem/vm.c if (mmu_map(map->pgd, seg->phys, seg->addr, seg->size,
seg 347 sys/mem/vm.c seg->flags = new_flags;
seg 388 sys/mem/vm.c struct seg *seg, *cur, *tgt;
seg 414 sys/mem/vm.c seg = seg_lookup(&map->head, start, size);
seg 415 sys/mem/vm.c if (seg == NULL || (seg->flags & SEG_FREE))
seg 417 sys/mem/vm.c tgt = seg;
seg 423 sys/mem/vm.c if ((seg = seg_alloc(&curmap->head, size)) == NULL)
seg 425 sys/mem/vm.c cur = seg;
seg 437 sys/mem/vm.c seg_free(&curmap->head, seg);
seg 485 sys/mem/vm.c struct seg *seg, *tmp;
seg 491 sys/mem/vm.c seg = &map->head;
seg 493 sys/mem/vm.c if (seg->flags != SEG_FREE) {
seg 495 sys/mem/vm.c mmu_map(map->pgd, seg->phys, seg->addr,
seg 496 sys/mem/vm.c seg->size, PG_UNMAP);
seg 499 sys/mem/vm.c if (!(seg->flags & SEG_SHARED) &&
seg 500 sys/mem/vm.c !(seg->flags & SEG_MAPPED)) {
seg 501 sys/mem/vm.c page_free(seg->phys, seg->size);
seg 504 sys/mem/vm.c tmp = seg;
seg 505 sys/mem/vm.c seg = seg->next;
seg 507 sys/mem/vm.c } while (seg != &map->head);
seg 548 sys/mem/vm.c struct seg *tmp, *src, *dest;
seg 746 sys/mem/vm.c struct seg *seg;
seg 754 sys/mem/vm.c seg = &map->head;
seg 759 sys/mem/vm.c info->virt = seg->addr;
seg 760 sys/mem/vm.c info->size = seg->size;
seg 761 sys/mem/vm.c info->flags = seg->flags;
seg 762 sys/mem/vm.c info->phys = seg->phys;
seg 766 sys/mem/vm.c seg = seg->next;
seg 767 sys/mem/vm.c } while (seg != &map->head);
seg 794 sys/mem/vm.c seg_init(struct seg *seg)
seg 797 sys/mem/vm.c seg->next = seg->prev = seg;
seg 798 sys/mem/vm.c seg->sh_next = seg->sh_prev = seg;
seg 799 sys/mem/vm.c seg->addr = PAGE_SIZE;
seg 800 sys/mem/vm.c seg->phys = 0;
seg 801 sys/mem/vm.c seg->size = USERLIMIT - PAGE_SIZE;
seg 802 sys/mem/vm.c seg->flags = SEG_FREE;
seg 809 sys/mem/vm.c static struct seg *
seg 810 sys/mem/vm.c seg_create(struct seg *prev, vaddr_t addr, size_t size)
seg 812 sys/mem/vm.c struct seg *seg;
seg 814 sys/mem/vm.c if ((seg = kmem_alloc(sizeof(*seg))) == NULL)
seg 817 sys/mem/vm.c seg->addr = addr;
seg 818 sys/mem/vm.c seg->size = size;
seg 819 sys/mem/vm.c seg->phys = 0;
seg 820 sys/mem/vm.c seg->flags = SEG_FREE;
seg 821 sys/mem/vm.c seg->sh_next = seg->sh_prev = seg;
seg 823 sys/mem/vm.c seg->next = prev->next;
seg 824 sys/mem/vm.c seg->prev = prev;
seg 825 sys/mem/vm.c prev->next->prev = seg;
seg 826 sys/mem/vm.c prev->next = seg;
seg 828 sys/mem/vm.c return seg;
seg 835 sys/mem/vm.c seg_delete(struct seg *head, struct seg *seg)
seg 841 sys/mem/vm.c if (seg->flags & SEG_SHARED) {
seg 842 sys/mem/vm.c seg->sh_prev->sh_next = seg->sh_next;
seg 843 sys/mem/vm.c seg->sh_next->sh_prev = seg->sh_prev;
seg 844 sys/mem/vm.c if (seg->sh_prev == seg->sh_next)
seg 845 sys/mem/vm.c seg->sh_prev->flags &= ~SEG_SHARED;
seg 847 sys/mem/vm.c if (head != seg)
seg 848 sys/mem/vm.c kmem_free(seg);
seg 854 sys/mem/vm.c static struct seg *
seg 855 sys/mem/vm.c seg_lookup(struct seg *head, vaddr_t addr, size_t size)
seg 857 sys/mem/vm.c struct seg *seg;
seg 859 sys/mem/vm.c seg = head;
seg 861 sys/mem/vm.c if (seg->addr <= addr &&
seg 862 sys/mem/vm.c seg->addr + seg->size >= addr + size) {
seg 863 sys/mem/vm.c return seg;
seg 865 sys/mem/vm.c seg = seg->next;
seg 866 sys/mem/vm.c } while (seg != head);
seg 873 sys/mem/vm.c static struct seg *
seg 874 sys/mem/vm.c seg_alloc(struct seg *head, size_t size)
seg 876 sys/mem/vm.c struct seg *seg;
seg 878 sys/mem/vm.c seg = head;
seg 880 sys/mem/vm.c if ((seg->flags & SEG_FREE) && seg->size >= size) {
seg 881 sys/mem/vm.c if (seg->size != size) {
seg 885 sys/mem/vm.c if (seg_create(seg,
seg 886 sys/mem/vm.c seg->addr + size,
seg 887 sys/mem/vm.c seg->size - size) == NULL)
seg 890 sys/mem/vm.c seg->size = size;
seg 891 sys/mem/vm.c return seg;
seg 893 sys/mem/vm.c seg = seg->next;
seg 894 sys/mem/vm.c } while (seg != head);
seg 902 sys/mem/vm.c seg_free(struct seg *head, struct seg *seg)
seg 904 sys/mem/vm.c struct seg *prev, *next;
seg 906 sys/mem/vm.c ASSERT(seg->flags != SEG_FREE);
seg 908 sys/mem/vm.c seg->flags = SEG_FREE;
seg 913 sys/mem/vm.c if (seg->flags & SEG_SHARED) {
seg 914 sys/mem/vm.c seg->sh_prev->sh_next = seg->sh_next;
seg 915 sys/mem/vm.c seg->sh_next->sh_prev = seg->sh_prev;
seg 916 sys/mem/vm.c if (seg->sh_prev == seg->sh_next)
seg 917 sys/mem/vm.c seg->sh_prev->flags &= ~SEG_SHARED;
seg 922 sys/mem/vm.c next = seg->next;
seg 924 sys/mem/vm.c seg->next = next->next;
seg 925 sys/mem/vm.c next->next->prev = seg;
seg 926 sys/mem/vm.c seg->size += next->size;
seg 932 sys/mem/vm.c prev = seg->prev;
seg 933 sys/mem/vm.c if (seg != head && (prev->flags & SEG_FREE)) {
seg 934 sys/mem/vm.c prev->next = seg->next;
seg 935 sys/mem/vm.c seg->next->prev = prev;
seg 936 sys/mem/vm.c prev->size += seg->size;
seg 937 sys/mem/vm.c kmem_free(seg);
seg 944 sys/mem/vm.c static struct seg *
seg 945 sys/mem/vm.c seg_reserve(struct seg *head, vaddr_t addr, size_t size)
seg 947 sys/mem/vm.c struct seg *seg, *prev, *next;
seg 953 sys/mem/vm.c seg = seg_lookup(head, addr, size);
seg 954 sys/mem/vm.c if (seg == NULL || !(seg->flags & SEG_FREE))
seg 961 sys/mem/vm.c if (seg->addr != addr) {
seg 962 sys/mem/vm.c prev = seg;
seg 963 sys/mem/vm.c diff = (size_t)(addr - seg->addr);
seg 964 sys/mem/vm.c seg = seg_create(prev, addr, prev->size - diff);
seg 965 sys/mem/vm.c if (seg == NULL)
seg 972 sys/mem/vm.c if (seg->size != size) {
seg 973 sys/mem/vm.c next = seg_create(seg, seg->addr + size, seg->size - size);
seg 977 sys/mem/vm.c seg_free(head, seg);
seg 981 sys/mem/vm.c seg->size = size;
seg 983 sys/mem/vm.c seg->flags = 0;
seg 984 sys/mem/vm.c return seg;
seg 51 sys/mem/vm_nommu.c static void seg_init(struct seg *);
seg 52 sys/mem/vm_nommu.c static struct seg *seg_create(struct seg *, vaddr_t, size_t);
seg 53 sys/mem/vm_nommu.c static void seg_delete(struct seg *, struct seg *);
seg 54 sys/mem/vm_nommu.c static struct seg *seg_lookup(struct seg *, vaddr_t, size_t);
seg 55 sys/mem/vm_nommu.c static struct seg *seg_alloc(struct seg *, size_t);
seg 56 sys/mem/vm_nommu.c static void seg_free(struct seg *, struct seg *);
seg 57 sys/mem/vm_nommu.c static struct seg *seg_reserve(struct seg *, vaddr_t, size_t);
seg 114 sys/mem/vm_nommu.c struct seg *seg;
seg 127 sys/mem/vm_nommu.c if ((seg = seg_alloc(&map->head, size)) == NULL)
seg 129 sys/mem/vm_nommu.c start = seg->addr;
seg 135 sys/mem/vm_nommu.c if ((seg = seg_reserve(&map->head, start, size)) == NULL)
seg 138 sys/mem/vm_nommu.c seg->flags = SEG_READ | SEG_WRITE;
seg 142 sys/mem/vm_nommu.c *addr = (void *)seg->addr;
seg 185 sys/mem/vm_nommu.c struct seg *seg;
seg 193 sys/mem/vm_nommu.c seg = seg_lookup(&map->head, va, 1);
seg 194 sys/mem/vm_nommu.c if (seg == NULL || seg->addr != va || (seg->flags & SEG_FREE))
seg 200 sys/mem/vm_nommu.c if (!(seg->flags & SEG_SHARED) && !(seg->flags & SEG_MAPPED))
seg 201 sys/mem/vm_nommu.c page_free(seg->phys, seg->size);
seg 203 sys/mem/vm_nommu.c map->total -= seg->size;
seg 204 sys/mem/vm_nommu.c seg_free(&map->head, seg);
seg 249 sys/mem/vm_nommu.c struct seg *seg;
seg 258 sys/mem/vm_nommu.c seg = seg_lookup(&map->head, va, 1);
seg 259 sys/mem/vm_nommu.c if (seg == NULL || seg->addr != va || (seg->flags & SEG_FREE)) {
seg 265 sys/mem/vm_nommu.c if ((seg->flags & SEG_MAPPED) || (seg->flags & SEG_SHARED))
seg 271 sys/mem/vm_nommu.c if (seg->flags & SEG_WRITE) {
seg 280 sys/mem/vm_nommu.c seg->flags = new_flags;
seg 322 sys/mem/vm_nommu.c struct seg *seg, *tgt;
seg 344 sys/mem/vm_nommu.c seg = seg_lookup(&map->head, start, size);
seg 345 sys/mem/vm_nommu.c if (seg == NULL || (seg->flags & SEG_FREE))
seg 347 sys/mem/vm_nommu.c tgt = seg;
seg 353 sys/mem/vm_nommu.c if ((seg = seg_create(&curmap->head, start, size)) == NULL)
seg 355 sys/mem/vm_nommu.c seg->flags = tgt->flags | SEG_MAPPED;
seg 391 sys/mem/vm_nommu.c struct seg *seg, *tmp;
seg 397 sys/mem/vm_nommu.c seg = &map->head;
seg 399 sys/mem/vm_nommu.c if (seg->flags != SEG_FREE) {
seg 401 sys/mem/vm_nommu.c if (!(seg->flags & SEG_SHARED) &&
seg 402 sys/mem/vm_nommu.c !(seg->flags & SEG_MAPPED)) {
seg 403 sys/mem/vm_nommu.c page_free(seg->phys, seg->size);
seg 406 sys/mem/vm_nommu.c tmp = seg;
seg 407 sys/mem/vm_nommu.c seg = seg->next;
seg 409 sys/mem/vm_nommu.c } while (seg != &map->head);
seg 456 sys/mem/vm_nommu.c struct seg *seg;
seg 474 sys/mem/vm_nommu.c if ((seg = seg_create(&map->head, start, size)) == NULL)
seg 477 sys/mem/vm_nommu.c seg->flags = SEG_READ | SEG_WRITE;
seg 506 sys/mem/vm_nommu.c struct seg *seg;
seg 514 sys/mem/vm_nommu.c seg = &map->head;
seg 519 sys/mem/vm_nommu.c info->virt = seg->addr;
seg 520 sys/mem/vm_nommu.c info->size = seg->size;
seg 521 sys/mem/vm_nommu.c info->flags = seg->flags;
seg 522 sys/mem/vm_nommu.c info->phys = seg->phys;
seg 526 sys/mem/vm_nommu.c seg = seg->next;
seg 527 sys/mem/vm_nommu.c } while (seg != &map->head);
seg 544 sys/mem/vm_nommu.c seg_init(struct seg *seg)
seg 547 sys/mem/vm_nommu.c seg->next = seg->prev = seg;
seg 548 sys/mem/vm_nommu.c seg->sh_next = seg->sh_prev = seg;
seg 549 sys/mem/vm_nommu.c seg->addr = 0;
seg 550 sys/mem/vm_nommu.c seg->phys = 0;
seg 551 sys/mem/vm_nommu.c seg->size = 0;
seg 552 sys/mem/vm_nommu.c seg->flags = SEG_FREE;
seg 559 sys/mem/vm_nommu.c static struct seg *
seg 560 sys/mem/vm_nommu.c seg_create(struct seg *prev, vaddr_t addr, size_t size)
seg 562 sys/mem/vm_nommu.c struct seg *seg;
seg 564 sys/mem/vm_nommu.c if ((seg = kmem_alloc(sizeof(*seg))) == NULL)
seg 567 sys/mem/vm_nommu.c seg->addr = addr;
seg 568 sys/mem/vm_nommu.c seg->size = size;
seg 569 sys/mem/vm_nommu.c seg->phys = (paddr_t)addr;
seg 570 sys/mem/vm_nommu.c seg->flags = SEG_FREE;
seg 571 sys/mem/vm_nommu.c seg->sh_next = seg->sh_prev = seg;
seg 573 sys/mem/vm_nommu.c seg->next = prev->next;
seg 574 sys/mem/vm_nommu.c seg->prev = prev;
seg 575 sys/mem/vm_nommu.c prev->next->prev = seg;
seg 576 sys/mem/vm_nommu.c prev->next = seg;
seg 578 sys/mem/vm_nommu.c return seg;
seg 585 sys/mem/vm_nommu.c seg_delete(struct seg *head, struct seg *seg)
seg 591 sys/mem/vm_nommu.c if (seg->flags & SEG_SHARED) {
seg 592 sys/mem/vm_nommu.c seg->sh_prev->sh_next = seg->sh_next;
seg 593 sys/mem/vm_nommu.c seg->sh_next->sh_prev = seg->sh_prev;
seg 594 sys/mem/vm_nommu.c if (seg->sh_prev == seg->sh_next)
seg 595 sys/mem/vm_nommu.c seg->sh_prev->flags &= ~SEG_SHARED;
seg 597 sys/mem/vm_nommu.c if (head != seg)
seg 598 sys/mem/vm_nommu.c kmem_free(seg);
seg 604 sys/mem/vm_nommu.c static struct seg *
seg 605 sys/mem/vm_nommu.c seg_lookup(struct seg *head, vaddr_t addr, size_t size)
seg 607 sys/mem/vm_nommu.c struct seg *seg;
seg 609 sys/mem/vm_nommu.c seg = head;
seg 611 sys/mem/vm_nommu.c if (seg->addr <= addr &&
seg 612 sys/mem/vm_nommu.c seg->addr + seg->size >= addr + size) {
seg 613 sys/mem/vm_nommu.c return seg;
seg 615 sys/mem/vm_nommu.c seg = seg->next;
seg 616 sys/mem/vm_nommu.c } while (seg != head);
seg 623 sys/mem/vm_nommu.c static struct seg *
seg 624 sys/mem/vm_nommu.c seg_alloc(struct seg *head, size_t size)
seg 626 sys/mem/vm_nommu.c struct seg *seg;
seg 632 sys/mem/vm_nommu.c if ((seg = seg_create(head, (vaddr_t)pa, size)) == NULL) {
seg 636 sys/mem/vm_nommu.c return seg;
seg 643 sys/mem/vm_nommu.c seg_free(struct seg *head, struct seg *seg)
seg 645 sys/mem/vm_nommu.c ASSERT(seg->flags != SEG_FREE);
seg 650 sys/mem/vm_nommu.c if (seg->flags & SEG_SHARED) {
seg 651 sys/mem/vm_nommu.c seg->sh_prev->sh_next = seg->sh_next;
seg 652 sys/mem/vm_nommu.c seg->sh_next->sh_prev = seg->sh_prev;
seg 653 sys/mem/vm_nommu.c if (seg->sh_prev == seg->sh_next)
seg 654 sys/mem/vm_nommu.c seg->sh_prev->flags &= ~SEG_SHARED;
seg 656 sys/mem/vm_nommu.c seg->prev->next = seg->next;
seg 657 sys/mem/vm_nommu.c seg->next->prev = seg->prev;
seg 659 sys/mem/vm_nommu.c kmem_free(seg);
seg 665 sys/mem/vm_nommu.c static struct seg *
seg 666 sys/mem/vm_nommu.c seg_reserve(struct seg *head, vaddr_t addr, size_t size)
seg 668 sys/mem/vm_nommu.c struct seg *seg;
seg 676 sys/mem/vm_nommu.c if ((seg = seg_create(head, (vaddr_t)pa, size)) == NULL) {
seg 680 sys/mem/vm_nommu.c return seg;