2 * Copyright (c) 1998 Dag-Erling Coïdan Smørgrav
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer
10 * in this position and unchanged.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 * $FreeBSD: src/sys/modules/syscons/logo/logo_saver.c,v 1.8 1999/08/28 00:47:51 peter Exp $
29 * $DragonFly: src/sys/dev/misc/syscons/bsdlogo/Attic/logo_saver.c,v 1.4 2005/06/11 00:26:46 dillon Exp $
32 #include <sys/param.h>
33 #include <sys/systm.h>
34 #include <sys/kernel.h>
35 #include <sys/module.h>
36 #include <sys/syslog.h>
37 #include <sys/consio.h>
39 #include <sys/thread2.h>
41 #include <dev/video/fb/fbreg.h>
42 #include <dev/video/fb/splashreg.h>
43 #include "../syscons.h"
46 static int banksize
, scrmode
, bpsl
, scrw
, scrh
;
52 logo_blit(video_adapter_t
*adp
, int x
, int y
)
56 for (o
= 0, p
= y
* bpsl
+ x
; p
> banksize
; p
-= banksize
)
60 for (d
= 0; d
< sizeof logo_img
; d
+= logo_w
) {
61 if (p
+ logo_w
< banksize
) {
62 bcopy(logo_img
+ d
, vid
+ p
, logo_w
);
64 } else if (p
< banksize
) {
66 bcopy(logo_img
+ d
, vid
+ p
, l
);
67 set_origin(adp
, (o
+= banksize
));
68 bcopy(logo_img
+ d
+ l
, vid
, logo_w
- l
);
72 set_origin(adp
, (o
+= banksize
));
73 bcopy(logo_img
+ d
, vid
+ p
, logo_w
);
80 logo_update(video_adapter_t
*adp
)
82 static int xpos
= 0, ypos
= 0;
83 static int xinc
= 1, yinc
= 1;
85 /* Turn when you hit the edge */
86 if ((xpos
+ logo_w
+ xinc
> scrw
) || (xpos
+ xinc
< 0))
88 if ((ypos
+ logo_h
+ yinc
> scrh
) || (ypos
+ yinc
< 0))
93 /* XXX Relies on margin around logo to erase trail */
94 logo_blit(adp
, xpos
, ypos
);
98 logo_saver(video_adapter_t
*adp
, int blank
)
103 /* switch to graphics mode */
106 set_video_mode(adp
, scrmode
);
107 load_palette(adp
, logo_pal
);
108 #if 0 /* XXX conflict */
112 vid
= (u_char
*)adp
->va_window
;
113 banksize
= adp
->va_window_size
;
114 bpsl
= adp
->va_line_width
;
116 for (i
= 0; i
< bpsl
*scrh
; i
+= banksize
) {
118 bzero(vid
, banksize
);
129 logo_init(video_adapter_t
*adp
)
133 if (!get_mode_info(adp
, M_VESA_CG800x600
, &info
)) {
134 scrmode
= M_VESA_CG800x600
;
135 } else if (!get_mode_info(adp
, M_VGA_CG320
, &info
)) {
136 scrmode
= M_VGA_CG320
;
138 log(LOG_NOTICE
, "logo_saver: no suitable graphics mode\n");
142 scrw
= info
.vi_width
;
143 scrh
= info
.vi_height
;
150 logo_term(video_adapter_t
*adp
)
155 static scrn_saver_t logo_module
= {
156 "logo_saver", logo_init
, logo_term
, logo_saver
, NULL
,
159 SAVER_MODULE(logo_saver
, logo_module
);