Lines Matching refs:port

107 	struct ib_umad_port  port[0];
112 struct ib_umad_port *port;
494 ah_attr.port_num = file->port->port_num;
618 mutex_lock(&file->port->file_mutex);
621 if (!file->port->ib_dev) {
661 agent = ib_register_mad_agent(file->port->ib_dev, file->port->port_num,
697 mutex_unlock(&file->port->file_mutex);
711 mutex_lock(&file->port->file_mutex);
728 mutex_unlock(&file->port->file_mutex);
788 * - the port is added to umad_port[] as the last part of module
794 struct ib_umad_port *port;
799 port = umad_port[iminor(inode) - IB_UMAD_MINOR_BASE];
800 if (port)
801 kref_get(&port->umad_dev->ref);
804 if (!port)
807 mutex_lock(&port->file_mutex);
809 if (!port->ib_dev) {
816 kref_put(&port->umad_dev->ref, ib_umad_release_dev);
827 file->port = port;
831 list_add_tail(&file->port_list, &port->file_list);
834 mutex_unlock(&port->file_mutex);
841 struct ib_umad_device *dev = file->port->umad_dev;
846 mutex_lock(&file->port->file_mutex);
867 mutex_unlock(&file->port->file_mutex);
890 struct ib_umad_port *port;
897 port = umad_port[iminor(inode) - IB_UMAD_MINOR_BASE - IB_UMAD_MAX_PORTS];
898 if (port)
899 kref_get(&port->umad_dev->ref);
902 if (!port)
906 if (down_trylock(&port->sm_sem)) {
911 if (down_interruptible(&port->sm_sem)) {
917 ret = ib_modify_port(port->ib_dev, port->port_num, 0, &props);
919 up(&port->sm_sem);
923 filp->private_data = port;
928 kref_put(&port->umad_dev->ref, ib_umad_release_dev);
934 struct ib_umad_port *port = filp->private_data;
940 mutex_lock(&port->file_mutex);
941 if (port->ib_dev)
942 ret = ib_modify_port(port->ib_dev, port->port_num, 0, &props);
943 mutex_unlock(&port->file_mutex);
945 up(&port->sm_sem);
947 kref_put(&port->umad_dev->ref, ib_umad_release_dev);
967 struct ib_umad_port *port = dev_get_drvdata(dev);
969 if (!port)
972 return sprintf(buf, "%s\n", port->ib_dev->name);
979 struct ib_umad_port *port = dev_get_drvdata(dev);
981 if (!port)
984 return sprintf(buf, "%d\n", port->port_num);
986 static DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
995 struct ib_umad_port *port)
998 port->dev_num = find_first_zero_bit(dev_map, IB_UMAD_MAX_PORTS);
999 if (port->dev_num >= IB_UMAD_MAX_PORTS) {
1003 set_bit(port->dev_num, dev_map);
1006 port->ib_dev = device;
1007 port->port_num = port_num;
1008 init_MUTEX(&port->sm_sem);
1009 mutex_init(&port->file_mutex);
1010 INIT_LIST_HEAD(&port->file_list);
1012 port->cdev = cdev_alloc();
1013 if (!port->cdev)
1015 port->cdev->owner = THIS_MODULE;
1016 port->cdev->ops = &umad_fops;
1017 kobject_set_name(&port->cdev->kobj, "umad%d", port->dev_num);
1018 if (cdev_add(port->cdev, base_dev + port->dev_num, 1))
1021 port->dev = device_create(umad_class, device->dma_device,
1022 port->cdev->dev, port,
1023 "umad%d", port->dev_num);
1024 if (IS_ERR(port->dev))
1027 if (device_create_file(port->dev, &dev_attr_ibdev))
1029 if (device_create_file(port->dev, &dev_attr_port))
1032 port->sm_cdev = cdev_alloc();
1033 if (!port->sm_cdev)
1035 port->sm_cdev->owner = THIS_MODULE;
1036 port->sm_cdev->ops = &umad_sm_fops;
1037 kobject_set_name(&port->sm_cdev->kobj, "issm%d", port->dev_num);
1038 if (cdev_add(port->sm_cdev, base_dev + port->dev_num + IB_UMAD_MAX_PORTS, 1))
1041 port->sm_dev = device_create(umad_class, device->dma_device,
1042 port->sm_cdev->dev, port,
1043 "issm%d", port->dev_num);
1044 if (IS_ERR(port->sm_dev))
1047 if (device_create_file(port->sm_dev, &dev_attr_ibdev))
1049 if (device_create_file(port->sm_dev, &dev_attr_port))
1053 umad_port[port->dev_num] = port;
1059 device_destroy(umad_class, port->sm_cdev->dev);
1062 cdev_del(port->sm_cdev);
1065 device_destroy(umad_class, port->cdev->dev);
1068 cdev_del(port->cdev);
1069 clear_bit(port->dev_num, dev_map);
1074 static void ib_umad_kill_port(struct ib_umad_port *port)
1080 dev_set_drvdata(port->dev, NULL);
1081 dev_set_drvdata(port->sm_dev, NULL);
1083 device_destroy(umad_class, port->cdev->dev);
1084 device_destroy(umad_class, port->sm_cdev->dev);
1086 cdev_del(port->cdev);
1087 cdev_del(port->sm_cdev);
1090 umad_port[port->dev_num] = NULL;
1093 mutex_lock(&port->file_mutex);
1095 port->ib_dev = NULL;
1097 list_for_each_entry(file, &port->file_list, port_list) {
1108 mutex_unlock(&port->file_mutex);
1110 clear_bit(port->dev_num, dev_map);
1140 umad_dev->port[i - s].umad_dev = umad_dev;
1143 if (ib_umad_init_port(device, i, &umad_dev->port[i - s]))
1154 ib_umad_kill_port(&umad_dev->port[i - s]);
1169 ib_umad_kill_port(&umad_dev->port[i]);