Changeset bf9afa07 in mainline
- Timestamp:
- 2006-06-02T11:35:05Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2d22049
- Parents:
- 49d072e
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
fb/ega.c
r49d072e rbf9afa07 112 112 { 113 113 void *ega_ph_addr; 114 size_t sz; 114 115 115 116 … … 118 119 scr_height=sysinfo_value("fb.height"); 119 120 120 scr_addr=(void *)ALIGN_UP(((__address)set_maxheapsize(USER_ADDRESS_SPACE_SIZE_ARCH>>1)),PAGE_SIZE); 121 sz = scr_width*scr_height*2; 122 scr_addr = as_get_mappable_page(sz); 121 123 122 if (ega_ph_addr != ALIGN_DOWN((unsigned long)ega_ph_addr, PAGE_SIZE)) 123 return -1; 124 125 map_physmem(ega_ph_addr, scr_addr, (scr_width*scr_height*2+PAGE_SIZE-1)>>PAGE_WIDTH, 124 map_physmem(ega_ph_addr, scr_addr, ALIGN_UP(sz,PAGE_SIZE)>>PAGE_WIDTH, 126 125 AS_AREA_READ | AS_AREA_WRITE); 127 128 126 129 127 async_set_client_connection(ega_client_connection); -
fb/fb.c
r49d072e rbf9afa07 360 360 * 361 361 */ 362 static void screen_init( __addressaddr, unsigned int xres, unsigned int yres, unsigned int bpp, unsigned int scan)362 static void screen_init(void *addr, unsigned int xres, unsigned int yres, unsigned int bpp, unsigned int scan) 363 363 { 364 364 switch (bpp) { … … 598 598 int fb_init(void) 599 599 { 600 __addressfb_ph_addr;600 void *fb_ph_addr; 601 601 unsigned int fb_width; 602 602 unsigned int fb_height; 603 603 unsigned int fb_bpp; 604 604 unsigned int fb_scanline; 605 __address fb_addr; 605 void *fb_addr; 606 size_t asz; 606 607 607 608 async_set_client_connection(fb_client_connection); 608 609 609 fb_ph_addr= sysinfo_value("fb.address.physical");610 fb_ph_addr=(void *)sysinfo_value("fb.address.physical"); 610 611 fb_width=sysinfo_value("fb.width"); 611 612 fb_height=sysinfo_value("fb.height"); … … 613 614 fb_scanline=sysinfo_value("fb.scanline"); 614 615 615 fb_addr=ALIGN_UP(((__address)set_maxheapsize(USER_ADDRESS_SPACE_SIZE_ARCH>>1)),PAGE_SIZE); 616 asz = fb_scanline*fb_height; 617 fb_addr = as_get_mappable_page(asz); 616 618 617 map_physmem((void *)((__address)fb_ph_addr),(void *)fb_addr, 618 (fb_scanline*fb_height+PAGE_SIZE-1)>>PAGE_WIDTH, 619 map_physmem(fb_ph_addr, fb_addr, ALIGN_UP(asz,PAGE_SIZE) >>PAGE_WIDTH, 619 620 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 620 621 -
libc/generic/as.c
r49d072e rbf9afa07 27 27 */ 28 28 29 #include <stdlib.h> 30 #include <unistd.h> 31 #include <string.h> 32 #include <ddi.h> 33 #include <sysinfo.h> 34 #include <align.h> 35 #include <as.h> 36 #include <ipc/fb.h> 37 #include <ipc/ipc.h> 38 #include <ipc/ns.h> 39 #include <ipc/services.h> 40 #include <kernel/errno.h> 41 42 29 43 #include <as.h> 30 44 #include <libc.h> 31 45 #include <unistd.h> 32 #include < task.h>46 #include <align.h> 33 47 34 48 /** Create address space area. … … 71 85 static size_t heapsize = 0; 72 86 static size_t maxheapsize = (size_t)(-1); 87 88 static void * last_allocated = 0; 89 73 90 /* Start of heap linker symbol */ 74 91 extern char _heap; … … 108 125 } 109 126 127 /** Set maximum heap size and return pointer just after the heap */ 110 128 void *set_maxheapsize(size_t mhs) 111 129 { … … 115 133 116 134 } 135 136 /** Return pointer to some unmapped area, where fits new as_area 137 * 138 * TODO: make some first_fit/... algorithm, we are now just incrementing 139 * the pointer to last area 140 */ 141 void * as_get_mappable_page(size_t sz) 142 { 143 void *res; 144 145 /* Set heapsize to some meaningful value */ 146 if (maxheapsize == -1) 147 set_maxheapsize(ALIGN_UP(USER_ADDRESS_SPACE_SIZE_ARCH>>1,PAGE_SIZE)); 148 if (!last_allocated) 149 last_allocated = ALIGN_UP((void *)&_heap + maxheapsize, PAGE_SIZE); 150 151 sz = ALIGN_UP(sz, PAGE_SIZE); 152 res = last_allocated; 153 last_allocated += sz; 154 155 return res; 156 } -
libc/generic/time.c
r49d072e rbf9afa07 57 57 * sequence of subsequent gettimeofday calls is ordered. 58 58 */ 59 #define TMAREA (100*1024*1024)60 59 int gettimeofday(struct timeval *tv, struct timezone *tz) 61 60 { … … 66 65 67 66 if (!ktime) { 68 /* TODO: specify better, where to map the area */67 mapping = as_get_mappable_page(PAGE_SIZE); 69 68 /* Get the mapping of kernel clock */ 70 69 res = ipc_call_sync_3(PHONE_NS, IPC_M_AS_AREA_RECV, 71 TMAREA, 72 PAGE_SIZE, 73 0, 70 mapping, PAGE_SIZE, 0, 74 71 NULL,&rights,NULL); 75 72 if (res) { … … 80 77 printf("Received bad rights on time area: %X\n", 81 78 rights); 82 as_area_destroy( TMAREA);79 as_area_destroy(mapping); 83 80 _exit(1); 84 81 } 85 ktime = (void *) (TMAREA);82 ktime = mapping; 86 83 } 87 84 if (tz) { -
libc/include/align.h
r49d072e rbf9afa07 43 43 * @param a Size of alignment, must be power of 2. 44 44 */ 45 #define ALIGN_UP(s, a) (( (s) + ((a) - 1)) & ~((a) - 1))45 #define ALIGN_UP(s, a) ((long)((s) + ((a) - 1)) & ~((long) (a) - 1)) 46 46 47 47 #endif -
libc/include/as.h
r49d072e rbf9afa07 41 41 extern int as_area_destroy(void *address); 42 42 extern void *set_maxheapsize(size_t mhs); 43 extern void * as_get_mappable_page(size_t sz); 43 44 44 45 #endif -
ns/ns.c
r49d072e rbf9afa07 88 88 return; 89 89 } 90 addr = (void *)(200*1024*1024); /* TODO: intelligent freemem space */90 addr = as_get_mappable_page(PAGE_SIZE); 91 91 map_physmem(ph_addr, addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE); 92 92 }
Note:
See TracChangeset
for help on using the changeset viewer.