+ //\r
+ // If it is just to set Timeout value and unsupported is returned,\r
+ // do not return error.\r
+ //\r
+ if ((Status == EFI_UNSUPPORTED) &&\r
+ (This->Mode->Timeout != OriginalTimeout) &&\r
+ (This->Mode->ReceiveFifoDepth == OriginalReceiveFifoDepth) &&\r
+ (This->Mode->BaudRate == OriginalBaudRate) &&\r
+ (This->Mode->DataBits == (UINT32) OriginalDataBits) &&\r
+ (This->Mode->Parity == (UINT32) OriginalParity) &&\r
+ (This->Mode->StopBits == (UINT32) OriginalStopBits)) {\r
+ //\r
+ // Restore to the original input values.\r
+ //\r
+ BaudRate = OriginalBaudRate;\r
+ ReceiveFifoDepth = OriginalReceiveFifoDepth;\r
+ Timeout = OriginalTimeout;\r
+ Parity = OriginalParity;\r
+ DataBits = OriginalDataBits;\r
+ StopBits = OriginalStopBits;\r
+ Status = EFI_SUCCESS;\r
+ } else if (Status == EFI_INVALID_PARAMETER || Status == EFI_UNSUPPORTED) {\r
+ return EFI_INVALID_PARAMETER;\r
+ } else {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r