Commit 02cef3d4 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] M68k head pic

From: Geert Uytterhoeven <geert@linux-m68k.org>

M68k: Make console functions position independent (from Roman Zippel)
parent 7c8a6fc8
...@@ -273,6 +273,7 @@ ...@@ -273,6 +273,7 @@
*/ */
#define CONSOLE #define CONSOLE
#define CONSOLE_PENGUIN
/* /*
* Macintosh serial debug support; outputs boot info to the printer * Macintosh serial debug support; outputs boot info to the printer
...@@ -1245,10 +1246,10 @@ L(mmu_init_mac): ...@@ -1245,10 +1246,10 @@ L(mmu_init_mac):
*/ */
movel #VIDEOMEMMASK,%d0 movel #VIDEOMEMMASK,%d0
andl L(mac_videobase),%d0 andl %pc@(L(mac_videobase)),%d0
mmu_map #VIDEOMEMBASE,%d0,#VIDEOMEMSIZE,%d3 mmu_map #VIDEOMEMBASE,%d0,#VIDEOMEMSIZE,%d3
/* The ROM starts at 4000 0000 */ /* ROM from 4000 0000 to 4200 0000 (only for mac_reset()) */
mmu_map_eq #0x40000000,#0x02000000,%d3 mmu_map_eq #0x40000000,#0x02000000,%d3
/* IO devices (incl. serial port) from 5000 0000 to 5300 0000 */ /* IO devices (incl. serial port) from 5000 0000 to 5300 0000 */
mmu_map_eq #0x50000000,#0x03000000,%d3 mmu_map_eq #0x50000000,#0x03000000,%d3
...@@ -1464,6 +1465,12 @@ L(mmu_fixup_done): ...@@ -1464,6 +1465,12 @@ L(mmu_fixup_done):
andl L(mac_videobase),%d0 andl L(mac_videobase),%d0
addl #VIDEOMEMBASE,%d0 addl #VIDEOMEMBASE,%d0
movel %d0,L(mac_videobase) movel %d0,L(mac_videobase)
#if defined(CONSOLE)
movel %pc@(L(phys_kernel_start)),%d0
subl #PAGE_OFFSET,%d0
subl %d0,L(console_font)
subl %d0,L(console_font_data)
#endif
#ifdef MAC_SERIAL_DEBUG #ifdef MAC_SERIAL_DEBUG
orl #0x50000000,L(mac_sccbase) orl #0x50000000,L(mac_sccbase)
#endif #endif
...@@ -3331,26 +3338,24 @@ func_start console_init,%a0-%a4/%d0-%d7 ...@@ -3331,26 +3338,24 @@ func_start console_init,%a0-%a4/%d0-%d7
*/ */
lea %pc@(L(console_globals)),%a2 lea %pc@(L(console_globals)),%a2
lea %pc@(L(mac_videobase)),%a0 movel %pc@(L(mac_videobase)),%a1
movel %a0@,%a1 movel %pc@(L(mac_rowbytes)),%d5
lea %pc@(L(mac_rowbytes)),%a0 movel %pc@(L(mac_dimensions)),%d3 /* -> low byte */
movel %a0@,%d5
lea %pc@(L(mac_dimensions)),%a0
movel %a0@,%d3 /* -> low byte */
movel %d3,%d4 movel %d3,%d4
swap %d4 /* -> high byte */ swap %d4 /* -> high byte */
andl #0xffff,%d3 /* d3 = screen width in pixels */ andl #0xffff,%d3 /* d3 = screen width in pixels */
andl #0xffff,%d4 /* d4 = screen height in pixels */ andl #0xffff,%d4 /* d4 = screen height in pixels */
movel %d5,%d6 movel %d5,%d6
subl #20,%d6 | subl #20,%d6
mulul %d4,%d6 /* scan line bytes x num scan lines */ mulul %d4,%d6 /* scan line bytes x num scan lines */
divul #8,%d6 /* we'll clear 8 bytes at a time */ divul #8,%d6 /* we'll clear 8 bytes at a time */
moveq #-1,%d0 /* Mac_black */
subq #1,%d6 subq #1,%d6
L(console_clear_loop): L(console_clear_loop):
movel #0xffffffff,%a1@+ /* Mac_black */ movel %d0,%a1@+
movel #0xffffffff,%a1@+ /* Mac_black */ movel %d0,%a1@+
dbra %d6,L(console_clear_loop) dbra %d6,L(console_clear_loop)
/* Calculate font size */ /* Calculate font size */
...@@ -3375,6 +3380,11 @@ L(console_clear_loop): ...@@ -3375,6 +3380,11 @@ L(console_clear_loop):
movel %a0,%a1@ /* store pointer to struct fbcon_font_desc in console_font */ movel %a0,%a1@ /* store pointer to struct fbcon_font_desc in console_font */
tstl %a0 tstl %a0
jeq 1f jeq 1f
lea %pc@(L(console_font_data)),%a4
movel %a0@(FONT_DESC_DATA),%d0
subl #L(console_font),%a1
addl %a1,%d0
movel %d0,%a4@
/* /*
* Calculate global maxs * Calculate global maxs
...@@ -3452,7 +3462,7 @@ func_start console_put_penguin,%a0-%a1/%d0-%d7 ...@@ -3452,7 +3462,7 @@ func_start console_put_penguin,%a0-%a1/%d0-%d7
subil #64,%d0 /* snug up against the right edge */ subil #64,%d0 /* snug up against the right edge */
clrl %d1 /* start at the top */ clrl %d1 /* start at the top */
movel #73,%d7 movel #73,%d7
lea %pc@(that_penguin),%a1 lea %pc@(L(that_penguin)),%a1
L(console_penguin_row): L(console_penguin_row):
movel #31,%d6 movel #31,%d6
L(console_penguin_pixel_pair): L(console_penguin_pixel_pair):
...@@ -3470,6 +3480,10 @@ L(console_penguin_pixel_pair): ...@@ -3470,6 +3480,10 @@ L(console_penguin_pixel_pair):
dbra %d7,L(console_penguin_row) dbra %d7,L(console_penguin_row)
func_return console_put_penguin func_return console_put_penguin
/* include penguin bitmap */
L(that_penguin):
#include "../mac/mac_penguin.S"
#endif #endif
/* /*
...@@ -3600,7 +3614,7 @@ L(console_not_cr): ...@@ -3600,7 +3614,7 @@ L(console_not_cr):
*/ */
L(console_not_home): L(console_not_home):
movel %a0@(Lconsole_struct_cur_column),%d0 movel %a0@(Lconsole_struct_cur_column),%d0
addil #1,%a0@(Lconsole_struct_cur_column) addql #1,%a0@(Lconsole_struct_cur_column)
movel %a0@(Lconsole_struct_num_columns),%d1 movel %a0@(Lconsole_struct_num_columns),%d1
cmpl %d1,%d0 cmpl %d1,%d0
jcs 1f jcs 1f
...@@ -3613,7 +3627,7 @@ L(console_not_home): ...@@ -3613,7 +3627,7 @@ L(console_not_home):
* a0 = address of pointer to font data (fbcon_font_desc) * a0 = address of pointer to font data (fbcon_font_desc)
*/ */
movel %pc@(L(console_font)),%a0 movel %pc@(L(console_font)),%a0
movel %a0@(FONT_DESC_DATA),%a1 /* Load fbcon_font_desc.data into a1 */ movel %pc@(L(console_font_data)),%a1 /* Load fbcon_font_desc.data into a1 */
andl #0x000000ff,%d7 andl #0x000000ff,%d7
/* ASSERT: a0 = contents of Lconsole_font */ /* ASSERT: a0 = contents of Lconsole_font */
mulul %a0@(FONT_DESC_HEIGHT),%d7 /* d7 = index into font data */ mulul %a0@(FONT_DESC_HEIGHT),%d7 /* d7 = index into font data */
...@@ -3836,6 +3850,8 @@ L(console_globals): ...@@ -3836,6 +3850,8 @@ L(console_globals):
.long 0 /* mac putc */ .long 0 /* mac putc */
L(console_font): L(console_font):
.long 0 /* pointer to console font (struct font_desc) */ .long 0 /* pointer to console font (struct font_desc) */
L(console_font_data):
.long 0 /* pointer to console font data */
#endif /* CONSOLE */ #endif /* CONSOLE */
#if defined(MMU_PRINT) #if defined(MMU_PRINT)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment