1911 ec_slave_t *port0_slave, /**< Slave at port 0. */ |
1911 ec_slave_t *port0_slave, /**< Slave at port 0. */ |
1912 unsigned int *slave_position /**< Slave position. */ |
1912 unsigned int *slave_position /**< Slave position. */ |
1913 ) |
1913 ) |
1914 { |
1914 { |
1915 ec_slave_t *slave = master->slaves + *slave_position; |
1915 ec_slave_t *slave = master->slaves + *slave_position; |
1916 unsigned int i; |
1916 unsigned int port_index; |
1917 int ret; |
1917 int ret; |
1918 |
1918 |
|
1919 static const unsigned int next_table[EC_MAX_PORTS] = { |
|
1920 3, 2, 0, 1 |
|
1921 }; |
|
1922 |
1919 slave->ports[0].next_slave = port0_slave; |
1923 slave->ports[0].next_slave = port0_slave; |
1920 |
1924 |
1921 for (i = 1; i < EC_MAX_PORTS; i++) { |
1925 port_index = 3; |
1922 if (!slave->ports[i].link.loop_closed) { |
1926 while (port_index != 0) { |
|
1927 if (!slave->ports[port_index].link.loop_closed) { |
1923 *slave_position = *slave_position + 1; |
1928 *slave_position = *slave_position + 1; |
1924 if (*slave_position < master->slave_count) { |
1929 if (*slave_position < master->slave_count) { |
1925 slave->ports[i].next_slave = master->slaves + *slave_position; |
1930 slave->ports[port_index].next_slave = |
|
1931 master->slaves + *slave_position; |
1926 ret = ec_master_calc_topology_rec(master, |
1932 ret = ec_master_calc_topology_rec(master, |
1927 slave, slave_position); |
1933 slave, slave_position); |
1928 if (ret) |
1934 if (ret) { |
1929 return ret; |
1935 return ret; |
|
1936 } |
1930 } else { |
1937 } else { |
1931 return -1; |
1938 return -1; |
1932 } |
1939 } |
1933 } |
1940 } |
|
1941 |
|
1942 port_index = next_table[port_index]; |
1934 } |
1943 } |
1935 |
1944 |
1936 return 0; |
1945 return 0; |
1937 } |
1946 } |
1938 |
1947 |