From: vanjeff Date: Thu, 25 Oct 2007 07:59:45 +0000 (+0000) Subject: Save original PCI attributes in start() function and restore it in Stop() for those... X-Git-Tag: edk2-stable201903~21831 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=68246fa809e4a8ab61ce7bbfdd1a0b31d03e83fb Save original PCI attributes in start() function and restore it in Stop() for those PCI device drivers. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4212 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.c b/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.c index fc0b8efbbc..51aa51d3e9 100644 --- a/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.c +++ b/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.c @@ -1,12 +1,12 @@ /** @file - Copyright (c) 2006, 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 + Copyright (c) 2006, 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. + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ @@ -51,7 +51,7 @@ static SCSI_COMMAND_SET gSupportedATAPICommands[] = { { OP_WRITE_10, DataOut }, { OP_WRITE_12, DataOut }, { OP_WRITE_AND_VERIFY, DataOut }, - { 0xff, (DATA_DIRECTION) 0xff } + { 0xff, (DATA_DIRECTION) 0xff } }; static CHAR16 *gControllerNameString = (CHAR16 *) L"ATAPI Controller"; @@ -163,9 +163,9 @@ AtapiScsiPassThruDriverBindingStart ( ) { EFI_STATUS Status; - EFI_STATUS DisableStatus; EFI_PCI_IO_PROTOCOL *PciIo; UINT64 Supports; + UINT64 OriginalPciAttributes; PciIo = NULL; Status = gBS->OpenProtocol ( @@ -180,6 +180,20 @@ AtapiScsiPassThruDriverBindingStart ( return Status; } + // + // Save original PCI attributes + // + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OriginalPciAttributes + ); + + if (EFI_ERROR (Status)) { + return Status; + } + Status = PciIo->Attributes ( PciIo, EfiPciIoAttributeOperationSupported, @@ -204,29 +218,19 @@ AtapiScsiPassThruDriverBindingStart ( // // Create SCSI Pass Thru instance for the IDE channel. // - Status = RegisterAtapiScsiPassThru (This, Controller, PciIo); + Status = RegisterAtapiScsiPassThru (This, Controller, PciIo, OriginalPciAttributes); Done: if (EFI_ERROR (Status)) { - if (PciIo) { - DisableStatus = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationSupported, - 0, - &Supports - ); - if (!EFI_ERROR (DisableStatus)) { - Supports &= (EFI_PCI_DEVICE_ENABLE | - EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO | - EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO); - DisableStatus = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationDisable, - Supports, - NULL - ); - } - } + // + // Restore original PCI attributes + // + PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSet, + OriginalPciAttributes, + NULL + ); gBS->CloseProtocol ( Controller, @@ -264,7 +268,6 @@ AtapiScsiPassThruDriverBindingStop ( EFI_STATUS Status; EFI_SCSI_PASS_THRU_PROTOCOL *ScsiPassThru; ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate; - UINT64 Supports; Status = gBS->OpenProtocol ( Controller, @@ -288,26 +291,16 @@ AtapiScsiPassThruDriverBindingStop ( if (EFI_ERROR (Status)) { return Status; } + // - // Release Pci Io protocol on the controller handle. + // Restore original PCI attributes // - Status = AtapiScsiPrivate->PciIo->Attributes ( - AtapiScsiPrivate->PciIo, - EfiPciIoAttributeOperationSupported, - 0, - &Supports - ); - if (!EFI_ERROR (Status)) { - Supports &= (EFI_PCI_DEVICE_ENABLE | - EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO | - EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO); - Status = AtapiScsiPrivate->PciIo->Attributes ( - AtapiScsiPrivate->PciIo, - EfiPciIoAttributeOperationDisable, - Supports, - NULL - ); - } + AtapiScsiPrivate->PciIo->Attributes ( + AtapiScsiPrivate->PciIo, + EfiPciIoAttributeOperationSet, + AtapiScsiPrivate->OriginalPciAttributes, + NULL + ); gBS->CloseProtocol ( Controller, @@ -324,8 +317,10 @@ AtapiScsiPassThruDriverBindingStop ( /** Attaches SCSI Pass Thru Protocol for specified IDE channel. - @param Controller: Parent device handle to the IDE channel. - @param PciIo: PCI I/O protocol attached on the "Controller". + @param Controller: Parent device handle to the IDE channel. + @param PciIo: PCI I/O protocol attached on the "Controller". + @param OriginalPciAttributes Original PCI attributes + @return EFI_SUCCESS Always returned unless installing SCSI Pass Thru Protocol failed. @@ -338,12 +333,12 @@ EFI_STATUS RegisterAtapiScsiPassThru ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, - IN EFI_PCI_IO_PROTOCOL *PciIo + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT64 OriginalPciAttributes ) { EFI_STATUS Status; ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate; - UINT64 Supports; IDE_REGISTERS_BASE_ADDR IdeRegsBaseAddr[ATAPI_MAX_CHANNEL]; AtapiScsiPrivate = AllocateZeroPool (sizeof (ATAPI_SCSI_PASS_THRU_DEV)); @@ -353,35 +348,15 @@ RegisterAtapiScsiPassThru ( CopyMem (AtapiScsiPrivate->ChannelName, gAtapiChannelString, sizeof (gAtapiChannelString)); - // - // Enable channel - // - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationSupported, - 0, - &Supports - ); - if (!EFI_ERROR (Status)) { - Supports &= (EFI_PCI_DEVICE_ENABLE | - EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO | - EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO); - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - Supports, - NULL - ); - } - AtapiScsiPrivate->Signature = ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE; AtapiScsiPrivate->Handle = Controller; // // will reset the IoPort inside each API function. // - AtapiScsiPrivate->IoPort = NULL; - AtapiScsiPrivate->PciIo = PciIo; + AtapiScsiPrivate->IoPort = NULL; + AtapiScsiPrivate->PciIo = PciIo; + AtapiScsiPrivate->OriginalPciAttributes = OriginalPciAttributes; // // Obtain IDE IO port registers' base addresses @@ -414,7 +389,7 @@ RegisterAtapiScsiPassThru ( // // non-RAID SCSI controllers should set both physical and logical attributes // - AtapiScsiPrivate->ScsiPassThruMode.Attributes = EFI_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | + AtapiScsiPrivate->ScsiPassThruMode.Attributes = EFI_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | EFI_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL; AtapiScsiPrivate->ScsiPassThruMode.IoAlign = 0; @@ -477,7 +452,7 @@ AtapiScsiPassThruFunction ( if ((Target > MAX_TARGET_ID) || (Lun != 0)) { return EFI_INVALID_PARAMETER; } - + // // check the data fields in Packet parameter. // @@ -494,7 +469,7 @@ AtapiScsiPassThruFunction ( Packet->TransferLength = 0; return EFI_SUCCESS; } - + // // According to Target ID, reset the Atapi I/O Register mapping // (Target Id in [0,1] area, using AtapiIoPortRegisters[0], @@ -507,7 +482,7 @@ AtapiScsiPassThruFunction ( Target = Target % 2; AtapiScsiPrivate->IoPort = &AtapiScsiPrivate->AtapiIoPortRegisters[1]; } - + // // the ATAPI SCSI interface does not support non-blocking I/O // ignore the Event parameter @@ -519,7 +494,7 @@ AtapiScsiPassThruFunction ( } /** - Used to retrieve the list of legal Target IDs for SCSI devices + Used to retrieve the list of legal Target IDs for SCSI devices on a SCSI channel. @param This Protocol instance pointer. @@ -592,7 +567,7 @@ AtapiScsiPassThruGetNextDevice ( } /** - Used to allocate and build a device path node for a SCSI device + Used to allocate and build a device path node for a SCSI device on a SCSI channel. Would not build device path for a SCSI Host Controller. @param This Protocol instance pointer. @@ -633,11 +608,11 @@ AtapiScsiPassThruBuildDevicePath ( // // Validate parameters passed in. // - + if (DevicePath == NULL) { return EFI_INVALID_PARAMETER; } - + // // can not build device path for the SCSI Host Controller. // @@ -703,7 +678,7 @@ AtapiScsiPassThruGetTargetLun ( if (DevicePath == NULL || Target == NULL || Lun == NULL) { return EFI_INVALID_PARAMETER; } - + // // Check whether the DevicePath belongs to SCSI_DEVICE_PATH // @@ -726,7 +701,7 @@ AtapiScsiPassThruGetTargetLun ( } /** - Resets a SCSI channel.This operation resets all the + Resets a SCSI channel.This operation resets all the SCSI devices connected to the SCSI channel. @param This Protocol instance pointer. @@ -789,7 +764,7 @@ AtapiScsiPassThruResetChannel ( // 0xfb:1111,1011 // DeviceControlValue &= 0xfb; - + WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Alt.DeviceControl, DeviceControlValue); // @@ -803,7 +778,7 @@ AtapiScsiPassThruResetChannel ( if (ResetFlag) { return EFI_SUCCESS; } - + return EFI_TIMEOUT; } @@ -849,7 +824,7 @@ AtapiScsiPassThruResetTarget ( if (Target == This->Mode->AdapterId) { return EFI_SUCCESS; } - + // // According to Target ID, reset the Atapi I/O Register mapping // (Target Id in [0,1] area, using AtapiIoPortRegisters[0], @@ -860,7 +835,7 @@ AtapiScsiPassThruResetTarget ( } else { AtapiScsiPrivate->IoPort = &AtapiScsiPrivate->AtapiIoPortRegisters[1]; } - + // // for ATAPI device, no need to wait DRDY ready after device selecting. // @@ -880,7 +855,7 @@ AtapiScsiPassThruResetTarget ( if (EFI_ERROR (StatusWaitForBSYClear (AtapiScsiPrivate, 31000000))) { return EFI_TIMEOUT; } - + // // stall 5 seconds to make the device status stable // @@ -903,13 +878,13 @@ Routine Description: Arguments: PciIo - Pointer to the EFI_PCI_IO_PROTOCOL instance - IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to + IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to receive IDE IO port registers' base addresses - + Returns: EFI_STATUS - + --*/ { EFI_STATUS Status; @@ -934,7 +909,7 @@ Returns: // // The BARs should be of IO type // - if ((PciData.Device.Bar[0] & BIT0) == 0 || + if ((PciData.Device.Bar[0] & BIT0) == 0 || (PciData.Device.Bar[1] & BIT0) == 0) { return EFI_UNSUPPORTED; } @@ -978,23 +953,23 @@ Routine Description: Initialize each Channel's Base Address of CommandBlock and ControlBlock. Arguments: - + AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV IdeRegsBaseAddr - The pointer of IDE_REGISTERS_BASE_ADDR - + Returns: - + None ---*/ +--*/ { - + UINT8 IdeChannel; UINT16 CommandBlockBaseAddr; UINT16 ControlBlockBaseAddr; IDE_BASE_REGISTERS *RegisterPointer; - + for (IdeChannel = 0; IdeChannel < ATAPI_MAX_CHANNEL; IdeChannel++) { RegisterPointer = &AtapiScsiPrivate->AtapiIoPortRegisters[IdeChannel]; @@ -1005,7 +980,7 @@ Returns: // CommandBlockBaseAddr = IdeRegsBaseAddr[IdeChannel].CommandBlockBaseAddr; ControlBlockBaseAddr = IdeRegsBaseAddr[IdeChannel].ControlBlockBaseAddr; - + RegisterPointer->Data = CommandBlockBaseAddr; (*(UINT16 *) &RegisterPointer->Reg1) = (UINT16) (CommandBlockBaseAddr + 0x01); RegisterPointer->SectorCount = (UINT16) (CommandBlockBaseAddr + 0x02); @@ -1014,14 +989,14 @@ Returns: RegisterPointer->CylinderMsb = (UINT16) (CommandBlockBaseAddr + 0x05); RegisterPointer->Head = (UINT16) (CommandBlockBaseAddr + 0x06); (*(UINT16 *) &RegisterPointer->Reg) = (UINT16) (CommandBlockBaseAddr + 0x07); - + (*(UINT16 *) &RegisterPointer->Alt) = ControlBlockBaseAddr; RegisterPointer->DriveAddress = (UINT16) (ControlBlockBaseAddr + 0x01); } } - + EFI_STATUS CheckSCSIRequestPacket ( EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet @@ -1035,7 +1010,7 @@ Routine Description: Arguments: - Packet - The pointer of EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET + Packet - The pointer of EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET Returns: @@ -1054,7 +1029,7 @@ Returns: if (Packet->Cdb == NULL) { return EFI_INVALID_PARAMETER; } - + // // Checks whether the request command is supported. // @@ -1066,7 +1041,7 @@ Returns: } /** - Checks the requested SCSI command: + Checks the requested SCSI command: Is it supported by this driver? Is the Data transfer direction reasonable? @@ -1169,7 +1144,7 @@ SubmitBlockingIoCommand ( Packet->SenseDataLength = 0; return PacketCommandStatus; } - + // // Check if SenseData meets the alignment requirement. // @@ -1180,7 +1155,7 @@ SubmitBlockingIoCommand ( } } - + // // Return SenseData if PacketCommandStatus matches // the following return codes. @@ -1188,7 +1163,7 @@ SubmitBlockingIoCommand ( if ((PacketCommandStatus == EFI_BAD_BUFFER_SIZE) || (PacketCommandStatus == EFI_DEVICE_ERROR) || (PacketCommandStatus == EFI_TIMEOUT)) { - + // // avoid submit request sense command continuously. // @@ -1678,7 +1653,7 @@ WritePortW ( /** Check whether DRQ is clear in the Status Register. (BSY must also be cleared) If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is + DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -1756,10 +1731,10 @@ StatusDRQClear ( } /** - Check whether DRQ is clear in the Alternate Status Register. + Check whether DRQ is clear in the Alternate Status Register. (BSY must also be cleared). If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is + DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -1837,7 +1812,7 @@ AltStatusDRQClear ( /** Check whether DRQ is ready in the Status Register. (BSY must also be cleared) If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is + DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -1915,10 +1890,10 @@ StatusDRQReady ( } /** - Check whether DRQ is ready in the Alternate Status Register. + Check whether DRQ is ready in the Alternate Status Register. (BSY must also be cleared) If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is + DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -1997,7 +1972,7 @@ AltStatusDRQReady ( /** Check whether BSY is clear in the Status Register. If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is + BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -2058,7 +2033,7 @@ StatusWaitForBSYClear ( /** Check whether BSY is clear in the Alternate Status Register. If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is + BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -2116,10 +2091,10 @@ AltStatusWaitForBSYClear ( } /** - Check whether DRDY is ready in the Status Register. + Check whether DRDY is ready in the Status Register. (BSY must also be cleared) If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is + DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -2169,7 +2144,7 @@ StatusDRDYReady ( return EFI_ABORTED; } } - + // // Stall for 30 us // @@ -2192,10 +2167,10 @@ StatusDRDYReady ( } /** - Check whether DRDY is ready in the Alternate Status Register. + Check whether DRDY is ready in the Alternate Status Register. (BSY must also be cleared) If TimeoutInMicroSeconds is zero, this routine should wait infinitely for - DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is + DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is elapsed. @todo function comment is missing 'Routine Description:' @@ -2268,7 +2243,7 @@ AltStatusDRDYReady ( } /** - Check Error Register for Error Information. + Check Error Register for Error Information. @todo function comment is missing 'Routine Description:' @todo function comment is missing 'Arguments:' @@ -2289,7 +2264,7 @@ AtapiPassThruCheckErrorStatus ( AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Reg.Status ); - + DEBUG_CODE_BEGIN (); if (StatusRegister & DWF) { @@ -2310,7 +2285,7 @@ AtapiPassThruCheckErrorStatus ( if (StatusRegister & ERR) { ErrorRegister = ReadPortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Reg1.Error); - + if (ErrorRegister & BBK_ERR) { DEBUG ( @@ -2367,16 +2342,16 @@ AtapiPassThruCheckErrorStatus ( return EFI_SUCCESS; } - + return EFI_DEVICE_ERROR; } /** The user Entry Point for module AtapiPassThru. The user code starts with this function. - @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] ImageHandle The firmware allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. - + @retval EFI_SUCCESS The entry point is executed successfully. @retval other Some error occurs when executing this entry point. diff --git a/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.h b/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.h index ac1db971d7..1ac174c7a0 100644 --- a/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.h +++ b/MdeModulePkg/Bus/Pci/AtapiPassThruDxe/AtapiPassThru.h @@ -1,12 +1,12 @@ /** @file - Copyright (c) 2006, 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 + Copyright (c) 2006, 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. + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Module Name: AtapiPassThru.h @@ -102,6 +102,7 @@ typedef struct { EFI_SCSI_PASS_THRU_PROTOCOL ScsiPassThru; EFI_SCSI_PASS_THRU_MODE ScsiPassThruMode; EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; // // Local Data goes here // @@ -454,6 +455,7 @@ AtapiScsiPassThruDriverEntryPoint ( @param This @param Controller @param PciIo + @param OriginalPciAttributes @todo Add function description @todo This add argument description @@ -463,9 +465,10 @@ AtapiScsiPassThruDriverEntryPoint ( **/ EFI_STATUS RegisterAtapiScsiPassThru ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, - IN EFI_PCI_IO_PROTOCOL *PciIo + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT64 OriginalPciAttributes ) ; @@ -971,13 +974,13 @@ Routine Description: Arguments: PciIo - Pointer to the EFI_PCI_IO_PROTOCOL instance - IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to + IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to receive IDE IO port registers' base addresses - + Returns: EFI_STATUS - + --*/ ; @@ -993,15 +996,15 @@ Routine Description: Initialize each Channel's Base Address of CommandBlock and ControlBlock. Arguments: - + AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV IdeRegsBaseAddr - The pointer of IDE_REGISTERS_BASE_ADDR - + Returns: - + None ---*/ +--*/ ; #endif diff --git a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c index 488c963952..32ae6b6cdc 100644 --- a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c +++ b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c @@ -133,7 +133,7 @@ EhcReset ( goto ON_EXIT; } } - + // // Clean up the asynchronous transfers, currently only // interrupt supports asynchronous operation. @@ -262,9 +262,9 @@ EhcSetState ( // // Software must not write a one to this field unless the host controller - // is in the Halted state. Doing so will yield undefined results. + // is in the Halted state. Doing so will yield undefined results. // refers to Spec[EHCI1.0-2.3.1] - // + // if (!EHC_REG_BIT_IS_SET (Ehc, EHC_USBSTS_OFFSET, USBSTS_HALT)) { Status = EFI_DEVICE_ERROR; break; @@ -454,7 +454,7 @@ EhcSetRootHubPortFeature ( break; } } - + // // Set one to PortReset bit must also set zero to PortEnable bit // @@ -1395,7 +1395,8 @@ ON_EXIT: /** Create and initialize a USB2_HC_DEV - @param PciIo The PciIo on this device + @param PciIo The PciIo on this device + @param OriginalPciAttributes Original PCI attributes @return The allocated and initialized USB2_HC_DEV structure @return if created, otherwise NULL. @@ -1404,7 +1405,8 @@ ON_EXIT: STATIC USB2_HC_DEV * EhcCreateUsb2Hc ( - IN EFI_PCI_IO_PROTOCOL *PciIo + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT64 OriginalPciAttributes ) { USB2_HC_DEV *Ehc; @@ -1437,7 +1439,8 @@ EhcCreateUsb2Hc ( Ehc->Usb2Hc.MajorRevision = 0x1; Ehc->Usb2Hc.MinorRevision = 0x1; - Ehc->PciIo = PciIo; + Ehc->PciIo = PciIo; + Ehc->OriginalPciAttributes = OriginalPciAttributes; InitializeListHead (&Ehc->AsyncIntTransfers); @@ -1492,6 +1495,7 @@ EhcDriverBindingStart ( USB2_HC_DEV *Ehc; EFI_PCI_IO_PROTOCOL *PciIo; UINT64 Supports; + UINT64 OriginalPciAttributes; // // Open the PciIo Protocol, then enable the USB host controller @@ -1510,6 +1514,20 @@ EhcDriverBindingStart ( return EFI_DEVICE_ERROR; } + // + // Save original PCI attributes + // + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OriginalPciAttributes + ); + + if (EFI_ERROR (Status)) { + return Status; + } + Status = PciIo->Attributes ( PciIo, EfiPciIoAttributeOperationSupported, @@ -1534,7 +1552,7 @@ EhcDriverBindingStart ( // // Create then install USB2_HC_PROTOCOL // - Ehc = EhcCreateUsb2Hc (PciIo); + Ehc = EhcCreateUsb2Hc (PciIo, OriginalPciAttributes); if (Ehc == NULL) { EHC_ERROR (("EhcDriverBindingStart: failed to create USB2_HC\n")); @@ -1616,6 +1634,16 @@ FREE_POOL: gBS->FreePool (Ehc); CLOSE_PCIIO: + // + // Restore original PCI attributes + // + PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSet, + OriginalPciAttributes, + NULL + ); + gBS->CloseProtocol ( Controller, &gEfiPciIoProtocolGuid, @@ -1653,7 +1681,6 @@ EhcDriverBindingStop ( EFI_USB2_HC_PROTOCOL *Usb2Hc; EFI_PCI_IO_PROTOCOL *PciIo; USB2_HC_DEV *Ehc; - UINT64 Supports; // // Test whether the Controller handler passed in is a valid @@ -1704,23 +1731,14 @@ EhcDriverBindingStop ( } // - // Disable the USB Host Controller + // Restore original PCI attributes // - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationSupported, - 0, - &Supports - ); - if (!EFI_ERROR (Status)) { - Supports &= EFI_PCI_DEVICE_ENABLE; - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationDisable, - Supports, - NULL - ); - } + PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSet, + Ehc->OriginalPciAttributes, + NULL + ); gBS->CloseProtocol ( Controller, @@ -1729,7 +1747,8 @@ EhcDriverBindingStop ( Controller ); - gBS->FreePool (Ehc); + FreePool (Ehc); + return EFI_SUCCESS; } diff --git a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.h b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.h index 7104914e93..50a3f1c698 100644 --- a/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.h +++ b/MdeModulePkg/Bus/Pci/EhciDxe/Ehci.h @@ -65,11 +65,11 @@ enum { EHC_ROOT_PORT_RECOVERY_STALL = 20 * EHC_1_MILLISECOND, // - // Sync and Async transfer polling interval, set by experience, + // Sync and Async transfer polling interval, set by experience, // and the unit of Async is 100us, means 50ms as interval. // EHC_SYNC_POLL_INTERVAL = 20 * EHC_1_MICROSECOND, - EHC_ASYNC_POLL_INTERVAL = 50 * 10000U, + EHC_ASYNC_POLL_INTERVAL = 50 * 10000U, // // EHC raises TPL to TPL_NOTIFY to serialize all its operations @@ -111,6 +111,7 @@ struct _USB2_HC_DEV { EFI_USB2_HC_PROTOCOL Usb2Hc; EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; USBHC_MEM_POOL *MemPool; // diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c index 36ce1bd4fe..82142b6a85 100644 --- a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c +++ b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c @@ -82,7 +82,7 @@ UhciReset ( default: goto ON_INVAILD_PARAMETER; } - + // // Delete all old transactions on the USB bus, then // reinitialize the frame list @@ -92,13 +92,13 @@ UhciReset ( UhciInitFrameList (Uhc); gBS->RestoreTPL (OldTpl); - + return EFI_SUCCESS; ON_INVAILD_PARAMETER: - + gBS->RestoreTPL (OldTpl); - + return EFI_INVALID_PARAMETER; } @@ -213,7 +213,7 @@ UhciSetState ( UsbCmd |= USBCMD_FGR; UhciWriteReg (Uhc->PciIo, USBCMD_OFFSET, UsbCmd); } - + // // wait 20ms to let resume complete (20ms is specified by UHCI spec) // @@ -237,7 +237,7 @@ UhciSetState ( Status = EFI_DEVICE_ERROR; goto ON_EXIT; } - + // // Set Enter Global Suspend Mode bit to 1. // @@ -1941,7 +1941,8 @@ ON_EXIT: STATIC USB_HC_DEV * UhciAllocateDev ( - IN EFI_PCI_IO_PROTOCOL *PciIo + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT64 OriginalPciAttributes ) { USB_HC_DEV *Uhc; @@ -1990,8 +1991,9 @@ UhciAllocateDev ( Uhc->Usb2Hc.MajorRevision = 0x1; Uhc->Usb2Hc.MinorRevision = 0x1; - Uhc->PciIo = PciIo; - Uhc->MemPool = UsbHcInitMemPool (PciIo, TRUE, 0); + Uhc->PciIo = PciIo; + Uhc->OriginalPciAttributes = OriginalPciAttributes; + Uhc->MemPool = UsbHcInitMemPool (PciIo, TRUE, 0); if (Uhc->MemPool == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -2068,7 +2070,6 @@ UhciCleanDevUp ( ) { USB_HC_DEV *Uhc; - UINT64 Supports; // // Uninstall the USB_HC and USB_HC2 protocol, then disable the controller @@ -2090,20 +2091,16 @@ UhciCleanDevUp ( UhciFreeAllAsyncReq (Uhc); UhciDestoryFrameList (Uhc); - - Uhc->PciIo->Attributes ( - Uhc->PciIo, - EfiPciIoAttributeOperationSupported, - 0, - &Supports - ); - Supports &= EFI_PCI_DEVICE_ENABLE; + + // + // Restore original PCI attributes + // Uhc->PciIo->Attributes ( - Uhc->PciIo, - EfiPciIoAttributeOperationDisable, - Supports, - NULL - ); + Uhc->PciIo, + EfiPciIoAttributeOperationSet, + Uhc->OriginalPciAttributes, + NULL + ); UhciFreeDev (Uhc); } @@ -2135,6 +2132,7 @@ UhciDriverBindingStart ( EFI_PCI_IO_PROTOCOL *PciIo; USB_HC_DEV *Uhc; UINT64 Supports; + UINT64 OriginalPciAttributes; // // Open PCIIO, then enable the EHC device and turn off emulation @@ -2153,6 +2151,20 @@ UhciDriverBindingStart ( return Status; } + // + // Save original PCI attributes + // + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OriginalPciAttributes + ); + + if (EFI_ERROR (Status)) { + return Status; + } + UhciTurnOffUsbEmulation (PciIo); Status = PciIo->Attributes ( @@ -2175,7 +2187,7 @@ UhciDriverBindingStart ( goto CLOSE_PCIIO; } - Uhc = UhciAllocateDev (PciIo); + Uhc = UhciAllocateDev (PciIo, OriginalPciAttributes); if (Uhc == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -2250,6 +2262,16 @@ FREE_UHC: UhciFreeDev (Uhc); CLOSE_PCIIO: + // + // Restore original PCI attributes + // + PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSet, + OriginalPciAttributes, + NULL + ); + gBS->CloseProtocol ( Controller, &gEfiPciIoProtocolGuid, diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.h b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.h index cd92f6dd84..e47679515b 100644 --- a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.h +++ b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.h @@ -59,28 +59,28 @@ enum { // UHCI register operation timeout, set by experience // UHC_GENERIC_TIMEOUT = UHC_1_SECOND, - + // // Wait for force global resume(FGR) complete, refers to // specification[UHCI11-2.1.1] - // + // UHC_FORCE_GLOBAL_RESUME_STALL = 20 * UHC_1_MILLISECOND, // // Wait for roothub port reset and recovery, reset stall - // is set by experience, and recovery stall refers to + // is set by experience, and recovery stall refers to // specification[UHCI11-2.1.1] // UHC_ROOT_PORT_RESET_STALL = 50 * UHC_1_MILLISECOND, UHC_ROOT_PORT_RECOVERY_STALL = 10 * UHC_1_MILLISECOND, // - // Sync and Async transfer polling interval, set by experience, + // Sync and Async transfer polling interval, set by experience, // and the unit of Async is 100us. // UHC_SYNC_POLL_INTERVAL = 50 * UHC_1_MICROSECOND, UHC_ASYNC_POLL_INTERVAL = 50 * 10000UL, - + // // UHC raises TPL to TPL_NOTIFY to serialize all its operations // to protect shared data structures. @@ -117,6 +117,7 @@ struct _USB_HC_DEV { EFI_USB_HC_PROTOCOL UsbHc; EFI_USB2_HC_PROTOCOL Usb2Hc; EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; // // Schedule data structures diff --git a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/E100b.h b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/E100b.h index e832cb250f..80c90b5a6f 100644 --- a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/E100b.h +++ b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/E100b.h @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, 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. +Copyright (c) 2006, 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. Module Name: @@ -113,15 +113,15 @@ typedef struct CONFIG_HEADER { //------------------------------------------------------------------------- // Offsets to the various registers. -// All accesses need not be longword aligned. +// All accesses need not be longword aligned. //------------------------------------------------------------------------- enum speedo_offsets { - SCBStatus = 0, SCBCmd = 2, // Rx/Command Unit command and status. - SCBPointer = 4, // General purpose pointer. - SCBPort = 8, // Misc. commands and operands. - SCBflash = 12, SCBeeprom = 14, // EEPROM and flash memory control. - SCBCtrlMDI = 16, // MDI interface control. - SCBEarlyRx = 20, // Early receive byte count. + SCBStatus = 0, SCBCmd = 2, // Rx/Command Unit command and status. + SCBPointer = 4, // General purpose pointer. + SCBPort = 8, // Misc. commands and operands. + SCBflash = 12, SCBeeprom = 14, // EEPROM and flash memory control. + SCBCtrlMDI = 16, // MDI interface control. + SCBEarlyRx = 20, // Early receive byte count. SCBEarlyRxInt = 24, SCBFlowCtrlReg = 25, SCBPmdr = 27, // offsets for general control registers (GCRs) SCBGenCtrl = 28, SCBGenStatus = 29, SCBGenCtrl2 = 30, SCBRsvd = 31 @@ -130,7 +130,7 @@ enum speedo_offsets { #define GCR2_EEPROM_ACCESS_SEMAPHORE 0x80 // bit offset into the gcr2 //------------------------------------------------------------------------- -// Action commands - Commands that can be put in a command list entry. +// Action commands - Commands that can be put in a command list entry. //------------------------------------------------------------------------- enum commands { CmdNOp = 0, CmdIASetup = 1, CmdConfigure = 2, CmdMulticastList = 3, @@ -249,7 +249,7 @@ enum commands { #define BIT_4_6 0x0070 #define BIT_4_7 0x00F0 #define BIT_5_7 0x00E0 -#define BIT_5_9 0x03E0 +#define BIT_5_9 0x03E0 #define BIT_5_12 0x1FE0 #define BIT_5_15 0xFFE0 #define BIT_6_7 0x00c0 @@ -640,6 +640,10 @@ typedef struct s_data_instance { UINT64 Unique_ID; EFI_PCI_IO_PROTOCOL *Io_Function; + // + // Original PCI attributes + // + UINT64 OriginalPciAttributes; VOID (*Delay_30)(UINTN); // call back routine VOID (*Virt2Phys_30)(UINT64 virtual_addr, UINT64 physical_ptr); // call back routine diff --git a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Init.c b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Init.c index 784bf5560e..3e3391ebee 100644 --- a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Init.c +++ b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Init.c @@ -1,13 +1,13 @@ /*++ -Copyright (c) 2006, 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. +Copyright (c) 2006, 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. Module Name: @@ -22,7 +22,7 @@ Revision History --*/ #include "Undi32.h" - +#include // // Global Variables // @@ -30,7 +30,7 @@ PXE_SW_UNDI *pxe = 0; // 3.0 entry point PXE_SW_UNDI *pxe_31 = 0; // 3.1 entry UNDI32_DEV *UNDI32DeviceList[MAX_NIC_INTERFACES]; -NII_TABLE *UnidiDataPointer=NULL; +NII_TABLE *UndiDataPointer = NULL; VOID EFIAPI @@ -103,7 +103,7 @@ UndiNotifyExitBs ( Routine Description: - When EFI is shuting down the boot services, we need to install a + When EFI is shuting down the boot services, we need to install a configuration table for UNDI to work at runtime! Arguments: @@ -152,15 +152,15 @@ Routine Description: Arguments: This - Protocol instance pointer. - + Controller - Handle of device to test. - + RemainingDevicePath - Not used. Returns: EFI_SUCCESS - This driver supports this device. - + other - This driver does not support this device. --*/ @@ -266,15 +266,15 @@ Routine Description: Arguments: This - Protocol instance pointer. - + Controller - Handle of device to work with. - + RemainingDevicePath - Not used, always produce all possible children. Returns: EFI_SUCCESS - This driver is added to Controller. - + other - This driver does not support this device. --*/ @@ -286,7 +286,7 @@ Returns: UINT16 NewCommand; UINT8 *TmpPxePointer; EFI_PCI_IO_PROTOCOL *PciIoFncs; - UINTN Len; + UINTN Len; UINT64 Supports; Status = gBS->OpenProtocol ( @@ -334,6 +334,20 @@ Returns: ZeroMem ((CHAR8 *) UNDI32Device, sizeof (UNDI32_DEV)); + // + // Get original PCI attributes + // + Status = PciIoFncs->Attributes ( + PciIoFncs, + EfiPciIoAttributeOperationGet, + 0, + &UNDI32Device->NicInfo.OriginalPciAttributes + ); + + if (EFI_ERROR (Status)) { + return Status; + } + // // allocate and initialize both (old and new) the !pxe structures here, // there should only be one copy of each of these structure for any number @@ -509,22 +523,22 @@ Returns: } // - // if the table exists, free it and alloc again, or alloc it directly + // if the table exists, free it and alloc again, or alloc it directly // - if (UnidiDataPointer != NULL) { - Status = gBS->FreePool(UnidiDataPointer); + if (UndiDataPointer != NULL) { + Status = gBS->FreePool(UndiDataPointer); } if (EFI_ERROR (Status)) { goto UndiErrorDeleteDevicePath; } - Len = (pxe_31->IFcnt * sizeof (NII_ENTRY)) + sizeof (UnidiDataPointer); - Status = gBS->AllocatePool (EfiRuntimeServicesData, Len, (VOID **) &UnidiDataPointer); + Len = (pxe_31->IFcnt * sizeof (NII_ENTRY)) + sizeof (UndiDataPointer); + Status = gBS->AllocatePool (EfiRuntimeServicesData, Len, (VOID **) &UndiDataPointer); if (EFI_ERROR (Status)) { goto UndiErrorAllocDataPointer; } - + // // Open For Child Device // @@ -563,6 +577,16 @@ UndiErrorDeletePxe: } UndiErrorDeleteDevice: + // + // Restore original PCI attributes + // + PciIoFncs->Attributes ( + PciIoFncs, + EfiPciIoAttributeOperationSet, + UNDI32Device->NicInfo.OriginalPciAttributes, + NULL + ); + gBS->FreePool (UNDI32Device); UndiError: @@ -659,6 +683,17 @@ Returns: UNDI32Device = UNDI_DEV_FROM_THIS (NIIProtocol); + // + // Restore original PCI attributes + // + Status = UNDI32Device->NicInfo.Io_Function->Attributes ( + UNDI32Device->NicInfo.Io_Function, + EfiPciIoAttributeOperationSet, + UNDI32Device->NicInfo.OriginalPciAttributes, + NULL + ); + ASSERT_EFI_ERROR (Status); + Status = gBS->CloseProtocol ( Controller, &gEfiPciIoProtocolGuid, @@ -721,7 +756,7 @@ Routine Description: Arguments: UnqId - Runtime O/S routine might use this, this temp routine does not use it - + MicroSeconds - Determines the length of pause. Returns: @@ -751,13 +786,13 @@ Routine Description: Arguments: UnqId - Runtime O/S routine may use this field, this temp routine does not. - + ReadWrite - Determine if it is an I/O or Memory Read/Write Operation. - + Len - Determines the width of the data operation. - + Port - What port to Read/Write from. - + BuffAddr - Address to read to or write from. Returns: @@ -851,15 +886,15 @@ Routine Description: Arguments: DevPtr - Pointer which will point to the newly created device path with the MAC node attached. - + BaseDevPtr - Pointer to the device path which the UNDI device driver is latching on to. - + AdapterInfo - Pointer to the NIC data structure information which the UNDI driver is layering on.. Returns: EFI_SUCCESS - A MAC address was successfully appended to the Base Device Path. - + other - Not enough resources available to create new Device Path node. --*/ @@ -991,7 +1026,7 @@ Arguments: Returns: EFI_SUCCESS - Install a GUID/Pointer pair into the system's configuration table. - + other - Did not successfully install the GUID/Pointer pair into the configuration table. --*/ @@ -1007,12 +1042,12 @@ Returns: return EFI_SUCCESS; } - if(UnidiDataPointer == NULL) { + if(UndiDataPointer == NULL) { return EFI_SUCCESS; } - - UndiData = (NII_TABLE *)UnidiDataPointer; - + + UndiData = (NII_TABLE *)UndiDataPointer; + UndiData->NumEntries = pxe_31->IFcnt; UndiData->NextLink = NULL; @@ -1067,12 +1102,12 @@ Returns: } /** - + Install driver binding protocol of UNDI. - - @param[in] ImageHandle The firmware allocated handle for the EFI image. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. - + @retval EFI_SUCCESS The entry point is executed successfully. @retval other Some error occurs when executing this entry point. diff --git a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h index b0b7533909..12691bb1f0 100644 --- a/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h +++ b/MdeModulePkg/Bus/Pci/UndiRuntimeDxe/Undi32.h @@ -2,13 +2,13 @@ /*++ Copyright (c) 2006, 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. +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. Module Name: @@ -157,7 +157,7 @@ VOID PhyReset (NIC_DATA_INSTANCE *AdapterInfo); VOID MdiWrite ( IN NIC_DATA_INSTANCE *AdapterInfo, - IN UINT8 RegAddress, + IN UINT8 RegAddress, IN UINT8 PhyAddress, IN UINT16 DataValue ); @@ -165,7 +165,7 @@ MdiWrite ( VOID MdiRead( IN NIC_DATA_INSTANCE *AdapterInfo, - IN UINT8 RegAddress, + IN UINT8 RegAddress, IN UINT8 PhyAddress, IN OUT UINT16 *DataValue );