453,9 → 453,11 |
* @param yres Screen height in pixels |
* @param bpp Bits per pixel (8, 16, 24, 32) |
* @param scan Bytes per one scanline |
* @param align Alignment for 24bpp mode. |
* |
*/ |
static void screen_init(void *addr, unsigned int xres, unsigned int yres, unsigned int bpp, unsigned int scan) |
static void |
screen_init(void *addr, unsigned int xres, unsigned int yres, unsigned int bpp, unsigned int scan, int align) |
{ |
switch (bpp) { |
case 8: |
471,7 → 473,10 |
case 24: |
screen.rgb2scr = rgb_3byte; |
screen.scr2rgb = byte3_rgb; |
screen.pixelbytes = 3; |
if (!align) |
screen.pixelbytes = 3; |
else |
screen.pixelbytes = 4; |
break; |
case 32: |
screen.rgb2scr = rgb_4byte; |
1216,6 → 1221,7 |
unsigned int fb_width; |
unsigned int fb_height; |
unsigned int fb_bpp; |
unsigned int fb_bpp_align; |
unsigned int fb_scanline; |
void *fb_addr; |
size_t asz; |
1226,6 → 1232,7 |
fb_width=sysinfo_value("fb.width"); |
fb_height=sysinfo_value("fb.height"); |
fb_bpp=sysinfo_value("fb.bpp"); |
fb_bpp_align=sysinfo_value("fb.bpp-align"); |
fb_scanline=sysinfo_value("fb.scanline"); |
|
asz = fb_scanline*fb_height; |
1234,7 → 1241,7 |
map_physmem(fb_ph_addr, fb_addr, ALIGN_UP(asz,PAGE_SIZE) >>PAGE_WIDTH, |
AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); |
|
screen_init(fb_addr, fb_width, fb_height, fb_bpp, fb_scanline); |
screen_init(fb_addr, fb_width, fb_height, fb_bpp, fb_scanline, fb_bpp_align); |
|
return 0; |
} |