]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/UhciDxe/UhciQueue.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / UhciDxe / UhciQueue.c
index 91c2a485017a4695d6afc50b3ce93bf55fd05360..fb97326dc0dec58c6c5df5c0b71052e13e1ab73b 100644 (file)
@@ -2,14 +2,8 @@
 \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
@@ -152,21 +146,25 @@ EXIT:
 /**\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
@@ -177,8 +175,6 @@ UhciLinkTdToQh (
   @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
@@ -196,21 +192,25 @@ UhciUnlinkTdFromQh (
 /**\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
@@ -310,7 +310,8 @@ UhciCreateTd (
 \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
@@ -321,6 +322,7 @@ UhciCreateSetupTd (
   IN  USB_HC_DEV          *Uhc,\r
   IN  UINT8               DevAddr,\r
   IN  UINT8               *Request,\r
+  IN  UINT8               *RequestPhy,\r
   IN  BOOLEAN             IsLow\r
   )\r
 {\r
@@ -344,10 +346,10 @@ UhciCreateSetupTd (
   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
@@ -359,7 +361,8 @@ UhciCreateSetupTd (
   @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
@@ -374,6 +377,7 @@ UhciCreateDataTd (
   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
@@ -397,7 +401,7 @@ UhciCreateDataTd (
   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
@@ -405,7 +409,7 @@ UhciCreateDataTd (
   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
@@ -468,8 +472,10 @@ UhciCreateStatusTd (
   @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
@@ -483,7 +489,9 @@ UhciCreateCtrlTds (
   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
@@ -508,7 +516,7 @@ UhciCreateCtrlTds (
   //\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
@@ -529,7 +537,8 @@ UhciCreateCtrlTds (
                Uhc,\r
                DeviceAddr,\r
                0,\r
-               Data,\r
+               Data,  //cpu memory address\r
+               DataPhy, //Pci memory address\r
                ThisTdLen,\r
                DataPktId,\r
                DataToggle,\r
@@ -544,12 +553,13 @@ UhciCreateCtrlTds (
       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
@@ -572,10 +582,10 @@ UhciCreateCtrlTds (
   // 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
@@ -600,7 +610,8 @@ FREE_TD:
   @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
@@ -616,6 +627,7 @@ UhciCreateBulkOrIntTds (
   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
@@ -649,6 +661,7 @@ UhciCreateBulkOrIntTds (
                DevAddr,\r
                EndPoint,\r
                Data,\r
+               DataPhy,\r
                ThisTdLen,\r
                PktId,\r
                *DataToggle,\r
@@ -667,12 +680,13 @@ UhciCreateBulkOrIntTds (
       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