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;