aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-09-05 17:54:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-05 17:54:29 -0400
commitcc998ff8811530be521f6b316f37ab7676a07938 (patch)
treea054b3bf4b2ef406bf756a6cfc9be2f9115f17ae /drivers/pci
parent57d730924d5cc2c3e280af16a9306587c3a511db (diff)
parent0d40f75bdab241868c0eb6f97aef9f8b3a66f7b3 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking changes from David Miller: "Noteworthy changes this time around: 1) Multicast rejoin support for team driver, from Jiri Pirko. 2) Centralize and simplify TCP RTT measurement handling in order to reduce the impact of bad RTO seeding from SYN/ACKs. Also, when both timestamps and local RTT measurements are available prefer the later because there are broken middleware devices which scramble the timestamp. From Yuchung Cheng. 3) Add TCP_NOTSENT_LOWAT socket option to limit the amount of kernel memory consumed to queue up unsend user data. From Eric Dumazet. 4) Add a "physical port ID" abstraction for network devices, from Jiri Pirko. 5) Add a "suppress" operation to influence fib_rules lookups, from Stefan Tomanek. 6) Add a networking development FAQ, from Paul Gortmaker. 7) Extend the information provided by tcp_probe and add ipv6 support, from Daniel Borkmann. 8) Use RCU locking more extensively in openvswitch data paths, from Pravin B Shelar. 9) Add SCTP support to openvswitch, from Joe Stringer. 10) Add EF10 chip support to SFC driver, from Ben Hutchings. 11) Add new SYNPROXY netfilter target, from Patrick McHardy. 12) Compute a rate approximation for sending in TCP sockets, and use this to more intelligently coalesce TSO frames. Furthermore, add a new packet scheduler which takes advantage of this estimate when available. From Eric Dumazet. 13) Allow AF_PACKET fanouts with random selection, from Daniel Borkmann. 14) Add ipv6 support to vxlan driver, from Cong Wang" Resolved conflicts as per discussion. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1218 commits) openvswitch: Fix alignment of struct sw_flow_key. netfilter: Fix build errors with xt_socket.c tcp: Add missing braces to do_tcp_setsockopt caif: Add missing braces to multiline if in cfctrl_linkup_request bnx2x: Add missing braces in bnx2x:bnx2x_link_initialize vxlan: Fix kernel panic on device delete. net: mvneta: implement ->ndo_do_ioctl() to support PHY ioctls net: mvneta: properly disable HW PHY polling and ensure adjust_link() works icplus: Use netif_running to determine device state ethernet/arc/arc_emac: Fix huge delays in large file copies tuntap: orphan frags before trying to set tx timestamp tuntap: purge socket error queue on detach qlcnic: use standard NAPI weights ipv6:introduce function to find route for redirect bnx2x: VF RSS support - VF side bnx2x: VF RSS support - PF side vxlan: Notify drivers for listening UDP port changes net: usbnet: update addr_assign_type if appropriate driver/net: enic: update enic maintainers and driver driver/net: enic: Exposing symbols for Cisco's low latency driver ...
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/pci.c43
-rw-r--r--drivers/pci/pci.h3
-rw-r--r--drivers/pci/probe.c4
3 files changed, 48 insertions, 2 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b821a62958fd..e8ccf6c0f08a 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3998,6 +3998,49 @@ int pcie_set_mps(struct pci_dev *dev, int mps)
3998} 3998}
3999 3999
4000/** 4000/**
4001 * pcie_get_minimum_link - determine minimum link settings of a PCI device
4002 * @dev: PCI device to query
4003 * @speed: storage for minimum speed
4004 * @width: storage for minimum width
4005 *
4006 * This function will walk up the PCI device chain and determine the minimum
4007 * link width and speed of the device.
4008 */
4009int pcie_get_minimum_link(struct pci_dev *dev, enum pci_bus_speed *speed,
4010 enum pcie_link_width *width)
4011{
4012 int ret;
4013
4014 *speed = PCI_SPEED_UNKNOWN;
4015 *width = PCIE_LNK_WIDTH_UNKNOWN;
4016
4017 while (dev) {
4018 u16 lnksta;
4019 enum pci_bus_speed next_speed;
4020 enum pcie_link_width next_width;
4021
4022 ret = pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &lnksta);
4023 if (ret)
4024 return ret;
4025
4026 next_speed = pcie_link_speed[lnksta & PCI_EXP_LNKSTA_CLS];
4027 next_width = (lnksta & PCI_EXP_LNKSTA_NLW) >>
4028 PCI_EXP_LNKSTA_NLW_SHIFT;
4029
4030 if (next_speed < *speed)
4031 *speed = next_speed;
4032
4033 if (next_width < *width)
4034 *width = next_width;
4035
4036 dev = dev->bus->self;
4037 }
4038
4039 return 0;
4040}
4041EXPORT_SYMBOL(pcie_get_minimum_link);
4042
4043/**
4001 * pci_select_bars - Make BAR mask from the type of resource 4044 * pci_select_bars - Make BAR mask from the type of resource
4002 * @dev: the PCI device for which BAR mask is made 4045 * @dev: the PCI device for which BAR mask is made
4003 * @flags: resource type mask to be selected 4046 * @flags: resource type mask to be selected
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 816c297f170c..8a00c063d7bc 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -6,6 +6,9 @@
6#define PCI_CFG_SPACE_SIZE 256 6#define PCI_CFG_SPACE_SIZE 256
7#define PCI_CFG_SPACE_EXP_SIZE 4096 7#define PCI_CFG_SPACE_EXP_SIZE 4096
8 8
9extern const unsigned char pcix_bus_speed[];
10extern const unsigned char pcie_link_speed[];
11
9/* Functions internal to the PCI core code */ 12/* Functions internal to the PCI core code */
10 13
11int pci_create_sysfs_dev_files(struct pci_dev *pdev); 14int pci_create_sysfs_dev_files(struct pci_dev *pdev);
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index eeb50bd62402..4f9cc93c3b59 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -518,7 +518,7 @@ static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
518 return bridge; 518 return bridge;
519} 519}
520 520
521static unsigned char pcix_bus_speed[] = { 521const unsigned char pcix_bus_speed[] = {
522 PCI_SPEED_UNKNOWN, /* 0 */ 522 PCI_SPEED_UNKNOWN, /* 0 */
523 PCI_SPEED_66MHz_PCIX, /* 1 */ 523 PCI_SPEED_66MHz_PCIX, /* 1 */
524 PCI_SPEED_100MHz_PCIX, /* 2 */ 524 PCI_SPEED_100MHz_PCIX, /* 2 */
@@ -537,7 +537,7 @@ static unsigned char pcix_bus_speed[] = {
537 PCI_SPEED_133MHz_PCIX_533 /* F */ 537 PCI_SPEED_133MHz_PCIX_533 /* F */
538}; 538};
539 539
540static unsigned char pcie_link_speed[] = { 540const unsigned char pcie_link_speed[] = {
541 PCI_SPEED_UNKNOWN, /* 0 */ 541 PCI_SPEED_UNKNOWN, /* 0 */
542 PCIE_SPEED_2_5GT, /* 1 */ 542 PCIE_SPEED_2_5GT, /* 1 */
543 PCIE_SPEED_5_0GT, /* 2 */ 543 PCIE_SPEED_5_0GT, /* 2 */