1 | /* $NetBSD: genfbvar.h,v 1.24 2014/07/24 21:35:13 riastradh Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c) 2007 Michael Lorenz |
5 | * All rights reserved. |
6 | * |
7 | * Redistribution and use in source and binary forms, with or without |
8 | * modification, are permitted provided that the following conditions |
9 | * are met: |
10 | * 1. Redistributions of source code must retain the above copyright |
11 | * notice, this list of conditions and the following disclaimer. |
12 | * 2. Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the |
14 | * documentation and/or other materials provided with the distribution. |
15 | * |
16 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
17 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
18 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
19 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
20 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 | * POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
28 | |
29 | #ifndef GENFBVAR_H |
30 | #define GENFBVAR_H |
31 | |
32 | #ifdef _KERNEL_OPT |
33 | #include "opt_splash.h" |
34 | #endif |
35 | |
36 | #include <sys/param.h> |
37 | #include <sys/buf.h> |
38 | #include <sys/conf.h> |
39 | #include <sys/device.h> |
40 | |
41 | #include <sys/bus.h> |
42 | |
43 | #include <dev/wscons/wsconsio.h> |
44 | #include <dev/wscons/wsdisplayvar.h> |
45 | #include <dev/rasops/rasops.h> |
46 | |
47 | #include <dev/wscons/wsdisplay_vconsvar.h> |
48 | #ifdef _KERNEL_OPT |
49 | #include "opt_genfb.h" |
50 | #endif |
51 | |
52 | #ifdef SPLASHSCREEN |
53 | #define GENFB_DISABLE_TEXT |
54 | #include <dev/splash/splash.h> |
55 | #endif |
56 | |
57 | struct genfb_softc; |
58 | |
59 | struct genfb_ops { |
60 | int (*genfb_ioctl)(void *, void *, u_long, void *, int, struct lwp *); |
61 | paddr_t (*genfb_mmap)(void *, void *, off_t, int); |
62 | int (*genfb_borrow)(void *, bus_addr_t, bus_space_handle_t *); |
63 | int (*genfb_enable_polling)(void *); |
64 | int (*genfb_disable_polling)(void *); |
65 | }; |
66 | |
67 | struct genfb_colormap_callback { |
68 | void *gcc_cookie; |
69 | void (*gcc_set_mapreg)(void *, int, int, int, int); |
70 | }; |
71 | |
72 | /* |
73 | * Integer parameter provider. Each callback shall return 0 on success, |
74 | * and an error(2) number on failure. The gpc_upd_parameter callback is |
75 | * optional (i.e. it can be NULL). |
76 | * |
77 | * This structure is used for backlight and brightness control. The |
78 | * expected parameter range is: |
79 | * |
80 | * [0, 1] for backlight |
81 | * [0, 255] for brightness |
82 | */ |
83 | struct genfb_parameter_callback { |
84 | void *gpc_cookie; |
85 | int (*gpc_get_parameter)(void *, int *); |
86 | int (*gpc_set_parameter)(void *, int); |
87 | int (*gpc_upd_parameter)(void *, int); |
88 | }; |
89 | |
90 | struct genfb_pmf_callback { |
91 | bool (*gpc_suspend)(device_t, const pmf_qual_t *); |
92 | bool (*gpc_resume)(device_t, const pmf_qual_t *); |
93 | }; |
94 | |
95 | struct genfb_mode_callback { |
96 | bool (*gmc_setmode)(struct genfb_softc *, int); |
97 | }; |
98 | |
99 | struct genfb_softc { |
100 | device_t sc_dev; |
101 | struct vcons_data vd; |
102 | struct genfb_ops sc_ops; |
103 | struct vcons_screen sc_console_screen; |
104 | struct wsscreen_descr sc_defaultscreen_descr; |
105 | const struct wsscreen_descr *sc_screens[1]; |
106 | struct wsscreen_list sc_screenlist; |
107 | struct genfb_colormap_callback *sc_cmcb; |
108 | struct genfb_pmf_callback *sc_pmfcb; |
109 | struct genfb_parameter_callback *sc_backlight; |
110 | struct genfb_parameter_callback *sc_brightness; |
111 | struct genfb_mode_callback *sc_modecb; |
112 | int sc_backlight_level, sc_backlight_on; |
113 | void *sc_fbaddr; /* kva */ |
114 | #ifdef GENFB_SHADOWFB |
115 | void *sc_shadowfb; |
116 | #endif |
117 | bus_addr_t sc_fboffset; /* bus address */ |
118 | int sc_width, sc_height, sc_stride, sc_depth; |
119 | size_t sc_fbsize; |
120 | int sc_mode; |
121 | u_char sc_cmap_red[256]; |
122 | u_char sc_cmap_green[256]; |
123 | u_char sc_cmap_blue[256]; |
124 | bool sc_want_clear; |
125 | #ifdef SPLASHSCREEN |
126 | struct splash_info sc_splash; |
127 | #endif |
128 | struct wsdisplay_accessops sc_accessops; |
129 | }; |
130 | |
131 | void genfb_cnattach(void); |
132 | void genfb_disable(void); |
133 | int genfb_is_console(void); |
134 | int genfb_is_enabled(void); |
135 | void genfb_init(struct genfb_softc *); |
136 | int genfb_attach(struct genfb_softc *, struct genfb_ops *); |
137 | int genfb_borrow(bus_addr_t, bus_space_handle_t *); |
138 | void genfb_restore_palette(struct genfb_softc *); |
139 | void genfb_enable_polling(device_t); |
140 | void genfb_disable_polling(device_t); |
141 | |
142 | #endif /* GENFBVAR_H */ |
143 | |