2 Copyright 2007-2008 Haiku, Inc. All rights reserved.
3 Distributed under the terms of the MIT license.
9 #ifndef DRIVERINTERFACE_H
10 #define DRIVERINTERFACE_H
13 #include <Accelerant.h>
14 #include <GraphicsDefs.h>
19 // This file contains info that is shared between the kernel driver and the
20 // accelerant, and info that is shared among the source files of the accelerant.
23 #define ENABLE_DEBUG_TRACE // if defined, turns on debug output to syslog
30 status_t
Init(const char* name
)
33 sem
= create_sem(0, name
);
34 return sem
< 0 ? sem
: B_OK
;
39 if (atomic_add(&count
, 1) > 0)
40 return acquire_sem(sem
);
46 if (atomic_add(&count
, -1) > 1)
47 return release_sem(sem
);
51 void Delete() { delete_sem(sem
); }
55 #define S3_PRIVATE_DATA_MAGIC 0x4521 // a private driver rev, of sorts
59 S3_GET_PRIVATE_DATA
= B_DEVICE_OP_CODES_END
+ 1,
68 // Chip type numbers. These are used to group the chips into related
69 // groups. See table S3_ChipTable in driver.c
73 S3_TRIO64_VP
, // Trio64V+ has same ID as Trio64 but different revision number
97 #define S3_TRIO64_FAMILY(chip) (chip < Trio64ChipsEnd)
98 #define S3_VIRGE_FAMILY(chip) (chip > Trio64ChipsEnd && chip < VirgeChipsEnd)
99 #define S3_SAVAGE_FAMILY(chip) (chip > VirgeChipsEnd)
101 #define S3_VIRGE_GX2_SERIES(chip) (chip == S3_VIRGE_GX2 || chip == S3_TRIO_3D_2X)
102 #define S3_VIRGE_MX_SERIES(chip) (chip == S3_VIRGE_MX || chip == S3_VIRGE_MXP)
104 #define S3_SAVAGE_3D_SERIES(chip) ((chip == S3_SAVAGE_3D) || (chip == S3_SAVAGE_MX))
105 #define S3_SAVAGE4_SERIES(chip) ((chip == S3_SAVAGE4) \
106 || (chip == S3_PROSAVAGE) \
107 || (chip == S3_TWISTER) \
108 || (chip == S3_PROSAVAGE_DDR))
109 #define S3_SAVAGE_MOBILE_SERIES(chip) ((chip == S3_SAVAGE_MX) \
110 || (chip == S3_SUPERSAVAGE))
111 #define S3_MOBILE_TWISTER_SERIES(chip) ((chip == S3_TWISTER) \
112 || (chip == S3_PROSAVAGE_DDR))
118 MT_LCD
, // laptop LCD display
119 MT_DFP
// DVI display
124 struct DisplayModeEx
: display_mode
{
125 uint32 bpp
; // bits/pixel
126 uint32 bytesPerRow
; // actual number of bytes in one line/row
132 uint16 vendorID
; // PCI vendor ID, from pci_info
133 uint16 deviceID
; // PCI device ID, from pci_info
134 uint8 revision
; // PCI device revsion, from pci_info
135 uint32 chipType
; // indicates group in which chip belongs (a group has similar functionality)
136 char chipName
[32]; // user recognizable name of chip
138 bool bAccelerantInUse
; // true = accelerant has been initialized
139 bool bInterruptAssigned
; // card has a useable interrupt assigned to it
141 bool bDisableHdwCursor
; // true = disable hardware cursor & use software cursor
142 bool bDisableAccelDraw
; // true = disable accelerated drawing
144 sem_id vertBlankSem
; // vertical blank semaphore; if < 0, there is no semaphore
147 area_id regsArea
; // area_id for the memory mapped registers. It will
148 // be cloned into accelerant's address space.
149 area_id videoMemArea
; // video memory area_id. The addresses are shared with all teams.
150 void* videoMemAddr
; // video memory addr as viewed from virtual memory
151 void* videoMemPCI
; // video memory addr as viewed from the PCI bus (for DMA)
152 uint32 videoMemSize
; // video memory size in bytes.
154 uint32 cursorOffset
; // offset of cursor in video memory
155 uint32 frameBufferOffset
; // offset of frame buffer in video memory
156 uint32 maxFrameBufferSize
; // max available video memory for frame buffer
158 // Color spaces supported by current video chip/driver.
159 color_space colorSpaces
[6];
160 uint32 colorSpaceCount
; // number of color spaces in array colorSpaces
162 // List of screen modes.
163 area_id modeArea
; // area containing list of display modes the driver supports
164 uint32 modeCount
; // number of display modes in the list
166 uint16 cursorHotX
; // Cursor hot spot. Top left corner of the cursor
167 uint16 cursorHotY
; // is 0,0
169 // Current display mode configuration, and other parameters related to
170 // current display mode.
171 DisplayModeEx displayMode
; // current display mode configuration
172 int32 commonCmd
; // flags common to drawing commands of current display mode
175 bool bHaveEDID
; // true = EDID info from device is in edidInfo
177 Benaphore engineLock
; // for serializing access to the acceleration engine
181 MonitorType displayType
;
183 uint16 panelX
; // laptop LCD width
184 uint16 panelY
; // laptop LCD height
186 // Command Overflow Buffer (COB) parameters for Savage chips.
187 uint32 cobSizeIndex
; // size index
188 uint32 cobOffset
; // offset in video memory
190 uint32 globalBitmapDesc
; // Global Bitmap Descriptor for BCI
194 // Set some boolean condition (like enabling or disabling interrupts)
195 struct S3SetBoolState
{
196 uint32 magic
; // magic number
197 bool bEnable
; // state to set
201 // Retrieve the area_id of the kernel/accelerant shared info
202 struct S3GetPrivateData
{
203 uint32 magic
; // magic number
204 area_id sharedInfoArea
; // ID of area containing shared information
209 uint32 magic
; // magic number
210 edid1_raw rawEdid
; // raw EDID info to obtain
215 uint32 magic
; // magic number
216 uint32 offset
; // offset of PIO register to read/write
217 uint32 size
; // number of bytes to transfer
218 uint32 value
; // value to write or value that was read
222 #endif // DRIVERINTERFACE_H