From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CD591C433F5 for ; Mon, 10 Jan 2022 05:45:41 +0000 (UTC) Received: from localhost ([::1]:53800 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n6nUy-0004n6-5Y for qemu-devel@archiver.kernel.org; Mon, 10 Jan 2022 00:45:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:52248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n6nT4-00045T-Q1 for qemu-devel@nongnu.org; Mon, 10 Jan 2022 00:43:42 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:42804) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n6nT1-00069h-9q for qemu-devel@nongnu.org; Mon, 10 Jan 2022 00:43:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1641793417; 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: in-reply-to:in-reply-to:references:references; bh=FpjsraisRotaISJwP+7hYC3UFYtCFxKUjL1HgmZJZ8Y=; b=KHbI9sD/VdzM1VZep6uCCIXcy4Amqc/uKWvhh/kBGu11aJK7dMc2NhpDbeW3+Y4YaF90Lv 6ETEdiuoedc7NrJ+LVhDTW3uHz6wlQM10kSw3lS80aUW1Z01gWWpnq1qR0D/Nb2+Vv8Fyw 8n/C7YGsIkQO6o/stCk5F3cZF5CKqoA= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-401-laVrtxozM-q88TkZ212LTQ-1; Mon, 10 Jan 2022 00:43:35 -0500 X-MC-Unique: laVrtxozM-q88TkZ212LTQ-1 Received: by mail-wm1-f71.google.com with SMTP id c5-20020a1c3505000000b00345c92c27c6so8319776wma.2 for ; Sun, 09 Jan 2022 21:43:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=FpjsraisRotaISJwP+7hYC3UFYtCFxKUjL1HgmZJZ8Y=; b=QMKMYuI/+mhBNnO6g2stEap+vNCnygz/PVXYA2e4L+AFVlnLm7MaQcPOVE4qKHD0Se OwAs6Z98xeqnWilZFI0GtDSQbFIN45tjtTionPJYviXiLnW3c9EAcAe3JLkvzcf/Vk+q QWO6drqTB0gYwNpgJwP52VOinrzV+/m9o9bho23hREkOTeZMRf5VT6iBmXH2fk3Z0ZiY ylmvaFEZ7nICafVnG8PtLPE6drjPy9YqNrAwwOIrF7p+4sas1DTLfFjBBhT32e4M08Nn 6mazp6y/uYWSrCkKwqdid1rgEqdQbAeiap/hYLcxIGfN+nOfyt2zz0Bt3H/Pz3IVeS16 Q75g== X-Gm-Message-State: AOAM5332BnoXueSPIrQ/t+fs0HvCfV+FXi3CaBZafLFCKjfEj4obye+L 0z4QS2GG8i1HSqoXrG/0uv9qVZUMKDARLxftP6rJOMEORdWniwIrFGAKj4ti0IQiNXRPblaSdxA qvOlzHRJiSt8zqfA= X-Received: by 2002:adf:eb88:: with SMTP id t8mr40519065wrn.291.1641793414242; Sun, 09 Jan 2022 21:43:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJxXlzSyd6jIHQaV6IwzBNmRfYr+kBTabRjnRuoEaBCuE8CtidBYb+K1aroUw8DkgtR7FFpRTQ== X-Received: by 2002:adf:eb88:: with SMTP id t8mr40519050wrn.291.1641793413973; Sun, 09 Jan 2022 21:43:33 -0800 (PST) Received: from redhat.com ([2a03:c5c0:107d:b60c:c297:16fe:7528:e989]) by smtp.gmail.com with ESMTPSA id i11sm4854625wrn.59.2022.01.09.21.43.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Jan 2022 21:43:33 -0800 (PST) Date: Mon, 10 Jan 2022 00:43:28 -0500 From: "Michael S. Tsirkin" To: "Longpeng(Mike)" Subject: Re: [RFC 01/10] virtio: get class_id and pci device id by the virtio id Message-ID: <20220110003243-mutt-send-email-mst@kernel.org> References: <20220105005900.860-1-longpeng2@huawei.com> <20220105005900.860-2-longpeng2@huawei.com> MIME-Version: 1.0 In-Reply-To: <20220105005900.860-2-longpeng2@huawei.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mst@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.595, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, 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: , Cc: jasowang@redhat.com, cohuck@redhat.com, qemu-devel@nongnu.org, yechuan@huawei.com, arei.gonglei@huawei.com, huangzhichao@huawei.com, stefanha@redhat.com, pbonzini@redhat.com, sgarzare@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On Wed, Jan 05, 2022 at 08:58:51AM +0800, Longpeng(Mike) wrote: > From: Longpeng > > Add helpers to get the "Transitional PCI Device ID" and "class_id" of the > deivce which is specificed by the "Virtio Device ID". ton of typos here. > These helpers will be used to build the generic vDPA device later. > > Signed-off-by: Longpeng > --- > hw/virtio/virtio-pci.c | 93 ++++++++++++++++++++++++++++++++++++++++++ > hw/virtio/virtio-pci.h | 4 ++ > 2 files changed, 97 insertions(+) > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 750aa47ec1..843085c4ea 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -19,6 +19,7 @@ > > #include "exec/memop.h" > #include "standard-headers/linux/virtio_pci.h" > +#include "standard-headers/linux/virtio_ids.h" > #include "hw/boards.h" > #include "hw/virtio/virtio.h" > #include "migration/qemu-file-types.h" > @@ -213,6 +214,95 @@ static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f) > return 0; > } > > +typedef struct VirtIOPCIIDInfo { > + uint16_t vdev_id; /* virtio id */ > + uint16_t pdev_id; /* pci device id */ > + uint16_t class_id; > +} VirtIOPCIIDInfo; if this is transitional as comment says make it explicit in the names and comments. > + > +static const VirtIOPCIIDInfo virtio_pci_id_info[] = { > + { > + .vdev_id = VIRTIO_ID_NET, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_NET, > + .class_id = PCI_CLASS_NETWORK_ETHERNET, > + }, > + { > + .vdev_id = VIRTIO_ID_BLOCK, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_BLOCK, > + .class_id = PCI_CLASS_STORAGE_SCSI, > + }, > + { > + .vdev_id = VIRTIO_ID_CONSOLE, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_CONSOLE, > + .class_id = PCI_CLASS_COMMUNICATION_OTHER, > + }, > + { > + .vdev_id = VIRTIO_ID_SCSI, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_SCSI, > + .class_id = PCI_CLASS_STORAGE_SCSI, > + }, > + { > + .vdev_id = VIRTIO_ID_9P, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_9P, > + .class_id = PCI_BASE_CLASS_NETWORK, > + }, > + { > + .vdev_id = VIRTIO_ID_VSOCK, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_VSOCK, > + .class_id = PCI_CLASS_COMMUNICATION_OTHER, > + }, > + { > + .vdev_id = VIRTIO_ID_IOMMU, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_IOMMU, > + .class_id = PCI_CLASS_OTHERS, > + }, > + { > + .vdev_id = VIRTIO_ID_MEM, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_MEM, > + .class_id = PCI_CLASS_OTHERS, > + }, > + { > + .vdev_id = VIRTIO_ID_PMEM, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_PMEM, > + .class_id = PCI_CLASS_OTHERS, > + }, > + { > + .vdev_id = VIRTIO_ID_RNG, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_RNG, > + .class_id = PCI_CLASS_OTHERS, > + }, > + { > + .vdev_id = VIRTIO_ID_BALLOON, > + .pdev_id = PCI_DEVICE_ID_VIRTIO_BALLOON, > + .class_id = PCI_CLASS_OTHERS, > + }, > +}; > + this is the list from the spec: So this is the list from the spec: 0x1000 network card 0x1001 block device 0x1002 memory ballooning (traditional) 0x1003 console 0x1004 SCSI host 0x1005 entropy source 0x1009 9P transport I'd drop all the rest, use the algorithm for non transitional. And when class is other I'd just not include it in the array, make this the default. > +static VirtIOPCIIDInfo virtio_pci_get_id_info(uint16_t vdev_id) > +{ > + VirtIOPCIIDInfo info = {}; > + int i; > + > + for (i = 0; i < ARRAY_SIZE(virtio_pci_id_info); i++) { > + if (virtio_pci_id_info[i].vdev_id == vdev_id) { > + info = virtio_pci_id_info[i]; > + break; > + } > + } > + > + return info; > +} > + > +uint16_t virtio_pci_get_pci_devid(uint16_t device_id) > +{ > + return virtio_pci_get_id_info(device_id).pdev_id; > +} > + > +uint16_t virtio_pci_get_class_id(uint16_t device_id) > +{ > + return virtio_pci_get_id_info(device_id).class_id; > +} > + > static bool virtio_pci_ioeventfd_enabled(DeviceState *d) > { > VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); > @@ -1674,6 +1764,9 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp) > * is set to PCI_SUBVENDOR_ID_REDHAT_QUMRANET by default. > */ > pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus)); > + if (proxy->pdev_id) { > + pci_config_set_device_id(config, proxy->pdev_id); > + } > } else { > /* pure virtio-1.0 */ > pci_set_word(config + PCI_VENDOR_ID, > diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h > index 2446dcd9ae..06aa59436e 100644 > --- a/hw/virtio/virtio-pci.h > +++ b/hw/virtio/virtio-pci.h > @@ -146,6 +146,7 @@ struct VirtIOPCIProxy { > bool disable_modern; > bool ignore_backend_features; > OnOffAuto disable_legacy; > + uint16_t pdev_id; > uint32_t class_code; > uint32_t nvectors; > uint32_t dfselect; > @@ -158,6 +159,9 @@ struct VirtIOPCIProxy { > VirtioBusState bus; > }; > > +uint16_t virtio_pci_get_pci_devid(uint16_t device_id); > +uint16_t virtio_pci_get_class_id(uint16_t device_id); > + > static inline bool virtio_pci_modern(VirtIOPCIProxy *proxy) > { > return !proxy->disable_modern; > -- > 2.23.0