drivers/tty/nozomi.c

Source file repositories/reference/linux-study-clean/drivers/tty/nozomi.c

File Facts

System
Linux kernel
Corpus path
drivers/tty/nozomi.c
Extension
.c
Size
46486 bytes
Lines
1857
Domain
Driver Families
Bucket
drivers/tty
Inferred role
Driver Families: operation-table or driver-model contract
Status
pattern implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

static struct pci_driver nozomi_driver = {
	.name = NOZOMI_NAME,
	.id_table = nozomi_pci_tbl,
	.probe = nozomi_card_init,
	.remove = nozomi_card_exit,
};

static __init int nozomi_init(void)
{
	int ret;

	ntty_driver = tty_alloc_driver(NTTY_TTY_MAXMINORS, TTY_DRIVER_REAL_RAW |
			TTY_DRIVER_DYNAMIC_DEV);
	if (IS_ERR(ntty_driver))
		return PTR_ERR(ntty_driver);

	ntty_driver->driver_name = NOZOMI_NAME_TTY;
	ntty_driver->name = "noz";
	ntty_driver->major = 0;
	ntty_driver->type = TTY_DRIVER_TYPE_SERIAL;
	ntty_driver->subtype = SERIAL_TYPE_NORMAL;
	ntty_driver->init_termios = tty_std_termios;
	ntty_driver->init_termios.c_cflag = B115200 | CS8 | CREAD | \
						HUPCL | CLOCAL;
	ntty_driver->init_termios.c_ispeed = 115200;
	ntty_driver->init_termios.c_ospeed = 115200;
	tty_set_operations(ntty_driver, &tty_ops);

	ret = tty_register_driver(ntty_driver);
	if (ret) {
		printk(KERN_ERR "Nozomi: failed to register ntty driver\n");
		goto free_tty;
	}

	ret = pci_register_driver(&nozomi_driver);
	if (ret) {
		printk(KERN_ERR "Nozomi: can't register pci driver\n");
		goto unr_tty;
	}

	return 0;
unr_tty:
	tty_unregister_driver(ntty_driver);
free_tty:
	tty_driver_kref_put(ntty_driver);
	return ret;
}

static __exit void nozomi_exit(void)
{
	pci_unregister_driver(&nozomi_driver);
	tty_unregister_driver(ntty_driver);
	tty_driver_kref_put(ntty_driver);
}

module_init(nozomi_init);
module_exit(nozomi_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("Nozomi driver");

Annotation

Implementation Notes