+++ /dev/null
-/** @file\r
- Cirrus Logic 5430 Controller Driver\r
-\r
- Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-//\r
-// Cirrus Logic 5430 Controller Driver\r
-//\r
-\r
-#ifndef _CIRRUS_LOGIC_5430_H_\r
-#define _CIRRUS_LOGIC_5430_H_\r
-\r
-\r
-#include <Uefi.h>\r
-#include <Protocol/UgaDraw.h>\r
-#include <Protocol/GraphicsOutput.h>\r
-#include <Protocol/PciIo.h>\r
-#include <Protocol/DriverSupportedEfiVersion.h>\r
-#include <Protocol/EdidOverride.h>\r
-#include <Protocol/EdidDiscovered.h>\r
-#include <Protocol/EdidActive.h>\r
-#include <Protocol/DevicePath.h>\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiDriverEntryPoint.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/PcdLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DevicePathLib.h>\r
-#include <Library/TimerLib.h>\r
-\r
-#include <IndustryStandard/Pci.h>\r
-//\r
-// Cirrus Logic 5430 PCI Configuration Header values\r
-//\r
-#define CIRRUS_LOGIC_VENDOR_ID 0x1013\r
-#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8\r
-#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0\r
-#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8\r
-\r
-//\r
-// Cirrus Logic Graphical Mode Data\r
-//\r
-#define CIRRUS_LOGIC_5430_MODE_COUNT 3\r
-\r
-typedef struct {\r
- UINT32 ModeNumber;\r
- UINT32 HorizontalResolution;\r
- UINT32 VerticalResolution;\r
- UINT32 ColorDepth;\r
- UINT32 RefreshRate;\r
-} CIRRUS_LOGIC_5430_MODE_DATA;\r
-\r
-#define PIXEL_RED_SHIFT 0\r
-#define PIXEL_GREEN_SHIFT 3\r
-#define PIXEL_BLUE_SHIFT 6\r
-\r
-#define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5)\r
-#define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2)\r
-#define PIXEL_BLUE_MASK (BIT1 | BIT0)\r
-\r
-#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift))\r
-#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT)\r
-#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT)\r
-#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT)\r
-\r
-#define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \\r
- (UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \\r
- (((Green) >> PIXEL_GREEN_SHIFT) & PIXEL_GREEN_MASK) | \\r
- (((Blue) >> PIXEL_BLUE_SHIFT) & PIXEL_BLUE_MASK) )\r
-\r
-#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff\r
-\r
-//\r
-// Cirrus Logic 5440 Private Data Structure\r
-//\r
-#define CIRRUS_LOGIC_5430_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('C', 'L', '5', '4')\r
-\r
-typedef struct {\r
- UINT64 Signature;\r
- EFI_HANDLE Handle;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINT64 OriginalPciAttributes;\r
- EFI_UGA_DRAW_PROTOCOL UgaDraw;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;\r
- EFI_EDID_DISCOVERED_PROTOCOL EdidDiscovered;\r
- EFI_EDID_ACTIVE_PROTOCOL EdidActive;\r
- EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;\r
- EFI_DEVICE_PATH_PROTOCOL *UgaDevicePath;\r
- UINTN CurrentMode;\r
- UINTN MaxMode;\r
- CIRRUS_LOGIC_5430_MODE_DATA ModeData[CIRRUS_LOGIC_5430_MODE_COUNT];\r
- UINT8 *LineBuffer;\r
- BOOLEAN HardwareNeedsStarting;\r
-} CIRRUS_LOGIC_5430_PRIVATE_DATA;\r
-\r
-///\r
-/// Video Mode structure\r
-///\r
-typedef struct {\r
- UINT32 Width;\r
- UINT32 Height;\r
- UINT32 ColorDepth;\r
- UINT32 RefreshRate;\r
- UINT8 *CrtcSettings;\r
- UINT16 *SeqSettings;\r
- UINT8 MiscSetting;\r
-} CIRRUS_LOGIC_5430_VIDEO_MODES;\r
-\r
-#define CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_UGA_DRAW_THIS(a) \\r
- CR(a, CIRRUS_LOGIC_5430_PRIVATE_DATA, UgaDraw, CIRRUS_LOGIC_5430_PRIVATE_DATA_SIGNATURE)\r
-\r
-#define CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \\r
- CR(a, CIRRUS_LOGIC_5430_PRIVATE_DATA, GraphicsOutput, CIRRUS_LOGIC_5430_PRIVATE_DATA_SIGNATURE)\r
-\r
-\r
-//\r
-// Global Variables\r
-//\r
-extern UINT8 AttributeController[];\r
-extern UINT8 GraphicsController[];\r
-extern UINT8 Crtc_640_480_256_60[];\r
-extern UINT16 Seq_640_480_256_60[];\r
-extern UINT8 Crtc_800_600_256_60[];\r
-extern UINT16 Seq_800_600_256_60[];\r
-extern UINT8 Crtc_1024_768_256_60[];\r
-extern UINT16 Seq_1024_768_256_60[];\r
-extern CIRRUS_LOGIC_5430_VIDEO_MODES CirrusLogic5430VideoModes[];\r
-extern EFI_DRIVER_BINDING_PROTOCOL gCirrusLogic5430DriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gCirrusLogic5430ComponentName;\r
-extern EFI_COMPONENT_NAME2_PROTOCOL gCirrusLogic5430ComponentName2;\r
-extern EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL gCirrusLogic5430DriverSupportedEfiVersion;\r
-\r
-//\r
-// Io Registers defined by VGA\r
-//\r
-#define CRTC_ADDRESS_REGISTER 0x3d4\r
-#define CRTC_DATA_REGISTER 0x3d5\r
-#define SEQ_ADDRESS_REGISTER 0x3c4\r
-#define SEQ_DATA_REGISTER 0x3c5\r
-#define GRAPH_ADDRESS_REGISTER 0x3ce\r
-#define GRAPH_DATA_REGISTER 0x3cf\r
-#define ATT_ADDRESS_REGISTER 0x3c0\r
-#define MISC_OUTPUT_REGISTER 0x3c2\r
-#define INPUT_STATUS_1_REGISTER 0x3da\r
-#define DAC_PIXEL_MASK_REGISTER 0x3c6\r
-#define PALETTE_INDEX_REGISTER 0x3c8\r
-#define PALETTE_DATA_REGISTER 0x3c9\r
-\r
-//\r
-// UGA Draw Hardware abstraction internal worker functions\r
-//\r
-EFI_STATUS\r
-CirrusLogic5430UgaDrawConstructor (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-EFI_STATUS\r
-CirrusLogic5430UgaDrawDestructor (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-//\r
-// Graphics Output Hardware abstraction internal worker functions\r
-//\r
-EFI_STATUS\r
-CirrusLogic5430GraphicsOutputConstructor (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-EFI_STATUS\r
-CirrusLogic5430GraphicsOutputDestructor (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-\r
-//\r
-// EFI_DRIVER_BINDING_PROTOCOL Protocol Interface\r
-//\r
-/**\r
- TODO: Add function description\r
-\r
- @param This TODO: add argument description\r
- @param Controller TODO: add argument description\r
- @param RemainingDevicePath TODO: add argument description\r
-\r
- TODO: add return values\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CirrusLogic5430ControllerDriverSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-/**\r
- TODO: Add function description\r
-\r
- @param This TODO: add argument description\r
- @param Controller TODO: add argument description\r
- @param RemainingDevicePath TODO: add argument description\r
-\r
- TODO: add return values\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CirrusLogic5430ControllerDriverStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-/**\r
- TODO: Add function description\r
-\r
- @param This TODO: add argument description\r
- @param Controller TODO: add argument description\r
- @param NumberOfChildren TODO: add argument description\r
- @param ChildHandleBuffer TODO: add argument description\r
-\r
- TODO: add return values\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CirrusLogic5430ControllerDriverStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
- );\r
-\r
-//\r
-// EFI Component Name Functions\r
-//\r
-/**\r
- Retrieves a Unicode string that is the user readable name of the driver.\r
-\r
- This function retrieves the user readable name of a driver in the form of a\r
- Unicode string. If the driver specified by This has a user readable name in\r
- the language specified by Language, then a pointer to the driver name is\r
- returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
- by This does not support the language specified by Language,\r
- then EFI_UNSUPPORTED is returned.\r
-\r
- @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
- EFI_COMPONENT_NAME_PROTOCOL instance.\r
-\r
- @param Language[in] A pointer to a Null-terminated ASCII string\r
- array indicating the language. This is the\r
- language of the driver name that the caller is\r
- requesting, and it must match one of the\r
- languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up\r
- to the driver writer. Language is specified\r
- in RFC 4646 or ISO 639-2 language code format.\r
-\r
- @param DriverName[out] A pointer to the Unicode string to return.\r
- This Unicode string is the name of the\r
- driver specified by This in the language\r
- specified by Language.\r
-\r
- @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
- This and the language specified by Language was\r
- returned in DriverName.\r
-\r
- @retval EFI_INVALID_PARAMETER Language is NULL.\r
-\r
- @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
-\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support\r
- the language specified by Language.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CirrusLogic5430ComponentNameGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
- );\r
-\r
-\r
-/**\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by a driver.\r
-\r
- This function retrieves the user readable name of the controller specified by\r
- ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
- driver specified by This has a user readable name in the language specified by\r
- Language, then a pointer to the controller name is returned in ControllerName,\r
- and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
- managing the controller specified by ControllerHandle and ChildHandle,\r
- then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
- support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
-\r
- @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
- EFI_COMPONENT_NAME_PROTOCOL instance.\r
-\r
- @param ControllerHandle[in] The handle of a controller that the driver\r
- specified by This is managing. This handle\r
- specifies the controller whose name is to be\r
- returned.\r
-\r
- @param ChildHandle[in] The handle of the child controller to retrieve\r
- the name of. This is an optional parameter that\r
- may be NULL. It will be NULL for device\r
- drivers. It will also be NULL for a bus drivers\r
- that wish to retrieve the name of the bus\r
- controller. It will not be NULL for a bus\r
- driver that wishes to retrieve the name of a\r
- child controller.\r
-\r
- @param Language[in] A pointer to a Null-terminated ASCII string\r
- array indicating the language. This is the\r
- language of the driver name that the caller is\r
- requesting, and it must match one of the\r
- languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up\r
- to the driver writer. Language is specified in\r
- RFC 4646 or ISO 639-2 language code format.\r
-\r
- @param ControllerName[out] A pointer to the Unicode string to return.\r
- This Unicode string is the name of the\r
- controller specified by ControllerHandle and\r
- ChildHandle in the language specified by\r
- Language from the point of view of the driver\r
- specified by This.\r
-\r
- @retval EFI_SUCCESS The Unicode string for the user readable name in\r
- the language specified by Language for the\r
- driver specified by This was returned in\r
- DriverName.\r
-\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
-\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
- EFI_HANDLE.\r
-\r
- @retval EFI_INVALID_PARAMETER Language is NULL.\r
-\r
- @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
-\r
- @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
- managing the controller specified by\r
- ControllerHandle and ChildHandle.\r
-\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support\r
- the language specified by Language.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CirrusLogic5430ComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
- );\r
-\r
-\r
-//\r
-// Local Function Prototypes\r
-//\r
-VOID\r
-InitializeGraphicsMode (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- CIRRUS_LOGIC_5430_VIDEO_MODES *ModeData\r
- );\r
-\r
-VOID\r
-SetPaletteColor (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN Index,\r
- UINT8 Red,\r
- UINT8 Green,\r
- UINT8 Blue\r
- );\r
-\r
-VOID\r
-SetDefaultPalette (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-VOID\r
-DrawLogo (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN ScreenWidth,\r
- UINTN ScreenHeight\r
- );\r
-\r
-VOID\r
-outb (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN Address,\r
- UINT8 Data\r
- );\r
-\r
-VOID\r
-outw (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN Address,\r
- UINT16 Data\r
- );\r
-\r
-UINT8\r
-inb (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN Address\r
- );\r
-\r
-UINT16\r
-inw (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private,\r
- UINTN Address\r
- );\r
-\r
-EFI_STATUS\r
-CirrusLogic5430VideoModeSetup (\r
- CIRRUS_LOGIC_5430_PRIVATE_DATA *Private\r
- );\r
-\r
-#endif\r