|
@@ -234,21 +234,16 @@ static int __cvmx_helper_port_setup_ipd(int ipd_port)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * This function probes an interface to determine the actual
|
|
|
- * number of hardware ports connected to it. It doesn't setup the
|
|
|
- * ports or enable them. The main goal here is to set the global
|
|
|
- * interface_port_count[interface] correctly. Hardware setup of the
|
|
|
- * ports will be performed later.
|
|
|
+ * This function sets the interface_port_count[interface] correctly,
|
|
|
+ * without modifying any hardware configuration. Hardware setup of
|
|
|
+ * the ports will be performed later.
|
|
|
*
|
|
|
* @interface: Interface to probe
|
|
|
*
|
|
|
* Returns Zero on success, negative on failure
|
|
|
*/
|
|
|
-int cvmx_helper_interface_probe(int interface)
|
|
|
+int cvmx_helper_interface_enumerate(int interface)
|
|
|
{
|
|
|
- /* At this stage in the game we don't want packets to be moving yet.
|
|
|
- The following probe calls should perform hardware setup
|
|
|
- needed to determine port counts. Receive must still be disabled */
|
|
|
switch (cvmx_helper_interface_get_mode(interface)) {
|
|
|
/* These types don't support ports to IPD/PKO */
|
|
|
case CVMX_HELPER_INTERFACE_MODE_DISABLED:
|
|
@@ -258,7 +253,7 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
/* XAUI is a single high speed port */
|
|
|
case CVMX_HELPER_INTERFACE_MODE_XAUI:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_xaui_probe(interface);
|
|
|
+ __cvmx_helper_xaui_enumerate(interface);
|
|
|
break;
|
|
|
/*
|
|
|
* RGMII/GMII/MII are all treated about the same. Most
|
|
@@ -267,7 +262,7 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
case CVMX_HELPER_INTERFACE_MODE_RGMII:
|
|
|
case CVMX_HELPER_INTERFACE_MODE_GMII:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_rgmii_probe(interface);
|
|
|
+ __cvmx_helper_rgmii_enumerate(interface);
|
|
|
break;
|
|
|
/*
|
|
|
* SPI4 can have 1-16 ports depending on the device at
|
|
@@ -275,7 +270,7 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
*/
|
|
|
case CVMX_HELPER_INTERFACE_MODE_SPI:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_spi_probe(interface);
|
|
|
+ __cvmx_helper_spi_enumerate(interface);
|
|
|
break;
|
|
|
/*
|
|
|
* SGMII can have 1-4 ports depending on how many are
|
|
@@ -284,12 +279,12 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
case CVMX_HELPER_INTERFACE_MODE_SGMII:
|
|
|
case CVMX_HELPER_INTERFACE_MODE_PICMG:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_sgmii_probe(interface);
|
|
|
+ __cvmx_helper_sgmii_enumerate(interface);
|
|
|
break;
|
|
|
/* PCI target Network Packet Interface */
|
|
|
case CVMX_HELPER_INTERFACE_MODE_NPI:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_npi_probe(interface);
|
|
|
+ __cvmx_helper_npi_enumerate(interface);
|
|
|
break;
|
|
|
/*
|
|
|
* Special loopback only ports. These are not the same
|
|
@@ -297,7 +292,7 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
*/
|
|
|
case CVMX_HELPER_INTERFACE_MODE_LOOP:
|
|
|
interface_port_count[interface] =
|
|
|
- __cvmx_helper_loop_probe(interface);
|
|
|
+ __cvmx_helper_loop_enumerate(interface);
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -312,6 +307,74 @@ int cvmx_helper_interface_probe(int interface)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * This function probes an interface to determine the actual
|
|
|
+ * number of hardware ports connected to it. It doesn't setup the
|
|
|
+ * ports or enable them. The main goal here is to set the global
|
|
|
+ * interface_port_count[interface] correctly. Hardware setup of the
|
|
|
+ * ports will be performed later.
|
|
|
+ *
|
|
|
+ * @interface: Interface to probe
|
|
|
+ *
|
|
|
+ * Returns Zero on success, negative on failure
|
|
|
+ */
|
|
|
+int cvmx_helper_interface_probe(int interface)
|
|
|
+{
|
|
|
+ cvmx_helper_interface_enumerate(interface);
|
|
|
+ /* At this stage in the game we don't want packets to be moving yet.
|
|
|
+ The following probe calls should perform hardware setup
|
|
|
+ needed to determine port counts. Receive must still be disabled */
|
|
|
+ switch (cvmx_helper_interface_get_mode(interface)) {
|
|
|
+ /* These types don't support ports to IPD/PKO */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_DISABLED:
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_PCIE:
|
|
|
+ break;
|
|
|
+ /* XAUI is a single high speed port */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_XAUI:
|
|
|
+ __cvmx_helper_xaui_probe(interface);
|
|
|
+ break;
|
|
|
+ /*
|
|
|
+ * RGMII/GMII/MII are all treated about the same. Most
|
|
|
+ * functions refer to these ports as RGMII.
|
|
|
+ */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_RGMII:
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_GMII:
|
|
|
+ __cvmx_helper_rgmii_probe(interface);
|
|
|
+ break;
|
|
|
+ /*
|
|
|
+ * SPI4 can have 1-16 ports depending on the device at
|
|
|
+ * the other end.
|
|
|
+ */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_SPI:
|
|
|
+ __cvmx_helper_spi_probe(interface);
|
|
|
+ break;
|
|
|
+ /*
|
|
|
+ * SGMII can have 1-4 ports depending on how many are
|
|
|
+ * hooked up.
|
|
|
+ */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_SGMII:
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_PICMG:
|
|
|
+ __cvmx_helper_sgmii_probe(interface);
|
|
|
+ break;
|
|
|
+ /* PCI target Network Packet Interface */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_NPI:
|
|
|
+ __cvmx_helper_npi_probe(interface);
|
|
|
+ break;
|
|
|
+ /*
|
|
|
+ * Special loopback only ports. These are not the same
|
|
|
+ * as other ports in loopback mode.
|
|
|
+ */
|
|
|
+ case CVMX_HELPER_INTERFACE_MODE_LOOP:
|
|
|
+ __cvmx_helper_loop_probe(interface);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Make sure all global variables propagate to other cores */
|
|
|
+ CVMX_SYNCWS;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Setup the IPD/PIP for the ports on an interface. Packet
|
|
|
* classification and tagging are set for every port on the
|