#ifndef _SYS_SUNDDI_H
#define _SYS_SUNDDI_H
#include <sys/isa_defs.h>
#include <sys/dditypes.h>
#include <sys/ddipropdefs.h>
#include <sys/devops.h>
#include <sys/time.h>
#include <sys/cmn_err.h>
#include <sys/ddidevmap.h>
#include <sys/ddi_impldefs.h>
#include <sys/ddi_implfuncs.h>
#include <sys/ddi_isa.h>
#include <sys/model.h>
#include <sys/devctl.h>
#if defined(__i386) || defined(__amd64)
#include <sys/dma_engine.h>
#endif
#include <sys/sunpm.h>
#include <sys/nvpair.h>
#include <sys/sysevent.h>
#include <sys/thread.h>
#include <sys/stream.h>
#if defined(__GNUC__) && defined(_ASM_INLINES) && defined(_KERNEL)
#include <asm/sunddi.h>
#endif
#ifdef _KERNEL
#include <sys/ddi_obsolete.h>
#endif
#include <sys/u8_textprep.h>
#include <sys/kiconv.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DDI_SUCCESS (0)
#define DDI_FAILURE (-1)
#define DDI_NOT_WELL_FORMED (-2)
#define DDI_EAGAIN (-3)
#define DDI_EINVAL (-4)
#define DDI_ENOTSUP (-5)
#define DDI_EPENDING (-6)
#define DDI_EALREADY (-7)
#define DDI_ENOMEM 1
#define DDI_EBUSY 2
#define DDI_ETRANSPORT 3
#define DDI_ECONTEXT 4
#define DDI_SLEEP 0
#define DDI_NOSLEEP 1
#define DEVI_PSEUDO_NODEID ((int)-1)
#define DEVI_SID_NODEID ((int)-2)
#define DEVI_SID_HIDDEN_NODEID ((int)-3)
#define DEVI_SID_HP_NODEID ((int)-4)
#define DEVI_SID_HP_HIDDEN_NODEID ((int)-5)
#define DEVI_PSEUDO_NEXNAME "pseudo"
#define DEVI_ISA_NEXNAME "isa"
#define DEVI_EISA_NEXNAME "eisa"
#define CLONE_DEV 1
#define PRIVONLY_DEV 0x10
#define DDI_NT_SERIAL "ddi_serial"
#define DDI_NT_SERIAL_MB "ddi_serial:mb"
#define DDI_NT_SERIAL_DO "ddi_serial:dialout"
#define DDI_NT_SERIAL_MB_DO "ddi_serial:dialout,mb"
#define DDI_NT_SERIAL_LOMCON "ddi_serial:lomcon"
#define DDI_NT_BLOCK "ddi_block"
#define DDI_NT_BLOCK_CHAN "ddi_block:channel"
#define DDI_NT_BLOCK_WWN "ddi_block:wwn"
#define DDI_NT_CD "ddi_block:cdrom"
#define DDI_NT_CD_CHAN "ddi_block:cdrom:channel"
#define DDI_NT_FD "ddi_block:diskette"
#define DDI_NT_ENCLOSURE "ddi_enclosure"
#define DDI_NT_SCSI_ENCLOSURE "ddi_enclosure:scsi"
#define DDI_NT_BLOCK_SAS "ddi_block:sas"
#define DDI_NT_BLOCK_BLKDEV "ddi_block:blkdev"
#define DDI_NT_BLOCK_XVMD "ddi_block:xvmd"
#define DDI_NT_CD_XVMD "ddi_block:cdrom:xvmd"
#define DDI_NT_TAPE "ddi_byte:tape"
#define DDI_NT_NET "ddi_network"
#define DDI_NT_NET_WIFI "ddi_network:wifi"
#define DDI_NT_DISPLAY "ddi_display"
#define DDI_NT_DISPLAY_DRM "ddi_display:drm"
#define DDI_PSEUDO "ddi_pseudo"
#define DDI_NT_AUDIO "ddi_audio"
#define DDI_NT_MOUSE "ddi_mouse"
#define DDI_NT_KEYBOARD "ddi_keyboard"
#define DDI_NT_PARALLEL "ddi_parallel"
#define DDI_NT_PRINTER "ddi_printer"
#define DDI_NT_UGEN "ddi_generic:usb"
#define DDI_NT_SMP "ddi_sas_smp"
#define DDI_NT_EEPROM "ddi_eeprom"
#define DDI_NT_NEXUS "ddi_ctl:devctl"
#define DDI_NT_NVME_NEXUS "ddi_ctl:devctl:nvme"
#define DDI_NT_SCSI_NEXUS "ddi_ctl:devctl:scsi"
#define DDI_NT_SATA_NEXUS "ddi_ctl:devctl:sata"
#define DDI_NT_IB_NEXUS "ddi_ctl:devctl:ib"
#define DDI_NT_ATTACHMENT_POINT "ddi_ctl:attachment_point"
#define DDI_NT_NVME_ATTACHMENT_POINT "ddi_ctl:attachment_point:nvme"
#define DDI_NT_SCSI_ATTACHMENT_POINT "ddi_ctl:attachment_point:scsi"
#define DDI_NT_SATA_ATTACHMENT_POINT "ddi_ctl:attachment_point:sata"
#define DDI_NT_SDCARD_ATTACHMENT_POINT "ddi_ctl:attachment_point:sdcard"
#define DDI_NT_PCI_ATTACHMENT_POINT "ddi_ctl:attachment_point:pci"
#define DDI_NT_SBD_ATTACHMENT_POINT "ddi_ctl:attachment_point:sbd"
#define DDI_NT_FC_ATTACHMENT_POINT "ddi_ctl:attachment_point:fc"
#define DDI_NT_USB_ATTACHMENT_POINT "ddi_ctl:attachment_point:usb"
#define DDI_NT_BLOCK_FABRIC "ddi_block:fabric"
#define DDI_NT_IB_ATTACHMENT_POINT "ddi_ctl:attachment_point:ib"
#define DDI_NT_CCID_ATTACHMENT_POINT "ddi_ctl:attachment_point:ccid"
#define DDI_NT_AV_ASYNC "ddi_av:async"
#define DDI_NT_AV_ISOCH "ddi_av:isoch"
#define DDI_NT_AGP_PSEUDO "ddi_agp:pseudo"
#define DDI_NT_AGP_MASTER "ddi_agp:master"
#define DDI_NT_AGP_TARGET "ddi_agp:target"
#define DDI_NT_AGP_CPUGART "ddi_agp:cpugart"
#define DDI_NT_REGACC "ddi_tool_reg"
#define DDI_NT_INTRCTL "ddi_tool_intr"
#define DDI_NT_SENSOR_TEMP_CPU "ddi_sensor:temperature:cpu"
#define DDI_NT_SENSOR_TEMP_PCH "ddi_sensor:temperature:pch"
#define DDI_NT_GPIO_CTRL "ddi_gpio:controller"
#define DDI_NT_GPIO_DPIO "ddi_gpio:dpio"
#define DDI_NT_I2C_CTRL "ddi_i2c:controller"
#define DDI_NT_I2C_PORT "ddi_i2c:port"
#define DDI_NT_I2C_DEV "ddi_i2c:device"
#define DDI_NT_I2C_MUX "ddi_i2c:mux"
#define EC_DEVFS "EC_devfs"
#define EC_DDI "EC_ddi"
#define ESC_DEVFS_MINOR_CREATE "ESC_devfs_minor_create"
#define ESC_DEVFS_MINOR_REMOVE "ESC_devfs_minor_remove"
#define ESC_DEVFS_DEVI_ADD "ESC_devfs_devi_add"
#define ESC_DEVFS_DEVI_REMOVE "ESC_devfs_devi_remove"
#define ESC_DEVFS_INSTANCE_MOD "ESC_devfs_instance_mod"
#define ESC_DEVFS_BRANCH_ADD "ESC_devfs_branch_add"
#define ESC_DEVFS_BRANCH_REMOVE "ESC_devfs_branch_remove"
#define ESC_DEVFS_START "ESC_devfs_start"
#define ESC_DDI_INITIATOR_REGISTER "ESC_ddi_initiator_register"
#define ESC_DDI_INITIATOR_UNREGISTER "ESC_ddi_initiator_unregister"
#define EP_DDI SUNW_KERN_PUB"ddi"
#define DEVFS_DRIVER_NAME "di.driver"
#define DEVFS_INSTANCE "di.instance"
#define DEVFS_PATHNAME "di.path"
#define DEVFS_DEVI_CLASS "di.devi_class"
#define DEVFS_BRANCH_EVENT "di.branch_event"
#define DEVFS_MINOR_NAME "mi.name"
#define DEVFS_MINOR_NODETYPE "mi.nodetype"
#define DEVFS_MINOR_ISCLONE "mi.isclone"
#define DEVFS_MINOR_MAJNUM "mi.majorno"
#define DEVFS_MINOR_MINORNUM "mi.minorno"
#define DDI_DRIVER_NAME "ddi.driver"
#define DDI_DRIVER_MAJOR "ddi.major"
#define DDI_INSTANCE "ddi.instance"
#define DDI_PATHNAME "ddi.path"
#define DDI_CLASS "ddi.class"
typedef enum {
DDI_SERVICE_LOST = -32,
DDI_SERVICE_DEGRADED = -16,
DDI_SERVICE_UNAFFECTED = 0,
DDI_SERVICE_RESTORED = 16
} ddi_fault_impact_t;
typedef enum {
DDI_DATAPATH_FAULT = -32,
DDI_DEVICE_FAULT = -16,
DDI_EXTERNAL_FAULT = 0
} ddi_fault_location_t;
typedef enum {
DDI_DEVSTATE_OFFLINE = -32,
DDI_DEVSTATE_DOWN = -16,
DDI_DEVSTATE_QUIESCED = 0,
DDI_DEVSTATE_DEGRADED = 16,
DDI_DEVSTATE_UP = 32
} ddi_devstate_t;
#if defined(_KERNEL) || defined(_FAKE_KERNEL)
#define DDI_FORCEATTACH "ddi-forceattach"
#define DDI_NO_AUTODETACH "ddi-no-autodetach"
#define DDI_VHCI_CLASS "ddi-vhci-class"
#define DDI_NO_ROOT_SUPPORT "ddi-no-root-support"
#define DDI_OPEN_RETURNS_EINTR "ddi-open-returns-eintr"
#define DDI_DEVID_REGISTRANT "ddi-devid-registrant"
#define DDI_WALK_CONTINUE 0
#define DDI_WALK_PRUNECHILD -1
#define DDI_WALK_PRUNESIB -2
#define DDI_WALK_TERMINATE -3
#define DDI_WALK_ERROR -4
#define DDI_KERNEL_IOCTL "ddi-kernel-ioctl"
#define DDI_MODEL_MASK DATAMODEL_MASK
#define DDI_MODEL_ILP32 DATAMODEL_ILP32
#define DDI_MODEL_LP64 DATAMODEL_LP64
#define DDI_MODEL_NATIVE DATAMODEL_NATIVE
#define DDI_MODEL_NONE DATAMODEL_NONE
extern boolean_t ddi_err_panic;
typedef enum {
DER_INVALID = 0,
DER_CONT = 1,
DER_CONS,
DER_LOG,
DER_VERB,
DER_NOTE,
DER_WARN,
DER_PANIC,
DER_MODE,
DER_DEBUG
} ddi_err_t;
extern void ddi_err(ddi_err_t de, dev_info_t *rdip, const char *fmt, ...);
extern char *ddi_strdup(const char *str, int flag);
extern char *strdup(const char *str);
extern void strfree(char *str);
extern int maxphys;
extern void minphys(struct buf *);
extern int physio(int (*)(struct buf *), struct buf *, dev_t,
int, void (*)(struct buf *), struct uio *);
extern void disksort(struct diskhd *, struct buf *);
extern size_t strlen(const char *) __PURE;
extern size_t strnlen(const char *, size_t) __PURE;
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
#if __cplusplus >= 199711L
extern const char *strchr(const char *, int);
#ifndef _STRCHR_INLINE
#define _STRCHR_INLINE
extern "C++" {
inline char *strchr(char *__s, int __c) {
return (char *)strchr((const char *)__s, __c);
}
}
#endif
#else
extern char *strchr(const char *, int);
#endif
#define DDI_STRSAME(s1, s2) ((*(s1) == *(s2)) && (strcmp((s1), (s2)) == 0))
extern int strcmp(const char *, const char *) __PURE;
extern int strncmp(const char *, const char *, size_t) __PURE;
extern char *strncat(char *, const char *, size_t);
extern size_t strlcat(char *, const char *, size_t);
extern size_t strlcpy(char *, const char *, size_t);
extern size_t strspn(const char *, const char *);
extern size_t strcspn(const char *, const char *);
extern char *strsep(char **, const char *);
extern char *strtok_r(char *, const char *, char **);
extern int bcmp(const void *, const void *, size_t) __PURE;
extern int stoi(char **);
extern void numtos(ulong_t, char *);
extern void bcopy(const void *, void *, size_t);
extern void bzero(void *, size_t);
extern void *memcpy(void *, const void *, size_t);
extern void *memset(void *, int, size_t);
extern void *memmove(void *, const void *, size_t);
extern int memcmp(const void *, const void *, size_t) __PURE;
#if __cplusplus >= 199711L
extern const void *memchr(const void *, int, size_t);
#ifndef _MEMCHR_INLINE
#define _MEMCHR_INLINE
extern "C++" {
inline void *memchr(void * __s, int __c, size_t __n) {
return (void *)memchr((const void *)__s, __c, __n);
}
}
#endif
#else
extern void *memchr(const void *, int, size_t);
#endif
extern int ddi_strtol(const char *, char **, int, long *);
extern int ddi_strtoul(const char *, char **, int, unsigned long *);
extern int ddi_strtoll(const char *, char **, int, longlong_t *);
extern int ddi_strtoull(const char *, char **, int, u_longlong_t *);
#define KICONV_IGNORE_NULL (0x0001)
#define KICONV_REPLACE_INVALID (0x0002)
extern kiconv_t kiconv_open(const char *, const char *);
extern size_t kiconv(kiconv_t, char **, size_t *, char **, size_t *, int *);
extern int kiconv_close(kiconv_t);
extern size_t kiconvstr(const char *, const char *, char *, size_t *, char *,
size_t *, int, int *);
#endif
#ifdef _KERNEL
int
ddi_map_regs(dev_info_t *dip, uint_t rnumber, caddr_t *kaddrp,
off_t offset, off_t len);
void
ddi_unmap_regs(dev_info_t *dip, uint_t rnumber, caddr_t *kaddrp,
off_t offset, off_t len);
int
ddi_map(dev_info_t *dp, ddi_map_req_t *mp, off_t offset, off_t len,
caddr_t *addrp);
int
ddi_apply_range(dev_info_t *dip, dev_info_t *rdip, struct regspec *rp);
struct regspec *
ddi_rnumber_to_regspec(dev_info_t *dip, int rnumber);
int
ddi_bus_map(dev_info_t *dip, dev_info_t *rdip, ddi_map_req_t *mp, off_t offset,
off_t len, caddr_t *vaddrp);
int
nullbusmap(dev_info_t *dip, dev_info_t *rdip, ddi_map_req_t *mp, off_t offset,
off_t len, caddr_t *vaddrp);
int ddi_peek8(dev_info_t *dip, int8_t *addr, int8_t *val_p);
int ddi_peek16(dev_info_t *dip, int16_t *addr, int16_t *val_p);
int ddi_peek32(dev_info_t *dip, int32_t *addr, int32_t *val_p);
int ddi_peek64(dev_info_t *dip, int64_t *addr, int64_t *val_p);
int ddi_poke8(dev_info_t *dip, int8_t *addr, int8_t val);
int ddi_poke16(dev_info_t *dip, int16_t *addr, int16_t val);
int ddi_poke32(dev_info_t *dip, int32_t *addr, int32_t val);
int ddi_poke64(dev_info_t *dip, int64_t *addr, int64_t val);
int ddi_peekpokeio(dev_info_t *devi, struct uio *uio, enum uio_rw rw,
caddr_t addr, size_t len, uint_t xfersize);
unsigned long ddi_btop(dev_info_t *dip, unsigned long bytes);
unsigned long ddi_btopr(dev_info_t *dip, unsigned long bytes);
unsigned long ddi_ptob(dev_info_t *dip, unsigned long pages);
unsigned int
ddi_enter_critical(void);
void
ddi_exit_critical(unsigned int);
int
devmap_setup(dev_t dev, offset_t off, ddi_as_handle_t as, caddr_t *addrp,
size_t len, uint_t prot, uint_t maxprot, uint_t flags, struct cred *cred);
int
ddi_devmap_segmap(dev_t dev, off_t off, ddi_as_handle_t as, caddr_t *addrp,
off_t len, uint_t prot, uint_t maxprot, uint_t flags, struct cred *cred);
int
devmap_load(devmap_cookie_t dhp, offset_t offset, size_t len, uint_t type,
uint_t rw);
int
devmap_unload(devmap_cookie_t dhp, offset_t offset, size_t len);
int
devmap_devmem_setup(devmap_cookie_t dhp, dev_info_t *dip,
struct devmap_callback_ctl *callback_ops,
uint_t rnumber, offset_t roff, size_t len, uint_t maxprot,
uint_t flags, const ddi_device_acc_attr_t *accattrp);
int
devmap_umem_setup(devmap_cookie_t dhp, dev_info_t *dip,
struct devmap_callback_ctl *callback_ops,
ddi_umem_cookie_t cookie, offset_t off, size_t len, uint_t maxprot,
uint_t flags, const ddi_device_acc_attr_t *accattrp);
int
devmap_devmem_remap(devmap_cookie_t dhp, dev_info_t *dip,
uint_t rnumber, offset_t roff, size_t len, uint_t maxprot,
uint_t flags, const ddi_device_acc_attr_t *accattrp);
int
devmap_umem_remap(devmap_cookie_t dhp, dev_info_t *dip,
ddi_umem_cookie_t cookie, offset_t off, size_t len, uint_t maxprot,
uint_t flags, const ddi_device_acc_attr_t *accattrp);
void
devmap_set_ctx_timeout(devmap_cookie_t dhp, clock_t ticks);
int
devmap_default_access(devmap_cookie_t dhp, void *pvtp, offset_t off,
size_t len, uint_t type, uint_t rw);
int
devmap_do_ctxmgt(devmap_cookie_t dhp, void *pvtp, offset_t off, size_t len,
uint_t type, uint_t rw, int (*ctxmgt)(devmap_cookie_t, void *, offset_t,
size_t, uint_t, uint_t));
void *ddi_umem_alloc(size_t size, int flag, ddi_umem_cookie_t *cookiep);
void ddi_umem_free(ddi_umem_cookie_t cookie);
int
ddi_umem_lock(caddr_t addr, size_t size, int flags, ddi_umem_cookie_t *cookie);
void
ddi_umem_unlock(ddi_umem_cookie_t cookie);
struct buf *
ddi_umem_iosetup(ddi_umem_cookie_t cookie, off_t off, size_t len, int direction,
dev_t dev, daddr_t blkno, int (*iodone)(struct buf *), int sleepflag);
int
ddi_segmap(dev_t dev, off_t offset, struct as *asp, caddr_t *addrp, off_t len,
uint_t prot, uint_t maxprot, uint_t flags, cred_t *credp);
int
ddi_segmap_setup(dev_t dev, off_t offset, struct as *as, caddr_t *addrp,
off_t len, uint_t prot, uint_t maxprot, uint_t flags, cred_t *cred,
const ddi_device_acc_attr_t *accattrp, uint_t rnumber);
int
ddi_map_fault(dev_info_t *dip, struct hat *hat, struct seg *seg, caddr_t addr,
struct devpage *dp, pfn_t pfn, uint_t prot, uint_t lock);
int
ddi_device_mapping_check(dev_t dev, const ddi_device_acc_attr_t *accattrp,
uint_t rnumber, uint_t *hat_flags);
int ddi_prop_get_int(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, int defvalue);
int64_t ddi_prop_get_int64(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, int64_t defvalue);
int ddi_prop_lookup_int_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, int **data, uint_t *nelements);
int ddi_prop_lookup_int64_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, int64_t **data, uint_t *nelements);
int ddi_prop_update_int(dev_t match_dev, dev_info_t *dip,
char *name, int data);
int ddi_prop_update_int64(dev_t match_dev, dev_info_t *dip,
char *name, int64_t data);
int ddi_prop_update_int_array(dev_t match_dev, dev_info_t *dip,
char *name, int *data, uint_t nelements);
int ddi_prop_update_int64_array(dev_t match_dev, dev_info_t *dip,
char *name, int64_t *data, uint_t nelements);
int ddi_prop_lookup_string(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, char **data);
int ddi_prop_lookup_string_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, char ***data, uint_t *nelements);
int ddi_prop_update_string(dev_t match_dev, dev_info_t *dip,
char *name, char *data);
int ddi_prop_update_string_array(dev_t match_dev, dev_info_t *dip,
char *name, char **data, uint_t nelements);
int ddi_prop_lookup_byte_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
char *name, uchar_t **data, uint_t *nelements);
int ddi_prop_update_byte_array(dev_t match_dev, dev_info_t *dip,
char *name, uchar_t *data, uint_t nelements);
int ddi_prop_exists(dev_t match_dev, dev_info_t *dip, uint_t flags, char *name);
void ddi_prop_free(void *data);
int
nopropop(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op, int mod_flags,
char *name, caddr_t valuep, int *lengthp);
int
ddi_prop_op(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op, int mod_flags,
char *name, caddr_t valuep, int *lengthp);
int
ddi_prop_op_size(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
int mod_flags, char *name, caddr_t valuep, int *lengthp,
uint64_t size64);
int
ddi_prop_op_size_blksize(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
int mod_flags, char *name, caddr_t valuep, int *lengthp,
uint64_t size64, uint_t blksize);
int
ddi_prop_op_nblocks(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
int mod_flags, char *name, caddr_t valuep, int *lengthp,
uint64_t nblocks64);
int
ddi_prop_op_nblocks_blksize(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
int mod_flags, char *name, caddr_t valuep, int *lengthp,
uint64_t nblocks64, uint_t blksize);
int
ddi_getlongprop(dev_t dev, dev_info_t *dip, int flags,
char *name, caddr_t valuep, int *lengthp);
int
ddi_getlongprop_buf(dev_t dev, dev_info_t *dip, int flags,
char *name, caddr_t valuep, int *lengthp);
int
ddi_getprop(dev_t dev, dev_info_t *dip, int flags, char *name, int defvalue);
int
ddi_getproplen(dev_t dev, dev_info_t *dip, int flags, char *name, int *lengthp);
int
ddi_prop_create(dev_t dev, dev_info_t *dip, int flag,
char *name, caddr_t value, int length);
int
ddi_prop_modify(dev_t dev, dev_info_t *dip, int flag,
char *name, caddr_t value, int length);
int
ddi_prop_remove(dev_t dev, dev_info_t *dip, char *name);
void
ddi_prop_remove_all(dev_info_t *dip);
int
ddi_prop_undefine(dev_t dev, dev_info_t *dip, int flag, char *name);
void
ddi_prop_cache_invalidate(dev_t dev, dev_info_t *dip, char *name, int flags);
int
ddi_bus_prop_op(dev_t dev, dev_info_t *dip, dev_info_t *ch_dip,
ddi_prop_op_t prop_op, int mod_flags,
char *name, caddr_t valuep, int *lengthp);
void
ddi_walk_devs(dev_info_t *, int (*)(dev_info_t *, void *), void *);
char *
ddi_get_name(dev_info_t *dip);
char *
ddi_binding_name(dev_info_t *dip);
const char *
ddi_driver_name(dev_info_t *dip);
major_t
ddi_driver_major(dev_info_t *dip);
major_t
ddi_compatible_driver_major(dev_info_t *dip, char **formp);
char *
ddi_node_name(dev_info_t *dip);
int
ddi_get_nodeid(dev_info_t *dip);
int
ddi_get_instance(dev_info_t *dip);
struct dev_ops *
ddi_get_driver(dev_info_t *dip);
void
ddi_set_driver(dev_info_t *dip, struct dev_ops *devo);
void
ddi_set_driver_private(dev_info_t *dip, void *data);
void *
ddi_get_driver_private(dev_info_t *dip);
int
ddi_dev_is_needed(dev_info_t *dip, int cmpt, int level);
int
ddi_removing_power(dev_info_t *dip);
int
ddi_power(dev_info_t *dip, int cmpt, int level);
dev_info_t *
ddi_get_parent(dev_info_t *dip);
dev_info_t *
ddi_get_child(dev_info_t *dip);
dev_info_t *
ddi_get_next_sibling(dev_info_t *dip);
dev_info_t *
ddi_get_next(dev_info_t *dip);
void
ddi_set_next(dev_info_t *dip, dev_info_t *nextdip);
dev_info_t *
ddi_add_child(dev_info_t *pdip, char *name, uint_t nodeid, uint_t instance);
int
ddi_remove_child(dev_info_t *dip, int flag);
struct dev_ops *
ddi_hold_installed_driver(major_t major);
void
ddi_rele_driver(major_t major);
dev_info_t *
ddi_hold_devi_by_instance(major_t major, int instance, int flags);
void
ddi_release_devi(dev_info_t *);
void
ddi_assoc_queue_with_devi(queue_t *, dev_info_t *);
int
ddi_install_driver(char *idstring);
dev_info_t *
ddi_root_node(void);
dev_info_t *
ddi_find_devinfo(char *name, int instance, int attached);
int
ddi_dma_sync(ddi_dma_handle_t handle, off_t offset, size_t len, uint_t flags);
int
ddi_dma_burstsizes(ddi_dma_handle_t handle);
void
ddi_dma_attr_merge(ddi_dma_attr_t *attr, const ddi_dma_attr_t *mod);
int
ddi_dma_alloc_handle(dev_info_t *dip, const ddi_dma_attr_t *attr,
int (*waitfp)(caddr_t), caddr_t arg, ddi_dma_handle_t *handlep);
void
ddi_dma_free_handle(ddi_dma_handle_t *handlep);
int
ddi_dma_mem_alloc(ddi_dma_handle_t handle, size_t length,
const ddi_device_acc_attr_t *accattrp, uint_t xfermodes,
int (*waitfp)(caddr_t), caddr_t arg, caddr_t *kaddrp,
size_t *real_length, ddi_acc_handle_t *handlep);
void
ddi_dma_mem_free(ddi_acc_handle_t *hp);
int
ddi_dma_addr_bind_handle(ddi_dma_handle_t handle, struct as *as,
caddr_t addr, size_t len, uint_t flags,
int (*waitfp)(caddr_t), caddr_t arg,
ddi_dma_cookie_t *cookiep, uint_t *ccountp);
int
ddi_dma_buf_bind_handle(ddi_dma_handle_t handle, struct buf *bp,
uint_t flags, int (*waitfp)(caddr_t), caddr_t arg,
ddi_dma_cookie_t *cookiep, uint_t *ccountp);
int
ddi_dma_unbind_handle(ddi_dma_handle_t handle);
void
ddi_dma_nextcookie(ddi_dma_handle_t handle, ddi_dma_cookie_t *cookiep);
int
ddi_dma_numwin(ddi_dma_handle_t handle, uint_t *nwinp);
int
ddi_dma_getwin(ddi_dma_handle_t handle, uint_t win, off_t *offp,
size_t *lenp, ddi_dma_cookie_t *cookiep, uint_t *ccountp);
int
ddi_dma_set_sbus64(ddi_dma_handle_t handle, ulong_t burstsizes);
void
ddi_report_dev(dev_info_t *dev);
int
ddi_dev_regsize(dev_info_t *dev, uint_t rnumber, off_t *resultp);
int
ddi_dev_nregs(dev_info_t *dev, int *resultp);
int
ddi_dev_is_sid(dev_info_t *dev);
int
ddi_slaveonly(dev_info_t *);
int
ddi_dev_affinity(dev_info_t *deva, dev_info_t *devb);
void
ddi_set_callback(int (*funcp)(caddr_t), caddr_t arg, uintptr_t *listid);
void
ddi_run_callback(uintptr_t *listid);
int
nochpoll(dev_t dev, short events, int anyyet, short *reventsp,
struct pollhead **phpp);
dev_info_t *
nodevinfo(dev_t dev, int otyp);
int
ddi_no_info(dev_info_t *dip, ddi_info_cmd_t infocmd, void *arg, void **result);
int
ddi_getinfo_1to1(dev_info_t *dip, ddi_info_cmd_t infocmd,
void *arg, void **result);
int
ddifail(dev_info_t *devi, ddi_attach_cmd_t cmd);
int
ddi_no_dma_map(dev_info_t *dip, dev_info_t *rdip,
struct ddi_dma_req *dmareqp, ddi_dma_handle_t *handlep);
int
ddi_no_dma_allochdl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_attr_t *attr,
int (*waitfp)(caddr_t), caddr_t arg, ddi_dma_handle_t *handlep);
int
ddi_no_dma_freehdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle);
int
ddi_no_dma_bindhdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, struct ddi_dma_req *dmareq,
ddi_dma_cookie_t *cp, uint_t *ccountp);
int
ddi_no_dma_unbindhdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle);
int
ddi_no_dma_flush(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, off_t off, size_t len,
uint_t cache_flags);
int
ddi_no_dma_win(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, uint_t win, off_t *offp,
size_t *lenp, ddi_dma_cookie_t *cookiep, uint_t *ccountp);
int
ddi_no_dma_mctl(register dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, enum ddi_dma_ctlops request,
off_t *offp, size_t *lenp, caddr_t *objp, uint_t flags);
void
ddivoid();
cred_t *
ddi_get_cred(void);
time_t
ddi_get_time(void);
pid_t
ddi_get_pid(void);
kt_did_t
ddi_get_kt_did(void);
boolean_t
ddi_can_receive_sig(void);
void
swab(void *src, void *dst, size_t nbytes);
int
ddi_create_minor_node(dev_info_t *dip, const char *name, int spec_type,
minor_t minor_num, const char *node_type, int flag);
int
ddi_create_priv_minor_node(dev_info_t *dip, const char *name, int spec_type,
minor_t minor_num, const char *node_type, int flag,
const char *rdpriv, const char *wrpriv, mode_t priv_mode);
void
ddi_remove_minor_node(dev_info_t *dip, const char *name);
int
ddi_in_panic(void);
int
ddi_streams_driver(dev_info_t *dip);
int
ddi_ffs(long mask);
int
ddi_fls(long mask);
typedef struct __ddi_soft_state_bystr ddi_soft_state_bystr;
int
ddi_soft_state_init(void **state_p, size_t size, size_t n_items);
int
ddi_soft_state_bystr_init(ddi_soft_state_bystr **state_p,
size_t size, int n_items);
int
ddi_soft_state_zalloc(void *state, int item);
int
ddi_soft_state_bystr_zalloc(ddi_soft_state_bystr *state, const char *str);
void *
ddi_get_soft_state(void *state, int item);
void *
ddi_soft_state_bystr_get(ddi_soft_state_bystr *state, const char *str);
void
ddi_soft_state_free(void *state, int item);
void
ddi_soft_state_bystr_free(ddi_soft_state_bystr *state, const char *str);
void
ddi_soft_state_fini(void **state_p);
void
ddi_soft_state_bystr_fini(ddi_soft_state_bystr **state_p);
typedef struct __ddi_strid ddi_strid;
int
ddi_strid_init(ddi_strid **strid_p, int n_items);
id_t
ddi_strid_alloc(ddi_strid *strid, char *str);
id_t
ddi_strid_str2id(ddi_strid *strid, char *str);
char *
ddi_strid_id2str(ddi_strid *strid, id_t id);
void
ddi_strid_free(ddi_strid *strid, id_t id);
void
ddi_strid_fini(ddi_strid **strid_p);
void
ddi_set_name_addr(dev_info_t *dip, char *name);
char *
ddi_get_name_addr(dev_info_t *dip);
void
ddi_set_parent_data(dev_info_t *dip, void *pd);
void *
ddi_get_parent_data(dev_info_t *dip);
int
ddi_initchild(dev_info_t *parent, dev_info_t *proto);
int
ddi_uninitchild(dev_info_t *dip);
major_t
ddi_name_to_major(const char *name);
char *
ddi_major_to_name(major_t major);
char *
ddi_deviname(dev_info_t *dip, char *name);
char *
ddi_pathname(dev_info_t *dip, char *path);
char *
ddi_pathname_minor(struct ddi_minor_data *dmdp, char *path);
char *
ddi_pathname_obp(dev_info_t *dip, char *path);
int
ddi_pathname_obp_set(dev_info_t *dip, char *component);
int
ddi_dev_pathname(dev_t devt, int spec_type, char *name);
dev_t
ddi_pathname_to_dev_t(char *pathname);
int
ddi_ctlops(dev_info_t *d, dev_info_t *r, ddi_ctl_enum_t o, void *a, void *v);
int
ddi_dma_allochdl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_attr_t *attr,
int (*waitfp)(caddr_t), caddr_t arg, ddi_dma_handle_t *handlep);
int
ddi_dma_freehdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle);
int
ddi_dma_bindhdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, struct ddi_dma_req *dmareq,
ddi_dma_cookie_t *cp, uint_t *ccountp);
int
ddi_dma_unbindhdl(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle);
int
ddi_dma_flush(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, off_t off, size_t len,
uint_t cache_flags);
int
ddi_dma_win(dev_info_t *dip, dev_info_t *rdip,
ddi_dma_handle_t handle, uint_t win, off_t *offp,
size_t *lenp, ddi_dma_cookie_t *cookiep, uint_t *ccountp);
int
ddi_dma_mctl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_handle_t handle,
enum ddi_dma_ctlops request, off_t *offp, size_t *lenp,
caddr_t *objp, uint_t flags);
unsigned long
dvma_pagesize(dev_info_t *dip);
int
dvma_reserve(dev_info_t *dip, ddi_dma_lim_t *limp, uint_t pages,
ddi_dma_handle_t *handlep);
void
dvma_release(ddi_dma_handle_t h);
void
dvma_kaddr_load(ddi_dma_handle_t h, caddr_t a, uint_t len, uint_t index,
ddi_dma_cookie_t *cp);
void
dvma_unload(ddi_dma_handle_t h, uint_t objindex, uint_t type);
void
dvma_sync(ddi_dma_handle_t h, uint_t objindex, uint_t type);
extern int ddi_copyin(const void *, void *, size_t, int);
extern int ddi_copyout(const void *, void *, size_t, int);
extern void *proc_ref(void);
extern void proc_unref(void *pref);
extern int proc_signal(void *pref, int sig);
extern uint8_t inb(int port);
extern uint16_t inw(int port);
extern uint32_t inl(int port);
extern void outb(int port, uint8_t value);
extern void outw(int port, uint16_t value);
extern void outl(int port, uint32_t value);
extern void ddi_ring_console_bell(clock_t duration);
extern void ddi_set_console_bell(void (*bellfunc)(clock_t duration));
extern int ddi_check_acc_handle(ddi_acc_handle_t);
extern int ddi_check_dma_handle(ddi_dma_handle_t);
extern void ddi_dev_report_fault(dev_info_t *, ddi_fault_impact_t,
ddi_fault_location_t, const char *);
extern ddi_devstate_t ddi_get_devstate(dev_info_t *);
extern int ddi_dma_ncookies(ddi_dma_handle_t);
extern const ddi_dma_cookie_t *ddi_dma_cookie_iter(ddi_dma_handle_t,
const ddi_dma_cookie_t *);
extern const ddi_dma_cookie_t *ddi_dma_cookie_get(ddi_dma_handle_t, uint_t);
extern const ddi_dma_cookie_t *ddi_dma_cookie_one(ddi_dma_handle_t);
#define uiophysio physio
#define DDI_REGS_ACC_CONFLICT (-10)
#define DDI_DEV_NO_AUTOINCR 0x0000
#define DDI_DEV_AUTOINCR 0x0001
int
ddi_regs_map_setup(dev_info_t *dip, uint_t rnumber, caddr_t *addrp,
offset_t offset, offset_t len, const ddi_device_acc_attr_t *accattrp,
ddi_acc_handle_t *handle);
void
ddi_regs_map_free(ddi_acc_handle_t *handle);
uint8_t
ddi_get8(ddi_acc_handle_t handle, uint8_t *addr);
uint16_t
ddi_get16(ddi_acc_handle_t handle, uint16_t *addr);
uint32_t
ddi_get32(ddi_acc_handle_t handle, uint32_t *addr);
uint64_t
ddi_get64(ddi_acc_handle_t handle, uint64_t *addr);
void
ddi_rep_get8(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_get16(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_get32(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_get64(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_put8(ddi_acc_handle_t handle, uint8_t *addr, uint8_t value);
void
ddi_put16(ddi_acc_handle_t handle, uint16_t *addr, uint16_t value);
void
ddi_put32(ddi_acc_handle_t handle, uint32_t *addr, uint32_t value);
void
ddi_put64(ddi_acc_handle_t handle, uint64_t *addr, uint64_t value);
void
ddi_rep_put8(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_put16(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_put32(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr,
size_t repcount, uint_t flags);
void
ddi_rep_put64(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr,
size_t repcount, uint_t flags);
int
ddi_device_zero(ddi_acc_handle_t handle, caddr_t dev_addr,
size_t bytecount, ssize_t dev_advcnt, uint_t dev_datasz);
int
ddi_device_copy(
ddi_acc_handle_t src_handle, caddr_t src_addr, ssize_t src_advcnt,
ddi_acc_handle_t dest_handle, caddr_t dest_addr, ssize_t dest_advcnt,
size_t bytecount, uint_t dev_datasz);
uint16_t
ddi_swap16(uint16_t value);
uint32_t
ddi_swap32(uint32_t value);
uint64_t
ddi_swap64(uint64_t value);
#define PCI_PM_IDLESPEED 0x1
#define PCI_PM_IDLESPEED_ANY (void *)-1
#define PCI_PM_IDLESPEED_NONE (void *)-2
int
pci_config_setup(dev_info_t *dip, ddi_acc_handle_t *handle);
void
pci_config_teardown(ddi_acc_handle_t *handle);
uint8_t
pci_config_get8(ddi_acc_handle_t handle, off_t offset);
uint16_t
pci_config_get16(ddi_acc_handle_t handle, off_t offset);
uint32_t
pci_config_get32(ddi_acc_handle_t handle, off_t offset);
uint64_t
pci_config_get64(ddi_acc_handle_t handle, off_t offset);
void
pci_config_put8(ddi_acc_handle_t handle, off_t offset, uint8_t value);
void
pci_config_put16(ddi_acc_handle_t handle, off_t offset, uint16_t value);
void
pci_config_put32(ddi_acc_handle_t handle, off_t offset, uint32_t value);
void
pci_config_put64(ddi_acc_handle_t handle, off_t offset, uint64_t value);
int
pci_report_pmcap(dev_info_t *dip, int cap, void *arg);
int
pci_restore_config_regs(dev_info_t *dip);
int
pci_save_config_regs(dev_info_t *dip);
void
pci_ereport_setup(dev_info_t *dip);
void
pci_ereport_teardown(dev_info_t *dip);
void
pci_ereport_post(dev_info_t *dip, ddi_fm_error_t *derr, uint16_t *status);
#if defined(__i386) || defined(__amd64)
int
pci_peekpoke_check(dev_info_t *, dev_info_t *, ddi_ctl_enum_t, void *, void *,
int (*handler)(dev_info_t *, dev_info_t *, ddi_ctl_enum_t, void *, void *),
kmutex_t *, kmutex_t *, void (*scan)(dev_info_t *, ddi_fm_error_t *));
#endif
void
pci_target_enqueue(uint64_t, char *, char *, uint64_t);
void
pci_targetq_init(void);
int
pci_post_suspend(dev_info_t *dip);
int
pci_pre_resume(dev_info_t *dip);
model_t ddi_mmap_get_model(void);
model_t ddi_model_convert_from(model_t);
int
ddi_devid_valid(ddi_devid_t devid);
int
ddi_devid_register(dev_info_t *dip, ddi_devid_t devid);
void
ddi_devid_unregister(dev_info_t *dip);
int
ddi_devid_init(dev_info_t *dip, ushort_t devid_type, ushort_t nbytes,
void *id, ddi_devid_t *ret_devid);
int
ddi_devid_get(dev_info_t *dip, ddi_devid_t *ret_devid);
size_t
ddi_devid_sizeof(ddi_devid_t devid);
void
ddi_devid_free(ddi_devid_t devid);
int
ddi_devid_compare(ddi_devid_t id1, ddi_devid_t id2);
int
ddi_devid_scsi_encode(int version, char *driver_name,
uchar_t *inq, size_t inq_len, uchar_t *inq80, size_t inq80_len,
uchar_t *inq83, size_t inq83_len, ddi_devid_t *ret_devid);
int
ddi_devid_smp_encode(int version, char *driver_name,
char *wwnstr, uchar_t *srmir_buf, size_t srmir_len,
ddi_devid_t *ret_devid);
char
*ddi_devid_to_guid(ddi_devid_t devid);
void
ddi_devid_free_guid(char *guid);
int
ddi_lyr_get_devid(dev_t dev, ddi_devid_t *ret_devid);
int
ddi_lyr_get_minor_name(dev_t dev, int spec_type, char **minor_name);
int
ddi_lyr_devid_to_devlist(ddi_devid_t devid, const char *minor_name,
int *retndevs, dev_t **retdevs);
void
ddi_lyr_free_devlist(dev_t *devlist, int ndevs);
char *
ddi_devid_str_encode(ddi_devid_t devid, char *minor_name);
int
ddi_devid_str_decode(char *devidstr, ddi_devid_t *devidp, char **minor_namep);
void
ddi_devid_str_free(char *devidstr);
int
ddi_devid_str_compare(char *id1_str, char *id2_str);
#define DDI_DEVI_REMOVE_EVENT "DDI:DEVI_REMOVE"
#define DDI_DEVI_INSERT_EVENT "DDI:DEVI_INSERT"
#define DDI_DEVI_BUS_RESET_EVENT "DDI:DEVI_BUS_RESET"
#define DDI_DEVI_DEVICE_RESET_EVENT "DDI:DEVI_DEVICE_RESET"
int
ddi_remove_event_handler(ddi_callback_id_t id);
int
ddi_add_event_handler(dev_info_t *dip, ddi_eventcookie_t event,
void (*handler)(dev_info_t *, ddi_eventcookie_t, void *, void *),
void *arg, ddi_callback_id_t *id);
int
ddi_get_eventcookie(dev_info_t *dip, char *name,
ddi_eventcookie_t *event_cookiep);
int
ddi_log_sysevent(dev_info_t *dip, char *vendor, char *class_name,
char *subclass_name, nvlist_t *attr_list, sysevent_id_t *eidp,
int sleep_flag);
#define DDI_VENDOR_SUNW "SUNW"
typedef struct ddi_taskq ddi_taskq_t;
#define TASKQ_DEFAULTPRI -1
ddi_taskq_t *ddi_taskq_create(dev_info_t *dip, const char *name,
int nthreads, pri_t pri, uint_t cflags);
void ddi_taskq_destroy(ddi_taskq_t *tq);
int ddi_taskq_dispatch(ddi_taskq_t *tq, void (* func)(void *),
void *arg, uint_t dflags);
void ddi_taskq_wait(ddi_taskq_t *tq);
void ddi_taskq_suspend(ddi_taskq_t *tq);
void ddi_taskq_resume(ddi_taskq_t *tq);
boolean_t ddi_taskq_suspended(ddi_taskq_t *tq);
int ddi_parse(const char *, char *, uint_t *);
int ddi_parse_dlen(const char *, char *, size_t, uint_t *);
#define DDI_IPL_0 (0)
#define DDI_IPL_1 (1)
#define DDI_IPL_2 (2)
#define DDI_IPL_3 (3)
#define DDI_IPL_4 (4)
#define DDI_IPL_5 (5)
#define DDI_IPL_6 (6)
#define DDI_IPL_7 (7)
#define DDI_IPL_8 (8)
#define DDI_IPL_9 (9)
#define DDI_IPL_10 (10)
ddi_periodic_t ddi_periodic_add(void (*)(void *), void *, hrtime_t, int);
void ddi_periodic_delete(ddi_periodic_t);
int ddi_quiesce_not_needed(dev_info_t *);
int ddi_quiesce_not_supported(dev_info_t *);
typedef struct __ddi_cb **ddi_cb_handle_t;
int ddi_cb_register(dev_info_t *dip, ddi_cb_flags_t flags,
ddi_cb_func_t cbfunc, void *arg1, void *arg2,
ddi_cb_handle_t *ret_hdlp);
int ddi_cb_unregister(ddi_cb_handle_t hdl);
void ddi_mem_update(uint64_t addr, uint64_t size);
typedef struct plat_alias {
char *pali_current;
uint64_t pali_naliases;
char **pali_aliases;
} plat_alias_t;
typedef struct alias_pair {
char *pair_alias;
char *pair_curr;
} alias_pair_t;
extern boolean_t ddi_aliases_present;
typedef struct ddi_alias {
alias_pair_t *dali_alias_pairs;
alias_pair_t *dali_curr_pairs;
int dali_num_pairs;
mod_hash_t *dali_alias_TLB;
mod_hash_t *dali_curr_TLB;
} ddi_alias_t;
extern ddi_alias_t ddi_aliases;
void ddi_register_aliases(plat_alias_t *pali, uint64_t npali);
dev_info_t *ddi_alias_redirect(char *alias);
char *ddi_curr_redirect(char *curr);
#endif
#ifdef __cplusplus
}
#endif
#endif