Lines Matching refs:driver
236 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
291 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in check_tty_count()
292 tty->driver->subtype == PTY_TYPE_SLAVE && in check_tty_count()
837 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY) { in disassociate_ctty()
1191 tty->driver->name); in tty_write()
1262 static void pty_line_name(struct tty_driver *driver, int index, char *p) in pty_line_name() argument
1264 int i = index + driver->name_base; in pty_line_name()
1267 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name, in pty_line_name()
1282 static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p) in tty_line_name() argument
1284 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE) in tty_line_name()
1285 return sprintf(p, "%s", driver->name); in tty_line_name()
1287 return sprintf(p, "%s%d", driver->name, in tty_line_name()
1288 index + driver->name_base); in tty_line_name()
1302 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver, in tty_driver_lookup_tty() argument
1305 if (driver->ops->lookup) in tty_driver_lookup_tty()
1306 return driver->ops->lookup(driver, inode, idx); in tty_driver_lookup_tty()
1308 return driver->ttys[idx]; in tty_driver_lookup_tty()
1324 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) in tty_init_termios()
1325 tty->termios = tty->driver->init_termios; in tty_init_termios()
1328 tp = tty->driver->termios[idx]; in tty_init_termios()
1332 tty->termios = tty->driver->init_termios; in tty_init_termios()
1341 int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty) in tty_standard_install() argument
1347 tty_driver_kref_get(driver); in tty_standard_install()
1349 driver->ttys[tty->index] = tty; in tty_standard_install()
1366 static int tty_driver_install_tty(struct tty_driver *driver, in tty_driver_install_tty() argument
1369 return driver->ops->install ? driver->ops->install(driver, tty) : in tty_driver_install_tty()
1370 tty_standard_install(driver, tty); in tty_driver_install_tty()
1383 void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty) in tty_driver_remove_tty() argument
1385 if (driver->ops->remove) in tty_driver_remove_tty()
1386 driver->ops->remove(driver, tty); in tty_driver_remove_tty()
1388 driver->ttys[tty->index] = NULL; in tty_driver_remove_tty()
1402 struct tty_driver *driver = tty->driver; in tty_reopen() local
1408 if (driver->type == TTY_DRIVER_TYPE_PTY && in tty_reopen()
1409 driver->subtype == PTY_TYPE_MASTER) { in tty_reopen()
1450 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) in tty_init_dev() argument
1463 if (!try_module_get(driver->owner)) in tty_init_dev()
1466 tty = alloc_tty_struct(driver, idx); in tty_init_dev()
1473 retval = tty_driver_install_tty(driver, tty); in tty_init_dev()
1478 tty->port = driver->ports[idx]; in tty_init_dev()
1482 __func__, tty->driver->name); in tty_init_dev()
1502 module_put(driver->owner); in tty_init_dev()
1520 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) in tty_free_termios()
1524 tp = tty->driver->termios[idx]; in tty_free_termios()
1531 tty->driver->termios[idx] = tp; in tty_free_termios()
1568 struct tty_driver *driver = tty->driver; in release_one_tty() local
1569 struct module *owner = driver->owner; in release_one_tty()
1575 tty_driver_kref_put(driver); in release_one_tty()
1632 tty_driver_remove_tty(tty->driver, tty); in release_tty()
1656 if (idx < 0 || idx >= tty->driver->num) { in tty_release_checks()
1663 if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) in tty_release_checks()
1666 if (tty != tty->driver->ttys[idx]) { in tty_release_checks()
1671 if (tty->driver->other) { in tty_release_checks()
1672 if (o_tty != tty->driver->other->ttys[idx]) { in tty_release_checks()
1724 pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_release()
1725 tty->driver->subtype == PTY_TYPE_MASTER); in tty_release()
1950 struct tty_driver *driver; in tty_lookup_driver() local
1956 driver = tty_driver_kref_get(console_driver); in tty_lookup_driver()
1965 driver = tty_driver_kref_get(console_driver); in tty_lookup_driver()
1966 if (driver) { in tty_lookup_driver()
1976 driver = get_tty_driver(device, index); in tty_lookup_driver()
1977 if (!driver) in tty_lookup_driver()
1981 return driver; in tty_lookup_driver()
2012 struct tty_driver *driver = NULL; in tty_open() local
2035 driver = tty_lookup_driver(device, filp, &noctty, &index); in tty_open()
2036 if (IS_ERR(driver)) { in tty_open()
2037 retval = PTR_ERR(driver); in tty_open()
2042 tty = tty_driver_lookup_tty(driver, inode, index); in tty_open()
2057 tty = tty_init_dev(driver, index); in tty_open()
2060 if (driver) in tty_open()
2061 tty_driver_kref_put(driver); in tty_open()
2070 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_open()
2071 tty->driver->subtype == PTY_TYPE_MASTER) in tty_open()
2126 if (!IS_ERR_OR_NULL(driver)) in tty_open()
2127 tty_driver_kref_put(driver); in tty_open()
2638 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK) in send_break()
2741 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_pair_get_tty()
2742 tty->driver->subtype == PTY_TYPE_MASTER) in tty_pair_get_tty()
2750 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && in tty_pair_get_pty()
2751 tty->driver->subtype == PTY_TYPE_MASTER) in tty_pair_get_pty()
3053 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx) in alloc_tty_struct() argument
3080 tty->driver = driver; in alloc_tty_struct()
3081 tty->ops = driver->ops; in alloc_tty_struct()
3083 tty_line_name(driver, idx, tty->name); in alloc_tty_struct()
3125 static int tty_cdev_add(struct tty_driver *driver, dev_t dev, in tty_cdev_add() argument
3129 cdev_init(&driver->cdevs[index], &tty_fops); in tty_cdev_add()
3130 driver->cdevs[index].owner = driver->owner; in tty_cdev_add()
3131 return cdev_add(&driver->cdevs[index], dev, count); in tty_cdev_add()
3153 struct device *tty_register_device(struct tty_driver *driver, unsigned index, in tty_register_device() argument
3156 return tty_register_device_attr(driver, index, device, NULL, NULL); in tty_register_device()
3186 struct device *tty_register_device_attr(struct tty_driver *driver, in tty_register_device_attr() argument
3192 dev_t devt = MKDEV(driver->major, driver->minor_start) + index; in tty_register_device_attr()
3197 if (index >= driver->num) { in tty_register_device_attr()
3203 if (driver->type == TTY_DRIVER_TYPE_PTY) in tty_register_device_attr()
3204 pty_line_name(driver, index, name); in tty_register_device_attr()
3206 tty_line_name(driver, index, name); in tty_register_device_attr()
3208 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) { in tty_register_device_attr()
3209 retval = tty_cdev_add(driver, devt, index, 1); in tty_register_device_attr()
3238 cdev_del(&driver->cdevs[index]); in tty_register_device_attr()
3254 void tty_unregister_device(struct tty_driver *driver, unsigned index) in tty_unregister_device() argument
3257 MKDEV(driver->major, driver->minor_start) + index); in tty_unregister_device()
3258 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) in tty_unregister_device()
3259 cdev_del(&driver->cdevs[index]); in tty_unregister_device()
3275 struct tty_driver *driver; in __tty_alloc_driver() local
3282 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL); in __tty_alloc_driver()
3283 if (!driver) in __tty_alloc_driver()
3286 kref_init(&driver->kref); in __tty_alloc_driver()
3287 driver->magic = TTY_DRIVER_MAGIC; in __tty_alloc_driver()
3288 driver->num = lines; in __tty_alloc_driver()
3289 driver->owner = owner; in __tty_alloc_driver()
3290 driver->flags = flags; in __tty_alloc_driver()
3293 driver->ttys = kcalloc(lines, sizeof(*driver->ttys), in __tty_alloc_driver()
3295 driver->termios = kcalloc(lines, sizeof(*driver->termios), in __tty_alloc_driver()
3297 if (!driver->ttys || !driver->termios) { in __tty_alloc_driver()
3304 driver->ports = kcalloc(lines, sizeof(*driver->ports), in __tty_alloc_driver()
3306 if (!driver->ports) { in __tty_alloc_driver()
3313 driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL); in __tty_alloc_driver()
3314 if (!driver->cdevs) { in __tty_alloc_driver()
3319 return driver; in __tty_alloc_driver()
3321 kfree(driver->ports); in __tty_alloc_driver()
3322 kfree(driver->ttys); in __tty_alloc_driver()
3323 kfree(driver->termios); in __tty_alloc_driver()
3324 kfree(driver); in __tty_alloc_driver()
3331 struct tty_driver *driver = container_of(kref, struct tty_driver, kref); in destruct_tty_driver() local
3335 if (driver->flags & TTY_DRIVER_INSTALLED) { in destruct_tty_driver()
3341 for (i = 0; i < driver->num; i++) { in destruct_tty_driver()
3342 tp = driver->termios[i]; in destruct_tty_driver()
3344 driver->termios[i] = NULL; in destruct_tty_driver()
3347 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) in destruct_tty_driver()
3348 tty_unregister_device(driver, i); in destruct_tty_driver()
3350 proc_tty_unregister_driver(driver); in destruct_tty_driver()
3351 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) in destruct_tty_driver()
3352 cdev_del(&driver->cdevs[0]); in destruct_tty_driver()
3354 kfree(driver->cdevs); in destruct_tty_driver()
3355 kfree(driver->ports); in destruct_tty_driver()
3356 kfree(driver->termios); in destruct_tty_driver()
3357 kfree(driver->ttys); in destruct_tty_driver()
3358 kfree(driver); in destruct_tty_driver()
3361 void tty_driver_kref_put(struct tty_driver *driver) in tty_driver_kref_put() argument
3363 kref_put(&driver->kref, destruct_tty_driver); in tty_driver_kref_put()
3367 void tty_set_operations(struct tty_driver *driver, in tty_set_operations() argument
3370 driver->ops = op; in tty_set_operations()
3383 int tty_register_driver(struct tty_driver *driver) in tty_register_driver() argument
3390 if (!driver->major) { in tty_register_driver()
3391 error = alloc_chrdev_region(&dev, driver->minor_start, in tty_register_driver()
3392 driver->num, driver->name); in tty_register_driver()
3394 driver->major = MAJOR(dev); in tty_register_driver()
3395 driver->minor_start = MINOR(dev); in tty_register_driver()
3398 dev = MKDEV(driver->major, driver->minor_start); in tty_register_driver()
3399 error = register_chrdev_region(dev, driver->num, driver->name); in tty_register_driver()
3404 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) { in tty_register_driver()
3405 error = tty_cdev_add(driver, dev, 0, driver->num); in tty_register_driver()
3411 list_add(&driver->tty_drivers, &tty_drivers); in tty_register_driver()
3414 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) { in tty_register_driver()
3415 for (i = 0; i < driver->num; i++) { in tty_register_driver()
3416 d = tty_register_device(driver, i, NULL); in tty_register_driver()
3423 proc_tty_register_driver(driver); in tty_register_driver()
3424 driver->flags |= TTY_DRIVER_INSTALLED; in tty_register_driver()
3429 tty_unregister_device(driver, i); in tty_register_driver()
3432 list_del(&driver->tty_drivers); in tty_register_driver()
3436 unregister_chrdev_region(dev, driver->num); in tty_register_driver()
3445 int tty_unregister_driver(struct tty_driver *driver) in tty_unregister_driver() argument
3449 if (driver->refcount) in tty_unregister_driver()
3452 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start), in tty_unregister_driver()
3453 driver->num); in tty_unregister_driver()
3455 list_del(&driver->tty_drivers); in tty_unregister_driver()
3464 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; in tty_devnum()