-
Patrick Robbe authoredPatrick Robbe authored
pcie40_driver_common.c 1.01 KiB
#define P40_FMT "P40:%s(): "
#include "pcie40_driver_common.h"
int pcie40_setup_cdev(struct class *cls, struct cdev *cdev, dev_t dev_num, int minor, int bar, const char *dev_name, int dev_id, struct file_operations *fops)
{
int rc = 0;
char dev_name_full[16] = {0};
snprintf(dev_name_full, sizeof(dev_name_full), "pcie40_%d_%s", dev_id, dev_name);
pr_devel(P40_FMT "device_create /dev/%s BAR=%d MAJ=%d, MIN=%d\n", P40_PARM, dev_name_full, bar, MAJOR(dev_num), MINOR(dev_num)+minor);
if (device_create(cls, NULL, MKDEV(MAJOR(dev_num), MINOR(dev_num)+minor), NULL, dev_name_full) == NULL){
rc = -1;
pr_devel(P40_FMT "device_create()\n", P40_PARM);
goto err_device_create;
}
cdev_init(cdev, fops);
rc = cdev_add(cdev, MKDEV(MAJOR(dev_num), MINOR(dev_num)+minor), 1);
if (rc < 0){
pr_devel(P40_FMT "cdev_add()\n", P40_PARM);
goto err_cdev_add;
}
return 0;
err_cdev_add:
device_destroy(cls, MKDEV(MAJOR(dev_num), MINOR(dev_num)+minor));
err_device_create:
//err_no_bar:
return rc;
}