]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/AtaAtapiPassThru: valid ports transverse algo of AHCI controller is...
authorerictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 9 Nov 2012 06:39:56 +0000 (06:39 +0000)
committererictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 9 Nov 2012 06:39:56 +0000 (06:39 +0000)
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13932 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h

index 7101c665bfa73dde0aedb73ecbb66dcde92da5a7..1c45312712bb96382f162ce3e871904d7542e3c3 100644 (file)
@@ -2202,8 +2202,19 @@ AhciModeInitialization (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  for (Port = 0; Port < MaxPortNumber; Port ++) {\r
+  for (Port = 0; Port < EFI_AHCI_MAX_PORTS; Port ++) {\r
     if ((PortImplementBitMap & (BIT0 << Port)) != 0) {\r
+      //\r
+      // According to AHCI spec, MaxPortNumber should be equal or greater than the number of implemented ports.\r
+      //\r
+      if ((MaxPortNumber--) == 0) {\r
+        //\r
+        // Should never be here.\r
+        //\r
+        ASSERT (FALSE);\r
+        return EFI_SUCCESS;\r
+      }\r
+\r
       IdeInit->NotifyPhase (IdeInit, EfiIdeBeforeChannelEnumeration, Port);\r
 \r
       //\r
index 052e7837f5bd38878d3bdd07536733d6327f1293..485b64799eacb57a64a392e23f6dbb0b73b274d3 100644 (file)
@@ -26,6 +26,8 @@
 #define EFI_AHCI_IS_OFFSET                     0x0008\r
 #define EFI_AHCI_PI_OFFSET                     0x000C\r
 \r
+#define EFI_AHCI_MAX_PORTS                     32\r
+\r
 typedef struct {\r
   UINT32  Lower32;\r
   UINT32  Upper32;\r