#ifndef _SPL_SUNDDI_H #define _SPL_SUNDDI_H #include #include #include #include #include #include #include #include #include typedef int ddi_devid_t; typedef enum { DDI_INFO_DEVT2DEVINFO = 0, DDI_INFO_DEVT2INSTANCE = 1 } ddi_info_cmd_t; typedef enum { DDI_ATTACH = 0, DDI_RESUME = 1, DDI_PM_RESUME = 2 } ddi_attach_cmd_t; typedef enum { DDI_DETACH = 0, DDI_SUSPEND = 1, DDI_PM_SUSPEND = 2, DDI_HOTPLUG_DETACH = 3 } ddi_detach_cmd_t; typedef enum { DDI_RESET_FORCE = 0 } ddi_reset_cmd_t; typedef enum { PROP_LEN = 0, PROP_LEN_AND_VAL_BUF = 1, PROP_LEN_AND_VAL_ALLOC = 2, PROP_EXISTS = 3 } ddi_prop_op_t; typedef void *devmap_cookie_t; typedef struct as { uchar_t a_flags; } as_t; typedef struct pollhead { struct polldat *ph_list; } pollhead_t; typedef struct dev_info { kmutex_t di_lock; struct dev_ops *di_ops; struct cdev *di_cdev; struct class *di_class; major_t di_major; minor_t di_minor; dev_t di_dev; unsigned di_minors; struct list_head di_list; } dev_info_t; typedef struct cb_ops { int (*cb_open)(dev_t *devp, int flag, int otyp, cred_t *credp); int (*cb_close)(dev_t dev, int flag, int otyp, cred_t *credp); int (*cb_strategy)(void *bp); int (*cb_print)(dev_t dev, char *str); int (*cb_dump)(dev_t dev, caddr_t addr, daddr_t blkno, int nblk); int (*cb_read)(dev_t dev, struct uio *uiop, cred_t *credp); int (*cb_write)(dev_t dev, struct uio *uiop, cred_t *credp); int (*cb_ioctl)(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp); int (*cb_devmap)(dev_t dev, devmap_cookie_t dhp, offset_t off, size_t len, size_t *maplen, uint_t model); int (*cb_mmap)(dev_t dev, off_t off, int prot); int (*cb_segmap)(dev_t dev, off_t off, struct as *asp, caddr_t *addrp, off_t len, unsigned int prot, unsigned int maxprot, unsigned int flags, cred_t *credp); int (*cb_chpoll)(dev_t dev, short events, int anyyet, short *reventsp, struct pollhead **phpp); int (*cb_prop_op)(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op, int mod_flags, char *name, caddr_t valuep, int *length); struct streamtab *cb_str; int cb_flag; int cb_rev; int (*cb_aread)(dev_t dev, struct aio_req *aio, cred_t *credp); int (*cb_awrite)(dev_t dev, struct aio_req *aio, cred_t *credp); } cb_ops_t; typedef struct dev_ops { int devo_rev; int devo_refcnt; int (*devo_getinfo)(dev_info_t *dip, ddi_info_cmd_t infocmd, void *arg, void **result); int (*devo_identify)(dev_info_t *dip); int (*devo_probe)(dev_info_t *dip); int (*devo_attach)(dev_info_t *dip, ddi_attach_cmd_t cmd); int (*devo_detach)(dev_info_t *dip, ddi_detach_cmd_t cmd); int (*devo_reset)(dev_info_t *dip, ddi_reset_cmd_t cmd); struct cb_ops *devo_cb_ops; struct bus_ops *devo_bus_ops; int (*devo_power)(dev_info_t *dip, int component, int level); } dev_ops_t; typedef struct mod_ops { int (*modm_install)(void); int (*modm_remove)(void); int (*modm_info)(void); } mod_ops_t; typedef struct modldrv { struct mod_ops *drv_modops; char *drv_linkinfo; struct dev_ops *drv_dev_ops; struct dev_info *drv_dev_info; } modldrv_t; #define MODREV_1 1 #define D_NEW 0x000 #define D_MP 0x020 #define D_64BIT 0x200 #define DEVO_REV 3 #define CB_REV 1 #define DDI_SUCCESS 0 #define DDI_FAILURE -1 #define DDI_PSEUDO "ddi_pseudo" #define nodev NULL #define nochpoll NULL #define nulldev NULL #define mod_driverops NULL #define ddi_prop_op NULL #define getminor MINOR #define getmajor MAJOR #define mod_install(x) 0 #define mod_remove(x) 0 extern int __ddi_create_minor_node(dev_info_t *dip, char *name, int spec_type, minor_t minor_num, char *node_type, int flag, struct module *mod); extern void __ddi_remove_minor_node(dev_info_t *dip, char *name); extern int __mod_install(struct modlinkage *modlp); extern int __mod_remove(struct modlinkage *modlp); static __inline__ void ddi_report_dev(dev_info_t *d) { } static __inline__ void ddi_prop_remove_all(dev_info_t *dip) { } static __inline__ major_t ddi_driver_major(dev_info_t *di) { return getmajor(di->di_dev); } static __inline__ int ddi_create_minor_node(dev_info_t *di, char *name, int spec_type, minor_t minor_num, char *node_type, int flag) { return __ddi_create_minor_node(di, name, spec_type, minor_num, node_type, flag, THIS_MODULE); } #undef mod_install #undef mod_remove #define ddi_remove_minor_node __ddi_remove_minor_node #define mod_install __mod_install #define mod_remove __mod_remove #endif /* SPL_SUNDDI_H */