Lines Matching refs:chan
842 static void remove_all_class(sysevent_channel_descriptor_t *chan,
888 create_channel_registration(sysevent_channel_descriptor_t *chan,
906 c_list->cl_next = chan->scd_class_list_tbl[index];
907 chan->scd_class_list_tbl[index] = c_list;
913 free_channel_registration(sysevent_channel_descriptor_t *chan)
921 clist = chan->scd_class_list_tbl[i];
938 chan->scd_class_list_tbl[0] = NULL;
945 sysevent_channel_descriptor_t *chan, *chan_list;
967 chan = kmem_zalloc(sizeof (sysevent_channel_descriptor_t), KM_SLEEP);
968 chan->scd_channel_name = channel_name;
975 if ((chan->scd_subscriber_cache = vmem_create(channel_name, (void *)1,
978 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
981 if ((chan->scd_publisher_cache = vmem_create(channel_name, (void *)1,
984 vmem_destroy(chan->scd_subscriber_cache);
985 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
989 chan->scd_ref_cnt = 1;
991 (void) create_channel_registration(chan, EC_ALL, 0);
994 chan->scd_next = registered_channels[hash_index];
996 registered_channels[hash_index] = chan;
1007 sysevent_channel_descriptor_t *chan, *prev_chan;
1011 prev_chan = chan = registered_channels[hash_index];
1013 while (chan != NULL) {
1014 if (strcmp(chan->scd_channel_name, channel_name) == 0) {
1017 prev_chan = chan;
1018 chan = chan->scd_next;
1022 if (chan == NULL)
1025 chan->scd_ref_cnt--;
1026 if (chan->scd_ref_cnt > 0)
1029 free_channel_registration(chan);
1030 vmem_destroy(chan->scd_subscriber_cache);
1031 vmem_destroy(chan->scd_publisher_cache);
1032 kmem_free(chan->scd_channel_name,
1033 strlen(chan->scd_channel_name) + 1);
1034 if (registered_channels[hash_index] == chan)
1035 registered_channels[hash_index] = chan->scd_next;
1037 prev_chan->scd_next = chan->scd_next;
1038 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
1043 bind_common(sysevent_channel_descriptor_t *chan, int type)
1048 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_subscriber_cache, 1,
1052 chan->scd_subscriber_ids[id] = 1;
1054 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_publisher_cache, 1,
1058 chan->scd_publisher_ids[id] = 1;
1065 unbind_common(sysevent_channel_descriptor_t *chan, int type, id_t id)
1070 if (chan->scd_subscriber_ids[id] == 0)
1072 (void) remove_all_class(chan, id);
1073 chan->scd_subscriber_ids[id] = 0;
1074 vmem_free(chan->scd_subscriber_cache, (void *)(uintptr_t)id, 1);
1078 if (chan->scd_publisher_ids[id] == 0)
1080 chan->scd_publisher_ids[id] = 0;
1081 vmem_free(chan->scd_publisher_cache, (void *)(uintptr_t)id, 1);
1088 release_id(sysevent_channel_descriptor_t *chan, int type, id_t id)
1090 if (unbind_common(chan, type, id))
1091 close_channel(chan->scd_channel_name);
1143 find_class(sysevent_channel_descriptor_t *chan, char *class_name)
1147 c_list = chan->scd_class_list_tbl[CLASS_HASH(class_name)];
1158 remove_all_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id)
1166 c_list = chan->scd_class_list_tbl[i];
1179 remove_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id,
1186 remove_all_class(chan, sub_id);
1190 if ((c_list = find_class(chan, class_name)) == NULL) {
1202 insert_class(sysevent_channel_descriptor_t *chan, char *event_class,
1208 insert_subclass(chan->scd_class_list_tbl[0],
1217 if ((c_list = find_class(chan, event_class)) == NULL) {
1218 c_list = create_channel_registration(chan, event_class,
1229 add_registration(sysevent_channel_descriptor_t *chan, uint32_t sub_id,
1256 if (insert_class(chan, event_class, event_list, num_elem, sub_id) < 0) {
1270 get_registration(sysevent_channel_descriptor_t *chan, char *databuf,
1283 if ((clist = chan->scd_class_list_tbl[class_index]) == NULL) {
1348 sysevent_channel_descriptor_t *chan;
1374 chan = get_channel(kchannel);
1375 if (chan == NULL) {
1399 if ((kdata.ps_id = bind_common(chan, kdata.ps_type)) <= 0)
1403 (void) unbind_common(chan, kdata.ps_type, (id_t)kdata.ps_id);
1410 if (add_registration(chan, kdata.ps_id, databuf, bufsz) == -1)
1418 remove_class(chan, kdata.ps_id, databuf);
1422 release_id(chan, kdata.ps_type, kdata.ps_id);
1425 error = get_registration(chan, databuf,