summaryrefslogtreecommitdiff
path: root/sys/dev/ic/stivar.h
blob: d581d51bd6d28ed7e8a4a6ef3deaad767ffc6652 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*	$OpenBSD: stivar.h,v 1.25 2015/04/05 23:25:57 miod Exp $	*/

/*
 * Copyright (c) 2000-2003 Michael Shalayeff
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _IC_STIVAR_H_
#define _IC_STIVAR_H_

struct sti_softc;
struct sti_screen;

/*
 * STI ROM information - one per device
 */
struct sti_rom {
	struct sti_softc	*rom_softc;	/* backpointer to device */
	int			 rom_devtype;

	bus_space_tag_t		 iot, memt;	/* XXX iot unused */
	bus_space_handle_t	 romh;
	bus_space_handle_t	 regh[STI_REGION_MAX];
	bus_addr_t		*bases;

	struct sti_dd		 rom_dd;	/* in word format */
	vaddr_t			 rom_code;

	/*
	 * ROM-provided function pointers
	 */
	sti_init_t		 init;
	sti_mgmt_t		 mgmt;
	sti_unpmv_t		 unpmv;
	sti_blkmv_t		 blkmv;
	sti_test_t		 test;
	sti_exhdl_t		 exhdl;
	sti_inqconf_t		 inqconf;
	sti_scment_t		 scment;
	sti_dmac_t		 dmac;
	sti_flowc_t		 flowc;
	sti_utiming_t		 utiming;
	sti_pmgr_t		 pmgr;
	sti_util_t		 util;
};

/*
 * STI screen information - one per head
 */
struct sti_screen {
	struct sti_rom		*scr_rom;

#ifdef notyet
	u_int			 scr_flags;
#endif

	int			 scr_bpp;

	struct sti_font		 scr_curfont;
	struct sti_cfg		 scr_cfg;
	struct sti_ecfg		 scr_ecfg;
	u_int8_t		 name[STI_DEVNAME_LEN];

	void			*scr_romfont;	/* ROM font copy in memory... */
	u_int			 scr_fontmaxcol;/* ...or in off-screen area */
	u_int			 scr_fontbase;

	u_int8_t		 scr_rcmap[STI_NCMAP],
				 scr_gcmap[STI_NCMAP],
				 scr_bcmap[STI_NCMAP];

	u_int16_t		 fbheight, fbwidth;
	u_int16_t		 oheight, owidth;	/* offscreen size */
	bus_addr_t		 fbaddr;
	bus_size_t		 fblen;

	/* wsdisplay information */
	int			 scr_nscreens;
	u_int			 scr_wsmode;
	struct	wsscreen_descr	 scr_wsd;
	struct	wsscreen_descr	*scr_scrlist[1];
	struct	wsscreen_list	 scr_screenlist;

	/*
	 * Board-specific function data and pointers
	 */
	void			(*setupfb)(struct sti_screen *);
	int			(*putcmap)(struct sti_screen *, u_int, u_int);

	uint32_t		reg10_value;
	uint32_t		reg12_value;
	bus_addr_t		cmap_finish_register;
};

/*
 * STI device state
 */
struct sti_softc {
	struct device		 sc_dev;
#ifdef notyet
	void			*sc_ih;
#endif

	u_int			 sc_flags;
#define	STI_CONSOLE	0x0001	/* first head is console... */
#define	STI_ATTACHED	0x0002	/* ... and wsdisplay_cnattach() has been done */
#define	STI_ROM_ENABLED	0x0004	/* PCI ROM is enabled */

	bus_addr_t		 bases[STI_REGION_MAX];
	struct sti_rom		*sc_rom;
	struct sti_screen	*sc_scr;

	/* optional, required for PCI */
	void			(*sc_enable_rom)(struct sti_softc *);
	void			(*sc_disable_rom)(struct sti_softc *);
};

int	sti_attach_common(struct sti_softc *, bus_space_tag_t, bus_space_tag_t,
	    bus_space_handle_t, u_int);
int	sti_cnattach(struct sti_rom *, struct sti_screen *, bus_space_tag_t,
	    bus_addr_t *, u_int);
void	sti_describe(struct sti_softc *);
void	sti_end_attach(void *);
u_int	sti_rom_size(bus_space_tag_t, bus_space_handle_t);

#endif /* _IC_STIVAR_H_ */