Lines Matching refs:driver
254 if (!tty || !tty->driver) in tty_driver_name()
256 return tty->driver->name; in tty_driver_name()
283 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in check_tty_count()
284 tty->driver->subtype == PTY_TYPE_SLAVE && in check_tty_count()
1173 static void pty_line_name(struct tty_driver *driver, int index, char *p) in pty_line_name() argument
1176 int i = index + driver->name_base; in pty_line_name()
1179 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name, in pty_line_name()
1194 static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p) in tty_line_name() argument
1196 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE) in tty_line_name()
1197 return sprintf(p, "%s", driver->name); in tty_line_name()
1199 return sprintf(p, "%s%d", driver->name, in tty_line_name()
1200 index + driver->name_base); in tty_line_name()
1214 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver, in tty_driver_lookup_tty() argument
1219 if (driver->ops->lookup) { in tty_driver_lookup_tty()
1223 tty = driver->ops->lookup(driver, file, idx); in tty_driver_lookup_tty()
1225 if (idx >= driver->num) in tty_driver_lookup_tty()
1227 tty = driver->ttys[idx]; in tty_driver_lookup_tty()
1246 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) in tty_init_termios()
1247 tty->termios = tty->driver->init_termios; in tty_init_termios()
1250 tp = tty->driver->termios[idx]; in tty_init_termios()
1253 tty->termios.c_line = tty->driver->init_termios.c_line; in tty_init_termios()
1255 tty->termios = tty->driver->init_termios; in tty_init_termios()
1271 int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty) in tty_standard_install() argument
1274 tty_driver_kref_get(driver); in tty_standard_install()
1276 driver->ttys[tty->index] = tty; in tty_standard_install()
1292 static int tty_driver_install_tty(struct tty_driver *driver, in tty_driver_install_tty() argument
1295 return driver->ops->install ? driver->ops->install(driver, tty) : in tty_driver_install_tty()
1296 tty_standard_install(driver, tty); in tty_driver_install_tty()
1309 static void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty) in tty_driver_remove_tty() argument
1311 if (driver->ops->remove) in tty_driver_remove_tty()
1312 driver->ops->remove(driver, tty); in tty_driver_remove_tty()
1314 driver->ttys[tty->index] = NULL; in tty_driver_remove_tty()
1328 struct tty_driver *driver = tty->driver; in tty_reopen() local
1332 if (driver->type == TTY_DRIVER_TYPE_PTY && in tty_reopen()
1333 driver->subtype == PTY_TYPE_MASTER) in tty_reopen()
1384 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) in tty_init_dev() argument
1397 if (!try_module_get(driver->owner)) in tty_init_dev()
1400 tty = alloc_tty_struct(driver, idx); in tty_init_dev()
1407 retval = tty_driver_install_tty(driver, tty); in tty_init_dev()
1412 tty->port = driver->ports[idx]; in tty_init_dev()
1416 __func__, tty->driver->name)) { in tty_init_dev()
1442 module_put(driver->owner); in tty_init_dev()
1468 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) in tty_save_termios()
1472 tp = tty->driver->termios[idx]; in tty_save_termios()
1477 tty->driver->termios[idx] = tp; in tty_save_termios()
1518 struct tty_driver *driver = tty->driver; in release_one_tty() local
1519 struct module *owner = driver->owner; in release_one_tty()
1524 tty_driver_kref_put(driver); in release_one_tty()
1582 tty_driver_remove_tty(tty->driver, tty); in release_tty()
1607 if (idx < 0 || idx >= tty->driver->num) { in tty_release_checks()
1613 if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) in tty_release_checks()
1616 if (tty != tty->driver->ttys[idx]) { in tty_release_checks()
1618 idx, tty->driver->ttys[idx]); in tty_release_checks()
1621 if (tty->driver->other) { in tty_release_checks()
1624 if (o_tty != tty->driver->other->ttys[idx]) { in tty_release_checks()
1626 idx, tty->driver->other->ttys[idx]); in tty_release_checks()
1733 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_release()
1734 tty->driver->subtype == PTY_TYPE_MASTER) in tty_release()
1908 struct tty_driver *driver = NULL; in tty_lookup_driver() local
1915 driver = tty_driver_kref_get(console_driver); in tty_lookup_driver()
1924 driver = tty_driver_kref_get(console_driver); in tty_lookup_driver()
1925 if (driver && filp) { in tty_lookup_driver()
1931 if (driver) in tty_lookup_driver()
1932 tty_driver_kref_put(driver); in tty_lookup_driver()
1936 driver = get_tty_driver(device, index); in tty_lookup_driver()
1937 if (!driver) in tty_lookup_driver()
1941 return driver; in tty_lookup_driver()
1947 struct tty_driver *driver; in tty_kopen() local
1951 driver = tty_lookup_driver(device, NULL, &index); in tty_kopen()
1952 if (IS_ERR(driver)) { in tty_kopen()
1954 return ERR_CAST(driver); in tty_kopen()
1958 tty = tty_driver_lookup_tty(driver, NULL, index); in tty_kopen()
1967 tty = tty_init_dev(driver, index); in tty_kopen()
1974 tty_driver_kref_put(driver); in tty_kopen()
2033 struct tty_driver *driver = NULL; in tty_open_by_driver() local
2038 driver = tty_lookup_driver(device, filp, &index); in tty_open_by_driver()
2039 if (IS_ERR(driver)) { in tty_open_by_driver()
2041 return ERR_CAST(driver); in tty_open_by_driver()
2045 tty = tty_driver_lookup_tty(driver, filp, index); in tty_open_by_driver()
2073 tty = tty_init_dev(driver, index); in tty_open_by_driver()
2077 tty_driver_kref_put(driver); in tty_open_by_driver()
2166 (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_open()
2167 tty->driver->subtype == PTY_TYPE_MASTER); in tty_open()
2475 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK) in send_break()
2659 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_pair_get_tty()
2660 tty->driver->subtype == PTY_TYPE_MASTER) in tty_pair_get_tty()
3098 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx) in alloc_tty_struct() argument
3128 tty->driver = driver; in alloc_tty_struct()
3129 tty->ops = driver->ops; in alloc_tty_struct()
3131 tty_line_name(driver, idx, tty->name); in alloc_tty_struct()
3158 static int tty_cdev_add(struct tty_driver *driver, dev_t dev, in tty_cdev_add() argument
3164 driver->cdevs[index] = cdev_alloc(); in tty_cdev_add()
3165 if (!driver->cdevs[index]) in tty_cdev_add()
3167 driver->cdevs[index]->ops = &tty_fops; in tty_cdev_add()
3168 driver->cdevs[index]->owner = driver->owner; in tty_cdev_add()
3169 err = cdev_add(driver->cdevs[index], dev, count); in tty_cdev_add()
3171 kobject_put(&driver->cdevs[index]->kobj); in tty_cdev_add()
3193 struct device *tty_register_device(struct tty_driver *driver, unsigned index, in tty_register_device() argument
3196 return tty_register_device_attr(driver, index, device, NULL, NULL); in tty_register_device()
3225 struct device *tty_register_device_attr(struct tty_driver *driver, in tty_register_device_attr() argument
3231 dev_t devt = MKDEV(driver->major, driver->minor_start) + index; in tty_register_device_attr()
3236 if (index >= driver->num) { in tty_register_device_attr()
3238 driver->name, index); in tty_register_device_attr()
3242 if (driver->type == TTY_DRIVER_TYPE_PTY) in tty_register_device_attr()
3243 pty_line_name(driver, index, name); in tty_register_device_attr()
3245 tty_line_name(driver, index, name); in tty_register_device_attr()
3265 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) { in tty_register_device_attr()
3270 tp = driver->termios[index]; in tty_register_device_attr()
3272 driver->termios[index] = NULL; in tty_register_device_attr()
3276 retval = tty_cdev_add(driver, devt, index, 1); in tty_register_device_attr()
3305 void tty_unregister_device(struct tty_driver *driver, unsigned index) in tty_unregister_device() argument
3307 device_destroy(&tty_class, MKDEV(driver->major, driver->minor_start) + index); in tty_unregister_device()
3308 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) { in tty_unregister_device()
3309 cdev_del(driver->cdevs[index]); in tty_unregister_device()
3310 driver->cdevs[index] = NULL; in tty_unregister_device()
3329 struct tty_driver *driver; in __tty_alloc_driver() local
3336 driver = kzalloc(sizeof(*driver), GFP_KERNEL); in __tty_alloc_driver()
3337 if (!driver) in __tty_alloc_driver()
3340 kref_init(&driver->kref); in __tty_alloc_driver()
3341 driver->num = lines; in __tty_alloc_driver()
3342 driver->owner = owner; in __tty_alloc_driver()
3343 driver->flags = flags; in __tty_alloc_driver()
3346 driver->ttys = kcalloc(lines, sizeof(*driver->ttys), in __tty_alloc_driver()
3348 driver->termios = kcalloc(lines, sizeof(*driver->termios), in __tty_alloc_driver()
3350 if (!driver->ttys || !driver->termios) { in __tty_alloc_driver()
3357 driver->ports = kcalloc(lines, sizeof(*driver->ports), in __tty_alloc_driver()
3359 if (!driver->ports) { in __tty_alloc_driver()
3366 driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL); in __tty_alloc_driver()
3367 if (!driver->cdevs) { in __tty_alloc_driver()
3372 return driver; in __tty_alloc_driver()
3374 kfree(driver->ports); in __tty_alloc_driver()
3375 kfree(driver->ttys); in __tty_alloc_driver()
3376 kfree(driver->termios); in __tty_alloc_driver()
3377 kfree(driver->cdevs); in __tty_alloc_driver()
3378 kfree(driver); in __tty_alloc_driver()
3385 struct tty_driver *driver = container_of(kref, struct tty_driver, kref); in destruct_tty_driver() local
3389 if (driver->flags & TTY_DRIVER_INSTALLED) { in destruct_tty_driver()
3390 for (i = 0; i < driver->num; i++) { in destruct_tty_driver()
3391 tp = driver->termios[i]; in destruct_tty_driver()
3393 driver->termios[i] = NULL; in destruct_tty_driver()
3396 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) in destruct_tty_driver()
3397 tty_unregister_device(driver, i); in destruct_tty_driver()
3399 proc_tty_unregister_driver(driver); in destruct_tty_driver()
3400 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) in destruct_tty_driver()
3401 cdev_del(driver->cdevs[0]); in destruct_tty_driver()
3403 kfree(driver->cdevs); in destruct_tty_driver()
3404 kfree(driver->ports); in destruct_tty_driver()
3405 kfree(driver->termios); in destruct_tty_driver()
3406 kfree(driver->ttys); in destruct_tty_driver()
3407 kfree(driver); in destruct_tty_driver()
3416 void tty_driver_kref_put(struct tty_driver *driver) in tty_driver_kref_put() argument
3418 kref_put(&driver->kref, destruct_tty_driver); in tty_driver_kref_put()
3428 int tty_register_driver(struct tty_driver *driver) in tty_register_driver() argument
3435 if (!driver->major) { in tty_register_driver()
3436 error = alloc_chrdev_region(&dev, driver->minor_start, in tty_register_driver()
3437 driver->num, driver->name); in tty_register_driver()
3439 driver->major = MAJOR(dev); in tty_register_driver()
3440 driver->minor_start = MINOR(dev); in tty_register_driver()
3443 dev = MKDEV(driver->major, driver->minor_start); in tty_register_driver()
3444 error = register_chrdev_region(dev, driver->num, driver->name); in tty_register_driver()
3449 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) { in tty_register_driver()
3450 error = tty_cdev_add(driver, dev, 0, driver->num); in tty_register_driver()
3456 list_add(&driver->tty_drivers, &tty_drivers); in tty_register_driver()
3458 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) { in tty_register_driver()
3459 for (i = 0; i < driver->num; i++) { in tty_register_driver()
3460 d = tty_register_device(driver, i, NULL); in tty_register_driver()
3467 proc_tty_register_driver(driver); in tty_register_driver()
3468 driver->flags |= TTY_DRIVER_INSTALLED; in tty_register_driver()
3473 tty_unregister_device(driver, i); in tty_register_driver()
3476 list_del(&driver->tty_drivers); in tty_register_driver()
3479 unregister_chrdev_region(dev, driver->num); in tty_register_driver()
3491 void tty_unregister_driver(struct tty_driver *driver) in tty_unregister_driver() argument
3493 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start), in tty_unregister_driver()
3494 driver->num); in tty_unregister_driver()
3496 list_del(&driver->tty_drivers); in tty_unregister_driver()
3502 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; in tty_devnum()