From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wes1-so2.wedos.net (wes1-so2.wedos.net [46.28.106.16]) by dpdk.org (Postfix) with ESMTP id 4F85F9192 for ; Mon, 4 Jan 2016 21:09:51 +0100 (CET) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so2.wedos.net (Postfix) with ESMTPSA id 3pZ7NG68tFzrB; Mon, 4 Jan 2016 21:09:50 +0100 (CET) From: Jan Viktorin To: dev@dpdk.org Date: Mon, 4 Jan 2016 21:08:15 +0100 Message-Id: <1451938106-12145-4-git-send-email-viktorin@rehivetech.com> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1451938106-12145-1-git-send-email-viktorin@rehivetech.com> References: <1451938106-12145-1-git-send-email-viktorin@rehivetech.com> Cc: Jan Viktorin Subject: [dpdk-dev] [PATCH 03/14] eal/common: introduce union rte_device and related X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jan 2016 20:09:51 -0000 The union rte_device can be used in situations where we want to work with all devices without distinguishing among bus-specific features (PCI, ...). The target device type can be detected by reading the magic. Also, the macros RTE_DEVICE_DECL and RTE_DEVICE_PTR_DECL are introduced to provide a generic way to declare a device or a pointer to a device. The macros aim to preserve API backwards-compatibility. Eg. struct old_super_struct { => struct old_super_struct { struct rte_pci_device *pci_dev; => RTE_DEVICE_PTR_DECL(pci_dev); ... => ... }; => }; struct old_super_struct inst; The new code should reference inst.dev.pci, the old code can still use the inst.pci_dev. The previously introduced magic is included so one can ask the instance about its type: if (inst.dev.magic == RTE_PCI_DEVICE_MAGIC) { ... } I don't like to include the rte_pci.h header here, however, I didn't find a better way at the moment. Signed-off-by: Jan Viktorin --- lib/librte_eal/common/include/rte_dev.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index f1b5507..c99d038 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -49,6 +49,7 @@ extern "C" { #include #include +#include #include __attribute__((format(printf, 2, 0))) @@ -134,6 +135,32 @@ struct rte_driver { }; /** + * Generic representation of a device. + */ +union rte_device { + unsigned int magic; + struct rte_pci_device pci; +}; + +/** + * The macro preserves API backwards compatibility. + */ +#define RTE_DEVICE_DECL(_pci) \ + union { \ + union rte_device dev; \ + struct rte_pci_device _pci; \ + } + +/** + * The macro preserves API backwards compatibility. + */ +#define RTE_DEVICE_PTR_DECL(_pci) \ + union { \ + union rte_device *dev; \ + struct rte_pci_device *_pci; \ + } + +/** * Register a device driver. * * @param driver -- 2.6.3