Lines Matching refs:net
60 static u16 rio_destid_alloc(struct rio_net *net) in rio_destid_alloc() argument
63 struct rio_id_table *idtab = (struct rio_id_table *)net->enum_data; in rio_destid_alloc()
86 static int rio_destid_reserve(struct rio_net *net, u16 destid) in rio_destid_reserve() argument
89 struct rio_id_table *idtab = (struct rio_id_table *)net->enum_data; in rio_destid_reserve()
105 static void rio_destid_free(struct rio_net *net, u16 destid) in rio_destid_free() argument
107 struct rio_id_table *idtab = (struct rio_id_table *)net->enum_data; in rio_destid_free()
119 static u16 rio_destid_first(struct rio_net *net) in rio_destid_first() argument
122 struct rio_id_table *idtab = (struct rio_id_table *)net->enum_data; in rio_destid_first()
139 static u16 rio_destid_next(struct rio_net *net, u16 from) in rio_destid_next() argument
142 struct rio_id_table *idtab = (struct rio_id_table *)net->enum_data; in rio_destid_next()
195 static int rio_clear_locks(struct rio_net *net) in rio_clear_locks() argument
197 struct rio_mport *port = net->hport; in rio_clear_locks()
212 list_for_each_entry(rdev, &net->devices, net_list) { in rio_clear_locks()
326 static struct rio_dev *rio_setup_device(struct rio_net *net, in rio_setup_device() argument
355 rdev->net = net; in rio_setup_device()
410 next_destid = rio_destid_alloc(net); in rio_setup_device()
437 dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, in rio_setup_device()
447 dev_set_name(&rdev->dev, "%02x:e:%04x", rdev->net->id, in rio_setup_device()
451 rdev->dev.parent = &net->dev; in rio_setup_device()
528 static int rio_enum_peer(struct rio_net *net, struct rio_mport *port, in rio_enum_peer() argument
585 rdev = rio_setup_device(net, port, RIO_ANY_DESTID(port->sys_size), in rio_enum_peer()
606 destid = rio_destid_first(net); in rio_enum_peer()
613 destid = rio_destid_next(net, destid + 1); in rio_enum_peer()
645 if (rio_enum_peer(net, port, hopcount + 1, in rio_enum_peer()
650 destid = rio_destid_next(net, cur_destid + 1); in rio_enum_peer()
664 destid = rio_destid_next(net, in rio_enum_peer()
692 next_destid = rio_destid_alloc(net); in rio_enum_peer()
732 rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, in rio_disc_peer() argument
740 if ((rdev = rio_setup_device(net, port, destid, hopcount, 0))) { in rio_disc_peer()
782 if (rio_disc_peer(net, port, ndestid, in rio_disc_peer()
814 static void rio_scan_release_net(struct rio_net *net) in rio_scan_release_net() argument
816 pr_debug("RIO-SCAN: %s: net_%d\n", __func__, net->id); in rio_scan_release_net()
817 kfree(net->enum_data); in rio_scan_release_net()
822 struct rio_net *net; in rio_scan_release_dev() local
824 net = to_rio_net(dev); in rio_scan_release_dev()
825 pr_debug("RIO-SCAN: %s: net_%d\n", __func__, net->id); in rio_scan_release_dev()
826 kfree(net); in rio_scan_release_dev()
842 struct rio_net *net; in rio_scan_alloc_net() local
844 net = rio_alloc_net(mport); in rio_scan_alloc_net()
846 if (net && do_enum) { in rio_scan_alloc_net()
859 rio_free_net(net); in rio_scan_alloc_net()
860 net = NULL; in rio_scan_alloc_net()
862 net->enum_data = idtab; in rio_scan_alloc_net()
863 net->release = rio_scan_release_net; in rio_scan_alloc_net()
870 if (net) { in rio_scan_alloc_net()
871 net->id = mport->id; in rio_scan_alloc_net()
872 net->hport = mport; in rio_scan_alloc_net()
873 dev_set_name(&net->dev, "rnet_%d", net->id); in rio_scan_alloc_net()
874 net->dev.parent = &mport->dev; in rio_scan_alloc_net()
875 net->dev.release = rio_scan_release_dev; in rio_scan_alloc_net()
876 rio_add_net(net); in rio_scan_alloc_net()
879 return net; in rio_scan_alloc_net()
890 static void rio_update_route_tables(struct rio_net *net) in rio_update_route_tables() argument
897 list_for_each_entry(rdev, &net->devices, net_list) { in rio_update_route_tables()
901 list_for_each_entry(rswitch, &net->switches, node) { in rio_update_route_tables()
950 struct rio_net *net = NULL; in rio_enum_mport() local
976 net = rio_scan_alloc_net(mport, 1, 0); in rio_enum_mport()
977 if (!net) { in rio_enum_mport()
984 rio_destid_reserve(net, mport->host_deviceid); in rio_enum_mport()
993 next_destid = rio_destid_alloc(net); in rio_enum_mport()
995 if (rio_enum_peer(net, mport, 0, NULL, 0) < 0) { in rio_enum_mport()
1000 rio_clear_locks(net); in rio_enum_mport()
1005 rio_destid_free(net, next_destid); in rio_enum_mport()
1006 rio_update_route_tables(net); in rio_enum_mport()
1007 rio_clear_locks(net); in rio_enum_mport()
1026 static void rio_build_route_tables(struct rio_net *net) in rio_build_route_tables() argument
1033 list_for_each_entry(rswitch, &net->switches, node) { in rio_build_route_tables()
1036 rio_lock_device(net->hport, rdev->destid, in rio_build_route_tables()
1039 i < RIO_MAX_ROUTE_ENTRIES(net->hport->sys_size); in rio_build_route_tables()
1047 rio_unlock_device(net->hport, rdev->destid, rdev->hopcount); in rio_build_route_tables()
1065 struct rio_net *net = NULL; in rio_disc_mport() local
1093 net = rio_scan_alloc_net(mport, 0, 0); in rio_disc_mport()
1094 if (!net) { in rio_disc_mport()
1105 if (rio_disc_peer(net, mport, RIO_ANY_DESTID(mport->sys_size), in rio_disc_mport()
1113 rio_build_route_tables(net); in rio_disc_mport()