summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/pc386/include/fb_vesa.h
blob: 5638b50ca24041dfb42d483326a89436faf193ba (plain) (blame)
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
/**
 * @file fb_vesa.h
 *
 * @ingroup i386_pc386
 *
 * @brief Definitioins for vesa based framebuffer drivers.
 */

/*
 * Headers specific for framebuffer drivers utilizing VESA VBE.
 *
 * Copyright (C) 2014  Jan Doležal (dolezj21@fel.cvut.cz)
 *                     CTU in Prague.
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.org/license/LICENSE.
 */

#include <bsp/vbe3.h>
#include <edid.h>

#ifndef _FB_VESA_H
#define _FB_VESA_H

#ifndef ASM /* ASM */

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


/* ----- Prototypes ----- */

/**
 * Returns information about graphic's controller in the infoBlock structure.
 *
 * @param infoBlock pointer to the struct to be filled with
                    controller information
 * @param queriedVBEVersion if >0x200 then video bios is asked to fill in
 *                          parameters which appeared with second version
 *                          of VBE.
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBEControllerInformation (
    struct VBE_VbeInfoBlock *infoBlock,
    uint16_t queriedVBEVersion
);

/**
 * Fills structure infoBlock with informations about selected mode in
 * modeNumber variable.
 *
 * @param infoBlock pointer to the struct to be filled with mode information
 * @param modeNumber detailes of this mode to be filled
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBEModeInformation (
    struct VBE_ModeInfoBlock *infoBlock,
    uint16_t modeNumber
);

/**
 * Sets graphics mode selected. If mode has refreshRateCtrl bit set, than the
 * infoBlock must be filled accordingly.
 *
 * @param modeNumber number of mode to be set
 * @param infoBlock pointer to struct containing refresh rate control info
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBESetMode (
    uint16_t modeNumber,
    struct VBE_CRTCInfoBlock *infoBlock
);

/**
 * Get currently set mode number.
 *
 * @param modeNumber variable to be filled with current mode number
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBECurrentMode (
    uint16_t *modeNumber
);

/**
 * Gets information about display data channel implemented in the
 * graphic's controller.
 *
 * @param controllerUnitNumber
 * @param secondsToTransferEDIDBlock approximate time to transfer one EDID block
 *                                   rounded up to seconds
 * @param DDCLevelSupported after call contains DDC version supported and
 *                          screen blanking state during transfer
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBEReportDDCCapabilities (
    uint16_t controllerUnitNumber,
    uint8_t *secondsToTransferEDIDBlock,
    uint8_t *DDCLevelSupported
);

/**
 * Reads selected EDID block from display attached to controller's interface.
 *
 * @param controllerUnitNumber
 * @param EDIDBlockNumber block no. to be read from the display
 * @param buffer place to store block fetched from the display
 * @retval  register ax content as defined in VBE RETURN STATUS paragraph
 *          -1 error calling graphical bios
 */
uint32_t VBEReadEDID (
    uint16_t controllerUnitNumber,
    uint16_t EDIDBlockNumber,
    struct edid1 *buffer
);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* ASM */

#endif /* _FB_VESA_H */