From nobody Wed May 15 06:10:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677183830; cv=none; d=zohomail.com; s=zohoarc; b=dFD5ZzisQpQdKHOkMKNzpEQ+eE1yhUEkBgIw6lc2Gg3nk5/QwDtNhZy86a63W9cjC6oegc95ZsRVZvU/q96ty9AyKlR7TdDM1x7/zmQ/N7/RKI9Y4HOFLM7Eumf81B4poBtt8pmif5JksrHwkE7VChVlx5M77Tgc7tXdBTDFXzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677183830; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7DZ4IC21cN4EEqkYPJ+LbANCivKRiX+Zc8yuBjmuGaQ=; b=VLzLlXT6DuRngO1bfcRXLr+p5w6IbhvjOxF5FUMcFv3e8qCgPMudtThzQySN4ioJept+BpeTtA2bO0JvwPrT0L5eFPg4B/gydaTiJjVOnIOhYREruS60MNIJFtB9WxqGQ5xoCzupdXcLw2MDzMe8EpLZCG/Sl09GaLqkh376YqY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677183830405404.943623086167; Thu, 23 Feb 2023 12:23:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVI7e-0005fA-HB; Thu, 23 Feb 2023 15:23:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVI7c-0005dc-Ie; Thu, 23 Feb 2023 15:23:20 -0500 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVI7Z-0002KP-2w; Thu, 23 Feb 2023 15:23:19 -0500 Received: by mail-ed1-x532.google.com with SMTP id x10so45921363edd.13; Thu, 23 Feb 2023 12:23:15 -0800 (PST) Received: from osoxes.fritz.box (pd9ed7433.dip0.t-ipconnect.de. [217.237.116.51]) by smtp.gmail.com with ESMTPSA id jj1-20020a170907984100b008d606b1bbb1sm5200917ejc.9.2023.02.23.12.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Feb 2023 12:23:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7DZ4IC21cN4EEqkYPJ+LbANCivKRiX+Zc8yuBjmuGaQ=; b=DKG9YAuMLc1XScc+0Qw1duvBG4NGDR0w6oljM7W3U0+iaO4wRsLz9mxC5qqX2u7LT/ SlVOJWcpTcDmVZ0A3bpLEkUaWrQAjtenx3sOllfeyqkRZbeN20ZyNXnkhs3CKWVoEm9T FgZbo5dEhtjozBsdIejP3hYVSvkgF+0E1bSmI/9nyiylSBlhRh+aqhw/yroVXLadcWcr MEcXIhb3t+GDI2/DVW0ZNbWWBkas5QwjtRAEL/c5VUUz2HMxo4fflYcYBspyWNH3lLTR YS0SbyqEO8quco/42eO3jTFIw//v6aSN/tcziUA8ENmQzTcABe095adCSVySoJwLut0Q uWpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7DZ4IC21cN4EEqkYPJ+LbANCivKRiX+Zc8yuBjmuGaQ=; b=VfUOiPwF2aGP1z+kPsjdLf34Id95m7CsuZK1UG2Mj7VdjqkvF/k9dPhmiWLx6TBk9D PkVkVKLoTkVuBbzd214NbqbvZoCKN67a9j63nj0Py1aVhffjf6OvPBoPJhXr2HcHvnJp jKqkD+gmWTZxgX/QRZ4J9hrg12QHp6P0MUxEuX9Segriw/cVGEMgzU2fhOXVnC1wMWUH JBDCIeQFIpqexjHh6e1yl1CJ7LA0Ypr8IDnO/nKUVBMoxfFlZhPrkyZykL3BjRKfelrG +YhkAFP+ZDO5sEwo5uKfdqAX7sg/P1yn9KaRkW4RAOF77EmDbNq5EuVdoPiQCPz5xgjM SN/g== X-Gm-Message-State: AO0yUKUBvnn5ZqBjxi1I/Frp8OeCkBFCOc9fxyIgZTyLJQ8GOBIa23O0 ddTCwezdZLj5lhA5f2fVgwZtTK8oziQ= X-Google-Smtp-Source: AK7set+o7CGyG3Aky511aZFZiHnticak1STivdnrr2djB5eJRiUru5zH4Z0u2gUWzIQja0yTs3ZDJw== X-Received: by 2002:a17:906:230b:b0:878:625c:c8ff with SMTP id l11-20020a170906230b00b00878625cc8ffmr20681699eja.54.1677183793673; Thu, 23 Feb 2023 12:23:13 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen , qemu-ppc@nongnu.org, Gerd Hoffmann , Jiaxun Yang , BALATON Zoltan , Bernhard Beschow Subject: [PATCH 1/5] hw/ppc/pegasos2: Initialize VT8231 PCI IRQ router Date: Thu, 23 Feb 2023 21:20:49 +0100 Message-Id: <20230223202053.117050-2-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223202053.117050-1-shentey@gmail.com> References: <20230223202053.117050-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: pass client-ip=2a00:1450:4864:20::532; envelope-from=shentey@gmail.com; helo=mail-ed1-x532.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677183832066100001 Content-Type: text/plain; charset="utf-8" The firmware of the real PegasosII board routes all PIRQx to IRQ9, so do the same in QEMU. The PCI_INTERRUPT_LINE registers of the respective internal PCI functions are already initialized with IRQ9 which are currently used for routing. Note that the PCI interrupt router isn't implemented yet in the VIA south bridges. This change has therefore no effect until this happens. Inspired-by: ("hw/ppc/pegasos2: Fix PCI interrupt routing") Signed-off-by: Bernhard Beschow --- hw/ppc/pegasos2.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c index a9563f4fb2..41688699eb 100644 --- a/hw/ppc/pegasos2.c +++ b/hw/ppc/pegasos2.c @@ -268,6 +268,12 @@ static void pegasos2_machine_reset(MachineState *machi= ne, ShutdownCause reason) PCI_INTERRUPT_LINE, 2, 0x9); pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) | 0x50, 1, 0x2); + pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) | + 0x55, 1, 0x90); + pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) | + 0x56, 1, 0x99); + pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) | + 0x57, 1, 0x90); =20 pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 1) << 8) | PCI_INTERRUPT_LINE, 2, 0x109); --=20 2.39.2 From nobody Wed May 15 06:10:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677183872; cv=none; d=zohomail.com; s=zohoarc; b=g+SFso4C75IdMnbBOAfeVUnOk3d221EMdWm2RCT9brH7rdh3Cj5nCZ2rsdew5niMfF1glv2qKkRmaCpxM/mUAKig6zjFWSJEH9MwWsVh6FfugbujidCuWTg9YaFFIyWf3eW7XVPgGn3iRBVJ9frbc0jG+lFRTfzA0BctmYYoxPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677183872; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=URC4QULn1s6Vm1JS2+nnjxOu3AuTbC5LZ+8A63obzbk=; b=ZJbEjy/GCvwmdbZyo0ZmuMb56ZEI43w54rKXaaAF4GKbcrKJabRwXXJbZ2pDyYCFNNOtLfZckjoTX/Y/c9zRVuckpesWKJafAdvpsvaDNruMnxxYkWeFjzf75tbM2lEfUjJapACU7WX44v1tY5uCCYkS6gqicwHQ9p64wW4w3sA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677183872190397.73210294945966; Thu, 23 Feb 2023 12:24:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVI7e-0005es-CT; Thu, 23 Feb 2023 15:23:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVI7c-0005dd-JC; Thu, 23 Feb 2023 15:23:20 -0500 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVI7Z-0002Nv-35; Thu, 23 Feb 2023 15:23:19 -0500 Received: by mail-ed1-x52e.google.com with SMTP id s26so46695297edw.11; Thu, 23 Feb 2023 12:23:15 -0800 (PST) Received: from osoxes.fritz.box (pd9ed7433.dip0.t-ipconnect.de. [217.237.116.51]) by smtp.gmail.com with ESMTPSA id jj1-20020a170907984100b008d606b1bbb1sm5200917ejc.9.2023.02.23.12.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Feb 2023 12:23:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=URC4QULn1s6Vm1JS2+nnjxOu3AuTbC5LZ+8A63obzbk=; b=Ud2cFpNPmcI0ZMmV13Y2JgvJBl5uo+ugE6ro05qlmV1OtCAilKNBEoQSYlJGJ3BZMl uxBmCEnppdaFo1RfeFbAG8XmC05Muy1dXYYugVXuN8WXKHj07g8qGJrsnSPzBXzVgLEn 9rLtliqnnFBKo60jn4Ggfp55NmKVXhXasonokNoctq5iLwuKFGoQDngDLIGQZM/F/LPo JPZkovIDprU+L6S3BMWrx57/UlPQHyijaZnp43Kc2dI+5naaVZsngZrhDV6oGgqbHiEk I8dCCf9kL7RSOA3krUFY5ScpedZn2T+oKNyCfslOgmm6XBNLAJHYoB0etGXcKHHEixlq LBEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=URC4QULn1s6Vm1JS2+nnjxOu3AuTbC5LZ+8A63obzbk=; b=J6C6fYhcJ5dngFULYJkT5rT7Pi1mKTNJGDa7s0rwLUW5hOWENLVLGFiepFZtF4GBt/ gK2OOJvZAjBvsup7Hj7es6TtSU9ANubS9CQVHv8T7U/Qkjks/v7HSOyKGvieoZfEm0dW o8oyNfsdPzDxbXZkDrZlrNnjuc9AlfI7Sm/1dnbFb+c2kr7zMtEFne0ZN0mN+dcSkwQb BX8C36DCbgpth2akhTquXq8O/HfHk4YidBtGmcJDTDQXKbuKziVIzS/6rrT/S1q+yWrP B6hmk07ygrGwzI2Ajhrk4svomHjV0Uh6Mos51QkX/wTrGotXksDT86/onX0pfM868LGx U9jw== X-Gm-Message-State: AO0yUKV4Y14k59NtcmpJ8dZ81rLrSWADER81U/Cc19uIzbAAo2vwoF3L fOG4P1ZF8MC4JddLEz8O552swSBAlpY= X-Google-Smtp-Source: AK7set+V6EmoQRLSALSepupWkjPI/pJ9jCrRb64D3/rEeC2rtzhOBeaKgXbrAEl/T1XFZbLvJ2kvpQ== X-Received: by 2002:a17:907:7b97:b0:8db:4c66:59cf with SMTP id ne23-20020a1709077b9700b008db4c6659cfmr16788511ejc.42.1677183794547; Thu, 23 Feb 2023 12:23:14 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen , qemu-ppc@nongnu.org, Gerd Hoffmann , Jiaxun Yang , BALATON Zoltan , Bernhard Beschow Subject: [PATCH 2/5] hw/isa/vt82c686: Implement PCI IRQ routing Date: Thu, 23 Feb 2023 21:20:50 +0100 Message-Id: <20230223202053.117050-3-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223202053.117050-1-shentey@gmail.com> References: <20230223202053.117050-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: pass client-ip=2a00:1450:4864:20::52e; envelope-from=shentey@gmail.com; helo=mail-ed1-x52e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677183874081100005 Content-Type: text/plain; charset="utf-8" The real VIA south bridges implement a PCI IRQ router which is configured by the BIOS or the OS. In order to respect these configurations, QEMU needs to implement it as well. Note: The implementation was taken from piix4_set_irq() in hw/isa/piix4. Signed-off-by: Bernhard Beschow --- hw/isa/vt82c686.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 3f9bd0c04d..f24e387d63 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -604,6 +604,48 @@ static void via_isa_request_i8259_irq(void *opaque, in= t irq, int level) qemu_set_irq(s->cpu_intr, level); } =20 +static int via_isa_get_pci_irq(const ViaISAState *s, int irq_num) +{ + switch (irq_num) { + case 0: + return s->dev.config[0x55] >> 4; + + case 1: + return s->dev.config[0x56] & 0xf; + + case 2: + return s->dev.config[0x56] >> 4; + + case 3: + return s->dev.config[0x57] >> 4; + } + + return 0; +} + +static void via_isa_set_pci_irq(void *opaque, int irq_num, int level) +{ + ViaISAState *s =3D opaque; + PCIBus *bus =3D pci_get_bus(&s->dev); + int pic_irq; + + /* now we change the pic irq level according to the via irq mappings */ + /* XXX: optimize */ + pic_irq =3D via_isa_get_pci_irq(s, irq_num); + if (pic_irq < ISA_NUM_IRQS) { + int i, pic_level; + + /* The pic level is the logical OR of all the PCI irqs mapped to i= t. */ + pic_level =3D 0; + for (i =3D 0; i < PCI_NUM_PINS; i++) { + if (pic_irq =3D=3D via_isa_get_pci_irq(s, i)) { + pic_level |=3D pci_bus_get_irq_level(bus, i); + } + } + qemu_set_irq(s->isa_irqs[pic_irq], pic_level); + } +} + static void via_isa_realize(PCIDevice *d, Error **errp) { ViaISAState *s =3D VIA_ISA(d); @@ -676,6 +718,8 @@ static void via_isa_realize(PCIDevice *d, Error **errp) if (!qdev_realize(DEVICE(&s->mc97), BUS(pci_bus), errp)) { return; } + + pci_bus_irqs(pci_bus, via_isa_set_pci_irq, s, PCI_NUM_PINS); } =20 /* TYPE_VT82C686B_ISA */ --=20 2.39.2 From nobody Wed May 15 06:10:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677183861; cv=none; d=zohomail.com; s=zohoarc; b=AAsme4Duz6EyAbfv0NC0hPJkrz+0lA+8YJRpavw4eMI4G1B6ccD8Q1V5gQGtB4MOH1xuVevIMzVWFkH3ZdAoXKXF65YgDSunj7aOfgjFTB/DtRmudw2a1Yr4whQKFd8wvCqU4KlqLc1idKnKhmhr/rLOHURD5BMbEFM++dXkFJo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677183861; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Xl/DOZlATxgugred1fzKweHRfgNnXhLpLoX6XzlsSKs=; b=gdC8rPbFI9+TxudHjhPrhfSoRZIPk+YNeH2a43Qh4ihOkpmcqTnwbP48aHrWIa5/klOsq9Fo3YPTlT0uuQqWgqS9k8FsaidY1ZL5DiP/oT8woQXkmB5e6gm9pcfF6FSv9i66gNBwj9MkyAtbgspA6uWLfwDWaXtF2Tjfdke1CSc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677183861233828.7343565960676; Thu, 23 Feb 2023 12:24:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVI7f-0005gK-7o; Thu, 23 Feb 2023 15:23:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVI7d-0005dx-0l; Thu, 23 Feb 2023 15:23:21 -0500 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVI7a-0002Qz-Th; Thu, 23 Feb 2023 15:23:20 -0500 Received: by mail-ed1-x52c.google.com with SMTP id ec43so46189968edb.8; Thu, 23 Feb 2023 12:23:16 -0800 (PST) Received: from osoxes.fritz.box (pd9ed7433.dip0.t-ipconnect.de. [217.237.116.51]) by smtp.gmail.com with ESMTPSA id jj1-20020a170907984100b008d606b1bbb1sm5200917ejc.9.2023.02.23.12.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Feb 2023 12:23:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xl/DOZlATxgugred1fzKweHRfgNnXhLpLoX6XzlsSKs=; b=EwGyEtpQcr22iKMwSRSZG9l8gby+lVOVC1kWg/U6t6mlf9fY6qdLRfzzaM/98oJF87 cAi+xYVEx0MrdFlHcmJOgo9c+z/WXVdK9/0Ph2/GGb4WULqQfxJ13kGmgJC94QzOF2Qn SzeEYR1sTRxf10As+uh1EYCkxkYXN2rXVF/IoSPEy/Y0YOqwKcD34JScotwByuLi4THx 4NMSjBaFlAzcUgW+NNw6Nycv6mD6aubWWjYIRXPgsBr7PCEnAqsaSWpJsqPl/qg73XEl fwlJT7WljUh1gL+n9cywCiFAJIcsHKFvBNIGvZiDcMbznYJB7q/fxTLlGCTF+q51+04W CsIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xl/DOZlATxgugred1fzKweHRfgNnXhLpLoX6XzlsSKs=; b=dKoFTl7Me44Vp80Q0Gsky7du6Yc1LngSbf3hfpGyCwnjaOoj83P2Up3jdmrwNkbHWe e8Qum0/BLDF3FTznyOXrDFDb0f6YTHzRLRNDQuk5uLH9pEnT97E8zxd7Q68eVTYa1ldF 1XgBBVMr2sCBBJhPgI4TyTH81r5UODM7kn4Kue1O0UxUZrs6lenIiiLHeuLH7Rws5yFY uAFoJg+/M7w9vMjF2gfJ6HemrgVG6aIuWOhtBviSkZEP8Av3zs+vfcA8rVc338RP49yx 0PwHmTz5nmLqiNm9eYlIZdLljG6oaYIAWH4t4hQUrNQIgVh2PMPt3YDHznHFYxOt7QH3 l5+A== X-Gm-Message-State: AO0yUKWKL0sY4SfGkfs/J5qAVlTuNIv8F+HbHse+VbfSSIQu0zfq/GRg zOhFwjBlKFcNjcMkiFUP3pcjBLACZuw= X-Google-Smtp-Source: AK7set/axJJhhqaHR8D4J8kKy3qGwLFgA8T3J0uMjYkDADEZi3Sr2EGnO763CxAFTAEXWwkevTlYOA== X-Received: by 2002:a17:906:16d9:b0:886:221b:44e5 with SMTP id t25-20020a17090616d900b00886221b44e5mr19882768ejd.62.1677183795403; Thu, 23 Feb 2023 12:23:15 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen , qemu-ppc@nongnu.org, Gerd Hoffmann , Jiaxun Yang , BALATON Zoltan , Bernhard Beschow Subject: [PATCH 3/5] hw/usb/vt82c686-uhci-pci: Use PCI IRQ routing Date: Thu, 23 Feb 2023 21:20:51 +0100 Message-Id: <20230223202053.117050-4-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223202053.117050-1-shentey@gmail.com> References: <20230223202053.117050-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: pass client-ip=2a00:1450:4864:20::52c; envelope-from=shentey@gmail.com; helo=mail-ed1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677183862002100001 Content-Type: text/plain; charset="utf-8" According to the PCI specification, PCI_INTERRUPT_LINE shall have no effect on hardware operations. Now that the VIA south bridges implement the internal PCI interrupt router let's be more conformant to the PCI specification. Signed-off-by: Bernhard Beschow Reviewed-by: Mark Cave-Ayland --- hw/usb/vt82c686-uhci-pci.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/hw/usb/vt82c686-uhci-pci.c b/hw/usb/vt82c686-uhci-pci.c index 46a901f56f..b4884c9011 100644 --- a/hw/usb/vt82c686-uhci-pci.c +++ b/hw/usb/vt82c686-uhci-pci.c @@ -1,17 +1,7 @@ #include "qemu/osdep.h" -#include "hw/irq.h" #include "hw/isa/vt82c686.h" #include "hcd-uhci.h" =20 -static void uhci_isa_set_irq(void *opaque, int irq_num, int level) -{ - UHCIState *s =3D opaque; - uint8_t irq =3D pci_get_byte(s->dev.config + PCI_INTERRUPT_LINE); - if (irq > 0 && irq < 15) { - via_isa_set_irq(pci_get_function_0(&s->dev), irq, level); - } -} - static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Error **errp) { UHCIState *s =3D UHCI(dev); @@ -25,8 +15,6 @@ static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Er= ror **errp) pci_set_long(pci_conf + 0xc0, 0x00002000); =20 usb_uhci_common_realize(dev, errp); - object_unref(s->irq); - s->irq =3D qemu_allocate_irq(uhci_isa_set_irq, s, 0); } =20 static UHCIInfo uhci_info[] =3D { --=20 2.39.2 From nobody Wed May 15 06:10:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677183840; cv=none; d=zohomail.com; s=zohoarc; b=b5B7tr0GUI98EPPkaOZ4KeWZ6cR4dSPqC40zajfSdBReyqEOTbKV82gcMzvp1QfdrAzvmE4q8sb0TgOTGfXd+cvdCDfPcXMwFmWQoB1T03g798v2oRkIkHzM25F7oqRD50SPHbUH7E1Obk788/PCABMcpkYme8murGEvDwQKaVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677183840; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MS0ZGLde6R4F7SLXyReoLgCFKJGSfDk8cd4H9K+qMro=; b=L9Bv1UqX0k/YmOqOvpJk2M6gkIJ10uqFsqJ/ORqXPxHuGb0J2OQ6yV477YEGH+40raV2x7ZNBDp9JXxqyMdM61x1vpbly7XPvLA7h/O82rOE879JzzPfWBRQRz9JR2rYeawDxgardMWMjxQ3nKt4Upaum72ypmPhW9Pv6V5iAJ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677183840803757.4635369923612; Thu, 23 Feb 2023 12:24:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVI7f-0005gv-SZ; Thu, 23 Feb 2023 15:23:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVI7d-0005eH-F1; Thu, 23 Feb 2023 15:23:21 -0500 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVI7a-0002SD-Vp; Thu, 23 Feb 2023 15:23:21 -0500 Received: by mail-ed1-x533.google.com with SMTP id da10so47967013edb.3; Thu, 23 Feb 2023 12:23:17 -0800 (PST) Received: from osoxes.fritz.box (pd9ed7433.dip0.t-ipconnect.de. [217.237.116.51]) by smtp.gmail.com with ESMTPSA id jj1-20020a170907984100b008d606b1bbb1sm5200917ejc.9.2023.02.23.12.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Feb 2023 12:23:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MS0ZGLde6R4F7SLXyReoLgCFKJGSfDk8cd4H9K+qMro=; b=LCkHSslmiZiqhLHkHUDka301inVbzBmYw5kDtRRK7TydjBijMxZgVF8EQ4TG41rvQG o7BzI0iDh0wQFpFG3WR2V9YSWZbBn6yxjDMBG90ok+o3DRSFJ1cWKXnXyt8c3L36oFCn Q6QH1wNJZWMpuv/ERR5GlOe61YIbwicXDtAJl49CiIV8rOpJUqwBLDdZUI0gmMqSkgbt FRgtEiZ9VZC1UTSF5Y8N8ggmTBKw/xUksMUvgDtaPtJ0HjOMDDn2pFHJSzJ0Oxv+ZaH8 SoeoX0QODTnemUikN7EQ6EiriyZdCMvAR8bOaYsJdkUUWCigP1jswtijkMMByN1yS8eS 6Hmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MS0ZGLde6R4F7SLXyReoLgCFKJGSfDk8cd4H9K+qMro=; b=GEUrmBlPmYpCw6D+he+K5d5gNgxIZlkd4a4kYfCiE7RzyXi4tdairrixxLB5EIJFm/ KXQkeI0erK4Bd+QF2aGIAifsaXEUNN0CpXLA1TOR5XpWASiG51xPH7c5pjKD3CccOk7Y vOGU2VgbGosyG2AwzFme/fQmvfPawRjKErDXlM6gJpxKYDRN6DevbA+7DiAbtVmiGThN QL7tfkC4BbezTNR4VEUIT5OSS5/erLC9AmGimhKVX988ohrQhEB3kY7RzC4IvvpFwRhB Fkc7iLY3ICSHULeN+T6MP04yMzaP5JIJQWNqwQwWJcECg3pXwlJbSV1G/ECohc2lFw6N unjQ== X-Gm-Message-State: AO0yUKV9+THIpImyvzEWjd94hRyj5NjjVZhTkptWOU1zisJk5SOqRdFg U9jOWEqTfXes7TEZmA2KbmSx2QfPUCA= X-Google-Smtp-Source: AK7set91UsZYu1YBE485tLG6xfBqmkLxQv+oiWka+BSD1bN87HZ5HGHiuhPOJVo9IuBVkTDKF0zLsA== X-Received: by 2002:a17:906:8e8f:b0:82e:a57b:cc9b with SMTP id ru15-20020a1709068e8f00b0082ea57bcc9bmr24296892ejc.24.1677183796217; Thu, 23 Feb 2023 12:23:16 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen , qemu-ppc@nongnu.org, Gerd Hoffmann , Jiaxun Yang , BALATON Zoltan Subject: [PATCH 4/5] hw/audio/ac97: Split off some definitions to a header Date: Thu, 23 Feb 2023 21:20:52 +0100 Message-Id: <20230223202053.117050-5-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223202053.117050-1-shentey@gmail.com> References: <20230223202053.117050-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: pass client-ip=2a00:1450:4864:20::533; envelope-from=shentey@gmail.com; helo=mail-ed1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677183842033100001 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan These can be shared with other AC97 implementations. Signed-off-by: BALATON Zoltan --- hw/audio/ac97.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ hw/audio/ac97.c | 43 +------------------------------- 2 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 hw/audio/ac97.h diff --git a/hw/audio/ac97.h b/hw/audio/ac97.h new file mode 100644 index 0000000000..0358b56ff4 --- /dev/null +++ b/hw/audio/ac97.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2006 InnoTek Systemberatung GmbH + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, + * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE + * distribution. VirtualBox OSE is distributed in the hope that it will + * be useful, but WITHOUT ANY WARRANTY of any kind. + * + * If you received this file as part of a commercial VirtualBox + * distribution, then only the terms of your commercial VirtualBox + * license agreement apply instead of the previous paragraph. + * + * Contributions after 2012-01-13 are licensed under the terms of the + * GNU GPL, version 2 or (at your option) any later version. + */ + +#ifndef AC97_H +#define AC97_H + +enum { + AC97_Reset =3D 0x00, + AC97_Master_Volume_Mute =3D 0x02, + AC97_Headphone_Volume_Mute =3D 0x04, + AC97_Master_Volume_Mono_Mute =3D 0x06, + AC97_Master_Tone_RL =3D 0x08, + AC97_PC_BEEP_Volume_Mute =3D 0x0A, + AC97_Phone_Volume_Mute =3D 0x0C, + AC97_Mic_Volume_Mute =3D 0x0E, + AC97_Line_In_Volume_Mute =3D 0x10, + AC97_CD_Volume_Mute =3D 0x12, + AC97_Video_Volume_Mute =3D 0x14, + AC97_Aux_Volume_Mute =3D 0x16, + AC97_PCM_Out_Volume_Mute =3D 0x18, + AC97_Record_Select =3D 0x1A, + AC97_Record_Gain_Mute =3D 0x1C, + AC97_Record_Gain_Mic_Mute =3D 0x1E, + AC97_General_Purpose =3D 0x20, + AC97_3D_Control =3D 0x22, + AC97_AC_97_RESERVED =3D 0x24, + AC97_Powerdown_Ctrl_Stat =3D 0x26, + AC97_Extended_Audio_ID =3D 0x28, + AC97_Extended_Audio_Ctrl_Stat =3D 0x2A, + AC97_PCM_Front_DAC_Rate =3D 0x2C, + AC97_PCM_Surround_DAC_Rate =3D 0x2E, + AC97_PCM_LFE_DAC_Rate =3D 0x30, + AC97_PCM_LR_ADC_Rate =3D 0x32, + AC97_MIC_ADC_Rate =3D 0x34, + AC97_6Ch_Vol_C_LFE_Mute =3D 0x36, + AC97_6Ch_Vol_L_R_Surround_Mute =3D 0x38, + AC97_Vendor_Reserved =3D 0x58, + AC97_Sigmatel_Analog =3D 0x6c, /* We emulate a Sigmatel code= c */ + AC97_Sigmatel_Dac2Invert =3D 0x6e, /* We emulate a Sigmatel code= c */ + AC97_Vendor_ID1 =3D 0x7c, + AC97_Vendor_ID2 =3D 0x7e +}; + +#define EACS_VRA 1 +#define EACS_VRM 8 + +#define MUTE_SHIFT 15 + +#endif /* AC97_H */ diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c index 364cdfa733..b3fb10284c 100644 --- a/hw/audio/ac97.c +++ b/hw/audio/ac97.c @@ -26,43 +26,7 @@ #include "qemu/module.h" #include "sysemu/dma.h" #include "qom/object.h" - -enum { - AC97_Reset =3D 0x00, - AC97_Master_Volume_Mute =3D 0x02, - AC97_Headphone_Volume_Mute =3D 0x04, - AC97_Master_Volume_Mono_Mute =3D 0x06, - AC97_Master_Tone_RL =3D 0x08, - AC97_PC_BEEP_Volume_Mute =3D 0x0A, - AC97_Phone_Volume_Mute =3D 0x0C, - AC97_Mic_Volume_Mute =3D 0x0E, - AC97_Line_In_Volume_Mute =3D 0x10, - AC97_CD_Volume_Mute =3D 0x12, - AC97_Video_Volume_Mute =3D 0x14, - AC97_Aux_Volume_Mute =3D 0x16, - AC97_PCM_Out_Volume_Mute =3D 0x18, - AC97_Record_Select =3D 0x1A, - AC97_Record_Gain_Mute =3D 0x1C, - AC97_Record_Gain_Mic_Mute =3D 0x1E, - AC97_General_Purpose =3D 0x20, - AC97_3D_Control =3D 0x22, - AC97_AC_97_RESERVED =3D 0x24, - AC97_Powerdown_Ctrl_Stat =3D 0x26, - AC97_Extended_Audio_ID =3D 0x28, - AC97_Extended_Audio_Ctrl_Stat =3D 0x2A, - AC97_PCM_Front_DAC_Rate =3D 0x2C, - AC97_PCM_Surround_DAC_Rate =3D 0x2E, - AC97_PCM_LFE_DAC_Rate =3D 0x30, - AC97_PCM_LR_ADC_Rate =3D 0x32, - AC97_MIC_ADC_Rate =3D 0x34, - AC97_6Ch_Vol_C_LFE_Mute =3D 0x36, - AC97_6Ch_Vol_L_R_Surround_Mute =3D 0x38, - AC97_Vendor_Reserved =3D 0x58, - AC97_Sigmatel_Analog =3D 0x6c, /* We emulate a Sigmatel code= c */ - AC97_Sigmatel_Dac2Invert =3D 0x6e, /* We emulate a Sigmatel code= c */ - AC97_Vendor_ID1 =3D 0x7c, - AC97_Vendor_ID2 =3D 0x7e -}; +#include "ac97.h" =20 #define SOFT_VOLUME #define SR_FIFOE 16 /* rwc */ @@ -121,11 +85,6 @@ enum { #define BD_IOC (1 << 31) #define BD_BUP (1 << 30) =20 -#define EACS_VRA 1 -#define EACS_VRM 8 - -#define MUTE_SHIFT 15 - #define TYPE_AC97 "AC97" OBJECT_DECLARE_SIMPLE_TYPE(AC97LinkState, AC97) =20 --=20 2.39.2 From nobody Wed May 15 06:10:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677183870; cv=none; d=zohomail.com; s=zohoarc; b=WqWrY1GV+ELNNmCN6Ji4p8KeWCpgxBdl4ObJa7wW58BHH6V3X8TE0VIhgKzHBoxxTnzMZJU2e1STKoN8hgGKa0ErHDhm/uyuqZKLPC+rpOENTV3O7W4Q2pAsn/E/E/N43pAV2On2m6Mxz5K8Z54O48nOZc+nmREEO641ZaQc9qg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677183870; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fAVwXgJ9hSHYQmJVRJI0ThzOOYexxcrFKnZtRe59y4E=; b=U94IRzQNdi+DgfrbCJ5qerDQjOMTbr+AQh8bNXAJnvCF8L5KMuzS6bu/Ux4SXj68d+bQzq0crFAqg9WcyLb6Y1JMWItE+ICXGDGirtcgVB5LPwIBed0rG/4XhyuvAp8WHulR0u1MErG0pDuDmHotmKqDtQQeXHQYMZUHOWDMMGM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677183870616887.3623608603028; Thu, 23 Feb 2023 12:24:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVI7g-0005h4-G0; Thu, 23 Feb 2023 15:23:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVI7e-0005fT-MO; Thu, 23 Feb 2023 15:23:22 -0500 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVI7b-0002WA-7x; Thu, 23 Feb 2023 15:23:22 -0500 Received: by mail-ed1-x535.google.com with SMTP id cy6so41235633edb.5; Thu, 23 Feb 2023 12:23:18 -0800 (PST) Received: from osoxes.fritz.box (pd9ed7433.dip0.t-ipconnect.de. [217.237.116.51]) by smtp.gmail.com with ESMTPSA id jj1-20020a170907984100b008d606b1bbb1sm5200917ejc.9.2023.02.23.12.23.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Feb 2023 12:23:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fAVwXgJ9hSHYQmJVRJI0ThzOOYexxcrFKnZtRe59y4E=; b=Xq1k57cZ8BugOxPGWuP6J2gAgtGnAnrrjc7nuHF2GzC7bHqlThPI8A+1ODSCcY+V0j 4xuF9oqoH/exkioqUYX7Ockmyz9N+c5wZd3OKLOXDLVnwOAu+fgelSFLuIAT+J7J1mdl CHkhRQGHdPUkLDTrVpa/GVOhaVx6PptXL5FmQn/sIQGEbBPWuVBnySUZFLeOV2PjLp3t xd0wHOPEc/K7LBXUbEsBoFXRa2PeIyDhxfd/xlvexHYsakdwWWgM5znwynpuMM/7Cq3F q5UG8Lf5trbsBP2NYK9/PAOrQ7kTyagPV/4tR2Oe3sRRmXYmiMwuADZuyGnF35zAv3yN IwIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fAVwXgJ9hSHYQmJVRJI0ThzOOYexxcrFKnZtRe59y4E=; b=h8PO0liIp60ORYYHohJ95UkQPtVZ+N4yB5qKO6Y+0UevtmrHFLfPY5gMUDCPWE9gPU dj5ljS+OenV8z7i1eeWA7arSmg2hNGwhQggK9glzSXTMv+LdyV2Da5mxFfxUVp0H78BC A5R6XQn+DUgnCJkKvMyW1+zyzSrJTIJmaN3ZFnV5gArvDUD+Hlph3VLmJOhNrIPe+2YN /GgY2Gf5AxL5fh5b+t6wuKMaQsrIHMKjlcIxT0UvvUhxOJkAlkoMbONV+ZgzEaMS9phB 9MoDiVU9X8Kx4WmOu92rZKuSuayOguYN3Zz4/+ZpwboTAx9+3a/KzVjI8Wd+3zOFf0Ms OnDw== X-Gm-Message-State: AO0yUKXmwC7TqcbNNsb9B5zIuZlbj+h1zLZer6RQX4w52KA+xsHJ6uQu UTatC5q4aVZHumk2QHtUceiSb06BRdE= X-Google-Smtp-Source: AK7set9YAnqyLt/yAdOcRTeeOVKJQhMaI/coqh6C1IgtxHxWQUbt4oKRG5fL03RvyKwcbrWjL8YM0A== X-Received: by 2002:a17:906:7e06:b0:7c4:fa17:7203 with SMTP id e6-20020a1709067e0600b007c4fa177203mr22010452ejr.63.1677183797081; Thu, 23 Feb 2023 12:23:17 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen , qemu-ppc@nongnu.org, Gerd Hoffmann , Jiaxun Yang , BALATON Zoltan Subject: [PATCH 5/5] hw/audio/via-ac97: Basic implementation of audio playback Date: Thu, 23 Feb 2023 21:20:53 +0100 Message-Id: <20230223202053.117050-6-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230223202053.117050-1-shentey@gmail.com> References: <20230223202053.117050-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: pass client-ip=2a00:1450:4864:20::535; envelope-from=shentey@gmail.com; helo=mail-ed1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677183872029100001 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan This adds basic implementation of the AC'97 sound part used in VIA south bridge chips. Not all features of the device is emulated, only one playback channel is supported but this is enough to get sound output from some guests running on machines using this device such as pegasos2. Signed-off-by: BALATON Zoltan --- include/hw/isa/vt82c686.h | 25 +++ hw/audio/via-ac97.c | 436 +++++++++++++++++++++++++++++++++++++- hw/isa/vt82c686.c | 2 +- hw/audio/trace-events | 6 + 4 files changed, 464 insertions(+), 5 deletions(-) diff --git a/include/hw/isa/vt82c686.h b/include/hw/isa/vt82c686.h index e273cd38dc..da1722daf2 100644 --- a/include/hw/isa/vt82c686.h +++ b/include/hw/isa/vt82c686.h @@ -1,6 +1,8 @@ #ifndef HW_VT82C686_H #define HW_VT82C686_H =20 +#include "hw/pci/pci_device.h" +#include "audio/audio.h" =20 #define TYPE_VT82C686B_ISA "vt82c686b-isa" #define TYPE_VT82C686B_USB_UHCI "vt82c686b-usb-uhci" @@ -9,6 +11,29 @@ #define TYPE_VIA_IDE "via-ide" #define TYPE_VIA_MC97 "via-mc97" =20 +typedef struct { + uint8_t stat; + uint8_t type; + uint32_t base; + uint32_t curr; + uint32_t addr; + uint32_t clen; +} ViaAC97SGDChannel; + +OBJECT_DECLARE_SIMPLE_TYPE(ViaAC97State, VIA_AC97); + +struct ViaAC97State { + PCIDevice dev; + QEMUSoundCard card; + MemoryRegion sgd; + MemoryRegion fm; + MemoryRegion midi; + SWVoiceOut *vo; + ViaAC97SGDChannel aur; + uint16_t codec_regs[128]; + uint32_t ac97_cmd; +}; + void via_isa_set_irq(PCIDevice *d, int n, int level); =20 #endif diff --git a/hw/audio/via-ac97.c b/hw/audio/via-ac97.c index d1a856f63d..0b1eeb4272 100644 --- a/hw/audio/via-ac97.c +++ b/hw/audio/via-ac97.c @@ -1,39 +1,467 @@ /* * VIA south bridges sound support * + * Copyright (c) 2022-2023 BALATON Zoltan + * * This work is licensed under the GNU GPL license version 2 or later. */ =20 /* - * TODO: This is entirely boiler plate just registering empty PCI devices - * with the right ID guests expect, functionality should be added here. + * TODO: This is only a basic implementation of one audio playback channel + * more functionality should be added here. */ =20 #include "qemu/osdep.h" +#include "qemu/log.h" #include "hw/isa/vt82c686.h" -#include "hw/pci/pci_device.h" +#include "ac97.h" +#include "trace.h" + +#define CLEN_IS_EOL(x) ((x)->clen & BIT(31)) +#define CLEN_IS_FLAG(x) ((x)->clen & BIT(30)) +#define CLEN_IS_STOP(x) ((x)->clen & BIT(29)) +#define CLEN_LEN(x) ((x)->clen & 0xfff) + +#define STAT_ACTIVE BIT(7) +#define STAT_PAUSED BIT(6) +#define STAT_TRIG BIT(3) +#define STAT_STOP BIT(2) +#define STAT_EOL BIT(1) +#define STAT_FLAG BIT(0) + +#define CNTL_START BIT(7) +#define CNTL_TERM BIT(6) +#define CNTL_PAUSE BIT(3) + +static void open_voice_out(ViaAC97State *s); + +static uint16_t codec_rates[] =3D { 8000, 11025, 16000, 22050, 32000, 4410= 0, + 48000 }; + +#define CODEC_REG(s, o) ((s)->codec_regs[(o) / 2]) +#define CODEC_VOL(vol, mask) ((255 * ((vol) & mask)) / mask) + +static void codec_volume_set_out(ViaAC97State *s) +{ + int lvol, rvol, mute; + + lvol =3D 255 - CODEC_VOL(CODEC_REG(s, AC97_Master_Volume_Mute) >> 8, 0= x1f); + lvol *=3D 255 - CODEC_VOL(CODEC_REG(s, AC97_PCM_Out_Volume_Mute) >> 8,= 0x1f); + lvol /=3D 255; + rvol =3D 255 - CODEC_VOL(CODEC_REG(s, AC97_Master_Volume_Mute), 0x1f); + rvol *=3D 255 - CODEC_VOL(CODEC_REG(s, AC97_PCM_Out_Volume_Mute), 0x1f= ); + rvol /=3D 255; + mute =3D CODEC_REG(s, AC97_Master_Volume_Mute) >> MUTE_SHIFT; + mute |=3D CODEC_REG(s, AC97_PCM_Out_Volume_Mute) >> MUTE_SHIFT; + AUD_set_volume_out(s->vo, mute, lvol, rvol); +} + +static void codec_reset(ViaAC97State *s) +{ + memset(s->codec_regs, 0, sizeof(s->codec_regs)); + CODEC_REG(s, AC97_Reset) =3D 0x6a90; + CODEC_REG(s, AC97_Master_Volume_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Headphone_Volume_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Master_Volume_Mono_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Phone_Volume_Mute) =3D 0x8008; + CODEC_REG(s, AC97_Mic_Volume_Mute) =3D 0x8008; + CODEC_REG(s, AC97_Line_In_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_CD_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Video_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Aux_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_PCM_Out_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Record_Gain_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Powerdown_Ctrl_Stat) =3D 0x000f; + CODEC_REG(s, AC97_Extended_Audio_ID) =3D 0x0a05; + CODEC_REG(s, AC97_Extended_Audio_Ctrl_Stat) =3D 0x0400; + CODEC_REG(s, AC97_PCM_Front_DAC_Rate) =3D 48000; + CODEC_REG(s, AC97_PCM_LR_ADC_Rate) =3D 48000; + /* Sigmatel 9766 (STAC9766) */ + CODEC_REG(s, AC97_Vendor_ID1) =3D 0x8384; + CODEC_REG(s, AC97_Vendor_ID2) =3D 0x7666; +} + +static uint16_t codec_read(ViaAC97State *s, uint8_t addr) +{ + return CODEC_REG(s, addr); +} + +static void codec_write(ViaAC97State *s, uint8_t addr, uint16_t val) +{ + trace_via_ac97_codec_write(addr, val); + switch (addr) { + case AC97_Reset: + codec_reset(s); + return; + case AC97_Master_Volume_Mute: + case AC97_PCM_Out_Volume_Mute: + if (addr =3D=3D AC97_Master_Volume_Mute) { + if (val & BIT(13)) { + val |=3D 0x1f00; + } + if (val & BIT(5)) { + val |=3D 0x1f; + } + } + CODEC_REG(s, addr) =3D val & 0x9f1f; + codec_volume_set_out(s); + return; + case AC97_Extended_Audio_Ctrl_Stat: + CODEC_REG(s, addr) &=3D ~EACS_VRA; + CODEC_REG(s, addr) |=3D val & EACS_VRA; + if (!(val & EACS_VRA)) { + CODEC_REG(s, AC97_PCM_Front_DAC_Rate) =3D 48000; + CODEC_REG(s, AC97_PCM_LR_ADC_Rate) =3D 48000; + open_voice_out(s); + } + return; + case AC97_PCM_Front_DAC_Rate: + case AC97_PCM_LR_ADC_Rate: + if (CODEC_REG(s, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA) { + int i; + uint16_t rate =3D val; + + for (i =3D 0; i < ARRAY_SIZE(codec_rates) - 1; i++) { + if (rate < codec_rates[i] + + (codec_rates[i + 1] - codec_rates[i]) / 2) { + rate =3D codec_rates[i]; + break; + } + } + if (rate > 48000) { + rate =3D 48000; + } + CODEC_REG(s, addr) =3D rate; + open_voice_out(s); + } + return; + case AC97_Powerdown_Ctrl_Stat: + CODEC_REG(s, addr) =3D (val & 0xff00) | (CODEC_REG(s, addr) & 0xff= ); + return; + case AC97_Extended_Audio_ID: + case AC97_Vendor_ID1: + case AC97_Vendor_ID2: + /* Read only registers */ + return; + default: + qemu_log_mask(LOG_UNIMP, + "via-ac97: Unimplemented codec register 0x%x\n", add= r); + CODEC_REG(s, addr) =3D val; + } +} + +static void fetch_sgd(ViaAC97SGDChannel *c, PCIDevice *d) +{ + uint32_t b[2]; + + if (c->curr < c->base) { + c->curr =3D c->base; + } + pci_dma_read(d, c->curr, b, sizeof(b)); + c->addr =3D le32_to_cpu(b[0]); + c->clen =3D le32_to_cpu(b[1]); + trace_via_ac97_sgd_fetch(c->addr, CLEN_IS_STOP(c) ? 'S' : '-', + CLEN_IS_EOL(c) ? 'E' : '-', + CLEN_IS_FLAG(c) ? 'F' : '-', CLEN_LEN(c)); +} + +static void out_cb(void *opaque, int avail) +{ + ViaAC97State *s =3D opaque; + ViaAC97SGDChannel *c =3D &s->aur; + int temp, to_copy, copied; + bool stop =3D false; + uint8_t tmpbuf[4096]; + + if (c->stat & STAT_PAUSED) { + return; + } + c->stat |=3D STAT_ACTIVE; + while (avail && !stop) { + if (!c->clen) { + fetch_sgd(c, &s->dev); + } + temp =3D MIN(CLEN_LEN(c), avail); + while (temp) { + to_copy =3D MIN(temp, sizeof(tmpbuf)); + pci_dma_read(&s->dev, c->addr, tmpbuf, to_copy); + copied =3D AUD_write(s->vo, tmpbuf, to_copy); + if (!copied) { + stop =3D true; + break; + } + temp -=3D copied; + avail -=3D copied; + c->addr +=3D copied; + c->clen -=3D copied; + } + if (CLEN_LEN(c) =3D=3D 0) { + c->curr +=3D 8; + if (CLEN_IS_EOL(c)) { + c->stat |=3D STAT_EOL; + if (c->type & CNTL_START) { + c->curr =3D c->base; + c->stat |=3D STAT_PAUSED; + } else { + c->stat &=3D ~STAT_ACTIVE; + AUD_set_active_out(s->vo, 0); + } + if (c->type & STAT_EOL) { + pci_set_irq(&s->dev, 1); + } + } + if (CLEN_IS_FLAG(c)) { + c->stat |=3D STAT_FLAG; + c->stat |=3D STAT_PAUSED; + if (c->type & STAT_FLAG) { + pci_set_irq(&s->dev, 1); + } + } + if (CLEN_IS_STOP(c)) { + c->stat |=3D STAT_STOP; + c->stat |=3D STAT_PAUSED; + } + c->clen =3D 0; + stop =3D true; + } + } +} + +static void open_voice_out(ViaAC97State *s) +{ + struct audsettings as =3D { + .freq =3D CODEC_REG(s, AC97_PCM_Front_DAC_Rate), + .nchannels =3D s->aur.type & BIT(4) ? 2 : 1, + .fmt =3D s->aur.type & BIT(5) ? AUDIO_FORMAT_S16 : AUDIO_FORMAT_S8, + .endianness =3D 0, + }; + s->vo =3D AUD_open_out(&s->card, s->vo, "via-ac97.out", s, out_cb, &as= ); +} + +static uint64_t sgd_read(void *opaque, hwaddr addr, unsigned size) +{ + ViaAC97State *s =3D opaque; + uint64_t val =3D 0; + + switch (addr) { + case 0: + val =3D s->aur.stat; + if (s->aur.type & CNTL_START) { + val |=3D STAT_TRIG; + } + break; + case 1: + val =3D s->aur.stat & STAT_PAUSED ? BIT(3) : 0; + break; + case 2: + val =3D s->aur.type; + break; + case 4: + val =3D s->aur.curr; + break; + case 0xc: + val =3D CLEN_LEN(&s->aur); + break; + case 0x80: + val =3D s->ac97_cmd; + break; + case 0x84: + val =3D s->aur.stat & STAT_FLAG; + if (s->aur.stat & STAT_EOL) { + val |=3D BIT(4); + } + if (s->aur.stat & STAT_STOP) { + val |=3D BIT(8); + } + if (s->aur.stat & STAT_ACTIVE) { + val |=3D BIT(12); + } + break; + default: + qemu_log_mask(LOG_UNIMP, "via-ac97: Unimplemented register read %" + HWADDR_PRIx"\n", addr); + } + trace_via_ac97_sgd_read(addr, size, val); + return val; +} + +static void sgd_write(void *opaque, hwaddr addr, uint64_t val, unsigned si= ze) +{ + ViaAC97State *s =3D opaque; + + trace_via_ac97_sgd_write(addr, size, val); + switch (addr) { + case 0: + if (val & STAT_STOP) { + s->aur.stat &=3D ~STAT_PAUSED; + } + if (val & STAT_EOL) { + s->aur.stat &=3D ~(STAT_EOL | STAT_PAUSED); + if (s->aur.type & STAT_EOL) { + pci_set_irq(&s->dev, 0); + } + } + if (val & STAT_FLAG) { + s->aur.stat &=3D ~(STAT_FLAG | STAT_PAUSED); + if (s->aur.type & STAT_FLAG) { + pci_set_irq(&s->dev, 0); + } + } + break; + case 1: + if (val & CNTL_START) { + AUD_set_active_out(s->vo, 1); + s->aur.stat =3D STAT_ACTIVE; + } + if (val & CNTL_TERM) { + AUD_set_active_out(s->vo, 0); + s->aur.stat &=3D ~(STAT_ACTIVE | STAT_PAUSED); + s->aur.clen =3D 0; + } + if (val & CNTL_PAUSE) { + AUD_set_active_out(s->vo, 0); + s->aur.stat &=3D ~STAT_ACTIVE; + s->aur.stat |=3D STAT_PAUSED; + } else if (!(val & CNTL_PAUSE) && (s->aur.stat & STAT_PAUSED)) { + AUD_set_active_out(s->vo, 1); + s->aur.stat |=3D STAT_ACTIVE; + s->aur.stat &=3D ~STAT_PAUSED; + } + break; + case 2: + { + uint32_t oldval =3D s->aur.type; + s->aur.type =3D val; + if ((oldval & 0x30) !=3D (val & 0x30)) { + open_voice_out(s); + } + break; + } + case 4: + s->aur.base =3D val & ~1ULL; + break; + case 0x80: + if (val >> 30) { + /* we only have primary codec */ + break; + } + if (val & BIT(23)) { /* read reg */ + s->ac97_cmd =3D val & 0xc0ff0000ULL; + s->ac97_cmd |=3D codec_read(s, (val >> 16) & 0x7f); + s->ac97_cmd |=3D BIT(25); /* data valid */ + } else { + s->ac97_cmd =3D val & 0xc0ffffffULL; + codec_write(s, (val >> 16) & 0x7f, val); + } + break; + case 0xc: + case 0x84: + /* Read only */ + break; + default: + qemu_log_mask(LOG_UNIMP, "via-ac97: Unimplemented register write %" + HWADDR_PRIx"\n", addr); + } +} + +static const MemoryRegionOps sgd_ops =3D { + .read =3D sgd_read, + .write =3D sgd_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t fm_read(void *opaque, hwaddr addr, unsigned size) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d\n", __func__, addr, = size); + return 0; +} + +static void fm_write(void *opaque, hwaddr addr, uint64_t val, unsigned siz= e) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d <=3D 0x%"PRIX64"\n", + __func__, addr, size, val); +} + +static const MemoryRegionOps fm_ops =3D { + .read =3D fm_read, + .write =3D fm_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t midi_read(void *opaque, hwaddr addr, unsigned size) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d\n", __func__, addr, = size); + return 0; +} + +static void midi_write(void *opaque, hwaddr addr, uint64_t val, unsigned s= ize) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d <=3D 0x%"PRIX64"\n", + __func__, addr, size, val); +} + +static const MemoryRegionOps midi_ops =3D { + .read =3D midi_read, + .write =3D midi_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static void via_ac97_reset(DeviceState *dev) +{ + ViaAC97State *s =3D VIA_AC97(dev); + + codec_reset(s); +} =20 static void via_ac97_realize(PCIDevice *pci_dev, Error **errp) { + ViaAC97State *s =3D VIA_AC97(pci_dev); + Object *o =3D OBJECT(s); + pci_set_word(pci_dev->config + PCI_COMMAND, PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY); pci_set_word(pci_dev->config + PCI_STATUS, PCI_STATUS_CAP_LIST | PCI_STATUS_DEVSEL_MEDIUM); pci_set_long(pci_dev->config + PCI_INTERRUPT_PIN, 0x03); + + memory_region_init_io(&s->sgd, o, &sgd_ops, s, "via-ac97.sgd", 256); + pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->sgd); + memory_region_init_io(&s->fm, o, &fm_ops, s, "via-ac97.fm", 4); + pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->fm); + memory_region_init_io(&s->midi, o, &midi_ops, s, "via-ac97.midi", 4); + pci_register_bar(pci_dev, 2, PCI_BASE_ADDRESS_SPACE_IO, &s->midi); + + AUD_register_card ("via-ac97", &s->card); } =20 +static void via_ac97_exit(PCIDevice *dev) +{ + ViaAC97State *s =3D VIA_AC97(dev); + + AUD_close_out(&s->card, s->vo); + AUD_remove_card(&s->card); +} + +static Property via_ac97_properties[] =3D { + DEFINE_AUDIO_PROPERTIES(ViaAC97State, card), + DEFINE_PROP_END_OF_LIST(), +}; + static void via_ac97_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); PCIDeviceClass *k =3D PCI_DEVICE_CLASS(klass); =20 k->realize =3D via_ac97_realize; + k->exit =3D via_ac97_exit; k->vendor_id =3D PCI_VENDOR_ID_VIA; k->device_id =3D PCI_DEVICE_ID_VIA_AC97; k->revision =3D 0x50; k->class_id =3D PCI_CLASS_MULTIMEDIA_AUDIO; + device_class_set_props(dc, via_ac97_properties); set_bit(DEVICE_CATEGORY_SOUND, dc->categories); dc->desc =3D "VIA AC97"; + dc->reset =3D via_ac97_reset; /* Reason: Part of a south bridge chip */ dc->user_creatable =3D false; } @@ -41,7 +469,7 @@ static void via_ac97_class_init(ObjectClass *klass, void= *data) static const TypeInfo via_ac97_info =3D { .name =3D TYPE_VIA_AC97, .parent =3D TYPE_PCI_DEVICE, - .instance_size =3D sizeof(PCIDevice), + .instance_size =3D sizeof(ViaAC97State), .class_init =3D via_ac97_class_init, .interfaces =3D (InterfaceInfo[]) { { INTERFACE_CONVENTIONAL_PCI_DEVICE }, diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index f24e387d63..91780345d4 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -554,7 +554,7 @@ struct ViaISAState { PCIIDEState ide; UHCIState uhci[2]; ViaPMState pm; - PCIDevice ac97; + ViaAC97State ac97; PCIDevice mc97; }; =20 diff --git a/hw/audio/trace-events b/hw/audio/trace-events index e0e71cd9b1..6eccdaa4b5 100644 --- a/hw/audio/trace-events +++ b/hw/audio/trace-events @@ -11,3 +11,9 @@ hda_audio_running(const char *stream, int nr, bool runnin= g) "st %s, nr %d, run % hda_audio_format(const char *stream, int chan, const char *fmt, int freq) = "st %s, %d x %s @ %d Hz" hda_audio_adjust(const char *stream, int pos) "st %s, pos %d" hda_audio_overrun(const char *stream) "st %s" + +#via-ac97.c +via_ac97_codec_write(uint8_t addr, uint16_t val) "0x%x <- 0x%x" +via_ac97_sgd_fetch(uint32_t addr, char stop, char eol, char flag, uint32_t= len) "addr=3D0x%x %c%c%c len=3D%d" +via_ac97_sgd_read(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64"= %d -> 0x%"PRIx64 +via_ac97_sgd_write(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64= " %d <- 0x%"PRIx64 --=20 2.39.2