Rev 1292 | Rev 1311 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1292 | Rev 1310 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /* |
1 | /* |
| 2 | * Copyright (C) 2006-2006 Jakub Vana |
2 | * Copyright (C) 2006 Jakub Vana |
| 3 | * All rights reserved. |
3 | * All rights reserved. |
| 4 | * |
4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
| 7 | * are met: |
7 | * are met: |
| Line 34... | Line 34... | ||
| 34 | #include <mm/page.h> |
34 | #include <mm/page.h> |
| 35 | #include <mm/frame.h> |
35 | #include <mm/frame.h> |
| 36 | #include <mm/as.h> |
36 | #include <mm/as.h> |
| 37 | #include <arch/mm/page.h> |
37 | #include <arch/mm/page.h> |
| 38 | #include <synch/spinlock.h> |
38 | #include <synch/spinlock.h> |
| 39 | #include <arch/types.h> |
- | |
| 40 | #include <arch/asm.h> |
39 | #include <arch/asm.h> |
| - | 40 | #include <arch/types.h> |
|
| - | 41 | #include <typedefs.h> |
|
| 41 | #include <memstr.h> |
42 | #include <memstr.h> |
| - | 43 | #include <bitops.h> |
|
| 42 | 44 | ||
| 43 | __u32 vesa_ph_addr; |
45 | __u32 vesa_ph_addr; |
| 44 | __u16 vesa_width; |
46 | __u16 vesa_width; |
| 45 | __u16 vesa_height; |
47 | __u16 vesa_height; |
| 46 | __u16 vesa_bpp; |
48 | __u16 vesa_bpp; |
| 47 | __u16 vesa_scanline; |
49 | __u16 vesa_scanline; |
| 48 | 50 | ||
| 49 | - | ||
| 50 | int vesa_present(void) |
51 | int vesa_present(void) |
| 51 | { |
52 | { |
| 52 | if(vesa_width!=0xffff) return true; |
53 | if (vesa_width != 0xffff) |
| - | 54 | return true; |
|
| 53 | if(vesa_height!=0xffff) return true; |
55 | if (vesa_height != 0xffff) |
| - | 56 | return true; |
|
| 54 | return false; |
57 | return false; |
| 55 | } |
58 | } |
| 56 | 59 | ||
| 57 | - | ||
| 58 | static __u32 log2(__u32 x) |
60 | static count_t vesa_frame_order(void) |
| 59 | { |
61 | { |
| 60 | __u32 l=2; |
62 | __u32 x = vesa_scanline*vesa_height; |
| 61 | if(x<=PAGE_SIZE) return PAGE_WIDTH+1; |
63 | if (x <= FRAME_SIZE) |
| - | 64 | return 1; |
|
| 62 | 65 | ||
| 63 | x--; |
- | |
| 64 | while(x>>=1) l++; |
66 | return (fnzb32(x - 1) + 1) - FRAME_WIDTH; |
| 65 | return l; |
- | |
| 66 | } |
67 | } |
| 67 | 68 | ||
| 68 | void vesa_init(void) |
69 | void vesa_init(void) |
| 69 | { |
70 | { |
| 70 | int a; |
71 | int a; |
| - | 72 | __address vram_lin_addr; |
|
| 71 | 73 | ||
| 72 | __address videoram_lin_addr; |
- | |
| 73 | - | ||
| 74 | videoram_lin_addr=PA2KA(PFN2ADDR(frame_alloc( log2(vesa_scanline*vesa_height) -FRAME_WIDTH,FRAME_KA))); |
74 | vram_lin_addr = PA2KA(PFN2ADDR(frame_alloc(vesa_frame_order(), FRAME_KA))); |
| 75 | /* Map videoram */ |
75 | /* Map videoram */ |
| 76 | for(a=0;a<((vesa_scanline*vesa_height+PAGE_SIZE-1)>>PAGE_WIDTH);a++) |
76 | for (a = 0; a < ((vesa_scanline * vesa_height + PAGE_SIZE - 1) >> PAGE_WIDTH); a++) |
| 77 | page_mapping_insert(AS_KERNEL, videoram_lin_addr+a*4096, vesa_ph_addr+a*4096, PAGE_NOT_CACHEABLE); |
77 | page_mapping_insert(AS_KERNEL, vram_lin_addr+a*4096, vesa_ph_addr+a*4096, PAGE_NOT_CACHEABLE); |
| 78 | 78 | ||
| 79 | fb_init( videoram_lin_addr,vesa_width,vesa_height,vesa_bpp,vesa_scanline); |
79 | fb_init(vram_lin_addr, vesa_width, vesa_height, vesa_bpp, vesa_scanline); |
| 80 | } |
80 | } |
| 81 | 81 | ||
| 82 | #endif |
82 | #endif |
| 83 | - | ||