17f4dd379Sjsg /* Public domain. */ 27f4dd379Sjsg 37f4dd379Sjsg #ifndef _LINUX_DEVICE_H 47f4dd379Sjsg #define _LINUX_DEVICE_H 57f4dd379Sjsg 67f4dd379Sjsg #include <sys/types.h> 77f4dd379Sjsg #include <sys/systm.h> 87f4dd379Sjsg #include <sys/device.h> 97f4dd379Sjsg #include <sys/param.h> 107f4dd379Sjsg #include <sys/proc.h> 117f4dd379Sjsg #include <linux/ioport.h> 127f4dd379Sjsg #include <linux/lockdep.h> 137f4dd379Sjsg #include <linux/pm.h> 14c349dbc7Sjsg #include <linux/kobject.h> 15c349dbc7Sjsg #include <linux/ratelimit.h> /* dev_printk.h -> ratelimit.h */ 16f005ef32Sjsg #include <linux/module.h> /* via device/driver.h */ 17*462b0080Sjsg #include <linux/device/bus.h> 187f4dd379Sjsg 197f4dd379Sjsg struct device_node; 207f4dd379Sjsg 217f4dd379Sjsg struct device_driver { 227f4dd379Sjsg struct device *dev; 237f4dd379Sjsg }; 247f4dd379Sjsg 257f4dd379Sjsg struct device_attribute { 26c349dbc7Sjsg struct attribute attr; 27c349dbc7Sjsg ssize_t (*show)(struct device *, struct device_attribute *, char *); 287f4dd379Sjsg }; 297f4dd379Sjsg 307f4dd379Sjsg #define DEVICE_ATTR(_name, _mode, _show, _store) \ 317f4dd379Sjsg struct device_attribute dev_attr_##_name 325ca02815Sjsg #define DEVICE_ATTR_RO(_name) \ 335ca02815Sjsg struct device_attribute dev_attr_##_name 347f4dd379Sjsg 357f4dd379Sjsg #define device_create_file(a, b) 0 367f4dd379Sjsg #define device_remove_file(a, b) 377f4dd379Sjsg 389342ba5eSkettenis void *dev_get_drvdata(struct device *); 399342ba5eSkettenis void dev_set_drvdata(struct device *, void *); 407f4dd379Sjsg 417f4dd379Sjsg #define dev_pm_set_driver_flags(x, y) 427f4dd379Sjsg 437f4dd379Sjsg #define devm_kzalloc(x, y, z) kzalloc(y, z) 449342ba5eSkettenis #define devm_kfree(x, y) kfree(y) 457f4dd379Sjsg 46f005ef32Sjsg static inline int 47f005ef32Sjsg devm_device_add_group(struct device *dev, const struct attribute_group *g) 48f005ef32Sjsg { 49f005ef32Sjsg return 0; 50f005ef32Sjsg } 51f005ef32Sjsg 527f4dd379Sjsg #define dev_warn(dev, fmt, arg...) \ 537f4dd379Sjsg printf("drm:pid%d:%s *WARNING* " fmt, curproc->p_p->ps_pid, \ 547f4dd379Sjsg __func__ , ## arg) 551bb76ff1Sjsg #define dev_WARN(dev, fmt, arg...) \ 56f005ef32Sjsg WARN(1, "drm:pid%d:%s *WARNING* " fmt, curproc->p_p->ps_pid, \ 571bb76ff1Sjsg __func__ , ## arg) 587f4dd379Sjsg #define dev_notice(dev, fmt, arg...) \ 597f4dd379Sjsg printf("drm:pid%d:%s *NOTICE* " fmt, curproc->p_p->ps_pid, \ 607f4dd379Sjsg __func__ , ## arg) 617f4dd379Sjsg #define dev_crit(dev, fmt, arg...) \ 627f4dd379Sjsg printf("drm:pid%d:%s *ERROR* " fmt, curproc->p_p->ps_pid, \ 637f4dd379Sjsg __func__ , ## arg) 647f4dd379Sjsg #define dev_err(dev, fmt, arg...) \ 657f4dd379Sjsg printf("drm:pid%d:%s *ERROR* " fmt, curproc->p_p->ps_pid, \ 667f4dd379Sjsg __func__ , ## arg) 67ad8b1aafSjsg #define dev_emerg(dev, fmt, arg...) \ 68ad8b1aafSjsg printf("drm:pid%d:%s *EMERGENCY* " fmt, curproc->p_p->ps_pid, \ 69ad8b1aafSjsg __func__ , ## arg) 707f4dd379Sjsg #define dev_printk(level, dev, fmt, arg...) \ 717f4dd379Sjsg printf("drm:pid%d:%s *PRINTK* " fmt, curproc->p_p->ps_pid, \ 727f4dd379Sjsg __func__ , ## arg) 737f4dd379Sjsg 74c349dbc7Sjsg #define dev_warn_ratelimited(dev, fmt, arg...) \ 75c349dbc7Sjsg printf("drm:pid%d:%s *WARNING* " fmt, curproc->p_p->ps_pid, \ 76c349dbc7Sjsg __func__ , ## arg) 77c349dbc7Sjsg #define dev_notice_ratelimited(dev, fmt, arg...) \ 78c349dbc7Sjsg printf("drm:pid%d:%s *NOTICE* " fmt, curproc->p_p->ps_pid, \ 79c349dbc7Sjsg __func__ , ## arg) 805ca02815Sjsg #define dev_err_ratelimited(dev, fmt, arg...) \ 815ca02815Sjsg printf("drm:pid%d:%s *ERROR* " fmt, curproc->p_p->ps_pid, \ 825ca02815Sjsg __func__ , ## arg) 83c349dbc7Sjsg 845ca02815Sjsg #define dev_warn_once(dev, fmt, arg...) \ 855ca02815Sjsg printf("drm:pid%d:%s *WARNING* " fmt, curproc->p_p->ps_pid, \ 865ca02815Sjsg __func__ , ## arg) 87f005ef32Sjsg #define dev_WARN_ONCE(dev, cond, fmt, arg...) \ 88f005ef32Sjsg WARN_ONCE(cond, "drm:pid%d:%s *WARNING* " fmt, curproc->p_p->ps_pid, \ 89f005ef32Sjsg __func__ , ## arg) 90c349dbc7Sjsg #define dev_err_once(dev, fmt, arg...) \ 91c349dbc7Sjsg printf("drm:pid%d:%s *ERROR* " fmt, curproc->p_p->ps_pid, \ 92c349dbc7Sjsg __func__ , ## arg) 93c349dbc7Sjsg 949342ba5eSkettenis #define dev_err_probe(dev, err, fmt, arg...) \ 959342ba5eSkettenis printf("drm:pid%d:%s *ERROR* " fmt, curproc->p_p->ps_pid, \ 969342ba5eSkettenis __func__ , ## arg), err 979342ba5eSkettenis 987f4dd379Sjsg #ifdef DRMDEBUG 997f4dd379Sjsg #define dev_info(dev, fmt, arg...) \ 1007f4dd379Sjsg printf("drm: " fmt, ## arg) 101ad8b1aafSjsg #define dev_info_once(dev, fmt, arg...) \ 102ad8b1aafSjsg printf("drm: " fmt, ## arg) 1037f4dd379Sjsg #define dev_dbg(dev, fmt, arg...) \ 1047f4dd379Sjsg printf("drm:pid%d:%s *DEBUG* " fmt, curproc->p_p->ps_pid, \ 1057f4dd379Sjsg __func__ , ## arg) 1061bb76ff1Sjsg #define dev_dbg_once(dev, fmt, arg...) \ 1071bb76ff1Sjsg printf("drm:pid%d:%s *DEBUG* " fmt, curproc->p_p->ps_pid, \ 1081bb76ff1Sjsg __func__ , ## arg) 1095ca02815Sjsg #define dev_dbg_ratelimited(dev, fmt, arg...) \ 1105ca02815Sjsg printf("drm:pid%d:%s *DEBUG* " fmt, curproc->p_p->ps_pid, \ 1115ca02815Sjsg __func__ , ## arg) 1127f4dd379Sjsg #else 1133f7c134fSjsg 1143f7c134fSjsg static inline void 1153f7c134fSjsg dev_info(struct device *dev, const char *fmt, ...) 1163f7c134fSjsg { 1173f7c134fSjsg } 1183f7c134fSjsg 1193f7c134fSjsg static inline void 1203f7c134fSjsg dev_info_once(struct device *dev, const char *fmt, ...) 1213f7c134fSjsg { 1223f7c134fSjsg } 1233f7c134fSjsg 1243f7c134fSjsg static inline void 1253f7c134fSjsg dev_dbg(struct device *dev, const char *fmt, ...) 1263f7c134fSjsg { 1273f7c134fSjsg } 1283f7c134fSjsg 1293f7c134fSjsg static inline void 1303f7c134fSjsg dev_dbg_once(struct device *dev, const char *fmt, ...) 1313f7c134fSjsg { 1323f7c134fSjsg } 1333f7c134fSjsg 1343f7c134fSjsg static inline void 1353f7c134fSjsg dev_dbg_ratelimited(struct device *dev, const char *fmt, ...) 1363f7c134fSjsg { 1373f7c134fSjsg } 1383f7c134fSjsg 1397f4dd379Sjsg #endif 1407f4dd379Sjsg 141c349dbc7Sjsg static inline const char * 142c349dbc7Sjsg dev_driver_string(struct device *dev) 143c349dbc7Sjsg { 144c349dbc7Sjsg return dev->dv_cfdata->cf_driver->cd_name; 145c349dbc7Sjsg } 146c349dbc7Sjsg 14749e599b8Sjsg /* XXX return true for thunderbolt/USB4 */ 14849e599b8Sjsg #define dev_is_removable(x) false 14949e599b8Sjsg 150c349dbc7Sjsg /* should be bus id as string, ie 0000:00:02.0 */ 151c349dbc7Sjsg #define dev_name(dev) "" 152c349dbc7Sjsg 153667382c7Skettenis static inline void 154667382c7Skettenis device_set_wakeup_path(struct device *dev) 155667382c7Skettenis { 156667382c7Skettenis } 157667382c7Skettenis 1587f4dd379Sjsg #endif 159