1/*- 2 * Copyright (c) 2010 Isilon Systems, Inc. 3 * Copyright (c) 2010 iX Systems, Inc. 4 * Copyright (c) 2010 Panasas, Inc. 5 * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice unmodified, this list of conditions, and the following 13 * disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 *
| 1/*- 2 * Copyright (c) 2010 Isilon Systems, Inc. 3 * Copyright (c) 2010 iX Systems, Inc. 4 * Copyright (c) 2010 Panasas, Inc. 5 * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice unmodified, this list of conditions, and the following 13 * disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 *
|
29 * $FreeBSD: head/sys/compat/linuxkpi/common/include/linux/cdev.h 290135 2015-10-29 08:28:39Z hselasky $
| 29 * $FreeBSD: head/sys/compat/linuxkpi/common/include/linux/cdev.h 290335 2015-11-03 12:37:55Z hselasky $
|
30 */ 31#ifndef _LINUX_CDEV_H_ 32#define _LINUX_CDEV_H_ 33 34#include <linux/kobject.h>
| 30 */ 31#ifndef _LINUX_CDEV_H_ 32#define _LINUX_CDEV_H_ 33 34#include <linux/kobject.h>
|
| 35#include <linux/sysfs.h>
|
35#include <linux/kdev_t.h> 36#include <linux/list.h> 37 38struct file_operations; 39struct inode; 40struct module; 41 42extern struct cdevsw linuxcdevsw; 43 44struct linux_cdev { 45 struct kobject kobj; 46 struct module *owner; 47 struct cdev *cdev; 48 dev_t dev; 49 const struct file_operations *ops; 50}; 51 52static inline void 53cdev_release(struct kobject *kobj) 54{ 55 struct linux_cdev *cdev; 56 57 cdev = container_of(kobj, struct linux_cdev, kobj); 58 if (cdev->cdev) 59 destroy_dev(cdev->cdev); 60 kfree(cdev); 61} 62 63static inline void 64cdev_static_release(struct kobject *kobj) 65{ 66 struct linux_cdev *cdev; 67 68 cdev = container_of(kobj, struct linux_cdev, kobj); 69 if (cdev->cdev) 70 destroy_dev(cdev->cdev); 71} 72 73static struct kobj_type cdev_ktype = { 74 .release = cdev_release, 75}; 76 77static struct kobj_type cdev_static_ktype = { 78 .release = cdev_static_release, 79}; 80 81static inline void 82cdev_init(struct linux_cdev *cdev, const struct file_operations *ops) 83{ 84 85 kobject_init(&cdev->kobj, &cdev_static_ktype); 86 cdev->ops = ops; 87} 88 89static inline struct linux_cdev * 90cdev_alloc(void) 91{ 92 struct linux_cdev *cdev; 93 94 cdev = kzalloc(sizeof(struct linux_cdev), M_WAITOK); 95 if (cdev) 96 kobject_init(&cdev->kobj, &cdev_ktype); 97 return (cdev); 98} 99 100static inline void 101cdev_put(struct linux_cdev *p) 102{ 103 kobject_put(&p->kobj); 104} 105 106static inline int 107cdev_add(struct linux_cdev *cdev, dev_t dev, unsigned count) 108{ 109 if (count != 1) 110 panic("cdev_add: Unsupported count: %d", count); 111 cdev->cdev = make_dev(&linuxcdevsw, MINOR(dev), 0, 0, 0700, 112 "%s", kobject_name(&cdev->kobj)); 113 cdev->dev = dev; 114 cdev->cdev->si_drv1 = cdev; 115 116 return (0); 117} 118 119static inline void 120cdev_del(struct linux_cdev *cdev) 121{ 122 if (cdev->cdev) { 123 destroy_dev(cdev->cdev); 124 cdev->cdev = NULL; 125 } 126 kobject_put(&cdev->kobj); 127} 128 129#define cdev linux_cdev 130 131#endif /* _LINUX_CDEV_H_ */
| 36#include <linux/kdev_t.h> 37#include <linux/list.h> 38 39struct file_operations; 40struct inode; 41struct module; 42 43extern struct cdevsw linuxcdevsw; 44 45struct linux_cdev { 46 struct kobject kobj; 47 struct module *owner; 48 struct cdev *cdev; 49 dev_t dev; 50 const struct file_operations *ops; 51}; 52 53static inline void 54cdev_release(struct kobject *kobj) 55{ 56 struct linux_cdev *cdev; 57 58 cdev = container_of(kobj, struct linux_cdev, kobj); 59 if (cdev->cdev) 60 destroy_dev(cdev->cdev); 61 kfree(cdev); 62} 63 64static inline void 65cdev_static_release(struct kobject *kobj) 66{ 67 struct linux_cdev *cdev; 68 69 cdev = container_of(kobj, struct linux_cdev, kobj); 70 if (cdev->cdev) 71 destroy_dev(cdev->cdev); 72} 73 74static struct kobj_type cdev_ktype = { 75 .release = cdev_release, 76}; 77 78static struct kobj_type cdev_static_ktype = { 79 .release = cdev_static_release, 80}; 81 82static inline void 83cdev_init(struct linux_cdev *cdev, const struct file_operations *ops) 84{ 85 86 kobject_init(&cdev->kobj, &cdev_static_ktype); 87 cdev->ops = ops; 88} 89 90static inline struct linux_cdev * 91cdev_alloc(void) 92{ 93 struct linux_cdev *cdev; 94 95 cdev = kzalloc(sizeof(struct linux_cdev), M_WAITOK); 96 if (cdev) 97 kobject_init(&cdev->kobj, &cdev_ktype); 98 return (cdev); 99} 100 101static inline void 102cdev_put(struct linux_cdev *p) 103{ 104 kobject_put(&p->kobj); 105} 106 107static inline int 108cdev_add(struct linux_cdev *cdev, dev_t dev, unsigned count) 109{ 110 if (count != 1) 111 panic("cdev_add: Unsupported count: %d", count); 112 cdev->cdev = make_dev(&linuxcdevsw, MINOR(dev), 0, 0, 0700, 113 "%s", kobject_name(&cdev->kobj)); 114 cdev->dev = dev; 115 cdev->cdev->si_drv1 = cdev; 116 117 return (0); 118} 119 120static inline void 121cdev_del(struct linux_cdev *cdev) 122{ 123 if (cdev->cdev) { 124 destroy_dev(cdev->cdev); 125 cdev->cdev = NULL; 126 } 127 kobject_put(&cdev->kobj); 128} 129 130#define cdev linux_cdev 131 132#endif /* _LINUX_CDEV_H_ */
|