From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web10.3236.1573006084767029609 for ; Tue, 05 Nov 2019 18:08:04 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: chasel.chiu@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Nov 2019 18:08:04 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,272,1569308400"; d="scan'208";a="200570844" Received: from pgsmsx101.gar.corp.intel.com ([10.221.44.78]) by fmsmga008.fm.intel.com with ESMTP; 05 Nov 2019 18:08:03 -0800 Received: from pgsmsx111.gar.corp.intel.com ([169.254.2.128]) by PGSMSX101.gar.corp.intel.com ([169.254.1.80]) with mapi id 14.03.0439.000; Wed, 6 Nov 2019 10:08:02 +0800 From: "Chiu, Chasel" To: "Agyeman, Prince" , "devel@edk2.groups.io" CC: "Kubacki, Michael A" , "Desimone, Nathaniel L" Subject: Re: [edk2-platforms] [Patch v2 5/9] BoardModulePkg: Added Pcds to Super I/O driver Thread-Topic: [edk2-platforms] [Patch v2 5/9] BoardModulePkg: Added Pcds to Super I/O driver Thread-Index: AQHVlEErregtgXcLj0KbHEszApy8XKd9ZYCQ Date: Wed, 6 Nov 2019 02:08:02 +0000 Message-ID: <3C3EFB470A303B4AB093197B6777CCEC5052326F@PGSMSX111.gar.corp.intel.com> References: <20191106012603.4724-1-prince.agyeman@intel.com> <20191106012603.4724-6-prince.agyeman@intel.com> In-Reply-To: <20191106012603.4724-6-prince.agyeman@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGEzNmFkYWEtMDZmMC00ZWRiLTk2ODItYTk5ODc2YWFhZTkwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiXC83SjJTT3djOXJ5d0UzUW5WWXpXSVRDVXA5aXlzaXdOS3MzUEtGVHhNSEcwRkxUMFN0ejhmbUpKQSs3aEVDQ0kifQ== x-ctpclassification: CTP_NT x-originating-ip: [172.30.20.206] MIME-Version: 1.0 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Chasel Chiu > -----Original Message----- > From: Agyeman, Prince > Sent: Wednesday, November 6, 2019 9:26 AM > To: devel@edk2.groups.io > Cc: Kubacki, Michael A ; Chiu, Chasel > ; Desimone, Nathaniel L > > Subject: [edk2-platforms] [Patch v2 5/9] BoardModulePkg: Added Pcds to > Super I/O driver >=20 > Included PCDs to the Super I/O DXE driver, to allow the enable/disable of > Ps2 keyboard/mouse, > UART1 and UART2 ports. >=20 > Cc: Michael Kubacki > Cc: Chasel Chiu > Cc: Nate DeSimone >=20 > Signed-off-by: Prince Agyeman > --- > .../LegacySioDxe/LegacySioDxe.inf | 12 ++++ > .../BoardModulePkg/LegacySioDxe/SioChip.c | 68 > +++++++++++++++++-- > .../BoardModulePkg/LegacySioDxe/SioChip.h | 8 +++ > .../BoardModulePkg/LegacySioDxe/SioDriver.c | 40 +++++++++++ > 4 files changed, 122 insertions(+), 6 deletions(-) >=20 > diff --git a/Platform/Intel/BoardModulePkg/LegacySioDxe/LegacySioDxe.inf > b/Platform/Intel/BoardModulePkg/LegacySioDxe/LegacySioDxe.inf > index f01f63e69e..ccddc97e91 100644 > --- a/Platform/Intel/BoardModulePkg/LegacySioDxe/LegacySioDxe.inf > +++ b/Platform/Intel/BoardModulePkg/LegacySioDxe/LegacySioDxe.inf > @@ -34,6 +34,7 @@ > [Packages] > MdePkg/MdePkg.dec > MdeModulePkg/MdeModulePkg.dec > + BoardModulePkg/BoardModulePkg.dec >=20 > [Sources] > SioChip.c > @@ -44,6 +45,17 @@ > SioDriver.h > ComponentName.c >=20 > +[Pcd] > + gBoardModulePkgTokenSpaceGuid.PcdPs2KbMsEnable > + gBoardModulePkgTokenSpaceGuid.PcdUart1Enable > + gBoardModulePkgTokenSpaceGuid.PcdUart1IrqMask > + gBoardModulePkgTokenSpaceGuid.PcdUart1IoPort > + gBoardModulePkgTokenSpaceGuid.PcdUart1Length > + gBoardModulePkgTokenSpaceGuid.PcdUart2Enable > + gBoardModulePkgTokenSpaceGuid.PcdUart2IrqMask > + gBoardModulePkgTokenSpaceGuid.PcdUart2IoPort > + gBoardModulePkgTokenSpaceGuid.PcdUart2Length > + gBoardModulePkgTokenSpaceGuid.PcdSuperIoPciIsaBridgeDevice > [Protocols] > gEfiPciIoProtocolGuid ## CONSUMES > gEfiDevicePathProtocolGuid ## PRODUCES > diff --git a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.c > b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.c > index 81efe3c38b..e63977be60 100644 > --- a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.c > +++ b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.c > @@ -19,12 +19,31 @@ > ACPI_SIO_RESOURCES_IO_IRQ mCom1Resources =3D { > { > { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, > - 0x3f8, > - 8 > + FixedPcdGet16 (PcdUart1IoPort), > + FixedPcdGet8 (PcdUart1Length) > + }, > + { > + { ACPI_IRQ_NOFLAG_DESCRIPTOR }, > + FixedPcdGet16 (PcdUart1IrqMask) > + }, > + { > + ACPI_END_TAG_DESCRIPTOR, > + 0 > + } > +}; > + > +// > +// COM 2 UART Controller > +// > +ACPI_SIO_RESOURCES_IO_IRQ mCom2Resources =3D { > + { > + { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, > + FixedPcdGet16 (PcdUart2IoPort), > + FixedPcdGet8 (PcdUart2Length) > }, > { > { ACPI_IRQ_NOFLAG_DESCRIPTOR }, > - BIT4 // IRQ4 > + FixedPcdGet16 (PcdUart2IrqMask), > }, > { > ACPI_END_TAG_DESCRIPTOR, > @@ -74,6 +93,7 @@ ACPI_SIO_RESOURCES_IO_IRQ > mMouseResources =3D { > // Table of SIO Controllers > // > DEVICE_INFO mDeviceInfo[] =3D { > +#if FixedPcdGet8 (PcdUart1Enable) =3D=3D DEVICE_ENABLED > { > { > EISA_PNP_ID(0x501), > @@ -84,6 +104,20 @@ DEVICE_INFO mDeviceInfo[] =3D { > { (ACPI_SMALL_RESOURCE_HEADER *) &mCom1Resources }, > { (ACPI_SMALL_RESOURCE_HEADER *) &mCom1Resources } > }, // COM 1 UART Controller > +#endif > +#if FixedPcdGet8 (PcdUart2Enable) =3D=3D DEVICE_ENABLED > + { > + { > + EISA_PNP_ID(0x501), > + 0 > + }, > + 0, > + RESOURCE_IO | RESOURCE_IRQ, > + { (ACPI_SMALL_RESOURCE_HEADER *) &mCom2Resources }, > + { (ACPI_SMALL_RESOURCE_HEADER *) &mCom2Resources } > + }, // COM 2 UART Controller > +#endif > +#if FixedPcdGet8 (PcdPs2KbMsEnable) =3D=3D DEVICE_ENABLED > { > { > EISA_PNP_ID(0x303), > @@ -103,10 +137,30 @@ DEVICE_INFO mDeviceInfo[] =3D { > 0, // Cannot change resource > { (ACPI_SMALL_RESOURCE_HEADER *) &mMouseResources }, > { (ACPI_SMALL_RESOURCE_HEADER *) &mMouseResources } > - } // PS/2 Mouse Controller > + }, // PS/2 Mouse Controller > +#endif > + DEVICE_INFO_END > }; >=20 >=20 > + > +/** > + Gets the number of devices in Table of SIO Controllers mDeviceInfo > + > + @retval Number of enabled devices in Table of SIO Controllers. > +**/ > +UINTN > +EFIAPI > +GetDeviceCount ( > + VOID > +){ > + UINTN Count; > + // Get mDeviceInfo item count > + // -1 to account for for the end device info > + Count =3D ARRAY_SIZE (mDeviceInfo) - 1; > + return Count; > +} > + > /** > Return the supported devices. >=20 > @@ -128,7 +182,7 @@ DeviceGetList ( > // > // Allocate enough memory for simplicity > // > - DeviceCount =3D sizeof (mDeviceInfo) / sizeof (mDeviceInfo[0]); > + DeviceCount =3D GetDeviceCount (); > LocalDevices =3D AllocatePool (sizeof (EFI_SIO_ACPI_DEVICE_ID) * > DeviceCount); > ASSERT (LocalDevices !=3D NULL); > if (LocalDevices =3D=3D NULL) { > @@ -175,8 +229,10 @@ DeviceSearch ( > ) > { > UINTN Index; > + UINTN DeviceCount; >=20 > - for (Index =3D 0; Index < sizeof (mDeviceInfo) / sizeof (mDeviceInfo[0= ]); > Index++) { > + DeviceCount =3D GetDeviceCount (); > + for (Index =3D 0; Index < DeviceCount; Index++) { > if (CompareMem (Device, &mDeviceInfo[Index].Device, sizeof (*Device)= ) > =3D=3D 0) { > return &mDeviceInfo[Index]; > } > diff --git a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.h > b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.h > index 9322365923..afff6fe7b5 100644 > --- a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.h > +++ b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioChip.h > @@ -24,6 +24,8 @@ UINT8 > #define RESOURCE_DMA BIT2 > #define RESOURCE_MEM BIT3 >=20 > +#define DEVICE_ENABLED 0x01 > +#define DEVICE_INFO_END { { 0xFFFFFFFF, 0xFFFFFFFF } } > #pragma pack(1) >=20 > typedef struct { > @@ -45,6 +47,12 @@ typedef struct { > ACPI_RESOURCE_HEADER_PTR Resources; > ACPI_RESOURCE_HEADER_PTR PossibleResources; > } DEVICE_INFO; > +typedef struct { > + UINT8 Segment; > + UINT8 Bus; > + UINT8 Device; > + UINT8 Funtion; > +} SIO_PCI_ISA_BRIDGE_DEVICE_INFO; >=20 > /** > Return the supported devices. > diff --git a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioDriver.c > b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioDriver.c > index 408c6ff301..5bfdc94681 100644 > --- a/Platform/Intel/BoardModulePkg/LegacySioDxe/SioDriver.c > +++ b/Platform/Intel/BoardModulePkg/LegacySioDxe/SioDriver.c > @@ -106,6 +106,27 @@ SioDriverEntryPoint ( } >=20 >=20 > +/** > + Compares a PCI to ISA bridge device segment, bus, device and function > +to the > + PcdSuperIoPciIsaBridgeDevice values. > + > + @param[in] CurrentDevice The device to be compared with the > PcdSuperIoPciIsaBridgeDevice information > + @retval TRUE This device matches > PcdSuperIoPciIsaBridgeDevice values > + @retval FALSE This device does not match the > PcdSuperIoPciIsaBridgeDevice values > +**/ > +BOOLEAN > +EFIAPI > +SioDeviceEnabled ( > + IN SIO_PCI_ISA_BRIDGE_DEVICE_INFO *CurrentDevice ){ > + SIO_PCI_ISA_BRIDGE_DEVICE_INFO *Device =3D \ > + (SIO_PCI_ISA_BRIDGE_DEVICE_INFO *) FixedPcdGetPtr > (PcdSuperIoPciIsaBridgeDevice); > + if(CompareMem (Device, CurrentDevice, sizeof > (SIO_PCI_ISA_BRIDGE_DEVICE_INFO)) =3D=3D 0) { > + return TRUE; > + } > + return FALSE; > +} > + > /** > Test to see if this driver supports Controller Handle. >=20 > @@ -138,6 +159,7 @@ SioDriverSupported ( > UINTN BusNumber; > UINTN DeviceNumber; > UINTN FunctionNumber; > + SIO_PCI_ISA_BRIDGE_DEVICE_INFO SioDevice; >=20 > // > // If RemainingDevicePath is not NULL, it should verify that the first > device @@ -250,6 +272,24 @@ SioDriverSupported ( > Status =3D EFI_UNSUPPORTED; > } > } > + if(!EFI_ERROR (Status)) { > + Status =3D PciIo->GetLocation ( > + PciIo, > + &SegmentNumber, > + &BusNumber, > + &DeviceNumber, > + &FunctionNumber > + ); > + if(!EFI_ERROR (Status)) { > + SioDevice.Segment =3D (UINT8) SegmentNumber; > + SioDevice.Bus =3D (UINT8) BusNumber; > + SioDevice.Device =3D (UINT8) DeviceNumber; > + SioDevice.Funtion =3D (UINT8) FunctionNumber; > + if(!SioDeviceEnabled (&SioDevice)) { > + Status =3D EFI_UNSUPPORTED; > + } > + } > + } > } > } >=20 > -- > 2.19.1.windows.1