xref: /openbsd-src/sys/dev/pci/tgavar.h (revision f635b80d5019594a759f41ae65776e9bdc894c0a)
1*f635b80dSmiod /* $OpenBSD: tgavar.h,v 1.9 2006/12/17 22:18:16 miod Exp $ */
21ecc4ecdSericj /* $NetBSD: tgavar.h,v 1.8 2000/04/02 19:01:11 nathanw Exp $ */
390704881Smickey 
490704881Smickey /*
590704881Smickey  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
690704881Smickey  * All rights reserved.
790704881Smickey  *
890704881Smickey  * Author: Chris G. Demetriou
990704881Smickey  *
1090704881Smickey  * Permission to use, copy, modify and distribute this software and
1190704881Smickey  * its documentation is hereby granted, provided that both the copyright
1290704881Smickey  * notice and this permission notice appear in all copies of the
1390704881Smickey  * software, derivative works or modified versions, and any portions
1490704881Smickey  * thereof, and that both notices appear in supporting documentation.
1590704881Smickey  *
1690704881Smickey  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
1790704881Smickey  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
1890704881Smickey  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
1990704881Smickey  *
2090704881Smickey  * Carnegie Mellon requests users of this software to return to
2190704881Smickey  *
2290704881Smickey  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
2390704881Smickey  *  School of Computer Science
2490704881Smickey  *  Carnegie Mellon University
2590704881Smickey  *  Pittsburgh PA 15213-3890
2690704881Smickey  *
2790704881Smickey  * any improvements or extensions that they make and grant Carnegie the
2890704881Smickey  * rights to redistribute these changes.
2990704881Smickey  */
3090704881Smickey 
311ecc4ecdSericj #include <dev/ic/ramdac.h>
3290704881Smickey #include <dev/pci/tgareg.h>
3390704881Smickey #include <dev/wscons/wsconsio.h>
3491f3e10fSnate #include <dev/wscons/wsdisplayvar.h>
3591f3e10fSnate #include <dev/rasops/rasops.h>
3690704881Smickey 
3790704881Smickey struct tga_devconfig;
3890704881Smickey struct fbcmap;
3990704881Smickey struct fbcursor;
4090704881Smickey struct fbcurpos;
4190704881Smickey 
4290704881Smickey struct tga_conf {
4390704881Smickey 	char	    *tgac_name;		/* name for this board type */
4490704881Smickey 
45c4071fd1Smillert 	struct ramdac_funcs *(*ramdac_funcs)(void);
461ecc4ecdSericj 
4790704881Smickey 	int	    tgac_phys_depth;	/* physical frame buffer depth */
4890704881Smickey 	vsize_t   tgac_cspace_size;	/* core space size */
4990704881Smickey 	vsize_t   tgac_vvbr_units;	/* what '1' in the VVBR means */
5090704881Smickey 
5190704881Smickey 	int	    tgac_ndbuf;		/* number of display buffers */
5290704881Smickey 	vaddr_t tgac_dbuf[2];		/* display buffer offsets/addresses */
5390704881Smickey 	vsize_t   tgac_dbufsz[2];	/* display buffer sizes */
5490704881Smickey 
5590704881Smickey 	int	    tgac_nbbuf;		/* number of display buffers */
5690704881Smickey 	vaddr_t tgac_bbuf[2];		/* back buffer offsets/addresses */
5790704881Smickey 	vsize_t   tgac_bbufsz[2];	/* back buffer sizes */
5890704881Smickey };
5990704881Smickey 
6090704881Smickey struct tga_devconfig {
6190704881Smickey 	bus_space_tag_t dc_memt;
6291f3e10fSnate 	bus_space_handle_t dc_memh;
6391f3e10fSnate 
6490704881Smickey 	pcitag_t   	 dc_pcitag;	/* PCI tag */
6590704881Smickey 	bus_addr_t	 dc_pcipaddr;	/* PCI phys addr. */
6690704881Smickey 
6791f3e10fSnate 	bus_space_handle_t dc_regs;	/* registers; XXX: need aliases */
6891f3e10fSnate 
6990704881Smickey 	int	    dc_tga_type;	/* the device type; see below */
701ecc4ecdSericj 	int	    dc_tga2;		/* True if it is a TGA2 */
7190704881Smickey 	const struct tga_conf *dc_tgaconf; /* device buffer configuration */
7290704881Smickey 
731ecc4ecdSericj 	struct ramdac_funcs
741ecc4ecdSericj 		    *dc_ramdac_funcs;	/* The RAMDAC functions */
751ecc4ecdSericj 	struct ramdac_cookie
761ecc4ecdSericj 		    *dc_ramdac_cookie;	/* the RAMDAC type; see above */
771ecc4ecdSericj 
7890704881Smickey 	vaddr_t dc_vaddr;		/* memory space virtual base address */
7990704881Smickey 	paddr_t dc_paddr;		/* memory space physical base address */
8090704881Smickey 
8190704881Smickey 	int	    dc_wid;		/* width of frame buffer */
8290704881Smickey 	int	    dc_ht;		/* height of frame buffer */
8390704881Smickey 	int	    dc_rowbytes;	/* bytes in a FB scan line */
8490704881Smickey 
8590704881Smickey 	vaddr_t dc_videobase;		/* base of flat frame buffer */
8690704881Smickey 
8791f3e10fSnate 	struct rasops_info dc_rinfo;	/* raster display data */
8890704881Smickey 
8990704881Smickey 	int	    dc_blanked;		/* currently had video disabled */
9090704881Smickey 	void	    *dc_ramdac_private; /* RAMDAC private storage */
911ecc4ecdSericj 
92c4071fd1Smillert 	void	    (*dc_ramdac_intr)(void *);
931ecc4ecdSericj 	int	    dc_intrenabled;	/* can we depend on interrupts yet? */
9490704881Smickey };
9590704881Smickey 
9690704881Smickey struct tga_softc {
9790704881Smickey 	struct	device sc_dev;
9890704881Smickey 
9990704881Smickey 	struct	tga_devconfig *sc_dc;	/* device configuration */
10090704881Smickey 	void	*sc_intr;		/* interrupt handler info */
10160d42a3eSmatthieu 	u_int	sc_mode;	        /* wscons mode used */
10290704881Smickey 	/* XXX should record intr fns/arg */
10390704881Smickey 
10490704881Smickey 	int nscreens;
10590704881Smickey };
10690704881Smickey 
10790704881Smickey #define	TGA_TYPE_T8_01		0	/* 8bpp, 1MB */
10890704881Smickey #define	TGA_TYPE_T8_02		1	/* 8bpp, 2MB */
10990704881Smickey #define	TGA_TYPE_T8_22		2	/* 8bpp, 4MB */
11090704881Smickey #define	TGA_TYPE_T8_44		3	/* 8bpp, 8MB */
11190704881Smickey #define	TGA_TYPE_T32_04		4	/* 32bpp, 4MB */
11290704881Smickey #define	TGA_TYPE_T32_08		5	/* 32bpp, 8MB */
11390704881Smickey #define	TGA_TYPE_T32_88		6	/* 32bpp, 16MB */
114e00d3f43Smatthieu #define	TGA_TYPE_POWERSTORM_4D20	7	/* unknown */
115e00d3f43Smatthieu #define	TGA_TYPE_UNKNOWN	8	/* unknown */
11690704881Smickey 
11790704881Smickey #define	DEVICE_IS_TGA(class, id)					\
1181ecc4ecdSericj 	    (((PCI_VENDOR(id) == PCI_VENDOR_DEC &&			\
1191ecc4ecdSericj 	       PCI_PRODUCT(id) == PCI_PRODUCT_DEC_21030) ||		\
1201ecc4ecdSericj 	       PCI_PRODUCT(id) == PCI_PRODUCT_DEC_PBXGB) ? 10 : 0)
12190704881Smickey 
122c4071fd1Smillert int tga_cnattach(bus_space_tag_t, bus_space_tag_t, pci_chipset_tag_t,
123c4071fd1Smillert 		      int, int, int);
12490704881Smickey 
125c4071fd1Smillert int	tga_identify(struct tga_devconfig *);
126c4071fd1Smillert const struct tga_conf *tga_getconf(int);
12790704881Smickey 
128c4071fd1Smillert int     tga_builtin_set_cursor(struct tga_devconfig *,
129c4071fd1Smillert 	    struct wsdisplay_cursor *);
130c4071fd1Smillert int     tga_builtin_get_cursor(struct tga_devconfig *,
131c4071fd1Smillert 	    struct wsdisplay_cursor *);
132c4071fd1Smillert int     tga_builtin_set_curpos(struct tga_devconfig *,
133c4071fd1Smillert 	    struct wsdisplay_curpos *);
134c4071fd1Smillert int     tga_builtin_get_curpos(struct tga_devconfig *,
135c4071fd1Smillert 	    struct wsdisplay_curpos *);
136c4071fd1Smillert int     tga_builtin_get_curmax(struct tga_devconfig *,
137c4071fd1Smillert 	    struct wsdisplay_curpos *);
13891f3e10fSnate 
13991f3e10fSnate /* Read a TGA register */
14091f3e10fSnate #define TGARREG(dc,reg) (bus_space_read_4((dc)->dc_memt, (dc)->dc_regs, \
14191f3e10fSnate 	(reg) << 2))
14291f3e10fSnate 
14391f3e10fSnate /* Write a TGA register */
14491f3e10fSnate #define TGAWREG(dc,reg,val) bus_space_write_4((dc)->dc_memt, (dc)->dc_regs, \
14591f3e10fSnate 	(reg) << 2, (val))
14691f3e10fSnate 
14791f3e10fSnate /* Write a TGA register at an alternate aliased location */
14891f3e10fSnate #define TGAWALREG(dc,reg,alias,val) bus_space_write_4( \
14991f3e10fSnate 	(dc)->dc_memt, (dc)->dc_regs, \
15091f3e10fSnate 	((alias) * TGA_CREGS_ALIAS) + ((reg) << 2), \
15191f3e10fSnate 	(val))
15291f3e10fSnate 
15391f3e10fSnate /* Insert a write barrier */
15491f3e10fSnate #define TGAREGWB(dc,reg, nregs) bus_space_barrier( \
15591f3e10fSnate 	(dc)->dc_memt, (dc)->dc_regs, \
15691f3e10fSnate 	((reg) << 2), 4 * (nregs), BUS_SPACE_BARRIER_WRITE)
15791f3e10fSnate 
15891f3e10fSnate /* Insert a read barrier */
15991f3e10fSnate #define TGAREGRB(dc,reg, nregs) bus_space_barrier( \
16091f3e10fSnate 	(dc)->dc_memt, (dc)->dc_regs, \
16191f3e10fSnate 	((reg) << 2), 4 * (nregs), BUS_SPACE_BARRIER_READ)
16291f3e10fSnate 
16391f3e10fSnate /* Insert a read/write barrier */
16491f3e10fSnate #define TGAREGRWB(dc,reg, nregs) bus_space_barrier( \
16591f3e10fSnate 	(dc)->dc_memt, (dc)->dc_regs, \
16691f3e10fSnate 	((reg) << 2), 4 * (nregs), \
16791f3e10fSnate 	BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE)
168