1#ifndef _ASM_SPARC_OF_DEVICE_H 2#define _ASM_SPARC_OF_DEVICE_H 3#ifdef __KERNEL__ 4 5#include <linux/device.h> 6#include <linux/mod_devicetable.h> 7#include <asm/openprom.h> 8#include <asm/prom.h> 9 10extern struct bus_type ebus_bus_type; 11extern struct bus_type sbus_bus_type; 12extern struct bus_type of_bus_type; 13 14/* 15 * The of_device is a kind of "base class" that is a superset of 16 * struct device for use by devices attached to an OF node and 17 * probed using OF properties. 18 */ 19struct of_device 20{ 21 struct device_node *node; 22 struct device dev; 23 struct resource resource[PROMREG_MAX]; 24 unsigned int irqs[PROMINTR_MAX]; 25 int num_irqs; 26 27 void *sysdata; 28 29 int slot; 30 int portid; 31 int clock_freq; 32}; 33#define to_of_device(d) container_of(d, struct of_device, dev) 34 35extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name); 36extern void of_iounmap(struct resource *res, void __iomem *base, unsigned long size); 37 38extern struct of_device *of_find_device_by_node(struct device_node *); 39 40extern const struct of_device_id *of_match_device( 41 const struct of_device_id *matches, const struct of_device *dev); 42 43extern struct of_device *of_dev_get(struct of_device *dev); 44extern void of_dev_put(struct of_device *dev); 45 46/* 47 * An of_platform_driver driver is attached to a basic of_device on 48 * the ISA, EBUS, and SBUS busses on sparc64. 49 */ 50struct of_platform_driver 51{ 52 char *name; 53 struct of_device_id *match_table; 54 struct module *owner; 55 56 int (*probe)(struct of_device* dev, const struct of_device_id *match); 57 int (*remove)(struct of_device* dev); 58 59 int (*suspend)(struct of_device* dev, pm_message_t state); 60 int (*resume)(struct of_device* dev); 61 int (*shutdown)(struct of_device* dev); 62 63 struct device_driver driver; 64}; 65#define to_of_platform_driver(drv) container_of(drv,struct of_platform_driver, driver) 66 67extern int of_register_driver(struct of_platform_driver *drv, 68 struct bus_type *bus); 69extern void of_unregister_driver(struct of_platform_driver *drv); 70extern int of_device_register(struct of_device *ofdev); 71extern void of_device_unregister(struct of_device *ofdev); 72extern struct of_device *of_platform_device_create(struct device_node *np, 73 const char *bus_id, 74 struct device *parent, 75 struct bus_type *bus); 76extern void of_release_dev(struct device *dev); 77 78#endif /* __KERNEL__ */ 79#endif /* _ASM_SPARC_OF_DEVICE_H */ 80