blob: cb28eb21e3ca52054fbb65d72e22c93127aaf472 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef _LINUX_CDEV_H
2#define _LINUX_CDEV_H
Linus Torvalds1da177e2005-04-16 15:20:36 -07003
Jan Engelhardt5ec68b22006-12-06 20:36:14 -08004#include <linux/kobject.h>
5#include <linux/kdev_t.h>
6#include <linux/list.h>
Logan Gunthorpe233ed092017-03-17 12:48:08 -06007#include <linux/device.h>
Jan Engelhardt5ec68b22006-12-06 20:36:14 -08008
Jan Engelhardt3d8b3032007-01-29 13:19:56 -08009struct file_operations;
10struct inode;
11struct module;
12
Linus Torvalds1da177e2005-04-16 15:20:36 -070013struct cdev {
14 struct kobject kobj;
15 struct module *owner;
Arjan van de Ven99ac48f2006-03-28 01:56:41 -080016 const struct file_operations *ops;
Linus Torvalds1da177e2005-04-16 15:20:36 -070017 struct list_head list;
18 dev_t dev;
19 unsigned int count;
Kees Cook3859a272016-10-28 01:22:25 -070020} __randomize_layout;
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
Arjan van de Ven99ac48f2006-03-28 01:56:41 -080022void cdev_init(struct cdev *, const struct file_operations *);
Linus Torvalds1da177e2005-04-16 15:20:36 -070023
24struct cdev *cdev_alloc(void);
25
26void cdev_put(struct cdev *p);
27
28int cdev_add(struct cdev *, dev_t, unsigned);
29
Logan Gunthorpe233ed092017-03-17 12:48:08 -060030void cdev_set_parent(struct cdev *p, struct kobject *kobj);
31int cdev_device_add(struct cdev *cdev, struct device *dev);
32void cdev_device_del(struct cdev *cdev, struct device *dev);
33
Linus Torvalds1da177e2005-04-16 15:20:36 -070034void cdev_del(struct cdev *);
35
36void cd_forget(struct inode *);
37
Linus Torvalds1da177e2005-04-16 15:20:36 -070038#endif