forked from Imagelibrary/rtems
i386/pc386: cammelCase (struct and function names) to underscores, typedefed structs, break >80 chars lines, removed newlines at EOFs
fb_vesa_rm.c: removed inline from functions declared in fb_vesa.h
removed unnecessary printks in the end of patch
edid.h, vbe3.h: switched from custom *PACKED_ATTRIBUTE at the structs to the
RTEMS_COMPILER_PACKED_ATTRIBUTE for easier maintainability
of doxygen
This commit is contained in:
committed by
Gedare Bloom
parent
adc1dbeb39
commit
d78eac64a8
@@ -59,14 +59,14 @@ static pthread_mutex_t vesa_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static struct fb_var_screeninfo fb_var;
|
||||
static struct fb_fix_screeninfo fb_fix;
|
||||
|
||||
static uint16_t vbe_usedMode;
|
||||
static uint16_t vbe_used_mode;
|
||||
|
||||
inline uint32_t VBEControllerInformation( struct VBE_VbeInfoBlock *infoBlock,
|
||||
uint16_t queriedVBEVersion)
|
||||
uint32_t VBE_controller_information( VBE_vbe_info_block *info_block,
|
||||
uint16_t queried_VBE_Version)
|
||||
{
|
||||
uint16_t size;
|
||||
struct VBE_VbeInfoBlock *VBE_buffer =
|
||||
(struct VBE_VbeInfoBlock *)i386_get_default_rm_buffer(&size);
|
||||
VBE_vbe_info_block *VBE_buffer =
|
||||
(VBE_vbe_info_block *)i386_get_default_rm_buffer(&size);
|
||||
i386_realmode_interrupt_registers parret;
|
||||
parret.reg_eax = VBE_RetVBEConInf;
|
||||
uint16_t seg, off;
|
||||
@@ -74,7 +74,7 @@ inline uint32_t VBEControllerInformation( struct VBE_VbeInfoBlock *infoBlock,
|
||||
parret.reg_edi = (uint32_t)off;
|
||||
parret.reg_es = seg;
|
||||
/* indicate to graphic's bios that VBE2.0 extended information is desired */
|
||||
if (queriedVBEVersion >= 0x200)
|
||||
if (queried_VBE_Version >= 0x200)
|
||||
{
|
||||
strncpy(
|
||||
(char *)&VBE_buffer->VbeSignature,
|
||||
@@ -87,20 +87,20 @@ inline uint32_t VBEControllerInformation( struct VBE_VbeInfoBlock *infoBlock,
|
||||
if ((parret.reg_eax & 0xFFFF) ==
|
||||
(VBE_callSuccessful<<8 | VBE_functionSupported))
|
||||
{
|
||||
*infoBlock = *VBE_buffer;
|
||||
*info_block = *VBE_buffer;
|
||||
}
|
||||
return (parret.reg_eax & 0xFFFF);
|
||||
}
|
||||
|
||||
inline uint32_t VBEModeInformation( struct VBE_ModeInfoBlock *infoBlock,
|
||||
uint16_t modeNumber)
|
||||
uint32_t VBE_mode_information( VBE_mode_info_block *info_block,
|
||||
uint16_t mode_number)
|
||||
{
|
||||
uint16_t size;
|
||||
struct VBE_ModeInfoBlock *VBE_buffer =
|
||||
(struct VBE_ModeInfoBlock *)i386_get_default_rm_buffer(&size);
|
||||
VBE_mode_info_block *VBE_buffer =
|
||||
(VBE_mode_info_block *)i386_get_default_rm_buffer(&size);
|
||||
i386_realmode_interrupt_registers parret;
|
||||
parret.reg_eax = VBE_RetVBEModInf;
|
||||
parret.reg_ecx = modeNumber;
|
||||
parret.reg_ecx = mode_number;
|
||||
uint16_t seg, off;
|
||||
i386_Physical_to_real(VBE_buffer, &seg, &off);
|
||||
parret.reg_edi = (uint32_t)off;
|
||||
@@ -110,22 +110,22 @@ inline uint32_t VBEModeInformation( struct VBE_ModeInfoBlock *infoBlock,
|
||||
if ((parret.reg_eax & 0xFFFF) ==
|
||||
(VBE_callSuccessful<<8 | VBE_functionSupported))
|
||||
{
|
||||
*infoBlock = *VBE_buffer;
|
||||
*info_block = *VBE_buffer;
|
||||
}
|
||||
return (parret.reg_eax & 0xFFFF);
|
||||
}
|
||||
|
||||
inline uint32_t VBESetMode( uint16_t modeNumber,
|
||||
struct VBE_CRTCInfoBlock *infoBlock)
|
||||
uint32_t VBE_set_mode( uint16_t mode_number,
|
||||
VBE_CRTC_info_block *info_block)
|
||||
{
|
||||
uint16_t size;
|
||||
struct VBE_CRTCInfoBlock *VBE_buffer =
|
||||
(struct VBE_CRTCInfoBlock *)i386_get_default_rm_buffer(&size);
|
||||
VBE_CRTC_info_block *VBE_buffer =
|
||||
(VBE_CRTC_info_block *)i386_get_default_rm_buffer(&size);
|
||||
i386_realmode_interrupt_registers parret;
|
||||
/* copy CRTC */
|
||||
*VBE_buffer = *infoBlock;
|
||||
*VBE_buffer = *info_block;
|
||||
parret.reg_eax = VBE_SetVBEMod;
|
||||
parret.reg_ebx = modeNumber;
|
||||
parret.reg_ebx = mode_number;
|
||||
uint16_t seg, off;
|
||||
i386_Physical_to_real(VBE_buffer, &seg, &off);
|
||||
parret.reg_edi = (uint32_t)off;
|
||||
@@ -135,44 +135,44 @@ inline uint32_t VBESetMode( uint16_t modeNumber,
|
||||
return (parret.reg_eax & 0xFFFF);
|
||||
}
|
||||
|
||||
inline uint32_t VBECurrentMode(uint16_t *modeNumber)
|
||||
uint32_t VBE_current_mode(uint16_t *mode_number)
|
||||
{
|
||||
i386_realmode_interrupt_registers parret;
|
||||
parret.reg_eax = VBE_RetCurVBEMod;
|
||||
if (i386_real_interrupt_call(INTERRUPT_NO_VIDEO_SERVICES, &parret) == 0)
|
||||
return -1;
|
||||
*modeNumber = (uint16_t)parret.reg_ebx;
|
||||
*mode_number = (uint16_t)parret.reg_ebx;
|
||||
return (parret.reg_eax & 0xFFFF);
|
||||
}
|
||||
|
||||
inline uint32_t VBEReportDDCCapabilities( uint16_t controllerUnitNumber,
|
||||
uint8_t *secondsToTransferEDIDBlock,
|
||||
uint8_t *DDCLevelSupported)
|
||||
uint32_t VBE_report_DDC_capabilities(uint16_t controller_unit_number,
|
||||
uint8_t *seconds_to_transfer_EDID_block,
|
||||
uint8_t *DDC_level_supported)
|
||||
{
|
||||
i386_realmode_interrupt_registers parret;
|
||||
parret.reg_eax = VBE_DisDatCha;
|
||||
parret.reg_ebx = VBEDDC_Capabilities;
|
||||
parret.reg_ecx = controllerUnitNumber;
|
||||
parret.reg_ecx = controller_unit_number;
|
||||
parret.reg_edi = 0;
|
||||
parret.reg_es = 0;
|
||||
if (i386_real_interrupt_call(INTERRUPT_NO_VIDEO_SERVICES, &parret) == 0)
|
||||
return -1;
|
||||
*secondsToTransferEDIDBlock = (uint8_t)parret.reg_ebx >> 8;
|
||||
*DDCLevelSupported = (uint8_t)parret.reg_ebx;
|
||||
*seconds_to_transfer_EDID_block = (uint8_t)parret.reg_ebx >> 8;
|
||||
*DDC_level_supported = (uint8_t)parret.reg_ebx;
|
||||
return (parret.reg_eax & 0xFFFF);
|
||||
}
|
||||
|
||||
inline uint32_t VBEReadEDID(uint16_t controllerUnitNumber,
|
||||
uint16_t EDIDBlockNumber,
|
||||
struct edid1 *buffer)
|
||||
uint32_t VBE_read_EDID(uint16_t controller_unit_number,
|
||||
uint16_t EDID_block_number,
|
||||
EDID_edid1 *buffer)
|
||||
{
|
||||
uint16_t size;
|
||||
struct edid1 *VBE_buffer = (struct edid1 *)i386_get_default_rm_buffer(&size);
|
||||
EDID_edid1 *VBE_buffer = (EDID_edid1*)i386_get_default_rm_buffer(&size);
|
||||
i386_realmode_interrupt_registers parret;
|
||||
parret.reg_eax = VBE_DisDatCha;
|
||||
parret.reg_ebx = VBEDDC_ReadEDID;
|
||||
parret.reg_ecx = controllerUnitNumber;
|
||||
parret.reg_edx = EDIDBlockNumber;
|
||||
parret.reg_ecx = controller_unit_number;
|
||||
parret.reg_edx = EDID_block_number;
|
||||
uint16_t seg, off;
|
||||
i386_Physical_to_real(VBE_buffer, &seg, &off);
|
||||
parret.reg_edi = (uint32_t)off;
|
||||
@@ -188,11 +188,11 @@ inline uint32_t VBEReadEDID(uint16_t controllerUnitNumber,
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
uint16_t modeNumber;
|
||||
uint16_t mode_number;
|
||||
uint16_t resX;
|
||||
uint16_t resY;
|
||||
uint8_t bpp;
|
||||
} modeParams;
|
||||
} Mode_params;
|
||||
|
||||
/* finds mode in 'modeList' of 'listLength' length according to resolution
|
||||
given in 'searchedResolution'. If bpp is given in that struct as well
|
||||
@@ -200,22 +200,22 @@ typedef struct {
|
||||
has to be zero. Mode number found is returned and also filled into
|
||||
'searchedResolution'. bpp is also filled into 'searchedResolution' if it
|
||||
was 0 before call. */
|
||||
static uint16_t findModeByResolution( modeParams *modeList,
|
||||
uint8_t listLength,
|
||||
modeParams *searchedResolution)
|
||||
static uint16_t find_mode_by_resolution(Mode_params *mode_list,
|
||||
uint8_t list_length,
|
||||
Mode_params *searched_resolution)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
while (i < listLength)
|
||||
while (i < list_length)
|
||||
{
|
||||
if (searchedResolution->resX == modeList[i].resX &&
|
||||
searchedResolution->resY == modeList[i].resY)
|
||||
if (searched_resolution->resX == mode_list[i].resX &&
|
||||
searched_resolution->resY == mode_list[i].resY)
|
||||
{
|
||||
if (searchedResolution->bpp==0 ||
|
||||
searchedResolution->bpp==modeList[i].bpp)
|
||||
if (searched_resolution->bpp==0 ||
|
||||
searched_resolution->bpp==mode_list[i].bpp)
|
||||
{
|
||||
searchedResolution->bpp = modeList[i].bpp;
|
||||
searchedResolution->modeNumber = modeList[i].modeNumber;
|
||||
return modeList[i].modeNumber;
|
||||
searched_resolution->bpp = mode_list[i].bpp;
|
||||
searched_resolution->mode_number = mode_list[i].mode_number;
|
||||
return mode_list[i].mode_number;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
@@ -232,33 +232,33 @@ static uint16_t findModeByResolution( modeParams *modeList,
|
||||
* @retval video mode number to be set
|
||||
* -1 on parsing error or when no suitable mode found
|
||||
*/
|
||||
static uint16_t findModeUsingCmdline( modeParams *modeList,
|
||||
uint8_t listLength)
|
||||
static uint16_t find_mode_using_cmdline(Mode_params *mode_list,
|
||||
uint8_t list_length)
|
||||
{
|
||||
const char* opt;
|
||||
modeParams cmdlineMode;
|
||||
Mode_params cmdline_mode;
|
||||
char* endptr;
|
||||
cmdlineMode.bpp = 0;
|
||||
cmdline_mode.bpp = 0;
|
||||
opt = bsp_cmdline_arg("--video=");
|
||||
if (opt)
|
||||
{
|
||||
opt += sizeof("--video=")-1;
|
||||
cmdlineMode.resX = strtol(opt, &endptr, 10);
|
||||
cmdline_mode.resX = strtol(opt, &endptr, 10);
|
||||
if (*endptr != 'x')
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
opt = endptr+1;
|
||||
cmdlineMode.resY = strtol(opt, &endptr, 10);
|
||||
cmdline_mode.resY = strtol(opt, &endptr, 10);
|
||||
switch (*endptr)
|
||||
{
|
||||
case '-':
|
||||
opt = endptr+1;
|
||||
if (strlen(opt) <= 2)
|
||||
cmdlineMode.bpp = strtol(opt, &endptr, 10);
|
||||
cmdline_mode.bpp = strtol(opt, &endptr, 10);
|
||||
else
|
||||
{
|
||||
cmdlineMode.bpp = strtol(opt, &endptr, 10);
|
||||
cmdline_mode.bpp = strtol(opt, &endptr, 10);
|
||||
if (*endptr != ' ')
|
||||
{
|
||||
return -1;
|
||||
@@ -271,9 +271,9 @@ static uint16_t findModeUsingCmdline( modeParams *modeList,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (findModeByResolution(modeList, listLength, &cmdlineMode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &cmdline_mode) !=
|
||||
(uint16_t)-1)
|
||||
return cmdlineMode.modeNumber;
|
||||
return cmdline_mode.mode_number;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -284,17 +284,17 @@ static uint16_t findModeUsingCmdline( modeParams *modeList,
|
||||
* @retval video mode number to be set
|
||||
* -1 on parsing error or when no suitable mode found
|
||||
*/
|
||||
static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
uint8_t listLength)
|
||||
static uint16_t find_mode_using_EDID( Mode_params *mode_list,
|
||||
uint8_t list_length)
|
||||
{
|
||||
struct edid1 edid;
|
||||
EDID_edid1 edid;
|
||||
uint8_t checksum, iterator;
|
||||
uint8_t index, j;
|
||||
modeParams EDIDmode;
|
||||
Mode_params EDIDmode;
|
||||
checksum = 0;
|
||||
iterator = 0;
|
||||
EDIDmode.bpp = 0;
|
||||
if (VBEReadEDID(0, 0, &edid) !=
|
||||
if (VBE_read_EDID(0, 0, &edid) !=
|
||||
(VBE_callSuccessful<<8 | VBE_functionSupported))
|
||||
{
|
||||
printk(FB_VESA_NAME " Function 15h (read EDID) not supported.\n");
|
||||
@@ -303,7 +303,7 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
/* version of EDID structure */
|
||||
if (edid.Version == 1)
|
||||
{ /* EDID version 1 */
|
||||
while (iterator < sizeof(struct edid1))
|
||||
while (iterator < sizeof(EDID_edid1))
|
||||
{
|
||||
checksum += *((uint8_t *)&edid+iterator);
|
||||
iterator++;
|
||||
@@ -325,11 +325,11 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
EDIDmode.resX = DTD_HorizontalActive(&edid.dtd_md[0].dtd);
|
||||
EDIDmode.resY = DTD_VerticalActive(&edid.dtd_md[0].dtd);
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
EDIDmode.resX = DTD_horizontal_active(&edid.dtd_md[0].dtd);
|
||||
EDIDmode.resY = DTD_vertical_active(&edid.dtd_md[0].dtd);
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
|
||||
index++;
|
||||
}
|
||||
@@ -350,13 +350,15 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
edid.dtd_md[index].md.Flag1 == 0 &&
|
||||
edid.dtd_md[index].md.Flag2 == 0)
|
||||
{
|
||||
struct CVTTimingCodes3B *cvt = (struct CVTTimingCodes3B *)
|
||||
EDID_CVT_timing_codes_3B *cvt = (EDID_CVT_timing_codes_3B *)
|
||||
&edid.dtd_md[index].md.DescriptorData[0];
|
||||
j = 0;
|
||||
while (j < 4)
|
||||
{
|
||||
EDIDmode.resY = edid1_CVT_AddressableLinesHigh(&cvt->cvt[j]);
|
||||
switch (edid1_CVT_AspectRatio(&cvt->cvt[j]))
|
||||
EDIDmode.resY = edid1_CVT_addressable_lines_high(
|
||||
&cvt->cvt[j]
|
||||
);
|
||||
switch (edid1_CVT_aspect_ratio(&cvt->cvt[j]))
|
||||
{
|
||||
case EDID_CVT_AspectRatio_4_3:
|
||||
EDIDmode.resX = (EDIDmode.resY*4)/3;
|
||||
@@ -372,9 +374,9 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
break;
|
||||
}
|
||||
EDIDmode.resX = (EDIDmode.resX/8)*8;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
if (find_mode_by_resolution(
|
||||
mode_list, list_length, &EDIDmode) != (uint16_t)-1)
|
||||
return EDIDmode.mode_number;
|
||||
|
||||
j++;
|
||||
}
|
||||
@@ -396,7 +398,8 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
continue;
|
||||
}
|
||||
EDIDmode.resX = (edid.STI[index].HorizontalActivePixels+31)*8;
|
||||
switch (edid.STI[index].ImageAspectRatio_RefreshRate & EDID1_STI_ImageAspectRatioMask)
|
||||
switch (edid.STI[index].ImageAspectRatio_RefreshRate &
|
||||
EDID1_STI_ImageAspectRatioMask)
|
||||
{
|
||||
case EDID_STI_AspectRatio_16_10:
|
||||
EDIDmode.resY = (EDIDmode.resX*10)/16;
|
||||
@@ -411,9 +414,9 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
EDIDmode.resY = (EDIDmode.resX*9)/16;
|
||||
break;
|
||||
}
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
|
||||
index++;
|
||||
}
|
||||
@@ -421,78 +424,78 @@ static uint16_t findModeUsingEDID( modeParams *modeList,
|
||||
in controller mode list */
|
||||
/* not implemented */
|
||||
/* use Established Timings */
|
||||
if (edid1_EstablishedTim(&edid, EST_1280x1024_75Hz))
|
||||
if (edid1_established_tim(&edid, EST_1280x1024_75Hz))
|
||||
{
|
||||
EDIDmode.resX = 1280;
|
||||
EDIDmode.resY = 1024;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_1152x870_75Hz))
|
||||
if (edid1_established_tim(&edid, EST_1152x870_75Hz))
|
||||
{
|
||||
EDIDmode.resX = 1152;
|
||||
EDIDmode.resY = 870;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_1024x768_75Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_1024x768_70Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_1024x768_60Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_1024x768_87Hz))
|
||||
if (edid1_established_tim(&edid, EST_1024x768_75Hz) ||
|
||||
edid1_established_tim(&edid, EST_1024x768_70Hz) ||
|
||||
edid1_established_tim(&edid, EST_1024x768_60Hz) ||
|
||||
edid1_established_tim(&edid, EST_1024x768_87Hz))
|
||||
{
|
||||
EDIDmode.resX = 1024;
|
||||
EDIDmode.resY = 768;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_832x624_75Hz))
|
||||
if (edid1_established_tim(&edid, EST_832x624_75Hz))
|
||||
{
|
||||
EDIDmode.resX = 832;
|
||||
EDIDmode.resY = 624;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_800x600_60Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_800x600_56Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_800x600_75Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_800x600_72Hz))
|
||||
if (edid1_established_tim(&edid, EST_800x600_60Hz) ||
|
||||
edid1_established_tim(&edid, EST_800x600_56Hz) ||
|
||||
edid1_established_tim(&edid, EST_800x600_75Hz) ||
|
||||
edid1_established_tim(&edid, EST_800x600_72Hz))
|
||||
{
|
||||
EDIDmode.resX = 800;
|
||||
EDIDmode.resY = 600;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_720x400_88Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_720x400_70Hz))
|
||||
if (edid1_established_tim(&edid, EST_720x400_88Hz) ||
|
||||
edid1_established_tim(&edid, EST_720x400_70Hz))
|
||||
{
|
||||
EDIDmode.resX = 720;
|
||||
EDIDmode.resY = 400;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
if (edid1_EstablishedTim(&edid, EST_640x480_75Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_640x480_72Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_640x480_67Hz) ||
|
||||
edid1_EstablishedTim(&edid, EST_640x480_60Hz))
|
||||
if (edid1_established_tim(&edid, EST_640x480_75Hz) ||
|
||||
edid1_established_tim(&edid, EST_640x480_72Hz) ||
|
||||
edid1_established_tim(&edid, EST_640x480_67Hz) ||
|
||||
edid1_established_tim(&edid, EST_640x480_60Hz))
|
||||
{
|
||||
EDIDmode.resX = 640;
|
||||
EDIDmode.resY = 480;
|
||||
EDIDmode.bpp = 0;
|
||||
if (findModeByResolution(modeList, listLength, &EDIDmode) !=
|
||||
if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) !=
|
||||
(uint16_t)-1)
|
||||
return EDIDmode.modeNumber;
|
||||
return EDIDmode.mode_number;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -504,9 +507,9 @@ void vesa_realmode_bootup_init(void)
|
||||
{
|
||||
uint32_t vbe_ret_val;
|
||||
uint16_t size;
|
||||
struct VBE_VbeInfoBlock *vib = (struct VBE_VbeInfoBlock *)
|
||||
VBE_vbe_info_block *vib = (VBE_vbe_info_block *)
|
||||
i386_get_default_rm_buffer(&size);
|
||||
vbe_ret_val = VBEControllerInformation(vib, 0x300);
|
||||
vbe_ret_val = VBE_controller_information(vib, 0x300);
|
||||
if (vbe_ret_val == -1)
|
||||
{
|
||||
printk(FB_VESA_NAME " error calling real mode interrupt.\n");
|
||||
@@ -525,7 +528,7 @@ void vesa_realmode_bootup_init(void)
|
||||
structure and if found we set such mode using corresponding
|
||||
VESA function. */
|
||||
#define MAX_NO_OF_SORTED_MODES 100
|
||||
modeParams sortModeParams[MAX_NO_OF_SORTED_MODES];
|
||||
Mode_params sorted_mode_params[MAX_NO_OF_SORTED_MODES];
|
||||
|
||||
uint16_t *vmpSegOff = (uint16_t *)&vib->VideoModePtr;
|
||||
uint16_t *modeNOPtr = (uint16_t*)
|
||||
@@ -543,17 +546,17 @@ void vesa_realmode_bootup_init(void)
|
||||
{ /* some bios implementations ends the list incorrectly with 0 */
|
||||
if (iterator < MAX_NO_OF_SORTED_MODES)
|
||||
{
|
||||
sortModeParams[iterator].modeNumber = *(modeNOPtr+iterator);
|
||||
sorted_mode_params[iterator].mode_number =*(modeNOPtr+iterator);
|
||||
iterator ++;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (iterator < MAX_NO_OF_SORTED_MODES)
|
||||
sortModeParams[iterator].modeNumber = 0;
|
||||
sorted_mode_params[iterator].mode_number = 0;
|
||||
}
|
||||
|
||||
struct VBE_ModeInfoBlock *mib = (struct VBE_ModeInfoBlock *)
|
||||
VBE_mode_info_block *mib = (VBE_mode_info_block *)
|
||||
i386_get_default_rm_buffer(&size);
|
||||
iterator = 0;
|
||||
uint8_t nextFilteredMode = 0;
|
||||
@@ -562,45 +565,49 @@ void vesa_realmode_bootup_init(void)
|
||||
/* get parameters of modes and filter modes according to set
|
||||
required parameters */
|
||||
while (iterator < MAX_NO_OF_SORTED_MODES &&
|
||||
sortModeParams[iterator].modeNumber!=0)
|
||||
sorted_mode_params[iterator].mode_number!=0)
|
||||
{
|
||||
VBEModeInformation(mib, sortModeParams[iterator].modeNumber);
|
||||
VBE_mode_information(mib, sorted_mode_params[iterator].mode_number);
|
||||
if ((mib->ModeAttributes&required_mode_attributes) ==
|
||||
required_mode_attributes)
|
||||
{
|
||||
sortModeParams[nextFilteredMode].modeNumber =
|
||||
sortModeParams[iterator].modeNumber;
|
||||
sortModeParams[nextFilteredMode].resX = mib->XResolution;
|
||||
sortModeParams[nextFilteredMode].resY = mib->YResolution;
|
||||
sortModeParams[nextFilteredMode].bpp = mib->BitsPerPixel;
|
||||
sorted_mode_params[nextFilteredMode].mode_number =
|
||||
sorted_mode_params[iterator].mode_number;
|
||||
sorted_mode_params[nextFilteredMode].resX = mib->XResolution;
|
||||
sorted_mode_params[nextFilteredMode].resY = mib->YResolution;
|
||||
sorted_mode_params[nextFilteredMode].bpp = mib->BitsPerPixel;
|
||||
nextFilteredMode ++;
|
||||
}
|
||||
iterator ++;
|
||||
}
|
||||
sortModeParams[nextFilteredMode].modeNumber = 0;
|
||||
sorted_mode_params[nextFilteredMode].mode_number = 0;
|
||||
|
||||
uint8_t numberOfModes = nextFilteredMode;
|
||||
uint8_t number_of_modes = nextFilteredMode;
|
||||
/* sort filtered modes */
|
||||
modeParams modeXchgPlace;
|
||||
Mode_params modeXchgPlace;
|
||||
iterator = 0;
|
||||
uint8_t j;
|
||||
uint8_t idxBestMode;
|
||||
while (iterator < numberOfModes)
|
||||
while (iterator < number_of_modes)
|
||||
{
|
||||
idxBestMode = iterator;
|
||||
j = iterator+1;
|
||||
while (j < numberOfModes)
|
||||
while (j < number_of_modes)
|
||||
{
|
||||
if (sortModeParams[j].resX > sortModeParams[idxBestMode].resX)
|
||||
if (sorted_mode_params[j].resX >
|
||||
sorted_mode_params[idxBestMode].resX)
|
||||
idxBestMode = j;
|
||||
else if (sortModeParams[j].resX == sortModeParams[idxBestMode].resX)
|
||||
else if (sorted_mode_params[j].resX ==
|
||||
sorted_mode_params[idxBestMode].resX)
|
||||
{
|
||||
if (sortModeParams[j].resY > sortModeParams[idxBestMode].resY)
|
||||
if (sorted_mode_params[j].resY >
|
||||
sorted_mode_params[idxBestMode].resY)
|
||||
idxBestMode = j;
|
||||
else if (sortModeParams[j].resY ==
|
||||
sortModeParams[idxBestMode].resY)
|
||||
else if (sorted_mode_params[j].resY ==
|
||||
sorted_mode_params[idxBestMode].resY)
|
||||
{
|
||||
if (sortModeParams[j].bpp > sortModeParams[idxBestMode].bpp)
|
||||
if (sorted_mode_params[j].bpp >
|
||||
sorted_mode_params[idxBestMode].bpp)
|
||||
idxBestMode = j;
|
||||
}
|
||||
}
|
||||
@@ -608,32 +615,34 @@ void vesa_realmode_bootup_init(void)
|
||||
}
|
||||
if (idxBestMode != iterator)
|
||||
{
|
||||
modeXchgPlace = sortModeParams[iterator];
|
||||
sortModeParams[iterator] = sortModeParams[idxBestMode];
|
||||
sortModeParams[idxBestMode] = modeXchgPlace;
|
||||
modeXchgPlace = sorted_mode_params[iterator];
|
||||
sorted_mode_params[iterator] = sorted_mode_params[idxBestMode];
|
||||
sorted_mode_params[idxBestMode] = modeXchgPlace;
|
||||
}
|
||||
iterator++;
|
||||
}
|
||||
|
||||
/* first search for video argument in multiboot options */
|
||||
vbe_usedMode = findModeUsingCmdline(sortModeParams, numberOfModes);
|
||||
if (vbe_usedMode == (uint16_t)-1)
|
||||
vbe_used_mode = find_mode_using_cmdline(sorted_mode_params,
|
||||
number_of_modes);
|
||||
if (vbe_used_mode == (uint16_t)-1)
|
||||
{
|
||||
printk(FB_VESA_NAME " video on command line not provided"
|
||||
"\n\ttrying EDID ...\n");
|
||||
/* second search monitor for good resolution */
|
||||
vbe_usedMode = findModeUsingEDID(sortModeParams, numberOfModes);
|
||||
if (vbe_usedMode == (uint16_t)-1)
|
||||
vbe_used_mode = find_mode_using_EDID(sorted_mode_params,
|
||||
number_of_modes);
|
||||
if (vbe_used_mode == (uint16_t)-1)
|
||||
{
|
||||
printk(FB_VESA_NAME" monitor's EDID video parameters not supported"
|
||||
"\n\tusing mode with highest resolution, bpp\n");
|
||||
/* third set highest values */
|
||||
vbe_usedMode = sortModeParams[0].modeNumber;
|
||||
vbe_used_mode = sorted_mode_params[0].mode_number;
|
||||
}
|
||||
}
|
||||
|
||||
/* fill framebuffer structs with info about selected mode */
|
||||
vbe_ret_val = VBEModeInformation(mib, vbe_usedMode);
|
||||
vbe_ret_val = VBE_mode_information(mib, vbe_used_mode);
|
||||
if ((vbe_ret_val&0xff)!=VBE_functionSupported ||
|
||||
(vbe_ret_val>>8)!=VBE_callSuccessful)
|
||||
{
|
||||
@@ -667,8 +676,8 @@ void vesa_realmode_bootup_init(void)
|
||||
fb_fix.visual = FB_VISUAL_TRUECOLOR;
|
||||
|
||||
/* set selected mode */
|
||||
vbe_ret_val = VBESetMode(vbe_usedMode | VBE_linearFlatFrameBufMask,
|
||||
(struct VBE_CRTCInfoBlock *)(i386_get_default_rm_buffer(&size)));
|
||||
vbe_ret_val = VBE_set_mode(vbe_used_mode | VBE_linearFlatFrameBufMask,
|
||||
(VBE_CRTC_info_block *)(i386_get_default_rm_buffer(&size)));
|
||||
if (vbe_ret_val>>8 == VBE_callFailed)
|
||||
printk(FB_VESA_NAME " VBE: Requested mode is not available.");
|
||||
|
||||
@@ -799,14 +808,12 @@ frame_buffer_write(
|
||||
|
||||
static int get_fix_screen_info( struct fb_fix_screeninfo *info )
|
||||
{
|
||||
printk("get_fix_screen_info\n");
|
||||
*info = fb_fix;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_var_screen_info( struct fb_var_screeninfo *info )
|
||||
{
|
||||
printk("get_var_screen_info\n");
|
||||
*info = fb_var;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <rtems/score/basedefs.h>
|
||||
#define EDID_PACKED_ATTRIBUTE RTEMS_COMPILER_PACKED_ATTRIBUTE
|
||||
#define EDID_INLINE_ROUTINE RTEMS_INLINE_ROUTINE
|
||||
|
||||
/* VESA Enhanced Extended Display Identification Data (E-EDID) Proposed
|
||||
@@ -70,7 +69,7 @@ extern "C" {
|
||||
#define EDID1_DTD_HorizontalSyncIsPositiveOff 1
|
||||
#define EDID1_DTD_HorizontalSyncIsPositiveMask 0x1
|
||||
|
||||
struct DetailedTimingDescriptor {
|
||||
typedef struct {
|
||||
uint8_t PixelClock_div10000[2];
|
||||
uint8_t HorizontalActiveLow;
|
||||
uint8_t HorizontalBlankingLow;
|
||||
@@ -88,85 +87,85 @@ struct DetailedTimingDescriptor {
|
||||
uint8_t HorizontalBorder;
|
||||
uint8_t VerticalBorder;
|
||||
uint8_t Flags;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_detailed_timing_descriptor;
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_HorizontalActive (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_horizontal_active (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->HorizontalActiveLow |
|
||||
(dtd->HorizontalBlanking_ActiveHigh & 0xF0) << 4);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_HorizontalBlanking (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_horizontal_blanking (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->HorizontalBlankingLow |
|
||||
(dtd->HorizontalBlanking_ActiveHigh & 0xF) << 8);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_VerticalActive (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_vertical_active (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->VerticalActiveLow |
|
||||
(dtd->VerticalBlanking_ActiveHigh & 0xF0) << 4);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_VerticalBlanking (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_vertical_blanking (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->VerticalBlankingLow |
|
||||
(dtd->VerticalBlanking_ActiveHigh & 0xF) << 8);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_VerticalSyncPulseWidth (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_pulse_width (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return ((dtd->VerticalSyncPulseWidth_OffsetLow & 0xF) |
|
||||
(dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0x3) << 4);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_VerticalSyncOffset (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_offset (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return ((dtd->VerticalSyncPulseWidth_OffsetLow >> 4) |
|
||||
(dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0xC) << 2);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_HorizontalSyncPulseWidth (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_pulse_width (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->HorizontalSyncPulseWidthLow |
|
||||
(dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0x30) << 4);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_HorizontalSyncOffset (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_offset (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->HorizontalSyncOffsetLow |
|
||||
(dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0xC0) << 2);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_VerticalImageSize (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_vertical_image_size (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->VerticalImageSizeLow |
|
||||
(dtd->Vertical_HorizontalImageSizeHigh & 0xF) << 8);
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_HorizontalImageSize (
|
||||
struct DetailedTimingDescriptor *dtd)
|
||||
EDID_INLINE_ROUTINE uint16_t DTD_horizontal_image_size (
|
||||
EDID_detailed_timing_descriptor *dtd)
|
||||
{
|
||||
return (dtd->HorizontalImageSizeLow |
|
||||
(dtd->Vertical_HorizontalImageSizeHigh & 0xF0) << 4);
|
||||
}
|
||||
|
||||
struct ColorPointData {
|
||||
typedef struct {
|
||||
uint8_t ColorPointWhitePointIndexNumber;
|
||||
uint8_t ColorPointWhiteLowBits;
|
||||
uint8_t ColorPointWhite_x;
|
||||
uint8_t ColorPointWhite_y;
|
||||
uint8_t ColorPointWhiteGamma;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_color_point_data;
|
||||
|
||||
/* Basic Display Parameters */
|
||||
/* Monitor Descriptor - Data Type Tag */
|
||||
@@ -175,7 +174,7 @@ struct ColorPointData {
|
||||
#define EDID_DTT_ASCIIString 0xFE
|
||||
|
||||
#define EDID_DTT_MonitorRangeLimits 0xFD
|
||||
struct MonitorRangeLimits {
|
||||
typedef struct {
|
||||
uint8_t MinVerticalRateInHz;
|
||||
uint8_t MaxVerticalRateInHz;
|
||||
uint8_t MinHorizontalInKHz;
|
||||
@@ -184,7 +183,7 @@ struct MonitorRangeLimits {
|
||||
/* see VESA, Generalized Timing Formula Standard - GTF
|
||||
Version 1.0, December 18, 1996 */
|
||||
uint8_t GTFStandard[8];
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_monitor_range_limits;
|
||||
|
||||
#define EDID_DTT_MonitorName 0xFC
|
||||
|
||||
@@ -222,18 +221,18 @@ struct MonitorRangeLimits {
|
||||
#define EDID_CVT_PrefVertRate60Hz 1
|
||||
#define EDID_CVT_PrefVertRate75Hz 2
|
||||
#define EDID_CVT_PrefVertRate85Hz 3
|
||||
struct CVT3ByteCodeDescriptor {
|
||||
typedef struct {
|
||||
uint8_t AddressableLinesLow;
|
||||
uint8_t AspectRatio_AddressableLinesHigh;
|
||||
uint8_t VerticalRate_PreferredVerticalRate;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
struct CVTTimingCodes3B {
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_CVT_3_byte_code_descriptor;
|
||||
typedef struct {
|
||||
uint8_t VersionNumber;
|
||||
struct CVT3ByteCodeDescriptor cvt[4];
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
EDID_CVT_3_byte_code_descriptor cvt[4];
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_CVT_timing_codes_3B;
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_CVT_AddressableLinesHigh (
|
||||
struct CVT3ByteCodeDescriptor *cvt)
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_CVT_addressable_lines_high (
|
||||
EDID_CVT_3_byte_code_descriptor *cvt)
|
||||
{
|
||||
return (cvt->AddressableLinesLow |
|
||||
(cvt->VerticalRate_PreferredVerticalRate &
|
||||
@@ -241,18 +240,18 @@ EDID_INLINE_ROUTINE uint16_t edid1_CVT_AddressableLinesHigh (
|
||||
) << (8-EDID1_CVT_AddressableLinesHighOff) );
|
||||
}
|
||||
|
||||
EDID_INLINE_ROUTINE uint8_t edid1_CVT_AspectRatio (
|
||||
struct CVT3ByteCodeDescriptor *cvt)
|
||||
EDID_INLINE_ROUTINE uint8_t edid1_CVT_aspect_ratio (
|
||||
EDID_CVT_3_byte_code_descriptor *cvt)
|
||||
{
|
||||
return (cvt->AspectRatio_AddressableLinesHigh >> EDID1_CVT_AspectRatioOff) &
|
||||
EDID1_CVT_AspectRatioMask;
|
||||
}
|
||||
|
||||
#define EDID_DTT_EstablishedTimingsIII 0xF7
|
||||
struct EstablishedTimingsIII {
|
||||
typedef struct {
|
||||
uint8_t RevisionNumber;
|
||||
uint8_t EST_III[12];
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_established_timings_III;
|
||||
enum EST_III {
|
||||
EST_1152x864_75Hz = 0,
|
||||
EST_1024x768_85Hz = 1,
|
||||
@@ -308,18 +307,18 @@ enum EST_III {
|
||||
#define EDID_DTT_DescriptorSpaceUnused 0x10
|
||||
/* DTT 0x0 - 0xF are manufacturer specific */
|
||||
|
||||
struct MonitorDescriptor {
|
||||
typedef struct {
|
||||
uint8_t Flag0[2];
|
||||
uint8_t Flag1;
|
||||
uint8_t DataTypeTag;
|
||||
uint8_t Flag2;
|
||||
uint8_t DescriptorData[13];
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_monitor_descriptor;
|
||||
|
||||
union DTD_MD {
|
||||
struct DetailedTimingDescriptor dtd;
|
||||
struct MonitorDescriptor md;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
union EDID_DTD_MD {
|
||||
EDID_detailed_timing_descriptor dtd;
|
||||
EDID_monitor_descriptor md;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE;
|
||||
|
||||
#define EDID1_STI_ImageAspectRatioOff 0
|
||||
#define EDID1_STI_ImageAspectRatioMask 0x3
|
||||
@@ -331,10 +330,10 @@ union DTD_MD {
|
||||
#define EDID_STI_AspectRatio_4_3 1
|
||||
#define EDID_STI_AspectRatio_5_4 2
|
||||
#define EDID_STI_AspectRatio_16_9 3
|
||||
struct StandardTimingIdentification {
|
||||
typedef struct {
|
||||
uint8_t HorizontalActivePixels;
|
||||
uint8_t ImageAspectRatio_RefreshRate;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_standard_timing_identification;
|
||||
|
||||
/* Video Input Definition */
|
||||
/* Analog = 0, Digital = 1 */
|
||||
@@ -409,7 +408,7 @@ struct StandardTimingIdentification {
|
||||
#define EDID_DisplayType_RGB444YCrCb422 2
|
||||
#define EDID_DisplayType_RGB444YCrCb444YCrCb422 3
|
||||
|
||||
struct edid1 {
|
||||
typedef struct {
|
||||
uint8_t Header[8];
|
||||
/* Vendor Product Identification */
|
||||
uint8_t IDManufacturerName[2];
|
||||
@@ -442,39 +441,39 @@ struct edid1 {
|
||||
/* Established Timings I, II, Manufacturer's */
|
||||
uint8_t EST_I_II_Man[3];
|
||||
/* Standard Timing Identification */
|
||||
struct StandardTimingIdentification STI[8];
|
||||
EDID_standard_timing_identification STI[8];
|
||||
/* Detailed Timing Descriptions / Monitor Descriptions */
|
||||
union DTD_MD dtd_md[4];
|
||||
union EDID_DTD_MD dtd_md[4];
|
||||
uint8_t ExtensionFlag;
|
||||
uint8_t Checksum;
|
||||
} EDID_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_edid1;
|
||||
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_RedX (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_RedX (EDID_edid1 *edid) {
|
||||
return (edid->RedXHigh<<2) | (edid->GreenRedLow>>6);
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_RedY (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_RedY (EDID_edid1 *edid) {
|
||||
return (edid->RedYHigh<<2) | (edid->GreenRedLow>>4)&&0x3;
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_GreenX (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_GreenX (EDID_edid1 *edid) {
|
||||
return (edid->GreenXHigh<<2) | (edid->GreenRedLow>>2)&&0x3;
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_GreenY (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_GreenY (EDID_edid1 *edid) {
|
||||
return (edid->GreenYHigh<<2) | (edid->GreenRedLow&0x3);
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_BlueX (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_BlueX (EDID_edid1 *edid) {
|
||||
return (edid->BlueXHigh<<2) | (edid->WhiteBlueLow>>6);
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_BlueY (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_BlueY (EDID_edid1 *edid) {
|
||||
return (edid->BlueYHigh<<2) | (edid->WhiteBlueLow>>4)&&0x3;
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_WhiteX (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_WhiteX (EDID_edid1 *edid) {
|
||||
return (edid->WhiteXHigh<<2) | (edid->WhiteBlueLow>>2)&&0x3;
|
||||
}
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_WhiteY (struct edid1 *edid) {
|
||||
EDID_INLINE_ROUTINE uint16_t edid1_WhiteY (EDID_edid1 *edid) {
|
||||
return (edid->WhiteYHigh<<2) | (edid->WhiteBlueLow&0x3);
|
||||
}
|
||||
|
||||
enum edid1_EstablishedTimings {
|
||||
enum edid1_established_timings {
|
||||
/* Established Timings I */
|
||||
EST_800x600_60Hz = 0,
|
||||
EST_800x600_56Hz = 1,
|
||||
@@ -497,9 +496,9 @@ enum edid1_EstablishedTimings {
|
||||
EST_1152x870_75Hz = 23,
|
||||
};
|
||||
|
||||
EDID_INLINE_ROUTINE uint8_t edid1_EstablishedTim (
|
||||
struct edid1 *edid,
|
||||
enum edid1_EstablishedTimings est)
|
||||
EDID_INLINE_ROUTINE uint8_t edid1_established_tim (
|
||||
EDID_edid1 *edid,
|
||||
enum edid1_established_timings est)
|
||||
{
|
||||
return (uint8_t)(edid->EST_I_II_Man[est/8] & (est%8));
|
||||
}
|
||||
|
||||
@@ -45,9 +45,9 @@ extern "C" {
|
||||
* @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
|
||||
uint32_t VBE_controller_information (
|
||||
VBE_vbe_info_block *info_block,
|
||||
uint16_t queried_VBE_Version
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -59,9 +59,9 @@ uint32_t VBEControllerInformation (
|
||||
* @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
|
||||
uint32_t VBE_mode_information (
|
||||
VBE_mode_info_block *info_block,
|
||||
uint16_t mode_number
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -73,9 +73,9 @@ uint32_t VBEModeInformation (
|
||||
* @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
|
||||
uint32_t VBE_set_mode (
|
||||
uint16_t mode_number,
|
||||
VBE_CRTC_info_block *info_block
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -85,8 +85,8 @@ uint32_t VBESetMode (
|
||||
* @retval register ax content as defined in VBE RETURN STATUS paragraph
|
||||
* -1 error calling graphical bios
|
||||
*/
|
||||
uint32_t VBECurrentMode (
|
||||
uint16_t *modeNumber
|
||||
uint32_t VBE_current_mode (
|
||||
uint16_t *mode_number
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -101,10 +101,10 @@ uint32_t VBECurrentMode (
|
||||
* @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
|
||||
uint32_t VBE_report_DDC_capabilities (
|
||||
uint16_t controller_unit_number,
|
||||
uint8_t *seconds_to_transfer_EDID_block,
|
||||
uint8_t *DDC_level_supported
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -116,10 +116,10 @@ uint32_t VBEReportDDCCapabilities (
|
||||
* @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
|
||||
uint32_t VBE_read_EDID (
|
||||
uint16_t controller_unit_number,
|
||||
uint16_t EDID_block_number,
|
||||
EDID_edid1 *buffer
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -22,4 +22,3 @@
|
||||
|
||||
#define IDT_SIZE (256)
|
||||
#define GDT_SIZE (3 + NUM_APP_DRV_GDT_DESCRIPTORS)
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <rtems/score/basedefs.h>
|
||||
#define VBE3_PACKED_ATTRIBUTE RTEMS_COMPILER_PACKED_ATTRIBUTE
|
||||
|
||||
/* VESA BIOS EXTENSION (VBE) Core functions Standard
|
||||
Version: 3.0 Date: September 16, 1998 */
|
||||
@@ -156,12 +155,12 @@ extern "C" {
|
||||
#define VBE_RetVBESupSpeInf 0x00 /* Return VBE Supplemental
|
||||
Specification Information */
|
||||
/* *** Structures *** */
|
||||
struct VBE_FarPtr {
|
||||
typedef struct {
|
||||
uint16_t offset;
|
||||
uint16_t selector;
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_far_pointer;
|
||||
|
||||
struct VBE_PMInfoBlock {
|
||||
typedef struct {
|
||||
uint8_t Signature[4]; /* PM Info Block Signature */
|
||||
uint16_t EntryPoint; /* Offset of PM entry point within BIOS */
|
||||
uint16_t PMInitialize; /* Offset of PM initialization entry point */
|
||||
@@ -172,7 +171,7 @@ struct VBE_PMInfoBlock {
|
||||
uint16_t CodeSegSel; /* Selector to access code segment as data */
|
||||
uint8_t InProtectMode; /* Set to 1 when in protected mode */
|
||||
uint8_t Checksum; /* Checksum byte for structure */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_protected_mode_info_block;
|
||||
|
||||
/* General VBE signature */
|
||||
#define VBE_SIGNATURE "VESA"
|
||||
@@ -181,7 +180,7 @@ struct VBE_PMInfoBlock {
|
||||
/* for STUB see VBE CORE FUNCTIONS VERSION 3.0 - Appendix 1 */
|
||||
#define VBE_END_OF_VideoModeList 0xFFFF
|
||||
#define VBE_STUB_VideoModeList 0xFFFF
|
||||
struct VBE_VbeInfoBlock {
|
||||
typedef struct {
|
||||
uint8_t VbeSignature[4]; /* VBE Signature */
|
||||
uint16_t VbeVersion; /* VBE Version */
|
||||
uint8_t *OemStringPtr; /* VbeFarPtr to OEM String */
|
||||
@@ -196,9 +195,9 @@ struct VBE_VbeInfoBlock {
|
||||
uint8_t Reserved[222]; /* Reserved for VBE implementation scratch */
|
||||
/* area */
|
||||
uint8_t OemData[256]; /* Data Area for OEM Strings */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_vbe_info_block;
|
||||
|
||||
struct VBE_ModeInfoBlock {
|
||||
typedef struct {
|
||||
/* Mandatory information for all VBE revisions */
|
||||
uint16_t ModeAttributes; /* mode attributes */
|
||||
uint8_t WinAAttributes; /* window A attributes */
|
||||
@@ -252,9 +251,9 @@ struct VBE_ModeInfoBlock {
|
||||
uint32_t MaxPixelClock; /* maximum pixel clock
|
||||
(in Hz) for graphics mode */
|
||||
uint8_t Reserved3[189]; /* remainder of ModeInfoBlock */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_mode_info_block;
|
||||
|
||||
struct VBE_CRTCInfoBlock {
|
||||
typedef struct {
|
||||
uint16_t HorizontalTotal; /* Horizontal total in pixels */
|
||||
uint16_t HorizontalSyncStart; /* Horizontal sync start in pixels */
|
||||
uint16_t HorizontalSyncEnd; /* Horizontal sync end in pixels */
|
||||
@@ -265,16 +264,16 @@ struct VBE_CRTCInfoBlock {
|
||||
uint32_t PixelClock; /* Pixel clock in units of Hz */
|
||||
uint16_t RefreshRate; /* Refresh rate in units of 0.01 Hz */
|
||||
uint8_t Reserved[40]; /* remainder of ModeInfoBlock */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_CRTC_info_block;
|
||||
|
||||
struct VBE_PaletteEntry {
|
||||
typedef struct {
|
||||
uint8_t Blue; /* Blue channel value (6 or 8 bits) */
|
||||
uint8_t Green; /* Green channel value (6 or 8 bits) */
|
||||
uint8_t Red; /* Red channel value(6 or 8 bits) */
|
||||
uint8_t Alignment; /* DWORD alignment byte (unused) */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_palette_entry;
|
||||
|
||||
struct VBE_SupVbeInfoBlock {
|
||||
typedef struct {
|
||||
uint8_t SupVbeSignature[7]; /* Supplemental VBE Signature */
|
||||
uint16_t SupVbeVersion; /* Supplemental VBE Version */
|
||||
uint8_t SupVbeSubFunc[8]; /* Bitfield of supported subfunctions */
|
||||
@@ -286,7 +285,7 @@ struct VBE_SupVbeInfoBlock {
|
||||
uint8_t Reserved[221]; /* Reserved for description
|
||||
strings and future */
|
||||
/* expansion */
|
||||
} VBE3_PACKED_ATTRIBUTE;
|
||||
} RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_supplemental_vbe_info_block;
|
||||
|
||||
/* VbeInfoBlock Capabilities */
|
||||
/* D0 = 0 DAC is fixed width, with 6 bits per primary color */
|
||||
@@ -460,4 +459,3 @@ struct VBE_SupVbeInfoBlock {
|
||||
#endif /* ASM */
|
||||
|
||||
#endif /* _VBE_H */
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ void *i386_get_default_rm_buffer(uint16_t *size) {
|
||||
return default_rm_buffer_spot;
|
||||
}
|
||||
|
||||
int i386_real_interrupt_call(uint8_t interruptNumber,
|
||||
int i386_real_interrupt_call(uint8_t interrupt_number,
|
||||
i386_realmode_interrupt_registers *ir)
|
||||
{
|
||||
uint32_t pagingon;
|
||||
@@ -270,7 +270,7 @@ int i386_real_interrupt_call(uint8_t interruptNumber,
|
||||
: "=rm"(interrupt_number_off)
|
||||
);
|
||||
interrupt_number_ptr = (uint8_t *)(rm_swtch_code_dst+interrupt_number_off);
|
||||
*interrupt_number_ptr = interruptNumber;
|
||||
*interrupt_number_ptr = interrupt_number;
|
||||
/* execute code that jumps to coppied function, which switches to real mode,
|
||||
loads registers with values passed to interrupt and executes interrupt */
|
||||
__asm__ volatile( "\t"
|
||||
@@ -403,4 +403,3 @@ int i386_real_interrupt_call(uint8_t interruptNumber,
|
||||
*ir = int_passed_regs_spot->inoutregs;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,10 @@ extern void *i386_get_default_rm_buffer(uint16_t *size);
|
||||
* @retval 0 call failed (GDT too small or pagin is on)
|
||||
* 1 call successful
|
||||
*/
|
||||
extern int i386_real_interrupt_call(uint8_t interruptNumber, i386_realmode_interrupt_registers *ir);
|
||||
extern int i386_real_interrupt_call(
|
||||
uint8_t interrupt_number,
|
||||
i386_realmode_interrupt_registers *ir
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user