From: Yu Zhao <yu.zhao@intel.com>
To: "linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Cc: "achiang@hp.com" <achiang@hp.com>,
"bjorn.helgaas@hp.com" <bjorn.helgaas@hp.com>,
"grundler@parisc-linux.org" <grundler@parisc-linux.org>,
"greg@kroah.com" <greg@kroah.com>,
"mingo@elte.hu" <mingo@elte.hu>,
"jbarnes@virtuousgeek.org" <jbarnes@virtuousgeek.org>,
"matthew@wil.cx" <matthew@wil.cx>,
"randy.dunlap@oracle.com" <randy.dunlap@oracle.com>,
"rdreier@cisco.com" <rdreier@cisco.com>,
"horms@verge.net.au" <horms@verge.net.au>,
"yinghai@kernel.org" <yinghai@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>
Subject: [PATCH 13/13 v7] PCI: document for SR-IOV user and developer
Date: Sat, 22 Nov 2008 02:44:32 +0800 [thread overview]
Message-ID: <20081121184432.GN7810@yzhao12-linux.sh.intel.com> (raw)
In-Reply-To: <20081121183605.GA7810@yzhao12-linux.sh.intel.com>
Create how-to for the SR-IOV user and driver developer.
Signed-off-by: Yu Zhao <yu.zhao@intel.com>
---
Documentation/DocBook/kernel-api.tmpl | 1 +
Documentation/PCI/pci-iov-howto.txt | 138 +++++++++++++++++++++++++++++++++
2 files changed, 139 insertions(+), 0 deletions(-)
create mode 100644 Documentation/PCI/pci-iov-howto.txt
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl
index 5818ff7..506e611 100644
--- a/Documentation/DocBook/kernel-api.tmpl
+++ b/Documentation/DocBook/kernel-api.tmpl
@@ -251,6 +251,7 @@ X!Edrivers/pci/hotplug.c
-->
!Edrivers/pci/probe.c
!Edrivers/pci/rom.c
+!Edrivers/pci/iov.c
</sect1>
<sect1><title>PCI Hotplug Support Library</title>
!Edrivers/pci/hotplug/pci_hotplug_core.c
diff --git a/Documentation/PCI/pci-iov-howto.txt b/Documentation/PCI/pci-iov-howto.txt
new file mode 100644
index 0000000..216cecc
--- /dev/null
+++ b/Documentation/PCI/pci-iov-howto.txt
@@ -0,0 +1,138 @@
+ PCI Express I/O Virtualization Howto
+ Copyright (C) 2008 Intel Corporation
+
+
+1. Overview
+
+1.1 What is SR-IOV
+
+Single Root I/O Virtualization (SR-IOV) is a PCI Express Extended
+capability which makes one physical device appear as multiple virtual
+devices. The physical device is referred to as Physical Function (PF)
+while the virtual devices are referred to as Virtual Functions (VF).
+Allocation of the VF can be dynamically controlled by the PF via
+registers encapsulated in the capability. By default, this feature is
+not enabled and the PF behaves as traditional PCIe device. Once it's
+turned on, each VF's PCI configuration space can be accessed by its own
+Bus, Device and Function Number (Routing ID). And each VF also has PCI
+Memory Space, which is used to map its register set. VF device driver
+operates on the register set so it can be functional and appear as a
+real existing PCI device.
+
+2. User Guide
+
+2.1 How can I manage the SR-IOV
+
+If a device has the SR-IOV capability and the device driver (PF driver)
+supports this operation, then there should be some entries under the
+PF's sysfs directory:
+ - /sys/bus/pci/devices/NNNN:BB:DD.F/iov/
+ (NNNN:BB:DD:F is the domain, bus, device and function numbers)
+
+To change number of Virtual Functions:
+ - /sys/bus/pci/devices/NNNN:BB:DD.F/iov/nr_virtfn
+ (writing positive integer to this file will change the number of
+ VFs, and 0 means disable the capability)
+
+The total and initial numbers of VFs can get from:
+ - /sys/bus/pci/devices/NNNN:BB:DD.F/iov/total_virtfn
+ - /sys/bus/pci/devices/NNNN:BB:DD.F/iov/initial_virtfn
+
+2.2 How can I use the Virtual Functions
+
+The VF is treated as hot-plugged PCI devices in the kernel, so they
+should be able to work in the same way as real PCI devices. And also
+the VF requires device driver that is same as a normal PCI device's.
+
+3. Developer Guide
+
+3.1 SR-IOV APIs
+
+To use the SR-IOV service, the Physical Function driver needs to declare
+a callback function in its 'struct pci_driver':
+
+ static struct pci_driver dev_driver = {
+ ...
+ .virtual = dev_virtual,
+ ...
+ };
+
+ The 'dev_virtual' is a callback function that the SR-IOV service
+ will invoke it when the number of VFs is changed by the user.
+ The first argument of this callback is PF itself ('struct pci_dev'),
+ and the second argument is the number of VFs requested. The callback
+ should return 0 if the requested number of VFs is supported and all
+ necessary resources are granted to these VFs; otherwise it should
+ return a negative value indicating the error.
+
+3.2 Usage example
+
+Following piece of code illustrates the usage of APIs above.
+
+static int __devinit dev_probe(struct pci_dev *dev,
+ const struct pci_device_id *id)
+{
+ ...
+
+ return 0;
+}
+
+static void __devexit dev_remove(struct pci_dev *dev)
+{
+ ...
+}
+
+#ifdef CONFIG_PM
+static int dev_suspend(struct pci_dev *dev, pm_message_t state)
+{
+ ...
+
+ return 0;
+}
+
+static int dev_resume(struct pci_dev *dev)
+{
+ pci_restore_state(dev);
+
+ ...
+
+ return 0;
+}
+#endif
+
+static void dev_shutdown(struct pci_dev *dev)
+{
+ ...
+}
+
+static int dev_virtual(struct pci_dev *dev, int nr_virtfn)
+{
+
+ if (nr_virtfn) {
+ /*
+ * allocate device internal resources for VFs.
+ * these resources are device-specific (e.g. rx/tx
+ * queue in the NIC) and necessary to make the VF
+ * functional.
+ */
+ } else {
+ /*
+ * reclaim the VF related resources if any.
+ */
+ }
+
+ return 0;
+}
+
+static struct pci_driver dev_driver = {
+ .name = "SR-IOV Physical Function driver",
+ .id_table = dev_id_table,
+ .probe = dev_probe,
+ .remove = __devexit_p(dev_remove),
+#ifdef CONFIG_PM
+ .suspend = dev_suspend,
+ .resume = dev_resume,
+#endif
+ .shutdown = dev_shutdown,
+ .virtual = dev_virtual
+};
--
1.5.6.4
next prev parent reply other threads:[~2008-11-21 19:41 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-21 18:36 [PATCH 0/13 v7] PCI: Linux kernel SR-IOV support Yu Zhao
2008-11-21 18:38 ` [PATCH 1/13 v7] PCI: enhance pci_ari_enabled() Yu Zhao
2008-11-21 18:38 ` Yu Zhao
2008-11-21 18:38 ` [PATCH 2/13 v7] PCI: remove unnecessary arg of pci_update_resource() Yu Zhao
2008-11-21 18:38 ` Yu Zhao
2008-11-21 18:39 ` [PATCH 3/13 v7] PCI: define PCI resource names in an 'enum' Yu Zhao
2008-11-21 18:39 ` Yu Zhao
2008-11-21 18:40 ` [PATCH 4/13 v7] PCI: remove unnecessary condition check in pci_restore_bars() Yu Zhao
2008-11-21 18:40 ` Yu Zhao
2008-11-21 18:40 ` [PATCH 5/13 v7] PCI: export __pci_read_base() Yu Zhao
2008-11-21 18:40 ` Yu Zhao
2008-11-21 18:41 ` [PATCH 6/13 v7] PCI: make pci_alloc_child_bus() be able to handle NULL bridge Yu Zhao
2008-11-21 18:41 ` Yu Zhao
2008-11-21 18:41 ` [PATCH 7/13 v7] PCI: add a new function to map BAR offset Yu Zhao
2008-11-21 18:41 ` Yu Zhao
2008-11-21 18:41 ` [PATCH 8/13 v7] PCI: cleanup pci_bus_add_devices() Yu Zhao
2008-11-21 18:41 ` Yu Zhao
2008-11-21 18:42 ` [PATCH 9/13 v7] PCI: split a new function from pci_bus_add_devices() Yu Zhao
2008-11-21 18:42 ` Yu Zhao
2008-11-21 18:42 ` [PATCH 10/13 v7] PCI: support the SR-IOV capability Yu Zhao
2008-11-21 18:42 ` Yu Zhao
2008-11-21 18:43 ` [PATCH 11/13 v7] PCI: reserve bus range for SR-IOV device Yu Zhao
2008-11-21 18:43 ` Yu Zhao
2008-11-21 18:43 ` [PATCH 12/13 v7] PCI: document the SR-IOV sysfs entries Yu Zhao
2008-11-21 18:43 ` Yu Zhao
2008-11-21 18:44 ` Yu Zhao [this message]
2008-11-21 18:44 ` [PATCH 13/13 v7] PCI: document for SR-IOV user and developer Yu Zhao
2008-11-21 20:57 ` [PATCH 0/13 v7] PCI: Linux kernel SR-IOV support Greg KH
2008-11-22 7:03 ` Zhao, Yu
2008-11-22 7:03 ` Zhao, Yu
2008-11-21 20:57 ` Greg KH
2008-11-26 14:03 ` [SR-IOV driver example 0/3] introduction Yu Zhao
2008-11-26 14:03 ` Yu Zhao
2008-11-26 14:11 ` [SR-IOV driver example 1/3] PF driver: allocate hardware specific resource Yu Zhao
2008-11-26 14:11 ` Yu Zhao
2008-11-26 14:11 ` Yu Zhao
2008-11-26 14:21 ` [SR-IOV driver example 2/3] PF driver: integrate with SR-IOV core Yu Zhao
2008-11-26 14:21 ` Yu Zhao
2008-11-26 16:58 ` Greg KH
2008-11-26 16:58 ` Greg KH
2008-11-26 17:54 ` Chris Wright
2008-11-26 17:54 ` Chris Wright
2008-12-01 16:46 ` Yu Zhao
2008-12-01 16:46 ` Yu Zhao
2008-11-26 19:27 ` Nakajima, Jun
2008-11-26 19:27 ` Nakajima, Jun
2008-11-26 19:55 ` Greg KH
2008-11-26 19:55 ` Greg KH
2008-12-01 16:44 ` Yu Zhao
2008-12-01 16:44 ` Yu Zhao
2008-11-26 14:40 ` [SR-IOV driver example 3/3] VF driver tar ball Yu Zhao
2008-11-26 14:40 ` Yu Zhao
2008-11-26 17:00 ` Greg KH
2008-11-26 17:00 ` Greg KH
2008-11-26 14:40 ` Yu Zhao
2008-11-26 16:59 ` [SR-IOV driver example 0/3] introduction Greg KH
2008-12-01 16:54 ` Yu Zhao
2008-12-01 16:54 ` Yu Zhao
2008-11-26 16:59 ` Greg KH
2008-11-26 20:14 ` Jeff Garzik
2008-11-26 20:14 ` Jeff Garzik
2008-12-01 16:39 ` Yu Zhao
2008-12-01 16:39 ` Yu Zhao
2008-12-02 9:27 ` [SR-IOV driver example 0/3 resend] introduction Yu Zhao
2008-12-02 9:40 ` [SR-IOV driver example 1/3 resend] PF driver: hardware specific operations Yu Zhao
2008-12-02 9:40 ` Yu Zhao
2008-12-02 9:42 ` [SR-IOV driver example 2/3 resend] PF driver: integrate with SR-IOV core Yu Zhao
2008-12-02 9:42 ` Yu Zhao
2008-12-02 9:42 ` Yu Zhao
2008-12-02 9:57 ` [SR-IOV driver example 3/3 resend] VF driver: an independent PCI NIC driver Yu Zhao
2008-12-03 3:12 ` [SR-IOV driver example 0/3 resend] introduction Jeff Kirsher
2008-12-03 3:12 ` Jeff Kirsher
2008-12-02 9:27 ` Yu Zhao
2008-12-16 23:23 ` [PATCH 0/13 v7] PCI: Linux kernel SR-IOV support Jesse Barnes
2008-12-17 2:37 ` Jike Song
2008-12-17 6:06 ` Greg KH
2008-12-17 7:07 ` Zhao, Yu
2008-12-17 7:07 ` Zhao, Yu
2008-12-17 7:21 ` Greg KH
2008-12-17 7:21 ` Greg KH
2008-12-17 16:44 ` Rose, Gregory V
2008-12-17 17:51 ` Greg KH
2008-12-17 17:51 ` Greg KH
2008-12-17 18:51 ` Jesse Barnes
2008-12-17 19:05 ` Rose, Gregory V
2008-12-17 19:34 ` Jeremy Fitzhardinge
2008-12-17 19:34 ` Jeremy Fitzhardinge
2008-12-17 19:42 ` Rose, Gregory V
2008-12-17 19:42 ` Rose, Gregory V
2008-12-17 19:42 ` Jesse Barnes
2008-12-17 19:42 ` Jesse Barnes
2008-12-17 19:51 ` Greg KH
2008-12-17 19:51 ` Greg KH
2008-12-17 20:07 ` Jesse Barnes
2008-12-18 2:39 ` Zhao, Yu
2008-12-18 2:39 ` Zhao, Yu
2008-12-17 20:07 ` Jesse Barnes
2008-12-18 22:42 ` Rose, Gregory V
2008-12-18 22:42 ` Rose, Gregory V
2008-12-17 19:05 ` Rose, Gregory V
2008-12-17 18:51 ` Jesse Barnes
2008-12-17 16:44 ` Rose, Gregory V
2008-12-17 6:06 ` Greg KH
2008-12-17 2:37 ` Jike Song
2008-12-17 11:42 ` Fischer, Anna
2008-12-17 18:59 ` Jesse Barnes
2008-12-17 18:59 ` Jesse Barnes
2008-12-18 2:13 ` Zhao, Yu
2008-12-18 6:37 ` Fischer, Anna
2008-12-18 6:37 ` Fischer, Anna
2008-12-18 2:13 ` Zhao, Yu
2008-12-17 11:42 ` Fischer, Anna
2008-12-17 14:15 ` Matthew Wilcox
2008-12-17 14:15 ` Matthew Wilcox
2008-12-17 17:27 ` Jesse Barnes
2008-12-17 17:27 ` Jesse Barnes
2008-12-18 2:26 ` Zhao, Yu
2008-12-18 2:26 ` Zhao, Yu
2008-12-16 23:23 ` Jesse Barnes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081121184432.GN7810@yzhao12-linux.sh.intel.com \
--to=yu.zhao@intel.com \
--cc=achiang@hp.com \
--cc=bjorn.helgaas@hp.com \
--cc=greg@kroah.com \
--cc=grundler@parisc-linux.org \
--cc=horms@verge.net.au \
--cc=jbarnes@virtuousgeek.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=mingo@elte.hu \
--cc=randy.dunlap@oracle.com \
--cc=rdreier@cisco.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.