[dpdk-dev] [PATCH 1/7] ether: add function to query for link state interrupt
From: Stephen Hemminger Allow application to query whether link state will work. This is also part of abstracting dependency on PCI. Signed-off-by: Stephen Hemminger --- lib/librte_ether/rte_ethdev.c | 14 ++ lib/librte_ether/rte_ethdev.h | 12 2 files changed, 26 insertions(+) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index e20cca5..9577d17 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1340,6 +1340,20 @@ rte_eth_dev_start(uint8_t port_id) return 0; } +int +rte_eth_has_link_state(uint8_t port_id) +{ + struct rte_eth_dev *dev; + + if (port_id >= nb_ports) { + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); + return 0; + } + dev = &rte_eth_devices[port_id]; + + return (dev->pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC) != 0; +} + void rte_eth_dev_stop(uint8_t port_id) { diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 4648290..991023b 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2064,6 +2064,18 @@ extern void rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *link); /** + * Test whether device supports link state interrupt mode. + * + * @param port_id + * The port identifier of the Ethernet device. + * @return + * - (1) if link state interrupt is supported + * - (0) if link state interrupt is not supported + */ +extern int +rte_eth_has_link_state(uint8_t port_id); + +/** * Retrieve the general I/O statistics of an Ethernet device. * * @param port_id -- 2.1.4
[dpdk-dev] [PATCH 1/7] ether: add function to query for link state interrupt
From: Stephen Hemminger Allow application to query whether link state will work. This is also part of abstracting dependency on PCI. Signed-off-by: Stephen Hemminger --- lib/librte_ether/rte_ethdev.c | 14 ++ lib/librte_ether/rte_ethdev.h | 12 2 files changed, 26 insertions(+) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index ea3a1fb..4d803d0 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1264,6 +1264,20 @@ rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *eth_link) } } +int +rte_eth_has_link_state(uint8_t port_id) +{ + struct rte_eth_dev *dev; + + if (port_id >= nb_ports) { + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); + return 0; + } + dev = &rte_eth_devices[port_id]; + + return (dev->pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC) != 0; +} + void rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats) { diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 1200c1c..9d43ca3 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2038,6 +2038,18 @@ extern void rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *link); /** + * Test whether device supports link state interrupt mode. + * + * @param port_id + * The port identifier of the Ethernet device. + * @return + * - (1) if link state interrupt is supported + * - (0) if link state interrupt is not supported + */ +extern int +rte_eth_has_link_state(uint8_t port_id); + +/** * Retrieve the general I/O statistics of an Ethernet device. * * @param port_id -- 2.1.4
[dpdk-dev] [PATCH 1/7] ether: add function to query for link state interrupt
On Wed, Feb 04, 2015 at 05:13:23PM -0800, Stephen Hemminger wrote: > From: Stephen Hemminger > > Allow application to query whether link state will work. > This is also part of abstracting dependency on PCI. > > Signed-off-by: Stephen Hemminger > --- > lib/librte_ether/rte_ethdev.c | 14 ++ > lib/librte_ether/rte_ethdev.h | 12 > 2 files changed, 26 insertions(+) > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index ea3a1fb..4d803d0 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -1264,6 +1264,20 @@ rte_eth_link_get_nowait(uint8_t port_id, struct > rte_eth_link *eth_link) > } > } > > +int > +rte_eth_has_link_state(uint8_t port_id) > +{ > + struct rte_eth_dev *dev; > + > + if (port_id >= nb_ports) { > + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); > + return 0; > + } > + dev = &rte_eth_devices[port_id]; > + > + return (dev->pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC) != 0; > +} > + > void > rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats) > { > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 1200c1c..9d43ca3 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -2038,6 +2038,18 @@ extern void rte_eth_link_get_nowait(uint8_t port_id, > struct rte_eth_link *link); > > /** > + * Test whether device supports link state interrupt mode. > + * > + * @param port_id > + * The port identifier of the Ethernet device. > + * @return > + * - (1) if link state interrupt is supported > + * - (0) if link state interrupt is not supported > + */ > +extern int > +rte_eth_has_link_state(uint8_t port_id); > + > +/** > * Retrieve the general I/O statistics of an Ethernet device. > * > * @param port_id > -- > 2.1.4 > > I think if your intention is to expose this as an application (or other library visible api), you'll need to add it to the appropriate version map file for the link now. Should just be a single line addition Regards Neil
[dpdk-dev] [PATCH 1/7] ether: add function to query for link state interrupt
On Thu, 5 Feb 2015 01:47:37 + Neil Horman wrote: > On Wed, Feb 04, 2015 at 05:13:23PM -0800, Stephen Hemminger wrote: > > From: Stephen Hemminger > > > > Allow application to query whether link state will work. > > This is also part of abstracting dependency on PCI. > > > > Signed-off-by: Stephen Hemminger > > --- > > lib/librte_ether/rte_ethdev.c | 14 ++ > > lib/librte_ether/rte_ethdev.h | 12 > > 2 files changed, 26 insertions(+) > > > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > > index ea3a1fb..4d803d0 100644 > > --- a/lib/librte_ether/rte_ethdev.c > > +++ b/lib/librte_ether/rte_ethdev.c > > @@ -1264,6 +1264,20 @@ rte_eth_link_get_nowait(uint8_t port_id, struct > > rte_eth_link *eth_link) > > } > > } > > > > +int > > +rte_eth_has_link_state(uint8_t port_id) > > +{ > > + struct rte_eth_dev *dev; > > + > > + if (port_id >= nb_ports) { > > + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); > > + return 0; > > + } > > + dev = &rte_eth_devices[port_id]; > > + > > + return (dev->pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC) != 0; > > +} > > + > > void > > rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats) > > { > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > > index 1200c1c..9d43ca3 100644 > > --- a/lib/librte_ether/rte_ethdev.h > > +++ b/lib/librte_ether/rte_ethdev.h > > @@ -2038,6 +2038,18 @@ extern void rte_eth_link_get_nowait(uint8_t port_id, > > struct rte_eth_link *link); > > > > /** > > + * Test whether device supports link state interrupt mode. > > + * > > + * @param port_id > > + * The port identifier of the Ethernet device. > > + * @return > > + * - (1) if link state interrupt is supported > > + * - (0) if link state interrupt is not supported > > + */ > > +extern int > > +rte_eth_has_link_state(uint8_t port_id); > > + > > +/** > > * Retrieve the general I/O statistics of an Ethernet device. > > * > > * @param port_id > > -- > > 2.1.4 > > > > > I think if your intention is to expose this as an application (or other > library > visible api), you'll need to add it to the appropriate version map file for > the > link now. Should just be a single line addition > > Regards > Neil > Will add that after other changes are approved. Also looking at the map files they seem to have been auto generated because some symbols are exposed which are unnecessary (example pci_driver_list)
[dpdk-dev] [PATCH 1/7] ether: add function to query for link state interrupt
On Wed, Feb 04, 2015 at 09:49:07PM -0800, Stephen Hemminger wrote: > On Thu, 5 Feb 2015 01:47:37 + > Neil Horman wrote: > > > On Wed, Feb 04, 2015 at 05:13:23PM -0800, Stephen Hemminger wrote: > > > From: Stephen Hemminger > > > > > > Allow application to query whether link state will work. > > > This is also part of abstracting dependency on PCI. > > > > > > Signed-off-by: Stephen Hemminger > > > --- > > > lib/librte_ether/rte_ethdev.c | 14 ++ > > > lib/librte_ether/rte_ethdev.h | 12 > > > 2 files changed, 26 insertions(+) > > > > > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > > > index ea3a1fb..4d803d0 100644 > > > --- a/lib/librte_ether/rte_ethdev.c > > > +++ b/lib/librte_ether/rte_ethdev.c > > > @@ -1264,6 +1264,20 @@ rte_eth_link_get_nowait(uint8_t port_id, struct > > > rte_eth_link *eth_link) > > > } > > > } > > > > > > +int > > > +rte_eth_has_link_state(uint8_t port_id) > > > +{ > > > + struct rte_eth_dev *dev; > > > + > > > + if (port_id >= nb_ports) { > > > + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); > > > + return 0; > > > + } > > > + dev = &rte_eth_devices[port_id]; > > > + > > > + return (dev->pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC) != 0; > > > +} > > > + > > > void > > > rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats) > > > { > > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > > > index 1200c1c..9d43ca3 100644 > > > --- a/lib/librte_ether/rte_ethdev.h > > > +++ b/lib/librte_ether/rte_ethdev.h > > > @@ -2038,6 +2038,18 @@ extern void rte_eth_link_get_nowait(uint8_t > > > port_id, > > > struct rte_eth_link *link); > > > > > > /** > > > + * Test whether device supports link state interrupt mode. > > > + * > > > + * @param port_id > > > + * The port identifier of the Ethernet device. > > > + * @return > > > + * - (1) if link state interrupt is supported > > > + * - (0) if link state interrupt is not supported > > > + */ > > > +extern int > > > +rte_eth_has_link_state(uint8_t port_id); > > > + > > > +/** > > > * Retrieve the general I/O statistics of an Ethernet device. > > > * > > > * @param port_id > > > -- > > > 2.1.4 > > > > > > > > I think if your intention is to expose this as an application (or other > > library > > visible api), you'll need to add it to the appropriate version map file for > > the > > link now. Should just be a single line addition > > > > Regards > > Neil > > > > Will add that after other changes are approved. > Also looking at the map files they seem to have been auto generated > because some symbols are exposed which are unnecessary (example > pci_driver_list) It wasn't quite auto generated. It was generated based on what the requisite header files for a library exposed to the various applications that used them. In your example above pci_driver_list is a global public variable, that is referenced by applications that the DPDK ships (in this case the test_pci application). I completely agree that it shouldn't need to be versioned, as it shouldn't be exposed at all, relying instead on accessor functions to reach it, but as such, it is what it is. By versioning it, we at least allow ourselves the option to maintain backwards compatibility if the list type changes or we wish to start hiding the symbol in future versions. Neil >