]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Per PI 1.3 spec, when Reserved bit set in the SlaveAddress parameter, EFI_NOT_FOUND...
authorElvin Li <elvin.li@intel.com>
Tue, 10 Dec 2013 01:42:56 +0000 (01:42 +0000)
committerli-elvin <li-elvin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 10 Dec 2013 01:42:56 +0000 (01:42 +0000)
Signed-off-by: Elvin Li <elvin.li@intel.com>
Reviewed-by: Leahy Leroy P <leroy.p.leahy@intel.com>
Reviewed-by: Lin Jie <jie.lin@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14952 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/I2c/I2cDxe/I2cHost.c

index e153a4dc2bef7393a707c842a65e4d0d2b738a30..392ca2ade54f1f0e9d6dfb68436957b48ee8c79f 100644 (file)
@@ -930,6 +930,7 @@ I2cHostQueueRequest (
   I2C_HOST_CONTEXT  *I2cHostContext;\r
   BOOLEAN           FirstRequest;\r
   UINTN             RequestPacketSize;\r
+  UINTN             StartBit;\r
 \r
   SyncEvent    = NULL;\r
   FirstRequest = FALSE;\r
@@ -938,6 +939,27 @@ I2cHostQueueRequest (
   if (RequestPacket == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
+  \r
+  if ((SlaveAddress & I2C_ADDRESSING_10_BIT) != 0) {\r
+    //\r
+    // 10-bit address, bits 0-9 are used for 10-bit I2C slave addresses,\r
+    // bits 10-30 are reserved bits and must be zero\r
+    //\r
+    StartBit = 10;\r
+  } else {\r
+    //\r
+    // 7-bit address, Bits 0-6 are used for 7-bit I2C slave addresses,\r
+    // bits 7-30 are reserved bits and must be zero\r
+    //\r
+    StartBit = 7;\r
+  }\r
+\r
+  if (BitFieldRead32 ((UINT32)SlaveAddress, StartBit, 30) != 0) {\r
+    //\r
+    // Reserved bit set in the SlaveAddress parameter\r
+    //\r
+    return EFI_NOT_FOUND;\r
+  }\r
 \r
   I2cHostContext = I2C_HOST_CONTEXT_FROM_PROTOCOL (This);\r
 \r