From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366369; cv=none; d=zohomail.com; s=zohoarc; b=QLLzBqEb4z0ynRom8kuXCpF59FHHyoos8pkiE2bg1yW9pdNNC29p4P8lGLbkPxCaMak4UQTxlFEZOhNRapFP/0bQPk5wYVDDjZioPCsouLb3Vx1OY4jajeRC5E0VBfeI31eoJJ+lYqKaMpxEOm7PUHIeCW96pmC9dNzWlFQ9uiE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366369; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=yIx6qnixzEdCFqcaxOcBVgzeXQKdqlMaGZGGlAdFf2k=; b=GrX6v4QG/8uB2U+iI4xoWDjwG09oTK7tVztht9X387GxlMVY75JHtiM0wcjGeyT2qxeh4Q7csaqIYbghb0i+swdN8Q+w4jld+Y+HkaVYwNYj+EpSyqAAisG0/PYA6WPzcsxdehway9H2UbhAyNaWAxNGVhtLqlQkCbAMuzg/88w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1621366369896521.9233246910245; Tue, 18 May 2021 12:32:49 -0700 (PDT) Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-517-XR4vTLolPjWZCgCbbhvaNA-1; Tue, 18 May 2021 15:32:47 -0400 Received: by mail-ej1-f72.google.com with SMTP id k9-20020a17090646c9b029039d323bd239so2788986ejs.16 for ; Tue, 18 May 2021 12:32:47 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id g4sm13795876edw.8.2021.05.18.12.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366368; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yIx6qnixzEdCFqcaxOcBVgzeXQKdqlMaGZGGlAdFf2k=; b=FrQhQXs+7PEW656SV53oq06Dil8T2zzJXE3wg1DWoHjwMjDGgV10QtbEIQPMKouFyasxZE Gca3ioqlVkqZF4Owv35vbDJX2w8/gIDBLsNodKSPfxdggYHXX+/WSK8TrBleVeOzvDJ5BK zWkhwQG6EFC4b+YNvjuzozpvJA1oods= X-MC-Unique: XR4vTLolPjWZCgCbbhvaNA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yIx6qnixzEdCFqcaxOcBVgzeXQKdqlMaGZGGlAdFf2k=; b=dGatOX7wintPZtu6yzgJurtePt/CouyEfmYwJ7G2r5y8w2PFQyvXdLzniGBgBLUf9J BOKf0RsSdsUYT5G6dVbq6JaQIsGdFIgbJbLyOHydtThJzMolamPEB2lkkq0Mx1wjL9jP /ZZ1iCPXglFx85cAcieO7YVWeQFTUs+cmZCP+mYDkHht7hyrVIKNbRt5ESm9lrJZc7ge DaZCSp6o8+tuAXdliyu6/+2x2Xopo2sddr1qNq+MbdI/nHB9iOolzEdaFTJyFOEdaIib 7F0P4RjQ3aPocT7+NxLO4SrDLGm2HpBFpXeb8DjTsvrmJuyxWMuX3EDbrwK7YydMREWF 4mHg== X-Gm-Message-State: AOAM530yeTmsBITeWGjN4fC0wKg7yKWMMrWaun1be1aYvZ3vU6mOwIJE Q3klutEfe1zmCAYvPpMWM/CTkG0vFACUdC0QIoecbymssR0vVOkjg+r7T59DLQEVSp0nuYQafI+ 0gIIxrj5e2mloJw== X-Received: by 2002:a05:6402:22a8:: with SMTP id cx8mr9002708edb.296.1621366366160; Tue, 18 May 2021 12:32:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyyi9MbN+GaQlROKLmKdvxFf0PCYniIN8qbV9iBhw2eYepl0m5MupEDpbrvgJv6dm01d1Q8EA== X-Received: by 2002:a05:6402:22a8:: with SMTP id cx8mr9002693edb.296.1621366366048; Tue, 18 May 2021 12:32:46 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v5 1/6] hw/isa/Kconfig: Fix missing dependency ISA_SUPERIO -> FDC Date: Tue, 18 May 2021 21:32:34 +0200 Message-Id: <20210518193239.1725624-2-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) isa_superio_realize() calls isa_fdc_init_drives(), which is defined in hw/block/fdc.c, so ISA_SUPERIO needs to select the FDC symbol. Reported-by: John Snow Fixes: c0ff3795143 ("Introduce a CONFIG_ISA_SUPERIO switch for isa-superio.= c") Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Thomas Huth --- hw/isa/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig index 55e0003ce40..7216f66a54a 100644 --- a/hw/isa/Kconfig +++ b/hw/isa/Kconfig @@ -17,6 +17,7 @@ config ISA_SUPERIO bool select ISA_BUS select PCKBD + select FDC =20 config PC87312 bool --=20 2.26.3 From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366374; cv=none; d=zohomail.com; s=zohoarc; b=R3qfMQ7n4AFxBK7XS9bNjRALlq1qYlKtEJqTj2uttCAEgMbphXEZBff3ei7VRMS0/wOc3rVnptCAfxcCNbbRIbr7ypRFjKkArpuLhnRXmSt28B7SyqkrecvZN1bzrYe9ze4izE/4p1HVVTbbgKo+WBFTSdidEUvVMhppqwdjItc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366374; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=zQBaPB2rPx7zwmJ2L9PvToDExIoXxeF+Eyck4rA2oM0=; b=ev7y2LLnfhfSGScJRxJc9n7RqnH2UQ65d1dKO1xqWDDE5jJSHXF0gDEsU1g7RDjsQvNjhhjdCD8G1VWMZAmFV5du+yhV/mtqzA6klFSL8flHWOtCZdDMVSphOx8J1TC3lPDCByoNPjwH7w1VLLbWQrxh+eUl4IsRhQ7nupPPOH0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1621366374529327.7980175751476; Tue, 18 May 2021 12:32:54 -0700 (PDT) Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-551-8fz7dFFWNyOIrqZZWt6xWQ-1; Tue, 18 May 2021 15:32:51 -0400 Received: by mail-ej1-f69.google.com with SMTP id w13-20020a170906384db02903d9ad6b26d8so935130ejc.0 for ; Tue, 18 May 2021 12:32:51 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id k2sm10880861ejj.30.2021.05.18.12.32.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:32:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366373; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zQBaPB2rPx7zwmJ2L9PvToDExIoXxeF+Eyck4rA2oM0=; b=NgoFI48JFjtYk/fM+Gh/FbulQO26GNL/s80ChDyvLnFp4K/mHUaAJesa+VGLIj29rvhHKd 150ws2daeG4h7srtQkOwzjfbwps+y3CThwTusp29BMMMToqIllxyfu+BtBNV8ovwawa65u 4gyVo6jOmiSLXPkg0KF+g52wnoyvCco= X-MC-Unique: 8fz7dFFWNyOIrqZZWt6xWQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zQBaPB2rPx7zwmJ2L9PvToDExIoXxeF+Eyck4rA2oM0=; b=p7acKT3/FWPjeFayQcA+3GYlc5TpitwRmt7oBIBlpP17X6pGTXldqEEkPx94KJoF3x ggHqDXqFVBByobY3mvAQiJDpCS5HU8p6K8gi39nQ2Y+kS98M+fWWw6PMGKEPB/Hwd1li MNJDj8tAJ9FjQ9lIFFrdTObDPEvV+QjL6br20YYeq9DAJbqgic4sVbnIsBqwAbhw6fm7 fouCjLgpJi9A43u2UaWAlgR2s2//Cr6rnUyI263OXPj7gPrxcpX7ZOBWk6FDhCKzbkh4 4ksCULOajydLMe/2aQ2oIrT/YKla/21ZiTexx6l0mImlfeM8XJKGtr+hGH+PSYRFRZAP dVzg== X-Gm-Message-State: AOAM530L8kFCwVTiRhGqHLnt/YPPcIdn1zLU5x5Uqo4PEX1WB1Q27FiD OBLMgzLojZ5stzPVriQ+xSzG5Rk7O2pPwkshutAwLzXyNmKBNwKpZ+w3VsJHJuzIKpoYp9q1TK2 IjJ7IaUXrBSiJKg== X-Received: by 2002:a17:906:5291:: with SMTP id c17mr7540150ejm.527.1621366370758; Tue, 18 May 2021 12:32:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzQlqwGuNWZE/w+xuvejbIZiFbzPdPfRz8bH6wbR6h8wIcu4lGd062J8/Cx60CAyIM8mFgtXQ== X-Received: by 2002:a17:906:5291:: with SMTP id c17mr7540136ejm.527.1621366370623; Tue, 18 May 2021 12:32:50 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland Subject: [PATCH v5 2/6] hw/block/fdc: Replace disabled fprintf() by trace event Date: Tue, 18 May 2021 21:32:35 +0200 Message-Id: <20210518193239.1725624-3-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Reviewed-by: John Snow Acked-by: Mark Cave-Ayland Reviewed-by: Mark Cave-Ayland Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/block/fdc.c | 7 +------ hw/block/trace-events | 1 + 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/hw/block/fdc.c b/hw/block/fdc.c index a825c2acbae..1d3a0473678 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -1242,12 +1242,7 @@ static void fdctrl_external_reset_isa(DeviceState *d) =20 static void fdctrl_handle_tc(void *opaque, int irq, int level) { - //FDCtrl *s =3D opaque; - - if (level) { - // XXX - FLOPPY_DPRINTF("TC pulsed\n"); - } + trace_fdctrl_tc_pulse(level); } =20 /* Change IRQ state */ diff --git a/hw/block/trace-events b/hw/block/trace-events index 646917d045f..7b26fc738f0 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -3,6 +3,7 @@ # fdc.c fdc_ioport_read(uint8_t reg, uint8_t value) "read reg 0x%02x val 0x%02x" fdc_ioport_write(uint8_t reg, uint8_t value) "write reg 0x%02x val 0x%02x" +fdctrl_tc_pulse(int level) "TC pulse: %u" =20 # pflash_cfi01.c # pflash_cfi02.c --=20 2.26.3 From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366379; cv=none; d=zohomail.com; s=zohoarc; b=dczXAkQNfgbaLA/Nv/DnyM9SZofm3ukfAp+dYZwUw4+6gt0+CpwFKavTYQtbwRd50epJDxh3y/V8Uu2hDaKMbTIQiku7SOdzSEwDGPu4ozqWRWgv055lHF8PYL7TA5MM/IHMdcUkHHmXvK5a7S17DYENeAgIJmx+AZKk+SwEamM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366379; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=m+Ygas6VD+BqFw9jm+m53LrN5NbrB3CRJUd4PRtfBhc=; b=nvn96Wq/ZmIJGlzNmkaGHVYsrxDQkfFz7JlZgHn9Y4BoMiaJPPUixJlhSrzQsAN3lcnCNIEGe3HEkXXBc1sAV1xd7a0dzfMZ9JVpmxsR8FLRNCYT/hszt7t0UACx7Fmiod/cm9n+LZcFAf4Ra26BTLoVVimAPq1Xzc61GJyJ744= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1621366379729212.42563388187068; Tue, 18 May 2021 12:32:59 -0700 (PDT) Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-129-F0x5SUlnOEGJisg0qLdbZg-1; Tue, 18 May 2021 15:32:56 -0400 Received: by mail-ed1-f70.google.com with SMTP id h18-20020a05640250d2b029038cc3938914so6338392edb.17 for ; Tue, 18 May 2021 12:32:56 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id w6sm13123916edc.25.2021.05.18.12.32.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:32:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366378; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m+Ygas6VD+BqFw9jm+m53LrN5NbrB3CRJUd4PRtfBhc=; b=gSe0i7V//d822sZ91sB2lgljyG0KZAPgvNNrDziuYKbYVvB/SrtBgl1hK8jUN95bUFNLW/ 3YU1gbHpo1Ped8JRF7RLHP2vYC1w/Hnr5nSO7lvrP5N0g/WYAo4NVtWE+9RG8PVWv7RMLT OltDDOYoF7ZBYbFoAWCYo5R8QIErSmI= X-MC-Unique: F0x5SUlnOEGJisg0qLdbZg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=m+Ygas6VD+BqFw9jm+m53LrN5NbrB3CRJUd4PRtfBhc=; b=doNzLoOlTwEXAA7ZjJfFP7QADeEaBt+xCJN8QrdF1MHNMxgfPoSLt9yRw9wult9jIC RLiJDMyRpT79LeQAES61NsEgDWyFxhydVFNCTHvAToKofdxsdHzwfh0KkW1V3eSu9SAF kmisynqSwSuRBLXqVYRJo8xvAjZWueI2IsI+MziX2hXqpeoAZ8g+kssM9tY8XLFGUW02 z04DgrO476dYXcV7q41ZgBC4UlCPLAl8oIdMtnElOtLAzHoI3LJ7O932gdZHnn5dPRzJ MXZy8nVFGOoA0TcyEED2s8qZA6Iij6rXbrABo423nCdeNrBqkuruYdNmTrztFKt0Gt5h cA2A== X-Gm-Message-State: AOAM530Up1AAnnTx308NRvLm/MqImt8Q/ojK/gjAupIYk/9DA32P3vWI 1alGfnOzaF74nkOjpcFWXPo3n52nDIYNpdD52ouULsBJhInL/uuJIUEvcfo03yailVfVtb1Ey+6 r/pT56QWhidYwag== X-Received: by 2002:a17:906:318b:: with SMTP id 11mr7010399ejy.395.1621366375482; Tue, 18 May 2021 12:32:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyiCwDgjLPkzRfrCwRETePy2EQN95rfKMxolxcaFUPJdgaQaaa8CpOHzSOVnk3rhCr1ZeJiPw== X-Received: by 2002:a17:906:318b:: with SMTP id 11mr7010382ejy.395.1621366375221; Tue, 18 May 2021 12:32:55 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland Subject: [PATCH v5 3/6] hw/block/fdc: Declare shared prototypes in fdc-internal.h Date: Tue, 18 May 2021 21:32:36 +0200 Message-Id: <20210518193239.1725624-4-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) We want to extract ISA/SysBus code from the generic fdc.c file. First, declare the prototypes we will access from the new units into a new local header: "fdc-internal.h". Acked-by: Mark Cave-Ayland Reviewed-by: Mark Cave-Ayland Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- v5: fdctrl_transfer_handler() public --- hw/block/fdc-internal.h | 158 ++++++++++++++++++++++++++++++++++++++++ hw/block/fdc.c | 131 +++------------------------------ MAINTAINERS | 1 + 3 files changed, 168 insertions(+), 122 deletions(-) create mode 100644 hw/block/fdc-internal.h diff --git a/hw/block/fdc-internal.h b/hw/block/fdc-internal.h new file mode 100644 index 00000000000..036392e9fc1 --- /dev/null +++ b/hw/block/fdc-internal.h @@ -0,0 +1,158 @@ +/* + * QEMU Floppy disk emulator (Intel 82078) + * + * Copyright (c) 2003, 2007 Jocelyn Mayer + * Copyright (c) 2008 Herv=C3=A9 Poussineau + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ +#ifndef HW_BLOCK_FDC_INTERNAL_H +#define HW_BLOCK_FDC_INTERNAL_H + +#include "exec/memory.h" +#include "exec/ioport.h" +#include "hw/block/block.h" +#include "hw/block/fdc.h" +#include "qapi/qapi-types-block.h" + +typedef struct FDCtrl FDCtrl; + +/* Floppy bus emulation */ + +typedef struct FloppyBus { + BusState bus; + FDCtrl *fdc; +} FloppyBus; + +/* Floppy disk drive emulation */ + +typedef enum FDriveRate { + FDRIVE_RATE_500K =3D 0x00, /* 500 Kbps */ + FDRIVE_RATE_300K =3D 0x01, /* 300 Kbps */ + FDRIVE_RATE_250K =3D 0x02, /* 250 Kbps */ + FDRIVE_RATE_1M =3D 0x03, /* 1 Mbps */ +} FDriveRate; + +typedef enum FDriveSize { + FDRIVE_SIZE_UNKNOWN, + FDRIVE_SIZE_350, + FDRIVE_SIZE_525, +} FDriveSize; + +typedef struct FDFormat { + FloppyDriveType drive; + uint8_t last_sect; + uint8_t max_track; + uint8_t max_head; + FDriveRate rate; +} FDFormat; + +typedef enum FDiskFlags { + FDISK_DBL_SIDES =3D 0x01, +} FDiskFlags; + +typedef struct FDrive { + FDCtrl *fdctrl; + BlockBackend *blk; + BlockConf *conf; + /* Drive status */ + FloppyDriveType drive; /* CMOS drive type */ + uint8_t perpendicular; /* 2.88 MB access mode */ + /* Position */ + uint8_t head; + uint8_t track; + uint8_t sect; + /* Media */ + FloppyDriveType disk; /* Current disk type */ + FDiskFlags flags; + uint8_t last_sect; /* Nb sector per track */ + uint8_t max_track; /* Nb of tracks */ + uint16_t bps; /* Bytes per sector */ + uint8_t ro; /* Is read-only */ + uint8_t media_changed; /* Is media changed */ + uint8_t media_rate; /* Data rate of medium */ + + bool media_validated; /* Have we validated the media? */ +} FDrive; + +struct FDCtrl { + MemoryRegion iomem; + qemu_irq irq; + /* Controller state */ + QEMUTimer *result_timer; + int dma_chann; + uint8_t phase; + IsaDma *dma; + /* Controller's identification */ + uint8_t version; + /* HW */ + uint8_t sra; + uint8_t srb; + uint8_t dor; + uint8_t dor_vmstate; /* only used as temp during vmstate */ + uint8_t tdr; + uint8_t dsr; + uint8_t msr; + uint8_t cur_drv; + uint8_t status0; + uint8_t status1; + uint8_t status2; + /* Command FIFO */ + uint8_t *fifo; + int32_t fifo_size; + uint32_t data_pos; + uint32_t data_len; + uint8_t data_state; + uint8_t data_dir; + uint8_t eot; /* last wanted sector */ + /* States kept only to be returned back */ + /* precompensation */ + uint8_t precomp_trk; + uint8_t config; + uint8_t lock; + /* Power down config (also with status regB access mode */ + uint8_t pwrd; + /* Floppy drives */ + FloppyBus bus; + uint8_t num_floppies; + FDrive drives[MAX_FD]; + struct { + FloppyDriveType type; + } qdev_for_drives[MAX_FD]; + int reset_sensei; + FloppyDriveType fallback; /* type=3Dauto failure fallback */ + /* Timers state */ + uint8_t timer0; + uint8_t timer1; + PortioList portio_list; +}; + +extern const FDFormat fd_formats[]; +extern const VMStateDescription vmstate_fdc; + +uint32_t fdctrl_read(void *opaque, uint32_t reg); +void fdctrl_write(void *opaque, uint32_t reg, uint32_t value); +void fdctrl_reset(FDCtrl *fdctrl, int do_irq); +void fdctrl_realize_common(DeviceState *dev, FDCtrl *fdctrl, Error **errp); + +int fdctrl_transfer_handler(void *opaque, int nchan, int dma_pos, int dma_= len); + +void fdctrl_init_drives(FloppyBus *bus, DriveInfo **fds); + +#endif diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 1d3a0473678..20ddeb98d83 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -48,6 +48,7 @@ #include "qemu/module.h" #include "trace.h" #include "qom/object.h" +#include "fdc-internal.h" =20 /********************************************************/ /* debug Floppy devices */ @@ -68,15 +69,8 @@ #define TYPE_FLOPPY_BUS "floppy-bus" OBJECT_DECLARE_SIMPLE_TYPE(FloppyBus, FLOPPY_BUS) =20 -typedef struct FDCtrl FDCtrl; -typedef struct FDrive FDrive; static FDrive *get_drv(FDCtrl *fdctrl, int unit); =20 -struct FloppyBus { - BusState bus; - FDCtrl *fdc; -}; - static const TypeInfo floppy_bus_info =3D { .name =3D TYPE_FLOPPY_BUS, .parent =3D TYPE_BUS, @@ -93,32 +87,11 @@ static void floppy_bus_create(FDCtrl *fdc, FloppyBus *b= us, DeviceState *dev) /********************************************************/ /* Floppy drive emulation */ =20 -typedef enum FDriveRate { - FDRIVE_RATE_500K =3D 0x00, /* 500 Kbps */ - FDRIVE_RATE_300K =3D 0x01, /* 300 Kbps */ - FDRIVE_RATE_250K =3D 0x02, /* 250 Kbps */ - FDRIVE_RATE_1M =3D 0x03, /* 1 Mbps */ -} FDriveRate; - -typedef enum FDriveSize { - FDRIVE_SIZE_UNKNOWN, - FDRIVE_SIZE_350, - FDRIVE_SIZE_525, -} FDriveSize; - -typedef struct FDFormat { - FloppyDriveType drive; - uint8_t last_sect; - uint8_t max_track; - uint8_t max_head; - FDriveRate rate; -} FDFormat; - /* In many cases, the total sector size of a format is enough to uniquely * identify it. However, there are some total sector collisions between * formats of different physical size, and these are noted below by * highlighting the total sector size for entries with collisions. */ -static const FDFormat fd_formats[] =3D { +const FDFormat fd_formats[] =3D { /* First entry is default format */ /* 1.44 MB 3"1/2 floppy disks */ { FLOPPY_DRIVE_TYPE_144, 18, 80, 1, FDRIVE_RATE_500K, }, /* 3.5" 2880 = */ @@ -186,35 +159,6 @@ static FDriveSize drive_size(FloppyDriveType drive) #define FD_SECTOR_SC 2 /* Sector size code */ #define FD_RESET_SENSEI_COUNT 4 /* Number of sense interrupts on RESET = */ =20 -/* Floppy disk drive emulation */ -typedef enum FDiskFlags { - FDISK_DBL_SIDES =3D 0x01, -} FDiskFlags; - -struct FDrive { - FDCtrl *fdctrl; - BlockBackend *blk; - BlockConf *conf; - /* Drive status */ - FloppyDriveType drive; /* CMOS drive type */ - uint8_t perpendicular; /* 2.88 MB access mode */ - /* Position */ - uint8_t head; - uint8_t track; - uint8_t sect; - /* Media */ - FloppyDriveType disk; /* Current disk type */ - FDiskFlags flags; - uint8_t last_sect; /* Nb sector per track */ - uint8_t max_track; /* Nb of tracks */ - uint16_t bps; /* Bytes per sector */ - uint8_t ro; /* Is read-only */ - uint8_t media_changed; /* Is media changed */ - uint8_t media_rate; /* Data rate of medium */ - - bool media_validated; /* Have we validated the media? */ -}; - =20 static FloppyDriveType get_fallback_drive_type(FDrive *drv); =20 @@ -626,10 +570,7 @@ static const TypeInfo floppy_drive_info =3D { /********************************************************/ /* Intel 82078 floppy disk controller emulation */ =20 -static void fdctrl_reset(FDCtrl *fdctrl, int do_irq); static void fdctrl_to_command_phase(FDCtrl *fdctrl); -static int fdctrl_transfer_handler (void *opaque, int nchan, - int dma_pos, int dma_len); static void fdctrl_raise_irq(FDCtrl *fdctrl); static FDrive *get_cur_drv(FDCtrl *fdctrl); =20 @@ -828,58 +769,6 @@ enum { #define FD_MULTI_TRACK(state) ((state) & FD_STATE_MULTI) #define FD_FORMAT_CMD(state) ((state) & FD_STATE_FORMAT) =20 -struct FDCtrl { - MemoryRegion iomem; - qemu_irq irq; - /* Controller state */ - QEMUTimer *result_timer; - int dma_chann; - uint8_t phase; - IsaDma *dma; - /* Controller's identification */ - uint8_t version; - /* HW */ - uint8_t sra; - uint8_t srb; - uint8_t dor; - uint8_t dor_vmstate; /* only used as temp during vmstate */ - uint8_t tdr; - uint8_t dsr; - uint8_t msr; - uint8_t cur_drv; - uint8_t status0; - uint8_t status1; - uint8_t status2; - /* Command FIFO */ - uint8_t *fifo; - int32_t fifo_size; - uint32_t data_pos; - uint32_t data_len; - uint8_t data_state; - uint8_t data_dir; - uint8_t eot; /* last wanted sector */ - /* States kept only to be returned back */ - /* precompensation */ - uint8_t precomp_trk; - uint8_t config; - uint8_t lock; - /* Power down config (also with status regB access mode */ - uint8_t pwrd; - /* Floppy drives */ - FloppyBus bus; - uint8_t num_floppies; - FDrive drives[MAX_FD]; - struct { - FloppyDriveType type; - } qdev_for_drives[MAX_FD]; - int reset_sensei; - FloppyDriveType fallback; /* type=3Dauto failure fallback */ - /* Timers state */ - uint8_t timer0; - uint8_t timer1; - PortioList portio_list; -}; - static FloppyDriveType get_fallback_drive_type(FDrive *drv) { return drv->fdctrl->fallback; @@ -909,7 +798,7 @@ struct FDCtrlISABus { int32_t bootindexB; }; =20 -static uint32_t fdctrl_read (void *opaque, uint32_t reg) +uint32_t fdctrl_read(void *opaque, uint32_t reg) { FDCtrl *fdctrl =3D opaque; uint32_t retval; @@ -946,7 +835,7 @@ static uint32_t fdctrl_read (void *opaque, uint32_t reg) return retval; } =20 -static void fdctrl_write (void *opaque, uint32_t reg, uint32_t value) +void fdctrl_write(void *opaque, uint32_t reg, uint32_t value) { FDCtrl *fdctrl =3D opaque; =20 @@ -1178,7 +1067,7 @@ static const VMStateDescription vmstate_fdc_phase =3D= { } }; =20 -static const VMStateDescription vmstate_fdc =3D { +const VMStateDescription vmstate_fdc =3D { .name =3D "fdc", .version_id =3D 2, .minimum_version_id =3D 2, @@ -1268,7 +1157,7 @@ static void fdctrl_raise_irq(FDCtrl *fdctrl) } =20 /* Reset controller */ -static void fdctrl_reset(FDCtrl *fdctrl, int do_irq) +void fdctrl_reset(FDCtrl *fdctrl, int do_irq) { int i; =20 @@ -1747,8 +1636,7 @@ static void fdctrl_start_transfer_del(FDCtrl *fdctrl,= int direction) } =20 /* handlers for DMA transfers */ -static int fdctrl_transfer_handler (void *opaque, int nchan, - int dma_pos, int dma_len) +int fdctrl_transfer_handler(void *opaque, int nchan, int dma_pos, int dma_= len) { FDCtrl *fdctrl; FDrive *cur_drv; @@ -2484,7 +2372,7 @@ static void fdctrl_result_timer(void *opaque) =20 /* Init functions */ =20 -static void fdctrl_init_drives(FloppyBus *bus, DriveInfo **fds) +void fdctrl_init_drives(FloppyBus *bus, DriveInfo **fds) { DeviceState *dev; int i; @@ -2542,8 +2430,7 @@ void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, fdctrl_init_drives(&sys->state.bus, fds); } =20 -static void fdctrl_realize_common(DeviceState *dev, FDCtrl *fdctrl, - Error **errp) +void fdctrl_realize_common(DeviceState *dev, FDCtrl *fdctrl, Error **errp) { int i, j; FDrive *drive; diff --git a/MAINTAINERS b/MAINTAINERS index eab178aeee5..c5c32bbd36f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1659,6 +1659,7 @@ M: John Snow L: qemu-block@nongnu.org S: Supported F: hw/block/fdc.c +F: hw/block/fdc-internal.h F: include/hw/block/fdc.h F: tests/qtest/fdc-test.c T: git https://gitlab.com/jsnow/qemu.git ide --=20 2.26.3 From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366385; cv=none; d=zohomail.com; s=zohoarc; b=R9/UwL5F7YQzCDpMZkyu6POWHXgqgX1cO1FZVVFKbB0jCXxM36ODktCaPDMCW+BJmGAdB1ISrJCKj46cSFFT2bfg4H958QMl12VT8yuDOn5NfpKxtKMAEnZSD9umhk3Yp0iJl3+HKzOzD3Pk+P/49Qs8L8zgvti2LFSEuK4AiMs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366385; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=K3LgKqkhadTo7/QXPWkc+DMJkUptYIYD3Sw6SI9dKls=; b=EW3gqQbCFIpMs+xgyn/u+BP0P3ts9+YgH6JAJ3n6RJGr7Ms0Ekyq0eW7bj5Oyd4o0K0Eyzj7x2HI9h+0jAqjzvbia+sBEV0AyPbcESCQrFMtQIl6TmshcFYoyBecIirq8eJl3XTaURvqIUKEsVCQrHHyquxbxjUeaEKQiWPb2kk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1621366385809239.18542188202127; Tue, 18 May 2021 12:33:05 -0700 (PDT) Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-580-tA05cpU_Os2C-rr3RlJHoA-1; Tue, 18 May 2021 15:33:02 -0400 Received: by mail-ed1-f69.google.com with SMTP id u6-20020aa7d0c60000b029038d7337e633so167208edo.4 for ; Tue, 18 May 2021 12:33:01 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id q26sm10798129ejc.3.2021.05.18.12.32.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:32:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366384; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=K3LgKqkhadTo7/QXPWkc+DMJkUptYIYD3Sw6SI9dKls=; b=UgyqaDA22CSaGPFvzn5D/4jAKvQHFFcNJhPdZDHXVXNA3e5/w8C6b2Boe+Qj+86hlhZhNm ImRs4OnWLBxxhd1SeFIIKp2+sJj4BDwWKiShnN/cnkHn23Cdt3gmL3bSw0biP4xNVTWguP jopv5lmsQlNRxkKCXjSWr6tTryXx4q0= X-MC-Unique: tA05cpU_Os2C-rr3RlJHoA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K3LgKqkhadTo7/QXPWkc+DMJkUptYIYD3Sw6SI9dKls=; b=EatZ6k7HLlnzKvLZGDTiIGhXapeMroMbrvoQetyQmf0VFGKOg6vp42FuiFqWw6CKB+ kItP2VhnoP05KRGxwMjL7puKDDw4OgYvd+jVMLQzMCe5m8wJIbzcSsuEt+rqqma2SaL8 oN5jPSu4/F0D+I3z2C95h0O1mKdU2tg5NbbDfXq1IawbEzuiw0M7whJ0vnWaXGZbNNHU bSFxUYFrgTaMLhSlCo1oAM+u+dv0O6zYsEAMjdl62epVwp+SefqQ1gTG/8hE1MYMhnck RbALKOmTjjE0I5NUeh6eVVshVwQHpxf1+IUeTqcVZ8YUX/sQtgi6EV55Y3/olZfFs+w4 wucg== X-Gm-Message-State: AOAM531bDDv7qZonhIvypQvdoIkQrrAr8fESJDxz9hj6qTlApjV3plYB shnTLqoyuevghEEDN3UqcoU1NmLU50S0JL0N9BGk7mxhw1a7hIoZ1t3MmXRxE6GmpZiKEdVrDUX JrBc+TkruvPwIvA== X-Received: by 2002:aa7:d413:: with SMTP id z19mr8921199edq.37.1621366380524; Tue, 18 May 2021 12:33:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxOJProGVJIpK9IfUSNguPGAvCWpHvGKuSj97/VO/WhFJ9HLYqBtII3F2soXOcmn3wKt/maqA== X-Received: by 2002:aa7:d413:: with SMTP id z19mr8921177edq.37.1621366380175; Tue, 18 May 2021 12:33:00 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland Subject: [PATCH v5 4/6] hw/block/fdc: Extract ISA floppy controllers to fdc-isa.c Date: Tue, 18 May 2021 21:32:37 +0200 Message-Id: <20210518193239.1725624-5-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Some machines use floppy controllers via the SysBus interface, and don't need to pull in all the ISA code. Extract the ISA specific code to a new unit: fdc-isa.c, and add a new Kconfig symbol: "FDC_ISA". Reviewed-by: John Snow Acked-by: Mark Cave-Ayland Reviewed-by: Mark Cave-Ayland Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- v5: Move k->register_channel() call too --- hw/block/fdc-isa.c | 319 +++++++++++++++++++++++++++++++++++++++++++ hw/block/fdc.c | 265 ----------------------------------- MAINTAINERS | 1 + hw/block/Kconfig | 4 + hw/block/meson.build | 1 + hw/i386/Kconfig | 2 +- hw/isa/Kconfig | 8 +- hw/sparc64/Kconfig | 2 +- 8 files changed, 331 insertions(+), 271 deletions(-) create mode 100644 hw/block/fdc-isa.c diff --git a/hw/block/fdc-isa.c b/hw/block/fdc-isa.c new file mode 100644 index 00000000000..0e22a10732d --- /dev/null +++ b/hw/block/fdc-isa.c @@ -0,0 +1,319 @@ +/* + * QEMU Floppy disk emulator (Intel 82078) + * + * Copyright (c) 2003, 2007 Jocelyn Mayer + * Copyright (c) 2008 Herv=C3=A9 Poussineau + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ +/* + * The controller is used in Sun4m systems in a slightly different + * way. There are changes in DOR register and DMA is not available. + */ + +#include "qemu/osdep.h" +#include "hw/block/fdc.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/timer.h" +#include "hw/acpi/aml-build.h" +#include "hw/irq.h" +#include "hw/isa/isa.h" +#include "hw/qdev-properties.h" +#include "hw/qdev-properties-system.h" +#include "migration/vmstate.h" +#include "hw/block/block.h" +#include "sysemu/block-backend.h" +#include "sysemu/blockdev.h" +#include "sysemu/sysemu.h" +#include "qemu/log.h" +#include "qemu/main-loop.h" +#include "qemu/module.h" +#include "trace.h" +#include "qom/object.h" +#include "fdc-internal.h" + +OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlISABus, ISA_FDC) + +struct FDCtrlISABus { + /*< private >*/ + ISADevice parent_obj; + /*< public >*/ + + uint32_t iobase; + uint32_t irq; + uint32_t dma; + struct FDCtrl state; + int32_t bootindexA; + int32_t bootindexB; +}; + +static void fdctrl_external_reset_isa(DeviceState *d) +{ + FDCtrlISABus *isa =3D ISA_FDC(d); + FDCtrl *s =3D &isa->state; + + fdctrl_reset(s, 0); +} + +void isa_fdc_init_drives(ISADevice *fdc, DriveInfo **fds) +{ + fdctrl_init_drives(&ISA_FDC(fdc)->state.bus, fds); +} + +static const MemoryRegionPortio fdc_portio_list[] =3D { + { 1, 5, 1, .read =3D fdctrl_read, .write =3D fdctrl_write }, + { 7, 1, 1, .read =3D fdctrl_read, .write =3D fdctrl_write }, + PORTIO_END_OF_LIST(), +}; + +static void isabus_fdc_realize(DeviceState *dev, Error **errp) +{ + ISADevice *isadev =3D ISA_DEVICE(dev); + FDCtrlISABus *isa =3D ISA_FDC(dev); + FDCtrl *fdctrl =3D &isa->state; + Error *err =3D NULL; + + isa_register_portio_list(isadev, &fdctrl->portio_list, + isa->iobase, fdc_portio_list, fdctrl, + "fdc"); + + isa_init_irq(isadev, &fdctrl->irq, isa->irq); + fdctrl->dma_chann =3D isa->dma; + if (fdctrl->dma_chann !=3D -1) { + IsaDmaClass *k; + fdctrl->dma =3D isa_get_dma(isa_bus_from_device(isadev), isa->dma); + if (!fdctrl->dma) { + error_setg(errp, "ISA controller does not support DMA"); + return; + } + k =3D ISADMA_GET_CLASS(fdctrl->dma); + k->register_channel(fdctrl->dma, fdctrl->dma_chann, + &fdctrl_transfer_handler, fdctrl); + } + + qdev_set_legacy_instance_id(dev, isa->iobase, 2); + + fdctrl_realize_common(dev, fdctrl, &err); + if (err !=3D NULL) { + error_propagate(errp, err); + return; + } +} + +FloppyDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i) +{ + FDCtrlISABus *isa =3D ISA_FDC(fdc); + + return isa->state.drives[i].drive; +} + +static void isa_fdc_get_drive_max_chs(FloppyDriveType type, uint8_t *maxc, + uint8_t *maxh, uint8_t *maxs) +{ + const FDFormat *fdf; + + *maxc =3D *maxh =3D *maxs =3D 0; + for (fdf =3D fd_formats; fdf->drive !=3D FLOPPY_DRIVE_TYPE_NONE; fdf++= ) { + if (fdf->drive !=3D type) { + continue; + } + if (*maxc < fdf->max_track) { + *maxc =3D fdf->max_track; + } + if (*maxh < fdf->max_head) { + *maxh =3D fdf->max_head; + } + if (*maxs < fdf->last_sect) { + *maxs =3D fdf->last_sect; + } + } + (*maxc)--; +} + +static Aml *build_fdinfo_aml(int idx, FloppyDriveType type) +{ + Aml *dev, *fdi; + uint8_t maxc, maxh, maxs; + + isa_fdc_get_drive_max_chs(type, &maxc, &maxh, &maxs); + + dev =3D aml_device("FLP%c", 'A' + idx); + + aml_append(dev, aml_name_decl("_ADR", aml_int(idx))); + + fdi =3D aml_package(16); + aml_append(fdi, aml_int(idx)); /* Drive Number */ + aml_append(fdi, + aml_int(cmos_get_fd_drive_type(type))); /* Device Type */ + /* + * the values below are the limits of the drive, and are thus independ= ent + * of the inserted media + */ + aml_append(fdi, aml_int(maxc)); /* Maximum Cylinder Number */ + aml_append(fdi, aml_int(maxs)); /* Maximum Sector Number */ + aml_append(fdi, aml_int(maxh)); /* Maximum Head Number */ + /* + * SeaBIOS returns the below values for int 0x13 func 0x08 regardless = of + * the drive type, so shall we + */ + aml_append(fdi, aml_int(0xAF)); /* disk_specify_1 */ + aml_append(fdi, aml_int(0x02)); /* disk_specify_2 */ + aml_append(fdi, aml_int(0x25)); /* disk_motor_wait */ + aml_append(fdi, aml_int(0x02)); /* disk_sector_siz */ + aml_append(fdi, aml_int(0x12)); /* disk_eot */ + aml_append(fdi, aml_int(0x1B)); /* disk_rw_gap */ + aml_append(fdi, aml_int(0xFF)); /* disk_dtl */ + aml_append(fdi, aml_int(0x6C)); /* disk_formt_gap */ + aml_append(fdi, aml_int(0xF6)); /* disk_fill */ + aml_append(fdi, aml_int(0x0F)); /* disk_head_sttl */ + aml_append(fdi, aml_int(0x08)); /* disk_motor_strt */ + + aml_append(dev, aml_name_decl("_FDI", fdi)); + return dev; +} + +int cmos_get_fd_drive_type(FloppyDriveType fd0) +{ + int val; + + switch (fd0) { + case FLOPPY_DRIVE_TYPE_144: + /* 1.44 Mb 3"5 drive */ + val =3D 4; + break; + case FLOPPY_DRIVE_TYPE_288: + /* 2.88 Mb 3"5 drive */ + val =3D 5; + break; + case FLOPPY_DRIVE_TYPE_120: + /* 1.2 Mb 5"5 drive */ + val =3D 2; + break; + case FLOPPY_DRIVE_TYPE_NONE: + default: + val =3D 0; + break; + } + return val; +} + +static void fdc_isa_build_aml(ISADevice *isadev, Aml *scope) +{ + Aml *dev; + Aml *crs; + int i; + +#define ACPI_FDE_MAX_FD 4 + uint32_t fde_buf[5] =3D { + 0, 0, 0, 0, /* presence of floppy drives #0 - #3 */ + cpu_to_le32(2) /* tape presence (2 =3D=3D never present) */ + }; + + crs =3D aml_resource_template(); + aml_append(crs, aml_io(AML_DECODE16, 0x03F2, 0x03F2, 0x00, 0x04)); + aml_append(crs, aml_io(AML_DECODE16, 0x03F7, 0x03F7, 0x00, 0x01)); + aml_append(crs, aml_irq_no_flags(6)); + aml_append(crs, + aml_dma(AML_COMPATIBILITY, AML_NOTBUSMASTER, AML_TRANSFER8, 2)); + + dev =3D aml_device("FDC0"); + aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0700"))); + aml_append(dev, aml_name_decl("_CRS", crs)); + + for (i =3D 0; i < MIN(MAX_FD, ACPI_FDE_MAX_FD); i++) { + FloppyDriveType type =3D isa_fdc_get_drive_type(isadev, i); + + if (type < FLOPPY_DRIVE_TYPE_NONE) { + fde_buf[i] =3D cpu_to_le32(1); /* drive present */ + aml_append(dev, build_fdinfo_aml(i, type)); + } + } + aml_append(dev, aml_name_decl("_FDE", + aml_buffer(sizeof(fde_buf), (uint8_t *)fde_buf))); + + aml_append(scope, dev); +} + +static const VMStateDescription vmstate_isa_fdc =3D { + .name =3D "fdc", + .version_id =3D 2, + .minimum_version_id =3D 2, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(state, FDCtrlISABus, 0, vmstate_fdc, FDCtrl), + VMSTATE_END_OF_LIST() + } +}; + +static Property isa_fdc_properties[] =3D { + DEFINE_PROP_UINT32("iobase", FDCtrlISABus, iobase, 0x3f0), + DEFINE_PROP_UINT32("irq", FDCtrlISABus, irq, 6), + DEFINE_PROP_UINT32("dma", FDCtrlISABus, dma, 2), + DEFINE_PROP_SIGNED("fdtypeA", FDCtrlISABus, state.qdev_for_drives[0].t= ype, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_SIGNED("fdtypeB", FDCtrlISABus, state.qdev_for_drives[1].t= ype, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_SIGNED("fallback", FDCtrlISABus, state.fallback, + FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_END_OF_LIST(), +}; + +static void isabus_fdc_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ISADeviceClass *isa =3D ISA_DEVICE_CLASS(klass); + + dc->realize =3D isabus_fdc_realize; + dc->fw_name =3D "fdc"; + dc->reset =3D fdctrl_external_reset_isa; + dc->vmsd =3D &vmstate_isa_fdc; + isa->build_aml =3D fdc_isa_build_aml; + device_class_set_props(dc, isa_fdc_properties); + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +} + +static void isabus_fdc_instance_init(Object *obj) +{ + FDCtrlISABus *isa =3D ISA_FDC(obj); + + device_add_bootindex_property(obj, &isa->bootindexA, + "bootindexA", "/floppy@0", + DEVICE(obj)); + device_add_bootindex_property(obj, &isa->bootindexB, + "bootindexB", "/floppy@1", + DEVICE(obj)); +} + +static const TypeInfo isa_fdc_info =3D { + .name =3D TYPE_ISA_FDC, + .parent =3D TYPE_ISA_DEVICE, + .instance_size =3D sizeof(FDCtrlISABus), + .class_init =3D isabus_fdc_class_init, + .instance_init =3D isabus_fdc_instance_init, +}; + +static void isa_fdc_register_types(void) +{ + type_register_static(&isa_fdc_info); +} + +type_init(isa_fdc_register_types) diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 20ddeb98d83..aa70eb97c6a 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -32,7 +32,6 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/timer.h" -#include "hw/acpi/aml-build.h" #include "hw/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" @@ -785,19 +784,6 @@ struct FDCtrlSysBus { struct FDCtrl state; }; =20 -OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlISABus, ISA_FDC) - -struct FDCtrlISABus { - ISADevice parent_obj; - - uint32_t iobase; - uint32_t irq; - uint32_t dma; - struct FDCtrl state; - int32_t bootindexA; - int32_t bootindexB; -}; - uint32_t fdctrl_read(void *opaque, uint32_t reg) { FDCtrl *fdctrl =3D opaque; @@ -1121,14 +1107,6 @@ static void fdctrl_external_reset_sysbus(DeviceState= *d) fdctrl_reset(s, 0); } =20 -static void fdctrl_external_reset_isa(DeviceState *d) -{ - FDCtrlISABus *isa =3D ISA_FDC(d); - FDCtrl *s =3D &isa->state; - - fdctrl_reset(s, 0); -} - static void fdctrl_handle_tc(void *opaque, int irq, int level) { trace_fdctrl_tc_pulse(level); @@ -2389,11 +2367,6 @@ void fdctrl_init_drives(FloppyBus *bus, DriveInfo **= fds) } } =20 -void isa_fdc_init_drives(ISADevice *fdc, DriveInfo **fds) -{ - fdctrl_init_drives(&ISA_FDC(fdc)->state.bus, fds); -} - void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds) { @@ -2464,14 +2437,6 @@ void fdctrl_realize_common(DeviceState *dev, FDCtrl = *fdctrl, Error **errp) fdctrl->config =3D FD_CONFIG_EIS | FD_CONFIG_EFIFO; /* Implicit seek, = polling & FIFO enabled */ fdctrl->num_floppies =3D MAX_FD; =20 - if (fdctrl->dma_chann !=3D -1) { - IsaDmaClass *k; - assert(fdctrl->dma); - k =3D ISADMA_GET_CLASS(fdctrl->dma); - k->register_channel(fdctrl->dma, fdctrl->dma_chann, - &fdctrl_transfer_handler, fdctrl); - } - floppy_bus_create(fdctrl, &fdctrl->bus, dev); =20 for (i =3D 0; i < MAX_FD; i++) { @@ -2482,41 +2447,6 @@ void fdctrl_realize_common(DeviceState *dev, FDCtrl = *fdctrl, Error **errp) } } =20 -static const MemoryRegionPortio fdc_portio_list[] =3D { - { 1, 5, 1, .read =3D fdctrl_read, .write =3D fdctrl_write }, - { 7, 1, 1, .read =3D fdctrl_read, .write =3D fdctrl_write }, - PORTIO_END_OF_LIST(), -}; - -static void isabus_fdc_realize(DeviceState *dev, Error **errp) -{ - ISADevice *isadev =3D ISA_DEVICE(dev); - FDCtrlISABus *isa =3D ISA_FDC(dev); - FDCtrl *fdctrl =3D &isa->state; - Error *err =3D NULL; - - isa_register_portio_list(isadev, &fdctrl->portio_list, - isa->iobase, fdc_portio_list, fdctrl, - "fdc"); - - isa_init_irq(isadev, &fdctrl->irq, isa->irq); - fdctrl->dma_chann =3D isa->dma; - if (fdctrl->dma_chann !=3D -1) { - fdctrl->dma =3D isa_get_dma(isa_bus_from_device(isadev), isa->dma); - if (!fdctrl->dma) { - error_setg(errp, "ISA controller does not support DMA"); - return; - } - } - - qdev_set_legacy_instance_id(dev, isa->iobase, 2); - fdctrl_realize_common(dev, fdctrl, &err); - if (err !=3D NULL) { - error_propagate(errp, err); - return; - } -} - static void sysbus_fdc_initfn(Object *obj) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); @@ -2564,200 +2494,6 @@ static void sysbus_fdc_common_realize(DeviceState *= dev, Error **errp) fdctrl_realize_common(dev, fdctrl, errp); } =20 -FloppyDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i) -{ - FDCtrlISABus *isa =3D ISA_FDC(fdc); - - return isa->state.drives[i].drive; -} - -static void isa_fdc_get_drive_max_chs(FloppyDriveType type, uint8_t *maxc, - uint8_t *maxh, uint8_t *maxs) -{ - const FDFormat *fdf; - - *maxc =3D *maxh =3D *maxs =3D 0; - for (fdf =3D fd_formats; fdf->drive !=3D FLOPPY_DRIVE_TYPE_NONE; fdf++= ) { - if (fdf->drive !=3D type) { - continue; - } - if (*maxc < fdf->max_track) { - *maxc =3D fdf->max_track; - } - if (*maxh < fdf->max_head) { - *maxh =3D fdf->max_head; - } - if (*maxs < fdf->last_sect) { - *maxs =3D fdf->last_sect; - } - } - (*maxc)--; -} - -static Aml *build_fdinfo_aml(int idx, FloppyDriveType type) -{ - Aml *dev, *fdi; - uint8_t maxc, maxh, maxs; - - isa_fdc_get_drive_max_chs(type, &maxc, &maxh, &maxs); - - dev =3D aml_device("FLP%c", 'A' + idx); - - aml_append(dev, aml_name_decl("_ADR", aml_int(idx))); - - fdi =3D aml_package(16); - aml_append(fdi, aml_int(idx)); /* Drive Number */ - aml_append(fdi, - aml_int(cmos_get_fd_drive_type(type))); /* Device Type */ - /* - * the values below are the limits of the drive, and are thus independ= ent - * of the inserted media - */ - aml_append(fdi, aml_int(maxc)); /* Maximum Cylinder Number */ - aml_append(fdi, aml_int(maxs)); /* Maximum Sector Number */ - aml_append(fdi, aml_int(maxh)); /* Maximum Head Number */ - /* - * SeaBIOS returns the below values for int 0x13 func 0x08 regardless = of - * the drive type, so shall we - */ - aml_append(fdi, aml_int(0xAF)); /* disk_specify_1 */ - aml_append(fdi, aml_int(0x02)); /* disk_specify_2 */ - aml_append(fdi, aml_int(0x25)); /* disk_motor_wait */ - aml_append(fdi, aml_int(0x02)); /* disk_sector_siz */ - aml_append(fdi, aml_int(0x12)); /* disk_eot */ - aml_append(fdi, aml_int(0x1B)); /* disk_rw_gap */ - aml_append(fdi, aml_int(0xFF)); /* disk_dtl */ - aml_append(fdi, aml_int(0x6C)); /* disk_formt_gap */ - aml_append(fdi, aml_int(0xF6)); /* disk_fill */ - aml_append(fdi, aml_int(0x0F)); /* disk_head_sttl */ - aml_append(fdi, aml_int(0x08)); /* disk_motor_strt */ - - aml_append(dev, aml_name_decl("_FDI", fdi)); - return dev; -} - -int cmos_get_fd_drive_type(FloppyDriveType fd0) -{ - int val; - - switch (fd0) { - case FLOPPY_DRIVE_TYPE_144: - /* 1.44 Mb 3"5 drive */ - val =3D 4; - break; - case FLOPPY_DRIVE_TYPE_288: - /* 2.88 Mb 3"5 drive */ - val =3D 5; - break; - case FLOPPY_DRIVE_TYPE_120: - /* 1.2 Mb 5"5 drive */ - val =3D 2; - break; - case FLOPPY_DRIVE_TYPE_NONE: - default: - val =3D 0; - break; - } - return val; -} - -static void fdc_isa_build_aml(ISADevice *isadev, Aml *scope) -{ - Aml *dev; - Aml *crs; - int i; - -#define ACPI_FDE_MAX_FD 4 - uint32_t fde_buf[5] =3D { - 0, 0, 0, 0, /* presence of floppy drives #0 - #3 */ - cpu_to_le32(2) /* tape presence (2 =3D=3D never present) */ - }; - - crs =3D aml_resource_template(); - aml_append(crs, aml_io(AML_DECODE16, 0x03F2, 0x03F2, 0x00, 0x04)); - aml_append(crs, aml_io(AML_DECODE16, 0x03F7, 0x03F7, 0x00, 0x01)); - aml_append(crs, aml_irq_no_flags(6)); - aml_append(crs, - aml_dma(AML_COMPATIBILITY, AML_NOTBUSMASTER, AML_TRANSFER8, 2)); - - dev =3D aml_device("FDC0"); - aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0700"))); - aml_append(dev, aml_name_decl("_CRS", crs)); - - for (i =3D 0; i < MIN(MAX_FD, ACPI_FDE_MAX_FD); i++) { - FloppyDriveType type =3D isa_fdc_get_drive_type(isadev, i); - - if (type < FLOPPY_DRIVE_TYPE_NONE) { - fde_buf[i] =3D cpu_to_le32(1); /* drive present */ - aml_append(dev, build_fdinfo_aml(i, type)); - } - } - aml_append(dev, aml_name_decl("_FDE", - aml_buffer(sizeof(fde_buf), (uint8_t *)fde_buf))); - - aml_append(scope, dev); -} - -static const VMStateDescription vmstate_isa_fdc =3D{ - .name =3D "fdc", - .version_id =3D 2, - .minimum_version_id =3D 2, - .fields =3D (VMStateField[]) { - VMSTATE_STRUCT(state, FDCtrlISABus, 0, vmstate_fdc, FDCtrl), - VMSTATE_END_OF_LIST() - } -}; - -static Property isa_fdc_properties[] =3D { - DEFINE_PROP_UINT32("iobase", FDCtrlISABus, iobase, 0x3f0), - DEFINE_PROP_UINT32("irq", FDCtrlISABus, irq, 6), - DEFINE_PROP_UINT32("dma", FDCtrlISABus, dma, 2), - DEFINE_PROP_SIGNED("fdtypeA", FDCtrlISABus, state.qdev_for_drives[0].t= ype, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_SIGNED("fdtypeB", FDCtrlISABus, state.qdev_for_drives[1].t= ype, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_SIGNED("fallback", FDCtrlISABus, state.fallback, - FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_END_OF_LIST(), -}; - -static void isabus_fdc_class_init(ObjectClass *klass, void *data) -{ - DeviceClass *dc =3D DEVICE_CLASS(klass); - ISADeviceClass *isa =3D ISA_DEVICE_CLASS(klass); - - dc->realize =3D isabus_fdc_realize; - dc->fw_name =3D "fdc"; - dc->reset =3D fdctrl_external_reset_isa; - dc->vmsd =3D &vmstate_isa_fdc; - isa->build_aml =3D fdc_isa_build_aml; - device_class_set_props(dc, isa_fdc_properties); - set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); -} - -static void isabus_fdc_instance_init(Object *obj) -{ - FDCtrlISABus *isa =3D ISA_FDC(obj); - - device_add_bootindex_property(obj, &isa->bootindexA, - "bootindexA", "/floppy@0", - DEVICE(obj)); - device_add_bootindex_property(obj, &isa->bootindexB, - "bootindexB", "/floppy@1", - DEVICE(obj)); -} - -static const TypeInfo isa_fdc_info =3D { - .name =3D TYPE_ISA_FDC, - .parent =3D TYPE_ISA_DEVICE, - .instance_size =3D sizeof(FDCtrlISABus), - .class_init =3D isabus_fdc_class_init, - .instance_init =3D isabus_fdc_instance_init, -}; - static const VMStateDescription vmstate_sysbus_fdc =3D{ .name =3D "fdc", .version_id =3D 2, @@ -2841,7 +2577,6 @@ static const TypeInfo sysbus_fdc_type_info =3D { =20 static void fdc_register_types(void) { - type_register_static(&isa_fdc_info); type_register_static(&sysbus_fdc_type_info); type_register_static(&sysbus_fdc_info); type_register_static(&sun4m_fdc_info); diff --git a/MAINTAINERS b/MAINTAINERS index c5c32bbd36f..2dec1f6fc76 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1660,6 +1660,7 @@ L: qemu-block@nongnu.org S: Supported F: hw/block/fdc.c F: hw/block/fdc-internal.h +F: hw/block/fdc-isa.c F: include/hw/block/fdc.h F: tests/qtest/fdc-test.c T: git https://gitlab.com/jsnow/qemu.git ide diff --git a/hw/block/Kconfig b/hw/block/Kconfig index 295441e64ab..9e0b5e2efe0 100644 --- a/hw/block/Kconfig +++ b/hw/block/Kconfig @@ -1,5 +1,9 @@ config FDC bool + +config FDC_ISA + bool + select FDC # FIXME: there is no separate file for the MMIO floppy disk controller= , so # select ISA_BUS here instead of polluting each board that requires one select ISA_BUS diff --git a/hw/block/meson.build b/hw/block/meson.build index 8b0de54db1f..8cc79b5fcb4 100644 --- a/hw/block/meson.build +++ b/hw/block/meson.build @@ -5,6 +5,7 @@ )) softmmu_ss.add(when: 'CONFIG_ECC', if_true: files('ecc.c')) softmmu_ss.add(when: 'CONFIG_FDC', if_true: files('fdc.c')) +softmmu_ss.add(when: 'CONFIG_FDC_ISA', if_true: files('fdc-isa.c')) softmmu_ss.add(when: 'CONFIG_NAND', if_true: files('nand.c')) softmmu_ss.add(when: 'CONFIG_ONENAND', if_true: files('onenand.c')) softmmu_ss.add(when: 'CONFIG_PFLASH_CFI01', if_true: files('pflash_cfi01.c= ')) diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index 7f91f30877f..bb475648c97 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -23,7 +23,7 @@ config PC imply TPM_TIS_ISA imply VGA_PCI imply VIRTIO_VGA - select FDC + select FDC_ISA select I8259 select I8254 select PCKBD diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig index 7216f66a54a..96db170eff3 100644 --- a/hw/isa/Kconfig +++ b/hw/isa/Kconfig @@ -17,7 +17,7 @@ config ISA_SUPERIO bool select ISA_BUS select PCKBD - select FDC + select FDC_ISA =20 config PC87312 bool @@ -28,7 +28,7 @@ config PC87312 select MC146818RTC select SERIAL_ISA select PARALLEL - select FDC + select FDC_ISA select IDE_ISA =20 config PIIX3 @@ -47,7 +47,7 @@ config VT82C686 select ISA_SUPERIO select ACPI_SMBUS select SERIAL_ISA - select FDC + select FDC_ISA select USB_UHCI select APM =20 @@ -56,7 +56,7 @@ config SMC37C669 select ISA_SUPERIO select SERIAL_ISA select PARALLEL - select FDC + select FDC_ISA =20 config LPC_ICH9 bool diff --git a/hw/sparc64/Kconfig b/hw/sparc64/Kconfig index 980a201bb73..7e557ad17b0 100644 --- a/hw/sparc64/Kconfig +++ b/hw/sparc64/Kconfig @@ -6,7 +6,7 @@ config SUN4U imply PARALLEL select M48T59 select ISA_BUS - select FDC + select FDC_ISA select SERIAL_ISA select PCI_SABRE select IDE_CMD646 --=20 2.26.3 From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366390; cv=none; d=zohomail.com; s=zohoarc; b=heo2JJ5FOeOF593UYoZc10ONzlO2F2nvoDJRRXswBeIzKeSYPh5RljitZOQO2Fobbo4gS2iO2ZQSNqzEXeoAI5Ac/PzyNu8PCtOr+ddtigegsvlHCueM8vFd41YAEDOLH+N97eGOjC4aW0giBCPz6iqcHTHlLu+7bDOnzYOwMuA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366390; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=pP3P6ANKkzjzYjkRn/JkPRRjXJwLPk8PpxZkiXQRKWc=; b=FNm5To7o4I4HShbtQ90z6yRew3jFLXPtbc0MjjHCEZ+c/ya+Yun/f1zq04MdH7e/6NOntZZhmsc5XzCqsGZneXSxXrp//sw7isw2jK249Yn1ahWWibY9FslGHdRD+q7/5h/6Ock+AuqI2FXHkUgOOqrXjPn43AGCs6QmjaGBHqg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1621366390332255.61910332242155; Tue, 18 May 2021 12:33:10 -0700 (PDT) Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-43-w83MGYzWMrWE4yHmuMQ72A-1; Tue, 18 May 2021 15:33:07 -0400 Received: by mail-ed1-f71.google.com with SMTP id c15-20020a05640227cfb029038d710bf29cso322497ede.16 for ; Tue, 18 May 2021 12:33:07 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id x7sm10541283ejc.116.2021.05.18.12.33.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:33:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366389; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pP3P6ANKkzjzYjkRn/JkPRRjXJwLPk8PpxZkiXQRKWc=; b=WyXYSk6IjokX4uTDrmaeqPeXf3JOJ5oiR/lAhHqOAAgsqz+Ziv4kQJ+Zpd/OahWrFtYhPc x619vYPbJ7zsH4ewNC5p9w/+F94R4QTjWV9m6F1ERwFRX7qPtxOvpSvOWvCulpQusjTJJ+ dxRNKvhvTvXTnSGhzdiMxOWgWsIi6Zw= X-MC-Unique: w83MGYzWMrWE4yHmuMQ72A-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pP3P6ANKkzjzYjkRn/JkPRRjXJwLPk8PpxZkiXQRKWc=; b=o1idbByHNHXLxAhieapI6l8Gf6EAM40N/dGzSayfmmIRkZWG0PpVN76vqyy2bbjPlf lNCB7cYAShL0HBm5P2tVWa+Vx0vqhrVHA5hv0hvJzNRO367OZM0ygLjfC947KpJOnZHY ewvGMfj++XUiJ07bCrbF2vl02CwYShNyWg4014VzJLqaK1bh9+Yv/84Q+YhIvru+EpUP vtHd0de/sXfQigDnl1rONTr7C6q5tovHCjQ4cA1H+LVTwDD+I28GqaEYZpvy4sCJR5E7 DAjGp3L9GHJKkqN1uYOR+EtBEnWi4Tg2yZ43DXYeW6LiqOiTASJu2wJ6WpA07yilwxZI LMCQ== X-Gm-Message-State: AOAM533Z5/jLTjIDqWpZ8L+QltatyIRG+91p2Pmt2qqcvBNinvwTM3zM wXtA3sgMvAOFxJxdyP1ac+ntADm6zodcnsZD594eoK0nsL4tECHHUDWGSF/6MgBIvNjbl+aDA+o 1eqX09KgKnyECkg== X-Received: by 2002:a50:ed13:: with SMTP id j19mr2113795eds.190.1621366385499; Tue, 18 May 2021 12:33:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOi8h/MofkjYna/LPJm0bmELFoXV2/9TbhnGyTF2HbDXqw1sRmnJyAvYAZbqzeMAlf1E+gUw== X-Received: by 2002:a50:ed13:: with SMTP id j19mr2113764eds.190.1621366385197; Tue, 18 May 2021 12:33:05 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland Subject: [PATCH v5 5/6] hw/block/fdc: Extract SysBus floppy controllers to fdc-sysbus.c Date: Tue, 18 May 2021 21:32:38 +0200 Message-Id: <20210518193239.1725624-6-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Some machines use floppy controllers via the SysBus interface, and don't need to pull in all the SysBus code. Extract the SysBus specific code to a new unit: fdc-sysbus.c, and add a new Kconfig symbol: "FDC_SYSBUS". Reviewed-by: John Snow Acked-by: Mark Cave-Ayland Reviewed-by: Mark Cave-Ayland Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/block/fdc-sysbus.c | 249 ++++++++++++++++++++++++++++++++++++++++++ hw/block/fdc.c | 220 ------------------------------------- MAINTAINERS | 1 + hw/block/Kconfig | 4 + hw/block/meson.build | 1 + hw/block/trace-events | 2 + hw/mips/Kconfig | 2 +- hw/sparc/Kconfig | 2 +- 8 files changed, 259 insertions(+), 222 deletions(-) create mode 100644 hw/block/fdc-sysbus.c diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c new file mode 100644 index 00000000000..c6308f53004 --- /dev/null +++ b/hw/block/fdc-sysbus.c @@ -0,0 +1,249 @@ +/* + * QEMU Floppy disk emulator (Intel 82078) + * + * Copyright (c) 2003, 2007 Jocelyn Mayer + * Copyright (c) 2008 Herv=C3=A9 Poussineau + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qom/object.h" +#include "hw/sysbus.h" +#include "hw/block/fdc.h" +#include "migration/vmstate.h" +#include "fdc-internal.h" +#include "trace.h" + +#define TYPE_SYSBUS_FDC "base-sysbus-fdc" +typedef struct FDCtrlSysBusClass FDCtrlSysBusClass; +typedef struct FDCtrlSysBus FDCtrlSysBus; +DECLARE_OBJ_CHECKERS(FDCtrlSysBus, FDCtrlSysBusClass, + SYSBUS_FDC, TYPE_SYSBUS_FDC) + +struct FDCtrlSysBusClass { + /*< private >*/ + SysBusDeviceClass parent_class; + /*< public >*/ + + bool use_strict_io; +}; + +struct FDCtrlSysBus { + /*< private >*/ + SysBusDevice parent_obj; + /*< public >*/ + + struct FDCtrl state; +}; + +static uint64_t fdctrl_read_mem(void *opaque, hwaddr reg, unsigned ize) +{ + return fdctrl_read(opaque, (uint32_t)reg); +} + +static void fdctrl_write_mem(void *opaque, hwaddr reg, + uint64_t value, unsigned size) +{ + fdctrl_write(opaque, (uint32_t)reg, value); +} + +static const MemoryRegionOps fdctrl_mem_ops =3D { + .read =3D fdctrl_read_mem, + .write =3D fdctrl_write_mem, + .endianness =3D DEVICE_NATIVE_ENDIAN, +}; + +static const MemoryRegionOps fdctrl_mem_strict_ops =3D { + .read =3D fdctrl_read_mem, + .write =3D fdctrl_write_mem, + .endianness =3D DEVICE_NATIVE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 1, + }, +}; + +static void fdctrl_external_reset_sysbus(DeviceState *d) +{ + FDCtrlSysBus *sys =3D SYSBUS_FDC(d); + FDCtrl *s =3D &sys->state; + + fdctrl_reset(s, 0); +} + +static void fdctrl_handle_tc(void *opaque, int irq, int level) +{ + trace_fdctrl_tc_pulse(level); +} + +void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, + hwaddr mmio_base, DriveInfo **fds) +{ + FDCtrl *fdctrl; + DeviceState *dev; + SysBusDevice *sbd; + FDCtrlSysBus *sys; + + dev =3D qdev_new("sysbus-fdc"); + sys =3D SYSBUS_FDC(dev); + fdctrl =3D &sys->state; + fdctrl->dma_chann =3D dma_chann; /* FIXME */ + sbd =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(sbd, &error_fatal); + sysbus_connect_irq(sbd, 0, irq); + sysbus_mmio_map(sbd, 0, mmio_base); + + fdctrl_init_drives(&sys->state.bus, fds); +} + +void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, + DriveInfo **fds, qemu_irq *fdc_tc) +{ + DeviceState *dev; + FDCtrlSysBus *sys; + + dev =3D qdev_new("sun-fdtwo"); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sys =3D SYSBUS_FDC(dev); + sysbus_connect_irq(SYS_BUS_DEVICE(sys), 0, irq); + sysbus_mmio_map(SYS_BUS_DEVICE(sys), 0, io_base); + *fdc_tc =3D qdev_get_gpio_in(dev, 0); + + fdctrl_init_drives(&sys->state.bus, fds); +} + +static void sysbus_fdc_common_instance_init(Object *obj) +{ + DeviceState *dev =3D DEVICE(obj); + FDCtrlSysBusClass *sbdc =3D SYSBUS_FDC_GET_CLASS(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + FDCtrlSysBus *sys =3D SYSBUS_FDC(obj); + FDCtrl *fdctrl =3D &sys->state; + + qdev_set_legacy_instance_id(dev, 0 /* io */, 2); /* FIXME */ + + memory_region_init_io(&fdctrl->iomem, obj, + sbdc->use_strict_io ? &fdctrl_mem_strict_ops + : &fdctrl_mem_ops, + fdctrl, "fdc", 0x08); + sysbus_init_mmio(sbd, &fdctrl->iomem); + + sysbus_init_irq(sbd, &fdctrl->irq); + qdev_init_gpio_in(dev, fdctrl_handle_tc, 1); +} + +static void sysbus_fdc_realize(DeviceState *dev, Error **errp) +{ + FDCtrlSysBus *sys =3D SYSBUS_FDC(dev); + FDCtrl *fdctrl =3D &sys->state; + + fdctrl_realize_common(dev, fdctrl, errp); +} + +static const VMStateDescription vmstate_sysbus_fdc =3D { + .name =3D "fdc", + .version_id =3D 2, + .minimum_version_id =3D 2, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(state, FDCtrlSysBus, 0, vmstate_fdc, FDCtrl), + VMSTATE_END_OF_LIST() + } +}; + +static void sysbus_fdc_common_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D sysbus_fdc_realize; + dc->reset =3D fdctrl_external_reset_sysbus; + dc->vmsd =3D &vmstate_sysbus_fdc; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +} + +static const TypeInfo sysbus_fdc_common_typeinfo =3D { + .name =3D TYPE_SYSBUS_FDC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(FDCtrlSysBus), + .instance_init =3D sysbus_fdc_common_instance_init, + .abstract =3D true, + .class_init =3D sysbus_fdc_common_class_init, + .class_size =3D sizeof(FDCtrlSysBusClass), +}; + +static Property sysbus_fdc_properties[] =3D { + DEFINE_PROP_SIGNED("fdtypeA", FDCtrlSysBus, state.qdev_for_drives[0].t= ype, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_SIGNED("fdtypeB", FDCtrlSysBus, state.qdev_for_drives[1].t= ype, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback, + FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_END_OF_LIST(), +}; + +static void sysbus_fdc_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_props(dc, sysbus_fdc_properties); +} + +static const TypeInfo sysbus_fdc_typeinfo =3D { + .name =3D "sysbus-fdc", + .parent =3D TYPE_SYSBUS_FDC, + .class_init =3D sysbus_fdc_class_init, +}; + +static Property sun4m_fdc_properties[] =3D { + DEFINE_PROP_SIGNED("fdtype", FDCtrlSysBus, state.qdev_for_drives[0].ty= pe, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback, + FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_END_OF_LIST(), +}; + +static void sun4m_fdc_class_init(ObjectClass *klass, void *data) +{ + FDCtrlSysBusClass *sbdc =3D SYSBUS_FDC_CLASS(klass); + DeviceClass *dc =3D DEVICE_CLASS(klass); + + sbdc->use_strict_io =3D true; + device_class_set_props(dc, sun4m_fdc_properties); +} + +static const TypeInfo sun4m_fdc_typeinfo =3D { + .name =3D "sun-fdtwo", + .parent =3D TYPE_SYSBUS_FDC, + .class_init =3D sun4m_fdc_class_init, +}; + +static void sysbus_fdc_register_types(void) +{ + type_register_static(&sysbus_fdc_common_typeinfo); + type_register_static(&sysbus_fdc_typeinfo); + type_register_static(&sun4m_fdc_typeinfo); +} + +type_init(sysbus_fdc_register_types) diff --git a/hw/block/fdc.c b/hw/block/fdc.c index aa70eb97c6a..9014cd30b3a 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -36,7 +36,6 @@ #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" -#include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/block/block.h" #include "sysemu/block-backend.h" @@ -773,17 +772,6 @@ static FloppyDriveType get_fallback_drive_type(FDrive = *drv) return drv->fdctrl->fallback; } =20 -#define TYPE_SYSBUS_FDC "base-sysbus-fdc" -OBJECT_DECLARE_SIMPLE_TYPE(FDCtrlSysBus, SYSBUS_FDC) - -struct FDCtrlSysBus { - /*< private >*/ - SysBusDevice parent_obj; - /*< public >*/ - - struct FDCtrl state; -}; - uint32_t fdctrl_read(void *opaque, uint32_t reg) { FDCtrl *fdctrl =3D opaque; @@ -848,34 +836,6 @@ void fdctrl_write(void *opaque, uint32_t reg, uint32_t= value) } } =20 -static uint64_t fdctrl_read_mem (void *opaque, hwaddr reg, - unsigned ize) -{ - return fdctrl_read(opaque, (uint32_t)reg); -} - -static void fdctrl_write_mem (void *opaque, hwaddr reg, - uint64_t value, unsigned size) -{ - fdctrl_write(opaque, (uint32_t)reg, value); -} - -static const MemoryRegionOps fdctrl_mem_ops =3D { - .read =3D fdctrl_read_mem, - .write =3D fdctrl_write_mem, - .endianness =3D DEVICE_NATIVE_ENDIAN, -}; - -static const MemoryRegionOps fdctrl_mem_strict_ops =3D { - .read =3D fdctrl_read_mem, - .write =3D fdctrl_write_mem, - .endianness =3D DEVICE_NATIVE_ENDIAN, - .valid =3D { - .min_access_size =3D 1, - .max_access_size =3D 1, - }, -}; - static bool fdrive_media_changed_needed(void *opaque) { FDrive *drive =3D opaque; @@ -1099,19 +1059,6 @@ const VMStateDescription vmstate_fdc =3D { } }; =20 -static void fdctrl_external_reset_sysbus(DeviceState *d) -{ - FDCtrlSysBus *sys =3D SYSBUS_FDC(d); - FDCtrl *s =3D &sys->state; - - fdctrl_reset(s, 0); -} - -static void fdctrl_handle_tc(void *opaque, int irq, int level) -{ - trace_fdctrl_tc_pulse(level); -} - /* Change IRQ state */ static void fdctrl_reset_irq(FDCtrl *fdctrl) { @@ -2367,42 +2314,6 @@ void fdctrl_init_drives(FloppyBus *bus, DriveInfo **= fds) } } =20 -void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, - hwaddr mmio_base, DriveInfo **fds) -{ - FDCtrl *fdctrl; - DeviceState *dev; - SysBusDevice *sbd; - FDCtrlSysBus *sys; - - dev =3D qdev_new("sysbus-fdc"); - sys =3D SYSBUS_FDC(dev); - fdctrl =3D &sys->state; - fdctrl->dma_chann =3D dma_chann; /* FIXME */ - sbd =3D SYS_BUS_DEVICE(dev); - sysbus_realize_and_unref(sbd, &error_fatal); - sysbus_connect_irq(sbd, 0, irq); - sysbus_mmio_map(sbd, 0, mmio_base); - - fdctrl_init_drives(&sys->state.bus, fds); -} - -void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, - DriveInfo **fds, qemu_irq *fdc_tc) -{ - DeviceState *dev; - FDCtrlSysBus *sys; - - dev =3D qdev_new("sun-fdtwo"); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - sys =3D SYSBUS_FDC(dev); - sysbus_connect_irq(SYS_BUS_DEVICE(sys), 0, irq); - sysbus_mmio_map(SYS_BUS_DEVICE(sys), 0, io_base); - *fdc_tc =3D qdev_get_gpio_in(dev, 0); - - fdctrl_init_drives(&sys->state.bus, fds); -} - void fdctrl_realize_common(DeviceState *dev, FDCtrl *fdctrl, Error **errp) { int i, j; @@ -2447,139 +2358,8 @@ void fdctrl_realize_common(DeviceState *dev, FDCtrl= *fdctrl, Error **errp) } } =20 -static void sysbus_fdc_initfn(Object *obj) -{ - SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); - FDCtrlSysBus *sys =3D SYSBUS_FDC(obj); - FDCtrl *fdctrl =3D &sys->state; - - fdctrl->dma_chann =3D -1; - - memory_region_init_io(&fdctrl->iomem, obj, &fdctrl_mem_ops, fdctrl, - "fdc", 0x08); - sysbus_init_mmio(sbd, &fdctrl->iomem); -} - -static void sun4m_fdc_initfn(Object *obj) -{ - SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); - FDCtrlSysBus *sys =3D SYSBUS_FDC(obj); - FDCtrl *fdctrl =3D &sys->state; - - fdctrl->dma_chann =3D -1; - - memory_region_init_io(&fdctrl->iomem, obj, &fdctrl_mem_strict_ops, - fdctrl, "fdctrl", 0x08); - sysbus_init_mmio(sbd, &fdctrl->iomem); -} - -static void sysbus_fdc_common_initfn(Object *obj) -{ - DeviceState *dev =3D DEVICE(obj); - SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); - FDCtrlSysBus *sys =3D SYSBUS_FDC(obj); - FDCtrl *fdctrl =3D &sys->state; - - qdev_set_legacy_instance_id(dev, 0 /* io */, 2); /* FIXME */ - - sysbus_init_irq(sbd, &fdctrl->irq); - qdev_init_gpio_in(dev, fdctrl_handle_tc, 1); -} - -static void sysbus_fdc_common_realize(DeviceState *dev, Error **errp) -{ - FDCtrlSysBus *sys =3D SYSBUS_FDC(dev); - FDCtrl *fdctrl =3D &sys->state; - - fdctrl_realize_common(dev, fdctrl, errp); -} - -static const VMStateDescription vmstate_sysbus_fdc =3D{ - .name =3D "fdc", - .version_id =3D 2, - .minimum_version_id =3D 2, - .fields =3D (VMStateField[]) { - VMSTATE_STRUCT(state, FDCtrlSysBus, 0, vmstate_fdc, FDCtrl), - VMSTATE_END_OF_LIST() - } -}; - -static Property sysbus_fdc_properties[] =3D { - DEFINE_PROP_SIGNED("fdtypeA", FDCtrlSysBus, state.qdev_for_drives[0].t= ype, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_SIGNED("fdtypeB", FDCtrlSysBus, state.qdev_for_drives[1].t= ype, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback, - FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_END_OF_LIST(), -}; - -static void sysbus_fdc_class_init(ObjectClass *klass, void *data) -{ - DeviceClass *dc =3D DEVICE_CLASS(klass); - - device_class_set_props(dc, sysbus_fdc_properties); - set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); -} - -static const TypeInfo sysbus_fdc_info =3D { - .name =3D "sysbus-fdc", - .parent =3D TYPE_SYSBUS_FDC, - .instance_init =3D sysbus_fdc_initfn, - .class_init =3D sysbus_fdc_class_init, -}; - -static Property sun4m_fdc_properties[] =3D { - DEFINE_PROP_SIGNED("fdtype", FDCtrlSysBus, state.qdev_for_drives[0].ty= pe, - FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback, - FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, - FloppyDriveType), - DEFINE_PROP_END_OF_LIST(), -}; - -static void sun4m_fdc_class_init(ObjectClass *klass, void *data) -{ - DeviceClass *dc =3D DEVICE_CLASS(klass); - - device_class_set_props(dc, sun4m_fdc_properties); - set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); -} - -static const TypeInfo sun4m_fdc_info =3D { - .name =3D "sun-fdtwo", - .parent =3D TYPE_SYSBUS_FDC, - .instance_init =3D sun4m_fdc_initfn, - .class_init =3D sun4m_fdc_class_init, -}; - -static void sysbus_fdc_common_class_init(ObjectClass *klass, void *data) -{ - DeviceClass *dc =3D DEVICE_CLASS(klass); - - dc->realize =3D sysbus_fdc_common_realize; - dc->reset =3D fdctrl_external_reset_sysbus; - dc->vmsd =3D &vmstate_sysbus_fdc; -} - -static const TypeInfo sysbus_fdc_type_info =3D { - .name =3D TYPE_SYSBUS_FDC, - .parent =3D TYPE_SYS_BUS_DEVICE, - .instance_size =3D sizeof(FDCtrlSysBus), - .instance_init =3D sysbus_fdc_common_initfn, - .abstract =3D true, - .class_init =3D sysbus_fdc_common_class_init, -}; - static void fdc_register_types(void) { - type_register_static(&sysbus_fdc_type_info); - type_register_static(&sysbus_fdc_info); - type_register_static(&sun4m_fdc_info); type_register_static(&floppy_bus_info); type_register_static(&floppy_drive_info); } diff --git a/MAINTAINERS b/MAINTAINERS index 2dec1f6fc76..519e3f40795 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1661,6 +1661,7 @@ S: Supported F: hw/block/fdc.c F: hw/block/fdc-internal.h F: hw/block/fdc-isa.c +F: hw/block/fdc-sysbus.c F: include/hw/block/fdc.h F: tests/qtest/fdc-test.c T: git https://gitlab.com/jsnow/qemu.git ide diff --git a/hw/block/Kconfig b/hw/block/Kconfig index 9e0b5e2efe0..e232f108f2e 100644 --- a/hw/block/Kconfig +++ b/hw/block/Kconfig @@ -8,6 +8,10 @@ config FDC_ISA # select ISA_BUS here instead of polluting each board that requires one select ISA_BUS =20 +config FDC_SYSBUS + bool + select FDC + config SSI_M25P80 bool =20 diff --git a/hw/block/meson.build b/hw/block/meson.build index 8cc79b5fcb4..2389326112a 100644 --- a/hw/block/meson.build +++ b/hw/block/meson.build @@ -6,6 +6,7 @@ softmmu_ss.add(when: 'CONFIG_ECC', if_true: files('ecc.c')) softmmu_ss.add(when: 'CONFIG_FDC', if_true: files('fdc.c')) softmmu_ss.add(when: 'CONFIG_FDC_ISA', if_true: files('fdc-isa.c')) +softmmu_ss.add(when: 'CONFIG_FDC_SYSBUS', if_true: files('fdc-sysbus.c')) softmmu_ss.add(when: 'CONFIG_NAND', if_true: files('nand.c')) softmmu_ss.add(when: 'CONFIG_ONENAND', if_true: files('onenand.c')) softmmu_ss.add(when: 'CONFIG_PFLASH_CFI01', if_true: files('pflash_cfi01.c= ')) diff --git a/hw/block/trace-events b/hw/block/trace-events index 7b26fc738f0..5d8adbbe678 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -3,6 +3,8 @@ # fdc.c fdc_ioport_read(uint8_t reg, uint8_t value) "read reg 0x%02x val 0x%02x" fdc_ioport_write(uint8_t reg, uint8_t value) "write reg 0x%02x val 0x%02x" + +# fdc-sysbus.c fdctrl_tc_pulse(int level) "TC pulse: %u" =20 # pflash_cfi01.c diff --git a/hw/mips/Kconfig b/hw/mips/Kconfig index aadd436bf4e..c245e881a2b 100644 --- a/hw/mips/Kconfig +++ b/hw/mips/Kconfig @@ -20,7 +20,7 @@ config JAZZ select G364FB select DP8393X select ESP - select FDC + select FDC_SYSBUS select MC146818RTC select PCKBD select SERIAL diff --git a/hw/sparc/Kconfig b/hw/sparc/Kconfig index 8dcb10086fd..79d58beb7a6 100644 --- a/hw/sparc/Kconfig +++ b/hw/sparc/Kconfig @@ -8,7 +8,7 @@ config SUN4M select UNIMP select ESCC select ESP - select FDC + select FDC_SYSBUS select SLAVIO select LANCE select M48T59 --=20 2.26.3 From nobody Fri May 17 07:47:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621366394; cv=none; d=zohomail.com; s=zohoarc; b=gD0gVWyz3gCM3gOn9GisbLnJjiLFCWVkjvGCqfpfE9xtsjbcTkAtJXA3nCqb5QzLLERJghmaMTQpPYxy/BB1R5cDJD012d69DUbR+JcSy/3ArONATxY2ZH2u5dNNDVSzgOFnRVKhUpjFdg8oWhmMOXxQRjuvKgIK/8gF17Rww0k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621366394; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=6ktb/E9EO0a25OO2SuCF411Xiw3RFQnNg5asaFxGDPs=; b=h7JBBlMueQfvggavL7zgjdt7SyBDu5Vqy1l+paIgQJo8tUFTpy5r8L95c97aEXZzAgVzViLMT7obyShnrMgXAmtpRoX9SkTNUw9YFVEa/Xpqm7BdZIzisYyLOcoiOjnnRrbJm84CyaGkMG1zOOxSTsaTUxmozQwFiuiYBLuopBk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=philmd@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1621366394210464.2134783571428; Tue, 18 May 2021 12:33:14 -0700 (PDT) Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-8-fM4viR3FPt2PSr4LQu64PA-1; Tue, 18 May 2021 15:33:11 -0400 Received: by mail-ed1-f70.google.com with SMTP id d4-20020aa7ce040000b029038d1d0524d0so5569471edv.3 for ; Tue, 18 May 2021 12:33:11 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.redhat.com (31.red-83-51-215.dynamicip.rima-tde.net. [83.51.215.31]) by smtp.gmail.com with ESMTPSA id t2sm11023385edd.58.2021.05.18.12.33.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 12:33:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621366393; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6ktb/E9EO0a25OO2SuCF411Xiw3RFQnNg5asaFxGDPs=; b=QcvJIWOLxq2hD7/1ox4pUfVDBWoP+b+6EFTDqaHZvfaFozMGvZa+uKuFIsUyqwwvcTrHGT 2oMRo7u6jGhpbZVl8tSqyeb+4od96P1YtfoHk+cXPDy7NyV6wDG/Z4BMz6JN6goUr+Irno pByfJPxDMH+fqeVAV6LhrV8D0Z7MS14= X-MC-Unique: fM4viR3FPt2PSr4LQu64PA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6ktb/E9EO0a25OO2SuCF411Xiw3RFQnNg5asaFxGDPs=; b=Y+t9AhPr38eVD8qyuguWFXTEHsjIe/GzpgMe3acQd7xx3McC9fTY6Ln7q5UFIXxQNg bmny5JJ0v1vgt15psWAnid7RqNEJ/jusGHUyQm6mYP626c2mMU1HGfCjhZZRjKcIaWI4 pydU+JzIpjG3JLzMgAwFckTvR6bjqQTScR8BrRgr/BAW3rN1pBscZE75wHUB7wW0neUo i8nQMhuL/tA8Fl83YTGvwUHp7JSijEJRfCeCLMCgX590RhMHOaXQsGpjNfBIOO235jGD puHHQgx5MVkmmtqSAogMdntXmjT2lC/KGyuY0dg6GN8uAuywuD36AI+2XpyCA3GKVJao KENg== X-Gm-Message-State: AOAM530HFccTHbCEUNDj/Mi0tgj4YrJuFkJFt1SX5WjAPkuZgKR2gWxg cnsWlmhynX/YVDDPiNvqrf0T+JKs09Ws+I/qv4eDMmzsZNH5haa0/rBhuVdRTgnav0hzxRAOMC1 yi8oEt4Xyivieog== X-Received: by 2002:a05:6402:3594:: with SMTP id y20mr9038461edc.63.1621366390144; Tue, 18 May 2021 12:33:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8/QIl2FKm7DQLhOXO6Vi6b57VNjydjN0U5MxNslFyu+tmA5cQQkacpvcfjx34/VI+yfvoqw== X-Received: by 2002:a05:6402:3594:: with SMTP id y20mr9038451edc.63.1621366389957; Tue, 18 May 2021 12:33:09 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, John Snow Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland Subject: [PATCH v5 6/6] hw/block/fdc: Add sysbus_fdc_init_drives() method Date: Tue, 18 May 2021 21:32:39 +0200 Message-Id: <20210518193239.1725624-7-philmd@redhat.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210518193239.1725624-1-philmd@redhat.com> References: <20210518193239.1725624-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) FDCtrlSysBus's FDCtrl state is a private field. However it is accessed by the public fdctrl_init_sysbus() and sun4m_fdctrl_init() methods. To be able to move them out of fdc-sysbus.c, first add the sysbus_fdc_init_drives() method and use it in these 2 functions. Reviewed-by: Mark Cave-Ayland Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/block/fdc.h | 2 ++ hw/block/fdc-sysbus.c | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h index 1ecca7cac7f..52e45c53078 100644 --- a/include/hw/block/fdc.h +++ b/include/hw/block/fdc.h @@ -3,6 +3,7 @@ =20 #include "exec/hwaddr.h" #include "qapi/qapi-types-block.h" +#include "hw/sysbus.h" =20 /* fdc.c */ #define MAX_FD 2 @@ -10,6 +11,7 @@ #define TYPE_ISA_FDC "isa-fdc" =20 void isa_fdc_init_drives(ISADevice *fdc, DriveInfo **fds); +void sysbus_fdc_init_drives(SysBusDevice *dev, DriveInfo **fds); void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds); void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c index c6308f53004..e4105407280 100644 --- a/hw/block/fdc-sysbus.c +++ b/hw/block/fdc-sysbus.c @@ -94,6 +94,15 @@ static void fdctrl_handle_tc(void *opaque, int irq, int = level) trace_fdctrl_tc_pulse(level); } =20 +void sysbus_fdc_init_drives(SysBusDevice *dev, DriveInfo **fds) +{ + FDCtrlSysBus *fdc; + + fdc =3D SYSBUS_FDC(dev); + + fdctrl_init_drives(&fdc->state.bus, fds); +} + void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds) { @@ -111,23 +120,23 @@ void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, sysbus_connect_irq(sbd, 0, irq); sysbus_mmio_map(sbd, 0, mmio_base); =20 - fdctrl_init_drives(&sys->state.bus, fds); + sysbus_fdc_init_drives(sbd, fds); } =20 void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, DriveInfo **fds, qemu_irq *fdc_tc) { DeviceState *dev; - FDCtrlSysBus *sys; + SysBusDevice *sbd; =20 dev =3D qdev_new("sun-fdtwo"); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - sys =3D SYSBUS_FDC(dev); - sysbus_connect_irq(SYS_BUS_DEVICE(sys), 0, irq); - sysbus_mmio_map(SYS_BUS_DEVICE(sys), 0, io_base); + sbd =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(sbd, &error_fatal); + sysbus_connect_irq(sbd, 0, irq); + sysbus_mmio_map(sbd, 0, io_base); *fdc_tc =3D qdev_get_gpio_in(dev, 0); =20 - fdctrl_init_drives(&sys->state.bus, fds); + sysbus_fdc_init_drives(sbd, fds); } =20 static void sysbus_fdc_common_instance_init(Object *obj) --=20 2.26.3