/* * @DEC_COPYRIGHT@ */ /* * HISTORY * $Log: myvga_reg.h,v $ * Revision 1.1.2.2 1997/04/24 20:01:28 Paul_Grist * Initial submit of myvga example to ddk pool * [1997/04/24 19:37:26 Paul_Grist] * * $EndLog$ */ /* * @(#)$RCSfile: myvga_reg.h,v $ $Revision: 1.1.2.2 $ (DEC) $Date: 1997/04/24 20:01:28 $ */ /**************************************************************************** * * myvga_reg.h - header file for myvga driver. * * This is used solely for the driver. Any user interface * information such as ioctl macros goes in myvga.h * ***************************************************************************/ #ifndef _MYVGA_REG_H_ #define _MYVGA_REG_H_ /* * the reason a different color cell representation is used is * to reduce kernel memory usage. This form is sufficient for * a 256 entry color map, and saves 8 bytes/cell, or 2k bytes/screen. */ struct myvga_color_cell { unsigned char dirty_cell; unsigned char red; /* only need 8 bits */ unsigned char green; unsigned char blue; }; #define MYVGA_NVISUALS 1 #define MYVGA_NDEPTHS 1 /* * myvga driver info (softc) structure * * NOTE: * driver info structure was based on an earlier * device driver, and may have several unused fields */ struct myvga_type { ws_screen_descriptor screen; ws_depth_descriptor depth[MYVGA_NDEPTHS]; ws_visual_descriptor visual[MYVGA_NVISUALS]; ws_screen_functions sf; ws_color_map_functions cmf; ws_cursor_functions cf; unsigned int state; short ctlr_type; short bus_type; pid_t mapped_pid; unsigned short attribute; /* char mode attribute */ unsigned short unit; unsigned short board_id; short min_dirty; short max_dirty; short x_hot; short y_hot; ws_color_cell cursor_fg; ws_color_cell cursor_bg; unsigned long mem_phys; io_handle_t mem_handle; unsigned long cursor_offset; unsigned int mem_size; u_int bits[256]; /* 1KB */ struct myvga_color_cell cells[256]; /* 1KB */ /* interrupt handler id*/ ihandler_id_t *intr_handle; /* base io addresses */ io_handle_t iobase; io_handle_t membase; void *orig_state; void *new_state; }; /* "state" field defines */ #define MYVGA_STATE_MAPPED 0x0001 /* has unit been mapped */ #define MYVGA_STATE_DIRTY_CURSOR 0x0002 #define MYVGA_STATE_DIRTY_CMAP 0x0004 #define MYVGA_STATE_CURSOR_ON 0x0008 #define MYVGA_STATE_SCREEN_ON 0x0010 #define MYVGA_STATE_6BIT_DAC 0x0020 /* the following macros take a pointer to a myvga_type structure */ /* "state" field test macros */ #define IS_MYVGA_MAPPED(scp) ((scp)->state & MYVGA_STATE_MAPPED) #define IS_MYVGA_DIRTY_CURSOR(scp) ((scp)->state & MYVGA_STATE_DIRTY_CURSOR) #define IS_MYVGA_DIRTY_CMAP(scp) ((scp)->state & MYVGA_STATE_DIRTY_CMAP) #define IS_MYVGA_CURSOR_ON(scp) ((scp)->state & MYVGA_STATE_CURSOR_ON) #define IS_MYVGA_SCREEN_ON(scp) ((scp)->state & MYVGA_STATE_SCREEN_ON) #define IS_MYVGA_6BIT_DAC(scp) ((scp)->state & MYVGA_STATE_6BIT_DAC) /* "state" field set and clear macros */ #define SET_MYVGA_MAPPED(scp) (scp)->state |= MYVGA_STATE_MAPPED #define CLR_MYVGA_MAPPED(scp) (scp)->state &= ~MYVGA_STATE_MAPPED #define SET_MYVGA_DIRTY_CURSOR(scp) (scp)->state |= MYVGA_STATE_DIRTY_CURSOR #define CLR_MYVGA_DIRTY_CURSOR(scp) (scp)->state &= ~MYVGA_STATE_DIRTY_CURSOR #define SET_MYVGA_DIRTY_CMAP(scp) (scp)->state |= MYVGA_STATE_DIRTY_CMAP #define CLR_MYVGA_DIRTY_CMAP(scp) (scp)->state &= ~MYVGA_STATE_DIRTY_CMAP #define SET_MYVGA_CURSOR_ON(scp) (scp)->state |= MYVGA_STATE_CURSOR_ON #define CLR_MYVGA_CURSOR_ON(scp) (scp)->state &= ~MYVGA_STATE_CURSOR_ON #define SET_MYVGA_SCREEN_ON(scp) (scp)->state |= MYVGA_STATE_SCREEN_ON #define CLR_MYVGA_SCREEN_ON(scp) (scp)->state &= ~MYVGA_STATE_SCREEN_ON #define SET_MYVGA_6BIT_DAC(scp) (scp)->state |= MYVGA_STATE_6BIT_DAC #define CLR_MYVGA_6BIT_DAC(scp) (scp)->state &= ~MYVGA_STATE_6BIT_DAC /* these are the generic VGA addresses */ #define MYVGA_CRTC_ADDRESS 0x3D4 #define MYVGA_CRTC_DATA 0x3D5 #define MYVGA_SEQ_ADDRESS 0x3C4 #define MYVGA_SEQ_DATA 0x3C5 #define MYVGA_PEL_MASK 0x3C6 #define MYVGA_PEL_ADDR_WMODE 0x3C8 #define MYVGA_PEL_DATA 0x3C9 #define IOH_SPARSE_BYTE (HANDLE_BYTE | HANDLE_SPARSE_SPACE) #define IOH_DENSE_BYTE (HANDLE_BYTE | HANDLE_DENSE_SPACE) /* hardwired addresses for when needed... */ #define HIGHMAP_BASE 0x000a0000 /* mem aperture base address) */ #define HIGHMAP_SIZE 0x00020000 /* mem aperture size is 128K */ #define IOREGS_BASE 0x00000000 /* where IO regs mapping starts */ #define IOREGS_SIZE 0x00010000 /* size of IO regs mapped (64Kb) */ /* screen functions */ extern caddr_t myvga_init_screen_handle(caddr_t screen_handle, caddr_t address, int unit,int type); extern int myvga_init_screen(caddr_t screen_handle, ws_screen_descriptor *screen); extern int myvga_clear_screen(caddr_t screen_handle, ws_screen_descriptor *screen); extern int myvga_scroll_screen(caddr_t screen_handle, ws_screen_descriptor *screen); extern int myvga_blitc(caddr_t screen_handle, register ws_screen_descriptor *sp, register int row, register int col, register int ch); extern int myvga_map_unmap_screen(caddr_t screen_handle, ws_depth_descriptor *depths, ws_screen_descriptor *screen, ws_map_control *mp); extern int myvga_ioctl(caddr_t screen_handle, int request, caddr_t data); extern void myvga_close(caddr_t screen_handle); /* cursor functions */ extern caddr_t myvga_init_cursor_handle(caddr_t cursor_handle, caddr_t address, int unit, int type); extern int myvga_load_cursor(caddr_t cursor_handle, ws_screen_descriptor *screen, ws_cursor_data *cursor); extern int myvga_recolor_cursor(caddr_t cursor_handle, ws_screen_descriptor *screen, ws_color_cell *fg, ws_color_cell *bg); extern int myvga_set_cursor_position(caddr_t cursor_handle, ws_screen_descriptor *sp, register int x, register int y); extern int myvga_cursor_on_off(caddr_t cursor_handle,int on_off); /* color map functions */ extern caddr_t myvga_init_color_map_handle(caddr_t colormap_handle, caddr_t address, int unit, int type); extern int myvga_init_color_map(caddr_t colormap_handle); extern int myvga_load_color_map_entry_6bit(caddr_t colormap_handle, int map, register ws_color_cell *entry); extern void myvga_clean_color_map(caddr_t colormap_handle); extern int myvga_video_on(caddr_t colormap_handle); extern int myvga_video_off(caddr_t colormap_handle); #endif /* _MYVGA_REG_H_ */