mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-24 07:40:52 +00:00
vt: splash: Use splash screen passed from loader
If loader(8) gives use a splash screen to use using the MODINFOMD_SPLASH type, use it if RB_MUTE is set to "YES". By design only argb data will be displayed. Differential Revision: https://reviews.freebsd.org/D45931 Reviewed by: imp, tsoome Sponsored by: Beckhoff Automation GmbH & Co. KG
This commit is contained in:
parent
966e53a4e5
commit
f6e8b0e850
@ -44,6 +44,7 @@
|
|||||||
#include <sys/lock.h>
|
#include <sys/lock.h>
|
||||||
#include <sys/malloc.h>
|
#include <sys/malloc.h>
|
||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
|
#include <sys/splash.h>
|
||||||
#include <sys/power.h>
|
#include <sys/power.h>
|
||||||
#include <sys/priv.h>
|
#include <sys/priv.h>
|
||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
@ -1657,18 +1658,33 @@ vtterm_done(struct terminal *tm)
|
|||||||
static void
|
static void
|
||||||
vtterm_splash(struct vt_device *vd)
|
vtterm_splash(struct vt_device *vd)
|
||||||
{
|
{
|
||||||
|
caddr_t kmdp;
|
||||||
|
struct splash_info *si;
|
||||||
|
uintptr_t image;
|
||||||
vt_axis_t top, left;
|
vt_axis_t top, left;
|
||||||
|
|
||||||
/* Display a nice boot splash. */
|
kmdp = preload_search_by_type("elf kernel");
|
||||||
|
if (kmdp == NULL)
|
||||||
|
kmdp = preload_search_by_type("elf64 kernel");
|
||||||
|
si = MD_FETCH(kmdp, MODINFOMD_SPLASH, struct splash_info *);
|
||||||
if (!(vd->vd_flags & VDF_TEXTMODE) && (boothowto & RB_MUTE)) {
|
if (!(vd->vd_flags & VDF_TEXTMODE) && (boothowto & RB_MUTE)) {
|
||||||
top = (vd->vd_height - vt_logo_height) / 2;
|
if (si == NULL) {
|
||||||
left = (vd->vd_width - vt_logo_width) / 2;
|
top = (vd->vd_height - vt_logo_height) / 2;
|
||||||
switch (vt_logo_depth) {
|
left = (vd->vd_width - vt_logo_width) / 2;
|
||||||
case 1:
|
|
||||||
/* XXX: Unhardcode colors! */
|
|
||||||
vd->vd_driver->vd_bitblt_bmp(vd, vd->vd_curwindow,
|
vd->vd_driver->vd_bitblt_bmp(vd, vd->vd_curwindow,
|
||||||
vt_logo_image, NULL, vt_logo_width, vt_logo_height,
|
vt_logo_image, NULL, vt_logo_width, vt_logo_height,
|
||||||
left, top, TC_WHITE, TC_BLACK);
|
left, top, TC_WHITE, TC_BLACK);
|
||||||
|
} else {
|
||||||
|
if (si->si_depth != 4)
|
||||||
|
return;
|
||||||
|
printf("SPLASH: width: %d height: %d depth: %d\n", si->si_width, si->si_height, si->si_depth);
|
||||||
|
image = (uintptr_t)si + sizeof(struct splash_info);
|
||||||
|
image = roundup2(image, 8);
|
||||||
|
top = (vd->vd_height - si->si_height) / 2;
|
||||||
|
left = (vd->vd_width - si->si_width) / 2;
|
||||||
|
vd->vd_driver->vd_bitblt_argb(vd, vd->vd_curwindow,
|
||||||
|
(unsigned char *)image, si->si_width, si->si_height,
|
||||||
|
left, top);
|
||||||
}
|
}
|
||||||
vd->vd_flags |= VDF_SPLASH;
|
vd->vd_flags |= VDF_SPLASH;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user