I2C_HOST_CONTEXT *I2cHostContext;\r
BOOLEAN FirstRequest;\r
UINTN RequestPacketSize;\r
+ UINTN StartBit;\r
\r
SyncEvent = NULL;\r
FirstRequest = FALSE;\r
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