Although this also updates Ard's code, mainly, I think I can comment on it:
On 11/17/15 10:35, Star Zeng wrote: > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Star Zeng <star.z...@intel.com> > --- > .../XenConsoleSerialPortLib.c | 88 > ++++++++++++++++++++++ > 1 file changed, 88 insertions(+) > > diff --git > a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c > b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c > index 4ccb38d..4e80a8f 100644 > --- a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c > +++ b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c > @@ -2,6 +2,7 @@ > Xen console SerialPortLib instance > > Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR> > + Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> > > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > @@ -205,3 +206,90 @@ SerialPortPoll ( > return mXenConsoleInterface && > mXenConsoleInterface->in_cons != mXenConsoleInterface->in_prod; > } > + > +/** > + Sets the control bits on a serial device. > + > + @param Control Sets the bits of Control that are settable. > + > + @retval RETURN_SUCCESS The new control bits were set on the serial > device. > + @retval RETURN_UNSUPPORTED The serial device does not support this > operation. > + @retval RETURN_DEVICE_ERROR The serial device is not functioning > correctly. > + > +**/ > +RETURN_STATUS > +EFIAPI > +SerialPortSetControl ( > + IN UINT32 Control > + ) > +{ > + return RETURN_UNSUPPORTED; > +} > + > +/** > + Retrieve the status of the control bits on a serial device. > + > + @param Control A pointer to return the current control > signals from the serial device. > + > + @retval RETURN_SUCCESS The control bits were read from the serial > device. > + @retval RETURN_UNSUPPORTED The serial device does not support this > operation. > + @retval RETURN_DEVICE_ERROR The serial device is not functioning > correctly. > + > +**/ > +RETURN_STATUS > +EFIAPI > +SerialPortGetControl ( > + OUT UINT32 *Control > + ) > +{ > + if (!mXenConsoleInterface) { > + return RETURN_UNSUPPORTED; > + } > + > + if (!SerialPortPoll ()) { > + *Control = EFI_SERIAL_INPUT_BUFFER_EMPTY; > + } > + return RETURN_SUCCESS; > +} The problem I see here is that *Control is not set if SerialPortPoll() returns TRUE. In that case, *Control remains unchanged (which could imply "garbage from the caller"), despite the function returning RETURN_SUCCESS. So I propose the following: if (!mXenConsoleInterface) { return RETURN_UNSUPPORTED; } *Control = EFI_SERIAL_CARRIER_DETECT; /* or else, just set zero */ if (!SerialPortPoll ()) { *Control |= EFI_SERIAL_INPUT_BUFFER_EMPTY; } return RETURN_SUCCESS; Looks good otherwise. Thanks Laszlo > + > +/** > + Sets the baud rate, receive FIFO depth, transmit/receice time out, parity, > + data buts, and stop bits on a serial device. > + > + @param BaudRate The requested baud rate. A BaudRate value of 0 > will use the > + device's default interface speed. > + @param ReveiveFifoDepth The requested depth of the FIFO on the receive > side of the > + serial interface. A ReceiveFifoDepth value of 0 > will use > + the device's default FIFO depth. > + @param Timeout The requested time out for a single character in > microseconds. > + This timeout applies to both the transmit and > receive side of the > + interface. A Timeout value of 0 will use the > device's default time > + out value. > + @param Parity The type of parity to use on this serial device. > A Parity value of > + DefaultParity will use the device's default > parity value. > + @param DataBits The number of data bits to use on the serial > device. A DataBits > + vaule of 0 will use the device's default data > bit setting. > + @param StopBits The number of stop bits to use on this serial > device. A StopBits > + value of DefaultStopBits will use the device's > default number of > + stop bits. > + > + @retval RETURN_SUCCESS The new attributes were set on the > serial device. > + @retval RETURN_UNSUPPORTED The serial device does not support this > operation. > + @retval RETURN_INVALID_PARAMETER One or more of the attributes has an > unsupported value. > + @retval RETURN_DEVICE_ERROR The serial device is not functioning > correctly. > + > +**/ > +RETURN_STATUS > +EFIAPI > +SerialPortSetAttributes ( > + IN OUT UINT64 *BaudRate, > + IN OUT UINT32 *ReceiveFifoDepth, > + IN OUT UINT32 *Timeout, > + IN OUT EFI_PARITY_TYPE *Parity, > + IN OUT UINT8 *DataBits, > + IN OUT EFI_STOP_BITS_TYPE *StopBits > + ) > +{ > + return RETURN_UNSUPPORTED; > +} > + > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel