]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/I2c/I2cDxe/I2cHost.c
Per PI 1.3 spec, when Reserved bit set in the SlaveAddress parameter, EFI_NOT_FOUND...
[mirror_edk2.git] / 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