Changeset d78eac6 in rtems
- Timestamp:
- 12/03/14 23:56:38 (9 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 038e1dba
- Parents:
- adc1dbeb
- git-author:
- Jan Dolezal <dolezj21@…> (12/03/14 23:56:38)
- git-committer:
- Gedare Bloom <gedare@…> (12/04/14 18:37:50)
- Location:
- c/src/lib/libbsp/i386
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/i386/pc386/console/fb_vesa_rm.c
radc1dbeb rd78eac6 60 60 static struct fb_fix_screeninfo fb_fix; 61 61 62 static uint16_t vbe_used Mode;63 64 inline uint32_t VBEControllerInformation( struct VBE_VbeInfoBlock *infoBlock,65 uint16_t queried VBEVersion)62 static uint16_t vbe_used_mode; 63 64 uint32_t VBE_controller_information( VBE_vbe_info_block *info_block, 65 uint16_t queried_VBE_Version) 66 66 { 67 67 uint16_t size; 68 struct VBE_VbeInfoBlock *VBE_buffer =69 ( struct VBE_VbeInfoBlock *)i386_get_default_rm_buffer(&size);68 VBE_vbe_info_block *VBE_buffer = 69 (VBE_vbe_info_block *)i386_get_default_rm_buffer(&size); 70 70 i386_realmode_interrupt_registers parret; 71 71 parret.reg_eax = VBE_RetVBEConInf; … … 75 75 parret.reg_es = seg; 76 76 /* indicate to graphic's bios that VBE2.0 extended information is desired */ 77 if (queried VBEVersion >= 0x200)77 if (queried_VBE_Version >= 0x200) 78 78 { 79 79 strncpy( … … 88 88 (VBE_callSuccessful<<8 | VBE_functionSupported)) 89 89 { 90 *info Block = *VBE_buffer;90 *info_block = *VBE_buffer; 91 91 } 92 92 return (parret.reg_eax & 0xFFFF); 93 93 } 94 94 95 inline uint32_t VBEModeInformation( struct VBE_ModeInfoBlock *infoBlock,96 uint16_t mode Number)95 uint32_t VBE_mode_information( VBE_mode_info_block *info_block, 96 uint16_t mode_number) 97 97 { 98 98 uint16_t size; 99 struct VBE_ModeInfoBlock *VBE_buffer =100 ( struct VBE_ModeInfoBlock *)i386_get_default_rm_buffer(&size);99 VBE_mode_info_block *VBE_buffer = 100 (VBE_mode_info_block *)i386_get_default_rm_buffer(&size); 101 101 i386_realmode_interrupt_registers parret; 102 102 parret.reg_eax = VBE_RetVBEModInf; 103 parret.reg_ecx = mode Number;103 parret.reg_ecx = mode_number; 104 104 uint16_t seg, off; 105 105 i386_Physical_to_real(VBE_buffer, &seg, &off); … … 111 111 (VBE_callSuccessful<<8 | VBE_functionSupported)) 112 112 { 113 *info Block = *VBE_buffer;113 *info_block = *VBE_buffer; 114 114 } 115 115 return (parret.reg_eax & 0xFFFF); 116 116 } 117 117 118 inline uint32_t VBESetMode( uint16_t modeNumber,119 struct VBE_CRTCInfoBlock *infoBlock)118 uint32_t VBE_set_mode( uint16_t mode_number, 119 VBE_CRTC_info_block *info_block) 120 120 { 121 121 uint16_t size; 122 struct VBE_CRTCInfoBlock *VBE_buffer =123 ( struct VBE_CRTCInfoBlock *)i386_get_default_rm_buffer(&size);122 VBE_CRTC_info_block *VBE_buffer = 123 (VBE_CRTC_info_block *)i386_get_default_rm_buffer(&size); 124 124 i386_realmode_interrupt_registers parret; 125 125 /* copy CRTC */ 126 *VBE_buffer = *info Block;126 *VBE_buffer = *info_block; 127 127 parret.reg_eax = VBE_SetVBEMod; 128 parret.reg_ebx = mode Number;128 parret.reg_ebx = mode_number; 129 129 uint16_t seg, off; 130 130 i386_Physical_to_real(VBE_buffer, &seg, &off); … … 136 136 } 137 137 138 inline uint32_t VBECurrentMode(uint16_t *modeNumber)138 uint32_t VBE_current_mode(uint16_t *mode_number) 139 139 { 140 140 i386_realmode_interrupt_registers parret; … … 142 142 if (i386_real_interrupt_call(INTERRUPT_NO_VIDEO_SERVICES, &parret) == 0) 143 143 return -1; 144 *mode Number = (uint16_t)parret.reg_ebx;144 *mode_number = (uint16_t)parret.reg_ebx; 145 145 return (parret.reg_eax & 0xFFFF); 146 146 } 147 147 148 inline uint32_t VBEReportDDCCapabilities( uint16_t controllerUnitNumber,149 uint8_t *secondsToTransferEDIDBlock,150 uint8_t *DDCLevelSupported)148 uint32_t VBE_report_DDC_capabilities(uint16_t controller_unit_number, 149 uint8_t *seconds_to_transfer_EDID_block, 150 uint8_t *DDC_level_supported) 151 151 { 152 152 i386_realmode_interrupt_registers parret; 153 153 parret.reg_eax = VBE_DisDatCha; 154 154 parret.reg_ebx = VBEDDC_Capabilities; 155 parret.reg_ecx = controller UnitNumber;155 parret.reg_ecx = controller_unit_number; 156 156 parret.reg_edi = 0; 157 157 parret.reg_es = 0; 158 158 if (i386_real_interrupt_call(INTERRUPT_NO_VIDEO_SERVICES, &parret) == 0) 159 159 return -1; 160 *seconds ToTransferEDIDBlock = (uint8_t)parret.reg_ebx >> 8;161 *DDC LevelSupported = (uint8_t)parret.reg_ebx;160 *seconds_to_transfer_EDID_block = (uint8_t)parret.reg_ebx >> 8; 161 *DDC_level_supported = (uint8_t)parret.reg_ebx; 162 162 return (parret.reg_eax & 0xFFFF); 163 163 } 164 164 165 inline uint32_t VBEReadEDID(uint16_t controllerUnitNumber,166 uint16_t EDID BlockNumber,167 structedid1 *buffer)165 uint32_t VBE_read_EDID(uint16_t controller_unit_number, 166 uint16_t EDID_block_number, 167 EDID_edid1 *buffer) 168 168 { 169 169 uint16_t size; 170 struct edid1 *VBE_buffer = (struct edid1*)i386_get_default_rm_buffer(&size);170 EDID_edid1 *VBE_buffer = (EDID_edid1*)i386_get_default_rm_buffer(&size); 171 171 i386_realmode_interrupt_registers parret; 172 172 parret.reg_eax = VBE_DisDatCha; 173 173 parret.reg_ebx = VBEDDC_ReadEDID; 174 parret.reg_ecx = controller UnitNumber;175 parret.reg_edx = EDID BlockNumber;174 parret.reg_ecx = controller_unit_number; 175 parret.reg_edx = EDID_block_number; 176 176 uint16_t seg, off; 177 177 i386_Physical_to_real(VBE_buffer, &seg, &off); … … 189 189 190 190 typedef struct { 191 uint16_t mode Number;191 uint16_t mode_number; 192 192 uint16_t resX; 193 193 uint16_t resY; 194 194 uint8_t bpp; 195 } modeParams;195 } Mode_params; 196 196 197 197 /* finds mode in 'modeList' of 'listLength' length according to resolution … … 201 201 'searchedResolution'. bpp is also filled into 'searchedResolution' if it 202 202 was 0 before call. */ 203 static uint16_t find ModeByResolution( modeParams *modeList,204 uint8_t list Length,205 modeParams *searchedResolution)203 static uint16_t find_mode_by_resolution(Mode_params *mode_list, 204 uint8_t list_length, 205 Mode_params *searched_resolution) 206 206 { 207 207 uint8_t i = 0; 208 while (i < list Length)209 { 210 if (searched Resolution->resX == modeList[i].resX &&211 searched Resolution->resY == modeList[i].resY)212 { 213 if (searched Resolution->bpp==0 ||214 searched Resolution->bpp==modeList[i].bpp)208 while (i < list_length) 209 { 210 if (searched_resolution->resX == mode_list[i].resX && 211 searched_resolution->resY == mode_list[i].resY) 212 { 213 if (searched_resolution->bpp==0 || 214 searched_resolution->bpp==mode_list[i].bpp) 215 215 { 216 searched Resolution->bpp = modeList[i].bpp;217 searched Resolution->modeNumber = modeList[i].modeNumber;218 return mode List[i].modeNumber;216 searched_resolution->bpp = mode_list[i].bpp; 217 searched_resolution->mode_number = mode_list[i].mode_number; 218 return mode_list[i].mode_number; 219 219 } 220 220 } … … 233 233 * -1 on parsing error or when no suitable mode found 234 234 */ 235 static uint16_t find ModeUsingCmdline( modeParams *modeList,236 uint8_t list Length)235 static uint16_t find_mode_using_cmdline(Mode_params *mode_list, 236 uint8_t list_length) 237 237 { 238 238 const char* opt; 239 modeParams cmdlineMode;239 Mode_params cmdline_mode; 240 240 char* endptr; 241 cmdline Mode.bpp = 0;241 cmdline_mode.bpp = 0; 242 242 opt = bsp_cmdline_arg("--video="); 243 243 if (opt) 244 244 { 245 245 opt += sizeof("--video=")-1; 246 cmdline Mode.resX = strtol(opt, &endptr, 10);246 cmdline_mode.resX = strtol(opt, &endptr, 10); 247 247 if (*endptr != 'x') 248 248 { … … 250 250 } 251 251 opt = endptr+1; 252 cmdline Mode.resY = strtol(opt, &endptr, 10);252 cmdline_mode.resY = strtol(opt, &endptr, 10); 253 253 switch (*endptr) 254 254 { … … 256 256 opt = endptr+1; 257 257 if (strlen(opt) <= 2) 258 cmdline Mode.bpp = strtol(opt, &endptr, 10);258 cmdline_mode.bpp = strtol(opt, &endptr, 10); 259 259 else 260 260 { 261 cmdline Mode.bpp = strtol(opt, &endptr, 10);261 cmdline_mode.bpp = strtol(opt, &endptr, 10); 262 262 if (*endptr != ' ') 263 263 { … … 272 272 } 273 273 274 if (find ModeByResolution(modeList, listLength, &cmdlineMode) !=274 if (find_mode_by_resolution(mode_list, list_length, &cmdline_mode) != 275 275 (uint16_t)-1) 276 return cmdline Mode.modeNumber;276 return cmdline_mode.mode_number; 277 277 } 278 278 return -1; … … 285 285 * -1 on parsing error or when no suitable mode found 286 286 */ 287 static uint16_t find ModeUsingEDID( modeParams *modeList,288 uint8_t listLength)289 { 290 structedid1 edid;287 static uint16_t find_mode_using_EDID( Mode_params *mode_list, 288 uint8_t list_length) 289 { 290 EDID_edid1 edid; 291 291 uint8_t checksum, iterator; 292 292 uint8_t index, j; 293 modeParams EDIDmode;293 Mode_params EDIDmode; 294 294 checksum = 0; 295 295 iterator = 0; 296 296 EDIDmode.bpp = 0; 297 if (VBE ReadEDID(0, 0, &edid) !=297 if (VBE_read_EDID(0, 0, &edid) != 298 298 (VBE_callSuccessful<<8 | VBE_functionSupported)) 299 299 { … … 304 304 if (edid.Version == 1) 305 305 { /* EDID version 1 */ 306 while (iterator < sizeof( structedid1))306 while (iterator < sizeof(EDID_edid1)) 307 307 { 308 308 checksum += *((uint8_t *)&edid+iterator); … … 326 326 continue; 327 327 } 328 EDIDmode.resX = DTD_ HorizontalActive(&edid.dtd_md[0].dtd);329 EDIDmode.resY = DTD_ VerticalActive(&edid.dtd_md[0].dtd);330 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=328 EDIDmode.resX = DTD_horizontal_active(&edid.dtd_md[0].dtd); 329 EDIDmode.resY = DTD_vertical_active(&edid.dtd_md[0].dtd); 330 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 331 331 (uint16_t)-1) 332 return EDIDmode.mode Number;332 return EDIDmode.mode_number; 333 333 334 334 index++; … … 351 351 edid.dtd_md[index].md.Flag2 == 0) 352 352 { 353 struct CVTTimingCodes3B *cvt = (struct CVTTimingCodes3B *)353 EDID_CVT_timing_codes_3B *cvt = (EDID_CVT_timing_codes_3B *) 354 354 &edid.dtd_md[index].md.DescriptorData[0]; 355 355 j = 0; 356 356 while (j < 4) 357 357 { 358 EDIDmode.resY = edid1_CVT_AddressableLinesHigh(&cvt->cvt[j]); 359 switch (edid1_CVT_AspectRatio(&cvt->cvt[j])) 358 EDIDmode.resY = edid1_CVT_addressable_lines_high( 359 &cvt->cvt[j] 360 ); 361 switch (edid1_CVT_aspect_ratio(&cvt->cvt[j])) 360 362 { 361 363 case EDID_CVT_AspectRatio_4_3: … … 373 375 } 374 376 EDIDmode.resX = (EDIDmode.resX/8)*8; 375 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=376 (uint16_t)-1)377 return EDIDmode.mode Number;377 if (find_mode_by_resolution( 378 mode_list, list_length, &EDIDmode) != (uint16_t)-1) 379 return EDIDmode.mode_number; 378 380 379 381 j++; … … 397 399 } 398 400 EDIDmode.resX = (edid.STI[index].HorizontalActivePixels+31)*8; 399 switch (edid.STI[index].ImageAspectRatio_RefreshRate & EDID1_STI_ImageAspectRatioMask) 401 switch (edid.STI[index].ImageAspectRatio_RefreshRate & 402 EDID1_STI_ImageAspectRatioMask) 400 403 { 401 404 case EDID_STI_AspectRatio_16_10: … … 412 415 break; 413 416 } 414 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=417 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 415 418 (uint16_t)-1) 416 return EDIDmode.mode Number;419 return EDIDmode.mode_number; 417 420 418 421 index++; … … 422 425 /* not implemented */ 423 426 /* use Established Timings */ 424 if (edid1_ EstablishedTim(&edid, EST_1280x1024_75Hz))427 if (edid1_established_tim(&edid, EST_1280x1024_75Hz)) 425 428 { 426 429 EDIDmode.resX = 1280; 427 430 EDIDmode.resY = 1024; 428 431 EDIDmode.bpp = 0; 429 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=432 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 430 433 (uint16_t)-1) 431 return EDIDmode.mode Number;432 } 433 if (edid1_ EstablishedTim(&edid, EST_1152x870_75Hz))434 return EDIDmode.mode_number; 435 } 436 if (edid1_established_tim(&edid, EST_1152x870_75Hz)) 434 437 { 435 438 EDIDmode.resX = 1152; 436 439 EDIDmode.resY = 870; 437 440 EDIDmode.bpp = 0; 438 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=441 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 439 442 (uint16_t)-1) 440 return EDIDmode.mode Number;441 } 442 if (edid1_ EstablishedTim(&edid, EST_1024x768_75Hz) ||443 edid1_ EstablishedTim(&edid, EST_1024x768_70Hz) ||444 edid1_ EstablishedTim(&edid, EST_1024x768_60Hz) ||445 edid1_ EstablishedTim(&edid, EST_1024x768_87Hz))443 return EDIDmode.mode_number; 444 } 445 if (edid1_established_tim(&edid, EST_1024x768_75Hz) || 446 edid1_established_tim(&edid, EST_1024x768_70Hz) || 447 edid1_established_tim(&edid, EST_1024x768_60Hz) || 448 edid1_established_tim(&edid, EST_1024x768_87Hz)) 446 449 { 447 450 EDIDmode.resX = 1024; 448 451 EDIDmode.resY = 768; 449 452 EDIDmode.bpp = 0; 450 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=453 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 451 454 (uint16_t)-1) 452 return EDIDmode.mode Number;453 } 454 if (edid1_ EstablishedTim(&edid, EST_832x624_75Hz))455 return EDIDmode.mode_number; 456 } 457 if (edid1_established_tim(&edid, EST_832x624_75Hz)) 455 458 { 456 459 EDIDmode.resX = 832; 457 460 EDIDmode.resY = 624; 458 461 EDIDmode.bpp = 0; 459 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=462 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 460 463 (uint16_t)-1) 461 return EDIDmode.mode Number;462 } 463 if (edid1_ EstablishedTim(&edid, EST_800x600_60Hz) ||464 edid1_ EstablishedTim(&edid, EST_800x600_56Hz) ||465 edid1_ EstablishedTim(&edid, EST_800x600_75Hz) ||466 edid1_ EstablishedTim(&edid, EST_800x600_72Hz))464 return EDIDmode.mode_number; 465 } 466 if (edid1_established_tim(&edid, EST_800x600_60Hz) || 467 edid1_established_tim(&edid, EST_800x600_56Hz) || 468 edid1_established_tim(&edid, EST_800x600_75Hz) || 469 edid1_established_tim(&edid, EST_800x600_72Hz)) 467 470 { 468 471 EDIDmode.resX = 800; 469 472 EDIDmode.resY = 600; 470 473 EDIDmode.bpp = 0; 471 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=474 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 472 475 (uint16_t)-1) 473 return EDIDmode.mode Number;474 } 475 if (edid1_ EstablishedTim(&edid, EST_720x400_88Hz) ||476 edid1_ EstablishedTim(&edid, EST_720x400_70Hz))476 return EDIDmode.mode_number; 477 } 478 if (edid1_established_tim(&edid, EST_720x400_88Hz) || 479 edid1_established_tim(&edid, EST_720x400_70Hz)) 477 480 { 478 481 EDIDmode.resX = 720; 479 482 EDIDmode.resY = 400; 480 483 EDIDmode.bpp = 0; 481 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=484 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 482 485 (uint16_t)-1) 483 return EDIDmode.mode Number;484 } 485 if (edid1_ EstablishedTim(&edid, EST_640x480_75Hz) ||486 edid1_ EstablishedTim(&edid, EST_640x480_72Hz) ||487 edid1_ EstablishedTim(&edid, EST_640x480_67Hz) ||488 edid1_ EstablishedTim(&edid, EST_640x480_60Hz))486 return EDIDmode.mode_number; 487 } 488 if (edid1_established_tim(&edid, EST_640x480_75Hz) || 489 edid1_established_tim(&edid, EST_640x480_72Hz) || 490 edid1_established_tim(&edid, EST_640x480_67Hz) || 491 edid1_established_tim(&edid, EST_640x480_60Hz)) 489 492 { 490 493 EDIDmode.resX = 640; 491 494 EDIDmode.resY = 480; 492 495 EDIDmode.bpp = 0; 493 if (find ModeByResolution(modeList, listLength, &EDIDmode) !=496 if (find_mode_by_resolution(mode_list, list_length, &EDIDmode) != 494 497 (uint16_t)-1) 495 return EDIDmode.mode Number;498 return EDIDmode.mode_number; 496 499 } 497 500 } … … 505 508 uint32_t vbe_ret_val; 506 509 uint16_t size; 507 struct VBE_VbeInfoBlock *vib = (struct VBE_VbeInfoBlock *)510 VBE_vbe_info_block *vib = (VBE_vbe_info_block *) 508 511 i386_get_default_rm_buffer(&size); 509 vbe_ret_val = VBE ControllerInformation(vib, 0x300);512 vbe_ret_val = VBE_controller_information(vib, 0x300); 510 513 if (vbe_ret_val == -1) 511 514 { … … 526 529 VESA function. */ 527 530 #define MAX_NO_OF_SORTED_MODES 100 528 modeParams sortModeParams[MAX_NO_OF_SORTED_MODES];531 Mode_params sorted_mode_params[MAX_NO_OF_SORTED_MODES]; 529 532 530 533 uint16_t *vmpSegOff = (uint16_t *)&vib->VideoModePtr; … … 544 547 if (iterator < MAX_NO_OF_SORTED_MODES) 545 548 { 546 sort ModeParams[iterator].modeNumber =*(modeNOPtr+iterator);549 sorted_mode_params[iterator].mode_number =*(modeNOPtr+iterator); 547 550 iterator ++; 548 551 } … … 551 554 } 552 555 if (iterator < MAX_NO_OF_SORTED_MODES) 553 sort ModeParams[iterator].modeNumber = 0;554 } 555 556 struct VBE_ModeInfoBlock *mib = (struct VBE_ModeInfoBlock *)556 sorted_mode_params[iterator].mode_number = 0; 557 } 558 559 VBE_mode_info_block *mib = (VBE_mode_info_block *) 557 560 i386_get_default_rm_buffer(&size); 558 561 iterator = 0; … … 563 566 required parameters */ 564 567 while (iterator < MAX_NO_OF_SORTED_MODES && 565 sort ModeParams[iterator].modeNumber!=0)566 { 567 VBE ModeInformation(mib, sortModeParams[iterator].modeNumber);568 sorted_mode_params[iterator].mode_number!=0) 569 { 570 VBE_mode_information(mib, sorted_mode_params[iterator].mode_number); 568 571 if ((mib->ModeAttributes&required_mode_attributes) == 569 572 required_mode_attributes) 570 573 { 571 sort ModeParams[nextFilteredMode].modeNumber =572 sort ModeParams[iterator].modeNumber;573 sort ModeParams[nextFilteredMode].resX = mib->XResolution;574 sort ModeParams[nextFilteredMode].resY = mib->YResolution;575 sort ModeParams[nextFilteredMode].bpp = mib->BitsPerPixel;574 sorted_mode_params[nextFilteredMode].mode_number = 575 sorted_mode_params[iterator].mode_number; 576 sorted_mode_params[nextFilteredMode].resX = mib->XResolution; 577 sorted_mode_params[nextFilteredMode].resY = mib->YResolution; 578 sorted_mode_params[nextFilteredMode].bpp = mib->BitsPerPixel; 576 579 nextFilteredMode ++; 577 580 } 578 581 iterator ++; 579 582 } 580 sort ModeParams[nextFilteredMode].modeNumber = 0;581 582 uint8_t number OfModes = nextFilteredMode;583 sorted_mode_params[nextFilteredMode].mode_number = 0; 584 585 uint8_t number_of_modes = nextFilteredMode; 583 586 /* sort filtered modes */ 584 modeParams modeXchgPlace;587 Mode_params modeXchgPlace; 585 588 iterator = 0; 586 589 uint8_t j; 587 590 uint8_t idxBestMode; 588 while (iterator < number OfModes)591 while (iterator < number_of_modes) 589 592 { 590 593 idxBestMode = iterator; 591 594 j = iterator+1; 592 while (j < numberOfModes) 593 { 594 if (sortModeParams[j].resX > sortModeParams[idxBestMode].resX) 595 while (j < number_of_modes) 596 { 597 if (sorted_mode_params[j].resX > 598 sorted_mode_params[idxBestMode].resX) 595 599 idxBestMode = j; 596 else if (sortModeParams[j].resX == sortModeParams[idxBestMode].resX) 600 else if (sorted_mode_params[j].resX == 601 sorted_mode_params[idxBestMode].resX) 597 602 { 598 if (sortModeParams[j].resY > sortModeParams[idxBestMode].resY) 603 if (sorted_mode_params[j].resY > 604 sorted_mode_params[idxBestMode].resY) 599 605 idxBestMode = j; 600 else if (sort ModeParams[j].resY ==601 sort ModeParams[idxBestMode].resY)606 else if (sorted_mode_params[j].resY == 607 sorted_mode_params[idxBestMode].resY) 602 608 { 603 if (sortModeParams[j].bpp > sortModeParams[idxBestMode].bpp) 609 if (sorted_mode_params[j].bpp > 610 sorted_mode_params[idxBestMode].bpp) 604 611 idxBestMode = j; 605 612 } … … 609 616 if (idxBestMode != iterator) 610 617 { 611 modeXchgPlace = sort ModeParams[iterator];612 sort ModeParams[iterator] = sortModeParams[idxBestMode];613 sort ModeParams[idxBestMode] = modeXchgPlace;618 modeXchgPlace = sorted_mode_params[iterator]; 619 sorted_mode_params[iterator] = sorted_mode_params[idxBestMode]; 620 sorted_mode_params[idxBestMode] = modeXchgPlace; 614 621 } 615 622 iterator++; … … 617 624 618 625 /* first search for video argument in multiboot options */ 619 vbe_usedMode = findModeUsingCmdline(sortModeParams, numberOfModes); 620 if (vbe_usedMode == (uint16_t)-1) 626 vbe_used_mode = find_mode_using_cmdline(sorted_mode_params, 627 number_of_modes); 628 if (vbe_used_mode == (uint16_t)-1) 621 629 { 622 630 printk(FB_VESA_NAME " video on command line not provided" 623 631 "\n\ttrying EDID ...\n"); 624 632 /* second search monitor for good resolution */ 625 vbe_usedMode = findModeUsingEDID(sortModeParams, numberOfModes); 626 if (vbe_usedMode == (uint16_t)-1) 633 vbe_used_mode = find_mode_using_EDID(sorted_mode_params, 634 number_of_modes); 635 if (vbe_used_mode == (uint16_t)-1) 627 636 { 628 637 printk(FB_VESA_NAME" monitor's EDID video parameters not supported" 629 638 "\n\tusing mode with highest resolution, bpp\n"); 630 639 /* third set highest values */ 631 vbe_used Mode = sortModeParams[0].modeNumber;640 vbe_used_mode = sorted_mode_params[0].mode_number; 632 641 } 633 642 } 634 643 635 644 /* fill framebuffer structs with info about selected mode */ 636 vbe_ret_val = VBE ModeInformation(mib, vbe_usedMode);645 vbe_ret_val = VBE_mode_information(mib, vbe_used_mode); 637 646 if ((vbe_ret_val&0xff)!=VBE_functionSupported || 638 647 (vbe_ret_val>>8)!=VBE_callSuccessful) … … 668 677 669 678 /* set selected mode */ 670 vbe_ret_val = VBE SetMode(vbe_usedMode | VBE_linearFlatFrameBufMask,671 ( struct VBE_CRTCInfoBlock *)(i386_get_default_rm_buffer(&size)));679 vbe_ret_val = VBE_set_mode(vbe_used_mode | VBE_linearFlatFrameBufMask, 680 (VBE_CRTC_info_block *)(i386_get_default_rm_buffer(&size))); 672 681 if (vbe_ret_val>>8 == VBE_callFailed) 673 682 printk(FB_VESA_NAME " VBE: Requested mode is not available."); … … 800 809 static int get_fix_screen_info( struct fb_fix_screeninfo *info ) 801 810 { 802 printk("get_fix_screen_info\n");803 811 *info = fb_fix; 804 812 return 0; … … 807 815 static int get_var_screen_info( struct fb_var_screeninfo *info ) 808 816 { 809 printk("get_var_screen_info\n");810 817 *info = fb_var; 811 818 return 0; -
c/src/lib/libbsp/i386/pc386/include/edid.h
radc1dbeb rd78eac6 35 35 36 36 #include <rtems/score/basedefs.h> 37 #define EDID_PACKED_ATTRIBUTE RTEMS_COMPILER_PACKED_ATTRIBUTE38 37 #define EDID_INLINE_ROUTINE RTEMS_INLINE_ROUTINE 39 38 … … 71 70 #define EDID1_DTD_HorizontalSyncIsPositiveMask 0x1 72 71 73 struct DetailedTimingDescriptor{72 typedef struct { 74 73 uint8_t PixelClock_div10000[2]; 75 74 uint8_t HorizontalActiveLow; … … 89 88 uint8_t VerticalBorder; 90 89 uint8_t Flags; 91 } EDID_PACKED_ATTRIBUTE;92 93 EDID_INLINE_ROUTINE uint16_t DTD_ HorizontalActive (94 struct DetailedTimingDescriptor *dtd)90 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_detailed_timing_descriptor; 91 92 EDID_INLINE_ROUTINE uint16_t DTD_horizontal_active ( 93 EDID_detailed_timing_descriptor *dtd) 95 94 { 96 95 return (dtd->HorizontalActiveLow | … … 98 97 } 99 98 100 EDID_INLINE_ROUTINE uint16_t DTD_ HorizontalBlanking (101 struct DetailedTimingDescriptor *dtd)99 EDID_INLINE_ROUTINE uint16_t DTD_horizontal_blanking ( 100 EDID_detailed_timing_descriptor *dtd) 102 101 { 103 102 return (dtd->HorizontalBlankingLow | … … 105 104 } 106 105 107 EDID_INLINE_ROUTINE uint16_t DTD_ VerticalActive (108 struct DetailedTimingDescriptor *dtd)106 EDID_INLINE_ROUTINE uint16_t DTD_vertical_active ( 107 EDID_detailed_timing_descriptor *dtd) 109 108 { 110 109 return (dtd->VerticalActiveLow | … … 112 111 } 113 112 114 EDID_INLINE_ROUTINE uint16_t DTD_ VerticalBlanking (115 struct DetailedTimingDescriptor *dtd)113 EDID_INLINE_ROUTINE uint16_t DTD_vertical_blanking ( 114 EDID_detailed_timing_descriptor *dtd) 116 115 { 117 116 return (dtd->VerticalBlankingLow | … … 119 118 } 120 119 121 EDID_INLINE_ROUTINE uint16_t DTD_ VerticalSyncPulseWidth (122 struct DetailedTimingDescriptor *dtd)120 EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_pulse_width ( 121 EDID_detailed_timing_descriptor *dtd) 123 122 { 124 123 return ((dtd->VerticalSyncPulseWidth_OffsetLow & 0xF) | … … 126 125 } 127 126 128 EDID_INLINE_ROUTINE uint16_t DTD_ VerticalSyncOffset (129 struct DetailedTimingDescriptor *dtd)127 EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_offset ( 128 EDID_detailed_timing_descriptor *dtd) 130 129 { 131 130 return ((dtd->VerticalSyncPulseWidth_OffsetLow >> 4) | … … 133 132 } 134 133 135 EDID_INLINE_ROUTINE uint16_t DTD_ HorizontalSyncPulseWidth (136 struct DetailedTimingDescriptor *dtd)134 EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_pulse_width ( 135 EDID_detailed_timing_descriptor *dtd) 137 136 { 138 137 return (dtd->HorizontalSyncPulseWidthLow | … … 140 139 } 141 140 142 EDID_INLINE_ROUTINE uint16_t DTD_ HorizontalSyncOffset (143 struct DetailedTimingDescriptor *dtd)141 EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_offset ( 142 EDID_detailed_timing_descriptor *dtd) 144 143 { 145 144 return (dtd->HorizontalSyncOffsetLow | … … 147 146 } 148 147 149 EDID_INLINE_ROUTINE uint16_t DTD_ VerticalImageSize (150 struct DetailedTimingDescriptor *dtd)148 EDID_INLINE_ROUTINE uint16_t DTD_vertical_image_size ( 149 EDID_detailed_timing_descriptor *dtd) 151 150 { 152 151 return (dtd->VerticalImageSizeLow | … … 154 153 } 155 154 156 EDID_INLINE_ROUTINE uint16_t DTD_ HorizontalImageSize (157 struct DetailedTimingDescriptor *dtd)155 EDID_INLINE_ROUTINE uint16_t DTD_horizontal_image_size ( 156 EDID_detailed_timing_descriptor *dtd) 158 157 { 159 158 return (dtd->HorizontalImageSizeLow | … … 161 160 } 162 161 163 struct ColorPointData{162 typedef struct { 164 163 uint8_t ColorPointWhitePointIndexNumber; 165 164 uint8_t ColorPointWhiteLowBits; … … 167 166 uint8_t ColorPointWhite_y; 168 167 uint8_t ColorPointWhiteGamma; 169 } EDID_PACKED_ATTRIBUTE;168 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_color_point_data; 170 169 171 170 /* Basic Display Parameters */ … … 176 175 177 176 #define EDID_DTT_MonitorRangeLimits 0xFD 178 struct MonitorRangeLimits{177 typedef struct { 179 178 uint8_t MinVerticalRateInHz; 180 179 uint8_t MaxVerticalRateInHz; … … 185 184 Version 1.0, December 18, 1996 */ 186 185 uint8_t GTFStandard[8]; 187 } EDID_PACKED_ATTRIBUTE;186 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_monitor_range_limits; 188 187 189 188 #define EDID_DTT_MonitorName 0xFC … … 223 222 #define EDID_CVT_PrefVertRate75Hz 2 224 223 #define EDID_CVT_PrefVertRate85Hz 3 225 struct CVT3ByteCodeDescriptor{224 typedef struct { 226 225 uint8_t AddressableLinesLow; 227 226 uint8_t AspectRatio_AddressableLinesHigh; 228 227 uint8_t VerticalRate_PreferredVerticalRate; 229 } EDID_PACKED_ATTRIBUTE;230 struct CVTTimingCodes3B{228 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_CVT_3_byte_code_descriptor; 229 typedef struct { 231 230 uint8_t VersionNumber; 232 struct CVT3ByteCodeDescriptor cvt[4];233 } EDID_PACKED_ATTRIBUTE;234 235 EDID_INLINE_ROUTINE uint16_t edid1_CVT_ AddressableLinesHigh (236 struct CVT3ByteCodeDescriptor *cvt)231 EDID_CVT_3_byte_code_descriptor cvt[4]; 232 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_CVT_timing_codes_3B; 233 234 EDID_INLINE_ROUTINE uint16_t edid1_CVT_addressable_lines_high ( 235 EDID_CVT_3_byte_code_descriptor *cvt) 237 236 { 238 237 return (cvt->AddressableLinesLow | … … 242 241 } 243 242 244 EDID_INLINE_ROUTINE uint8_t edid1_CVT_ AspectRatio (245 struct CVT3ByteCodeDescriptor *cvt)243 EDID_INLINE_ROUTINE uint8_t edid1_CVT_aspect_ratio ( 244 EDID_CVT_3_byte_code_descriptor *cvt) 246 245 { 247 246 return (cvt->AspectRatio_AddressableLinesHigh >> EDID1_CVT_AspectRatioOff) & … … 250 249 251 250 #define EDID_DTT_EstablishedTimingsIII 0xF7 252 struct EstablishedTimingsIII{251 typedef struct { 253 252 uint8_t RevisionNumber; 254 253 uint8_t EST_III[12]; 255 } EDID_PACKED_ATTRIBUTE;254 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_established_timings_III; 256 255 enum EST_III { 257 256 EST_1152x864_75Hz = 0, … … 309 308 /* DTT 0x0 - 0xF are manufacturer specific */ 310 309 311 struct MonitorDescriptor{310 typedef struct { 312 311 uint8_t Flag0[2]; 313 312 uint8_t Flag1; … … 315 314 uint8_t Flag2; 316 315 uint8_t DescriptorData[13]; 317 } EDID_PACKED_ATTRIBUTE;318 319 union DTD_MD {320 struct DetailedTimingDescriptor dtd;321 struct MonitorDescriptor md;322 } EDID_PACKED_ATTRIBUTE;316 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_monitor_descriptor; 317 318 union EDID_DTD_MD { 319 EDID_detailed_timing_descriptor dtd; 320 EDID_monitor_descriptor md; 321 } RTEMS_COMPILER_PACKED_ATTRIBUTE; 323 322 324 323 #define EDID1_STI_ImageAspectRatioOff 0 … … 332 331 #define EDID_STI_AspectRatio_5_4 2 333 332 #define EDID_STI_AspectRatio_16_9 3 334 struct StandardTimingIdentification{333 typedef struct { 335 334 uint8_t HorizontalActivePixels; 336 335 uint8_t ImageAspectRatio_RefreshRate; 337 } EDID_PACKED_ATTRIBUTE;336 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_standard_timing_identification; 338 337 339 338 /* Video Input Definition */ … … 410 409 #define EDID_DisplayType_RGB444YCrCb444YCrCb422 3 411 410 412 struct edid1{411 typedef struct { 413 412 uint8_t Header[8]; 414 413 /* Vendor Product Identification */ … … 443 442 uint8_t EST_I_II_Man[3]; 444 443 /* Standard Timing Identification */ 445 struct StandardTimingIdentification STI[8];444 EDID_standard_timing_identification STI[8]; 446 445 /* Detailed Timing Descriptions / Monitor Descriptions */ 447 union DTD_MD dtd_md[4];446 union EDID_DTD_MD dtd_md[4]; 448 447 uint8_t ExtensionFlag; 449 448 uint8_t Checksum; 450 } EDID_PACKED_ATTRIBUTE;451 452 EDID_INLINE_ROUTINE uint16_t edid1_RedX ( structedid1 *edid) {449 } RTEMS_COMPILER_PACKED_ATTRIBUTE EDID_edid1; 450 451 EDID_INLINE_ROUTINE uint16_t edid1_RedX (EDID_edid1 *edid) { 453 452 return (edid->RedXHigh<<2) | (edid->GreenRedLow>>6); 454 453 } 455 EDID_INLINE_ROUTINE uint16_t edid1_RedY ( structedid1 *edid) {454 EDID_INLINE_ROUTINE uint16_t edid1_RedY (EDID_edid1 *edid) { 456 455 return (edid->RedYHigh<<2) | (edid->GreenRedLow>>4)&&0x3; 457 456 } 458 EDID_INLINE_ROUTINE uint16_t edid1_GreenX ( structedid1 *edid) {457 EDID_INLINE_ROUTINE uint16_t edid1_GreenX (EDID_edid1 *edid) { 459 458 return (edid->GreenXHigh<<2) | (edid->GreenRedLow>>2)&&0x3; 460 459 } 461 EDID_INLINE_ROUTINE uint16_t edid1_GreenY ( structedid1 *edid) {460 EDID_INLINE_ROUTINE uint16_t edid1_GreenY (EDID_edid1 *edid) { 462 461 return (edid->GreenYHigh<<2) | (edid->GreenRedLow&0x3); 463 462 } 464 EDID_INLINE_ROUTINE uint16_t edid1_BlueX ( structedid1 *edid) {463 EDID_INLINE_ROUTINE uint16_t edid1_BlueX (EDID_edid1 *edid) { 465 464 return (edid->BlueXHigh<<2) | (edid->WhiteBlueLow>>6); 466 465 } 467 EDID_INLINE_ROUTINE uint16_t edid1_BlueY ( structedid1 *edid) {466 EDID_INLINE_ROUTINE uint16_t edid1_BlueY (EDID_edid1 *edid) { 468 467 return (edid->BlueYHigh<<2) | (edid->WhiteBlueLow>>4)&&0x3; 469 468 } 470 EDID_INLINE_ROUTINE uint16_t edid1_WhiteX ( structedid1 *edid) {469 EDID_INLINE_ROUTINE uint16_t edid1_WhiteX (EDID_edid1 *edid) { 471 470 return (edid->WhiteXHigh<<2) | (edid->WhiteBlueLow>>2)&&0x3; 472 471 } 473 EDID_INLINE_ROUTINE uint16_t edid1_WhiteY ( structedid1 *edid) {472 EDID_INLINE_ROUTINE uint16_t edid1_WhiteY (EDID_edid1 *edid) { 474 473 return (edid->WhiteYHigh<<2) | (edid->WhiteBlueLow&0x3); 475 474 } 476 475 477 enum edid1_ EstablishedTimings {476 enum edid1_established_timings { 478 477 /* Established Timings I */ 479 478 EST_800x600_60Hz = 0, … … 498 497 }; 499 498 500 EDID_INLINE_ROUTINE uint8_t edid1_ EstablishedTim (501 structedid1 *edid,502 enum edid1_ EstablishedTimings est)499 EDID_INLINE_ROUTINE uint8_t edid1_established_tim ( 500 EDID_edid1 *edid, 501 enum edid1_established_timings est) 503 502 { 504 503 return (uint8_t)(edid->EST_I_II_Man[est/8] & (est%8)); -
c/src/lib/libbsp/i386/pc386/include/fb_vesa.h
radc1dbeb rd78eac6 46 46 * -1 error calling graphical bios 47 47 */ 48 uint32_t VBE ControllerInformation (49 struct VBE_VbeInfoBlock *infoBlock,50 uint16_t queried VBEVersion48 uint32_t VBE_controller_information ( 49 VBE_vbe_info_block *info_block, 50 uint16_t queried_VBE_Version 51 51 ); 52 52 … … 60 60 * -1 error calling graphical bios 61 61 */ 62 uint32_t VBE ModeInformation (63 struct VBE_ModeInfoBlock *infoBlock,64 uint16_t mode Number62 uint32_t VBE_mode_information ( 63 VBE_mode_info_block *info_block, 64 uint16_t mode_number 65 65 ); 66 66 … … 74 74 * -1 error calling graphical bios 75 75 */ 76 uint32_t VBE SetMode (77 uint16_t mode Number,78 struct VBE_CRTCInfoBlock *infoBlock76 uint32_t VBE_set_mode ( 77 uint16_t mode_number, 78 VBE_CRTC_info_block *info_block 79 79 ); 80 80 … … 86 86 * -1 error calling graphical bios 87 87 */ 88 uint32_t VBE CurrentMode (89 uint16_t *mode Number88 uint32_t VBE_current_mode ( 89 uint16_t *mode_number 90 90 ); 91 91 … … 102 102 * -1 error calling graphical bios 103 103 */ 104 uint32_t VBE ReportDDCCapabilities (105 uint16_t controller UnitNumber,106 uint8_t *seconds ToTransferEDIDBlock,107 uint8_t *DDC LevelSupported104 uint32_t VBE_report_DDC_capabilities ( 105 uint16_t controller_unit_number, 106 uint8_t *seconds_to_transfer_EDID_block, 107 uint8_t *DDC_level_supported 108 108 ); 109 109 … … 117 117 * -1 error calling graphical bios 118 118 */ 119 uint32_t VBE ReadEDID (120 uint16_t controller UnitNumber,121 uint16_t EDID BlockNumber,122 structedid1 *buffer119 uint32_t VBE_read_EDID ( 120 uint16_t controller_unit_number, 121 uint16_t EDID_block_number, 122 EDID_edid1 *buffer 123 123 ); 124 124 -
c/src/lib/libbsp/i386/pc386/include/tblsizes.h
radc1dbeb rd78eac6 23 23 #define IDT_SIZE (256) 24 24 #define GDT_SIZE (3 + NUM_APP_DRV_GDT_DESCRIPTORS) 25 -
c/src/lib/libbsp/i386/pc386/include/vbe3.h
radc1dbeb rd78eac6 34 34 35 35 #include <rtems/score/basedefs.h> 36 #define VBE3_PACKED_ATTRIBUTE RTEMS_COMPILER_PACKED_ATTRIBUTE37 36 38 37 /* VESA BIOS EXTENSION (VBE) Core functions Standard … … 157 156 Specification Information */ 158 157 /* *** Structures *** */ 159 struct VBE_FarPtr{158 typedef struct { 160 159 uint16_t offset; 161 160 uint16_t selector; 162 } VBE3_PACKED_ATTRIBUTE;163 164 struct VBE_PMInfoBlock{161 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_far_pointer; 162 163 typedef struct { 165 164 uint8_t Signature[4]; /* PM Info Block Signature */ 166 165 uint16_t EntryPoint; /* Offset of PM entry point within BIOS */ … … 173 172 uint8_t InProtectMode; /* Set to 1 when in protected mode */ 174 173 uint8_t Checksum; /* Checksum byte for structure */ 175 } VBE3_PACKED_ATTRIBUTE;174 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_protected_mode_info_block; 176 175 177 176 /* General VBE signature */ … … 182 181 #define VBE_END_OF_VideoModeList 0xFFFF 183 182 #define VBE_STUB_VideoModeList 0xFFFF 184 struct VBE_VbeInfoBlock{183 typedef struct { 185 184 uint8_t VbeSignature[4]; /* VBE Signature */ 186 185 uint16_t VbeVersion; /* VBE Version */ … … 197 196 /* area */ 198 197 uint8_t OemData[256]; /* Data Area for OEM Strings */ 199 } VBE3_PACKED_ATTRIBUTE;200 201 struct VBE_ModeInfoBlock{198 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_vbe_info_block; 199 200 typedef struct { 202 201 /* Mandatory information for all VBE revisions */ 203 202 uint16_t ModeAttributes; /* mode attributes */ … … 253 252 (in Hz) for graphics mode */ 254 253 uint8_t Reserved3[189]; /* remainder of ModeInfoBlock */ 255 } VBE3_PACKED_ATTRIBUTE;256 257 struct VBE_CRTCInfoBlock{254 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_mode_info_block; 255 256 typedef struct { 258 257 uint16_t HorizontalTotal; /* Horizontal total in pixels */ 259 258 uint16_t HorizontalSyncStart; /* Horizontal sync start in pixels */ … … 266 265 uint16_t RefreshRate; /* Refresh rate in units of 0.01 Hz */ 267 266 uint8_t Reserved[40]; /* remainder of ModeInfoBlock */ 268 } VBE3_PACKED_ATTRIBUTE;269 270 struct VBE_PaletteEntry{267 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_CRTC_info_block; 268 269 typedef struct { 271 270 uint8_t Blue; /* Blue channel value (6 or 8 bits) */ 272 271 uint8_t Green; /* Green channel value (6 or 8 bits) */ 273 272 uint8_t Red; /* Red channel value(6 or 8 bits) */ 274 273 uint8_t Alignment; /* DWORD alignment byte (unused) */ 275 } VBE3_PACKED_ATTRIBUTE;276 277 struct VBE_SupVbeInfoBlock{274 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_palette_entry; 275 276 typedef struct { 278 277 uint8_t SupVbeSignature[7]; /* Supplemental VBE Signature */ 279 278 uint16_t SupVbeVersion; /* Supplemental VBE Version */ … … 287 286 strings and future */ 288 287 /* expansion */ 289 } VBE3_PACKED_ATTRIBUTE;288 } RTEMS_COMPILER_PACKED_ATTRIBUTE VBE_supplemental_vbe_info_block; 290 289 291 290 /* VbeInfoBlock Capabilities */ … … 461 460 462 461 #endif /* _VBE_H */ 463 -
c/src/lib/libbsp/i386/shared/realmode_int/realmode_int.c
radc1dbeb rd78eac6 182 182 } 183 183 184 int i386_real_interrupt_call(uint8_t interrupt Number,184 int i386_real_interrupt_call(uint8_t interrupt_number, 185 185 i386_realmode_interrupt_registers *ir) 186 186 { … … 271 271 ); 272 272 interrupt_number_ptr = (uint8_t *)(rm_swtch_code_dst+interrupt_number_off); 273 *interrupt_number_ptr = interrupt Number;273 *interrupt_number_ptr = interrupt_number; 274 274 /* execute code that jumps to coppied function, which switches to real mode, 275 275 loads registers with values passed to interrupt and executes interrupt */ … … 404 404 return 1; 405 405 } 406 -
c/src/lib/libbsp/i386/shared/realmode_int/realmode_int.h
radc1dbeb rd78eac6 75 75 * 1 call successful 76 76 */ 77 extern int i386_real_interrupt_call(uint8_t interruptNumber, i386_realmode_interrupt_registers *ir); 77 extern int i386_real_interrupt_call( 78 uint8_t interrupt_number, 79 i386_realmode_interrupt_registers *ir 80 ); 78 81 79 82 #ifdef __cplusplus
Note: See TracChangeset
for help on using the changeset viewer.