⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfb_console.c

📁 PPC Linux Driver, use makefile to compare the routen in Linux.
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * (C) Copyright 2002 ELTEC Elektronik AG * Frank Gottschling <fgottschling@eltec.de> * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA *//* * cfb_console.c * * Color Framebuffer Console driver for 8/15/16/24/32 bits per pixel. * * At the moment only the 8x16 font is tested and the font fore- and * background color is limited to black/white/gray colors. The Linux * logo can be placed in the upper left corner and additional board * information strings (that normaly goes to serial port) can be drawed. * * The console driver can use the standard PC keyboard interface (i8042) * for character input. Character output goes to a memory mapped video * framebuffer with little or big-endian organisation. * With environment setting 'console=serial' the console i/o can be * forced to serial port. The driver uses graphic specific defines/parameters/functions: (for SMI LynxE graphic chip) CONFIG_VIDEO_SMI_LYNXEM - use graphic driver for SMI 710,712,810 VIDEO_FB_LITTLE_ENDIAN  - framebuffer organisation default: big endian VIDEO_HW_RECTFILL       - graphic driver supports hardware rectangle fill VIDEO_HW_BITBLT         - graphic driver supports hardware bit blt Console Parameters are set by graphic drivers global struct: VIDEO_VISIBLE_COLS          - x resolution VIDEO_VISIBLE_ROWS          - y resolution VIDEO_PIXEL_SIZE            - storage size in byte per pixel VIDEO_DATA_FORMAT           - graphical data format GDF VIDEO_FB_ADRS               - start of video memory CONFIG_I8042_KBD            - AT Keyboard driver for i8042 VIDEO_KBD_INIT_FCT          - init function for keyboard VIDEO_TSTC_FCT              - keyboard_tstc function VIDEO_GETC_FCT              - keyboard_getc function CONFIG_CONSOLE_CURSOR       - on/off drawing cursor is done with delay                               loop in VIDEO_TSTC_FCT (i8042) CFG_CONSOLE_BLINK_COUNT     - value for delay loop - blink rate CONFIG_CONSOLE_TIME         - display time/date in upper right corner,                               needs CFG_CMD_DATE and CONFIG_CONSOLE_CURSOR CONFIG_VIDEO_LOGO           - display Linux Logo in upper left corner CONFIG_CONSOLE_EXTRA_INFO   - display additional board information strings                               that normaly goes to serial port. This define                               requires a board specific function:                               video_drawstring (VIDEO_INFO_X,                                                 VIDEO_INFO_Y + i*VIDEO_FONT_HEIGHT,                                                 info);                               that fills a info buffer at i=row.                               s.a: board/eltec/bab7xx.CONFIG_VGA_AS_SINGLE_DEVICE  - If set the framebuffer device will be initialised                               as an output only device. The Keyboard driver                               will not be set-up. This may be used, if you                               have none or more than one Keyboard devices                               (USB Keyboard, AT Keyboard).CONFIG_VIDEO_SW_CURSOR:      - Draws a cursor after the last character. No                                      blinking is provided. Uses the macros CURSOR_SET                                 and CURSOR_OFF.                                  CONFIG_VIDEO_HW_CURSOR:      - Uses the hardware cursor capability of the                                       graphic chip. Uses the macro CURSOR_SET.                                         ATTENTION: If booting an OS, the display driver                                  must disable the hardware register of the graphic                                chip. Otherwise a blinking field is displayed     */#include <common.h>#ifdef CONFIG_CFB_CONSOLE/*****************************************************************************//* Console device defines with SMI graphic                                   *//* Any other graphic must change this section                                *//*****************************************************************************/#ifdef  CONFIG_VIDEO_SMI_LYNXEM#define VIDEO_FB_LITTLE_ENDIAN#define VIDEO_HW_RECTFILL#define VIDEO_HW_BITBLT#endif/*****************************************************************************//* Defines for the CT69000 driver                                            *//*****************************************************************************/#ifdef  CONFIG_VIDEO_CT69000#define VIDEO_FB_LITTLE_ENDIAN#define VIDEO_HW_RECTFILL#define VIDEO_HW_BITBLT#endif/*****************************************************************************//* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc             *//*****************************************************************************/#include <video_fb.h>/*****************************************************************************//* some Macros                                                               *//*****************************************************************************/#define VIDEO_VISIBLE_COLS      (pGD->winSizeX)#define VIDEO_VISIBLE_ROWS      (pGD->winSizeY)#define VIDEO_PIXEL_SIZE        (pGD->gdfBytesPP)#define VIDEO_DATA_FORMAT       (pGD->gdfIndex)#define VIDEO_FB_ADRS           (pGD->frameAdrs)/*****************************************************************************//* Console device defines with i8042 keyboard controller                     *//* Any other keyboard controller must change this section                    *//*****************************************************************************/#ifdef  CONFIG_I8042_KBD#include <i8042.h>#define VIDEO_KBD_INIT_FCT      i8042_kbd_init()#define VIDEO_TSTC_FCT          i8042_tstc#define VIDEO_GETC_FCT          i8042_getc#endif/*****************************************************************************//* Console device                                                            *//*****************************************************************************/#include <version.h>#include <linux/types.h>#include <devices.h>#include <video_font.h>#ifdef CFG_CMD_DATE#include <rtc.h>#endif/*****************************************************************************//* Cursor definition:                                                        *//* CONFIG_CONSOLE_CURSOR:  Uses a timer function (see drivers/i8042.c) to    *//*                         let the cursor blink. Uses the macros CURSOR_OFF  *//*                         and CURSOR_ON.                                    *//* CONFIG_VIDEO_SW_CURSOR: Draws a cursor after the last character. No       *//*                         blinking is provided. Uses the macros CURSOR_SET  *//*                         and CURSOR_OFF.                                   *//* CONFIG_VIDEO_HW_CURSOR: Uses the hardware cursor capability of the        *//*                         graphic chip. Uses the macro CURSOR_SET.          *//*                         ATTENTION: If booting an OS, the display driver   *//*                         must disable the hardware register of the graphic *//*                         chip. Otherwise a blinking field is displayed     *//*****************************************************************************/#if !defined(CONFIG_CONSOLE_CURSOR) && \    !defined(CONFIG_VIDEO_SW_CURSOR) && \    !defined(CONFIG_VIDEO_HW_CURSOR)/* no Cursor defined */#define CURSOR_ON    #define CURSOR_OFF    #define CURSOR_SET#endif    #ifdef  CONFIG_CONSOLE_CURSOR#ifdef  CURSOR_ON#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined#endifvoid    console_cursor (int state);#define CURSOR_ON  console_cursor(1);#define CURSOR_OFF console_cursor(0);#define CURSOR_SET#ifndef CONFIG_I8042_KBD#warning Cursor drawing on/off needs timer function s.a. drivers/i8042.c#endif#else#ifdef  CONFIG_CONSOLE_TIME#error  CONFIG_CONSOLE_CURSOR must be defined for CONFIG_CONSOLE_TIME#endif#endif /* CONFIG_CONSOLE_CURSOR */#ifdef  CONFIG_VIDEO_SW_CURSOR#ifdef  CURSOR_ON#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined#endif#define CURSOR_ON#define CURSOR_OFF video_putchar(console_col * VIDEO_FONT_WIDTH,\                                 console_row * VIDEO_FONT_HEIGHT, ' ');#define CURSOR_SET video_set_cursor();#endif /* CONFIG_VIDEO_SW_CURSOR */#ifdef CONFIG_VIDEO_HW_CURSOR#ifdef  CURSOR_ON#error  only one of CONFIG_CONSOLE_CURSOR,CONFIG_VIDEO_SW_CURSOR,CONFIG_VIDEO_HW_CURSOR can be defined#endif#define CURSOR_ON#define CURSOR_OFF    #define CURSOR_SET video_set_hw_cursor(console_col * VIDEO_FONT_WIDTH, \                  (console_row * VIDEO_FONT_HEIGHT) + VIDEO_LOGO_HEIGHT);#endif  /* CONFIG_VIDEO_HW_CURSOR */#ifdef  CONFIG_VIDEO_LOGO#define LINUX_LOGO_WIDTH        80#define LINUX_LOGO_HEIGHT       80#define LINUX_LOGO_COLORS       214#define LINUX_LOGO_LUT_OFFSET   0x20#define __initdata#include <linux_logo.h>#define VIDEO_LOGO_WIDTH        LINUX_LOGO_WIDTH#define VIDEO_LOGO_HEIGHT       LINUX_LOGO_HEIGHT#define VIDEO_INFO_X            (VIDEO_LOGO_WIDTH)#define VIDEO_INFO_Y            (VIDEO_FONT_HEIGHT/2)#else#define VIDEO_LOGO_WIDTH        0#define VIDEO_LOGO_HEIGHT       0#endif#define VIDEO_COLS              VIDEO_VISIBLE_COLS#define VIDEO_ROWS              VIDEO_VISIBLE_ROWS#define VIDEO_SIZE              (VIDEO_ROWS*VIDEO_COLS*VIDEO_PIXEL_SIZE)#define VIDEO_PIX_BLOCKS        (VIDEO_SIZE >> 2)#define VIDEO_LINE_LEN          (VIDEO_COLS*VIDEO_PIXEL_SIZE)#define VIDEO_BURST_LEN         (VIDEO_COLS/8)#ifdef  CONFIG_VIDEO_LOGO#define CONSOLE_ROWS            ((VIDEO_ROWS - VIDEO_LOGO_HEIGHT) / VIDEO_FONT_HEIGHT)#else#define CONSOLE_ROWS            (VIDEO_ROWS / VIDEO_FONT_HEIGHT)#endif#define CONSOLE_COLS            (VIDEO_COLS / VIDEO_FONT_WIDTH)#define CONSOLE_ROW_SIZE        (VIDEO_FONT_HEIGHT * VIDEO_LINE_LEN)#define CONSOLE_ROW_FIRST       (video_console_address)#define CONSOLE_ROW_SECOND      (video_console_address + CONSOLE_ROW_SIZE)#define CONSOLE_ROW_LAST        (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE)#define CONSOLE_SIZE            (CONSOLE_ROW_SIZE * CONSOLE_ROWS)#define CONSOLE_SCROLL_SIZE     (CONSOLE_SIZE - CONSOLE_ROW_SIZE)/* Macros */#ifdef  VIDEO_FB_LITTLE_ENDIAN#define SWAP16(x)        ((((x) & 0x00ff) << 8) | ( (x) >> 8))#define SWAP32(x)        ((((x) & 0x000000ff) << 24) | (((x) & 0x0000ff00) << 8)|\                          (((x) & 0x00ff0000) >>  8) | (((x) & 0xff000000) >> 24) )#define SHORTSWAP32(x)   ((((x) & 0x000000ff) <<  8) | (((x) & 0x0000ff00) >> 8)|\                          (((x) & 0x00ff0000) <<  8) | (((x) & 0xff000000) >> 8) )#else#define SWAP16(x)        (x)#define SWAP32(x)        (x)#define SHORTSWAP32(x)   (x)#endif#if defined(DEBUG) || defined(DEBUG_CFB_CONSOLE)#define PRINTD(x)         printf(x)#else#define PRINTD(x)#endif#ifdef CONFIG_CONSOLE_EXTRA_INFOextern void video_get_info_str (    /* setup a board string: type, speed, etc. */    int line_number,        /* location to place info string beside logo */    char *info              /* buffer for info string */    );#endif/* Locals */static GraphicDevice *pGD;	/* Pointer to Graphic array */static void *video_fb_address;          /* frame buffer address */static void *video_console_address;     /* console buffer start address */static int console_col = 0; /* cursor col */static int console_row = 0; /* cursor row */static u32 eorx, fgx, bgx;  /* color pats */static const int video_font_draw_table8[] = {            0x00000000, 0x000000ff, 0x0000ff00, 0x0000ffff,            0x00ff0000, 0x00ff00ff, 0x00ffff00, 0x00ffffff,            0xff000000, 0xff0000ff, 0xff00ff00, 0xff00ffff,            0xffff0000, 0xffff00ff, 0xffffff00, 0xffffffff };static const int video_font_draw_table15[] = {            0x00000000, 0x00007fff, 0x7fff0000, 0x7fff7fff };static const int video_font_draw_table16[] = {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -