1 /** @file
2   The VGA Mini Port Protocol used to set the text display mode of a VGA controller.
3 
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __VGA_MINI_PORT_H_
16 #define __VGA_MINI_PORT_H_
17 
18 ///
19 /// Global ID for the EFI_VGA_MINI_PORT_PROTOCOL.
20 ///
21 #define EFI_VGA_MINI_PORT_PROTOCOL_GUID \
22   { \
23     0xc7735a2f, 0x88f5, 0x4882, {0xae, 0x63, 0xfa, 0xac, 0x8c, 0x8b, 0x86, 0xb3 } \
24   }
25 
26 ///
27 /// Forward declaration for the EFI_VGA_MINI_PORT_PROTOCOL.
28 ///
29 typedef struct _EFI_VGA_MINI_PORT_PROTOCOL  EFI_VGA_MINI_PORT_PROTOCOL;
30 
31 /**
32   Sets the text display mode of a VGA controller.
33 
34   Sets the text display mode of the VGA controller to the mode specified by
35   ModeNumber.  A ModeNumber of 0 is a request for an 80x25 text mode.  A
36   ModeNumber of 1 is a request for an 80x50 text mode.  If ModeNumber is greater
37   than MaxModeNumber, then EFI_UNSUPPORTED is returned.  If the VGA controller
38   is not functioning properly, then EFI_DEVICE_ERROR is returned.  If the VGA
39   controller is sucessfully set to the mode number specified by ModeNumber, then
40   EFI_SUCCESS is returned.
41 
42   @param[in] This         A pointer to the EFI_VGA_MINI_PORT_PROTOCOL instance.
43   @param[in] ModeNumber   The requested mode number.  0 for 80x25.  1 for 80x5.
44 
45   @retval EFI_SUCCESS        The mode number was set.
46   @retval EFI_UNSUPPORTED    The mode number specified by ModeNumber is not supported.
47   @retval EFI_DEVICE_ERROR   The device is not functioning properly.
48 
49 **/
50 typedef
51 EFI_STATUS
52 (EFIAPI *EFI_VGA_MINI_PORT_SET_MODE)(
53   IN EFI_VGA_MINI_PORT_PROTOCOL  *This,
54   IN UINTN                        ModeNumber
55   );
56 
57 struct _EFI_VGA_MINI_PORT_PROTOCOL {
58   EFI_VGA_MINI_PORT_SET_MODE  SetMode;
59   ///
60   /// MMIO base address of the VGA text mode framebuffer.  Typically set to 0xB8000.
61   ///
62   UINT64                      VgaMemoryOffset;
63   ///
64   /// I/O Port address for the VGA CRTC address register. Typically set to 0x3D4.
65   ///
66   UINT64                      CrtcAddressRegisterOffset;
67   ///
68   /// I/O Port address for the VGA CRTC data register.  Typically set to 0x3D5.
69   ///
70   UINT64                      CrtcDataRegisterOffset;
71   ///
72   /// PCI Controller MMIO BAR index of the VGA text mode frame buffer.  Typically
73   /// set to EFI_PCI_IO_PASS_THROUGH_BAR
74   ///
75   UINT8                       VgaMemoryBar;
76   ///
77   /// PCI Controller I/O BAR index of the VGA CRTC address register.  Typically
78   /// set to EFI_PCI_IO_PASS_THROUGH_BAR
79   ///
80   UINT8                       CrtcAddressRegisterBar;
81   ///
82   /// PCI Controller I/O BAR index of the VGA CRTC data register.  Typically set
83   /// to EFI_PCI_IO_PASS_THROUGH_BAR
84   ///
85   UINT8                       CrtcDataRegisterBar;
86   ///
87   /// The maximum number of text modes that this VGA controller supports.
88   ///
89   UINT8                       MaxMode;
90 };
91 
92 extern EFI_GUID gEfiVgaMiniPortProtocolGuid;
93 
94 #endif
95