Lines Matching refs:net
62 static u16 rio_destid_alloc(struct rio_net *net) in rio_destid_alloc() argument
65 struct rio_id_table *idtab = &net->destid_table; in rio_destid_alloc()
88 static int rio_destid_reserve(struct rio_net *net, u16 destid) in rio_destid_reserve() argument
91 struct rio_id_table *idtab = &net->destid_table; in rio_destid_reserve()
107 static void rio_destid_free(struct rio_net *net, u16 destid) in rio_destid_free() argument
109 struct rio_id_table *idtab = &net->destid_table; in rio_destid_free()
121 static u16 rio_destid_first(struct rio_net *net) in rio_destid_first() argument
124 struct rio_id_table *idtab = &net->destid_table; in rio_destid_first()
141 static u16 rio_destid_next(struct rio_net *net, u16 from) in rio_destid_next() argument
144 struct rio_id_table *idtab = &net->destid_table; in rio_destid_next()
210 static int rio_clear_locks(struct rio_net *net) in rio_clear_locks() argument
212 struct rio_mport *port = net->hport; in rio_clear_locks()
227 list_for_each_entry(rdev, &net->devices, net_list) { in rio_clear_locks()
341 static struct rio_dev *rio_setup_device(struct rio_net *net, in rio_setup_device() argument
370 rdev->net = net; in rio_setup_device()
420 next_destid = rio_destid_alloc(net); in rio_setup_device()
447 dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, in rio_setup_device()
453 list_add_tail(&rswitch->node, &net->switches); in rio_setup_device()
460 dev_set_name(&rdev->dev, "%02x:e:%04x", rdev->net->id, in rio_setup_device()
564 static int rio_enum_peer(struct rio_net *net, struct rio_mport *port, in rio_enum_peer() argument
621 rdev = rio_setup_device(net, port, RIO_ANY_DESTID(port->sys_size), in rio_enum_peer()
625 list_add_tail(&rdev->net_list, &net->devices); in rio_enum_peer()
644 destid = rio_destid_first(net); in rio_enum_peer()
651 destid = rio_destid_next(net, destid + 1); in rio_enum_peer()
685 if (rio_enum_peer(net, port, hopcount + 1, in rio_enum_peer()
690 destid = rio_destid_next(net, cur_destid + 1); in rio_enum_peer()
704 destid = rio_destid_next(net, in rio_enum_peer()
732 next_destid = rio_destid_alloc(net); in rio_enum_peer()
772 rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, in rio_disc_peer() argument
780 if ((rdev = rio_setup_device(net, port, destid, hopcount, 0))) { in rio_disc_peer()
782 list_add_tail(&rdev->net_list, &net->devices); in rio_disc_peer()
825 if (rio_disc_peer(net, port, ndestid, in rio_disc_peer()
881 struct rio_net *net; in rio_alloc_net() local
883 net = kzalloc(sizeof(struct rio_net), GFP_KERNEL); in rio_alloc_net()
884 if (net && do_enum) { in rio_alloc_net()
885 net->destid_table.table = kcalloc( in rio_alloc_net()
890 if (net->destid_table.table == NULL) { in rio_alloc_net()
892 kfree(net); in rio_alloc_net()
893 net = NULL; in rio_alloc_net()
895 net->destid_table.start = start; in rio_alloc_net()
896 net->destid_table.max = in rio_alloc_net()
898 spin_lock_init(&net->destid_table.lock); in rio_alloc_net()
902 if (net) { in rio_alloc_net()
903 INIT_LIST_HEAD(&net->node); in rio_alloc_net()
904 INIT_LIST_HEAD(&net->devices); in rio_alloc_net()
905 INIT_LIST_HEAD(&net->switches); in rio_alloc_net()
906 INIT_LIST_HEAD(&net->mports); in rio_alloc_net()
907 list_add_tail(&port->nnode, &net->mports); in rio_alloc_net()
908 net->hport = port; in rio_alloc_net()
909 net->id = port->id; in rio_alloc_net()
911 return net; in rio_alloc_net()
922 static void rio_update_route_tables(struct rio_net *net) in rio_update_route_tables() argument
929 list_for_each_entry(rdev, &net->devices, net_list) { in rio_update_route_tables()
933 list_for_each_entry(rswitch, &net->switches, node) { in rio_update_route_tables()
993 struct rio_net *net = NULL; in rio_enum_mport() local
1019 net = rio_alloc_net(mport, 1, 0); in rio_enum_mport()
1020 if (!net) { in rio_enum_mport()
1027 rio_destid_reserve(net, mport->host_deviceid); in rio_enum_mport()
1036 next_destid = rio_destid_alloc(net); in rio_enum_mport()
1038 if (rio_enum_peer(net, mport, 0, NULL, 0) < 0) { in rio_enum_mport()
1043 rio_clear_locks(net); in rio_enum_mport()
1048 rio_destid_free(net, next_destid); in rio_enum_mport()
1049 rio_update_route_tables(net); in rio_enum_mport()
1050 rio_clear_locks(net); in rio_enum_mport()
1069 static void rio_build_route_tables(struct rio_net *net) in rio_build_route_tables() argument
1076 list_for_each_entry(rswitch, &net->switches, node) { in rio_build_route_tables()
1079 rio_lock_device(net->hport, rdev->destid, in rio_build_route_tables()
1082 i < RIO_MAX_ROUTE_ENTRIES(net->hport->sys_size); in rio_build_route_tables()
1090 rio_unlock_device(net->hport, rdev->destid, rdev->hopcount); in rio_build_route_tables()
1108 struct rio_net *net = NULL; in rio_disc_mport() local
1136 net = rio_alloc_net(mport, 0, 0); in rio_disc_mport()
1137 if (!net) { in rio_disc_mport()
1148 if (rio_disc_peer(net, mport, RIO_ANY_DESTID(mport->sys_size), in rio_disc_mport()
1156 rio_build_route_tables(net); in rio_disc_mport()