\r
The UHCI register operation routines.\r
\r
-Copyright (c) 2007 - 2008, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
/**\r
Link the TD To QH.\r
\r
+ @param Uhc The UHCI device.\r
@param Qh The queue head for the TD to link to.\r
@param Td The TD to link.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UhciLinkTdToQh (\r
+ IN USB_HC_DEV *Uhc,\r
IN UHCI_QH_SW *Qh,\r
IN UHCI_TD_SW *Td\r
)\r
{\r
+ EFI_PHYSICAL_ADDRESS PhyAddr;\r
+\r
+ PhyAddr = UsbHcGetPciAddressForHostMem (Uhc->MemPool, Td, sizeof (UHCI_TD_HW));\r
+\r
ASSERT ((Qh != NULL) && (Td != NULL));\r
\r
- Qh->QhHw.VerticalLink = QH_VLINK (Td, FALSE);\r
+ Qh->QhHw.VerticalLink = QH_VLINK (PhyAddr, FALSE);\r
Qh->TDs = (VOID *) Td;\r
}\r
\r
@param Qh The queue head to unlink from.\r
@param Td The TD to unlink.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UhciUnlinkTdFromQh (\r
/**\r
Append a new TD To the previous TD.\r
\r
+ @param Uhc The UHCI device.\r
@param PrevTd Previous UHCI_TD_SW to be linked to.\r
@param ThisTd TD to link.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UhciAppendTd (\r
+ IN USB_HC_DEV *Uhc,\r
IN UHCI_TD_SW *PrevTd,\r
IN UHCI_TD_SW *ThisTd\r
)\r
{\r
+ EFI_PHYSICAL_ADDRESS PhyAddr;\r
+\r
+ PhyAddr = UsbHcGetPciAddressForHostMem (Uhc->MemPool, ThisTd, sizeof (UHCI_TD_HW));\r
+\r
ASSERT ((PrevTd != NULL) && (ThisTd != NULL));\r
\r
- PrevTd->TdHw.NextLink = TD_LINK (ThisTd, TRUE, FALSE);\r
+ PrevTd->TdHw.NextLink = TD_LINK (PhyAddr, TRUE, FALSE);\r
PrevTd->NextTd = (VOID *) ThisTd;\r
}\r
\r
\r
@param Uhc The UHCI device.\r
@param DevAddr Device address.\r
- @param Request Device request.\r
+ @param Request A pointer to cpu memory address of Device request.\r
+ @param RequestPhy A pointer to pci memory address of Device request.\r
@param IsLow Full speed or low speed.\r
\r
@return The created setup Td Pointer.\r
IN USB_HC_DEV *Uhc,\r
IN UINT8 DevAddr,\r
IN UINT8 *Request,\r
+ IN UINT8 *RequestPhy,\r
IN BOOLEAN IsLow\r
)\r
{\r
Td->TdHw.DeviceAddr = DevAddr & 0x7F;\r
Td->TdHw.MaxPacketLen = (UINT32) (sizeof (EFI_USB_DEVICE_REQUEST) - 1);\r
Td->TdHw.PidCode = SETUP_PACKET_ID;\r
- Td->TdHw.DataBuffer = (UINT32) (UINTN) Request;\r
+ Td->TdHw.DataBuffer = (UINT32) (UINTN) RequestPhy;\r
\r
Td->Data = Request;\r
- Td->DataLen = sizeof (EFI_USB_DEVICE_REQUEST);\r
+ Td->DataLen = (UINT16) sizeof (EFI_USB_DEVICE_REQUEST);\r
\r
return Td;\r
}\r
@param Uhc The UHCI device.\r
@param DevAddr Device address.\r
@param Endpoint Endpoint number.\r
- @param DataPtr Data buffer.\r
+ @param DataPtr A pointer to cpu memory address of Data buffer.\r
+ @param DataPhyPtr A pointer to pci memory address of Data buffer.\r
@param Len Data length.\r
@param PktId Packet ID.\r
@param Toggle Data toggle value.\r
IN UINT8 DevAddr,\r
IN UINT8 Endpoint,\r
IN UINT8 *DataPtr,\r
+ IN UINT8 *DataPhyPtr,\r
IN UINTN Len,\r
IN UINT8 PktId,\r
IN UINT8 Toggle,\r
Td->TdHw.ShortPacket = FALSE;\r
Td->TdHw.IsIsoch = FALSE;\r
Td->TdHw.IntOnCpl = FALSE;\r
- Td->TdHw.ErrorCount = 0X03;\r
+ Td->TdHw.ErrorCount = 0x03;\r
Td->TdHw.Status = USBTD_ACTIVE;\r
Td->TdHw.LowSpeed = IsLow ? 1 : 0;\r
Td->TdHw.DataToggle = Toggle & 0x01;\r
Td->TdHw.DeviceAddr = DevAddr & 0x7F;\r
Td->TdHw.MaxPacketLen = (UINT32) (Len - 1);\r
Td->TdHw.PidCode = (UINT8) PktId;\r
- Td->TdHw.DataBuffer = (UINT32) (UINTN) DataPtr;\r
+ Td->TdHw.DataBuffer = (UINT32) (UINTN) DataPhyPtr;\r
\r
Td->Data = DataPtr;\r
Td->DataLen = (UINT16) Len;\r
@param Uhc The UHCI device.\r
@param DeviceAddr The device address.\r
@param DataPktId Packet Identification of Data Tds.\r
- @param Request A pointer to request structure buffer to transfer.\r
- @param Data A pointer to user data buffer to transfer.\r
+ @param Request A pointer to cpu memory address of request structure buffer to transfer.\r
+ @param RequestPhy A pointer to pci memory address of request structure buffer to transfer.\r
+ @param Data A pointer to cpu memory address of user data buffer to transfer.\r
+ @param DataPhy A pointer to pci memory address of user data buffer to transfer.\r
@param DataLen Length of user data to transfer.\r
@param MaxPacket Maximum packet size for control transfer.\r
@param IsLow Full speed or low speed.\r
IN UINT8 DeviceAddr,\r
IN UINT8 DataPktId,\r
IN UINT8 *Request,\r
+ IN UINT8 *RequestPhy,\r
IN UINT8 *Data,\r
+ IN UINT8 *DataPhy,\r
IN UINTN DataLen,\r
IN UINT8 MaxPacket,\r
IN BOOLEAN IsLow\r
//\r
// Create setup packets for the transfer\r
//\r
- SetupTd = UhciCreateSetupTd (Uhc, DeviceAddr, Request, IsLow);\r
+ SetupTd = UhciCreateSetupTd (Uhc, DeviceAddr, Request, RequestPhy, IsLow);\r
\r
if (SetupTd == NULL) {\r
return NULL;\r
Uhc,\r
DeviceAddr,\r
0,\r
- Data,\r
+ Data, //cpu memory address\r
+ DataPhy, //Pci memory address\r
ThisTdLen,\r
DataPktId,\r
DataToggle,\r
FirstDataTd = DataTd;\r
FirstDataTd->NextTd = NULL;\r
} else {\r
- UhciAppendTd (PrevDataTd, DataTd);\r
+ UhciAppendTd (Uhc, PrevDataTd, DataTd);\r
}\r
\r
DataToggle ^= 1;\r
PrevDataTd = DataTd;\r
Data += ThisTdLen;\r
+ DataPhy += ThisTdLen;\r
DataLen -= ThisTdLen;\r
}\r
\r
// Link setup Td -> data Tds -> status Td together\r
//\r
if (FirstDataTd != NULL) {\r
- UhciAppendTd (SetupTd, FirstDataTd);\r
- UhciAppendTd (PrevDataTd, StatusTd);\r
+ UhciAppendTd (Uhc, SetupTd, FirstDataTd);\r
+ UhciAppendTd (Uhc, PrevDataTd, StatusTd);\r
} else {\r
- UhciAppendTd (SetupTd, StatusTd);\r
+ UhciAppendTd (Uhc, SetupTd, StatusTd);\r
}\r
\r
return SetupTd;\r
@param DevAddr Address of Device.\r
@param EndPoint Endpoint Number.\r
@param PktId Packet Identification of Data Tds.\r
- @param Data A pointer to user data buffer to transfer.\r
+ @param Data A pointer to cpu memory address of user data buffer to transfer.\r
+ @param DataPhy A pointer to pci memory address of user data buffer to transfer.\r
@param DataLen Length of user data to transfer.\r
@param DataToggle Data Toggle Pointer.\r
@param MaxPacket Maximum packet size for Bulk/Interrupt transfer.\r
IN UINT8 EndPoint,\r
IN UINT8 PktId,\r
IN UINT8 *Data,\r
+ IN UINT8 *DataPhy,\r
IN UINTN DataLen,\r
IN OUT UINT8 *DataToggle,\r
IN UINT8 MaxPacket,\r
DevAddr,\r
EndPoint,\r
Data,\r
+ DataPhy,\r
ThisTdLen,\r
PktId,\r
*DataToggle,\r
FirstDataTd = DataTd;\r
FirstDataTd->NextTd = NULL;\r
} else {\r
- UhciAppendTd (PrevDataTd, DataTd);\r
+ UhciAppendTd (Uhc, PrevDataTd, DataTd);\r
}\r
\r
*DataToggle ^= 1;\r
PrevDataTd = DataTd;\r
Data += ThisTdLen;\r
+ DataPhy += ThisTdLen;\r
DataLen -= ThisTdLen;\r
}\r
\r