\r
The routine procedure for uhci memory allocate/free.\r
\r
-Copyright (c) 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+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
@param Pool The memory pool to free the block from.\r
@param Block The memory block to free.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UsbHcFreeMemBlock (\r
return Block->Buf + (StartByte * 8 + StartBit) * USBHC_MEM_UNIT;\r
}\r
\r
+/**\r
+ Calculate the corresponding pci bus address according to the Mem parameter.\r
+\r
+ @param Pool The memory pool of the host controller.\r
+ @param Mem The pointer to host memory.\r
+ @param Size The size of the memory region.\r
+\r
+ @return the pci memory address\r
+**/\r
+EFI_PHYSICAL_ADDRESS\r
+UsbHcGetPciAddressForHostMem (\r
+ IN USBHC_MEM_POOL *Pool,\r
+ IN VOID *Mem,\r
+ IN UINTN Size\r
+ )\r
+{\r
+ USBHC_MEM_BLOCK *Head;\r
+ USBHC_MEM_BLOCK *Block;\r
+ UINTN AllocSize;\r
+ EFI_PHYSICAL_ADDRESS PhyAddr;\r
+ UINTN Offset;\r
+\r
+ Head = Pool->Head;\r
+ AllocSize = USBHC_MEM_ROUND (Size);\r
+\r
+ if (Mem == NULL) {\r
+ return 0;\r
+ }\r
+\r
+ for (Block = Head; Block != NULL; Block = Block->Next) {\r
+ //\r
+ // scan the memory block list for the memory block that\r
+ // completely contains the allocated memory.\r
+ //\r
+ if ((Block->BufHost <= (UINT8 *) Mem) && (((UINT8 *) Mem + AllocSize) <= (Block->BufHost + Block->BufLen))) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ ASSERT ((Block != NULL));\r
+ //\r
+ // calculate the pci memory address for host memory address.\r
+ //\r
+ Offset = (UINT8 *)Mem - Block->BufHost;\r
+ PhyAddr = (EFI_PHYSICAL_ADDRESS)(UINTN) (Block->Buf + Offset);\r
+ return PhyAddr;\r
+}\r
\r
/**\r
Insert the memory block to the pool's list of the blocks.\r
@param Head The head of the memory pool's block list.\r
@param Block The memory block to insert.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UsbHcInsertMemBlockToPool (\r
@param Head The block list head of the memory's pool.\r
@param BlockToUnlink The memory block to unlink.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UsbHcUnlinkMemBlock (\r
@param Mem The memory to free.\r
@param Size The size of the memory to free.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
UsbHcFreeMem (\r