UINT32 SmmRevId;\r
SMRAM_SAVE_STATE_IOMISC IoMisc;\r
EFI_SMM_SAVE_STATE_IO_INFO *IoInfo;\r
- VOID *IoMemAddr;\r
\r
//\r
// Check for special EFI_SMM_SAVE_STATE_REGISTER_LMA\r
return EFI_NOT_FOUND;\r
}\r
\r
+ //\r
+ // Only support IN/OUT, but not INS/OUTS/REP INS/REP OUTS.\r
+ //\r
+ if ((mSmmCpuIoType[IoMisc.Bits.Type] != EFI_SMM_SAVE_STATE_IO_TYPE_INPUT) &&\r
+ (mSmmCpuIoType[IoMisc.Bits.Type] != EFI_SMM_SAVE_STATE_IO_TYPE_OUTPUT)) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
//\r
// Compute index for the I/O Length and I/O Type lookup tables\r
//\r
IoInfo->IoPort = (UINT16)IoMisc.Bits.Port;\r
IoInfo->IoWidth = mSmmCpuIoWidth[IoMisc.Bits.Length].IoWidth;\r
IoInfo->IoType = mSmmCpuIoType[IoMisc.Bits.Type];\r
- if (IoInfo->IoType == EFI_SMM_SAVE_STATE_IO_TYPE_INPUT || IoInfo->IoType == EFI_SMM_SAVE_STATE_IO_TYPE_OUTPUT) {\r
- ReadSaveStateRegister (CpuIndex, EFI_SMM_SAVE_STATE_REGISTER_RAX, mSmmCpuIoWidth[IoMisc.Bits.Length].Width, &IoInfo->IoData);\r
- }\r
- else {\r
- ReadSaveStateRegisterByIndex(CpuIndex, SMM_SAVE_STATE_REGISTER_IOMEMADDR_INDEX, sizeof(IoMemAddr), &IoMemAddr);\r
- CopyMem(&IoInfo->IoData, IoMemAddr, mSmmCpuIoWidth[IoMisc.Bits.Length].Width);\r
- }\r
+ ReadSaveStateRegister (CpuIndex, EFI_SMM_SAVE_STATE_REGISTER_RAX, mSmmCpuIoWidth[IoMisc.Bits.Length].Width, &IoInfo->IoData);\r
return EFI_SUCCESS;\r
}\r
\r