5521 sysevent_attr_list_t *ev_attr_list = NULL;
5522
5523 /*
5524 * only log ddi_remove_minor_node() calls outside the scope
5525 * of attach/detach reconfigurations and when the dip is
5526 * still initialized.
5527 */
5528 if (DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip) ||
5529 (i_ddi_node_state(dip) < DS_INITIALIZED)) {
5530 return (DDI_SUCCESS);
5531 }
5532
5533 i_ddi_di_cache_invalidate();
5534
5535 ev = sysevent_alloc(EC_DEVFS, ESC_DEVFS_MINOR_REMOVE, EP_DDI, SE_SLEEP);
5536 if (ev == NULL) {
5537 return (DDI_SUCCESS);
5538 }
5539
5540 pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP);
5541 if (pathname == NULL) {
5542 sysevent_free(ev);
5543 return (DDI_SUCCESS);
5544 }
5545
5546 (void) ddi_pathname(dip, pathname);
5547 ASSERT(strlen(pathname));
5548 se_val.value_type = SE_DATA_TYPE_STRING;
5549 se_val.value.sv_string = pathname;
5550 if (sysevent_add_attr(&ev_attr_list, DEVFS_PATHNAME,
5551 &se_val, SE_SLEEP) != 0) {
5552 kmem_free(pathname, MAXPATHLEN);
5553 sysevent_free(ev);
5554 return (DDI_SUCCESS);
5555 }
5556
5557 kmem_free(pathname, MAXPATHLEN);
5558
5559 /*
5560 * allow for NULL minor names
5561 */
5562 if (minor_name != NULL) {
5563 se_val.value.sv_string = minor_name;
5564 if (sysevent_add_attr(&ev_attr_list, DEVFS_MINOR_NAME,
7779 /*FALLTHRU*/
7780 case DEVID_ENCAP:
7781 if (nbytes == 0)
7782 return (DDI_FAILURE);
7783 if (id == NULL)
7784 return (DDI_FAILURE);
7785 break;
7786 case DEVID_FAB:
7787 if (nbytes != 0)
7788 return (DDI_FAILURE);
7789 if (id != NULL)
7790 return (DDI_FAILURE);
7791 nbytes = sizeof (int) +
7792 sizeof (struct timeval32) + sizeof (short);
7793 sz += nbytes;
7794 break;
7795 default:
7796 return (DDI_FAILURE);
7797 }
7798
7799 if ((i_devid = kmem_zalloc(sz, KM_SLEEP)) == NULL)
7800 return (DDI_FAILURE);
7801
7802 i_devid->did_magic_hi = DEVID_MAGIC_MSB;
7803 i_devid->did_magic_lo = DEVID_MAGIC_LSB;
7804 i_devid->did_rev_hi = DEVID_REV_MSB;
7805 i_devid->did_rev_lo = DEVID_REV_LSB;
7806 DEVID_FORMTYPE(i_devid, devid_type);
7807 DEVID_FORMLEN(i_devid, nbytes);
7808
7809 /* Fill in driver name hint */
7810 driver_name = ddi_driver_name(dip);
7811 driver_len = strlen(driver_name);
7812 if (driver_len > DEVID_HINT_SIZE) {
7813 /* Pick up last four characters of driver name */
7814 driver_name += driver_len - DEVID_HINT_SIZE;
7815 driver_len = DEVID_HINT_SIZE;
7816 }
7817
7818 bcopy(driver_name, i_devid->did_driver, driver_len);
7819
7820 /* Fill in id field */
|
5521 sysevent_attr_list_t *ev_attr_list = NULL;
5522
5523 /*
5524 * only log ddi_remove_minor_node() calls outside the scope
5525 * of attach/detach reconfigurations and when the dip is
5526 * still initialized.
5527 */
5528 if (DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip) ||
5529 (i_ddi_node_state(dip) < DS_INITIALIZED)) {
5530 return (DDI_SUCCESS);
5531 }
5532
5533 i_ddi_di_cache_invalidate();
5534
5535 ev = sysevent_alloc(EC_DEVFS, ESC_DEVFS_MINOR_REMOVE, EP_DDI, SE_SLEEP);
5536 if (ev == NULL) {
5537 return (DDI_SUCCESS);
5538 }
5539
5540 pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP);
5541
5542 (void) ddi_pathname(dip, pathname);
5543 ASSERT(strlen(pathname));
5544 se_val.value_type = SE_DATA_TYPE_STRING;
5545 se_val.value.sv_string = pathname;
5546 if (sysevent_add_attr(&ev_attr_list, DEVFS_PATHNAME,
5547 &se_val, SE_SLEEP) != 0) {
5548 kmem_free(pathname, MAXPATHLEN);
5549 sysevent_free(ev);
5550 return (DDI_SUCCESS);
5551 }
5552
5553 kmem_free(pathname, MAXPATHLEN);
5554
5555 /*
5556 * allow for NULL minor names
5557 */
5558 if (minor_name != NULL) {
5559 se_val.value.sv_string = minor_name;
5560 if (sysevent_add_attr(&ev_attr_list, DEVFS_MINOR_NAME,
7775 /*FALLTHRU*/
7776 case DEVID_ENCAP:
7777 if (nbytes == 0)
7778 return (DDI_FAILURE);
7779 if (id == NULL)
7780 return (DDI_FAILURE);
7781 break;
7782 case DEVID_FAB:
7783 if (nbytes != 0)
7784 return (DDI_FAILURE);
7785 if (id != NULL)
7786 return (DDI_FAILURE);
7787 nbytes = sizeof (int) +
7788 sizeof (struct timeval32) + sizeof (short);
7789 sz += nbytes;
7790 break;
7791 default:
7792 return (DDI_FAILURE);
7793 }
7794
7795 i_devid = kmem_zalloc(sz, KM_SLEEP);
7796
7797 i_devid->did_magic_hi = DEVID_MAGIC_MSB;
7798 i_devid->did_magic_lo = DEVID_MAGIC_LSB;
7799 i_devid->did_rev_hi = DEVID_REV_MSB;
7800 i_devid->did_rev_lo = DEVID_REV_LSB;
7801 DEVID_FORMTYPE(i_devid, devid_type);
7802 DEVID_FORMLEN(i_devid, nbytes);
7803
7804 /* Fill in driver name hint */
7805 driver_name = ddi_driver_name(dip);
7806 driver_len = strlen(driver_name);
7807 if (driver_len > DEVID_HINT_SIZE) {
7808 /* Pick up last four characters of driver name */
7809 driver_name += driver_len - DEVID_HINT_SIZE;
7810 driver_len = DEVID_HINT_SIZE;
7811 }
7812
7813 bcopy(driver_name, i_devid->did_driver, driver_len);
7814
7815 /* Fill in id field */
|