From nobody Mon Feb 9 18:44:25 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+111105+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+111105+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1699660790; cv=none; d=zohomail.com; s=zohoarc; b=PG1qFlufLJy5VJE7/oQrRxtoFN+kNj/W6aVMI6Ih+rBA4TJkZmbKVLgGrSaEx7tF1P0nQueMqULSg1Tkp2vq/z0RB9WRUh3S171nKcjNGyzIDDTR8CS/Pf06LmV6wpd3wRTRVL9OrI5MOVVKzmKCG8BT2JcsPpp5pJBGFb0j94E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699660790; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=hTJVK0i/RacK1uIzHI4auBGwMraVXFzUGQEvuM5fe24=; b=OqrfY4Sd2y4Uz2mrJn34qqY5PmlTD0vD2Ycc4Tv3R7nTALVkbqUrStyZDuMWYjdOTFmyIvhwaPXjtSM0q3RsmNi6k3UoPvC+/xeXasZkJQsV2DuU3i18NhsZdg1ws+YDHds08RErvPugiKm2FZuVpXpYKJG09NIvLQh6mA2dOwM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+111105+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16996607907011016.399084398945; Fri, 10 Nov 2023 15:59:50 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=hTJVK0i/RacK1uIzHI4auBGwMraVXFzUGQEvuM5fe24=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1699660790; v=1; b=eoSBXrh47AvHV+SEyLej51T4vca5yiWlmuPRNJe7QYf2HtiAlYhXfZrtyMzpOozC4BqBGWVF emEO2mpDVU7wYVNqiSfhEBxK664OrZXs8rE8dQPBzcIxHnWA8unVnJzvX0J/YTUkkCXYVRIfmwt qtZ/QFasbXV9aLM6uk99kUS0= X-Received: by 127.0.0.2 with SMTP id h3mPYY1788612xS0zpYt6Xz1; Fri, 10 Nov 2023 15:59:50 -0800 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web10.42657.1699660789628558592 for ; Fri, 10 Nov 2023 15:59:49 -0800 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-mpDYPT0QPqG-FJJgI9C6TQ-1; Fri, 10 Nov 2023 18:59:45 -0500 X-MC-Unique: mpDYPT0QPqG-FJJgI9C6TQ-1 X-Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 91797867902; Fri, 10 Nov 2023 23:59:45 +0000 (UTC) X-Received: from lacos-laptop-9.usersys.redhat.com (unknown [10.39.192.173]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9EEDBC15881; Fri, 10 Nov 2023 23:59:44 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Gerd Hoffmann , Jiewen Yao Subject: [edk2-devel] [PATCH 34/37] OvmfPkg: remove 8259InterruptControllerDxe Date: Sat, 11 Nov 2023 00:58:17 +0100 Message-Id: <20231110235820.644381-35-lersek@redhat.com> In-Reply-To: <20231110235820.644381-1-lersek@redhat.com> References: <20231110235820.644381-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: imcpuMSxxNe2srJXNKZedXotx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1699660791826100025 Content-Type: text/plain; charset="utf-8"; x-default="true" 8259InterruptControllerDxe is not used by any platforms at this point, remove it. This patch removes mentions of the following CSM resources from the source code: - GUIDs (protocols or otherwise): - gEfiLegacy8259ProtocolGuid - headers: - Protocol/Legacy8259.h - PCDs: - Pcd8259LegacyModeEdgeLevel - Pcd8259LegacyModeMask which extends the list of resources scheduled for removal to: - GUIDs (protocols or otherwise): - gEfiLegacy8259ProtocolGuid - headers: - Protocol/Legacy8259.h - PCDs: - Pcd8259LegacyModeEdgeLevel - Pcd8259LegacyModeMask Cc: Ard Biesheuvel Cc: Gerd Hoffmann Cc: Jiewen Yao Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4588 Signed-off-by: Laszlo Ersek --- OvmfPkg/8259InterruptControllerDxe/Legacy8259.uni | 16 - OvmfPkg/8259InterruptControllerDxe/Legacy8259Extra.uni | 14 - OvmfPkg/8259InterruptControllerDxe/8259.inf | 45 -- OvmfPkg/8259InterruptControllerDxe/8259.h | 218 ------- OvmfPkg/8259InterruptControllerDxe/8259.c | 622 -------------= ------- 5 files changed, 915 deletions(-) diff --git a/OvmfPkg/8259InterruptControllerDxe/Legacy8259.uni b/OvmfPkg/82= 59InterruptControllerDxe/Legacy8259.uni deleted file mode 100644 index d03529241958..000000000000 --- a/OvmfPkg/8259InterruptControllerDxe/Legacy8259.uni +++ /dev/null @@ -1,16 +0,0 @@ -// /** @file -// 8259 Interrupt Controller driver that provides Legacy 8259 protocol. -// -// 8259 Interrupt Controller driver that provides Legacy 8259 protocol. -// -// Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.
-// -// SPDX-License-Identifier: BSD-2-Clause-Patent -// -// **/ - - -#string STR_MODULE_ABSTRACT #language en-US "8259 Interrupt Co= ntroller driver that provides Legacy 8259 protocol" - -#string STR_MODULE_DESCRIPTION #language en-US "8259 Interrupt Co= ntroller driver that provides Legacy 8259 protocol." - diff --git a/OvmfPkg/8259InterruptControllerDxe/Legacy8259Extra.uni b/OvmfP= kg/8259InterruptControllerDxe/Legacy8259Extra.uni deleted file mode 100644 index ee43f6923c45..000000000000 --- a/OvmfPkg/8259InterruptControllerDxe/Legacy8259Extra.uni +++ /dev/null @@ -1,14 +0,0 @@ -// /** @file -// Legacy8259 Localized Strings and Content -// -// Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.
-// -// SPDX-License-Identifier: BSD-2-Clause-Patent -// -// **/ - -#string STR_PROPERTIES_MODULE_NAME -#language en-US -"Legacy 8259 Interrupt Controller DXE Driver" - - diff --git a/OvmfPkg/8259InterruptControllerDxe/8259.inf b/OvmfPkg/8259Inte= rruptControllerDxe/8259.inf deleted file mode 100644 index 7320ff2490a7..000000000000 --- a/OvmfPkg/8259InterruptControllerDxe/8259.inf +++ /dev/null @@ -1,45 +0,0 @@ -## @file -# 8259 Interrupt Controller driver that provides Legacy 8259 protocol. -# -# Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION =3D 0x00010005 - BASE_NAME =3D Legacy8259 - MODULE_UNI_FILE =3D Legacy8259.uni - FILE_GUID =3D 245CB4DA-8E15-4A1B-87E3-9878FFA07520 - MODULE_TYPE =3D DXE_DRIVER - VERSION_STRING =3D 1.0 - ENTRY_POINT =3D Install8259 - -[Sources] - 8259.c - 8259.h - -[Packages] - MdePkg/MdePkg.dec - OvmfPkg/OvmfPkg.dec - -[LibraryClasses] - UefiBootServicesTableLib - DebugLib - UefiDriverEntryPoint - IoLib - PcdLib - -[Protocols] - gEfiLegacy8259ProtocolGuid ## PRODUCES - gEfiPciIoProtocolGuid ## SOMETIMES_CONSUMES - -[Pcd] - gUefiOvmfPkgTokenSpaceGuid.Pcd8259LegacyModeMask ## CONSUMES - gUefiOvmfPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel ## CONSUMES - -[Depex] - TRUE - -[UserExtensions.TianoCore."ExtraFiles"] - Legacy8259Extra.uni diff --git a/OvmfPkg/8259InterruptControllerDxe/8259.h b/OvmfPkg/8259Interr= uptControllerDxe/8259.h deleted file mode 100644 index 066552ca933e..000000000000 --- a/OvmfPkg/8259InterruptControllerDxe/8259.h +++ /dev/null @@ -1,218 +0,0 @@ -/** @file - Driver implementing the Tiano Legacy 8259 Protocol - -Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _8259_H__ -#define _8259_H__ - -#include -#include - -#include -#include -#include -#include -#include - -#include - -// 8259 Hardware definitions - -#define LEGACY_MODE_BASE_VECTOR_MASTER 0x08 -#define LEGACY_MODE_BASE_VECTOR_SLAVE 0x70 - -#define PROTECTED_MODE_BASE_VECTOR_MASTER 0x68 -#define PROTECTED_MODE_BASE_VECTOR_SLAVE 0x70 - -#define LEGACY_8259_CONTROL_REGISTER_MASTER 0x20 -#define LEGACY_8259_MASK_REGISTER_MASTER 0x21 -#define LEGACY_8259_CONTROL_REGISTER_SLAVE 0xA0 -#define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1 -#define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER 0x4D0 -#define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE 0x4D1 - -#define LEGACY_8259_EOI 0x20 - -// Protocol Function Prototypes - -/** - Sets the base address for the 8259 master and slave PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] MasterBase Interrupt vectors for IRQ0-IRQ7. - @param[in] SlaveBase Interrupt vectors for IRQ8-IRQ15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while writing to the 8259 = PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetVectorBase ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN UINT8 MasterBase, - IN UINT8 SlaveBase - ); - -/** - Gets the current 16-bit real mode and 32-bit protected-mode IRQ masks. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL = instance. - @param[out] LegacyMask 16-bit mode interrupt mask for IRQ0-IRQ= 15. - @param[out] LegacyEdgeLevel 16-bit mode edge/level mask for IRQ-IRQ= 15. - @param[out] ProtectedMask 32-bit mode interrupt mask for IRQ0-IRQ= 15. - @param[out] ProtectedEdgeLevel 32-bit mode edge/level mask for IRQ0-IR= Q15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while reading the 8259 PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetMask ( - IN EFI_LEGACY_8259_PROTOCOL *This, - OUT UINT16 *LegacyMask OPTIONAL, - OUT UINT16 *LegacyEdgeLevel OPTIONAL, - OUT UINT16 *ProtectedMask OPTIONAL, - OUT UINT16 *ProtectedEdgeLevel OPTIONAL - ); - -/** - Sets the current 16-bit real mode and 32-bit protected-mode IRQ masks. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL i= nstance. - @param[in] LegacyMask 16-bit mode interrupt mask for IRQ0-IRQ1= 5. - @param[in] LegacyEdgeLevel 16-bit mode edge/level mask for IRQ-IRQ1= 5. - @param[in] ProtectedMask 32-bit mode interrupt mask for IRQ0-IRQ1= 5. - @param[in] ProtectedEdgeLevel 32-bit mode edge/level mask for IRQ0-IRQ= 15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while writing the 8259 PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetMask ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN UINT16 *LegacyMask OPTIONAL, - IN UINT16 *LegacyEdgeLevel OPTIONAL, - IN UINT16 *ProtectedMask OPTIONAL, - IN UINT16 *ProtectedEdgeLevel OPTIONAL - ); - -/** - Sets the mode of the PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Mode 16-bit real or 32-bit protected mode. - @param[in] Mask The value with which to set the interrupt mask. - @param[in] EdgeLevel The value with which to set the edge/level mask. - - @retval EFI_SUCCESS The mode was set successfully. - @retval EFI_INVALID_PARAMETER The mode was not set. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetMode ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_MODE Mode, - IN UINT16 *Mask OPTIONAL, - IN UINT16 *EdgeLevel OPTIONAL - ); - -/** - Translates the IRQ into a vector. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq IRQ0-IRQ15. - @param[out] Vector The vector that is assigned to the IRQ. - - @retval EFI_SUCCESS The Vector that matches Irq was returned. - @retval EFI_INVALID_PARAMETER Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetVector ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq, - OUT UINT8 *Vector - ); - -/** - Enables the specified IRQ. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL insta= nce. - @param[in] Irq IRQ0-IRQ15. - @param[in] LevelTriggered 0 =3D Edge triggered; 1 =3D Level triggered. - - @retval EFI_SUCCESS The Irq was enabled on the 8259 PIC. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259EnableIrq ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq, - IN BOOLEAN LevelTriggered - ); - -/** - Disables the specified IRQ. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq IRQ0-IRQ15. - - @retval EFI_SUCCESS The Irq was disabled on the 8259 PIC. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259DisableIrq ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq - ); - -/** - Reads the PCI configuration space to get the interrupt number that is as= signed to the card. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] PciHandle PCI function for which to return the vector. - @param[out] Vector IRQ number that corresponds to the interrupt lin= e. - - @retval EFI_SUCCESS The interrupt line value was read successfully. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetInterruptLine ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT UINT8 *Vector - ); - -/** - Issues the End of Interrupt (EOI) commands to PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq The interrupt for which to issue the EOI command. - - @retval EFI_SUCCESS The EOI command was issued. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259EndOfInterrupt ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq - ); - -#endif diff --git a/OvmfPkg/8259InterruptControllerDxe/8259.c b/OvmfPkg/8259Interr= uptControllerDxe/8259.c deleted file mode 100644 index e123ac2d96b2..000000000000 --- a/OvmfPkg/8259InterruptControllerDxe/8259.c +++ /dev/null @@ -1,622 +0,0 @@ -/** @file - This contains the installation function for the driver. - -Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "8259.h" - -// -// Global for the Legacy 8259 Protocol that is produced by this driver -// -EFI_LEGACY_8259_PROTOCOL mInterrupt8259 =3D { - Interrupt8259SetVectorBase, - Interrupt8259GetMask, - Interrupt8259SetMask, - Interrupt8259SetMode, - Interrupt8259GetVector, - Interrupt8259EnableIrq, - Interrupt8259DisableIrq, - Interrupt8259GetInterruptLine, - Interrupt8259EndOfInterrupt -}; - -// -// Global for the handle that the Legacy 8259 Protocol is installed -// -EFI_HANDLE m8259Handle =3D NULL; - -UINT8 mMasterBase =3D 0xff; -UINT8 mSlaveBase =3D 0xff; -EFI_8259_MODE mMode =3D Efi8259ProtectedMode; -UINT16 mProtectedModeMask =3D 0xffff; -UINT16 mLegacyModeMask; -UINT16 mProtectedModeEdgeLevel =3D 0x0000; -UINT16 mLegacyModeEdgeLevel; - -// -// Worker Functions -// - -/** - Write to mask and edge/level triggered registers of master and slave PIC= s. - - @param[in] Mask low byte for master PIC mask register, - high byte for slave PIC mask register. - @param[in] EdgeLevel low byte for master PIC edge/level triggered regi= ster, - high byte for slave PIC edge/level triggered regi= ster. - -**/ -VOID -Interrupt8259WriteMask ( - IN UINT16 Mask, - IN UINT16 EdgeLevel - ) -{ - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, (UINT8)Mask); - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, (UINT8)(Mask >> 8)); - IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER, (UINT8)EdgeL= evel); - IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE, (UINT8)(EdgeL= evel >> 8)); -} - -/** - Read from mask and edge/level triggered registers of master and slave PI= Cs. - - @param[out] Mask low byte for master PIC mask register, - high byte for slave PIC mask register. - @param[out] EdgeLevel low byte for master PIC edge/level triggered reg= ister, - high byte for slave PIC edge/level triggered reg= ister. - -**/ -VOID -Interrupt8259ReadMask ( - OUT UINT16 *Mask, - OUT UINT16 *EdgeLevel - ) -{ - UINT16 MasterValue; - UINT16 SlaveValue; - - if (Mask !=3D NULL) { - MasterValue =3D IoRead8 (LEGACY_8259_MASK_REGISTER_MASTER); - SlaveValue =3D IoRead8 (LEGACY_8259_MASK_REGISTER_SLAVE); - - *Mask =3D (UINT16)(MasterValue | (SlaveValue << 8)); - } - - if (EdgeLevel !=3D NULL) { - MasterValue =3D IoRead8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MAS= TER); - SlaveValue =3D IoRead8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLA= VE); - - *EdgeLevel =3D (UINT16)(MasterValue | (SlaveValue << 8)); - } -} - -// -// Legacy 8259 Protocol Interface Functions -// - -/** - Sets the base address for the 8259 master and slave PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] MasterBase Interrupt vectors for IRQ0-IRQ7. - @param[in] SlaveBase Interrupt vectors for IRQ8-IRQ15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while writing to the 8259 = PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetVectorBase ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN UINT8 MasterBase, - IN UINT8 SlaveBase - ) -{ - UINT8 Mask; - EFI_TPL OriginalTpl; - - OriginalTpl =3D gBS->RaiseTPL (TPL_HIGH_LEVEL); - // - // Set vector base for slave PIC - // - if (SlaveBase !=3D mSlaveBase) { - mSlaveBase =3D SlaveBase; - - // - // Initialization sequence is needed for setting vector base. - // - - // - // Preserve interrtup mask register before initialization sequence - // because it will be cleared during initialization - // - Mask =3D IoRead8 (LEGACY_8259_MASK_REGISTER_SLAVE); - - // - // ICW1: cascade mode, ICW4 write required - // - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_SLAVE, 0x11); - - // - // ICW2: new vector base (must be multiple of 8) - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, mSlaveBase); - - // - // ICW3: slave indentification code must be 2 - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0x02); - - // - // ICW4: fully nested mode, non-buffered mode, normal EOI, IA processor - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0x01); - - // - // Restore interrupt mask register - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, Mask); - } - - // - // Set vector base for master PIC - // - if (MasterBase !=3D mMasterBase) { - mMasterBase =3D MasterBase; - - // - // Initialization sequence is needed for setting vector base. - // - - // - // Preserve interrtup mask register before initialization sequence - // because it will be cleared during initialization - // - Mask =3D IoRead8 (LEGACY_8259_MASK_REGISTER_MASTER); - - // - // ICW1: cascade mode, ICW4 write required - // - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_MASTER, 0x11); - - // - // ICW2: new vector base (must be multiple of 8) - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, mMasterBase); - - // - // ICW3: slave PIC is cascaded on IRQ2 - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0x04); - - // - // ICW4: fully nested mode, non-buffered mode, normal EOI, IA processor - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0x01); - - // - // Restore interrupt mask register - // - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, Mask); - } - - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_SLAVE, LEGACY_8259_EOI); - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_MASTER, LEGACY_8259_EOI); - - gBS->RestoreTPL (OriginalTpl); - - return EFI_SUCCESS; -} - -/** - Gets the current 16-bit real mode and 32-bit protected-mode IRQ masks. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL = instance. - @param[out] LegacyMask 16-bit mode interrupt mask for IRQ0-IRQ= 15. - @param[out] LegacyEdgeLevel 16-bit mode edge/level mask for IRQ-IRQ= 15. - @param[out] ProtectedMask 32-bit mode interrupt mask for IRQ0-IRQ= 15. - @param[out] ProtectedEdgeLevel 32-bit mode edge/level mask for IRQ0-IR= Q15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while reading the 8259 PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetMask ( - IN EFI_LEGACY_8259_PROTOCOL *This, - OUT UINT16 *LegacyMask OPTIONAL, - OUT UINT16 *LegacyEdgeLevel OPTIONAL, - OUT UINT16 *ProtectedMask OPTIONAL, - OUT UINT16 *ProtectedEdgeLevel OPTIONAL - ) -{ - if (LegacyMask !=3D NULL) { - *LegacyMask =3D mLegacyModeMask; - } - - if (LegacyEdgeLevel !=3D NULL) { - *LegacyEdgeLevel =3D mLegacyModeEdgeLevel; - } - - if (ProtectedMask !=3D NULL) { - *ProtectedMask =3D mProtectedModeMask; - } - - if (ProtectedEdgeLevel !=3D NULL) { - *ProtectedEdgeLevel =3D mProtectedModeEdgeLevel; - } - - return EFI_SUCCESS; -} - -/** - Sets the current 16-bit real mode and 32-bit protected-mode IRQ masks. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL i= nstance. - @param[in] LegacyMask 16-bit mode interrupt mask for IRQ0-IRQ1= 5. - @param[in] LegacyEdgeLevel 16-bit mode edge/level mask for IRQ-IRQ1= 5. - @param[in] ProtectedMask 32-bit mode interrupt mask for IRQ0-IRQ1= 5. - @param[in] ProtectedEdgeLevel 32-bit mode edge/level mask for IRQ0-IRQ= 15. - - @retval EFI_SUCCESS The 8259 PIC was programmed successfully. - @retval EFI_DEVICE_ERROR There was an error while writing the 8259 PIC. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetMask ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN UINT16 *LegacyMask OPTIONAL, - IN UINT16 *LegacyEdgeLevel OPTIONAL, - IN UINT16 *ProtectedMask OPTIONAL, - IN UINT16 *ProtectedEdgeLevel OPTIONAL - ) -{ - if (LegacyMask !=3D NULL) { - mLegacyModeMask =3D *LegacyMask; - } - - if (LegacyEdgeLevel !=3D NULL) { - mLegacyModeEdgeLevel =3D *LegacyEdgeLevel; - } - - if (ProtectedMask !=3D NULL) { - mProtectedModeMask =3D *ProtectedMask; - } - - if (ProtectedEdgeLevel !=3D NULL) { - mProtectedModeEdgeLevel =3D *ProtectedEdgeLevel; - } - - return EFI_SUCCESS; -} - -/** - Sets the mode of the PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Mode 16-bit real or 32-bit protected mode. - @param[in] Mask The value with which to set the interrupt mask. - @param[in] EdgeLevel The value with which to set the edge/level mask. - - @retval EFI_SUCCESS The mode was set successfully. - @retval EFI_INVALID_PARAMETER The mode was not set. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259SetMode ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_MODE Mode, - IN UINT16 *Mask OPTIONAL, - IN UINT16 *EdgeLevel OPTIONAL - ) -{ - if (Mode =3D=3D mMode) { - return EFI_SUCCESS; - } - - if (Mode =3D=3D Efi8259LegacyMode) { - // - // In Efi8259ProtectedMode, mask and edge/level trigger registers shou= ld - // be changed through this protocol, so we can track them in the - // corresponding module variables. - // - Interrupt8259ReadMask (&mProtectedModeMask, &mProtectedModeEdgeLevel); - - if (Mask !=3D NULL) { - // - // Update the Mask for the new mode - // - mLegacyModeMask =3D *Mask; - } - - if (EdgeLevel !=3D NULL) { - // - // Update the Edge/Level triggered mask for the new mode - // - mLegacyModeEdgeLevel =3D *EdgeLevel; - } - - mMode =3D Mode; - - // - // Write new legacy mode mask/trigger level - // - Interrupt8259WriteMask (mLegacyModeMask, mLegacyModeEdgeLevel); - - return EFI_SUCCESS; - } - - if (Mode =3D=3D Efi8259ProtectedMode) { - // - // Save the legacy mode mask/trigger level - // - Interrupt8259ReadMask (&mLegacyModeMask, &mLegacyModeEdgeLevel); - // - // Always force Timer to be enabled after return from 16-bit code. - // This always insures that on next entry, timer is counting. - // - mLegacyModeMask &=3D 0xFFFE; - - if (Mask !=3D NULL) { - // - // Update the Mask for the new mode - // - mProtectedModeMask =3D *Mask; - } - - if (EdgeLevel !=3D NULL) { - // - // Update the Edge/Level triggered mask for the new mode - // - mProtectedModeEdgeLevel =3D *EdgeLevel; - } - - mMode =3D Mode; - - // - // Write new protected mode mask/trigger level - // - Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); - - return EFI_SUCCESS; - } - - return EFI_INVALID_PARAMETER; -} - -/** - Translates the IRQ into a vector. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq IRQ0-IRQ15. - @param[out] Vector The vector that is assigned to the IRQ. - - @retval EFI_SUCCESS The Vector that matches Irq was returned. - @retval EFI_INVALID_PARAMETER Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetVector ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq, - OUT UINT8 *Vector - ) -{ - if ((UINT32)Irq > Efi8259Irq15) { - return EFI_INVALID_PARAMETER; - } - - if (Irq <=3D Efi8259Irq7) { - *Vector =3D (UINT8)(mMasterBase + Irq); - } else { - *Vector =3D (UINT8)(mSlaveBase + (Irq - Efi8259Irq8)); - } - - return EFI_SUCCESS; -} - -/** - Enables the specified IRQ. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL insta= nce. - @param[in] Irq IRQ0-IRQ15. - @param[in] LevelTriggered 0 =3D Edge triggered; 1 =3D Level triggered. - - @retval EFI_SUCCESS The Irq was enabled on the 8259 PIC. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259EnableIrq ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq, - IN BOOLEAN LevelTriggered - ) -{ - if ((UINT32)Irq > Efi8259Irq15) { - return EFI_INVALID_PARAMETER; - } - - mProtectedModeMask =3D (UINT16)(mProtectedModeMask & ~(1 << Irq)); - if (LevelTriggered) { - mProtectedModeEdgeLevel =3D (UINT16)(mProtectedModeEdgeLevel | (1 << I= rq)); - } else { - mProtectedModeEdgeLevel =3D (UINT16)(mProtectedModeEdgeLevel & ~(1 << = Irq)); - } - - Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); - - return EFI_SUCCESS; -} - -/** - Disables the specified IRQ. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq IRQ0-IRQ15. - - @retval EFI_SUCCESS The Irq was disabled on the 8259 PIC. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259DisableIrq ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq - ) -{ - if ((UINT32)Irq > Efi8259Irq15) { - return EFI_INVALID_PARAMETER; - } - - mProtectedModeMask =3D (UINT16)(mProtectedModeMask | (1 << Irq)); - - mProtectedModeEdgeLevel =3D (UINT16)(mProtectedModeEdgeLevel & ~(1 << Ir= q)); - - Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); - - return EFI_SUCCESS; -} - -/** - Reads the PCI configuration space to get the interrupt number that is as= signed to the card. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] PciHandle PCI function for which to return the vector. - @param[out] Vector IRQ number that corresponds to the interrupt lin= e. - - @retval EFI_SUCCESS The interrupt line value was read successfully. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259GetInterruptLine ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT UINT8 *Vector - ) -{ - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 InterruptLine; - EFI_STATUS Status; - - Status =3D gBS->HandleProtocol ( - PciHandle, - &gEfiPciIoProtocolGuid, - (VOID **)&PciIo - ); - if (EFI_ERROR (Status)) { - return EFI_INVALID_PARAMETER; - } - - PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint8, - PCI_INT_LINE_OFFSET, - 1, - &InterruptLine - ); - // - // Interrupt line is same location for standard PCI cards, standard - // bridge and CardBus bridge. - // - *Vector =3D InterruptLine; - - return EFI_SUCCESS; -} - -/** - Issues the End of Interrupt (EOI) commands to PICs. - - @param[in] This Indicates the EFI_LEGACY_8259_PROTOCOL instance. - @param[in] Irq The interrupt for which to issue the EOI command. - - @retval EFI_SUCCESS The EOI command was issued. - @retval EFI_INVALID_PARAMETER The Irq is not valid. - -**/ -EFI_STATUS -EFIAPI -Interrupt8259EndOfInterrupt ( - IN EFI_LEGACY_8259_PROTOCOL *This, - IN EFI_8259_IRQ Irq - ) -{ - if ((UINT32)Irq > Efi8259Irq15) { - return EFI_INVALID_PARAMETER; - } - - if (Irq >=3D Efi8259Irq8) { - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_SLAVE, LEGACY_8259_EOI); - } - - IoWrite8 (LEGACY_8259_CONTROL_REGISTER_MASTER, LEGACY_8259_EOI); - - return EFI_SUCCESS; -} - -/** - Driver Entry point. - - @param[in] ImageHandle ImageHandle of the loaded driver. - @param[in] SystemTable Pointer to the EFI System Table. - - @retval EFI_SUCCESS One or more of the drivers returned a success code. - @retval !EFI_SUCCESS Error installing Legacy 8259 Protocol. - -**/ -EFI_STATUS -EFIAPI -Install8259 ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - EFI_8259_IRQ Irq; - - // - // Initialze mask values from PCDs - // - mLegacyModeMask =3D PcdGet16 (Pcd8259LegacyModeMask); - mLegacyModeEdgeLevel =3D PcdGet16 (Pcd8259LegacyModeEdgeLevel); - - // - // Clear all pending interrupt - // - for (Irq =3D Efi8259Irq0; Irq <=3D Efi8259Irq15; Irq++) { - Interrupt8259EndOfInterrupt (&mInterrupt8259, Irq); - } - - // - // Set the 8259 Master base to 0x68 and the 8259 Slave base to 0x70 - // - Status =3D Interrupt8259SetVectorBase (&mInterrupt8259, PROTECTED_MODE_B= ASE_VECTOR_MASTER, PROTECTED_MODE_BASE_VECTOR_SLAVE); - - // - // Set all 8259 interrupts to edge triggered and disabled - // - Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); - - // - // Install 8259 Protocol onto a new handle - // - Status =3D gBS->InstallProtocolInterface ( - &m8259Handle, - &gEfiLegacy8259ProtocolGuid, - EFI_NATIVE_INTERFACE, - &mInterrupt8259 - ); - return Status; -} -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111105): https://edk2.groups.io/g/devel/message/111105 Mute This Topic: https://groups.io/mt/102518676/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/3901457/1787277/102458076= /xyzzy [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-