patch-2.1.110 linux/drivers/video/compatcon.c
Next file: linux/drivers/video/creatorfb.c
Previous file: linux/drivers/video/chipsfb.c
Back to the patch index
Back to the overall index
- Lines: 333
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.1.109/linux/drivers/video/compatcon.c
- Orig date:
Thu Jul 16 18:09:27 1998
diff -u --recursive --new-file v2.1.109/linux/drivers/video/compatcon.c linux/drivers/video/compatcon.c
@@ -1,332 +0,0 @@
-/*
- * linux/drivers/video/compatcon.c -- Console wrapper
- *
- * Created 26 Apr 1998 by Geert Uytterhoeven
- *
- * This will be removed once there are frame buffer devices for all supported
- * graphics hardware
- *
- * 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.
- */
-
-
-#include <linux/types.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/console_struct.h>
-#include <linux/string.h>
-#include <linux/kd.h>
-#include <linux/malloc.h>
-#include <linux/vt_kern.h>
-#include <linux/selection.h>
-#include <linux/init.h>
-
-#include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/linux_logo.h>
-
-#include <linux/console_compat.h>
-
-
- /*
- * Interface used by the world
- */
-
-static const char *compatcon_startup(void);
-static void compatcon_init(struct vc_data *conp);
-static void compatcon_deinit(struct vc_data *conp);
-static void compatcon_clear(struct vc_data *conp, int sy, int sx, int height,
- int width);
-static void compatcon_putc(struct vc_data *conp, int c, int ypos, int xpos);
-static void compatcon_putcs(struct vc_data *conp, const unsigned short *s, int count,
- int ypos, int xpos);
-static void compatcon_cursor(struct vc_data *conp, int mode);
-static int compatcon_scroll(struct vc_data *conp, int t, int b, int dir,
- int count);
-static void compatcon_bmove(struct vc_data *conp, int sy, int sx, int dy,
- int dx, int height, int width);
-static int compatcon_switch(struct vc_data *conp);
-static int compatcon_blank(int blank);
-static int compatcon_get_font(struct vc_data *conp, int *w, int *h, char *data);
-static int compatcon_set_font(struct vc_data *conp, int w, int h, char *data);
-static int compatcon_set_palette(struct vc_data *conp, unsigned char *table);
-static int compatcon_scrolldelta(struct vc_data *conp, int lines);
-
-
- /*
- * Internal routines
- */
-
-unsigned long video_num_columns;
-unsigned long video_num_lines;
-unsigned long video_size_row;
-unsigned char video_type;
-unsigned long video_mem_base;
-unsigned long video_mem_term;
-unsigned long video_screen_size;
-int can_do_color;
-
-extern void set_cursor(int currcons);
-extern void hide_cursor(void);
-extern int set_get_cmap(unsigned char *arg, int set);
-extern void set_palette(void);
-extern int set_get_font(unsigned char *arg, int set, int ch512);
-extern void set_vesa_blanking(unsigned long arg);
-extern void vesa_blank(void);
-extern void vesa_powerdown(void);
-extern int con_adjust_height(unsigned long fontheight);
-extern void con_type_init(const char **);
-extern void con_type_init_finish(void);
-
-#define BLANK 0x0020
-
-
-__initfunc(static const char *compatcon_startup(void))
-{
- const char *display_desc = "????";
-
- video_num_lines = ORIG_VIDEO_LINES;
- video_num_columns = ORIG_VIDEO_COLS;
- video_size_row = 2*video_num_columns;
- video_screen_size = video_num_lines*video_size_row;
-
- con_type_init(&display_desc);
- return display_desc;
-}
-
-
-static void compatcon_init(struct vc_data *conp)
-{
- static int first = 1;
-
- conp->vc_cols = video_num_columns;
- conp->vc_rows = video_num_lines;
- conp->vc_can_do_color = can_do_color;
- if (first) {
- con_type_init_finish();
- first = 0;
- }
-}
-
-static void compatcon_deinit(struct vc_data *conp)
-{
-}
-
-
-static void compatcon_clear(struct vc_data *conp, int sy, int sx, int height,
- int width)
-{
- int rows;
- unsigned long dest;
-
- if (console_blanked)
- return;
-
- dest = video_mem_base+sy*video_size_row+sx*2;
- if (sx == 0 && width == video_num_columns)
- memsetw((void *)dest, conp->vc_video_erase_char, height*video_size_row);
- else
- for (rows = height; rows-- ; dest += video_size_row)
- memsetw((void *)dest, conp->vc_video_erase_char, width*2);
-}
-
-
-static void compatcon_putc(struct vc_data *conp, int c, int ypos, int xpos)
-{
- u16 *p;
-
- if (console_blanked)
- return;
-
- p = (u16 *)(video_mem_base+ypos*video_size_row+xpos*2);
- scr_writew(c, p);
-}
-
-
-static void compatcon_putcs(struct vc_data *conp, const unsigned short *s, int count,
- int ypos, int xpos)
-{
- u16 *p;
- u16 sattr;
-
- if (console_blanked)
- return;
-
- p = (u16 *)(video_mem_base+ypos*video_size_row+xpos*2);
- while (count--)
- scr_writew(*s++, p++);
-}
-
-
-static void compatcon_cursor(struct vc_data *conp, int mode)
-{
- switch (mode) {
- case CM_ERASE:
- hide_cursor();
- break;
-
- case CM_MOVE:
- case CM_DRAW:
- set_cursor(conp->vc_num);
- break;
- }
-}
-
-
-static int compatcon_scroll(struct vc_data *conp, int t, int b, int dir,
- int count)
-{
- if (console_blanked)
- return 0;
-
- compatcon_cursor(conp, CM_ERASE);
-
- switch (dir) {
- case SM_UP:
- if (count > conp->vc_rows) /* Maximum realistic size */
- count = conp->vc_rows;
- compatcon_bmove(conp, t+count, 0, t, 0, b-t-count, conp->vc_cols);
- compatcon_clear(conp, b-count, 0, count, conp->vc_cols);
- break;
-
- case SM_DOWN:
- if (count > conp->vc_rows) /* Maximum realistic size */
- count = conp->vc_rows;
- /*
- * Fixed bmove() should end Arno's frustration with copying?
- * Confucius says:
- * Man who copies in wrong direction, end up with trashed
- * data
- */
- compatcon_bmove(conp, t, 0, t+count, 0, b-t-count, conp->vc_cols);
- compatcon_clear(conp, t, 0, count, conp->vc_cols);
- break;
-
- case SM_LEFT:
- compatcon_bmove(conp, 0, t+count, 0, t, conp->vc_rows, b-t-count);
- compatcon_clear(conp, 0, b-count, conp->vc_rows, count);
- break;
-
- case SM_RIGHT:
- compatcon_bmove(conp, 0, t, 0, t+count, conp->vc_rows, b-t-count);
- compatcon_clear(conp, 0, t, conp->vc_rows, count);
- break;
- }
- return 0;
-}
-
-
-static inline void memmovew(u16 *to, u16 *from, unsigned int count)
-{
- if ((unsigned long)to < (unsigned long)from)
- memcpyw(to, from, count);
- else {
- count /= 2;
- to += count;
- from += count;
- while (count) {
- count--;
- scr_writew(scr_readw(--from), --to);
- }
- }
-}
-
-static void compatcon_bmove(struct vc_data *conp, int sy, int sx, int dy,
- int dx, int height, int width)
-{
- unsigned long src, dst;
- int rows;
-
- if (console_blanked)
- return;
-
- if (sx == 0 && dx == 0 && width == video_num_columns) {
- src = video_mem_base+sy*video_size_row;
- dst = video_mem_base+dy*video_size_row;
- memmovew((u16 *)dst, (u16 *)src, height*video_size_row);
- } else if (dy < sy || (dy == sy && dx < sx)) {
- src = video_mem_base+sy*video_size_row+sx*2;
- dst = video_mem_base+dy*video_size_row+dx*2;
- for (rows = height; rows-- ;) {
- memmovew((u16 *)dst, (u16 *)src, width*2);
- src += video_size_row;
- dst += video_size_row;
- }
- } else {
- src = video_mem_base+(sy+height-1)*video_size_row+sx*2;
- dst = video_mem_base+(dy+height-1)*video_size_row+dx*2;
- for (rows = height; rows-- ;) {
- memmovew((u16 *)dst, (u16 *)src, width*2);
- src -= video_size_row;
- dst -= video_size_row;
- }
- }
-}
-
-
-static int compatcon_switch(struct vc_data *conp)
-{
- return 1;
-}
-
-
-static int compatcon_blank(int blank)
-{
- if (blank) {
- set_vesa_blanking(blank-1);
- if (blank-1 == 0)
- vesa_blank();
- else
- vesa_powerdown();
- return 0;
- } else {
- /* Tell console.c that it has to restore the screen itself */
- return 1;
- }
- return 0;
-}
-
-
-static int compatcon_get_font(struct vc_data *conp, int *w, int *h, char *data)
-{
- /* this is not supported: data already points to a kernel space copy */
- return -ENOSYS;
-}
-
-
-static int compatcon_set_font(struct vc_data *conp, int w, int h, char *data)
-{
- /* this is not supported: data already points to a kernel space copy */
- return -ENOSYS;
-}
-
-static int compatcon_set_palette(struct vc_data *conp, unsigned char *table)
-{
- if (console_blanked || vt_cons[fg_console]->vc_mode == KD_GRAPHICS)
- return -EINVAL;
- set_palette();
- return 0;
-}
-
-static int compatcon_scrolldelta(struct vc_data *conp, int lines)
-{
- /* TODO */
- return -ENOSYS;
-}
-
- /*
- * The console `switch' structure for the console wrapper
- */
-
-struct consw compat_con = {
- compatcon_startup, compatcon_init, compatcon_deinit, compatcon_clear,
- compatcon_putc, compatcon_putcs, compatcon_cursor, compatcon_scroll,
- compatcon_bmove, compatcon_switch, compatcon_blank, compatcon_get_font,
- compatcon_set_font, compatcon_set_palette, compatcon_scrolldelta,
- NULL, NULL
-};
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov