From: "Marvin Häuser" <Marvin.Haeuser@outlook.com>
To: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"hao.a.wu@intel.com" <hao.a.wu@intel.com>
Subject: Re: [PATCH] SourceLevelDebugPkg/DebugCommunicationLibUsb: Add endpoint configuration.
Date: Tue, 12 Jun 2018 19:10:26 +0000 [thread overview]
Message-ID: <VI1PR0801MB179077A9E0CF60C688BCA0F8807F0@VI1PR0801MB1790.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <VI1PR0801MB17903628D372A8A7D0E4978B807F0@VI1PR0801MB1790.eurprd08.prod.outlook.com>
Sorry, I made a mistake overlooking that the Initialization function is only called under certain circumstances.
I will submit a V2 soon.
Thanks,
Marvin
> -----Original Message-----
> From: edk2-devel <edk2-devel-bounces@lists.01.org> On Behalf Of Marvin
> Häuser
> Sent: Tuesday, June 12, 2018 2:34 PM
> To: edk2-devel@lists.01.org
> Cc: hao.a.wu@intel.com
> Subject: [edk2] [PATCH]
> SourceLevelDebugPkg/DebugCommunicationLibUsb: Add endpoint
> configuration.
>
> Currently, DebugCommunicationLibUsb uses the hardcoded endpoints 0x82
> and 0x01 to communicate with the EHCI Debug Device. These, however, are
> not standardized and may vary across different hardware.
> To solve this problem, two PCDs have been introduced to configure the in
> and out endpoints of the EHCI Debug Device. These may be set to 0 to
> retrieve the endpoints from the USB Device Descriptor directly.
> To ensure maximum compatibility, the PCD defaults have been set to the
> former hardcoded values.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Marvin Haeuser <Marvin.Haeuser@outlook.com>
> ---
>
> SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugCommun
> icationLibUsb.c | 46 +++++++++++++++++---
>
> SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugCommun
> icationLibUsb.inf | 4 ++
> SourceLevelDebugPkg/SourceLevelDebugPkg.dec | 12
> +++++
> 3 files changed, 55 insertions(+), 7 deletions(-)
>
> diff --git
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.c
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.c
> index d996f80f59e3..bb4be7b0710f 100644
> ---
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.c
> +++
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unic
> +++ ationLibUsb.c
> @@ -583,6 +583,8 @@ NeedReinitializeHardware(
> 5. configure the usb debug device to debug mode.
>
> @param Handle Debug port handle.
> + @param DebugInEndpoint IN Endpoint of the usb debug device.
> + @param DebugOutEndpoint OUT Endpoint of the usb debug device.
>
> @retval TRUE The usb debug port hardware configuration is changed.
> @retval FALSE The usb debug port hardware configuration is not
> changed.
> @@ -591,7 +593,9 @@ NeedReinitializeHardware( RETURN_STATUS EFIAPI
> InitializeUsbDebugHardware (
> - IN USB_DEBUG_PORT_HANDLE *Handle
> + IN USB_DEBUG_PORT_HANDLE *Handle,
> + OUT UINT8 *DebugInEndpoint, OPTIONAL
> + OUT UINT8 *DebugOutEndpoint OPTIONAL
> )
> {
> RETURN_STATUS Status;
> @@ -722,6 +726,14 @@ InitializeUsbDebugHardware (
> return RETURN_DEVICE_ERROR;
> }
>
> + if (DebugInEndpoint != NULL) {
> + *DebugInEndpoint = UsbDebugPortDescriptor.DebugInEndpoint;
> + }
> +
> + if (DebugOutEndpoint != NULL) {
> + *DebugOutEndpoint = UsbDebugPortDescriptor.DebugOutEndpoint;
> + }
> +
> //
> // enable the usb debug feature.
> //
> @@ -790,7 +802,7 @@ DebugPortReadBuffer (
> }
>
> if (NeedReinitializeHardware(UsbDebugPortHandle)) {
> - Status = InitializeUsbDebugHardware (UsbDebugPortHandle);
> + Status = InitializeUsbDebugHardware (UsbDebugPortHandle, NULL,
> + NULL);
> if (RETURN_ERROR(Status)) {
> return 0;
> }
> @@ -845,6 +857,8 @@ DebugPortWriteBuffer (
> UINT8 Sent;
> UINTN Total;
> UINT8 ReceivedPid;
> + UINT8 OutEndpoint;
> + UINT8 StaticOutEndpoint;
>
> if (NumberOfBytes == 0 || Buffer == NULL) {
> return 0;
> @@ -864,12 +878,20 @@ DebugPortWriteBuffer (
> }
>
> if (NeedReinitializeHardware(UsbDebugPortHandle)) {
> - Status = InitializeUsbDebugHardware (UsbDebugPortHandle);
> + Status = InitializeUsbDebugHardware (UsbDebugPortHandle, NULL,
> + &OutEndpoint);
> if (RETURN_ERROR(Status)) {
> return 0;
> }
> }
>
> + StaticOutEndpoint = PcdGet8 (PcdUsbDebugPortOutEndpoint); // // If
> + the endpoint has been configured statically, use it.
> + //
> + if (StaticOutEndpoint != 0) {
> + OutEndpoint = StaticOutEndpoint;
> + }
> +
> UsbDebugPortRegister = (USB_DEBUG_PORT_REGISTER
> *)((UINTN)UsbDebugPortHandle->UsbDebugPortMemoryBase +
> UsbDebugPortHandle->DebugPortOffset);
>
> while ((Total < NumberOfBytes)) {
> @@ -879,7 +901,7 @@ DebugPortWriteBuffer (
> Sent = (UINT8)(NumberOfBytes - Total);
> }
>
> - Status = UsbDebugPortOut(UsbDebugPortRegister, Buffer + Total, Sent,
> OUTPUT_PID, 0x7F, 0x01, UsbDebugPortHandle->BulkOutToggle);
> + Status = UsbDebugPortOut(UsbDebugPortRegister, Buffer + Total,
> + Sent, OUTPUT_PID, 0x7F, OutEndpoint,
> + UsbDebugPortHandle->BulkOutToggle);
>
> if (RETURN_ERROR(Status)) {
> return Total;
> @@ -924,6 +946,8 @@ DebugPortPollBuffer (
> UINT8 Length;
> UINT8 Index;
> RETURN_STATUS Status;
> + UINT8 InEndpoint;
> + UINT8 StaticInEndpoint;
>
> //
> // If Handle is NULL, it means memory is ready for use.
> @@ -936,12 +960,20 @@ DebugPortPollBuffer (
> }
>
> if (NeedReinitializeHardware(UsbDebugPortHandle)) {
> - Status = InitializeUsbDebugHardware(UsbDebugPortHandle);
> + Status = InitializeUsbDebugHardware(UsbDebugPortHandle,
> + &InEndpoint, NULL);
> if (RETURN_ERROR(Status)) {
> return FALSE;
> }
> }
>
> + StaticInEndpoint = PcdGet8 (PcdUsbDebugPortInEndpoint); // // If
> + the endpoint has been configured statically, use it.
> + //
> + if (StaticInEndpoint != 0) {
> + InEndpoint = StaticInEndpoint;
> + }
> +
> //
> // If the data buffer is not empty, then return TRUE directly.
> // else initialize a usb read transaction and read data to the data buffer.
> @@ -959,7 +991,7 @@ DebugPortPollBuffer (
> UsbDebugPortRegister->SendPid = DATA1_PID;
> }
> UsbDebugPortRegister->UsbAddress = 0x7F;
> - UsbDebugPortRegister->UsbEndPoint = 0x82 & 0x0F;
> + UsbDebugPortRegister->UsbEndPoint = InEndpoint & 0x0F;
>
> //
> // Clearing W/R bit to indicate it's a READ operation @@ -1078,7 +1110,7
> @@ DebugPortInitialize (
>
> if (NeedReinitializeHardware(&Handle)) {
> DEBUG ((EFI_D_ERROR, "UsbDbg: Start EHCI debug port initialization!\n"));
> - Status = InitializeUsbDebugHardware (&Handle);
> + Status = InitializeUsbDebugHardware (&Handle, NULL, NULL);
> if (RETURN_ERROR(Status)) {
> DEBUG ((EFI_D_ERROR, "UsbDbg: Failed, please check if USB debug cable
> is plugged into EHCI debug port correctly!\n"));
> goto Exit;
> diff --git
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.inf
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.inf
> index 028b04afbf00..8d3a7e477802 100644
> ---
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unicationLibUsb.inf
> +++
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb/DebugComm
> unic
> +++ ationLibUsb.inf
> @@ -43,6 +43,10 @@ [Pcd]
> # The pci address of ehci host controller, in which usb debug feature is
> enabled.
> # The format of pci address please refer to SourceLevelDebugPkg.dec
> gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciPciAddress ##
> CONSUMES
> + # The endpoint that should be used for read transactions from the usb
> debug device.
> + gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbDebugPortInEndpoint
> ## CONSUMES
> + # The endpoint that should be used for write transactions to the usb
> debug device.
> + gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbDebugPortOutEndpoint
> ## CONSUMES
> # The value of data buffer size used for USB debug port handle.
> # It should be equal to sizeof (USB_DEBUG_PORT_HANDLE).
>
> gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugPortHandleBufferSize|
> 23 ## SOMETIMES_CONSUMES
> diff --git a/SourceLevelDebugPkg/SourceLevelDebugPkg.dec
> b/SourceLevelDebugPkg/SourceLevelDebugPkg.dec
> index b89e9c6ad601..76410444f385 100644
> --- a/SourceLevelDebugPkg/SourceLevelDebugPkg.dec
> +++ b/SourceLevelDebugPkg/SourceLevelDebugPkg.dec
> @@ -72,6 +72,18 @@ [PcdsFixedAtBuild, PcdsPatchableInModule]
> # @Expression 0x80000001 |
> (gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciPciAddress &
> 0xF0000FFF) == 0
>
> gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbEhciPciAddress|0x000EF0
> 00|UINT32|0x00000003
>
> + ## The endpoint that should be used for read transactions from the usb
> debug device.
> + # 0: Determine the endpoint dynamically.
> + # other: The endpoint that should be used.
> + # @Prompt Configure the endpoint to read from the usb debug device.
> +
> +
> gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbDebugPortInEndpoint|0x
> 82|U
> + INT8|0x0000000b
> +
> + ## The endpoint that should be used for write transactions to the usb
> debug device.
> + # 0: Determine the endpoint dynamically.
> + # other: The endpoint that should be used.
> + # @Prompt Configure the endpoint to write to the usb debug device.
> +
> +
> gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdUsbDebugPortOutEndpoint|0
> x01|
> + UINT8|0x0000000c
> +
> ## The mask of exception numbers whose handlers would be ignored and
> cannot be replaced or
> # hooked by Debug Agent Library. Masking INT1/INT3 is invalid.
> # @Prompt Configure exception numbers not to be hooked by Debug
> Agent.
> --
> 2.17.1.windows.2
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
prev parent reply other threads:[~2018-06-12 19:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-12 12:33 [PATCH] SourceLevelDebugPkg/DebugCommunicationLibUsb: Add endpoint configuration Marvin Häuser
2018-06-12 19:10 ` Marvin Häuser [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=VI1PR0801MB179077A9E0CF60C688BCA0F8807F0@VI1PR0801MB1790.eurprd08.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox