1/*****************************************************************************\
2 * Tseng Labs ET6000, ET6100 and ET6300 graphics driver for BeOS 5.
3 * Copyright (c) 2003-2004, Evgeniy Vladimirovich Bobkov.
4\*****************************************************************************/
5
6#include "GlobalData.h"
7#include "generic.h"
8
9
10/*****************************************************************************/
11/*
12 * Return the current display mode.  The only time you
13 * might return an error is if a mode hasn't been set.
14 */
15status_t GET_DISPLAY_MODE(display_mode *current_mode) {
16    /* easy for us, we return the last mode we set */
17    *current_mode = si->dm;
18    return B_OK;
19}
20/*****************************************************************************/
21/*
22 * Return the frame buffer configuration information.
23 */
24status_t GET_FRAME_BUFFER_CONFIG(frame_buffer_config *afb) {
25    /* easy again, as the last mode set stored the info in a convienient form */
26    *afb = si->fbc;
27    return B_OK;
28}
29/*****************************************************************************/
30/*
31 * Return the maximum and minium pixel clock limits for the specified mode.
32 * Note that we're not making any guarantees about the ability of the
33 * attached display to handle pixel clocks within the limits we return.
34 * A future monitor capablilities database will post-process this
35 * information.
36 */
37status_t GET_PIXEL_CLOCK_LIMITS(display_mode *dm, uint32 *low, uint32 *high) {
38uint32 clockLimit;
39uint32 totalPix = (uint32)dm->timing.h_total * (uint32)dm->timing.v_total;
40
41    /* max pixel clock is pixel depth dependant */
42    switch (dm->space & ~0x3000) {
43 	case B_RGB24: clockLimit = si->pixelClockMax24; break;
44	case B_RGB15:
45	case B_RGB16: clockLimit = si->pixelClockMax16; break;
46	default:
47	    clockLimit = 0;
48    }
49
50    /* lower limit of about 48Hz vertical refresh */
51    *low = (totalPix * 48L) / 1000L;
52    if (*low > clockLimit) return B_ERROR;
53    *high = clockLimit;
54
55    return B_OK;
56}
57/*****************************************************************************/
58