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

📄 sticon.c

📁 linux下的VIDEO接口驱动程序
💻 C
字号:
/* *  linux/drivers/video/sticon.c  - console driver using HP's STI firmware * *	Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> * *  Based on linux/drivers/video/vgacon.c and linux/drivers/video/fbcon.c, *  which were * *	Created 28 Sep 1997 by Geert Uytterhoeven *	Rewritten by Martin Mares <mj@ucw.cz>, July 1998 *	Copyright (C) 1991, 1992  Linus Torvalds *			    1995  Jay Estabrook *	Copyright (C) 1995 Geert Uytterhoeven *	Copyright (C) 1993 Bjoern Brauel *			   Roman Hodek *	Copyright (C) 1993 Hamish Macdonald *			   Greg Harp *	Copyright (C) 1994 David Carter [carter@compsci.bristol.ac.uk] * *	      with work by William Rucklidge (wjr@cs.cornell.edu) *			   Geert Uytterhoeven *			   Jes Sorensen (jds@kom.auc.dk) *			   Martin Apel *	      with work by Guenther Kelleter *			   Martin Schaller *			   Andreas Schwab *			   Emmanuel Marty (core@ggi-project.org) *			   Jakub Jelinek (jj@ultra.linux.cz) *			   Martin Mares <mj@ucw.cz> * *  This file is subject to the terms and conditions of the GNU General Public *  License.  See the file COPYING in the main directory of this archive for *  more details. *//* *  TODO: *   - call STI in virtual mode rather than in real mode *   - support for PCI-only STI ROMs (which don't have a traditional region *     list) *   - safe detection (i.e. verify there is a graphics device at a given *     address first, not just read a random device's io space) *   - support for multiple STI devices in one machine *   - support for byte-mode STI ROMs *   - support for just using STI to switch to a colour fb (stifb ?) *   - try to make it work on m68k hp workstations ;) */#include <linux/init.h>#include <linux/kernel.h>#include <linux/tty.h>#include <linux/console.h>#include <linux/console_struct.h>#include <linux/errno.h>#include <linux/vt_kern.h>#include <linux/selection.h>#include <asm/io.h>#include "sti.h"/* STICON */static const char * __initsticon_startup(void){	return "STI console";}static intsticon_set_palette(struct vc_data *c, unsigned char *table){	return -EINVAL;}static intsticon_font_op(struct vc_data *c, struct console_font_op *op){	return -ENOSYS;}static void sticon_putc(struct vc_data *conp, int c, int ypos, int xpos){	sti_putc(&default_sti, c, ypos, xpos);}static void sticon_putcs(struct vc_data *conp, const unsigned short *s,	int count, int ypos, int xpos){	while(count--) {		sti_putc(&default_sti, scr_readw(s++), ypos, xpos++);	}}static void sticon_cursor(struct vc_data *conp, int mode){}static int sticon_scroll(struct vc_data *conp, int t, int b, int dir,			int count){	struct sti_struct *sti = &default_sti;	if(console_blanked)		return 0;	sticon_cursor(conp, CM_ERASE);	switch(dir) {	case SM_UP:		sti_bmove(sti, t+count, 0, t, 0, b-t-count, conp->vc_cols);		sti_clear(sti, b-count, 0, count, conp->vc_cols);		break;	case SM_DOWN:		sti_bmove(sti, t, 0, t+count, 0, b-t-count, conp->vc_cols);		sti_clear(sti, t, 0, count, conp->vc_cols);		break;	}	return 0;}	static void sticon_bmove(struct vc_data *conp, int sy, int sx, int dy, int dx,			 int height, int width){	sti_bmove(&default_sti, sy, sx, dy, dx, height, width);}static void sticon_init(struct vc_data *c, int init){	struct sti_struct *sti = &default_sti;	int vc_cols, vc_rows;	sti_set(sti, 0, 0, sti_onscreen_y(sti), sti_onscreen_x(sti), 0);	c->vc_can_do_color = 1;	vc_cols = PTR_STI(sti->glob_cfg)->onscreen_x / sti_font_x(sti);	vc_rows = PTR_STI(sti->glob_cfg)->onscreen_y / sti_font_y(sti);	vc_resize_con(vc_rows, vc_cols, c->vc_num);}static void sticon_deinit(struct vc_data *c){}static void sticon_clear(struct vc_data *conp, int sy, int sx, int height,			int width){	sti_clear(&default_sti, sy, sx, height, width);}static int sticon_switch(struct vc_data *conp){	return 0;}static int sticon_blank(struct vc_data *conp, int blank){	return 0;}static int sticon_scrolldelta(struct vc_data *conp, int lines){	return 0;}static int sticon_set_origin(struct vc_data *conp){	return 0;}static u8 sticon_build_attr(struct vc_data *conp, u8 color, u8 intens, u8 blink, u8 underline, u8 reverse){	u8 attr = ((color & 0x70) >> 1) | ((color & 7));	if(reverse) {		color = ((color>>3)&0x7) | ((color &0x7)<<3);	}	return attr;}struct consw sti_con = {	con_startup: 		sticon_startup, 	con_init: 		sticon_init,	con_deinit: 		sticon_deinit,	con_clear: 		sticon_clear,	con_putc: 		sticon_putc,	con_putcs: 		sticon_putcs,	con_cursor: 		sticon_cursor,	con_scroll: 		sticon_scroll,	con_bmove: 		sticon_bmove,	con_switch: 		sticon_switch,	con_blank: 		sticon_blank,	con_font_op:		sticon_font_op,	con_set_palette:	sticon_set_palette,	con_scrolldelta:	sticon_scrolldelta,	con_set_origin: 	sticon_set_origin,	con_build_attr:		sticon_build_attr,};static int __init sti_init(void){	printk("searching for word mode STI ROMs\n");	if (sti_init_roms()) {		pdc_console_die();		take_over_console(&sti_con, 0, MAX_NR_CONSOLES-1, 1);		return 0;	} else		return -ENODEV;}module_init(sti_init)

⌨️ 快捷键说明

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