Files
Jungfraujoch/fpga/pcie_driver/jfjoch_miscdev.c

40 lines
1.1 KiB
C

// Copyright (2019-2023) Paul Scherrer Institute
#include "jfjoch_drv.h"
#include <linux/module.h>
static int device_index = 0;
int jfjoch_register_misc_dev(struct pci_dev *pdev) {
int err;
struct jfjoch_drvdata *drvdata = pci_get_drvdata(pdev);
snprintf( drvdata->name, 255, "jfjoch%d", device_index++);
drvdata->miscdev.mode = 0660;
drvdata->miscdev.minor = MISC_DYNAMIC_MINOR;
drvdata->miscdev.fops = &jfjoch_cdev_fileops;
drvdata->miscdev.name = drvdata->name;
err = misc_register(&drvdata->miscdev);
if (err)
pr_notice("Misc device registration failed\n");
return err;
}
void jfjoch_unregister_misc_dev(struct pci_dev *pdev) {
struct jfjoch_drvdata *drvdata = pci_get_drvdata(pdev);
misc_deregister(&drvdata->miscdev);
}
int jfjoch_cdev_open(struct inode *inode, struct file *file) {
return 0;
}
int jfjoch_cdev_release(struct inode *inode, struct file *file) {
struct jfjoch_drvdata *drvdata = container_of(file->private_data, struct jfjoch_drvdata, miscdev);
if (file->f_mode & FMODE_WRITE)
jfjoch_cancel(drvdata);
return 0;
}