From a1f11f7547b43a6b86f6925cb8ab3f836b2d5dae Mon Sep 17 00:00:00 2001 From: jljusten Date: Wed, 27 May 2009 21:09:58 +0000 Subject: [PATCH] Add IdeControllerDxe driver. This driver is very similar to edk.tianocore.org (Edk) Edk/Sample/Bus/Pci/IdeController/Dxe. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8397 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Bus/Pci/IdeControllerDxe/ComponentName.c | 187 +++++++ .../Bus/Pci/IdeControllerDxe/IdeController.c | 529 ++++++++++++++++++ .../Bus/Pci/IdeControllerDxe/IdeController.h | 419 ++++++++++++++ .../Pci/IdeControllerDxe/IdeControllerDxe.inf | 52 ++ 4 files changed, 1187 insertions(+) create mode 100755 PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/ComponentName.c create mode 100755 PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.c create mode 100755 PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.h create mode 100755 PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf diff --git a/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/ComponentName.c b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/ComponentName.c new file mode 100755 index 0000000000..4861beef23 --- /dev/null +++ b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/ComponentName.c @@ -0,0 +1,187 @@ +/** @file + This portion is to register the IDE Controller Driver name: + "IDE Controller Init Driver" + + Copyright (c) 2008 Intel Corporation.
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "IdeController.h" + +// +// EFI Component Name Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gIdeControllerComponentName = { + IdeControllerComponentNameGetDriverName, + IdeControllerComponentNameGetControllerName, + "eng" +}; + +// +// EFI Component Name 2 Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) IdeControllerComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) IdeControllerComponentNameGetControllerName, + "en" +}; + +// +// Driver Name Strings +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerDriverNameTable[] = { + { + "eng;en", + (CHAR16 *)L"IDE Controller Init Driver" + }, + { + NULL, + NULL + } +}; + +// +// Controller Name Strings +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerControllerNameTable[] = { + { + "eng;en", + (CHAR16 *)L"PCAT IDE Controller" + }, + { + NULL, + NULL + } +}; + +EFI_STATUS +EFIAPI +IdeControllerComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + Language - A pointer to a three character ISO 639-2 language identifier. + This is the language of the driver name that that the caller + is requesting, and it must match one of the languages specified + in SupportedLanguages. The number of languages supported by a + driver is up to the driver writer. + DriverName - A pointer to the Unicode string to return. This Unicode string + is the name of the driver specified by This in the language + specified by Language. + + Returns: + EFI_SUCCESS - The Unicode string for the Driver specified by This + and the language specified by Language was returned + in DriverName. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - DriverName is NULL. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +{ + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mIdeControllerDriverNameTable, + DriverName, + (BOOLEAN)(This == &gIdeControllerComponentName) + ); +} + +EFI_STATUS +EFIAPI +IdeControllerComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the controller + that is being managed by an EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + ControllerHandle - The handle of a controller that the driver specified by + This is managing. This handle specifies the controller + whose name is to be returned. + ChildHandle - The handle of the child controller to retrieve the name + of. This is an optional parameter that may be NULL. It + will be NULL for device drivers. It will also be NULL + for a bus drivers that wish to retrieve the name of the + bus controller. It will not be NULL for a bus driver + that wishes to retrieve the name of a child controller. + Language - A pointer to a three character ISO 639-2 language + identifier. This is the language of the controller name + that that the caller is requesting, and it must match one + of the languages specified in SupportedLanguages. The + number of languages supported by a driver is up to the + driver writer. + ControllerName - A pointer to the Unicode string to return. This Unicode + string is the name of the controller specified by + ControllerHandle and ChildHandle in the language + specified by Language from the point of view of the + driver specified by This. + + Returns: + EFI_SUCCESS - The Unicode string for the user readable name in the + language specified by Language for the driver + specified by This was returned in DriverName. + EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE. + EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid + EFI_HANDLE. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - ControllerName is NULL. + EFI_UNSUPPORTED - The driver specified by This is not currently + managing the controller specified by + ControllerHandle and ChildHandle. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +{ + EFI_STATUS Status; + + // + // Make sure this driver is currently managing ControllHandle + // + Status = EfiTestManagedDevice ( + ControllerHandle, + gIdeControllerDriverBinding.DriverBindingHandle, + &gEfiPciIoProtocolGuid + ); + if (EFI_ERROR (Status)) { + return Status; + } + + if (ChildHandle != NULL) { + return EFI_UNSUPPORTED; + } + + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mIdeControllerControllerNameTable, + ControllerName, + (BOOLEAN)(This == &gIdeControllerComponentName) + ); +} diff --git a/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.c b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.c new file mode 100755 index 0000000000..6150198ce9 --- /dev/null +++ b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.c @@ -0,0 +1,529 @@ +/** @file + This driver module produces IDE_CONTROLLER_INIT protocol and will be used by + IDE Bus driver to support platform dependent timing information. This driver + is responsible for early initialization of IDE controller. + + Copyright (c) 2008 - 2009 Intel Corporation.
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "IdeController.h" + +// +// EFI_DRIVER_BINDING_PROTOCOL instance +// +EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding = { + IdeControllerSupported, + IdeControllerStart, + IdeControllerStop, + 0xa, + NULL, + NULL +}; + +// +// EFI_IDE_CONTROLLER_PROVATE_DATA Template +// +EFI_IDE_CONTROLLER_INIT_PROTOCOL gEfiIdeControllerInit = { + IdeInitGetChannelInfo, + IdeInitNotifyPhase, + IdeInitSubmitData, + IdeInitDisqualifyMode, + IdeInitCalculateMode, + IdeInitSetTiming, + ICH_IDE_ENUMER_ALL, + ICH_IDE_MAX_CHANNEL +}; + +// +// EFI_ATA_COLLECTIVE_MODE Template +// +EFI_ATA_COLLECTIVE_MODE gEfiAtaCollectiveModeTemplate = { + { + TRUE, // PioMode.Valid + 0 // PioMode.Mode + }, + { + TRUE, // SingleWordDmaMode.Valid + 0 + }, + { + FALSE, // MultiWordDmaMode.Valid + 0 + }, + { + TRUE, // UdmaMode.Valid + 0 // UdmaMode.Mode + } +}; + +EFI_STATUS +EFIAPI +InitializeIdeControllerDriver ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + Routine Description: + + Chipset Ide Driver EntryPoint function. It follows the standard EFI driver + model. It's called by StartImage() of DXE Core + + Argments: + + ImageHnadle -- While the driver image loaded be the ImageLoader(), + an image handle is assigned to this driver binary, + all activities of the driver is tied to this ImageHandle + *SystemTable -- A pointer to the system table, for all BS(Boo Services) and + RT(Runtime Services) + + Retruns: + + Always call EfiLibInstallDriverBindingProtocol( ) and retrun the result + +--*/ +{ + EFI_STATUS Status; + + // + // Install driver model protocol(s). + // + Status = EfiLibInstallDriverBindingComponentName2 ( + ImageHandle, + SystemTable, + &gIdeControllerDriverBinding, + ImageHandle, + &gIdeControllerComponentName, + &gIdeControllerComponentName2 + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +EFI_STATUS +EFIAPI +IdeControllerSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + + Routine Description: + + Register Driver Binding protocol for this driver. + + Arguments: + + This -- a pointer points to the Binding Protocol instance + Controller -- The handle of controller to be tested. + *RemainingDevicePath -- A pointer to the device path. Ignored by device + driver but used by bus driver + + Returns: + + EFI_SUCCESS -- Driver loaded. + other -- Driver not loaded. +--*/ +{ + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 PciClass; + UINT8 PciSubClass; + + // + // Attempt to Open PCI I/O Protocol + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiPciIoProtocolGuid, + (VOID **) &PciIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Now further check the PCI header: Base class (offset 0x0B) and + // Sub Class (offset 0x0A). This controller should be an Ide controller + // + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint8, + PCI_CLASSCODE_OFFSET + 2, + 1, + &PciClass + ); + if (EFI_ERROR (Status)) { + goto Done; + } + + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint8, + PCI_CLASSCODE_OFFSET + 1, + 1, + &PciSubClass + ); + if (EFI_ERROR (Status)) { + goto Done; + } + + // + // Examine Ide PCI Configuration table fields + // + if ((PciClass != PCI_CLASS_MASS_STORAGE) || (PciSubClass != PCI_CLASS_MASS_STORAGE_IDE)) { + Status = EFI_UNSUPPORTED; + } + +Done: + gBS->CloseProtocol ( + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + return Status; +} + +EFI_STATUS +EFIAPI +IdeControllerStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + + Routine Description: + + This routine is called right after the .Supported() called and return + EFI_SUCCESS. Notes: The supported protocols are checked but the Protocols + are closed. + + Arguments: + + This -- a pointer points to the Binding Protocol instance + Controller -- The handle of controller to be tested. Parameter + passed by the caller + *RemainingDevicePath -- A pointer to the device path. Should be ignored by + device driver +--*/ +{ + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + + // + // Now test and open the EfiPciIoProtocol + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiPciIoProtocolGuid, + (VOID **) &PciIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + // + // Status == EFI_SUCCESS - A normal execution flow, SUCCESS and the program proceeds. + // Status == ALREADY_STARTED - A non-zero Status code returned. It indicates + // that the protocol has been opened and should be treated as a + // normal condition and the program proceeds. The Protocol will not + // opened 'again' by this call. + // Status != ALREADY_STARTED - Error status, terminate program execution + // + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Install IDE_CONTROLLER_INIT protocol + // + return gBS->InstallMultipleProtocolInterfaces ( + &Controller, + &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit, + NULL + ); +} + +EFI_STATUS +EFIAPI +IdeControllerStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ) +/*++ + + Routine Description: + Stop this driver on Controller Handle. + + Arguments: + This - Protocol instance pointer. + Controller - Handle of device to stop driver on + NumberOfChildren - Not used + ChildHandleBuffer - Not used + + Returns: + EFI_SUCCESS - This driver is removed DeviceHandle + other - This driver was not removed from this device + +--*/ +{ + EFI_STATUS Status; + EFI_IDE_CONTROLLER_INIT_PROTOCOL *IdeControllerInit; + + // + // Open the produced protocol + // + Status = gBS->OpenProtocol ( + Controller, + &gEfiIdeControllerInitProtocolGuid, + (VOID **) &IdeControllerInit, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (EFI_ERROR (Status)) { + return EFI_UNSUPPORTED; + } + + // + // Make sure the protocol was produced by this driver + // + if (IdeControllerInit != &gEfiIdeControllerInit) { + return EFI_UNSUPPORTED; + } + + // + // Uninstall the IDE Controller Init Protocol + // + Status = gBS->UninstallMultipleProtocolInterfaces ( + Controller, + &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit, + NULL + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Close protocols opened by Ide controller driver + // + return gBS->CloseProtocol ( + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); +} + +// +// Interface functions of IDE_CONTROLLER_INIT protocol +// +EFI_STATUS +EFIAPI +IdeInitGetChannelInfo ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + OUT BOOLEAN *Enabled, + OUT UINT8 *MaxDevices + ) +/*++ +Routine Description: + + This function can be used to obtain information about a specified channel. + It's usually used by IDE Bus driver during enumeration process. + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Channel -- Channel number (0 based, either 0 or 1) + Enabled -- TRUE if the channel is enabled. If the channel is disabled, + then it will no be enumerated. + MaxDevices -- The Max number of IDE devices that the bus driver can expect + on this channel. For ATA/ATAPI, this number is either 1 or 2. + +Returns: + EFI_STATUS + +--*/ +{ + // + // Channel number (0 based, either 0 or 1) + // + if (Channel < ICH_IDE_MAX_CHANNEL) { + *Enabled = TRUE; + *MaxDevices = ICH_IDE_MAX_DEVICES; + return EFI_SUCCESS; + } + + *Enabled = FALSE; + return EFI_INVALID_PARAMETER; +} + + +EFI_STATUS +EFIAPI +IdeInitNotifyPhase ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, + IN UINT8 Channel + ) +/*++ + +Routine Description: + + This function is called by IdeBus driver before executing certain actions. + This allows IDE Controller Init to prepare for each action. + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Phase -- phase indicator defined by IDE_CONTROLLER_INIT protocol + Channel -- Channel number (0 based, either 0 or 1) + +Returns: + +--*/ +{ + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +IdeInitSubmitData ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_IDENTIFY_DATA *IdentifyData + ) +/*++ + +Routine Description: + + This function is called by IdeBus driver to submit EFI_IDENTIFY_DATA data structure + obtained from IDE deivce. This structure is used to set IDE timing + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Channel -- IDE channel number (0 based, either 0 or 1) + Device -- IDE device number + IdentifyData -- A pointer to EFI_IDENTIFY_DATA data structure + +Returns: + +--*/ +{ + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +IdeInitDisqualifyMode ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *BadModes + ) +/*++ + +Routine Description: + + This function is called by IdeBus driver to disqualify unsupported operation + mode on specfic IDE device + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Channel -- IDE channel number (0 based, either 0 or 1) + Device -- IDE device number + BadModes -- Operation mode indicator + +Returns: + +--*/ +{ + return EFI_SUCCESS; +} + +EFI_STATUS +EFIAPI +IdeInitCalculateMode ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes + ) +/*++ + +Routine Description: + + This function is called by IdeBus driver to calculate the best operation mode + supported by specific IDE device + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Channel -- IDE channel number (0 based, either 0 or 1) + Device -- IDE device number + SupportedModes -- Modes collection supported by IDE device + +Returns: + +--*/ +{ + if (Channel >= ICH_IDE_MAX_CHANNEL || Device >= ICH_IDE_MAX_DEVICES) { + return EFI_INVALID_PARAMETER; + } + + *SupportedModes = AllocateCopyPool (sizeof (EFI_ATA_COLLECTIVE_MODE), &gEfiAtaCollectiveModeTemplate); + if (*SupportedModes == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + return EFI_SUCCESS; +} + + +EFI_STATUS +EFIAPI +IdeInitSetTiming ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *Modes + ) +/*++ + +Routine Description: + + This function is called by IdeBus driver to set appropriate timing on IDE + controller according supported operation mode + +Arguments: + + This -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. + Channel -- IDE channel number (0 based, either 0 or 1) + Device -- IDE device number + +Returns: + +--*/ +{ + return EFI_SUCCESS; +} diff --git a/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.h b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.h new file mode 100755 index 0000000000..053f070b4e --- /dev/null +++ b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeController.h @@ -0,0 +1,419 @@ +/** @file + Header file for IDE controller driver. + + Copyright (c) 2008 Intel Corporation.
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _IDE_CONTROLLER_H +#define _IDE_CONTROLLER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// +// Global Variables definitions +// +extern EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gIdeControllerComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2; + +// +// Supports 2 channel max +// +#define ICH_IDE_MAX_CHANNEL 0x02 +// +// Supports 2 devices max +// +#define ICH_IDE_MAX_DEVICES 0x02 +#define ICH_IDE_ENUMER_ALL FALSE + +// +// Driver binding functions declaration +// +EFI_STATUS +EFIAPI +IdeControllerSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + + Routine Description: + + Register Driver Binding protocol for this driver. + + Arguments: + + This -- a pointer points to the Binding Protocol instance + Controller -- The handle of controller to be tested. + *RemainingDevicePath -- A pointer to the device path. Ignored by device + driver but used by bus driver + + Returns: + + EFI_SUCCESS -- Driver loaded. + other -- Driver not loaded. +--*/ +; + +EFI_STATUS +EFIAPI +IdeControllerStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +/*++ + + Routine Description: + + This routine is called right after the .Supported() called and return + EFI_SUCCESS. Notes: The supported protocols are checked but the Protocols + are closed. + + Arguments: + + This -- a pointer points to the Binding Protocol instance + Controller -- The handle of controller to be tested. Parameter + passed by the caller + *RemainingDevicePath -- A pointer to the device path. Should be ignored by + device driver +--*/ +; + +EFI_STATUS +EFIAPI +IdeControllerStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ) +/*++ + + Routine Description: + Stop this driver on Controller Handle. + + Arguments: + This - Protocol instance pointer. + Controller - Handle of device to stop driver on + NumberOfChildren - Not used + ChildHandleBuffer - Not used + + Returns: + EFI_SUCCESS - This driver is removed DeviceHandle + other - This driver was not removed from this device + +--*/ +; + +// +// IDE controller init functions declaration +// +EFI_STATUS +EFIAPI +IdeInitGetChannelInfo ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + OUT BOOLEAN *Enabled, + OUT UINT8 *MaxDevices + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Enabled - TODO: add argument description + MaxDevices - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitNotifyPhase ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, + OUT UINT8 Channel + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Phase - TODO: add argument description + Channel - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitSubmitData ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_IDENTIFY_DATA *IdentifyData + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Device - TODO: add argument description + IdentifyData - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitSubmitFailingModes ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Device - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitDisqualifyMode ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *BadModes + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Device - TODO: add argument description + BadModes - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitCalculateMode ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE **SupportedModes + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Device - TODO: add argument description + SupportedModes - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +IdeInitSetTiming ( + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *Modes + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + Channel - TODO: add argument description + Device - TODO: add argument description + Modes - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +// +// Forward reference declaration +// +EFI_STATUS +EFIAPI +IdeControllerComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + Language - A pointer to a three character ISO 639-2 language identifier. + This is the language of the driver name that that the caller + is requesting, and it must match one of the languages specified + in SupportedLanguages. The number of languages supported by a + driver is up to the driver writer. + DriverName - A pointer to the Unicode string to return. This Unicode string + is the name of the driver specified by This in the language + specified by Language. + + Returns: + EFI_SUCCESS - The Unicode string for the Driver specified by This + and the language specified by Language was returned + in DriverName. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - DriverName is NULL. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +; + +EFI_STATUS +EFIAPI +IdeControllerComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +/*++ + + Routine Description: + Retrieves a Unicode string that is the user readable name of the controller + that is being managed by an EFI Driver. + + Arguments: + This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. + ControllerHandle - The handle of a controller that the driver specified by + This is managing. This handle specifies the controller + whose name is to be returned. + ChildHandle - The handle of the child controller to retrieve the name + of. This is an optional parameter that may be NULL. It + will be NULL for device drivers. It will also be NULL + for a bus drivers that wish to retrieve the name of the + bus controller. It will not be NULL for a bus driver + that wishes to retrieve the name of a child controller. + Language - A pointer to a three character ISO 639-2 language + identifier. This is the language of the controller name + that that the caller is requesting, and it must match one + of the languages specified in SupportedLanguages. The + number of languages supported by a driver is up to the + driver writer. + ControllerName - A pointer to the Unicode string to return. This Unicode + string is the name of the controller specified by + ControllerHandle and ChildHandle in the language + specified by Language from the point of view of the + driver specified by This. + + Returns: + EFI_SUCCESS - The Unicode string for the user readable name in the + language specified by Language for the driver + specified by This was returned in DriverName. + EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE. + EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid + EFI_HANDLE. + EFI_INVALID_PARAMETER - Language is NULL. + EFI_INVALID_PARAMETER - ControllerName is NULL. + EFI_UNSUPPORTED - The driver specified by This is not currently + managing the controller specified by + ControllerHandle and ChildHandle. + EFI_UNSUPPORTED - The driver specified by This does not support the + language specified by Language. + +--*/ +; + +#endif diff --git a/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf new file mode 100755 index 0000000000..f8467dbec4 --- /dev/null +++ b/PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf @@ -0,0 +1,52 @@ +#/** @file +# +# Component description file for the IDE Controller Init module. +# +# Copyright (c) 2008, Intel Corporation.
+# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = IdeController + FILE_GUID = F3790689-FB90-4479-A2EF-B82A43AFE74D + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + ENTRY_POINT = InitializeIdeControllerDriver + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources.common] + ComponentName.c + IdeController.c + IdeController.h + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + UefiDriverEntryPoint + DebugLib + UefiLib + BaseLib + BaseMemoryLib + MemoryAllocationLib + UefiBootServicesTableLib + +[Protocols] + gEfiPciIoProtocolGuid + gEfiIdeControllerInitProtocolGuid -- 2.39.2