365                                 break;
 366                         }
 367                 }
 368                 if (tdip == NULL) {
 369                         UNLOCK_DEV_OPS(dmp);
 370                         return (inst);
 371                 }
 372         }
 373         UNLOCK_DEV_OPS(dmp);
 374         return (-1);
 375 }
 376 
 377 static int
 378 pseudonex_ctl(dev_info_t *dip, dev_info_t *rdip, ddi_ctl_enum_t ctlop,
 379     void *arg, void *result)
 380 {
 381         switch (ctlop) {
 382         case DDI_CTLOPS_REPORTDEV:
 383                 if (rdip == NULL)
 384                         return (DDI_FAILURE);
 385                 cmn_err(CE_CONT, "?pseudo-device: %s%d\n",
 386                     ddi_driver_name(rdip), ddi_get_instance(rdip));
 387                 return (DDI_SUCCESS);
 388 
 389         case DDI_CTLOPS_INITCHILD:
 390         {
 391                 char name[12];  /* enough for a decimal integer */
 392                 int instance = -1;
 393                 dev_info_t *child = (dev_info_t *)arg;
 394                 const char *childname = ddi_driver_name(child);
 395                 char **childlist;
 396                 uint_t nelems;
 397                 int auto_assign = 0;
 398 
 399                 /*
 400                  * If this pseudonex node has a valid-children property,
 401                  * then that acts as an access control list for children
 402                  * allowed to attach beneath this node.  Honor it.
 403                  */
 404                 if (ddi_prop_lookup_string_array(DDI_DEV_T_ANY, dip,
 405                     DDI_PROP_DONTPASS, "valid-children", &childlist,
 406                     &nelems) == DDI_PROP_SUCCESS) {
 
 | 
 
 
 365                                 break;
 366                         }
 367                 }
 368                 if (tdip == NULL) {
 369                         UNLOCK_DEV_OPS(dmp);
 370                         return (inst);
 371                 }
 372         }
 373         UNLOCK_DEV_OPS(dmp);
 374         return (-1);
 375 }
 376 
 377 static int
 378 pseudonex_ctl(dev_info_t *dip, dev_info_t *rdip, ddi_ctl_enum_t ctlop,
 379     void *arg, void *result)
 380 {
 381         switch (ctlop) {
 382         case DDI_CTLOPS_REPORTDEV:
 383                 if (rdip == NULL)
 384                         return (DDI_FAILURE);
 385                 return (DDI_SUCCESS);
 386 
 387         case DDI_CTLOPS_INITCHILD:
 388         {
 389                 char name[12];  /* enough for a decimal integer */
 390                 int instance = -1;
 391                 dev_info_t *child = (dev_info_t *)arg;
 392                 const char *childname = ddi_driver_name(child);
 393                 char **childlist;
 394                 uint_t nelems;
 395                 int auto_assign = 0;
 396 
 397                 /*
 398                  * If this pseudonex node has a valid-children property,
 399                  * then that acts as an access control list for children
 400                  * allowed to attach beneath this node.  Honor it.
 401                  */
 402                 if (ddi_prop_lookup_string_array(DDI_DEV_T_ANY, dip,
 403                     DDI_PROP_DONTPASS, "valid-children", &childlist,
 404                     &nelems) == DDI_PROP_SUCCESS) {
 
 |