drivers/s390/char/fs3270.c

Source file repositories/reference/linux-study-clean/drivers/s390/char/fs3270.c

File Facts

System
Linux kernel
Corpus path
drivers/s390/char/fs3270.c
Extension
.c
Size
13115 bytes
Lines
562
Domain
Driver Families
Bucket
drivers/s390
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 const struct file_operations fs3270_fops = {
	.owner		 = THIS_MODULE,		/* owner */
	.read		 = fs3270_read,		/* read */
	.write		 = fs3270_write,	/* write */
	.unlocked_ioctl	 = fs3270_ioctl,	/* ioctl */
	.open		 = fs3270_open,		/* open */
	.release	 = fs3270_close,	/* release */
};

static void fs3270_create_cb(int minor)
{
	__register_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub", &fs3270_fops);
	device_create(&class3270, NULL, MKDEV(IBM_FS3270_MAJOR, minor),
		      NULL, "3270/tub%d", minor);
}

static void fs3270_destroy_cb(int minor)
{
	device_destroy(&class3270, MKDEV(IBM_FS3270_MAJOR, minor));
	__unregister_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub");
}

static struct raw3270_notifier fs3270_notifier = {
	.create = fs3270_create_cb,
	.destroy = fs3270_destroy_cb,
};

/*
 * 3270 fullscreen driver initialization.
 */
static int __init fs3270_init(void)
{
	int rc;

	rc = __register_chrdev(IBM_FS3270_MAJOR, 0, 1, "fs3270", &fs3270_fops);
	if (rc)
		return rc;
	device_create(&class3270, NULL, MKDEV(IBM_FS3270_MAJOR, 0),
		      NULL, "3270/tub");
	raw3270_register_notifier(&fs3270_notifier);
	return 0;
}

static void __exit fs3270_exit(void)
{
	raw3270_unregister_notifier(&fs3270_notifier);
	device_destroy(&class3270, MKDEV(IBM_FS3270_MAJOR, 0));
	__unregister_chrdev(IBM_FS3270_MAJOR, 0, 1, "fs3270");
}

MODULE_DESCRIPTION("IBM/3270 Driver - fullscreen driver");
MODULE_LICENSE("GPL");
MODULE_ALIAS_CHARDEV_MAJOR(IBM_FS3270_MAJOR);

module_init(fs3270_init);
module_exit(fs3270_exit);

Annotation

Implementation Notes