31BOOLEAN mConInIsConnect =
FALSE;
37 TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE,
133 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,
189 TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,
319 if (((KeyData->KeyState.KeyToggleState & KEY_STATE_VALID_EXPOSED) == KEY_STATE_VALID_EXPOSED) &&
320 (KeyData->KeyState.KeyToggleState != mConIn.PhysicalKeyToggleState))
325 for (Index = 0; Index < mConIn.CurrentNumberOfExConsoles; Index++) {
326 mConIn.TextInExList[Index]->SetState (
327 mConIn.TextInExList[Index],
328 &KeyData->KeyState.KeyToggleState
332 mConIn.PhysicalKeyToggleState = KeyData->KeyState.KeyToggleState;
333 DEBUG ((DEBUG_INFO,
"Current toggle state is 0x%02x\n", mConIn.PhysicalKeyToggleState));
358 Private->PhysicalKeyToggleState = KEY_STATE_VALID_EXPOSED;
366 Private->VirtualKeyStateExported =
FALSE;
371 KeyData.
Key.ScanCode = SCAN_NULL;
372 KeyData.
Key.UnicodeChar = CHAR_NULL;
375 Private->TextInEx.RegisterKeyNotify (
401 Private->PhysicalKeyToggleState = KEY_STATE_VALID_EXPOSED;
409 Private->VirtualKeyStateExported =
FALSE;
411 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
412 Private->TextInExList[Index]->SetState (
413 Private->TextInExList[Index],
414 &Private->PhysicalKeyToggleState
449 &gConSplitterConInDriverBinding,
451 &gConSplitterConInComponentName,
452 &gConSplitterConInComponentName2
459 &gConSplitterSimplePointerDriverBinding,
461 &gConSplitterSimplePointerComponentName,
462 &gConSplitterSimplePointerComponentName2
469 &gConSplitterAbsolutePointerDriverBinding,
471 &gConSplitterAbsolutePointerComponentName,
472 &gConSplitterAbsolutePointerComponentName2
479 &gConSplitterConOutDriverBinding,
481 &gConSplitterConOutComponentName,
482 &gConSplitterConOutComponentName2
489 &gConSplitterStdErrDriverBinding,
491 &gConSplitterStdErrComponentName,
492 &gConSplitterStdErrComponentName2
513 if (!EFI_ERROR (Status)) {
514 Status =
gBS->InstallMultipleProtocolInterfaces (
515 &mConIn.VirtualHandle,
516 &gEfiSimpleTextInProtocolGuid,
518 &gEfiSimpleTextInputExProtocolGuid,
520 &gEfiSimplePointerProtocolGuid,
521 &mConIn.SimplePointer,
522 &gEfiAbsolutePointerProtocolGuid,
523 &mConIn.AbsolutePointer,
526 if (!EFI_ERROR (Status)) {
540 if (!EFI_ERROR (Status)) {
541 Status =
gBS->InstallMultipleProtocolInterfaces (
542 &mConOut.VirtualHandle,
543 &gEfiSimpleTextOutProtocolGuid,
547 if (!EFI_ERROR (Status)) {
561 if (!EFI_ERROR (Status)) {
562 Status =
gBS->InstallMultipleProtocolInterfaces (
563 &mStdErr.VirtualHandle,
564 &gEfiSimpleTextOutProtocolGuid,
568 if (!EFI_ERROR (Status)) {
582 gBS->CalculateCrc32 (
608 UINTN TextInExListCount;
615 &ConInPrivate->TextInListCount,
616 (VOID **)&ConInPrivate->TextInList
618 if (EFI_ERROR (Status)) {
619 return EFI_OUT_OF_RESOURCES;
625 Status =
gBS->CreateEvent (
637 TextInExListCount = ConInPrivate->TextInExListCount;
641 (VOID **)&ConInPrivate->KeyQueue
643 if (EFI_ERROR (Status)) {
644 return EFI_OUT_OF_RESOURCES;
652 &ConInPrivate->TextInExListCount,
653 (VOID **)&ConInPrivate->TextInExList
655 if (EFI_ERROR (Status)) {
656 return EFI_OUT_OF_RESOURCES;
662 Status =
gBS->CreateEvent (
675 ConInPrivate->AbsolutePointer.
Mode = &ConInPrivate->AbsolutePointerMode;
681 &ConInPrivate->AbsolutePointerListCount,
682 (VOID **)&ConInPrivate->AbsolutePointerList
684 if (EFI_ERROR (Status)) {
685 return EFI_OUT_OF_RESOURCES;
691 Status =
gBS->CreateEvent (
700 ConInPrivate->SimplePointer.
Mode = &ConInPrivate->SimplePointerMode;
706 &ConInPrivate->PointerListCount,
707 (VOID **)&ConInPrivate->PointerList
709 if (EFI_ERROR (Status)) {
710 return EFI_OUT_OF_RESOURCES;
716 Status =
gBS->CreateEvent (
727 Status =
gBS->CreateEventEx (
732 &gConnectConInEventGuid,
733 &ConInPrivate->ConnectConInEvent
771 ConOutPrivate->TextOut.
Mode = &ConOutPrivate->TextOutMode;
777 ConOutPrivate->TextOutMode.
Mode = 0xFF;
783 &ConOutPrivate->TextOutListCount,
784 (VOID **)&ConOutPrivate->TextOutList
786 if (EFI_ERROR (Status)) {
787 return EFI_OUT_OF_RESOURCES;
795 &ConOutPrivate->TextOutQueryDataCount,
796 (VOID **)&ConOutPrivate->TextOutQueryData
798 if (EFI_ERROR (Status)) {
799 return EFI_OUT_OF_RESOURCES;
805 ConOutPrivate->TextOutQueryData[0].Columns = 80;
806 ConOutPrivate->TextOutQueryData[0].Rows = 25;
821 return EFI_OUT_OF_RESOURCES;
825 return EFI_OUT_OF_RESOURCES;
833 return EFI_OUT_OF_RESOURCES;
836 Info = &ConOutPrivate->GraphicsOutputModeBuffer[0];
856 ConOutPrivate->GraphicsOutput.
Mode->
Mode = 0xffff;
857 ConOutPrivate->GraphicsOutput.SetMode (&ConOutPrivate->GraphicsOutput, 0);
888 if ((ControllerHandle == mConIn.VirtualHandle) ||
889 (ControllerHandle == mConOut.VirtualHandle) ||
890 (ControllerHandle == mStdErr.VirtualHandle)
893 return EFI_UNSUPPORTED;
899 Status =
gBS->OpenProtocol (
903 This->DriverBindingHandle,
905 EFI_OPEN_PROTOCOL_BY_DRIVER
908 if (EFI_ERROR (Status)) {
915 This->DriverBindingHandle,
945 &gEfiConsoleInDeviceGuid
972 &gEfiSimplePointerProtocolGuid
999 &gEfiAbsolutePointerProtocolGuid
1026 &gEfiConsoleOutDeviceGuid
1053 &gEfiStandardErrorDeviceGuid
1081 OUT VOID **Interface
1090 Status =
gBS->OpenProtocol (
1094 This->DriverBindingHandle,
1096 EFI_OPEN_PROTOCOL_BY_DRIVER
1098 if (EFI_ERROR (Status)) {
1105 Status =
gBS->OpenProtocol (
1109 This->DriverBindingHandle,
1110 ConSplitterVirtualHandle,
1111 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
1113 if (EFI_ERROR (Status)) {
1120 Status =
gBS->OpenProtocol (
1124 This->DriverBindingHandle,
1125 ConSplitterVirtualHandle,
1126 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1129 if (!EFI_ERROR (Status)) {
1136 gBS->CloseProtocol (
1139 This->DriverBindingHandle,
1140 ConSplitterVirtualHandle
1147 gBS->CloseProtocol (
1150 This->DriverBindingHandle,
1188 mConIn.VirtualHandle,
1189 &gEfiConsoleInDeviceGuid,
1190 &gEfiSimpleTextInProtocolGuid,
1193 if (EFI_ERROR (Status)) {
1201 if (EFI_ERROR (Status)) {
1205 Status =
gBS->OpenProtocol (
1207 &gEfiSimpleTextInputExProtocolGuid,
1209 This->DriverBindingHandle,
1210 mConIn.VirtualHandle,
1211 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1213 if (!EFI_ERROR (Status)) {
1254 mConIn.VirtualHandle,
1255 &gEfiSimplePointerProtocolGuid,
1256 &gEfiSimplePointerProtocolGuid,
1257 (VOID **)&SimplePointer
1259 if (EFI_ERROR (Status)) {
1299 mConIn.VirtualHandle,
1300 &gEfiAbsolutePointerProtocolGuid,
1301 &gEfiAbsolutePointerProtocolGuid,
1302 (VOID **)&AbsolutePointer
1305 if (EFI_ERROR (Status)) {
1349 mConOut.VirtualHandle,
1350 &gEfiConsoleOutDeviceGuid,
1351 &gEfiSimpleTextOutProtocolGuid,
1354 if (EFI_ERROR (Status)) {
1358 GraphicsOutput =
NULL;
1363 Status =
gBS->OpenProtocol (
1365 &gEfiGraphicsOutputProtocolGuid,
1366 (VOID **)&GraphicsOutput,
1367 This->DriverBindingHandle,
1368 mConOut.VirtualHandle,
1369 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1372 if (EFI_ERROR (Status) &&
FeaturePcdGet (PcdUgaConsumeSupport)) {
1378 &gEfiUgaDrawProtocolGuid,
1380 This->DriverBindingHandle,
1381 mConOut.VirtualHandle,
1382 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1390 mConOut.TextOutMode.
Mode = 0xFF;
1403 if (GraphicsOutput !=
NULL) {
1404 Status = GraphicsOutput->QueryMode (GraphicsOutput, GraphicsOutput->
Mode->
Mode, &SizeOfInfo, &Info);
1405 if (EFI_ERROR (Status)) {
1413 mConOut.UgaColorDepth = 32;
1414 mConOut.UgaRefreshRate = 60;
1417 }
else if (UgaDraw !=
NULL) {
1418 Status = UgaDraw->GetMode (
1420 &mConOut.UgaHorizontalResolution,
1421 &mConOut.UgaVerticalResolution,
1422 &mConOut.UgaColorDepth,
1423 &mConOut.UgaRefreshRate
1461 mStdErr.VirtualHandle,
1462 &gEfiStandardErrorDeviceGuid,
1463 &gEfiSimpleTextOutProtocolGuid,
1466 if (EFI_ERROR (Status)) {
1474 mStdErr.TextOutMode.
Mode = 0xFF;
1514 Status =
gBS->OpenProtocol (
1518 This->DriverBindingHandle,
1520 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1522 if (EFI_ERROR (Status)) {
1529 gBS->CloseProtocol (
1532 This->DriverBindingHandle,
1533 ConSplitterVirtualHandle
1536 gBS->CloseProtocol (
1539 This->DriverBindingHandle,
1572 if (NumberOfChildren == 0) {
1576 Status =
gBS->OpenProtocol (
1578 &gEfiSimpleTextInputExProtocolGuid,
1580 This->DriverBindingHandle,
1582 EFI_OPEN_PROTOCOL_GET_PROTOCOL
1584 if (!EFI_ERROR (Status)) {
1590 if (EFI_ERROR (Status)) {
1601 mConIn.VirtualHandle,
1602 &gEfiConsoleInDeviceGuid,
1603 &gEfiSimpleTextInProtocolGuid,
1606 if (EFI_ERROR (Status)) {
1642 if (NumberOfChildren == 0) {
1652 mConIn.VirtualHandle,
1653 &gEfiSimplePointerProtocolGuid,
1654 &gEfiSimplePointerProtocolGuid,
1655 (VOID **)&SimplePointer
1657 if (EFI_ERROR (Status)) {
1693 if (NumberOfChildren == 0) {
1703 mConIn.VirtualHandle,
1704 &gEfiAbsolutePointerProtocolGuid,
1705 &gEfiAbsolutePointerProtocolGuid,
1706 (VOID **)&AbsolutePointer
1708 if (EFI_ERROR (Status)) {
1743 if (NumberOfChildren == 0) {
1753 mConOut.VirtualHandle,
1754 &gEfiConsoleOutDeviceGuid,
1755 &gEfiSimpleTextOutProtocolGuid,
1758 if (EFI_ERROR (Status)) {
1793 if (NumberOfChildren == 0) {
1803 mStdErr.VirtualHandle,
1804 &gEfiStandardErrorDeviceGuid,
1805 &gEfiSimpleTextOutProtocolGuid,
1808 if (EFI_ERROR (Status)) {
1837 IN OUT VOID **Buffer
1848 ElementSize * (*Count),
1849 ElementSize * ((*Count) + CONSOLE_SPLITTER_ALLOC_UNIT),
1853 return EFI_OUT_OF_RESOURCES;
1856 *Count += CONSOLE_SPLITTER_ALLOC_UNIT;
1882 if (Private->CurrentNumberOfConsoles >= Private->TextInListCount) {
1885 &Private->TextInListCount,
1886 (VOID **)&Private->TextInList
1888 if (EFI_ERROR (Status)) {
1889 return EFI_OUT_OF_RESOURCES;
1896 Private->TextInList[Private->CurrentNumberOfConsoles] = TextIn;
1897 Private->CurrentNumberOfConsoles++;
1902 gBS->CheckEvent (TextIn->WaitForKey);
1929 for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {
1930 if (Private->TextInList[Index] == TextIn) {
1931 for ( ; Index < Private->CurrentNumberOfConsoles - 1; Index++) {
1932 Private->TextInList[Index] = Private->TextInList[Index + 1];
1935 Private->CurrentNumberOfConsoles--;
1940 return EFI_NOT_FOUND;
1962 UINTN TextInExListCount;
1967 if (Private->CurrentNumberOfExConsoles >= Private->TextInExListCount) {
1968 for (Link = Private->NotifyList.ForwardLink; Link != &Private->NotifyList; Link = Link->ForwardLink) {
1969 CurrentNotify = TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS (Link);
1970 TextInExListCount = Private->TextInExListCount;
1975 (VOID **)&CurrentNotify->NotifyHandleList
1977 if (EFI_ERROR (Status)) {
1978 return EFI_OUT_OF_RESOURCES;
1982 TextInExListCount = Private->TextInExListCount;
1986 (VOID **)&Private->KeyQueue
1988 if (EFI_ERROR (Status)) {
1989 return EFI_OUT_OF_RESOURCES;
1994 &Private->TextInExListCount,
1995 (VOID **)&Private->TextInExList
1997 if (EFI_ERROR (Status)) {
1998 return EFI_OUT_OF_RESOURCES;
2005 for (Link = Private->NotifyList.ForwardLink; Link != &Private->NotifyList; Link = Link->ForwardLink) {
2006 CurrentNotify = TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS (Link);
2007 Status = TextInEx->RegisterKeyNotify (
2009 &CurrentNotify->KeyData,
2010 CurrentNotify->KeyNotificationFn,
2011 &CurrentNotify->NotifyHandleList[Private->CurrentNumberOfExConsoles]
2013 if (EFI_ERROR (Status)) {
2014 for (Link = Link->BackLink; Link != &Private->NotifyList; Link = Link->BackLink) {
2015 CurrentNotify = TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS (Link);
2016 TextInEx->UnregisterKeyNotify (
2018 CurrentNotify->NotifyHandleList[Private->CurrentNumberOfExConsoles]
2029 Private->TextInExList[Private->CurrentNumberOfExConsoles] = TextInEx;
2030 Private->CurrentNumberOfExConsoles++;
2035 TextInEx->SetState (TextInEx, &Private->PhysicalKeyToggleState);
2040 gBS->CheckEvent (TextInEx->WaitForKeyEx);
2067 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
2068 if (Private->TextInExList[Index] == TextInEx) {
2069 for ( ; Index < Private->CurrentNumberOfExConsoles - 1; Index++) {
2070 Private->TextInExList[Index] = Private->TextInExList[Index + 1];
2073 Private->CurrentNumberOfExConsoles--;
2078 return EFI_NOT_FOUND;
2102 if (Private->CurrentNumberOfPointers >= Private->PointerListCount) {
2105 &Private->PointerListCount,
2106 (VOID **)&Private->PointerList
2108 if (EFI_ERROR (Status)) {
2109 return EFI_OUT_OF_RESOURCES;
2116 Private->PointerList[Private->CurrentNumberOfPointers] = SimplePointer;
2117 Private->CurrentNumberOfPointers++;
2144 for (Index = 0; Index < Private->CurrentNumberOfPointers; Index++) {
2145 if (Private->PointerList[Index] == SimplePointer) {
2146 for ( ; Index < Private->CurrentNumberOfPointers - 1; Index++) {
2147 Private->PointerList[Index] = Private->PointerList[Index + 1];
2150 Private->CurrentNumberOfPointers--;
2155 return EFI_NOT_FOUND;
2179 if (Private->CurrentNumberOfAbsolutePointers >= Private->AbsolutePointerListCount) {
2182 &Private->AbsolutePointerListCount,
2183 (VOID **)&Private->AbsolutePointerList
2185 if (EFI_ERROR (Status)) {
2186 return EFI_OUT_OF_RESOURCES;
2193 Private->AbsolutePointerList[Private->CurrentNumberOfAbsolutePointers] = AbsolutePointer;
2194 Private->CurrentNumberOfAbsolutePointers++;
2221 for (Index = 0; Index < Private->CurrentNumberOfAbsolutePointers; Index++) {
2222 if (Private->AbsolutePointerList[Index] == AbsolutePointer) {
2223 for ( ; Index < Private->CurrentNumberOfAbsolutePointers - 1; Index++) {
2224 Private->AbsolutePointerList[Index] = Private->AbsolutePointerList[Index + 1];
2227 Private->CurrentNumberOfAbsolutePointers--;
2232 return EFI_NOT_FOUND;
2254 INT32 *TextOutModeMap;
2255 INT32 *OldTextOutModeMap;
2261 NewSize = Private->TextOutListCount *
sizeof (INT32);
2262 OldTextOutModeMap = Private->TextOutModeMap;
2263 TotalSize = NewSize * (Private->TextOutQueryDataCount);
2269 if (TextOutModeMap ==
NULL) {
2270 return EFI_OUT_OF_RESOURCES;
2273 SetMem (TextOutModeMap, TotalSize, 0xFF);
2274 Private->TextOutModeMap = TextOutModeMap;
2292 if (OldTextOutModeMap !=
NULL) {
2293 Size = Private->CurrentNumberOfConsoles *
sizeof (INT32);
2295 SrcAddress = OldTextOutModeMap;
2296 NewStepSize = NewSize /
sizeof (INT32);
2301 OldStepSize = NewStepSize - CONSOLE_SPLITTER_ALLOC_UNIT;
2306 while (Index < Private->TextOutMode.MaxMode) {
2307 CopyMem (TextOutModeMap, SrcAddress, Size);
2311 TextOutModeMap += NewStepSize;
2315 SrcAddress += OldStepSize;
2349 MaxMode = TextOut->Mode->MaxMode;
2350 Private->TextOutMode.MaxMode = MaxMode;
2356 while (MaxMode > (INT32)Private->TextOutQueryDataCount) {
2359 &Private->TextOutQueryDataCount,
2360 (VOID **)&Private->TextOutQueryData
2362 if (EFI_ERROR (Status)) {
2363 return EFI_OUT_OF_RESOURCES;
2371 if (EFI_ERROR (Status)) {
2372 return EFI_OUT_OF_RESOURCES;
2381 while (Mode < MaxMode) {
2382 Status = TextOut->QueryMode (
2385 &Private->TextOutQueryData[Mode].Columns,
2386 &Private->TextOutQueryData[Mode].Rows
2392 if ((EFI_ERROR (Status)) && (Mode == 1)) {
2393 Private->TextOutQueryData[Mode].Columns = 0;
2394 Private->TextOutQueryData[Mode].Rows = 0;
2397 Private->TextOutModeMap[Index] = Mode;
2399 Index += Private->TextOutListCount;
2423 IN INT32 *TextOutModeMap,
2424 IN INT32 *NewlyAddedMap,
2427 IN OUT INT32 *MaxMode,
2428 IN OUT INT32 *CurrentMode
2432 INT32 *CurrentMapEntry;
2433 INT32 *NextMapEntry;
2435 INT32 CurrentMaxMode;
2444 CurrentMapEntry = &TextOutModeMap[MapStepSize * 2];
2445 NextMapEntry = CurrentMapEntry;
2446 NewMapEntry = &NewlyAddedMap[NewMapStepSize * 2];
2448 CurrentMaxMode = *MaxMode;
2449 Mode = *CurrentMode;
2451 while (Index < CurrentMaxMode) {
2452 if (*NewMapEntry == -1) {
2457 if (Index == *CurrentMode) {
2459 }
else if (Index < *CurrentMode) {
2465 if (CurrentMapEntry != NextMapEntry) {
2466 CopyMem (NextMapEntry, CurrentMapEntry, MapStepSize *
sizeof (INT32));
2469 NextMapEntry += MapStepSize;
2472 CurrentMapEntry += MapStepSize;
2473 NewMapEntry += NewMapStepSize;
2477 *CurrentMode = Mode;
2495 INT32 CurrentMaxMode;
2498 INT32 *TextOutModeMap;
2510 CurrentMaxMode = Private->TextOutMode.MaxMode;
2511 TextOutModeMap = Private->TextOutModeMap;
2512 StepSize = Private->TextOutListCount;
2513 TextOutQueryData = Private->TextOutQueryData;
2519 MapTable = TextOutModeMap + Private->CurrentNumberOfConsoles;
2520 while (Mode < TextOut->Mode->MaxMode) {
2521 Status = TextOut->QueryMode (TextOut, Mode, &Columns, &Rows);
2523 if (EFI_ERROR (Status)) {
2529 MapTable[StepSize] = Mode;
2530 TextOutQueryData[Mode].Columns = 0;
2531 TextOutQueryData[Mode].Rows = 0;
2542 while (Index < CurrentMaxMode) {
2543 QueryMode = *(TextOutModeMap + Index * StepSize);
2544 if ((TextOutQueryData[QueryMode].Rows == Rows) && (TextOutQueryData[QueryMode].Columns == Columns)) {
2545 MapTable[Index * StepSize] = Mode;
2564 &Private->TextOutMode.MaxMode,
2565 &Private->TextOutMode.Mode
2583 UINTN ConOutNumOfConsoles;
2584 UINTN StdErrNumOfConsoles;
2590 UINTN ConOutColumns;
2592 UINTN StdErrColumns;
2593 INT32 ConOutMaxMode;
2594 INT32 StdErrMaxMode;
2599 INT32 *ConOutModeMap;
2600 INT32 *StdErrModeMap;
2601 INT32 *ConOutMapTable;
2602 INT32 *StdErrMapTable;
2605 UINTN ConOutStepSize;
2606 UINTN StdErrStepSize;
2607 BOOLEAN FoundTheSameTextOut;
2608 UINTN ConOutMapTableSize;
2609 UINTN StdErrMapTableSize;
2611 ConOutNumOfConsoles = mConOut.CurrentNumberOfConsoles;
2612 StdErrNumOfConsoles = mStdErr.CurrentNumberOfConsoles;
2613 ConOutTextOutList = mConOut.TextOutList;
2614 StdErrTextOutList = mStdErr.TextOutList;
2617 FoundTheSameTextOut =
FALSE;
2618 while ((Indexi < ConOutNumOfConsoles) && (!FoundTheSameTextOut)) {
2620 while (Indexj < StdErrNumOfConsoles) {
2621 if (ConOutTextOutList->TextOut == StdErrTextOutList->TextOut) {
2622 FoundTheSameTextOut =
TRUE;
2627 StdErrTextOutList++;
2631 ConOutTextOutList++;
2634 if (!FoundTheSameTextOut) {
2641 ConOutMaxMode = mConOut.TextOutMode.
MaxMode;
2642 ConOutModeMap = mConOut.TextOutModeMap;
2643 ConOutStepSize = mConOut.TextOutListCount;
2644 ConOutQueryData = mConOut.TextOutQueryData;
2646 StdErrMaxMode = mStdErr.TextOutMode.
MaxMode;
2647 StdErrModeMap = mStdErr.TextOutModeMap;
2648 StdErrStepSize = mStdErr.TextOutListCount;
2649 StdErrQueryData = mStdErr.TextOutQueryData;
2654 ConOutMapTableSize = ConOutMaxMode *
sizeof (INT32);
2656 if (ConOutMapTable ==
NULL) {
2657 return EFI_OUT_OF_RESOURCES;
2660 SetMem (ConOutMapTable, ConOutMapTableSize, 0xFF);
2662 StdErrMapTableSize = StdErrMaxMode *
sizeof (INT32);
2664 if (StdErrMapTable ==
NULL) {
2665 return EFI_OUT_OF_RESOURCES;
2668 SetMem (StdErrMapTable, StdErrMapTableSize, 0xFF);
2675 while (Mode < ConOutMaxMode) {
2680 ConOutMode = *(ConOutModeMap + Mode * ConOutStepSize);
2681 ConOutRows = ConOutQueryData[ConOutMode].Rows;
2682 ConOutColumns = ConOutQueryData[ConOutMode].Columns;
2683 while (Index < StdErrMaxMode) {
2684 StdErrMode = *(StdErrModeMap + Index * StdErrStepSize);
2685 StdErrRows = StdErrQueryData[StdErrMode].Rows;
2686 StdErrColumns = StdErrQueryData[StdErrMode].Columns;
2687 if ((StdErrRows == ConOutRows) && (StdErrColumns == ConOutColumns)) {
2688 ConOutMapTable[Mode] = 1;
2689 StdErrMapTable[Index] = 1;
2706 mConOut.TextOutListCount,
2708 &(mConOut.TextOutMode.
MaxMode),
2709 &(mConOut.TextOutMode.
Mode)
2712 if (mConOut.TextOutMode.
Mode < 0) {
2713 mConOut.TextOut.SetMode (&(mConOut.TextOut), 0);
2719 mStdErr.TextOutListCount,
2721 &(mStdErr.TextOutMode.
MaxMode),
2722 &(mStdErr.TextOutMode.
Mode)
2725 if (mStdErr.TextOutMode.
Mode < 0) {
2726 mStdErr.TextOut.SetMode (&(mStdErr.TextOut), 0);
2764 BOOLEAN AlreadyExist;
2765 UINT32 UgaHorizontalResolution;
2766 UINT32 UgaVerticalResolution;
2767 UINT32 UgaColorDepth;
2768 UINT32 UgaRefreshRate;
2770 ASSERT (GraphicsOutput !=
NULL || UgaDraw !=
NULL);
2772 CurrentGraphicsOutputMode = Private->GraphicsOutput.
Mode;
2778 if (Private->CurrentNumberOfUgaDraw != 0) {
2787 if (GraphicsOutput !=
NULL) {
2788 if (Private->CurrentNumberOfGraphicsOutput == 0) {
2792 CurrentGraphicsOutputMode->
MaxMode = GraphicsOutput->Mode->MaxMode;
2793 CurrentGraphicsOutputMode->
Mode = GraphicsOutput->Mode->Mode;
2794 CopyMem (CurrentGraphicsOutputMode->
Info, GraphicsOutput->Mode->Info, GraphicsOutput->Mode->SizeOfInfo);
2795 CurrentGraphicsOutputMode->
SizeOfInfo = GraphicsOutput->Mode->SizeOfInfo;
2796 CurrentGraphicsOutputMode->
FrameBufferBase = GraphicsOutput->Mode->FrameBufferBase;
2797 CurrentGraphicsOutputMode->
FrameBufferSize = GraphicsOutput->Mode->FrameBufferSize;
2803 if (ModeBuffer ==
NULL) {
2804 return EFI_OUT_OF_RESOURCES;
2807 FreePool (Private->GraphicsOutputModeBuffer);
2808 Private->GraphicsOutputModeBuffer = ModeBuffer;
2814 for (Index = 0; Index < GraphicsOutput->Mode->MaxMode; Index++) {
2818 Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32)Index, &SizeOfInfo, &Info);
2819 if (EFI_ERROR (Status)) {
2824 CopyMem (Mode, Info, SizeOfInfo);
2833 if (ModeBuffer ==
NULL) {
2834 return EFI_OUT_OF_RESOURCES;
2837 MatchedMode = ModeBuffer;
2838 Mode = &Private->GraphicsOutputModeBuffer[0];
2839 for (Index = 0; Index < CurrentGraphicsOutputMode->
MaxMode; Index++) {
2842 for (NumberIndex = 0; NumberIndex < GraphicsOutput->Mode->MaxMode; NumberIndex++) {
2846 Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32)NumberIndex, &SizeOfInfo, &Info);
2847 if (EFI_ERROR (Status)) {
2867 AlreadyExist =
FALSE;
2872 for (Info = ModeBuffer; Info < MatchedMode; Info++) {
2876 AlreadyExist =
TRUE;
2881 if (!AlreadyExist) {
2887 MatchedMode->Version = 0;
2901 FreePool (Private->GraphicsOutputModeBuffer);
2902 Private->GraphicsOutputModeBuffer = ModeBuffer;
2918 for (Index = 0; Index < CurrentGraphicsOutputMode->
MaxMode; Index++) {
2919 Mode = &Private->GraphicsOutputModeBuffer[Index];
2923 CurrentIndex = Index;
2928 if (Index >= CurrentGraphicsOutputMode->
MaxMode) {
2932 for (Index = 0; Index < CurrentGraphicsOutputMode->
MaxMode; Index++) {
2933 Mode = &Private->GraphicsOutputModeBuffer[Index];
2935 CurrentIndex = Index;
2940 }
else if (UgaDraw !=
NULL) {
2947 &UgaHorizontalResolution,
2948 &UgaVerticalResolution,
2953 CurrentGraphicsOutputMode->
MaxMode = 1;
2954 Info = CurrentGraphicsOutputMode->
Info;
2977 if (GraphicsOutput !=
NULL) {
2978 Private->CurrentNumberOfGraphicsOutput++;
2981 if (UgaDraw !=
NULL) {
2982 Private->CurrentNumberOfUgaDraw++;
2989 Mode = &Private->GraphicsOutputModeBuffer[CurrentIndex];
2990 if ((GraphicsOutput !=
NULL) &&
2994 CurrentGraphicsOutputMode->
Mode = (UINT32)CurrentIndex;
3002 for (NumberIndex = 0; NumberIndex < GraphicsOutput->Mode->MaxMode; NumberIndex++) {
3003 Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32)NumberIndex, &SizeOfInfo, &Info);
3004 if (EFI_ERROR (Status)) {
3016 Status = GraphicsOutput->SetMode (GraphicsOutput, (UINT32)NumberIndex);
3022 CurrentGraphicsOutputMode->
Mode = 0xffff;
3026 Status = Private->GraphicsOutput.SetMode (&Private->GraphicsOutput, (UINT32)CurrentIndex);
3027 if (EFI_ERROR (Status)) {
3031 (Private->GraphicsOutputModeBuffer[0]).HorizontalResolution = 800;
3032 (Private->GraphicsOutputModeBuffer[0]).VerticalResolution = 600;
3033 Status = Private->GraphicsOutput.SetMode (&Private->GraphicsOutput, 0);
3068 TextOut = &Private->TextOut;
3071 MaxModeInfo.Column = 0;
3072 MaxModeInfo.Row = 0;
3073 ModeInfo.Column =
PcdGet32 (PcdConOutColumn);
3074 ModeInfo.Row =
PcdGet32 (PcdConOutRow);
3079 for (Mode = 0; Mode < MaxMode; Mode++) {
3080 Status = TextOut->QueryMode (TextOut, Mode, &Col, &Row);
3081 if (!EFI_ERROR (Status)) {
3082 if ((ModeInfo.Column != 0) && (ModeInfo.Row != 0)) {
3086 if ((Col == ModeInfo.Column) && (Row == ModeInfo.Row)) {
3094 if ((Col >= MaxModeInfo.Column) && (Row >= MaxModeInfo.Row)) {
3095 MaxModeInfo.Column = Col;
3096 MaxModeInfo.Row = Row;
3101 if ((Col == 80) && (Row == 25)) {
3110 Status = TextOut->SetMode (TextOut, PreferMode);
3111 if (EFI_ERROR (Status)) {
3115 Status = TextOut->SetMode (TextOut, BaseMode);
3116 ASSERT (!EFI_ERROR (Status));
3118 Status =
PcdSet32S (PcdConOutColumn, 80);
3119 ASSERT (!EFI_ERROR (Status));
3121 ASSERT (!EFI_ERROR (Status));
3148 UINTN CurrentNumOfConsoles;
3150 UINT32 UgaHorizontalResolution;
3151 UINT32 UgaVerticalResolution;
3152 UINT32 UgaColorDepth;
3153 UINT32 UgaRefreshRate;
3160 CurrentNumOfConsoles = Private->CurrentNumberOfConsoles;
3161 Private->AddingConOutDevice =
TRUE;
3166 while (CurrentNumOfConsoles >= Private->TextOutListCount) {
3169 &Private->TextOutListCount,
3170 (VOID **)&Private->TextOutList
3172 if (EFI_ERROR (Status)) {
3173 return EFI_OUT_OF_RESOURCES;
3180 if (EFI_ERROR (Status)) {
3181 return EFI_OUT_OF_RESOURCES;
3185 TextAndGop = &Private->TextOutList[CurrentNumOfConsoles];
3187 TextAndGop->TextOut = TextOut;
3188 TextAndGop->GraphicsOutput = GraphicsOutput;
3189 TextAndGop->UgaDraw = UgaDraw;
3191 if (CurrentNumOfConsoles == 0) {
3200 Private->CurrentNumberOfConsoles++;
3209 MaxMode = Private->TextOutMode.MaxMode;
3210 ASSERT (MaxMode >= 1);
3212 DeviceStatus = EFI_DEVICE_ERROR;
3213 Status = EFI_DEVICE_ERROR;
3218 if ((GraphicsOutput !=
NULL) || (UgaDraw !=
NULL)) {
3226 if (GraphicsOutput !=
NULL) {
3227 Status = GraphicsOutput->QueryMode (GraphicsOutput, GraphicsOutput->Mode->Mode, &SizeOfInfo, &Info);
3228 if (EFI_ERROR (Status)) {
3238 }
else if (UgaDraw !=
NULL) {
3239 Status = UgaDraw->GetMode (
3241 &UgaHorizontalResolution,
3242 &UgaVerticalResolution,
3246 if (!EFI_ERROR (Status) && EFI_ERROR (DeviceStatus)) {
3252 UgaHorizontalResolution,
3253 UgaVerticalResolution,
3262 if (EFI_ERROR (Status)) {
3274 if (((!EFI_ERROR (DeviceStatus)) || (!EFI_ERROR (Status))) &&
3275 ((Private->CurrentNumberOfGraphicsOutput + Private->CurrentNumberOfUgaDraw) == 1))
3282 Status =
gBS->InstallMultipleProtocolInterfaces (
3283 &mConOut.VirtualHandle,
3284 &gEfiUgaDrawProtocolGuid,
3293 Status =
gBS->InstallMultipleProtocolInterfaces (
3294 &mConOut.VirtualHandle,
3295 &gEfiGraphicsOutputProtocolGuid,
3296 &mConOut.GraphicsOutput,
3304 Status =
gBS->InstallMultipleProtocolInterfaces (
3305 &mConOut.VirtualHandle,
3306 &gEfiGraphicsOutputProtocolGuid,
3307 &mConOut.GraphicsOutput,
3308 &gEfiUgaDrawProtocolGuid,
3321 Private->AddingConOutDevice =
FALSE;
3343 UINTN CurrentNumOfConsoles;
3351 CurrentNumOfConsoles = Private->CurrentNumberOfConsoles;
3352 Index = (INT32)CurrentNumOfConsoles - 1;
3353 TextOutList = Private->TextOutList;
3354 while (Index >= 0) {
3355 if (TextOutList->TextOut == TextOut) {
3356 if (TextOutList->UgaDraw !=
NULL) {
3357 Private->CurrentNumberOfUgaDraw--;
3360 if (TextOutList->GraphicsOutput !=
NULL) {
3361 Private->CurrentNumberOfGraphicsOutput--;
3365 CurrentNumOfConsoles--;
3377 return EFI_NOT_FOUND;
3380 if ((Private->CurrentNumberOfGraphicsOutput == 0) && (Private->CurrentNumberOfUgaDraw == 0)) {
3386 Status =
gBS->UninstallProtocolInterface (
3387 Private->VirtualHandle,
3388 &gEfiUgaDrawProtocolGuid,
3392 Status =
gBS->UninstallProtocolInterface (
3393 Private->VirtualHandle,
3394 &gEfiGraphicsOutputProtocolGuid,
3395 &Private->GraphicsOutput
3398 Status =
gBS->UninstallMultipleProtocolInterfaces (
3399 Private->VirtualHandle,
3400 &gEfiUgaDrawProtocolGuid,
3402 &gEfiGraphicsOutputProtocolGuid,
3403 &Private->GraphicsOutput,
3409 if (CurrentNumOfConsoles == 0) {
3413 Private->CurrentNumberOfConsoles = 0;
3414 Private->TextOutMode.MaxMode = 1;
3415 Private->TextOutQueryData[0].Columns = 80;
3416 Private->TextOutQueryData[0].Rows = 25;
3428 Private->TextOutQueryData,
3432 FreePool (Private->TextOutModeMap);
3433 Private->TextOutModeMap =
NULL;
3434 TextOutList = Private->TextOutList;
3445 Private->CurrentNumberOfConsoles = 1;
3447 while ((
UINTN)Index < CurrentNumOfConsoles) {
3450 Private->CurrentNumberOfConsoles++;
3474 IN BOOLEAN ExtendedVerification
3482 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
3484 Private->KeyEventSignalState =
FALSE;
3489 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
3490 Status = Private->TextInList[Index]->Reset (
3491 Private->TextInList[Index],
3492 ExtendedVerification
3494 if (EFI_ERROR (Status)) {
3495 ReturnStatus = Status;
3499 if (!EFI_ERROR (ReturnStatus)) {
3504 Private->CurrentNumberOfKeys = 0;
3507 return ReturnStatus;
3526 if (Private->CurrentNumberOfKeys == 0) {
3527 return EFI_NOT_FOUND;
3534 Private->CurrentNumberOfKeys--;
3536 &Private->KeyQueue[0],
3537 &Private->KeyQueue[1],
3574 if (EFI_ERROR (Status)) {
3578 if ((KeyData.
Key.ScanCode != CHAR_NULL) || (KeyData.
Key.UnicodeChar != SCAN_NULL)) {
3584 Key->UnicodeChar = 0;
3585 Key->ScanCode = SCAN_NULL;
3592 for (Index = 0; Index < Private->CurrentNumberOfConsoles;) {
3593 Status = Private->TextInList[Index]->ReadKeyStroke (
3594 Private->TextInList[Index],
3597 if (!EFI_ERROR (Status)) {
3602 if ((KeyData.
Key.ScanCode != CHAR_NULL) || (KeyData.
Key.UnicodeChar != SCAN_NULL)) {
3614 return EFI_NOT_READY;
3641 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
3643 Private->KeyEventSignalState =
FALSE;
3648 if (!mConInIsConnect &&
PcdGetBool (PcdConInConnectOnDemand)) {
3649 DEBUG ((DEBUG_INFO,
"Connect ConIn in first ReadKeyStoke in Lazy ConIn mode.\n"));
3650 gBS->SignalEvent (Private->ConnectConInEvent);
3651 mConInIsConnect =
TRUE;
3681 if (Private->KeyEventSignalState) {
3685 gBS->SignalEvent (Event);
3692 for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {
3693 Status =
gBS->CheckEvent (Private->TextInList[Index]->
WaitForKey);
3694 if (!EFI_ERROR (Status)) {
3695 gBS->SignalEvent (Event);
3696 Private->KeyEventSignalState =
TRUE;
3721 ASSERT (RegsiteredData !=
NULL && InputData !=
NULL);
3723 if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||
3724 (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar))
3732 if ((RegsiteredData->KeyState.KeyShiftState != 0) &&
3733 (RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState))
3738 if ((RegsiteredData->KeyState.KeyToggleState != 0) &&
3739 (RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState))
3762 IN BOOLEAN ExtendedVerification
3770 Private = TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
3772 Private->KeyEventSignalState =
FALSE;
3777 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfExConsoles; Index++) {
3778 Status = Private->TextInExList[Index]->Reset (
3779 Private->TextInExList[Index],
3780 ExtendedVerification
3782 if (EFI_ERROR (Status)) {
3783 ReturnStatus = Status;
3787 if (!EFI_ERROR (ReturnStatus)) {
3792 Private->CurrentNumberOfKeys = 0;
3795 return ReturnStatus;
3829 if (KeyData ==
NULL) {
3830 return EFI_INVALID_PARAMETER;
3833 Private = TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
3835 Private->KeyEventSignalState =
FALSE;
3840 if (!mConInIsConnect &&
PcdGetBool (PcdConInConnectOnDemand)) {
3841 DEBUG ((DEBUG_INFO,
"Connect ConIn in first ReadKeyStoke in Lazy ConIn mode.\n"));
3842 gBS->SignalEvent (Private->ConnectConInEvent);
3843 mConInIsConnect =
TRUE;
3850 if (!EFI_ERROR (Status)) {
3854 ASSERT (Private->CurrentNumberOfKeys == 0);
3856 ZeroMem (&KeyState,
sizeof (KeyState));
3863 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
3865 Status = Private->TextInExList[Index]->ReadKeyStrokeEx (
3866 Private->TextInExList[Index],
3869 if (EFI_ERROR (Status) && (Status != EFI_NOT_READY)) {
3884 if (!EFI_ERROR (Status)) {
3891 if ((Private->VirtualKeyStateExported) ||
3892 (CurrentKeyData.
Key.ScanCode != CHAR_NULL) ||
3893 (CurrentKeyData.
Key.UnicodeChar != SCAN_NULL))
3896 &Private->KeyQueue[Private->CurrentNumberOfKeys],
3900 Private->CurrentNumberOfKeys++;
3908 for (Index = 0; Index < Private->CurrentNumberOfKeys; Index++) {
3916 if (!EFI_ERROR (Status)) {
3923 ZeroMem (&KeyData->Key, sizeof (KeyData->Key));
3924 CopyMem (&KeyData->KeyState, &KeyState, sizeof (KeyData->KeyState));
3925 return EFI_NOT_READY;
3955 if (KeyToggleState ==
NULL) {
3956 return EFI_INVALID_PARAMETER;
3959 Private = TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
3965 PhysicalKeyToggleState = *KeyToggleState | EFI_KEY_STATE_EXPOSED;
3971 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
3972 Status = Private->TextInExList[Index]->SetState (
3973 Private->TextInExList[Index],
3974 &PhysicalKeyToggleState
3976 if (EFI_ERROR (Status)) {
3984 Private->PhysicalKeyToggleState = PhysicalKeyToggleState;
3988 Private->VirtualKeyStateExported = (((*KeyToggleState) & EFI_KEY_STATE_EXPOSED) != 0);
4021 OUT VOID **NotifyHandle
4031 if ((KeyData ==
NULL) || (NotifyHandle ==
NULL) || (KeyNotificationFunction ==
NULL)) {
4032 return EFI_INVALID_PARAMETER;
4035 Private = TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4040 for (Link = Private->NotifyList.ForwardLink; Link != &Private->NotifyList; Link = Link->ForwardLink) {
4041 CurrentNotify = TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS (Link);
4043 if (CurrentNotify->KeyNotificationFn == KeyNotificationFunction) {
4044 *NotifyHandle = CurrentNotify;
4054 if (NewNotify ==
NULL) {
4055 return EFI_OUT_OF_RESOURCES;
4058 NewNotify->NotifyHandleList = (VOID **)
AllocateZeroPool (
sizeof (VOID *) * Private->TextInExListCount);
4059 if (NewNotify->NotifyHandleList ==
NULL) {
4060 gBS->FreePool (NewNotify);
4061 return EFI_OUT_OF_RESOURCES;
4064 NewNotify->Signature = TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE;
4065 NewNotify->KeyNotificationFn = KeyNotificationFunction;
4072 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
4073 Status = Private->TextInExList[Index]->RegisterKeyNotify (
4074 Private->TextInExList[Index],
4076 KeyNotificationFunction,
4077 &NewNotify->NotifyHandleList[Index]
4079 if (EFI_ERROR (Status)) {
4083 while (Index-- != 0) {
4084 Private->TextInExList[Index]->UnregisterKeyNotify (
4085 Private->TextInExList[Index],
4086 NewNotify->NotifyHandleList[Index]
4090 gBS->FreePool (NewNotify->NotifyHandleList);
4091 gBS->FreePool (NewNotify);
4098 *NotifyHandle = NewNotify;
4119 IN VOID *NotificationHandle
4127 if (NotificationHandle ==
NULL) {
4128 return EFI_INVALID_PARAMETER;
4131 Private = TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4133 for (Link = Private->NotifyList.ForwardLink; Link != &Private->NotifyList; Link = Link->ForwardLink) {
4134 CurrentNotify = TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS (Link);
4135 if (CurrentNotify == NotificationHandle) {
4136 for (Index = 0; Index < Private->CurrentNumberOfExConsoles; Index++) {
4137 Private->TextInExList[Index]->UnregisterKeyNotify (
4138 Private->TextInExList[Index],
4139 CurrentNotify->NotifyHandleList[Index]
4145 gBS->FreePool (CurrentNotify->NotifyHandleList);
4146 gBS->FreePool (CurrentNotify);
4154 return EFI_INVALID_PARAMETER;
4172 IN BOOLEAN ExtendedVerification
4180 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS (This);
4182 Private->InputEventSignalState =
FALSE;
4184 if (Private->CurrentNumberOfPointers == 0) {
4191 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfPointers; Index++) {
4192 Status = Private->PointerList[Index]->Reset (
4193 Private->PointerList[Index],
4194 ExtendedVerification
4196 if (EFI_ERROR (Status)) {
4197 ReturnStatus = Status;
4201 return ReturnStatus;
4230 State->RelativeMovementY = 0;
4231 State->RelativeMovementZ = 0;
4232 State->LeftButton =
FALSE;
4233 State->RightButton =
FALSE;
4240 ReturnStatus = EFI_NOT_READY;
4241 for (Index = 0; Index < Private->CurrentNumberOfPointers; Index++) {
4242 Status = Private->PointerList[Index]->GetState (
4243 Private->PointerList[Index],
4246 if (!EFI_ERROR (Status)) {
4247 if (ReturnStatus == EFI_NOT_READY) {
4252 State->LeftButton =
TRUE;
4256 State->RightButton =
TRUE;
4259 if ((CurrentState.
RelativeMovementX != 0) && (Private->PointerList[Index]->Mode->ResolutionX != 0)) {
4260 State->RelativeMovementX += (CurrentState.
RelativeMovementX * (INT32)Private->SimplePointerMode.ResolutionX) / (INT32)Private->PointerList[Index]->Mode->ResolutionX;
4263 if ((CurrentState.
RelativeMovementY != 0) && (Private->PointerList[Index]->Mode->ResolutionY != 0)) {
4264 State->RelativeMovementY += (CurrentState.
RelativeMovementY * (INT32)Private->SimplePointerMode.ResolutionY) / (INT32)Private->PointerList[Index]->Mode->ResolutionY;
4267 if ((CurrentState.
RelativeMovementZ != 0) && (Private->PointerList[Index]->Mode->ResolutionZ != 0)) {
4268 State->RelativeMovementZ += (CurrentState.
RelativeMovementZ * (INT32)Private->SimplePointerMode.ResolutionZ) / (INT32)Private->PointerList[Index]->Mode->ResolutionZ;
4270 }
else if (Status == EFI_DEVICE_ERROR) {
4271 ReturnStatus = EFI_DEVICE_ERROR;
4275 return ReturnStatus;
4300 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS (This);
4302 Private->InputEventSignalState =
FALSE;
4333 if (Private->InputEventSignalState) {
4334 gBS->SignalEvent (Event);
4341 for (Index = 0; Index < Private->CurrentNumberOfPointers; Index++) {
4343 if (!EFI_ERROR (Status)) {
4344 gBS->SignalEvent (Event);
4345 Private->InputEventSignalState =
TRUE;
4365 IN BOOLEAN ExtendedVerification
4373 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_ABSOLUTE_POINTER_THIS (This);
4375 Private->AbsoluteInputEventSignalState =
FALSE;
4377 if (Private->CurrentNumberOfAbsolutePointers == 0) {
4384 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfAbsolutePointers; Index++) {
4385 Status = Private->AbsolutePointerList[Index]->Reset (
4386 Private->AbsolutePointerList[Index],
4387 ExtendedVerification
4389 if (EFI_ERROR (Status)) {
4390 ReturnStatus = Status;
4394 return ReturnStatus;
4437 Private = TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_ABSOLUTE_POINTER_THIS (This);
4439 Private->AbsoluteInputEventSignalState =
FALSE;
4441 State->CurrentX = 0;
4442 State->CurrentY = 0;
4443 State->CurrentZ = 0;
4444 State->ActiveButtons = 0;
4446 VirtualMinX = Private->AbsolutePointerMode.
AbsoluteMinX;
4447 VirtualMinY = Private->AbsolutePointerMode.
AbsoluteMinY;
4448 VirtualMinZ = Private->AbsolutePointerMode.
AbsoluteMinZ;
4449 VirtualMaxX = Private->AbsolutePointerMode.
AbsoluteMaxX;
4450 VirtualMaxY = Private->AbsolutePointerMode.
AbsoluteMaxY;
4451 VirtualMaxZ = Private->AbsolutePointerMode.
AbsoluteMaxZ;
4458 ReturnStatus = EFI_NOT_READY;
4459 for (Index = 0; Index < Private->CurrentNumberOfAbsolutePointers; Index++) {
4460 Status = Private->AbsolutePointerList[Index]->GetState (
4461 Private->AbsolutePointerList[Index],
4464 if (!EFI_ERROR (Status)) {
4465 if (ReturnStatus == EFI_NOT_READY) {
4481 if (!((MinX == 0) && (MaxX == 0))) {
4485 VirtualMaxX - VirtualMinX
4492 if (!((MinY == 0) && (MaxY == 0))) {
4496 VirtualMaxY - VirtualMinY
4503 if (!((MinZ == 0) && (MaxZ == 0))) {
4507 VirtualMaxZ - VirtualMinZ
4513 }
else if (Status == EFI_DEVICE_ERROR) {
4514 ReturnStatus = EFI_DEVICE_ERROR;
4518 return ReturnStatus;
4548 if (Private->AbsoluteInputEventSignalState) {
4549 gBS->SignalEvent (Event);
4556 for (Index = 0; Index < Private->CurrentNumberOfAbsolutePointers; Index++) {
4557 Status =
gBS->CheckEvent (Private->AbsolutePointerList[Index]->
WaitForInput);
4558 if (!EFI_ERROR (Status)) {
4559 gBS->SignalEvent (Event);
4560 Private->AbsoluteInputEventSignalState =
TRUE;
4581 IN BOOLEAN ExtendedVerification
4589 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4594 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4595 Status = Private->TextOutList[Index].TextOut->Reset (
4596 Private->TextOutList[Index].TextOut,
4597 ExtendedVerification
4599 if (EFI_ERROR (Status)) {
4600 ReturnStatus = Status;
4604 This->SetAttribute (This, EFI_TEXT_ATTR (This->Mode->Attribute & 0x0F, EFI_BLACK));
4611 return ReturnStatus;
4647 This->SetAttribute (This, This->Mode->Attribute);
4649 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4654 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4655 Status = Private->TextOutList[Index].TextOut->OutputString (
4656 Private->TextOutList[Index].TextOut,
4659 if (EFI_ERROR (Status)) {
4660 ReturnStatus = Status;
4664 if (Private->CurrentNumberOfConsoles > 0) {
4672 Private->TextOut.QueryMode (
4674 Private->TextOutMode.
Mode,
4678 for ( ; *WString != CHAR_NULL; WString++) {
4680 case CHAR_BACKSPACE:
4683 Private->TextOutMode.
CursorColumn = (INT32)(MaxColumn - 1);
4691 if (Private->TextOutMode.
CursorRow < (INT32)(MaxRow - 1)) {
4697 case CHAR_CARRIAGE_RETURN:
4702 if (Private->TextOutMode.
CursorColumn < (INT32)(MaxColumn - 1)) {
4706 if (Private->TextOutMode.
CursorRow < (INT32)(MaxRow - 1)) {
4716 return ReturnStatus;
4746 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4751 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4752 Status = Private->TextOutList[Index].TextOut->TestString (
4753 Private->TextOutList[Index].TextOut,
4756 if (EFI_ERROR (Status)) {
4757 ReturnStatus = Status;
4766 return ReturnStatus;
4797 INT32 *TextOutModeMap;
4799 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4805 if ((ModeNumber > (
UINTN)(((UINT32)-1)>>1))) {
4806 return EFI_UNSUPPORTED;
4809 if ((INT32)ModeNumber >= This->Mode->MaxMode) {
4810 return EFI_UNSUPPORTED;
4816 if (Private->TextOutModeMap !=
NULL) {
4817 TextOutModeMap = Private->TextOutModeMap + Private->TextOutListCount * ModeNumber;
4818 CurrentMode = (
UINTN)(*TextOutModeMap);
4819 *Columns = Private->TextOutQueryData[CurrentMode].Columns;
4820 *Rows = Private->TextOutQueryData[CurrentMode].Rows;
4822 *Columns = Private->TextOutQueryData[ModeNumber].Columns;
4823 *Rows = Private->TextOutQueryData[ModeNumber].Rows;
4826 if ((*Columns <= 0) && (*Rows <= 0)) {
4827 return EFI_UNSUPPORTED;
4855 INT32 *TextOutModeMap;
4858 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4864 if ((ModeNumber > (
UINTN)(((UINT32)-1)>>1))) {
4865 return EFI_UNSUPPORTED;
4868 if ((INT32)ModeNumber >= This->Mode->MaxMode) {
4869 return EFI_UNSUPPORTED;
4875 if (Private->TextOutMode.
Mode == (INT32)ModeNumber) {
4882 TextOutModeMap = Private->TextOutModeMap + Private->TextOutListCount * ModeNumber;
4883 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4887 if ((!Private->AddingConOutDevice) ||
4888 (TextOutModeMap[Index] != Private->TextOutList[Index].TextOut->
Mode->
Mode))
4890 Status = Private->TextOutList[Index].TextOut->SetMode (
4891 Private->TextOutList[Index].TextOut,
4892 TextOutModeMap[Index]
4894 if (EFI_ERROR (Status)) {
4895 ReturnStatus = Status;
4905 return ReturnStatus;
4937 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4942 if ((Attribute | 0x7F) != 0x7F) {
4943 return EFI_UNSUPPORTED;
4949 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4950 Status = Private->TextOutList[Index].TextOut->SetAttribute (
4951 Private->TextOutList[Index].TextOut,
4954 if (EFI_ERROR (Status)) {
4955 ReturnStatus = Status;
4959 Private->TextOutMode.
Attribute = (INT32)Attribute;
4961 return ReturnStatus;
4987 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
4992 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
4993 Status = Private->TextOutList[Index].TextOut->ClearScreen (Private->TextOutList[Index].TextOut);
4994 if (EFI_ERROR (Status)) {
4995 ReturnStatus = Status;
5008 return ReturnStatus;
5044 INT32 *TextOutModeMap;
5048 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
5049 TextOutModeMap =
NULL;
5050 ModeNumber = Private->TextOutMode.
Mode;
5055 if (Private->TextOutModeMap !=
NULL) {
5056 TextOutModeMap = Private->TextOutModeMap + Private->TextOutListCount * ModeNumber;
5057 CurrentMode = *TextOutModeMap;
5059 CurrentMode = ModeNumber;
5062 MaxColumn = Private->TextOutQueryData[CurrentMode].Columns;
5063 MaxRow = Private->TextOutQueryData[CurrentMode].Rows;
5065 if ((Column >= MaxColumn) || (Row >= MaxRow)) {
5066 return EFI_UNSUPPORTED;
5072 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
5073 Status = Private->TextOutList[Index].TextOut->SetCursorPosition (
5074 Private->TextOutList[Index].TextOut,
5078 if (EFI_ERROR (Status)) {
5079 ReturnStatus = Status;
5089 Private->TextOutMode.
CursorRow = (INT32)Row;
5091 return ReturnStatus;
5120 Private = TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);
5125 for (Index = 0, ReturnStatus =
EFI_SUCCESS; Index < Private->CurrentNumberOfConsoles; Index++) {
5126 Status = Private->TextOutList[Index].TextOut->EnableCursor (
5127 Private->TextOutList[Index].TextOut,
5130 if (EFI_ERROR (Status)) {
5131 ReturnStatus = Status;
5137 return ReturnStatus;
UINT64 EFIAPI MultU64x64(IN UINT64 Multiplicand, IN UINT64 Multiplier)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
UINT64 EFIAPI DivU64x64Remainder(IN UINT64 Dividend, IN UINT64 Divisor, OUT UINT64 *Remainder OPTIONAL)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI SetMem(OUT VOID *Buffer, IN UINTN Length, IN UINT8 Value)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_STATUS EFIAPI ConSplitterTextInReset(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS ConSplitterAddOutputMode(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut)
EFI_STATUS EFIAPI ConSplitterTextOutSetCursorPosition(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN Column, IN UINTN Row)
VOID ConSplitterSyncOutputMode(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut)
EFI_STATUS EFIAPI ConSplitterConOutDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterConOutDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
EFI_STATUS ConSplitterAbsolutePointerAddDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer)
EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterTextOutOutputString(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString)
EFI_STATUS EFIAPI ConSplitterConInDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterTextOutSetAttribute(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN Attribute)
EFI_STATUS EFIAPI ConSplitterTextOutTestString(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString)
EFI_STATUS ConSplitterGrowBuffer(IN UINTN ElementSize, IN OUT UINTN *Count, IN OUT VOID **Buffer)
EFI_STATUS EFIAPI ConSplitterTextOutQueryMode(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN ModeNumber, OUT UINTN *Columns, OUT UINTN *Rows)
EFI_STATUS EFIAPI ConSplitterTextOutReset(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI ConSplitterTextInResetEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
VOID EFIAPI ConSplitterSimplePointerWaitForInput(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS ConSplitterSimplePointerDeleteDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer)
EFI_STATUS EFIAPI ToggleStateSyncKeyNotify(IN EFI_KEY_DATA *KeyData)
EFI_STATUS EFIAPI ConSplitterConInDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
EFI_STATUS ConSplitterTextOutDeleteDevice(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut)
VOID EFIAPI ConSplitterTextInWaitForKey(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI ConSplitterTextInReadKeyStrokeEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData)
EFI_STATUS ConSplitterStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ConSplitterVirtualHandle, IN EFI_GUID *DeviceGuid, IN EFI_GUID *InterfaceGuid, IN VOID **Interface)
EFI_STATUS EFIAPI ConSplitterTextOutEnableCursor(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN Visible)
EFI_STATUS EFIAPI ConSplitterConOutDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterSimplePointerReset(IN EFI_SIMPLE_POINTER_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
VOID ToggleStateSyncInitialization(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private)
EFI_STATUS ConSplitterTextOutAddDevice(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_UGA_DRAW_PROTOCOL *UgaDraw)
EFI_STATUS ConSplitterAddGraphicsOutputMode(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_UGA_DRAW_PROTOCOL *UgaDraw)
EFI_STATUS ConSplitterTextInAddDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn)
EFI_STATUS EFIAPI ConSplitterSimplePointerPrivateGetState(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN OUT EFI_SIMPLE_POINTER_STATE *State)
EFI_STATUS EFIAPI ConSplitterConInDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
VOID ConSplitterGetIntersection(IN INT32 *TextOutModeMap, IN INT32 *NewlyAddedMap, IN UINTN MapStepSize, IN UINTN NewMapStepSize, IN OUT INT32 *MaxMode, IN OUT INT32 *CurrentMode)
EFI_STATUS ConSplitterSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_GUID *Guid)
EFI_STATUS EFIAPI ConSplitterTextOutSetMode(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN ModeNumber)
EFI_STATUS ConSplitterAbsolutePointerDeleteDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer)
EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
VOID EFIAPI ConSplitterAbsolutePointerWaitForInput(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI ConSplitterSimplePointerGetState(IN EFI_SIMPLE_POINTER_PROTOCOL *This, IN OUT EFI_SIMPLE_POINTER_STATE *State)
EFI_STATUS ConSplitterTextInConstructor(TEXT_IN_SPLITTER_PRIVATE_DATA *ConInPrivate)
EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
EFI_STATUS EFIAPI ConSplitterAbsolutePointerReset(IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
VOID ConsplitterSetConsoleOutMode(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private)
EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS ConSplitterStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ConSplitterVirtualHandle, IN EFI_GUID *DeviceGuid, IN EFI_GUID *InterfaceGuid, OUT VOID **Interface)
EFI_STATUS EFIAPI ConSplitterAbsolutePointerGetState(IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, IN OUT EFI_ABSOLUTE_POINTER_STATE *State)
EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI ConSplitterTextInUnregisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN VOID *NotificationHandle)
EFI_STATUS EFIAPI ConSplitterTextInReadKeyStroke(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key)
EFI_STATUS EFIAPI ConSplitterTextInRegisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_DATA *KeyData, IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT VOID **NotifyHandle)
VOID ToggleStateSyncReInitialization(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private)
EFI_STATUS ConSplitterTextInExDeleteDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx)
EFI_STATUS ConSplitterTextInExAddDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx)
EFI_STATUS ConSplitterSimplePointerAddDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer)
EFI_STATUS EFIAPI ConSplitterTextOutClearScreen(IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This)
EFI_STATUS EFIAPI ConSplitterTextInPrivateReadKeyStroke(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, OUT EFI_INPUT_KEY *Key)
EFI_STATUS ConSplitterGrowMapTable(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private)
EFI_STATUS ConSplitterTextInDeleteDevice(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn)
EFI_STATUS EFIAPI ConSplitterDriverEntry(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
EFI_STATUS ConSplitterTextInExDequeueKey(IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, OUT EFI_KEY_DATA *KeyData)
EFI_STATUS ConSplitterTextOutConstructor(TEXT_OUT_SPLITTER_PRIVATE_DATA *ConOutPrivate)
EFI_STATUS ConSplitterGetIntersectionBetweenConOutAndStrErr(VOID)
EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
BOOLEAN IsKeyRegistered(IN EFI_KEY_DATA *RegsiteredData, IN EFI_KEY_DATA *InputData)
EFI_STATUS EFIAPI ConSplitterTextInSetState(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState)
EFI_STATUS EFIAPI ConSplitterUgaDrawGetMode(IN EFI_UGA_DRAW_PROTOCOL *This, OUT UINT32 *HorizontalResolution, OUT UINT32 *VerticalResolution, OUT UINT32 *ColorDepth, OUT UINT32 *RefreshRate)
EFI_STATUS EFIAPI ConSplitterGraphicsOutputBlt(IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, IN UINTN SourceX, IN UINTN SourceY, IN UINTN DestinationX, IN UINTN DestinationY, IN UINTN Width, IN UINTN Height, IN UINTN Delta OPTIONAL)
VOID TextOutSetMode(IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN UINTN ModeNumber)
EFI_STATUS EFIAPI ConSplitterGraphicsOutputSetMode(IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN UINT32 ModeNumber)
EFI_STATUS EFIAPI ConSplitterGraphicsOutputQueryMode(IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN UINT32 ModeNumber, OUT UINTN *SizeOfInfo, OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info)
EFI_STATUS EFIAPI ConSplitterUgaDrawBlt(IN EFI_UGA_DRAW_PROTOCOL *This, IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, IN EFI_UGA_BLT_OPERATION BltOperation, IN UINTN SourceX, IN UINTN SourceY, IN UINTN DestinationX, IN UINTN DestinationY, IN UINTN Width, IN UINTN Height, IN UINTN Delta OPTIONAL)
EFI_STATUS EFIAPI ConSplitterUgaDrawSetMode(IN EFI_UGA_DRAW_PROTOCOL *This, IN UINT32 HorizontalResolution, IN UINT32 VerticalResolution, IN UINT32 ColorDepth, IN UINT32 RefreshRate)
VOID *EFIAPI ReallocatePool(IN UINTN OldSize, IN UINTN NewSize, IN VOID *OldBuffer OPTIONAL)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define PcdGet32(TokenName)
#define PcdGetBool(TokenName)
#define PcdSet32S(TokenName, Value)
#define FeaturePcdGet(TokenName)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
STATIC BOOLEAN Match(IN CONST CHAR16 *Translated, IN UINTN TranslatedLength, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
UINT8 EFI_KEY_TOGGLE_STATE
EFI_STATUS(EFIAPI * EFI_KEY_NOTIFY_FUNCTION)(IN EFI_KEY_DATA *KeyData)
UINT64 EFI_PHYSICAL_ADDRESS
VOID EFIAPI EfiEventEmptyFunction(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI EfiLibInstallDriverBindingComponentName2(IN CONST EFI_HANDLE ImageHandle, IN CONST EFI_SYSTEM_TABLE *SystemTable, IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, IN EFI_HANDLE DriverBindingHandle, IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL, IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL)
EFI_ABSOLUTE_POINTER_MODE * Mode
EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE * Mode
EFI_KEY_TOGGLE_STATE KeyToggleState
EFI_SIMPLE_POINTER_MODE * Mode
EFI_SIMPLE_TEXT_OUTPUT_MODE * Mode
UINT64 AbsoluteMinX
The Absolute Minimum of the device on the x-axis.
UINT64 AbsoluteMinZ
The Absolute Minimum of the device on the z-axis.
UINT64 AbsoluteMinY
The Absolute Minimum of the device on the y axis.
UINT32 VerticalResolution
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat
UINT32 HorizontalResolution
EFI_PIXEL_BITMASK PixelInformation
EFI_PHYSICAL_ADDRESS FrameBufferBase
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION * Info
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL * StdErr
EFI_HANDLE ConsoleInHandle
EFI_HANDLE ConsoleOutHandle
EFI_HANDLE StandardErrorHandle
EFI_SIMPLE_TEXT_INPUT_PROTOCOL * ConIn
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL * ConOut