1/*
2 * Copyright 2009, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _GRAPHICS_CARD_H
6#define _GRAPHICS_CARD_H
7
8
9#include <GraphicsDefs.h>
10
11
12/* #pragma mark - command constants */
13enum {
14	B_OPEN_GRAPHICS_CARD,
15	B_CLOSE_GRAPHICS_CARD,
16	B_GET_GRAPHICS_CARD_INFO,
17	B_GET_GRAPHICS_CARD_HOOKS,
18	B_SET_INDEXED_COLOR,
19	B_GET_SCREEN_SPACES,
20	B_CONFIG_GRAPHICS_CARD,
21	B_GET_REFRESH_RATES,
22	B_SET_SCREEN_GAMMA,
23
24	B_GET_INFO_FOR_CLONE_SIZE,
25	B_GET_INFO_FOR_CLONE,
26	B_SET_CLONED_GRAPHICS_CARD,
27	B_CLOSE_CLONED_GRAPHICS_CARD,
28	B_PROPOSE_FRAME_BUFFER,
29	B_SET_FRAME_BUFFER,
30	B_SET_DISPLAY_AREA,
31	B_MOVE_DISPLAY_AREA
32};
33
34/* #pragma mark - optional flags */
35enum {
36	B_CRT_CONTROL				= 0x0001,
37	B_GAMMA_CONTROL				= 0x0002,
38	B_FRAME_BUFFER_CONTROL		= 0x0004,
39	B_PARALLEL_BUFFER_ACCESS	= 0x0008,
40	B_LAME_ASS_CARD				= 0x0010
41};
42
43
44/* #pragma mark - structures */
45
46
47typedef struct {
48	int16			version;
49	int16			id;
50	void*			frame_buffer;
51	char			rgba_order[4];
52	int16			flags;
53	int16			bits_per_pixel;
54	int16			bytes_per_row;
55	int16			width;
56	int16			height;
57} graphics_card_info;
58
59
60typedef struct {
61	int32			index;
62	rgb_color		color;
63} indexed_color;
64
65
66typedef struct {
67	uint32			space;
68	float			refresh_rate;
69	uchar			h_position;
70	uchar			v_position;
71	uchar			h_size;
72	uchar			v_size;
73} graphics_card_config;
74
75
76typedef struct {
77	float			min;
78	float			max;
79	float			current;
80} refresh_rate_info;
81
82
83typedef struct {
84	void*			screen_base;
85	void*			io_base;
86	uint32			vendor_id;
87	uint32			device_id;
88	uint32			_reserved1_;
89	uint32			_reserved2_;
90} graphics_card_spec;
91
92
93typedef struct {
94	int16			x1;
95	int16			y1;
96	int16			x2;
97	int16			y2;
98	rgb_color		color;
99} rgb_color_line;
100
101
102typedef struct {
103	int16			x1;
104	int16			y1;
105	int16			x2;
106	int16			y2;
107	uchar			color;
108} indexed_color_line;
109
110
111typedef struct {
112    int16			bits_per_pixel;
113	int16			bytes_per_row;
114	int16			width;
115	int16			height;
116    int16			display_width;
117	int16			display_height;
118	int16			display_x;
119	int16			display_y;
120} frame_buffer_info;
121
122
123typedef struct {
124	uchar			red[256];
125	uchar			green[256];
126	uchar			blue[256];
127} screen_gamma;
128
129
130/* #pragma mark - hook function */
131
132
133typedef void (*graphics_card_hook) ();
134
135#define B_GRAPHICS_HOOK_COUNT	48
136
137
138#ifdef __cplusplus
139extern "C" {
140#endif
141
142int32 control_graphics_card(uint32, void*);
143
144#ifdef __cplusplus
145}
146#endif
147
148
149/* #pragma mark - debugging functions */
150
151
152#ifdef __cplusplus
153extern "C" {
154#endif
155
156void dprintf(const char *format, ...);
157bool set_dprintf_enabled(bool);
158	/* returns old enable flag */
159
160#ifdef __cplusplus
161}
162#endif
163
164
165/* #pragma mark - deprecated */
166#define B_HOOK_COUNT  B_GRAPHICS_HOOK_COUNT
167
168
169#endif /* _GRAPHICS_CARD_H */
170