IdeController.h revision 20c1e33fe47a2179c1a016cac6b7d03bc4f5e125
1/** @file 2 Header file for IDE controller driver. 3 4 Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. 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 _IDE_CONTROLLER_H 16#define _IDE_CONTROLLER_H 17 18#include <Uefi.h> 19#include <Protocol/ComponentName.h> 20#include <Protocol/DriverBinding.h> 21#include <Protocol/PciIo.h> 22#include <Protocol/IdeControllerInit.h> 23#include <Library/UefiDriverEntryPoint.h> 24#include <Library/DebugLib.h> 25#include <Library/UefiLib.h> 26#include <Library/BaseLib.h> 27#include <Library/BaseMemoryLib.h> 28#include <Library/MemoryAllocationLib.h> 29#include <Library/UefiBootServicesTableLib.h> 30#include <IndustryStandard/Pci.h> 31 32// 33// Global Variables definitions 34// 35extern EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding; 36extern EFI_COMPONENT_NAME_PROTOCOL gIdeControllerComponentName; 37extern EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2; 38 39// 40// Supports 2 channel max 41// 42#define ICH_IDE_MAX_CHANNEL 0x02 43// 44// Supports 2 devices max 45// 46#define ICH_IDE_MAX_DEVICES 0x02 47#define ICH_IDE_ENUMER_ALL FALSE 48 49// 50// Driver binding functions declaration 51// 52/** 53 Register Driver Binding protocol for this driver. 54 55 @param This A pointer points to the Binding Protocol instance 56 @param Controller The handle of controller to be tested. 57 @param RemainingDevicePath A pointer to the device path. Ignored by device 58 driver but used by bus driver 59 60 @retval EFI_SUCCESS Driver loaded. 61 @retval !EFI_SUCESS Driver not loaded. 62**/ 63EFI_STATUS 64EFIAPI 65IdeControllerSupported ( 66 IN EFI_DRIVER_BINDING_PROTOCOL *This, 67 IN EFI_HANDLE Controller, 68 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 69 ) 70; 71 72/** 73 This routine is called right after the .Supported() called and return 74 EFI_SUCCESS. Notes: The supported protocols are checked but the Protocols 75 are closed. 76 77 @param This A pointer points to the Binding Protocol instance 78 @param Controller The handle of controller to be tested. Parameter 79 passed by the caller 80 @param RemainingDevicePath A pointer to the device path. Should be ignored by 81 device driver 82 83 @return EFI_STATUS Status of InstallMultipleProtocolInterfaces() 84**/ 85EFI_STATUS 86EFIAPI 87IdeControllerStart ( 88 IN EFI_DRIVER_BINDING_PROTOCOL *This, 89 IN EFI_HANDLE Controller, 90 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 91 ) 92; 93 94/** 95 Stop this driver on Controller Handle. 96 97 @param This Protocol instance pointer. 98 @param Controller Handle of device to stop driver on 99 @param NumberOfChildren Not used 100 @param ChildHandleBuffer Not used 101 102 @retval EFI_SUCESS This driver is removed DeviceHandle 103 @retval !EFI_SUCCESS This driver was not removed from this device 104**/ 105EFI_STATUS 106EFIAPI 107IdeControllerStop ( 108 IN EFI_DRIVER_BINDING_PROTOCOL *This, 109 IN EFI_HANDLE Controller, 110 IN UINTN NumberOfChildren, 111 IN EFI_HANDLE *ChildHandleBuffer 112 ) 113; 114 115// 116// IDE controller init functions declaration 117// 118/** 119 This function can be used to obtain information about a specified channel. 120 It's usually used by IDE Bus driver during enumeration process. 121 122 @param This the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 123 @param Channel Channel number (0 based, either 0 or 1) 124 @param Enabled TRUE if the channel is enabled. If the channel is disabled, 125 then it will no be enumerated. 126 @param MaxDevices The Max number of IDE devices that the bus driver can expect 127 on this channel. For ATA/ATAPI, this number is either 1 or 2. 128 129 @retval EFI_SUCCESS Success to get channel information 130 @retval EFI_INVALID_PARAMETER Invalid channel id. 131**/ 132EFI_STATUS 133EFIAPI 134IdeInitGetChannelInfo ( 135 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 136 IN UINT8 Channel, 137 OUT BOOLEAN *Enabled, 138 OUT UINT8 *MaxDevices 139 ) 140; 141 142/** 143 This function is called by IdeBus driver before executing certain actions. 144 This allows IDE Controller Init to prepare for each action. 145 146 @param This the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 147 @param Phase phase indicator defined by IDE_CONTROLLER_INIT protocol 148 @param Channel Channel number (0 based, either 0 or 1) 149 150 @return EFI_SUCCESS Success operation. 151**/ 152EFI_STATUS 153EFIAPI 154IdeInitNotifyPhase ( 155 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 156 IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, 157 OUT UINT8 Channel 158 ) 159; 160 161/** 162 This function is called by IdeBus driver to submit EFI_IDENTIFY_DATA data structure 163 obtained from IDE deivce. This structure is used to set IDE timing 164 165 @param This The EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 166 @param Channel IDE channel number (0 based, either 0 or 1) 167 @param Device IDE device number 168 @param IdentifyData A pointer to EFI_IDENTIFY_DATA data structure 169 170 @return EFI_SUCCESS Success operation. 171**/ 172EFI_STATUS 173EFIAPI 174IdeInitSubmitData ( 175 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 176 IN UINT8 Channel, 177 IN UINT8 Device, 178 IN EFI_IDENTIFY_DATA *IdentifyData 179 ) 180; 181 182/** 183 This function is called by IdeBus driver to disqualify unsupported operation 184 mode on specfic IDE device 185 186 @param This the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 187 @param Channel IDE channel number (0 based, either 0 or 1) 188 @param Device IDE device number 189 @param BadModes Operation mode indicator 190 191 @return EFI_SUCCESS Success operation. 192**/ 193EFI_STATUS 194EFIAPI 195IdeInitDisqualifyMode ( 196 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 197 IN UINT8 Channel, 198 IN UINT8 Device, 199 IN EFI_ATA_COLLECTIVE_MODE *BadModes 200 ) 201; 202 203/** 204 This function is called by IdeBus driver to calculate the best operation mode 205 supported by specific IDE device 206 207 @param This the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 208 @param Channel IDE channel number (0 based, either 0 or 1) 209 @param Device IDE device number 210 @param SupportedModes Modes collection supported by IDE device 211 212 @retval EFI_OUT_OF_RESOURCES Fail to allocate pool. 213 @retval EFI_INVALID_PARAMETER Invalid channel id and device id. 214**/ 215EFI_STATUS 216EFIAPI 217IdeInitCalculateMode ( 218 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 219 IN UINT8 Channel, 220 IN UINT8 Device, 221 IN EFI_ATA_COLLECTIVE_MODE **SupportedModes 222 ) 223; 224 225/** 226 This function is called by IdeBus driver to set appropriate timing on IDE 227 controller according supported operation mode. 228 229 @param This the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance. 230 @param Channel IDE channel number (0 based, either 0 or 1) 231 @param Device IDE device number 232 @param Modes IDE device modes 233 234 @retval EFI_SUCCESS Sucess operation. 235**/ 236EFI_STATUS 237EFIAPI 238IdeInitSetTiming ( 239 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, 240 IN UINT8 Channel, 241 IN UINT8 Device, 242 IN EFI_ATA_COLLECTIVE_MODE *Modes 243 ) 244; 245 246// 247// Forward reference declaration 248// 249/** 250 Retrieves a Unicode string that is the user readable name of the EFI Driver. 251 252 @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. 253 @param Language A pointer to a three character ISO 639-2 language identifier. 254 This is the language of the driver name that that the caller 255 is requesting, and it must match one of the languages specified 256 in SupportedLanguages. The number of languages supported by a 257 driver is up to the driver writer. 258 @param DriverName A pointer to the Unicode string to return. This Unicode string 259 is the name of the driver specified by This in the language 260 specified by Language. 261 262 @retval EFI_SUCCESS The Unicode string for the Driver specified by This 263 and the language specified by Language was returned 264 in DriverName. 265 @retval EFI_INVALID_PARAMETER Language is NULL. 266 @retval EFI_INVALID_PARAMETER DriverName is NULL. 267 @retval EFI_UNSUPPORTED The driver specified by This does not support the 268 language specified by Language. 269**/ 270EFI_STATUS 271EFIAPI 272IdeControllerComponentNameGetDriverName ( 273 IN EFI_COMPONENT_NAME_PROTOCOL *This, 274 IN CHAR8 *Language, 275 OUT CHAR16 **DriverName 276 ) 277; 278 279/** 280 Retrieves a Unicode string that is the user readable name of the controller 281 that is being managed by an EFI Driver. 282 283 @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. 284 @param ControllerHandle The handle of a controller that the driver specified by 285 This is managing. This handle specifies the controller 286 whose name is to be returned. 287 @param OPTIONAL The handle of the child controller to retrieve the name 288 of. This is an optional parameter that may be NULL. It 289 will be NULL for device drivers. It will also be NULL 290 for a bus drivers that wish to retrieve the name of the 291 bus controller. It will not be NULL for a bus driver 292 that wishes to retrieve the name of a child controller. 293 @param Language A pointer to a three character ISO 639-2 language 294 identifier. This is the language of the controller name 295 that that the caller is requesting, and it must match one 296 of the languages specified in SupportedLanguages. The 297 number of languages supported by a driver is up to the 298 driver writer. 299 @param ControllerName A pointer to the Unicode string to return. This Unicode 300 string is the name of the controller specified by 301 ControllerHandle and ChildHandle in the language 302 specified by Language from the point of view of the 303 driver specified by This. 304 305 @retval EFI_SUCCESS The Unicode string for the user readable name in the 306 language specified by Language for the driver 307 specified by This was returned in DriverName. 308 @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. 309 @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 310 EFI_HANDLE. 311 @retval EFI_INVALID_PARAMETER Language is NULL. 312 @retval EFI_INVALID_PARAMETER ControllerName is NULL. 313 @retval EFI_UNSUPPORTED The driver specified by This is not currently 314 managing the controller specified by 315 ControllerHandle and ChildHandle. 316 @retval EFI_UNSUPPORTED The driver specified by This does not support the 317 language specified by Language. 318**/ 319EFI_STATUS 320EFIAPI 321IdeControllerComponentNameGetControllerName ( 322 IN EFI_COMPONENT_NAME_PROTOCOL *This, 323 IN EFI_HANDLE ControllerHandle, 324 IN EFI_HANDLE ChildHandle OPTIONAL, 325 IN CHAR8 *Language, 326 OUT CHAR16 **ControllerName 327 ) 328; 329 330#endif 331