Lines Matching defs:dip
164 ddi_map_regs(dev_info_t *dip, uint_t rnumber, caddr_t *kaddrp, off_t offset,
182 rc = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip,
185 rc = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip,
198 if (ddi_prop_update_int_array(DDI_DEV_T_NONE, dip,
202 "property", DEVI(dip)->devi_name,
203 DEVI(dip)->devi_instance, chosen_reg);
224 return (ddi_map(dip, &mr, offset, len, kaddrp));
228 ddi_unmap_regs(dev_info_t *dip, uint_t rnumber, caddr_t *kaddrp, off_t offset,
245 (void) ddi_map(dip, &mr, offset, len, kaddrp);
248 (void) ddi_prop_remove(DDI_DEV_T_NONE, dip, chosen_reg);
253 ddi_bus_map(dev_info_t *dip, dev_info_t *rdip, ddi_map_req_t *mp,
256 return (i_ddi_bus_map(dip, rdip, mp, offset, len, vaddrp));
268 nullbusmap(dev_info_t *dip, dev_info_t *rdip, ddi_map_req_t *mp,
275 return (ddi_map(dip, mp, offset, len, vaddrp));
283 ddi_rnumber_to_regspec(dev_info_t *dip, int rnumber)
285 return (i_ddi_rnumber_to_regspec(dip, rnumber));
290 * Note that we allow the dip to be nil because we may be called
292 * regular leaf and nexus drivers should always use a non-nil dip!
410 ddi_peek8(dev_info_t *dip, int8_t *addr, int8_t *val_p)
412 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
417 ddi_peek16(dev_info_t *dip, int16_t *addr, int16_t *val_p)
419 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
424 ddi_peek32(dev_info_t *dip, int32_t *addr, int32_t *val_p)
426 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
431 ddi_peek64(dev_info_t *dip, int64_t *addr, int64_t *val_p)
433 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
448 ddi_peekc(dev_info_t *dip, int8_t *addr, int8_t *val_p)
450 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
455 ddi_peeks(dev_info_t *dip, int16_t *addr, int16_t *val_p)
457 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
462 ddi_peekl(dev_info_t *dip, int32_t *addr, int32_t *val_p)
464 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
469 ddi_peekd(dev_info_t *dip, int64_t *addr, int64_t *val_p)
471 return (i_ddi_peekpoke(dip, DDI_CTLOPS_PEEK, sizeof (*val_p), addr,
477 ddi_poke8(dev_info_t *dip, int8_t *addr, int8_t val)
479 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
483 ddi_poke16(dev_info_t *dip, int16_t *addr, int16_t val)
485 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
489 ddi_poke32(dev_info_t *dip, int32_t *addr, int32_t val)
491 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
495 ddi_poke64(dev_info_t *dip, int64_t *addr, int64_t val)
497 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
510 ddi_pokec(dev_info_t *dip, int8_t *addr, int8_t val)
512 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
516 ddi_pokes(dev_info_t *dip, int16_t *addr, int16_t val)
518 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
522 ddi_pokel(dev_info_t *dip, int32_t *addr, int32_t val)
524 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
528 ddi_poked(dev_info_t *dip, int64_t *addr, int64_t val)
530 return (i_ddi_peekpoke(dip, DDI_CTLOPS_POKE, sizeof (val), addr, &val));
641 * 'nil dip' semantics of peek/poke because btopr/btop/ptob are DDI/DKI
645 ddi_btop(dev_info_t *dip, unsigned long bytes)
649 (void) ddi_ctlops(dip, dip, DDI_CTLOPS_BTOP, &bytes, &pages);
654 ddi_btopr(dev_info_t *dip, unsigned long bytes)
658 (void) ddi_ctlops(dip, dip, DDI_CTLOPS_BTOPR, &bytes, &pages);
663 ddi_ptob(dev_info_t *dip, unsigned long pages)
667 (void) ddi_ctlops(dip, dip, DDI_CTLOPS_PTOB, &pages, &bytes);
721 ddi_dma_mctl(dev_info_t *dip, dev_info_t *rdip,
727 if (dip != ddi_root_node())
728 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_ctl;
729 fp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_ctl;
730 return ((*fp) (dip, rdip, handle, request, offp, lenp, objp, flags));
754 ddi_dma_map(dev_info_t *dip, dev_info_t *rdip,
768 ddi_dma_allochdl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_attr_t *attr,
774 if (dip != ddi_root_node())
775 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_allochdl;
777 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_allochdl;
778 return ((*funcp)(dip, rdip, attr, waitfp, arg, handlep));
782 ddi_dma_freehdl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_handle_t handlep)
786 if (dip != ddi_root_node())
787 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_allochdl;
789 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_freehdl;
790 return ((*funcp)(dip, rdip, handlep));
794 ddi_dma_bindhdl(dev_info_t *dip, dev_info_t *rdip,
801 if (dip != ddi_root_node())
802 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_bindhdl;
804 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_bindhdl;
805 return ((*funcp)(dip, rdip, handle, dmareq, cp, ccountp));
809 ddi_dma_unbindhdl(dev_info_t *dip, dev_info_t *rdip,
814 if (dip != ddi_root_node())
815 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_unbindhdl;
817 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_unbindhdl;
818 return ((*funcp)(dip, rdip, handle));
823 ddi_dma_flush(dev_info_t *dip, dev_info_t *rdip,
830 if (dip != ddi_root_node())
831 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_flush;
833 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_flush;
834 return ((*funcp)(dip, rdip, handle, off, len, cache_flags));
838 ddi_dma_win(dev_info_t *dip, dev_info_t *rdip,
845 if (dip != ddi_root_node())
846 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_win;
848 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_win;
849 return ((*funcp)(dip, rdip, handle, win, offp, lenp,
857 dev_info_t *dip, *rdip;
870 dip = rdip = hp->dmai_rdip;
871 if (dip != ddi_root_node())
872 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_flush;
873 funcp = DEVI(dip)->devi_ops->devo_bus_ops->bus_dma_flush;
874 return ((*funcp)(dip, rdip, h, o, l, whom));
881 dev_info_t *dip, *rdip;
884 dip = rdip = hp->dmai_rdip;
885 if (dip != ddi_root_node())
886 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_unbindhdl;
888 return ((*funcp)(dip, rdip, h));
975 ddi_map_fault(dev_info_t *dip, struct hat *hat, struct seg *seg,
978 return (i_ddi_map_fault(dip, dip, hat, seg, addr, dp, pfn, prot, lock));
995 dev_info_t *dip;
1002 if ((dip =
1005 ddi_release_devi(dip); /* for e_ddi_hold_devi_by_dev() */
1017 hp->ah_dip = dip;
1033 result = ddi_map(dip, &mr, 0, 0, NULL);
1065 nopropop(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op, int mod_flags,
1068 _NOTE(ARGUNUSED(dev, dip, prop_op, mod_flags, name, valuep, lengthp))
1221 ddi_prop_search_common(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
1235 mutex_enter(&(DEVI(dip)->devi_lock));
1248 &(DEVI(dip)->devi_drv_prop_ptr));
1251 &(DEVI(dip)->devi_sys_prop_ptr));
1253 if ((propp == NULL) && DEVI(dip)->devi_global_prop_list) {
1255 &DEVI(dip)->devi_global_prop_list->prop_list);
1260 &(DEVI(dip)->devi_hw_prop_ptr));
1272 mutex_exit(&(DEVI(dip)->devi_lock));
1282 mutex_exit(&(DEVI(dip)->devi_lock));
1302 mutex_exit(&(DEVI(dip)->devi_lock));
1323 mutex_exit(&(DEVI(dip)->devi_lock));
1349 mutex_exit(&(DEVI(dip)->devi_lock));
1360 mutex_exit(&(DEVI(dip)->devi_lock));
1375 mutex_exit(&(DEVI(dip)->devi_lock));
1379 mutex_exit(&(DEVI(dip)->devi_lock));
1389 pdip = (dev_info_t *)DEVI(dip)->devi_parent;
1394 if (dip == ddi_root_node()) {
1395 return (ddi_bus_prop_op(dev, dip, dip, prop_op,
1428 (i_ddi_node_state(dip) >= DS_INITIALIZED))
1433 if ((bop != ddi_bus_prop_op) || ndi_dev_is_prom_node(dip)) {
1434 i = (*bop)(dev, pdip, dip, prop_op,
1443 dip = pdip;
1465 ddi_prop_op(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op, int mod_flags,
1493 i = ddi_prop_search_common(dev, dip, prop_op,
1510 ddi_prop_op_nblocks_blksize(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
1526 return (ddi_prop_op(dev, dip, prop_op, mod_flags,
1530 return (ddi_prop_op_size_blksize(dev, dip, prop_op, mod_flags,
1538 ddi_prop_op_nblocks(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
1541 return (ddi_prop_op_nblocks_blksize(dev, dip, prop_op,
1559 ddi_prop_op_size_blksize(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
1574 if (i_ddi_prop_dyn_driver_get(dip) == NULL) {
1580 i_ddi_prop_dyn_driver_set(dip, prop_dyn_size);
1605 return (ddi_prop_op(dev, dip, prop_op, mod_flags,
1653 ddi_prop_op_size(dev_t dev, dev_info_t *dip, ddi_prop_op_t prop_op,
1656 return (ddi_prop_op_size_blksize(dev, dip, prop_op,
1672 * dip: Input: dev_info_t pointer of child.
1689 ddi_getlongprop(dev_t dev, dev_info_t *dip, int flags,
1692 return (ddi_prop_op(dev, dip, PROP_LEN_AND_VAL_ALLOC,
1702 * dip: Input: dev_info_t pointer of child.
1721 ddi_getlongprop_buf(dev_t dev, dev_info_t *dip, int flags,
1724 return (ddi_prop_op(dev, dip, PROP_LEN_AND_VAL_BUF,
1743 ddi_getprop(dev_t dev, dev_info_t *dip, int flags, char *name, int defvalue)
1749 error = ddi_prop_op(dev, dip, PROP_LEN_AND_VAL_BUF,
1764 ddi_getproplen(dev_t dev, dev_info_t *dip, int flags, char *name, int *lengthp)
1766 return (ddi_prop_op(dev, dip, PROP_LEN, flags, name, NULL, lengthp));
3244 ddi_prop_add(dev_t dev, dev_info_t *dip, int flags,
3248 ddi_prop_t **list_head = &(DEVI(dip)->devi_drv_prop_ptr);
3263 list_head = &(DEVI(dip)->devi_sys_prop_ptr);
3265 list_head = &(DEVI(dip)->devi_hw_prop_ptr);
3287 makedevice(ddi_name_to_major(DEVI(dip)->devi_binding_name),
3334 mutex_enter(&(DEVI(dip)->devi_lock));
3338 mutex_exit(&(DEVI(dip)->devi_lock));
3356 ddi_prop_change(dev_t dev, dev_info_t *dip, int flags,
3380 * number, a real dev_t value should be created based upon the dip's
3385 ddi_name_to_major(DEVI(dip)->devi_binding_name),
3392 mutex_enter(&(DEVI(dip)->devi_lock));
3393 ppropp = &DEVI(dip)->devi_drv_prop_ptr;
3395 ppropp = &DEVI(dip)->devi_sys_prop_ptr;
3397 ppropp = &DEVI(dip)->devi_hw_prop_ptr;
3414 mutex_exit(&(DEVI(dip)->devi_lock));
3418 mutex_exit(&(DEVI(dip)->devi_lock));
3422 return (ddi_prop_add(dev, dip, flags, name, value, length));
3432 ddi_prop_update_common(dev_t match_dev, dev_info_t *dip, int flags,
3495 rval = ddi_prop_add(match_dev, dip,
3498 rval = ddi_prop_change(match_dev, dip,
3518 ddi_prop_create(dev_t dev, dev_info_t *dip, int flag,
3527 name, ddi_driver_name(dip), ddi_get_instance(dip));
3532 return (ddi_prop_update_common(dev, dip, flag, name,
3537 e_ddi_prop_create(dev_t dev, dev_info_t *dip, int flag,
3543 return (ddi_prop_update_common(dev, dip, flag,
3548 ddi_prop_modify(dev_t dev, dev_info_t *dip, int flag,
3563 if (ddi_prop_exists(dev, dip, (flag | DDI_PROP_NOTPROM), name) == 0)
3566 return (ddi_prop_update_common(dev, dip,
3572 e_ddi_prop_modify(dev_t dev, dev_info_t *dip, int flag,
3584 if (ddi_prop_exists(dev, dip, (flag | DDI_PROP_SYSTEM_DEF), name) == 0)
3589 return (ddi_prop_update_common(dev, dip,
3605 ddi_prop_lookup_common(dev_t match_dev, dev_info_t *dip,
3635 rval = ddi_prop_search_common(match_dev, dip,
3672 ddi_prop_lookup(dev_t match_dev, dev_info_t *dip,
3676 return (ddi_prop_lookup_common(match_dev, dip,
3686 ddi_prop_exists(dev_t match_dev, dev_info_t *dip, uint_t flags, char *name)
3691 i = ddi_prop_search_common(match_dev, dip, PROP_EXISTS,
3702 ddi_prop_update(dev_t match_dev, dev_info_t *dip,
3706 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_COMPOSITE,
3718 ddi_prop_get_int(dev_t match_dev, dev_info_t *dip, uint_t flags,
3728 if (dip != NULL) {
3731 name, ddi_driver_name(dip), ddi_get_instance(dip));
3738 if ((rval = ddi_prop_lookup_common(match_dev, dip,
3757 ddi_prop_get_int64(dev_t match_dev, dev_info_t *dip, uint_t flags,
3767 if (dip != NULL) {
3770 name, ddi_driver_name(dip), ddi_get_instance(dip));
3776 if ((rval = ddi_prop_lookup_common(match_dev, dip,
3792 ddi_prop_lookup_int_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
3798 if (dip != NULL) {
3801 flags, name, ddi_driver_name(dip),
3802 ddi_get_instance(dip));
3809 return (ddi_prop_lookup_common(match_dev, dip,
3818 ddi_prop_lookup_int64_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
3824 if (dip != NULL) {
3827 flags, name, ddi_driver_name(dip),
3828 ddi_get_instance(dip));
3834 return (ddi_prop_lookup_common(match_dev, dip,
3844 ddi_prop_update_int(dev_t match_dev, dev_info_t *dip,
3847 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_INT,
3856 ddi_prop_update_int64(dev_t match_dev, dev_info_t *dip,
3859 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_INT64,
3864 e_ddi_prop_update_int(dev_t match_dev, dev_info_t *dip,
3867 return (ddi_prop_update_common(match_dev, dip,
3873 e_ddi_prop_update_int64(dev_t match_dev, dev_info_t *dip,
3876 return (ddi_prop_update_common(match_dev, dip,
3886 ddi_prop_update_int_array(dev_t match_dev, dev_info_t *dip,
3889 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_INT,
3898 ddi_prop_update_int64_array(dev_t match_dev, dev_info_t *dip,
3901 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_INT64,
3906 e_ddi_prop_update_int64_array(dev_t match_dev, dev_info_t *dip,
3909 return (ddi_prop_update_common(match_dev, dip,
3915 e_ddi_prop_update_int_array(dev_t match_dev, dev_info_t *dip,
3918 return (ddi_prop_update_common(match_dev, dip,
3927 ddi_prop_lookup_string(dev_t match_dev, dev_info_t *dip, uint_t flags,
3935 if (dip != NULL) {
3939 ddi_driver_name(dip), ddi_get_instance(dip));
3946 return (ddi_prop_lookup_common(match_dev, dip,
3955 ddi_prop_lookup_string_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
3961 if (dip != NULL) {
3964 flags, name, ddi_driver_name(dip),
3965 ddi_get_instance(dip));
3972 return (ddi_prop_lookup_common(match_dev, dip,
3981 ddi_prop_update_string(dev_t match_dev, dev_info_t *dip,
3984 return (ddi_prop_update_common(match_dev, dip,
3990 e_ddi_prop_update_string(dev_t match_dev, dev_info_t *dip,
3993 return (ddi_prop_update_common(match_dev, dip,
4003 ddi_prop_update_string_array(dev_t match_dev, dev_info_t *dip,
4006 return (ddi_prop_update_common(match_dev, dip,
4012 e_ddi_prop_update_string_array(dev_t match_dev, dev_info_t *dip,
4015 return (ddi_prop_update_common(match_dev, dip,
4026 ddi_prop_lookup_byte_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
4032 if (dip != NULL) {
4035 flags, name, ddi_driver_name(dip),
4036 ddi_get_instance(dip));
4043 return (ddi_prop_lookup_common(match_dev, dip,
4052 ddi_prop_update_byte_array(dev_t match_dev, dev_info_t *dip,
4058 return (ddi_prop_update_common(match_dev, dip, DDI_PROP_TYPE_BYTE,
4064 e_ddi_prop_update_byte_array(dev_t match_dev, dev_info_t *dip,
4070 return (ddi_prop_update_common(match_dev, dip,
4084 ddi_prop_remove_common(dev_t dev, dev_info_t *dip, char *name, int flag)
4086 ddi_prop_t **list_head = &(DEVI(dip)->devi_drv_prop_ptr);
4096 list_head = &(DEVI(dip)->devi_sys_prop_ptr);
4098 list_head = &(DEVI(dip)->devi_hw_prop_ptr);
4100 mutex_enter(&(DEVI(dip)->devi_lock));
4115 mutex_exit(&(DEVI(dip)->devi_lock));
4129 mutex_exit(&(DEVI(dip)->devi_lock));
4134 ddi_prop_remove(dev_t dev, dev_info_t *dip, char *name)
4136 return (ddi_prop_remove_common(dev, dip, name, 0));
4140 e_ddi_prop_remove(dev_t dev, dev_info_t *dip, char *name)
4142 return (ddi_prop_remove_common(dev, dip, name, DDI_PROP_SYSTEM_DEF));
4164 ddi_prop_remove_all_common(dev_info_t *dip, int flag)
4168 mutex_enter(&(DEVI(dip)->devi_lock));
4170 list_head = &(DEVI(dip)->devi_sys_prop_ptr);
4172 list_head = &(DEVI(dip)->devi_hw_prop_ptr);
4174 list_head = &(DEVI(dip)->devi_drv_prop_ptr);
4178 mutex_exit(&(DEVI(dip)->devi_lock));
4187 ddi_prop_remove_all(dev_info_t *dip)
4189 i_ddi_prop_dyn_driver_set(dip, NULL);
4190 ddi_prop_remove_all_common(dip, 0);
4198 e_ddi_prop_remove_all(dev_info_t *dip)
4200 ddi_prop_remove_all_common(dip, (int)DDI_PROP_SYSTEM_DEF);
4216 ddi_prop_undefine(dev_t dev, dev_info_t *dip, int flag, char *name)
4221 return (ddi_prop_update_common(dev, dip, flag,
4226 e_ddi_prop_undefine(dev_t dev, dev_info_t *dip, int flag, char *name)
4232 return (ddi_prop_update_common(dev, dip, flag,
4240 i_ddi_prop_dyn_driver_set(dev_info_t *dip, i_ddi_prop_dyn_t *dp)
4242 DEVI(dip)->devi_prop_dyn_driver = dp;
4246 i_ddi_prop_dyn_driver_get(dev_info_t *dip)
4248 return (DEVI(dip)->devi_prop_dyn_driver);
4252 i_ddi_prop_dyn_parent_set(dev_info_t *dip, i_ddi_prop_dyn_t *dp)
4254 DEVI(dip)->devi_prop_dyn_parent = dp;
4258 i_ddi_prop_dyn_parent_get(dev_info_t *dip)
4260 return (DEVI(dip)->devi_prop_dyn_parent);
4264 i_ddi_prop_dyn_cache_invalidate(dev_info_t *dip, i_ddi_prop_dyn_t *dp)
4267 if (dip && dp)
4273 ddi_prop_cache_invalidate(dev_t dev, dev_info_t *dip, char *name, int flags)
4283 * if input dip != child_dip, then call is on behalf of child
4287 * if input dip == ch_dip (child_dip), call is on behalf of root driver,
4301 impl_ddi_bus_prop_op(dev_t dev, dev_info_t *dip, dev_info_t *ch_dip,
4380 (void) impl_fix_props(dip, ch_dip, name, len, buffer);
4395 ddi_bus_prop_op(dev_t dev, dev_info_t *dip, dev_info_t *ch_dip,
4401 error = impl_ddi_bus_prop_op(dev, dip, ch_dip, prop_op, mod_flags,
4426 * The options dip is attached right after boot.
4440 * NOTE: Using `dip' in following call increments the level.
4443 return (ddi_prop_search_common(dev, dip, prop_op, mod_flags,
4587 ddi_binding_name(dev_info_t *dip)
4589 return (DEVI(dip)->devi_binding_name);
4633 i_ddi_set_binding_name(dev_info_t *dip, char *name)
4635 DEVI(dip)->devi_binding_name = name;
4644 ddi_get_name(dev_info_t *dip)
4646 return (DEVI(dip)->devi_binding_name);
4655 ddi_node_name(dev_info_t *dip)
4657 return (DEVI(dip)->devi_node_name);
4665 ddi_get_nodeid(dev_info_t *dip)
4667 return (DEVI(dip)->devi_nodeid);
4671 ddi_get_instance(dev_info_t *dip)
4673 return (DEVI(dip)->devi_instance);
4677 ddi_get_driver(dev_info_t *dip)
4679 return (DEVI(dip)->devi_ops);
4683 ddi_set_driver(dev_info_t *dip, struct dev_ops *devo)
4685 DEVI(dip)->devi_ops = devo;
4693 ddi_set_driver_private(dev_info_t *dip, void *data)
4695 DEVI(dip)->devi_driver_data = data;
4699 ddi_get_driver_private(dev_info_t *dip)
4701 return (DEVI(dip)->devi_driver_data);
4709 ddi_get_parent(dev_info_t *dip)
4711 return ((dev_info_t *)DEVI(dip)->devi_parent);
4715 ddi_get_child(dev_info_t *dip)
4717 return ((dev_info_t *)DEVI(dip)->devi_child);
4721 ddi_get_next_sibling(dev_info_t *dip)
4723 return ((dev_info_t *)DEVI(dip)->devi_sibling);
4727 ddi_get_next(dev_info_t *dip)
4729 return ((dev_info_t *)DEVI(dip)->devi_next);
4733 ddi_set_next(dev_info_t *dip, dev_info_t *nextdip)
4735 DEVI(dip)->devi_next = DEVI(nextdip);
4820 ddi_streams_driver(dev_info_t *dip)
4822 if (i_ddi_devi_attached(dip) &&
4823 (DEVI(dip)->devi_ops->devo_cb_ops != NULL) &&
4824 (DEVI(dip)->devi_ops->devo_cb_ops->cb_str != NULL))
5178 ddi_no_info(dev_info_t *dip, ddi_info_cmd_t infocmd, void *arg, void **result)
5180 _NOTE(ARGUNUSED(dip, infocmd, arg, result))
5191 ddi_getinfo_1to1(dev_info_t *dip, ddi_info_cmd_t infocmd,
5194 _NOTE(ARGUNUSED(dip))
5213 ddi_no_dma_map(dev_info_t *dip, dev_info_t *rdip,
5216 _NOTE(ARGUNUSED(dip, rdip, dmareqp, handlep))
5221 ddi_no_dma_allochdl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_attr_t *attr,
5224 _NOTE(ARGUNUSED(dip, rdip, attr, waitfp, arg, handlep))
5229 ddi_no_dma_freehdl(dev_info_t *dip, dev_info_t *rdip,
5232 _NOTE(ARGUNUSED(dip, rdip, handle))
5237 ddi_no_dma_bindhdl(dev_info_t *dip, dev_info_t *rdip,
5241 _NOTE(ARGUNUSED(dip, rdip, handle, dmareq, cp, ccountp))
5246 ddi_no_dma_unbindhdl(dev_info_t *dip, dev_info_t *rdip,
5249 _NOTE(ARGUNUSED(dip, rdip, handle))
5254 ddi_no_dma_flush(dev_info_t *dip, dev_info_t *rdip,
5258 _NOTE(ARGUNUSED(dip, rdip, handle, off, len, cache_flags))
5263 ddi_no_dma_win(dev_info_t *dip, dev_info_t *rdip,
5267 _NOTE(ARGUNUSED(dip, rdip, handle, win, offp, lenp, cookiep, ccountp))
5272 ddi_no_dma_mctl(dev_info_t *dip, dev_info_t *rdip,
5276 _NOTE(ARGUNUSED(dip, rdip, handle, request, offp, lenp, objp, flags))
5412 i_log_devfs_minor_create(dev_info_t *dip, char *minor_name)
5433 ddi_driver_name(dip));
5448 (void) ddi_pathname(dip, pathname);
5461 if ((class_name = i_ddi_devi_class(dip)) != NULL) {
5494 ddi_driver_name(dip), "syseventd not responding",
5495 ddi_driver_name(dip));
5507 ddi_driver_name(dip), ddi_driver_name(dip));
5516 i_log_devfs_minor_remove(dev_info_t *dip, char *minor_name)
5526 * of attach/detach reconfigurations and when the dip is
5529 if (DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip) ||
5530 (i_ddi_node_state(dip) < DS_INITIALIZED)) {
5547 (void) ddi_pathname(dip, pathname);
5572 if ((class_name = i_ddi_devi_class(dip)) != NULL) {
5584 se_val.value.sv_string = (char *)ddi_driver_name(dip);
5592 se_val.value.sv_int32 = ddi_get_instance(dip);
5617 derive_devi_class(dev_info_t *dip, char *node_type, int flag)
5621 if (i_ddi_devi_class(dip) == NULL) {
5628 rv = i_ddi_set_devi_class(dip, ESC_DISK, flag);
5635 rv = i_ddi_set_devi_class(dip, ESC_NETWORK, flag);
5642 rv = i_ddi_set_devi_class(dip, ESC_PRINTER, flag);
5646 (strncmp(ESC_LOFI, ddi_node_name(dip),
5648 rv = i_ddi_set_devi_class(dip, ESC_LOFI, flag);
5684 ddi_create_minor_common(dev_info_t *dip, char *name, int spec_type,
5707 ddi_driver_name(dip), ddi_get_instance(dip),
5712 /* dip must be bound and attached */
5713 major = ddi_driver_major(dip);
5723 ddi_driver_name(dip), ddi_get_instance(dip), name));
5746 if (DEVI_IS_ATTACHING(dip))
5753 if (derive_devi_class(dip, node_type, KM_NOSLEEP) !=
5770 dmdp->dip = dip;
5788 ddi_append_minor_node(dip, dmdp);
5794 if (!(DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip)) &&
5796 (void) i_log_devfs_minor_create(dip, name);
5802 dacfc_match_create_minor(name, node_type, dip, dmdp, flag);
5807 ddi_create_minor_node(dev_info_t *dip, char *name, int spec_type,
5810 return (ddi_create_minor_common(dip, name, spec_type, minor_num,
5815 ddi_create_priv_minor_node(dev_info_t *dip, char *name, int spec_type,
5819 return (ddi_create_minor_common(dip, name, spec_type, minor_num,
5824 ddi_create_default_minor_node(dev_info_t *dip, char *name, int spec_type,
5827 return (ddi_create_minor_common(dip, name, spec_type, minor_num,
5837 ddi_create_internal_pathname(dev_info_t *dip, char *name, int spec_type,
5840 return (ddi_create_minor_common(dip, name, spec_type, minor_num,
5845 ddi_remove_minor_node(dev_info_t *dip, char *name)
5851 ndi_devi_enter(dip, &circ);
5852 dmdp_prev = &DEVI(dip)->devi_minor;
5853 dmdp = DEVI(dip)->devi_minor;
5860 (void) i_log_devfs_minor_remove(dip,
5886 ndi_devi_exit(dip, circ);
6494 * This sets the devi_addr entry in the dev_info structure 'dip' to 'name'.
6501 ddi_set_name_addr(dev_info_t *dip, char *name)
6503 char *buf = DEVI(dip)->devi_addr_buf;
6508 DEVI(dip)->devi_addr_buf = buf;
6513 newaddr = (DEVI(dip)->devi_addr == buf) ?
6519 DEVI(dip)->devi_addr = newaddr;
6523 ddi_get_name_addr(dev_info_t *dip)
6525 return (DEVI(dip)->devi_addr);
6529 ddi_set_parent_data(dev_info_t *dip, void *pd)
6531 DEVI(dip)->devi_parent_data = pd;
6535 ddi_get_parent_data(dev_info_t *dip)
6537 return (DEVI(dip)->devi_parent_data);
6573 * Return the name of the devinfo node pointed at by 'dip' in the buffer
6580 ddi_deviname(dev_info_t *dip, char *name)
6585 if (dip == ddi_root_node()) {
6590 if (i_ddi_node_state(dip) < DS_BOUND) {
6603 addrname = ddi_get_name_addr(dip);
6609 (void) sprintf(name, "/%s", ddi_node_name(dip));
6611 (void) sprintf(name, "/%s@%s", ddi_node_name(dip), addrname);
6624 i_ddi_parname(dev_info_t *dip, char *name)
6628 if (dip == ddi_root_node()) {
6633 ASSERT(i_ddi_node_state(dip) >= DS_INITIALIZED);
6635 if (*(addrname = ddi_get_name_addr(dip)) == '\0')
6636 (void) sprintf(name, "%s", ddi_binding_name(dip));
6638 (void) sprintf(name, "%s@%s", ddi_binding_name(dip), addrname);
6643 pathname_work(dev_info_t *dip, char *path)
6647 if (dip == ddi_root_node()) {
6651 (void) pathname_work(ddi_get_parent(dip), path);
6653 (void) ddi_deviname(dip, bp);
6658 ddi_pathname(dev_info_t *dip, char *path)
6660 return (pathname_work(dip, path));
6666 if (dmdp->dip == NULL)
6669 (void) ddi_pathname(dmdp->dip, path);
6679 pathname_work_obp(dev_info_t *dip, char *path)
6687 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
6697 if (dip == ddi_root_node()) {
6701 obp_path = pathname_work_obp(ddi_get_parent(dip), path);
6711 (void) ddi_deviname(dip, bp);
6722 ddi_pathname_obp(dev_info_t *dip, char *path)
6725 if (dip == NULL || path == NULL)
6729 return (pathname_work_obp(dip, path));
6733 ddi_pathname_obp_set(dev_info_t *dip, char *component)
6739 if (dip == NULL)
6744 pdip = ddi_get_parent(dip);
6754 rc = ndi_prop_update_string(DDI_DEV_T_NONE, dip, "obp-path",
6789 dev_info_t *dip;
6815 if ((dip = e_ddi_hold_devi_by_path(path, 0)) == NULL)
6819 ndi_devi_enter(dip, &circ);
6820 minorname = i_ddi_devtspectype_to_minorname(dip,
6826 ndi_devi_exit(dip, circ);
6827 ddi_release_devi(dip);
6846 dev_info_t *dip;
6867 for (dip = dnp->dn_head; dip;
6868 dip = (dev_info_t *)DEVI(dip)->devi_next) {
6870 if (DEVI(dip)->devi_instance != instance)
6879 if (i_ddi_node_state(dip) >= DS_INITIALIZED) {
6880 (void) ddi_pathname(dip, path);
6881 if (i_ddi_node_state(dip) < DS_INITIALIZED)
6898 * Given the dip for a network interface return the ppa for that interface.
6911 i_ddi_devi_get_ppa(dev_info_t *dip)
6913 return (ddi_prop_get_int(DDI_DEV_T_ANY, dip,
6915 GLD_DRIVER_PPA, ddi_get_instance(dip)));
6923 i_ddi_devi_set_ppa(dev_info_t *dip, int ppa)
6925 (void) e_ddi_prop_update_int(DDI_DEV_T_NONE, dip, GLD_DRIVER_PPA, ppa);
6946 ddi_dma_alloc_handle(dev_info_t *dip, ddi_dma_attr_t *attr,
6958 bop = DEVI(dip)->devi_ops->devo_bus_ops;
6962 return ((*funcp)(dip, dip, &dma_attr, waitfp, arg, handlep));
6982 dev_info_t *dip = hp->dmai_rdip;
7018 ap->ah_dip = dip;
7026 rval = i_ddi_mem_alloc(dip, attrp, length, sleepflag,
7030 rval = i_ddi_mem_alloc(dip, attrp, length, sleepflag,
7074 dev_info_t *dip, *rdip;
7117 dip = rdip = hp->dmai_rdip;
7118 if (dip != ddi_root_node())
7119 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_bindhdl;
7121 return ((*funcp)(dip, rdip, handle, &dmareq, cookiep, ccountp));
7130 dev_info_t *dip, *rdip;
7146 dip = rdip = hp->dmai_rdip;
7147 if (dip != ddi_root_node())
7148 dip = (dev_info_t *)DEVI(dip)->devi_bus_dma_bindhdl;
7150 return ((*funcp)(dip, rdip, handle, &dmareq, cookiep, ccountp));
7250 ddi_regs_map_setup(dev_info_t *dip, uint_t rnumber, caddr_t *addrp,
7264 hp->ah_dip = dip;
7280 result = ddi_map(dip, &mr, offset, len, addrp);
7485 i_ddi_devtspectype_to_minorname(dev_info_t *dip, dev_t dev, int spec_type)
7496 ASSERT((ddi_driver_major(dip) == getmajor(dev)) ||
7499 ASSERT(DEVI_BUSY_OWNED(dip));
7500 for (dmdp = DEVI(dip)->devi_minor; dmdp; dmdp = dmdp->next) {
7519 i_ddi_minorname_to_devtspectype(dev_info_t *dip, char *minor_name,
7526 if (dip == clone_dip) {
7555 ndi_devi_enter(dip, &circ);
7556 for (dmdp = DEVI(dip)->devi_minor; dmdp; dmdp = dmdp->next) {
7569 ndi_devi_exit(dip, circ);
7572 ndi_devi_exit(dip, circ);
7642 i_ddi_devid_register(dev_info_t *dip, ddi_devid_t devid)
7650 if ((dip == NULL) ||
7651 ((major = ddi_driver_major(dip)) == DDI_MAJOR_T_NONE))
7659 driver_name = ddi_driver_name(dip);
7688 if (ndi_prop_update_string(DDI_DEV_T_NONE, dip,
7691 ddi_driver_name(dip), ddi_get_instance(dip));
7697 if (DEVI(dip)->devi_devid_str)
7698 ddi_devid_str_free(DEVI(dip)->devi_devid_str);
7699 DEVI(dip)->devi_devid_str = devid_str;
7704 ddi_devid_register(dev_info_t *dip, ddi_devid_t devid)
7708 rval = i_ddi_devid_register(dip, devid);
7713 if (e_devid_cache_register(dip, devid) == DDI_SUCCESS) {
7714 mutex_enter(&DEVI(dip)->devi_lock);
7715 DEVI(dip)->devi_flags |= DEVI_CACHED_DEVID;
7716 mutex_exit(&DEVI(dip)->devi_lock);
7717 } else if (ddi_get_name_addr(dip)) {
7723 ddi_driver_name(dip), ddi_get_instance(dip));
7727 ddi_driver_name(dip), ddi_get_instance(dip));
7737 i_ddi_devid_unregister(dev_info_t *dip)
7739 if (DEVI(dip)->devi_devid_str) {
7740 ddi_devid_str_free(DEVI(dip)->devi_devid_str);
7741 DEVI(dip)->devi_devid_str = NULL;
7745 (void) ndi_prop_remove(DDI_DEV_T_NONE, dip, DEVID_PROP_NAME);
7749 ddi_devid_unregister(dev_info_t *dip)
7751 mutex_enter(&DEVI(dip)->devi_lock);
7752 DEVI(dip)->devi_flags &= ~DEVI_CACHED_DEVID;
7753 mutex_exit(&DEVI(dip)->devi_lock);
7754 e_devid_cache_unregister(dip);
7755 i_ddi_devid_unregister(dip);
7763 dev_info_t *dip,
7811 driver_name = ddi_driver_name(dip);
7875 ddi_devid_get(dev_info_t *dip, ddi_devid_t *ret_devid)
7877 return (i_ddi_devi_get_devid(DDI_DEV_T_ANY, dip, ret_devid));
7881 i_ddi_devi_get_devid(dev_t dev, dev_info_t *dip, ddi_devid_t *ret_devid)
7888 if (ddi_prop_lookup_string(dev, dip, DDI_PROP_DONTPASS,
7891 (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip,
7913 dev_info_t *dip;
7916 /* get the dip */
7917 if ((dip = e_ddi_hold_devi_by_dev(dev, 0)) == NULL)
7920 rval = i_ddi_devi_get_devid(dev, dip, ret_devid);
7922 ddi_release_devi(dip); /* e_ddi_hold_devi_by_dev() */
7934 dev_info_t *dip;
7938 if ((dip = e_ddi_hold_devi_by_dev(dev, 0)) == NULL) {
7945 ndi_devi_enter(dip, &circ);
7946 nm = i_ddi_devtspectype_to_minorname(dip, dev, spec_type);
7949 ndi_devi_exit(dip, circ);
7950 ddi_release_devi(dip); /* e_ddi_hold_devi_by_dev() */
8050 ddi_add_event_handler(dev_info_t *dip, ddi_eventcookie_t event,
8054 return (ndi_busop_add_eventcall(dip, dip, event, handler, arg, id));
8064 ddi_get_eventcookie(dev_info_t *dip, char *name,
8067 return (ndi_busop_get_eventcookie(dip, dip,
8796 ddi_get_devstate(dev_info_t *dip)
8798 if (DEVI_IS_DEVICE_OFFLINE(dip))
8800 else if (DEVI_IS_DEVICE_DOWN(dip) || DEVI_IS_BUS_DOWN(dip))
8802 else if (DEVI_IS_BUS_QUIESCED(dip))
8804 else if (DEVI_IS_DEVICE_DEGRADED(dip))
8811 ddi_dev_report_fault(dev_info_t *dip, ddi_fault_impact_t impact,
8820 fd.f_dip = dip;
8824 fd.f_oldstate = ddi_get_devstate(dip);
8829 if (ddi_get_eventcookie(dip, DDI_DEVI_FAULT_EVENT, &ec) !=
8833 (void) ndi_post_event(dip, dip, ec, &fd);
8837 i_ddi_devi_class(dev_info_t *dip)
8839 return (DEVI(dip)->devi_device_class);
8843 i_ddi_set_devi_class(dev_info_t *dip, char *devi_class, int flag)
8845 struct dev_info *devi = DEVI(dip);
8871 ddi_taskq_create(dev_info_t *dip, const char *name, int nthreads,
8878 if (dip == NULL)
8881 nodeid = ddi_get_instance(dip);
8887 ddi_driver_name(dip), name);
8997 ddi_quiesce_not_needed(dev_info_t *dip)
9008 ddi_quiesce_not_supported(dev_info_t *dip)
9047 ddi_cb_register(dev_info_t *dip, ddi_cb_flags_t flags, ddi_cb_func_t cbfunc,
9052 ASSERT(dip != NULL);
9063 if ((dip == NULL) || !DDI_CB_FLAG_VALID(flags) ||
9068 if (DEVI(dip)->devi_cb_p != NULL)
9073 cbp->cb_dip = dip;
9078 DEVI(dip)->devi_cb_p = cbp;
9082 i_ddi_irm_set_cb(dip, B_TRUE);
9084 *ret_hdlp = (ddi_cb_handle_t)&(DEVI(dip)->devi_cb_p);
9092 dev_info_t *dip;
9103 ((dip = cbp->cb_dip) == NULL))
9108 i_ddi_irm_set_cb(dip, B_FALSE);
9112 DEVI(dip)->devi_cb_p = NULL;
9202 * or LDI callbacks against this dip before setting the dip offline.
9205 set_infant_dip_offline(dev_info_t *dip, void *arg)
9209 ASSERT(dip);
9212 if (i_ddi_node_state(dip) >= DS_ATTACHED) {
9213 (void) ddi_pathname(dip, path);
9219 mutex_enter(&(DEVI(dip)->devi_lock));
9220 if (!DEVI_IS_DEVICE_OFFLINE(dip))
9221 DEVI_SET_DEVICE_OFFLINE(dip);
9222 mutex_exit(&(DEVI(dip)->devi_lock));
9233 dip_set_offline(dev_info_t *dip, void *arg)
9238 ASSERT(dip);
9247 if (e_ddi_offline_notify(dip) == DDI_FAILURE) {
9254 * that we failed to set a particular dip offline. This
9258 if (set_infant_dip_offline(dip, resp->path) == DDI_SUCCESS)
9263 e_ddi_offline_finalize(dip, end);
9278 branch_set_offline(dev_info_t *dip, char *path)
9285 if (e_ddi_offline_notify(dip) == DDI_FAILURE) {
9289 if (set_infant_dip_offline(dip, path) == DDI_SUCCESS)
9294 e_ddi_offline_finalize(dip, end);
9302 ndi_devi_enter(dip, &circ);
9303 ddi_walk_devs(ddi_get_child(dip), dip_set_offline, &res);
9304 ndi_devi_exit(dip, circ);
9317 dev_info_t *dip;
9357 dip = e_ddi_nodeid_to_dip(tnp->nodeid);
9358 if (dip != NULL) {
9362 ndi_rele_devi(dip);
9364 cmn_err(CE_WARN, "create_prom_branch: dip(%p) exists"
9365 " for nodeid 0x%x", (void *)dip, tnp->nodeid);
9368 dip = i_ddi_create_branch(ap->pdip, tnp->nodeid);
9376 if (dip && !exists) {
9377 e_ddi_branch_hold(dip);
9380 ASSERT(dip == NULL || e_ddi_branch_held(dip));
9387 if (dip == NULL || branch_set_offline(dip, path)
9394 ASSERT(ddi_get_parent(dip) == ap->pdip);
9399 int error = e_ddi_branch_configure(dip, &ap->fdip, 0);
9409 bp->devi_branch_callback(dip, bp->arg, 0);
9422 dev_info_t *dip;
9440 ndi_devi_alloc_sleep(pdip, (char *)noname, DEVI_SID_NODEID, &dip);
9441 rv = bp->create.sid_branch_create(dip, bp->arg, flags);
9447 " properties on devinfo node %p", (void *)dip);
9452 if (ddi_getlongprop_buf(DDI_DEV_T_ANY, dip,
9456 "no name property", (void *)dip);
9460 ASSERT(i_ddi_node_state(dip) == DS_PROTO);
9461 if (ndi_devi_set_nodename(dip, nbuf, 0) != NDI_SUCCESS) {
9463 " for devinfo node %p", nbuf, (void *)dip);
9472 (void) ndi_devi_bind_driver(dip, 0);
9477 ndi_devi_enter(dip, &circ);
9481 i = sid_node_create(dip, bp, NULL);
9489 * of dip's child. Subsequent walk behavior
9490 * is determined by rv returned by dip.
9493 ndi_devi_exit(dip, circ);
9515 *rdipp = dip;
9519 * Note that it is safe to set the dip offline without checking
9522 * This is because this node is a newly created dip with the parent busy
9523 * held, so no other thread can come in and attach this dip. A dip that
9528 * dip is attached. We assert below that the dip is not attached.
9530 ASSERT(i_ddi_node_state(dip) < DS_ATTACHED);
9532 ret = set_infant_dip_offline(dip, path);
9538 (void) ndi_devi_free(dip);
9652 "dip(%p) not held", (void *)rdip);
9792 cmn_err(CE_WARN, "e_ddi_%s_branch: dip(%p) not held",
9827 /* The dip still exists, so do a hold */
9861 visit_dip(dev_info_t *dip, void *arg)
9869 * A dip cannot be busy if its reference count is 0
9871 if ((ref = e_ddi_devi_holdcnt(dip)) == 0) {
9872 return (bsp->callback(dip, bsp->arg, 0));
9875 if (mod_hash_find(bsp->dv_hash, dip, (mod_hash_val_t *)&dvbusy))
9881 if (mod_hash_find(bsp->s_hash, dip, (mod_hash_val_t *)&sbusy))
9886 cmn_err(CE_WARN, "dip(%p): sopen = %lu, dvopen = %lu "
9887 "dip ref = %lu\n", (void *)dip, sbusy, dvbusy, ref);
9893 return (bsp->callback(dip, bsp->arg, dvbusy));
9900 dev_info_t *dip;
9908 * the snode and its associated dip from
9911 dip = NULL;
9912 count = spec_devi_open_count(sp, &dip);
9917 ASSERT(dip);
9919 if (mod_hash_remove(bsp->s_hash, dip, (mod_hash_val_t *)&sbusy))
9924 if (mod_hash_insert(bsp->s_hash, dip, (mod_hash_val_t)sbusy)) {
9925 cmn_err(CE_WARN, "%s: s_hash insert failed: dip=0x%p, "
9927 (void *)dip, sbusy);
9962 cmn_err(CE_WARN, "%s: dv_hash insert failed: dip=0x%p, "
9976 int (*callback)(dev_info_t *dip, void *arg, uint_t ref),