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

📄 cfb_console.c

📁 PPC Linux Driver, use makefile to compare the routen in Linux.
💻 C
📖 第 1 页 / 共 3 页
字号:
    console_col = 0;    /* Check if we need to scroll the terminal */    if (console_row >= CONSOLE_ROWS)    {    /* Scroll everything up */    console_scrollup ();    /* Decrement row number */    console_row--;    }}/*****************************************************************************/void video_putc (const char c){    switch (c)    {    case 13: /* ignore */        break;    case '\n': /* next line */        console_newline();        break;    case 9:    /* tab 8 */        CURSOR_OFF        console_col |=  0x0008;        console_col &= ~0x0007;        if (console_col >= CONSOLE_COLS)            console_newline();        break;    case 8:    /* backspace */        console_back();        break;    default: /* draw the char */        video_putchar (console_col * VIDEO_FONT_WIDTH,                       console_row * VIDEO_FONT_HEIGHT, c);        console_col++ ;        /* check for newline */        if (console_col >= CONSOLE_COLS)            console_newline();    }    CURSOR_SET}/*****************************************************************************/void video_puts (const char *s){    int count = strlen(s);    while(count--)        video_putc(*s++);}/*****************************************************************************/#ifdef CONFIG_VIDEO_LOGOvoid logo_plot (void *screen, int width, int x, int y){    int skip = (width - LINUX_LOGO_WIDTH) * VIDEO_PIXEL_SIZE,        xcount, i,        ycount = LINUX_LOGO_HEIGHT;    unsigned char        *source = linux_logo,        *dest   = (unsigned char *) screen + ((y * width * VIDEO_PIXEL_SIZE) + x),        r, g, b;    if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX)    {        for (i = 0; i < LINUX_LOGO_COLORS; i++)        {            r = (unsigned char)linux_logo_red  [i];            g = (unsigned char)linux_logo_green[i];            b = (unsigned char)linux_logo_blue [i];            video_set_lut (LINUX_LOGO_LUT_OFFSET + i, r, g, b);        }    }    while (ycount--)    {    xcount = LINUX_LOGO_WIDTH;    while (xcount--)    {        r = (unsigned char)linux_logo_red  [*source - LINUX_LOGO_LUT_OFFSET];        g = (unsigned char)linux_logo_green[*source - LINUX_LOGO_LUT_OFFSET];        b = (unsigned char)linux_logo_blue [*source - LINUX_LOGO_LUT_OFFSET];        switch (VIDEO_DATA_FORMAT)        {        case GDF__8BIT_INDEX:            *dest = *source;            break;        case GDF__8BIT_332RGB:            *dest = ((r>>5)<<5) | ((g>>5)<<2) | (b>>6);            break;        case GDF_15BIT_555RGB:            *(unsigned short *)dest =            SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3)));            break;        case GDF_16BIT_565RGB:            *(unsigned short *)dest =            SWAP16((unsigned short)(((r>>3)<<11) | ((g>>2)<<5) | (b>>3)));            break;        case GDF_32BIT_X888RGB:            *(unsigned long  *)dest =            SWAP32((unsigned long)((r<<16) | (g<<8) | b));            break;        case GDF_24BIT_888RGB:#ifdef VIDEO_FB_LITTLE_ENDIAN            dest[0] = b;            dest[1] = g;            dest[2] = r;#else            dest[0] = r;            dest[1] = g;            dest[2] = b;#endif            break;        }        source++;        dest += VIDEO_PIXEL_SIZE;    }    dest += skip;    }}/*****************************************************************************/static void *video_logo (void){    char info[128];    logo_plot (video_fb_address, VIDEO_COLS, 0, 0);    sprintf(info, " %s (%s - %s)", PPCBOOT_VERSION, __DATE__, __TIME__);    video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info);#ifdef CONFIG_CONSOLE_EXTRA_INFO    {    int i, n = ((VIDEO_LOGO_HEIGHT-VIDEO_FONT_HEIGHT)/VIDEO_FONT_HEIGHT);    for (i = 1; i < n; i++)    {        video_get_info_str (i, info);        if (*info)        video_drawstring (VIDEO_INFO_X,                          VIDEO_INFO_Y + i*VIDEO_FONT_HEIGHT, info);    }    }#endif    return (video_fb_address + VIDEO_LOGO_HEIGHT * VIDEO_LINE_LEN);}#endif/*****************************************************************************/static int video_init(void){    unsigned char color8;    if ((pGD=video_hw_init()) == NULL)        return -1;    video_fb_address = (void*)VIDEO_FB_ADRS;#ifdef CONFIG_VIDEO_HW_CURSOR    video_init_hw_cursor(VIDEO_FONT_WIDTH, VIDEO_FONT_HEIGHT);#endif    /* Init drawing pats */    switch (VIDEO_DATA_FORMAT)    {    case GDF__8BIT_INDEX:        video_set_lut (0x01, CONSOLE_FG_COL, CONSOLE_FG_COL, CONSOLE_FG_COL);        video_set_lut (0x00, CONSOLE_BG_COL, CONSOLE_BG_COL, CONSOLE_BG_COL);        fgx = 0x01010101;        bgx = 0x00000000;        break;    case GDF__8BIT_332RGB:        color8 = ((CONSOLE_FG_COL & 0xe0) | ((CONSOLE_FG_COL>>3) & 0x1c) | CONSOLE_FG_COL>>6);        fgx = (color8<<24) | (color8<<16) | (color8<<8) | color8;        color8 = ((CONSOLE_BG_COL & 0xe0) | ((CONSOLE_BG_COL>>3) & 0x1c) | CONSOLE_BG_COL>>6);        bgx = (color8<<24) | (color8<<16) | (color8<<8) | color8;        break;    case GDF_15BIT_555RGB:        fgx = (((CONSOLE_FG_COL>>3)<<26) | ((CONSOLE_FG_COL>>3)<<21) | ((CONSOLE_FG_COL>>3)<<16) |           ((CONSOLE_FG_COL>>3)<<10) | ((CONSOLE_FG_COL>>3)<<5)  |  (CONSOLE_FG_COL>>3));        bgx = (((CONSOLE_BG_COL>>3)<<26) | ((CONSOLE_BG_COL>>3)<<21) | ((CONSOLE_BG_COL>>3)<<16) |           ((CONSOLE_BG_COL>>3)<<10) | ((CONSOLE_BG_COL>>3)<<5)  |  (CONSOLE_BG_COL>>3));        break;    case GDF_16BIT_565RGB:        fgx = (((CONSOLE_FG_COL>>3)<<27) | ((CONSOLE_FG_COL>>2)<<21) | ((CONSOLE_FG_COL>>3)<<16) |           ((CONSOLE_FG_COL>>3)<<11) | ((CONSOLE_FG_COL>>2)<<5)  |  (CONSOLE_FG_COL>>3));        bgx = (((CONSOLE_BG_COL>>3)<<27) | ((CONSOLE_BG_COL>>2)<<21) | ((CONSOLE_BG_COL>>3)<<16) |           ((CONSOLE_BG_COL>>3)<<11) | ((CONSOLE_BG_COL>>2)<<5)  |  (CONSOLE_BG_COL>>3));        break;    case GDF_32BIT_X888RGB:        fgx = (CONSOLE_FG_COL<<16) | (CONSOLE_FG_COL<<8) | CONSOLE_FG_COL;        bgx = (CONSOLE_BG_COL<<16) | (CONSOLE_BG_COL<<8) | CONSOLE_BG_COL;        break;    case GDF_24BIT_888RGB:        fgx = (CONSOLE_FG_COL<<24) | (CONSOLE_FG_COL<<16) | (CONSOLE_FG_COL<<8) | CONSOLE_FG_COL;        bgx = (CONSOLE_BG_COL<<24) | (CONSOLE_BG_COL<<16) | (CONSOLE_BG_COL<<8) | CONSOLE_BG_COL;        break;    }    eorx = fgx ^ bgx;#ifdef CONFIG_VIDEO_LOGO    /* Plot the logo and get start point of console */    PRINTD("Video: Drawing the logo ...\n");    video_console_address = video_logo();#else    video_console_address = video_fb_address;#endif    /* Initialize the console */    console_col  = 0;    console_row  = 0;    return 0 ;}/*****************************************************************************/int drv_video_init (void){    int skip_dev_init;    device_t console_dev;    char *penv;    skip_dev_init = 0;     /* Force console i/o to serial ? */    if ((penv = getenv ("console")) != NULL)        if (strcmp (penv, "serial") == 0)            return 0;   /* Init video chip - returns with framebuffer cleared */    if (video_init() == -1)        skip_dev_init = 1;#ifdef CONFIG_VGA_AS_SINGLE_DEVICE   /* Devices VGA and Keyboard will be assigned seperately */    /* Init vga device */    if (!skip_dev_init)    {        memset (&console_dev, 0, sizeof(console_dev));        strcpy(console_dev.name, "vga");        console_dev.ext   = DEV_EXT_VIDEO;    /* Video extensions */        console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;        console_dev.putc  = video_putc;        /* 'putc' function */        console_dev.puts  = video_puts;        /* 'puts' function */        console_dev.tstc  = NULL;              /* 'tstc' function */        console_dev.getc  = NULL;              /* 'getc' function */        if (device_register (&console_dev) == 0)            return 1;    }#else    PRINTD("KBD: Keyboard init ...\n");    if (VIDEO_KBD_INIT_FCT == -1)        skip_dev_init = 1;    /* Init console device */    if (!skip_dev_init)    {        memset (&console_dev, 0, sizeof(console_dev));        strcpy(console_dev.name, "console");        console_dev.ext   = DEV_EXT_VIDEO;    /* Video extensions */        console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;        console_dev.putc  = video_putc;        /* 'putc' function */        console_dev.puts  = video_puts;        /* 'puts' function */        console_dev.tstc  = VIDEO_TSTC_FCT;    /* 'tstc' function */        console_dev.getc  = VIDEO_GETC_FCT;    /* 'getc' function */        if (device_register (&console_dev) == 0)            return 1;    }#endif /* CONFIG_VGA_AS_SINGLE_DEVICE */    /* No console dev available */    return 0;}#endif /* CONFIG_CFB_CONSOLE */

⌨️ 快捷键说明

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