174708497SThomas Zimmermann /* SPDX-License-Identifier: GPL-2.0 */ 274708497SThomas Zimmermann #ifndef STICORE_H 374708497SThomas Zimmermann #define STICORE_H 474708497SThomas Zimmermann 5*12b8de56SThomas Zimmermann struct device; 6cf41d18bSThomas Zimmermann 774708497SThomas Zimmermann /* generic STI structures & functions */ 874708497SThomas Zimmermann 974708497SThomas Zimmermann #define MAX_STI_ROMS 4 /* max no. of ROMs which this driver handles */ 1074708497SThomas Zimmermann 1174708497SThomas Zimmermann #define STI_REGION_MAX 8 /* hardcoded STI constants */ 1274708497SThomas Zimmermann #define STI_DEV_NAME_LENGTH 32 1374708497SThomas Zimmermann #define STI_MONITOR_MAX 256 1474708497SThomas Zimmermann 1574708497SThomas Zimmermann #define STI_FONT_HPROMAN8 1 1674708497SThomas Zimmermann #define STI_FONT_KANA8 2 1774708497SThomas Zimmermann 1874708497SThomas Zimmermann #define ALT_CODE_TYPE_UNKNOWN 0x00 /* alt code type values */ 1974708497SThomas Zimmermann #define ALT_CODE_TYPE_PA_RISC_64 0x01 2074708497SThomas Zimmermann 2174708497SThomas Zimmermann /* The latency of the STI functions cannot really be reduced by setting 2274708497SThomas Zimmermann * this to 0; STI doesn't seem to be designed to allow calling a different 2374708497SThomas Zimmermann * function (or the same function with different arguments) after a 2474708497SThomas Zimmermann * function exited with 1 as return value. 2574708497SThomas Zimmermann * 2674708497SThomas Zimmermann * As all of the functions below could be called from interrupt context, 2774708497SThomas Zimmermann * we have to spin_lock_irqsave around the do { ret = bla(); } while(ret==1) 2874708497SThomas Zimmermann * block. Really bad latency there. 2974708497SThomas Zimmermann * 3074708497SThomas Zimmermann * Probably the best solution to all this is have the generic code manage 3174708497SThomas Zimmermann * the screen buffer and a kernel thread to call STI occasionally. 3274708497SThomas Zimmermann * 3374708497SThomas Zimmermann * Luckily, the frame buffer guys have the same problem so we can just wait 3474708497SThomas Zimmermann * for them to fix it and steal their solution. prumpf 3574708497SThomas Zimmermann */ 3674708497SThomas Zimmermann 3774708497SThomas Zimmermann #include <asm/io.h> 3874708497SThomas Zimmermann 3974708497SThomas Zimmermann #define STI_WAIT 1 4074708497SThomas Zimmermann 4174708497SThomas Zimmermann #define STI_PTR(p) ( virt_to_phys(p) ) 4274708497SThomas Zimmermann 4374708497SThomas Zimmermann #define sti_onscreen_x(sti) (sti->glob_cfg->onscreen_x) 4474708497SThomas Zimmermann #define sti_onscreen_y(sti) (sti->glob_cfg->onscreen_y) 4574708497SThomas Zimmermann 4674708497SThomas Zimmermann /* sti_font_xy() use the native font ROM ! */ 4774708497SThomas Zimmermann #define sti_font_x(sti) (PTR_STI(sti->font)->width) 4874708497SThomas Zimmermann #define sti_font_y(sti) (PTR_STI(sti->font)->height) 4974708497SThomas Zimmermann 5074708497SThomas Zimmermann #ifdef CONFIG_64BIT 5174708497SThomas Zimmermann #define STI_LOWMEM (GFP_KERNEL | GFP_DMA) 5274708497SThomas Zimmermann #else 5374708497SThomas Zimmermann #define STI_LOWMEM (GFP_KERNEL) 5474708497SThomas Zimmermann #endif 5574708497SThomas Zimmermann 5674708497SThomas Zimmermann 5774708497SThomas Zimmermann /* STI function configuration structs */ 5874708497SThomas Zimmermann 5974708497SThomas Zimmermann typedef union region { 6074708497SThomas Zimmermann struct { 6174708497SThomas Zimmermann u32 offset : 14; /* offset in 4kbyte page */ 6274708497SThomas Zimmermann u32 sys_only : 1; /* don't map to user space */ 6374708497SThomas Zimmermann u32 cache : 1; /* map to data cache */ 6474708497SThomas Zimmermann u32 btlb : 1; /* map to block tlb */ 6574708497SThomas Zimmermann u32 last : 1; /* last region in list */ 6674708497SThomas Zimmermann u32 length : 14; /* length in 4kbyte page */ 6774708497SThomas Zimmermann } region_desc; 6874708497SThomas Zimmermann 6974708497SThomas Zimmermann u32 region; /* complete region value */ 7074708497SThomas Zimmermann } region_t; 7174708497SThomas Zimmermann 7274708497SThomas Zimmermann #define REGION_OFFSET_TO_PHYS( rt, hpa ) \ 7374708497SThomas Zimmermann (((rt).region_desc.offset << 12) + (hpa)) 7474708497SThomas Zimmermann 7574708497SThomas Zimmermann struct sti_glob_cfg_ext { 7674708497SThomas Zimmermann u8 curr_mon; /* current monitor configured */ 7774708497SThomas Zimmermann u8 friendly_boot; /* in friendly boot mode */ 7874708497SThomas Zimmermann s16 power; /* power calculation (in Watts) */ 7974708497SThomas Zimmermann s32 freq_ref; /* frequency reference */ 8099ef0c67SHelge Deller u32 *sti_mem_addr; /* pointer to global sti memory (size=sti_mem_request) */ 8199ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 8274708497SThomas Zimmermann }; 8374708497SThomas Zimmermann 8474708497SThomas Zimmermann struct sti_glob_cfg { 8574708497SThomas Zimmermann s32 text_planes; /* number of planes used for text */ 8674708497SThomas Zimmermann s16 onscreen_x; /* screen width in pixels */ 8774708497SThomas Zimmermann s16 onscreen_y; /* screen height in pixels */ 8874708497SThomas Zimmermann s16 offscreen_x; /* offset width in pixels */ 8974708497SThomas Zimmermann s16 offscreen_y; /* offset height in pixels */ 9074708497SThomas Zimmermann s16 total_x; /* frame buffer width in pixels */ 9174708497SThomas Zimmermann s16 total_y; /* frame buffer height in pixels */ 9299ef0c67SHelge Deller u32 *region_ptrs[STI_REGION_MAX]; /* region pointers */ 9374708497SThomas Zimmermann s32 reent_lvl; /* storage for reentry level value */ 9499ef0c67SHelge Deller u32 *save_addr; /* where to save or restore reentrant state */ 9599ef0c67SHelge Deller u32 *ext_ptr; /* pointer to extended glob_cfg data structure */ 9674708497SThomas Zimmermann }; 9774708497SThomas Zimmermann 9874708497SThomas Zimmermann 9974708497SThomas Zimmermann /* STI init function structs */ 10074708497SThomas Zimmermann 10174708497SThomas Zimmermann struct sti_init_flags { 10274708497SThomas Zimmermann u32 wait : 1; /* should routine idle wait or not */ 10374708497SThomas Zimmermann u32 reset : 1; /* hard reset the device? */ 10474708497SThomas Zimmermann u32 text : 1; /* turn on text display planes? */ 10574708497SThomas Zimmermann u32 nontext : 1; /* turn on non-text display planes? */ 10674708497SThomas Zimmermann u32 clear : 1; /* clear text display planes? */ 10774708497SThomas Zimmermann u32 cmap_blk : 1; /* non-text planes cmap black? */ 10874708497SThomas Zimmermann u32 enable_be_timer : 1; /* enable bus error timer */ 10974708497SThomas Zimmermann u32 enable_be_int : 1; /* enable bus error timer interrupt */ 11074708497SThomas Zimmermann u32 no_chg_tx : 1; /* don't change text settings */ 11174708497SThomas Zimmermann u32 no_chg_ntx : 1; /* don't change non-text settings */ 11274708497SThomas Zimmermann u32 no_chg_bet : 1; /* don't change berr timer settings */ 11374708497SThomas Zimmermann u32 no_chg_bei : 1; /* don't change berr int settings */ 11474708497SThomas Zimmermann u32 init_cmap_tx : 1; /* initialize cmap for text planes */ 11574708497SThomas Zimmermann u32 cmt_chg : 1; /* change current monitor type */ 11674708497SThomas Zimmermann u32 retain_ie : 1; /* don't allow reset to clear int enables */ 11774708497SThomas Zimmermann u32 caller_bootrom : 1; /* set only by bootrom for each call */ 11874708497SThomas Zimmermann u32 caller_kernel : 1; /* set only by kernel for each call */ 11974708497SThomas Zimmermann u32 caller_other : 1; /* set only by non-[BR/K] caller */ 12074708497SThomas Zimmermann u32 pad : 14; /* pad to word boundary */ 12199ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 12274708497SThomas Zimmermann }; 12374708497SThomas Zimmermann 12474708497SThomas Zimmermann struct sti_init_inptr_ext { 12574708497SThomas Zimmermann u8 config_mon_type; /* configure to monitor type */ 12674708497SThomas Zimmermann u8 pad[1]; /* pad to word boundary */ 12774708497SThomas Zimmermann u16 inflight_data; /* inflight data possible on PCI */ 12899ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 12974708497SThomas Zimmermann }; 13074708497SThomas Zimmermann 13174708497SThomas Zimmermann struct sti_init_inptr { 13274708497SThomas Zimmermann s32 text_planes; /* number of planes to use for text */ 13399ef0c67SHelge Deller u32 *ext_ptr; /* pointer to extended init_graph inptr data structure*/ 13474708497SThomas Zimmermann }; 13574708497SThomas Zimmermann 13674708497SThomas Zimmermann 13774708497SThomas Zimmermann struct sti_init_outptr { 13874708497SThomas Zimmermann s32 errno; /* error number on failure */ 13974708497SThomas Zimmermann s32 text_planes; /* number of planes used for text */ 14099ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 14174708497SThomas Zimmermann }; 14274708497SThomas Zimmermann 14374708497SThomas Zimmermann 14474708497SThomas Zimmermann 14574708497SThomas Zimmermann /* STI configuration function structs */ 14674708497SThomas Zimmermann 14774708497SThomas Zimmermann struct sti_conf_flags { 14874708497SThomas Zimmermann u32 wait : 1; /* should routine idle wait or not */ 14974708497SThomas Zimmermann u32 pad : 31; /* pad to word boundary */ 15099ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 15174708497SThomas Zimmermann }; 15274708497SThomas Zimmermann 15374708497SThomas Zimmermann struct sti_conf_inptr { 15499ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 15574708497SThomas Zimmermann }; 15674708497SThomas Zimmermann 15774708497SThomas Zimmermann struct sti_conf_outptr_ext { 15874708497SThomas Zimmermann u32 crt_config[3]; /* hardware specific X11/OGL information */ 15974708497SThomas Zimmermann u32 crt_hdw[3]; 16099ef0c67SHelge Deller u32 *future_ptr; 16174708497SThomas Zimmermann }; 16274708497SThomas Zimmermann 16374708497SThomas Zimmermann struct sti_conf_outptr { 16474708497SThomas Zimmermann s32 errno; /* error number on failure */ 16574708497SThomas Zimmermann s16 onscreen_x; /* screen width in pixels */ 16674708497SThomas Zimmermann s16 onscreen_y; /* screen height in pixels */ 16774708497SThomas Zimmermann s16 offscreen_x; /* offscreen width in pixels */ 16874708497SThomas Zimmermann s16 offscreen_y; /* offscreen height in pixels */ 16974708497SThomas Zimmermann s16 total_x; /* frame buffer width in pixels */ 17074708497SThomas Zimmermann s16 total_y; /* frame buffer height in pixels */ 17174708497SThomas Zimmermann s32 bits_per_pixel; /* bits/pixel device has configured */ 17274708497SThomas Zimmermann s32 bits_used; /* bits which can be accessed */ 17374708497SThomas Zimmermann s32 planes; /* number of fb planes in system */ 17474708497SThomas Zimmermann u8 dev_name[STI_DEV_NAME_LENGTH]; /* null terminated product name */ 17574708497SThomas Zimmermann u32 attributes; /* flags denoting attributes */ 17699ef0c67SHelge Deller u32 *ext_ptr; /* pointer to future data */ 17774708497SThomas Zimmermann }; 17874708497SThomas Zimmermann 17974708497SThomas Zimmermann struct sti_rom { 18074708497SThomas Zimmermann u8 type[4]; 18174708497SThomas Zimmermann u8 res004; 18274708497SThomas Zimmermann u8 num_mons; 18374708497SThomas Zimmermann u8 revno[2]; 18474708497SThomas Zimmermann u32 graphics_id[2]; 18574708497SThomas Zimmermann 18674708497SThomas Zimmermann u32 font_start; 18774708497SThomas Zimmermann u32 statesize; 18874708497SThomas Zimmermann u32 last_addr; 18974708497SThomas Zimmermann u32 region_list; 19074708497SThomas Zimmermann 19174708497SThomas Zimmermann u16 reentsize; 19274708497SThomas Zimmermann u16 maxtime; 19374708497SThomas Zimmermann u32 mon_tbl_addr; 19474708497SThomas Zimmermann u32 user_data_addr; 19574708497SThomas Zimmermann u32 sti_mem_req; 19674708497SThomas Zimmermann 19774708497SThomas Zimmermann u32 user_data_size; 19874708497SThomas Zimmermann u16 power; 19974708497SThomas Zimmermann u8 bus_support; 20074708497SThomas Zimmermann u8 ext_bus_support; 20174708497SThomas Zimmermann u8 alt_code_type; 20274708497SThomas Zimmermann u8 ext_dd_struct[3]; 20374708497SThomas Zimmermann u32 cfb_addr; 20474708497SThomas Zimmermann 20574708497SThomas Zimmermann u32 init_graph; 20674708497SThomas Zimmermann u32 state_mgmt; 20774708497SThomas Zimmermann u32 font_unpmv; 20874708497SThomas Zimmermann u32 block_move; 20974708497SThomas Zimmermann u32 self_test; 21074708497SThomas Zimmermann u32 excep_hdlr; 21174708497SThomas Zimmermann u32 inq_conf; 21274708497SThomas Zimmermann u32 set_cm_entry; 21374708497SThomas Zimmermann u32 dma_ctrl; 21474708497SThomas Zimmermann u8 res040[7 * 4]; 21574708497SThomas Zimmermann 21674708497SThomas Zimmermann u32 init_graph_addr; 21774708497SThomas Zimmermann u32 state_mgmt_addr; 21874708497SThomas Zimmermann u32 font_unp_addr; 21974708497SThomas Zimmermann u32 block_move_addr; 22074708497SThomas Zimmermann u32 self_test_addr; 22174708497SThomas Zimmermann u32 excep_hdlr_addr; 22274708497SThomas Zimmermann u32 inq_conf_addr; 22374708497SThomas Zimmermann u32 set_cm_entry_addr; 22474708497SThomas Zimmermann u32 image_unpack_addr; 22574708497SThomas Zimmermann u32 pa_risx_addrs[7]; 22674708497SThomas Zimmermann }; 22774708497SThomas Zimmermann 22874708497SThomas Zimmermann struct sti_rom_font { 22974708497SThomas Zimmermann u16 first_char; 23074708497SThomas Zimmermann u16 last_char; 23174708497SThomas Zimmermann u8 width; 23274708497SThomas Zimmermann u8 height; 23374708497SThomas Zimmermann u8 font_type; /* language type */ 23474708497SThomas Zimmermann u8 bytes_per_char; 2358a32aa17SHelge Deller s32 next_font; /* note: signed int */ 23674708497SThomas Zimmermann u8 underline_height; 23774708497SThomas Zimmermann u8 underline_pos; 23874708497SThomas Zimmermann u8 res008[2]; 23974708497SThomas Zimmermann }; 24074708497SThomas Zimmermann 24174708497SThomas Zimmermann /* sticore internal font handling */ 24274708497SThomas Zimmermann 24374708497SThomas Zimmermann struct sti_cooked_font { 24474708497SThomas Zimmermann struct sti_rom_font *raw; /* native ptr for STI functions */ 24574708497SThomas Zimmermann void *raw_ptr; /* kmalloc'ed font data */ 24674708497SThomas Zimmermann struct sti_cooked_font *next_font; 24774708497SThomas Zimmermann int height, width; 24874708497SThomas Zimmermann int refcount; 24974708497SThomas Zimmermann u32 crc; 25074708497SThomas Zimmermann }; 25174708497SThomas Zimmermann 25274708497SThomas Zimmermann struct sti_cooked_rom { 25374708497SThomas Zimmermann struct sti_rom *raw; 25474708497SThomas Zimmermann struct sti_cooked_font *font_start; 25574708497SThomas Zimmermann }; 25674708497SThomas Zimmermann 25774708497SThomas Zimmermann /* STI font printing function structs */ 25874708497SThomas Zimmermann 25974708497SThomas Zimmermann struct sti_font_inptr { 26099ef0c67SHelge Deller u32 *font_start_addr; /* address of font start */ 26174708497SThomas Zimmermann s16 index; /* index into font table of character */ 26274708497SThomas Zimmermann u8 fg_color; /* foreground color of character */ 26374708497SThomas Zimmermann u8 bg_color; /* background color of character */ 26474708497SThomas Zimmermann s16 dest_x; /* X location of character upper left */ 26574708497SThomas Zimmermann s16 dest_y; /* Y location of character upper left */ 26699ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 26774708497SThomas Zimmermann }; 26874708497SThomas Zimmermann 26974708497SThomas Zimmermann struct sti_font_flags { 27074708497SThomas Zimmermann u32 wait : 1; /* should routine idle wait or not */ 27174708497SThomas Zimmermann u32 non_text : 1; /* font unpack/move in non_text planes =1, text =0 */ 27274708497SThomas Zimmermann u32 pad : 30; /* pad to word boundary */ 27399ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 27474708497SThomas Zimmermann }; 27574708497SThomas Zimmermann 27674708497SThomas Zimmermann struct sti_font_outptr { 27774708497SThomas Zimmermann s32 errno; /* error number on failure */ 27899ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 27974708497SThomas Zimmermann }; 28074708497SThomas Zimmermann 28174708497SThomas Zimmermann /* STI blockmove structs */ 28274708497SThomas Zimmermann 28374708497SThomas Zimmermann struct sti_blkmv_flags { 28474708497SThomas Zimmermann u32 wait : 1; /* should routine idle wait or not */ 28574708497SThomas Zimmermann u32 color : 1; /* change color during move? */ 28674708497SThomas Zimmermann u32 clear : 1; /* clear during move? */ 28774708497SThomas Zimmermann u32 non_text : 1; /* block move in non_text planes =1, text =0 */ 28874708497SThomas Zimmermann u32 pad : 28; /* pad to word boundary */ 28999ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 29074708497SThomas Zimmermann }; 29174708497SThomas Zimmermann 29274708497SThomas Zimmermann struct sti_blkmv_inptr { 29374708497SThomas Zimmermann u8 fg_color; /* foreground color after move */ 29474708497SThomas Zimmermann u8 bg_color; /* background color after move */ 29574708497SThomas Zimmermann s16 src_x; /* source upper left pixel x location */ 29674708497SThomas Zimmermann s16 src_y; /* source upper left pixel y location */ 29774708497SThomas Zimmermann s16 dest_x; /* dest upper left pixel x location */ 29874708497SThomas Zimmermann s16 dest_y; /* dest upper left pixel y location */ 29974708497SThomas Zimmermann s16 width; /* block width in pixels */ 30074708497SThomas Zimmermann s16 height; /* block height in pixels */ 30199ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 30274708497SThomas Zimmermann }; 30374708497SThomas Zimmermann 30474708497SThomas Zimmermann struct sti_blkmv_outptr { 30574708497SThomas Zimmermann s32 errno; /* error number on failure */ 30699ef0c67SHelge Deller u32 *future_ptr; /* pointer to future data */ 30774708497SThomas Zimmermann }; 30874708497SThomas Zimmermann 30974708497SThomas Zimmermann 31074708497SThomas Zimmermann /* sti_all_data is an internal struct which needs to be allocated in 31174708497SThomas Zimmermann * low memory (< 4GB) if STI is used with 32bit STI on a 64bit kernel */ 31274708497SThomas Zimmermann 31374708497SThomas Zimmermann struct sti_all_data { 31474708497SThomas Zimmermann struct sti_glob_cfg glob_cfg; 31574708497SThomas Zimmermann struct sti_glob_cfg_ext glob_cfg_ext; 31674708497SThomas Zimmermann 31774708497SThomas Zimmermann struct sti_conf_inptr inq_inptr; 31874708497SThomas Zimmermann struct sti_conf_outptr inq_outptr; /* configuration */ 31974708497SThomas Zimmermann struct sti_conf_outptr_ext inq_outptr_ext; 32074708497SThomas Zimmermann 32174708497SThomas Zimmermann struct sti_init_inptr_ext init_inptr_ext; 32274708497SThomas Zimmermann struct sti_init_inptr init_inptr; 32374708497SThomas Zimmermann struct sti_init_outptr init_outptr; 32474708497SThomas Zimmermann 32574708497SThomas Zimmermann struct sti_blkmv_inptr blkmv_inptr; 32674708497SThomas Zimmermann struct sti_blkmv_outptr blkmv_outptr; 32774708497SThomas Zimmermann 32874708497SThomas Zimmermann struct sti_font_inptr font_inptr; 32974708497SThomas Zimmermann struct sti_font_outptr font_outptr; 33074708497SThomas Zimmermann 33174708497SThomas Zimmermann /* leave as last entries */ 33274708497SThomas Zimmermann unsigned long save_addr[1024 / sizeof(unsigned long)]; 33374708497SThomas Zimmermann /* min 256 bytes which is STI default, max sti->sti_mem_request */ 33474708497SThomas Zimmermann unsigned long sti_mem_addr[256 / sizeof(unsigned long)]; 33574708497SThomas Zimmermann /* do not add something below here ! */ 33674708497SThomas Zimmermann }; 33774708497SThomas Zimmermann 33874708497SThomas Zimmermann /* internal generic STI struct */ 33974708497SThomas Zimmermann 34074708497SThomas Zimmermann struct sti_struct { 34174708497SThomas Zimmermann spinlock_t lock; 34274708497SThomas Zimmermann 34374708497SThomas Zimmermann /* char **mon_strings; */ 34474708497SThomas Zimmermann int sti_mem_request; 34574708497SThomas Zimmermann u32 graphics_id[2]; 34674708497SThomas Zimmermann 34774708497SThomas Zimmermann struct sti_cooked_rom *rom; 34874708497SThomas Zimmermann 34974708497SThomas Zimmermann unsigned long font_unpmv; 35074708497SThomas Zimmermann unsigned long block_move; 35174708497SThomas Zimmermann unsigned long init_graph; 35274708497SThomas Zimmermann unsigned long inq_conf; 35399ef0c67SHelge Deller int do_call64; /* call 64-bit code */ 35474708497SThomas Zimmermann 35574708497SThomas Zimmermann /* all following fields are initialized by the generic routines */ 35674708497SThomas Zimmermann int text_planes; 35774708497SThomas Zimmermann region_t regions[STI_REGION_MAX]; 35874708497SThomas Zimmermann unsigned long regions_phys[STI_REGION_MAX]; 35974708497SThomas Zimmermann 36074708497SThomas Zimmermann struct sti_glob_cfg *glob_cfg; /* points into sti_all_data */ 36174708497SThomas Zimmermann 36274708497SThomas Zimmermann int wordmode; 36374708497SThomas Zimmermann struct sti_cooked_font *font; /* ptr to selected font (cooked) */ 36474708497SThomas Zimmermann 36574708497SThomas Zimmermann struct pci_dev *pd; 36674708497SThomas Zimmermann 36774708497SThomas Zimmermann /* PCI data structures (pg. 17ff from sti.pdf) */ 36874708497SThomas Zimmermann u8 rm_entry[16]; /* pci region mapper array == pci config space offset */ 36974708497SThomas Zimmermann 370*12b8de56SThomas Zimmermann /* pointer to the parent device */ 371*12b8de56SThomas Zimmermann struct device *dev; 372*12b8de56SThomas Zimmermann 37374708497SThomas Zimmermann /* pointer to all internal data */ 37474708497SThomas Zimmermann struct sti_all_data *sti_data; 37574708497SThomas Zimmermann 37674708497SThomas Zimmermann /* pa_path of this device */ 37774708497SThomas Zimmermann char pa_path[24]; 37874708497SThomas Zimmermann }; 37974708497SThomas Zimmermann 38074708497SThomas Zimmermann 38174708497SThomas Zimmermann /* sticore interface functions */ 38274708497SThomas Zimmermann 38374708497SThomas Zimmermann struct sti_struct *sti_get_rom(unsigned int index); /* 0: default sti */ 38474708497SThomas Zimmermann void sti_font_convert_bytemode(struct sti_struct *sti, struct sti_cooked_font *f); 38574708497SThomas Zimmermann 38674708497SThomas Zimmermann 38774708497SThomas Zimmermann /* sticore main function to call STI firmware */ 38874708497SThomas Zimmermann 38974708497SThomas Zimmermann int sti_call(const struct sti_struct *sti, unsigned long func, 39074708497SThomas Zimmermann const void *flags, void *inptr, void *outptr, 39174708497SThomas Zimmermann struct sti_glob_cfg *glob_cfg); 39274708497SThomas Zimmermann 39374708497SThomas Zimmermann 39474708497SThomas Zimmermann /* functions to call the STI ROM directly */ 39574708497SThomas Zimmermann 39674708497SThomas Zimmermann void sti_putc(struct sti_struct *sti, int c, int y, int x, 39774708497SThomas Zimmermann struct sti_cooked_font *font); 39874708497SThomas Zimmermann void sti_set(struct sti_struct *sti, int src_y, int src_x, 39974708497SThomas Zimmermann int height, int width, u8 color); 40074708497SThomas Zimmermann void sti_clear(struct sti_struct *sti, int src_y, int src_x, 40174708497SThomas Zimmermann int height, int width, int c, struct sti_cooked_font *font); 40274708497SThomas Zimmermann void sti_bmove(struct sti_struct *sti, int src_y, int src_x, 40374708497SThomas Zimmermann int dst_y, int dst_x, int height, int width, 40474708497SThomas Zimmermann struct sti_cooked_font *font); 40574708497SThomas Zimmermann 40674708497SThomas Zimmermann #endif /* STICORE_H */ 407