drivers/gpib/tnt4882/tnt4882_gpib.c

Source file repositories/reference/linux-study-clean/drivers/gpib/tnt4882/tnt4882_gpib.c

File Facts

System
Linux kernel
Corpus path
drivers/gpib/tnt4882/tnt4882_gpib.c
Extension
.c
Size
53994 bytes
Lines
1841
Domain
Driver Families
Bucket
drivers/gpib
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 tnt4882_pci_driver = {
	.name = DRV_NAME,
	.id_table = tnt4882_pci_table,
	.probe = &tnt4882_pci_probe
};

#if 0
/* unused, will be needed when the driver is turned into a pnp_driver */
static const struct pnp_device_id tnt4882_pnp_table[] = {
	{.id = "NICC601"},
	{.id = ""}
};
MODULE_DEVICE_TABLE(pnp, tnt4882_pnp_table);
#endif

#ifdef CONFIG_GPIB_PCMCIA
static struct gpib_interface ni_pcmcia_interface;
static struct gpib_interface ni_pcmcia_accel_interface;
static int __init init_ni_gpib_cs(void);
static void __exit exit_ni_gpib_cs(void);
#endif

static int __init tnt4882_init_module(void)
{
	int result;

	result = pci_register_driver(&tnt4882_pci_driver);
	if (result) {
		pr_err("pci_register_driver failed: error = %d\n", result);
		return result;
	}

	result = gpib_register_driver(&ni_isa_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_isa;
	}

	result = gpib_register_driver(&ni_isa_accel_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_isa_accel;
	}

	result = gpib_register_driver(&ni_nat4882_isa_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_nat4882_isa;
	}

	result = gpib_register_driver(&ni_nat4882_isa_accel_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_nat4882_isa_accel;
	}

	result = gpib_register_driver(&ni_nec_isa_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_nec_isa;
	}

	result = gpib_register_driver(&ni_nec_isa_accel_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_nec_isa_accel;
	}

	result = gpib_register_driver(&ni_pci_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_pci;
	}

	result = gpib_register_driver(&ni_pci_accel_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_pci_accel;
	}

#ifdef CONFIG_GPIB_PCMCIA
	result = gpib_register_driver(&ni_pcmcia_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);
		goto err_pcmcia;
	}

	result = gpib_register_driver(&ni_pcmcia_accel_interface, THIS_MODULE);
	if (result) {
		pr_err("gpib_register_driver failed: error = %d\n", result);

Annotation

Implementation Notes