]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/SataControllerDxe/SataController.c
DuetPkg: Removing ipf which is no longer supported from edk2.
[mirror_edk2.git] / DuetPkg / SataControllerDxe / SataController.c
index d1e85cc6e4a4b3216976a353b3cf4fc2902fd01c..e5d10e234e88c3135892b9b400c5db409e4f4504 100644 (file)
@@ -464,8 +464,8 @@ SataControllerStart (
   }\r
 \r
   ChannelDeviceCount = (UINTN) (SataPrivateData->IdeInit.ChannelCount) * (UINTN) (SataPrivateData->DeviceCount);\r
-  SataPrivateData->DisqulifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount);\r
-  if (SataPrivateData->DisqulifiedModes == NULL) {\r
+  SataPrivateData->DisqualifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount);\r
+  if (SataPrivateData->DisqualifiedModes == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
     goto Done;\r
   }\r
@@ -502,8 +502,8 @@ Done:
           Controller\r
           );\r
     if (SataPrivateData != NULL) {\r
-      if (SataPrivateData->DisqulifiedModes != NULL) {\r
-        FreePool (SataPrivateData->DisqulifiedModes);\r
+      if (SataPrivateData->DisqualifiedModes != NULL) {\r
+        FreePool (SataPrivateData->DisqualifiedModes);\r
       }\r
       if (SataPrivateData->IdentifyData != NULL) {\r
         FreePool (SataPrivateData->IdentifyData);\r
@@ -577,8 +577,8 @@ SataControllerStop (
   }\r
 \r
   if (SataPrivateData != NULL) {\r
-    if (SataPrivateData->DisqulifiedModes != NULL) {\r
-      FreePool (SataPrivateData->DisqulifiedModes);\r
+    if (SataPrivateData->DisqualifiedModes != NULL) {\r
+      FreePool (SataPrivateData->DisqualifiedModes);\r
     }\r
     if (SataPrivateData->IdentifyData != NULL) {\r
       FreePool (SataPrivateData->IdentifyData);\r
@@ -600,6 +600,37 @@ SataControllerStop (
                 );\r
 }\r
 \r
+/**\r
+  Calculate the flat array subscript of a (Channel, Device) pair.\r
+\r
+  @param[in] SataPrivateData  The private data structure corresponding to the\r
+                              SATA controller that attaches the device for\r
+                              which the flat array subscript is being\r
+                              calculated.\r
+\r
+  @param[in] Channel          The channel (ie. port) number on the SATA\r
+                              controller that the device is attached to.\r
+\r
+  @param[in] Device           The device number on the channel.\r
+\r
+  @return  The flat array subscript suitable for indexing DisqualifiedModes,\r
+           IdentifyData, and IdentifyValid.\r
+**/\r
+STATIC\r
+UINTN\r
+FlatDeviceIndex (\r
+  IN CONST EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData,\r
+  IN UINTN                                   Channel,\r
+  IN UINTN                                   Device\r
+  )\r
+{\r
+  ASSERT (SataPrivateData != NULL);\r
+  ASSERT (Channel < SataPrivateData->IdeInit.ChannelCount);\r
+  ASSERT (Device < SataPrivateData->DeviceCount);\r
+\r
+  return Channel * SataPrivateData->DeviceCount + Device;\r
+}\r
+\r
 //\r
 // Interface functions of IDE_CONTROLLER_INIT protocol\r
 //\r
@@ -746,6 +777,8 @@ IdeInitSubmitData (
   )\r
 {\r
   EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;\r
+  UINTN                             DeviceIndex;\r
+\r
   SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);\r
   ASSERT (SataPrivateData != NULL);\r
 \r
@@ -753,19 +786,21 @@ IdeInitSubmitData (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device);\r
+\r
   //\r
   // Make a local copy of device's IdentifyData and mark the valid flag\r
   //\r
   if (IdentifyData != NULL) {\r
     CopyMem (\r
-      &(SataPrivateData->IdentifyData[Channel * Device]),\r
+      &(SataPrivateData->IdentifyData[DeviceIndex]),\r
       IdentifyData,\r
       sizeof (EFI_IDENTIFY_DATA)\r
       );\r
 \r
-    SataPrivateData->IdentifyValid[Channel * Device] = TRUE;\r
+    SataPrivateData->IdentifyValid[DeviceIndex] = TRUE;\r
   } else {\r
-    SataPrivateData->IdentifyValid[Channel * Device] = FALSE;\r
+    SataPrivateData->IdentifyValid[DeviceIndex] = FALSE;\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -821,6 +856,8 @@ IdeInitDisqualifyMode (
   )\r
 {\r
   EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;\r
+  UINTN                             DeviceIndex;\r
+\r
   SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);\r
   ASSERT (SataPrivateData != NULL);\r
 \r
@@ -828,12 +865,14 @@ IdeInitDisqualifyMode (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device);\r
+\r
   //\r
   // Record the disqualified modes per channel per device. From ATA/ATAPI spec,\r
   // if a mode is not supported, the modes higher than it is also not supported.\r
   //\r
   CopyMem (\r
-    &(SataPrivateData->DisqulifiedModes[Channel * Device]),\r
+    &(SataPrivateData->DisqualifiedModes[DeviceIndex]),\r
     BadModes,\r
     sizeof (EFI_ATA_COLLECTIVE_MODE)\r
     );\r
@@ -907,9 +946,10 @@ IdeInitCalculateMode (
   EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;\r
   EFI_IDENTIFY_DATA                 *IdentifyData;\r
   BOOLEAN                           IdentifyValid;\r
-  EFI_ATA_COLLECTIVE_MODE           *DisqulifiedModes;\r
+  EFI_ATA_COLLECTIVE_MODE           *DisqualifiedModes;\r
   UINT16                            SelectedMode;\r
   EFI_STATUS                        Status;\r
+  UINTN                             DeviceIndex;\r
 \r
   SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);\r
   ASSERT (SataPrivateData != NULL);\r
@@ -920,23 +960,27 @@ IdeInitCalculateMode (
 \r
   *SupportedModes = AllocateZeroPool (sizeof (EFI_ATA_COLLECTIVE_MODE));\r
   if (*SupportedModes == NULL) {\r
+    ASSERT (*SupportedModes != NULL);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  IdentifyData = &(SataPrivateData->IdentifyData[Channel * Device]);\r
-  IdentifyValid = SataPrivateData->IdentifyValid[Channel * Device];\r
-  DisqulifiedModes = &(SataPrivateData->DisqulifiedModes[Channel * Device]);\r
+  DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device);\r
+\r
+  IdentifyData = &(SataPrivateData->IdentifyData[DeviceIndex]);\r
+  IdentifyValid = SataPrivateData->IdentifyValid[DeviceIndex];\r
+  DisqualifiedModes = &(SataPrivateData->DisqualifiedModes[DeviceIndex]);\r
 \r
   //\r
   // Make sure we've got the valid identify data of the device from SubmitData()\r
   //\r
   if (!IdentifyValid) {\r
+    FreePool (*SupportedModes);\r
     return EFI_NOT_READY;\r
   }\r
 \r
   Status = CalculateBestPioMode (\r
             IdentifyData,\r
-            (DisqulifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqulifiedModes->PioMode.Mode)) : NULL),\r
+            (DisqualifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqualifiedModes->PioMode.Mode)) : NULL),\r
             &SelectedMode\r
             );\r
   if (!EFI_ERROR (Status)) {\r
@@ -950,7 +994,7 @@ IdeInitCalculateMode (
 \r
   Status = CalculateBestUdmaMode (\r
             IdentifyData,\r
-            (DisqulifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqulifiedModes->UdmaMode.Mode)) : NULL),\r
+            (DisqualifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqualifiedModes->UdmaMode.Mode)) : NULL),\r
             &SelectedMode\r
             );\r
 \r