blob: ae2bebf8575b6a6b5ecaccf8efbc9f5773fad2bc [file] [log] [blame]
Dima Zavind5b0b6a2009-01-15 18:09:25 -08001/*
2 * Copyright (c) 2008, Google Inc.
3 * All rights reserved.
4 *
Monika Singhb879e492019-09-16 16:00:15 +05305 * Copyright (c) 2009-2015, 2019, The Linux Foundation. All rights reserved.
Shashank Mittal4f99a882010-02-01 13:58:50 -08006 *
Dima Zavind5b0b6a2009-01-15 18:09:25 -08007 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
24 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
27 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 */
30
31#ifndef __DEV_FBCON_H
32#define __DEV_FBCON_H
33
Aparna Mallavarapuce06a012013-09-06 23:03:24 +053034#include <stdint.h>
35#define LOGO_IMG_OFFSET (12*1024*1024)
36#define LOGO_IMG_MAGIC "SPLASH!!"
37#define LOGO_IMG_MAGIC_SIZE sizeof(LOGO_IMG_MAGIC) - 1
Mao Flynn7b379f32015-04-20 00:28:30 +080038#define LOGO_IMG_HEADER_SIZE 512
Aparna Mallavarapuce06a012013-09-06 23:03:24 +053039
lijuangf3d7fc52018-04-23 16:34:29 +080040/* 45 characters per line for portrait orientation
41 * "720 (W) 1280(H)" -- 720 /(8*2) = 45
42 * "1080(W) 1920(H)" -- 1080/(8*3) = 45
43 * "1440(W) 2560(H)" -- 1440/(8*4) = 45
44 * "2160(W) 3840(H)" -- 2160/(8*6) = 45
45 */
46#define CHAR_NUM_PERROW_POR 45
47
48/* 80 characters per line for horizontal orientation
49 * "480 (H) 640 (W)" -- 640 /(8*1) = 80
50 * "720 (H) 1280(W)" -- 1280/(8*2) = 80
51 * "1080(H) 1920(W)" -- 1920/(8*3) = 80
52 * "1440(H) 2560(W)" -- 2560/(8*4) = 80
53 * "2160(H) 3840(W)" -- 3840/(8*6) = 80
54 */
55#define CHAR_NUM_PERROW_HOR 80
56
lijuangdd73d652015-06-05 21:29:37 +080057enum fbcon_msg_type {
58 /* type for menu */
59 FBCON_COMMON_MSG = 0,
60 FBCON_UNLOCK_TITLE_MSG,
61 FBCON_TITLE_MSG,
62 FBCON_SUBTITLE_MSG,
63
64 /* type for warning */
65 FBCON_YELLOW_MSG,
66 FBCON_ORANGE_MSG,
67 FBCON_RED_MSG,
lijuang4304fce2015-08-14 20:52:47 +080068 FBCON_GREEN_MSG,
lijuangdd73d652015-06-05 21:29:37 +080069
70 /* and the select message's background */
71 FBCON_SELECT_MSG_BG_COLOR,
72};
73
Mao Flynn7b379f32015-04-20 00:28:30 +080074typedef struct logo_img_header {
75 unsigned char magic[LOGO_IMG_MAGIC_SIZE]; // "SPLASH!!"
76 uint32_t width; // logo's width, little endian
77 uint32_t height; // logo's height, little endian
78 uint32_t type; // 0, Raw BGR data; 1, RLE24 Compressed data
79 uint32_t blocks; // block number, compressed data size / 512
80 uint32_t offset;
81 uint8_t reserved[512-28];
82}logo_img_header;
Aparna Mallavarapuce06a012013-09-06 23:03:24 +053083
84struct fbimage {
Mao Flynn7b379f32015-04-20 00:28:30 +080085 struct logo_img_header header;
Aparna Mallavarapuce06a012013-09-06 23:03:24 +053086 void *image;
87};
88
Dima Zavind5b0b6a2009-01-15 18:09:25 -080089#define FB_FORMAT_RGB565 0
Arpita Banerjeef1a8ac92013-05-21 10:09:35 -070090#define FB_FORMAT_RGB666 1
91#define FB_FORMAT_RGB666_LOOSE 2
92#define FB_FORMAT_RGB888 3
Dima Zavind5b0b6a2009-01-15 18:09:25 -080093
94struct fbcon_config {
95 void *base;
96 unsigned width;
97 unsigned height;
98 unsigned stride;
99 unsigned bpp;
100 unsigned format;
101
102 void (*update_start)(void);
103 int (*update_done)(void);
104};
105
106void fbcon_setup(struct fbcon_config *cfg);
Monika Singhb879e492019-09-16 16:00:15 +0530107void fbcon_putc(char c, int y_start);
Shashank Mittal4f99a882010-02-01 13:58:50 -0800108void fbcon_clear(void);
Monika Singhb879e492019-09-16 16:00:15 +0530109void fbcon_clear_msg(unsigned y_start, unsigned y_end);
Shashank Mittal4f99a882010-02-01 13:58:50 -0800110struct fbcon_config* fbcon_display(void);
Mao Flynn7b379f32015-04-20 00:28:30 +0800111void fbcon_extract_to_screen(logo_img_header *header, void* address);
Monika Singhb879e492019-09-16 16:00:15 +0530112void fbcon_putc_factor(char c, int type, unsigned scale_factor, int y_start);
lijuangdd73d652015-06-05 21:29:37 +0800113void fbcon_draw_msg_background(unsigned y_start, unsigned y_end,
114 uint32_t paint, int update);
lijuang4304fce2015-08-14 20:52:47 +0800115void fbcon_draw_line(uint32_t type);
lijuangdd73d652015-06-05 21:29:37 +0800116uint32_t fbcon_get_current_line(void);
117uint32_t fbcon_get_current_bg(void);
118uint32_t fbcon_get_max_x(void);
lijuangf3d7fc52018-04-23 16:34:29 +0800119uint32_t fbcon_get_width(void);
120uint32_t fbcon_get_height(void);
Dima Zavind5b0b6a2009-01-15 18:09:25 -0800121#endif /* __DEV_FBCON_H */