Fix the hardware flow control logic in SerialIo driver.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10228 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
niruiyu 2010-03-10 09:20:17 +00:00
parent 1fafcca8b4
commit 711d0721b5
1 changed files with 2 additions and 2 deletions

View File

@ -909,7 +909,7 @@ IsaSerialReceiveTransmit (
// //
TimeOut = 0; TimeOut = 0;
Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
while ((Msr.Bits.Dcd == 1) && ((Msr.Bits.Cts == 0) || FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) { while ((Msr.Bits.Dcd == 1) && ((Msr.Bits.Cts == 0) ^ FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) {
gBS->Stall (TIMEOUT_STALL_INTERVAL); gBS->Stall (TIMEOUT_STALL_INTERVAL);
TimeOut++; TimeOut++;
if (TimeOut > 5) { if (TimeOut > 5) {
@ -919,7 +919,7 @@ IsaSerialReceiveTransmit (
Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
} }
if ((Msr.Bits.Dcd == 0) && ((Msr.Bits.Cts == 1) || FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) { if ((Msr.Bits.Dcd == 0) || ((Msr.Bits.Cts == 1) ^ FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) {
IsaSerialFifoRemove (&SerialDevice->Transmit, &Data); IsaSerialFifoRemove (&SerialDevice->Transmit, &Data);
WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data); WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data);
} }