summaryrefslogtreecommitdiff
path: root/sys/dev/syscons/logo
diff options
context:
space:
mode:
authorPhilip Paeps <philip@FreeBSD.org>2007-02-21 12:27:12 +0000
committerPhilip Paeps <philip@FreeBSD.org>2007-02-21 12:27:12 +0000
commit0754972c5c72adff156ec736d2f4ebc57776e1ae (patch)
tree8f2df30a1e9c79b8e09d7dc29d55cee093923b96 /sys/dev/syscons/logo
parent9fad4c2a128e0db65a32641d74158bb00269b082 (diff)
Notes
Diffstat (limited to 'sys/dev/syscons/logo')
-rw-r--r--sys/dev/syscons/logo/logo_saver.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/dev/syscons/logo/logo_saver.c b/sys/dev/syscons/logo/logo_saver.c
index 0a75886388ba..20f2bdcef02a 100644
--- a/sys/dev/syscons/logo/logo_saver.c
+++ b/sys/dev/syscons/logo/logo_saver.c
@@ -42,6 +42,12 @@
#define SAVER_NAME "logo_saver"
+#define SET_ORIGIN(adp, o) do { \
+ int oo = o; \
+ if (oo != last_origin) \
+ set_origin(adp, last_origin = oo); \
+ } while (0)
+
extern unsigned int logo_w;
extern unsigned int logo_h;
extern unsigned char logo_pal[];
@@ -56,10 +62,11 @@ static void
logo_blit(video_adapter_t *adp, int x, int y)
{
int d, l, o, p;
+ int last_origin = -1;
for (o = 0, p = y * bpsl + x; p > banksize; p -= banksize)
o += banksize;
- set_origin(adp, o);
+ SET_ORIGIN(adp, o);
for (d = 0; d < logo_img_size; d += logo_w) {
if (p + logo_w < banksize) {
@@ -68,12 +75,12 @@ logo_blit(video_adapter_t *adp, int x, int y)
} else if (p < banksize) {
l = banksize - p;
bcopy(logo_img + d, vid + p, l);
- set_origin(adp, (o += banksize));
+ SET_ORIGIN(adp, (o += banksize));
bcopy(logo_img + d + l, vid, logo_w - l);
p += bpsl - banksize;
} else {
p -= banksize;
- set_origin(adp, (o += banksize));
+ SET_ORIGIN(adp, (o += banksize));
bcopy(logo_img + d, vid + p, logo_w);
p += bpsl;
}