From nobody Sat May 18 22:54:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=avery-design.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1624665726827218.41280555742958; Fri, 25 Jun 2021 17:02:06 -0700 (PDT) Received: from localhost ([::1]:37446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwvlt-0004QZ-81 for importer@patchew.org; Fri, 25 Jun 2021 20:02:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50158) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwvkx-0002s5-Fa for qemu-devel@nongnu.org; Fri, 25 Jun 2021 20:01:07 -0400 Received: from static-71-162-116-19.bstnma.fios.verizon.net ([71.162.116.19]:37404 helo=server4.localdomain) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwvku-0005T3-1i for qemu-devel@nongnu.org; Fri, 25 Jun 2021 20:01:07 -0400 Received: by server4.localdomain (Postfix, from userid 503) id 4D6DB6031112D; Fri, 25 Jun 2021 20:01:03 -0400 (EDT) From: Chris Browy To: mst@redhat.com Subject: [PATCH v1 openspdm on QEMU CXL/PCIe Device 1/2] build: gcc to CC in GNUMakefile Date: Fri, 25 Jun 2021 20:01:01 -0400 Message-Id: <1624665661-4903-1-git-send-email-cbrowy@avery-design.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1624665280-3595-1-git-send-email-cbrowy@avery-design.com> References: <1624665280-3595-1-git-send-email-cbrowy@avery-design.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=71.162.116.19; envelope-from=chris@server4.localdomain; helo=server4.localdomain X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, KHOP_HELO_FCRDNS=0.399, NO_DNS_FOR_FROM=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ben.widawsky@intel.com, david@redhat.com, qemu-devel@nongnu.org, vishal.l.verma@intel.com, jgroves@micron.com, Chris Browy , armbru@redhat.com, linux-cxl@vger.kernel.org, f4bug@amsat.org, hchkuo@avery-design.com.tw, tyshao@avery-design.com.tw, jonathan.cameron@huawei.com, imammedo@redhat.com, dan.j.williams@intel.com, ira.weiny@intel.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: hchkuo Modified gcc to CC in GNUMakefile, so that we can specify the gcc version Signed-off-by: Chris Browy --- GNUmakefile.Flags | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GNUmakefile.Flags b/GNUmakefile.Flags index 3586284..33baceb 100644 --- a/GNUmakefile.Flags +++ b/GNUmakefile.Flags @@ -114,9 +114,9 @@ else ifeq ("$(TOOLCHAIN)","GCC") CMOCKA_FLAGS =3D -std=3Dgnu99 -Wpedantic -Wall -Wshadow -Wmissing-prot= otypes -Wcast-align -Werror=3Daddress -Wstrict-prototypes -Werror=3Dstrict-= prototypes -Wwrite-strings -Werror=3Dwrite-strings -Werror-implicit-functio= n-declaration -Wpointer-arith -Werror=3Dpointer-arith -Wdeclaration-after-s= tatement -Werror=3Ddeclaration-after-statement -Wreturn-type -Werror=3Dretu= rn-type -Wuninitialized -Werror=3Duninitialized -Werror=3Dstrict-overflow -= Wstrict-overflow=3D2 -Wno-format-zero-length -Wmissing-field-initializers -= Wformat-security -Werror=3Dformat-security -fno-common -Wformat -fno-common= -fstack-protector-strong CC_FLAGS +=3D --coverage -fprofile-arcs -ftest-coverage =20 - SLINK =3D gcc-ar + SLINK =3D $(CC)-ar =20 - DLINK =3D gcc + DLINK =3D $(CC) DLINK_OBJECT_FILES =3D -Wl,--start-group,@$(OUTPUT_DIR)/tmp.list,--end= -group DLINK_FLAGS =3D -o $(BIN_DIR)/$(BASE_NAME) -flto -L/usr/X11R6/lib DLINK_FLAGS2 =3D -Wno-error -no-pie --=20 1.8.3.1 From nobody Sat May 18 22:54:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=avery-design.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1624665741448953.4382693489382; Fri, 25 Jun 2021 17:02:21 -0700 (PDT) Received: from localhost ([::1]:38452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwvm8-00055q-8d for importer@patchew.org; Fri, 25 Jun 2021 20:02:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50184) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwvl7-00033f-40 for qemu-devel@nongnu.org; Fri, 25 Jun 2021 20:01:17 -0400 Received: from static-71-162-116-19.bstnma.fios.verizon.net ([71.162.116.19]:37422 helo=server4.localdomain) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwvl4-0005ZQ-TF for qemu-devel@nongnu.org; Fri, 25 Jun 2021 20:01:16 -0400 Received: by server4.localdomain (Postfix, from userid 503) id 6F00360311130; Fri, 25 Jun 2021 20:01:14 -0400 (EDT) From: Chris Browy To: mst@redhat.com Subject: [PATCH v1 openspdm on QEMU CXL/PCIe Device 2/2] requester: Modified for QEMU emulation Date: Fri, 25 Jun 2021 20:01:12 -0400 Message-Id: <1624665672-4964-1-git-send-email-cbrowy@avery-design.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1624665280-3595-1-git-send-email-cbrowy@avery-design.com> References: <1624665280-3595-1-git-send-email-cbrowy@avery-design.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=71.162.116.19; envelope-from=chris@server4.localdomain; helo=server4.localdomain X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, KHOP_HELO_FCRDNS=0.399, NO_DNS_FOR_FROM=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ben.widawsky@intel.com, david@redhat.com, qemu-devel@nongnu.org, vishal.l.verma@intel.com, jgroves@micron.com, Chris Browy , armbru@redhat.com, linux-cxl@vger.kernel.org, f4bug@amsat.org, hchkuo@avery-design.com.tw, tyshao@avery-design.com.tw, jonathan.cameron@huawei.com, imammedo@redhat.com, dan.j.williams@intel.com, ira.weiny@intel.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: hchkuo The requester should be used as a PCIe app to access the SPDM object in the PCEe device. Signed-off-by: Chris Browy --- Include/IndustryStandard/PciDoeBinding.h | 27 +++++++ SpdmEmu/SpdmEmuCommon/SpdmEmu.c | 85 ++++++++++++++++++++++ SpdmEmu/SpdmEmuCommon/SpdmEmu.h | 7 ++ SpdmEmu/SpdmRequesterEmu/SpdmRequester.c | 100 +++++++++++++++++++------ SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.c | 109 ++++++++++++++++++++++++= +--- SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.h | 5 ++ 6 files changed, 300 insertions(+), 33 deletions(-) diff --git a/Include/IndustryStandard/PciDoeBinding.h b/Include/IndustrySta= ndard/PciDoeBinding.h index c7cd7d3..6d199f7 100644 --- a/Include/IndustryStandard/PciDoeBinding.h +++ b/Include/IndustryStandard/PciDoeBinding.h @@ -29,6 +29,33 @@ typedef struct { //UINT32 DataObjectDW[Length]; } PCI_DOE_DATA_OBJECT_HEADER; =20 +/* Extended Capabilities (PCI-X 2.0 and Express) */ +#define PCI_EXT_CAP_ID(header) (header & 0x0000ffff) +#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf) +#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc) + +#define PCIE_EXT_CAP_OFFSET 0x100 +#define PCI_EXT_CAP_ID_DOE 0x2e /* Data Object Exchange */ + +/* DOE Capabilities Register */ +#define PCIE_DOE_CAP 0x04 +#define PCIE_DOE_CAP_INTR_SUPP 0x00000001 +/* DOE Control Register */ +#define PCIE_DOE_CTRL 0x08 +#define PCIE_DOE_CTRL_ABORT 0x00000001 +#define PCIE_DOE_CTRL_INTR_EN 0x00000002 +#define PCIE_DOE_CTRL_GO 0x80000000 +/* DOE Status Register */ +#define PCIE_DOE_STATUS 0x0c +#define PCIE_DOE_STATUS_BUSY 0x00000001 +#define PCIE_DOE_STATUS_INTR 0x00000002 +#define PCIE_DOE_STATUS_ERR 0x00000004 +#define PCIE_DOE_STATUS_DO_RDY 0x80000000 +/* DOE Write Data Mailbox Register */ +#define PCIE_DOE_WR_DATA_MBOX 0x10 +/* DOE Read Data Mailbox Register */ +#define PCIE_DOE_RD_DATA_MBOX 0x14 + #define PCI_DOE_VENDOR_ID_PCISIG 0x0001 =20 #define PCI_DOE_DATA_OBJECT_TYPE_DOE_DISCOVERY 0x00 diff --git a/SpdmEmu/SpdmEmuCommon/SpdmEmu.c b/SpdmEmu/SpdmEmuCommon/SpdmEm= u.c index b9a4311..768a8b0 100644 --- a/SpdmEmu/SpdmEmuCommon/SpdmEmu.c +++ b/SpdmEmu/SpdmEmuCommon/SpdmEmu.c @@ -32,6 +32,11 @@ UINT32 mExeSession =3D (0 | EXE_SESSION_MEAS | 0); =20 +extern struct pcie_dev dev; +extern char filename[41]; +struct pcie_dev dev =3D {0}; +char filename[41]; + VOID PrintUsage ( IN CHAR8* Name @@ -364,6 +369,64 @@ Done: return Ret; } =20 +/* Ref: pciutils/lib/filter.c */ +/* Slot filter syntax: [[[domain]:][bus]:][slot][.[func]] */ +static char *pci_filter_parse_slot(struct pcie_dev *f, char *str) +{ + char *colon =3D strrchr(str, ':'); + char *dot =3D strchr((colon ? colon + 1 : str), '.'); + char *mid =3D str; + char *e, *bus, *colon2; + + if (colon) { + *colon++ =3D 0; + mid =3D colon; + colon2 =3D strchr(str, ':'); + + if (colon2) { + *colon2++ =3D 0; + bus =3D colon2; + if (str[0] && strcmp(str, "*")) { + long int x =3D strtol(str, &e, 16); + if ((e && *e) || (x < 0 || x > 0x7fffffff)) { + return "Invalid domain number"; + } + f->domain =3D x; + } + } else + bus =3D str; + + if (bus[0] && strcmp(bus, "*")) { + long int x =3D strtol(bus, &e, 16); + if ((e && *e) || (x < 0 || x > 0xff)) { + return "Invalid bus number"; + } + f->bus =3D x; + } + } + + if (dot) { + *dot++ =3D 0; + } + + if (mid[0] && strcmp(mid, "*")) { + long int x =3D strtol(mid, &e, 16); + if ((e && *e) || (x < 0 || x > 0x1f)) { + return "Invalid slot number"; + } + f->slot =3D x; + } + + if (dot && dot[0] && strcmp(dot, "*")) { + long int x =3D strtol(dot, &e, 16); + if ((e && *e) || (x < 0 || x > 7)) { + return "Invalid function number"; + } + f->func =3D x; + } + return NULL; +} + void ProcessArgs ( char *ProgramName, @@ -373,6 +436,7 @@ ProcessArgs ( { UINT32 Data32; CHAR8 *PcapFileName; + char *err; =20 PcapFileName =3D NULL; =20 @@ -854,6 +918,27 @@ ProcessArgs ( } } =20 + if (strcmp (argv[0], "-s") =3D=3D 0) { + if (argc >=3D 2) { + err =3D pci_filter_parse_slot(&dev, argv[1]); + if (err) { + printf("%s\n", err); + PrintUsage (ProgramName); + exit (0); + } + sprintf(filename, "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/config= ", + dev.domain, dev.bus, dev.slot, dev.func); + + argc -=3D 2; + argv +=3D 2; + continue; + } else { + printf ("invalid -s\n"); + PrintUsage (ProgramName); + exit (0); + } + } + printf ("invalid %s\n", argv[0]); PrintUsage (ProgramName); exit (0); diff --git a/SpdmEmu/SpdmEmuCommon/SpdmEmu.h b/SpdmEmu/SpdmEmuCommon/SpdmEm= u.h index 640cf00..5335fc9 100644 --- a/SpdmEmu/SpdmEmuCommon/SpdmEmu.h +++ b/SpdmEmu/SpdmEmuCommon/SpdmEmu.h @@ -156,4 +156,11 @@ ProcessArgs ( char *argv[ ] ); =20 +struct pcie_dev { + int pdev; + int domain; + int bus; + int slot; + int func; +}; #endif diff --git a/SpdmEmu/SpdmRequesterEmu/SpdmRequester.c b/SpdmEmu/SpdmRequest= erEmu/SpdmRequester.c index 7635e7e..cfa1723 100644 --- a/SpdmEmu/SpdmRequesterEmu/SpdmRequester.c +++ b/SpdmEmu/SpdmRequesterEmu/SpdmRequester.c @@ -11,6 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent =20 VOID *mSpdmContext; SOCKET mSocket; +extern struct pcie_dev dev; =20 BOOLEAN CommunicatePlatformData ( @@ -53,6 +54,30 @@ CommunicatePlatformData ( =20 RETURN_STATUS EFIAPI +AvyPCIConfigWriteDW ( + IN UINT64 Address, + IN OUT UINT32 Data + ) +{ + pwrite(dev.pdev, &Data, sizeof(uint32_t), Address); + + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI +AvyPCIConfigReadDW ( + IN UINT64 Address, + IN OUT UINT32 *Data + ) +{ + pread(dev.pdev, Data, sizeof(uint32_t), Address); + + return RETURN_SUCCESS; +} + +RETURN_STATUS +EFIAPI SpdmDeviceSendMessage ( IN VOID *SpdmContext, IN UINTN RequestSize, @@ -60,19 +85,30 @@ SpdmDeviceSendMessage ( IN UINT64 Timeout ) { + RETURN_STATUS PCIResult; BOOLEAN Result; + INT32 Index; + UINT32 DoeStatus =3D 0; =20 - Result =3D SendPlatformData (mSocket, SOCKET_SPDM_COMMAND_NORMAL, Reques= t, (UINT32)RequestSize); - if (!Result) { - printf ("SendPlatformData Error - %x\n", -#ifdef _MSC_VER - WSAGetLastError() -#else - errno -#endif - ); - return RETURN_DEVICE_ERROR; + while (DoeStatus & PCIE_DOE_STATUS_BUSY) { + Result =3D AvyPCIConfigReadDW(mDOEBaseAddress + PCIE_DOE_STATUS, &DoeS= tatus); + if (Result) { + return Result; + } + } + + for (Index =3D 0; Index < (INT32)(RequestSize / 4) ; Index++) { + PCIResult =3D AvyPCIConfigWriteDW (mDOEBaseAddress + PCIE_DOE_WR_DATA_= MBOX, ((UINT32 *)Request)[Index]); + if (PCIResult) { + return PCIResult; } + } + + PCIResult =3D AvyPCIConfigWriteDW (mDOEBaseAddress + PCIE_DOE_CTRL, PCIE= _DOE_CTRL_GO); + if (PCIResult) { + return PCIResult; + } + return RETURN_SUCCESS; } =20 @@ -85,20 +121,40 @@ SpdmDeviceReceiveMessage ( IN UINT64 Timeout ) { - BOOLEAN Result; - UINT32 Command; + RETURN_STATUS Result; + UINT32 RecieveBuffer[MAX_SPDM_MESSAGE_BUFFER_SIZE]; + UINT32 RecieveBufferCount =3D 0, DoeStatus =3D 0; =20 - Result =3D ReceivePlatformData (mSocket, &Command, Response, ResponseSiz= e); - if (!Result) { - printf ("ReceivePlatformData Error - %x\n", -#ifdef _MSC_VER - WSAGetLastError() -#else - errno -#endif - ); - return RETURN_DEVICE_ERROR; + while ((!(DoeStatus & PCIE_DOE_STATUS_DO_RDY)) || (DoeStatus & PCIE_DOE_= STATUS_BUSY)) { + Result =3D AvyPCIConfigReadDW(mDOEBaseAddress + PCIE_DOE_STATUS, &DoeS= tatus); + if (Result) { + return Result; } + } + + while (DoeStatus & PCIE_DOE_STATUS_DO_RDY) { + Result =3D AvyPCIConfigReadDW (mDOEBaseAddress + PCIE_DOE_RD_DATA_MBOX= , RecieveBuffer + RecieveBufferCount); + if (Result) { + return Result; + } + RecieveBufferCount++; + + Result =3D AvyPCIConfigWriteDW (mDOEBaseAddress + PCIE_DOE_RD_DATA_MBO= X, 0x1); + if (Result) { + return Result; + } + + Result =3D AvyPCIConfigReadDW (mDOEBaseAddress + PCIE_DOE_STATUS, &Doe= Status); + if (Result) { + return Result; + } + } + *ResponseSize =3D RecieveBufferCount * 4; + CopyMem (Response, RecieveBuffer, *ResponseSize); + + DumpData ((UINT8 *)Response, *ResponseSize); + printf ("\n"); + return RETURN_SUCCESS; } =20 diff --git a/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.c b/SpdmEmu/SpdmRequ= esterEmu/SpdmRequesterEmu.c index 61d38d8..64b7381 100644 --- a/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.c +++ b/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.c @@ -22,6 +22,10 @@ extern SOCKET mSocket; =20 extern VOID *mSpdmContext; =20 +extern struct pcie_dev dev; +UINT32 mDOEBaseAddress =3D 0; +extern char filename[41]; + VOID * SpdmClientInit ( VOID @@ -53,6 +57,31 @@ DoSessionViaSpdm ( IN BOOLEAN UsePsk ); =20 +RETURN_STATUS +EFIAPI +AvyPCIConfigReadDW ( + IN UINT64 Address, + IN OUT UINT32 *Data + ); + +RETURN_STATUS +EFIAPI +SpdmDeviceSendMessage ( + IN VOID *SpdmContext, + IN UINTN RequestSize, + IN VOID *Request, + IN UINT64 Timeout + ); + +RETURN_STATUS +EFIAPI +SpdmDeviceReceiveMessage ( + IN VOID *SpdmContext, + IN OUT UINTN *ResponseSize, + IN OUT VOID *Response, + IN UINT64 Timeout + ); + BOOLEAN InitClient ( OUT SOCKET *Socket, @@ -116,12 +145,18 @@ PlatformClientRoutine ( IN UINT16 PortNumber ) { +#if 0 SOCKET PlatformSocket; BOOLEAN Result; UINT32 Response; +#endif UINTN ResponseSize; + INT32 Result; RETURN_STATUS Status; + UINT32 CapabilityOffset =3D 0, PCIRegister; + BOOLEAN ProtocolFound =3D FALSE; =20 +#if 0 #ifdef _MSC_VER WSADATA Ws; if (WSAStartup(MAKEWORD(2,2), &Ws) !=3D 0) { @@ -176,6 +211,49 @@ PlatformClientRoutine ( mDoeRequest.DoeDiscoveryRequest.Index =3D DoeResponse.DoeDiscoveryRe= sponse.NextIndex; } while (DoeResponse.DoeDiscoveryResponse.NextIndex !=3D 0); } +#endif + if (mUseTransportLayer =3D=3D SOCKET_TRANSPORT_TYPE_PCI_DOE) { + DOE_DISCOVERY_RESPONSE_MINE DoeResponse; + + for (CapabilityOffset =3D PCIE_EXT_CAP_OFFSET; CapabilityOffset; + CapabilityOffset =3D PCI_EXT_CAP_NEXT(PCIRegister)) { + Result =3D AvyPCIConfigReadDW (CapabilityOffset, &PCIRegister); + if (Result) { + printf ("Config Read error\n"); + goto Done; + } + + if (PCI_EXT_CAP_ID(PCIRegister) =3D=3D PCI_EXT_CAP_ID_DOE) { + mDOEBaseAddress =3D CapabilityOffset; + + // DOE Discovery + do { + SpdmDeviceSendMessage (NULL, sizeof(mDoeRequest), &mDoeRequest, = 0); + SpdmDeviceReceiveMessage (NULL, &ResponseSize, &DoeResponse, 0); + + if (DoeResponse.DoeHeader.VendorId =3D=3D PCI_DOE_VENDOR_ID_PCIS= IG && + DoeResponse.DoeDiscoveryResponse.DataObjectType =3D=3D PCI_D= OE_DATA_OBJECT_TYPE_SPDM) { + ProtocolFound =3D TRUE; + break; + } + + mDoeRequest.DoeDiscoveryRequest.Index =3D DoeResponse.DoeDiscove= ryResponse.NextIndex; + } while (DoeResponse.DoeDiscoveryResponse.NextIndex !=3D 0); + + if (ProtocolFound) { + break; + } + } + } + + if (!mDOEBaseAddress) { + printf ("DOE Capability not found\n"); + goto Done; + } else if (!ProtocolFound) { + printf ("SPDM protocol not found\n"); + goto Done; + } + } =20 mSpdmContext =3D SpdmClientInit (); if (mSpdmContext =3D=3D NULL) { @@ -217,24 +295,26 @@ PlatformClientRoutine ( } =20 // Do test - end + printf ("\033[1mTest End\033[m\n"); + return TRUE; =20 Done: - ResponseSize =3D 0; - Result =3D CommunicatePlatformData ( - PlatformSocket, - SOCKET_SPDM_COMMAND_SHUTDOWN - mExeMode, - NULL, - 0, - &Response, - &ResponseSize, - NULL - ); + //ResponseSize =3D 0; + //Result =3D CommunicatePlatformData ( + // PlatformSocket, + // SOCKET_SPDM_COMMAND_SHUTDOWN - mExeMode, + // NULL, + // 0, + // &Response, + // &ResponseSize, + // NULL + // ); =20 if (mSpdmContext !=3D NULL) { free (mSpdmContext); } =20 - closesocket (PlatformSocket); + //closesocket (PlatformSocket); =20 #ifdef _MSC_VER WSACleanup(); @@ -253,9 +333,16 @@ int main ( =20 ProcessArgs ("SpdmRequesterEmu", argc, argv); =20 + dev.pdev =3D open(filename, O_RDWR); + if (dev.pdev < 0) { + printf("Fail to open %s\n", filename); + return -1; + } + PlatformClientRoutine (DEFAULT_SPDM_PLATFORM_PORT); printf ("Client stopped\n"); =20 ClosePcapPacketFile (); + close(dev.pdev); return 0; } diff --git a/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.h b/SpdmEmu/SpdmRequ= esterEmu/SpdmRequesterEmu.h index 5671536..c1d03ef 100644 --- a/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.h +++ b/SpdmEmu/SpdmRequesterEmu/SpdmRequesterEmu.h @@ -20,4 +20,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "stdio.h" #include "SpdmEmu.h" =20 +#include +#include +#include + +extern UINT32 mDOEBaseAddress; #endif --=20 1.8.3.1