Lines Matching refs:rdev
40 static void rio_init_em(struct rio_dev *rdev);
213 struct rio_dev *rdev; in rio_clear_locks() local
227 list_for_each_entry(rdev, &net->devices, net_list) { in rio_clear_locks()
228 rio_write_config_32(rdev, RIO_HOST_DID_LOCK_CSR, in rio_clear_locks()
230 rio_read_config_32(rdev, RIO_HOST_DID_LOCK_CSR, &result); in rio_clear_locks()
234 rdev->vid, rdev->did); in rio_clear_locks()
239 rio_read_config_32(rdev, in rio_clear_locks()
240 rdev->phys_efptr + RIO_PORT_GEN_CTL_CSR, in rio_clear_locks()
243 rio_write_config_32(rdev, in rio_clear_locks()
244 rdev->phys_efptr + RIO_PORT_GEN_CTL_CSR, in rio_clear_locks()
303 struct rio_dev *rdev; in rio_release_dev() local
305 rdev = to_rio_dev(dev); in rio_release_dev()
306 kfree(rdev); in rio_release_dev()
318 static int rio_is_switch(struct rio_dev *rdev) in rio_is_switch() argument
320 if (rdev->pef & RIO_PEF_SWITCH) in rio_is_switch()
346 struct rio_dev *rdev; in rio_setup_device() local
366 rdev = kzalloc(size, GFP_KERNEL); in rio_setup_device()
367 if (!rdev) in rio_setup_device()
370 rdev->net = net; in rio_setup_device()
371 rdev->pef = result; in rio_setup_device()
372 rdev->swpinfo = swpinfo; in rio_setup_device()
375 rdev->did = result >> 16; in rio_setup_device()
376 rdev->vid = result & 0xffff; in rio_setup_device()
378 &rdev->device_rev); in rio_setup_device()
381 rdev->asm_did = result >> 16; in rio_setup_device()
382 rdev->asm_vid = result & 0xffff; in rio_setup_device()
385 rdev->asm_rev = result >> 16; in rio_setup_device()
386 if (rdev->pef & RIO_PEF_EXT_FEATURES) { in rio_setup_device()
387 rdev->efptr = result & 0xffff; in rio_setup_device()
388 rdev->phys_efptr = rio_mport_get_physefb(port, 0, destid, in rio_setup_device()
391 rdev->em_efptr = rio_mport_get_feature(port, 0, destid, in rio_setup_device()
396 &rdev->src_ops); in rio_setup_device()
398 &rdev->dst_ops); in rio_setup_device()
408 rdev->comp_tag = next_comptag++; in rio_setup_device()
409 rdev->do_enum = true; in rio_setup_device()
413 &rdev->comp_tag); in rio_setup_device()
416 if (rio_device_has_destid(port, rdev->src_ops, rdev->dst_ops)) { in rio_setup_device()
419 rdev->destid = next_destid; in rio_setup_device()
422 rdev->destid = rio_get_device_id(port, destid, hopcount); in rio_setup_device()
424 rdev->hopcount = 0xff; in rio_setup_device()
429 rdev->destid = destid; in rio_setup_device()
430 rdev->hopcount = hopcount; in rio_setup_device()
434 if (rio_is_switch(rdev)) { in rio_setup_device()
435 rswitch = rdev->rswitch; in rio_setup_device()
447 dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, in rio_setup_device()
448 rdev->comp_tag & RIO_CTAG_UDEVID); in rio_setup_device()
451 rio_route_clr_table(rdev, RIO_GLOBAL_TABLE, 0); in rio_setup_device()
460 dev_set_name(&rdev->dev, "%02x:e:%04x", rdev->net->id, in rio_setup_device()
461 rdev->comp_tag & RIO_CTAG_UDEVID); in rio_setup_device()
464 rdev->dev.parent = &port->dev; in rio_setup_device()
465 rio_attach_device(rdev); in rio_setup_device()
467 device_initialize(&rdev->dev); in rio_setup_device()
468 rdev->dev.release = rio_release_dev; in rio_setup_device()
469 rio_dev_get(rdev); in rio_setup_device()
471 rdev->dma_mask = DMA_BIT_MASK(32); in rio_setup_device()
472 rdev->dev.dma_mask = &rdev->dma_mask; in rio_setup_device()
473 rdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); in rio_setup_device()
475 if (rdev->dst_ops & RIO_DST_OPS_DOORBELL) in rio_setup_device()
476 rio_init_dbell_res(&rdev->riores[RIO_DOORBELL_RESOURCE], in rio_setup_device()
479 ret = rio_add_device(rdev); in rio_setup_device()
483 return rdev; in rio_setup_device()
489 kfree(rdev); in rio_setup_device()
567 struct rio_dev *rdev; in rio_enum_peer() local
587 rdev = rio_get_comptag((regval & 0xffff), NULL); in rio_enum_peer()
589 if (rdev && prev && rio_is_switch(prev)) { in rio_enum_peer()
591 rio_name(rdev)); in rio_enum_peer()
592 prev->rswitch->nextdev[prev_port] = rdev; in rio_enum_peer()
621 rdev = rio_setup_device(net, port, RIO_ANY_DESTID(port->sys_size), in rio_enum_peer()
623 if (rdev) { in rio_enum_peer()
625 list_add_tail(&rdev->net_list, &net->devices); in rio_enum_peer()
626 rdev->prev = prev; in rio_enum_peer()
628 prev->rswitch->nextdev[prev_port] = rdev; in rio_enum_peer()
632 if (rio_is_switch(rdev)) { in rio_enum_peer()
639 sw_inport = RIO_GET_PORT_NUM(rdev->swpinfo); in rio_enum_peer()
640 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, in rio_enum_peer()
642 rdev->rswitch->route_table[port->host_deviceid] = sw_inport; in rio_enum_peer()
647 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, in rio_enum_peer()
649 rdev->rswitch->route_table[destid] = sw_inport; in rio_enum_peer()
655 rio_name(rdev), rdev->vid, rdev->did, in rio_enum_peer()
656 RIO_GET_TOTAL_PORTS(rdev->swpinfo)); in rio_enum_peer()
659 port_num < RIO_GET_TOTAL_PORTS(rdev->swpinfo); in rio_enum_peer()
665 rdev->rswitch->port_ok |= (1 << port_num); in rio_enum_peer()
680 rdev->rswitch->port_ok |= (1 << port_num); in rio_enum_peer()
681 rio_route_add_entry(rdev, RIO_GLOBAL_TABLE, in rio_enum_peer()
686 rdev, port_num) < 0) in rio_enum_peer()
695 rio_route_add_entry(rdev, in rio_enum_peer()
700 rdev->rswitch-> in rio_enum_peer()
712 if (rdev->em_efptr) in rio_enum_peer()
713 rio_set_port_lockout(rdev, port_num, 1); in rio_enum_peer()
715 rdev->rswitch->port_ok &= ~(1 << port_num); in rio_enum_peer()
720 if ((rdev->src_ops & RIO_SRC_OPS_PORT_WRITE) && in rio_enum_peer()
721 (rdev->em_efptr)) { in rio_enum_peer()
722 rio_write_config_32(rdev, in rio_enum_peer()
723 rdev->em_efptr + RIO_EM_PW_TGT_DEVID, in rio_enum_peer()
728 rio_init_em(rdev); in rio_enum_peer()
734 rdev->destid = sw_destid; in rio_enum_peer()
737 rio_name(rdev), rdev->vid, rdev->did); in rio_enum_peer()
776 struct rio_dev *rdev; in rio_disc_peer() local
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()
783 rdev->prev = prev; in rio_disc_peer()
785 prev->rswitch->nextdev[prev_port] = rdev; in rio_disc_peer()
789 if (rio_is_switch(rdev)) { in rio_disc_peer()
791 rdev->destid = destid; in rio_disc_peer()
795 rio_name(rdev), rdev->vid, rdev->did, in rio_disc_peer()
796 RIO_GET_TOTAL_PORTS(rdev->swpinfo)); in rio_disc_peer()
798 port_num < RIO_GET_TOTAL_PORTS(rdev->swpinfo); in rio_disc_peer()
800 if (RIO_GET_PORT_NUM(rdev->swpinfo) == port_num) in rio_disc_peer()
814 rio_route_get_entry(rdev, in rio_disc_peer()
826 hopcount + 1, rdev, port_num) < 0) in rio_disc_peer()
832 rio_name(rdev), rdev->vid, rdev->did); in rio_disc_peer()
924 struct rio_dev *rdev, *swrdev; in rio_update_route_tables() local
929 list_for_each_entry(rdev, &net->devices, net_list) { in rio_update_route_tables()
931 destid = rdev->destid; in rio_update_route_tables()
935 if (rio_is_switch(rdev) && (rdev->rswitch == rswitch)) in rio_update_route_tables()
962 static void rio_init_em(struct rio_dev *rdev) in rio_init_em() argument
964 if (rio_is_switch(rdev) && (rdev->em_efptr) && in rio_init_em()
965 rdev->rswitch->ops && rdev->rswitch->ops->em_init) { in rio_init_em()
966 rdev->rswitch->ops->em_init(rdev); in rio_init_em()
1072 struct rio_dev *rdev; in rio_build_route_tables() local
1077 rdev = sw_to_rio_dev(rswitch); in rio_build_route_tables()
1079 rio_lock_device(net->hport, rdev->destid, in rio_build_route_tables()
1080 rdev->hopcount, 1000); in rio_build_route_tables()
1084 if (rio_route_get_entry(rdev, RIO_GLOBAL_TABLE, in rio_build_route_tables()
1090 rio_unlock_device(net->hport, rdev->destid, rdev->hopcount); in rio_build_route_tables()