Lines Matching defs:chan

823 static void remove_all_class(sysevent_channel_descriptor_t *chan,
869 create_channel_registration(sysevent_channel_descriptor_t *chan,
887 c_list->cl_next = chan->scd_class_list_tbl[index];
888 chan->scd_class_list_tbl[index] = c_list;
894 free_channel_registration(sysevent_channel_descriptor_t *chan)
902 clist = chan->scd_class_list_tbl[i];
919 chan->scd_class_list_tbl[0] = NULL;
926 sysevent_channel_descriptor_t *chan, *chan_list;
948 chan = kmem_zalloc(sizeof (sysevent_channel_descriptor_t), KM_SLEEP);
949 chan->scd_channel_name = channel_name;
956 if ((chan->scd_subscriber_cache = vmem_create(channel_name, (void *)1,
959 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
962 if ((chan->scd_publisher_cache = vmem_create(channel_name, (void *)1,
965 vmem_destroy(chan->scd_subscriber_cache);
966 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
970 chan->scd_ref_cnt = 1;
972 (void) create_channel_registration(chan, EC_ALL, 0);
975 chan->scd_next = registered_channels[hash_index];
977 registered_channels[hash_index] = chan;
988 sysevent_channel_descriptor_t *chan, *prev_chan;
992 prev_chan = chan = registered_channels[hash_index];
994 while (chan != NULL) {
995 if (strcmp(chan->scd_channel_name, channel_name) == 0) {
998 prev_chan = chan;
999 chan = chan->scd_next;
1003 if (chan == NULL)
1006 chan->scd_ref_cnt--;
1007 if (chan->scd_ref_cnt > 0)
1010 free_channel_registration(chan);
1011 vmem_destroy(chan->scd_subscriber_cache);
1012 vmem_destroy(chan->scd_publisher_cache);
1013 kmem_free(chan->scd_channel_name,
1014 strlen(chan->scd_channel_name) + 1);
1015 if (registered_channels[hash_index] == chan)
1016 registered_channels[hash_index] = chan->scd_next;
1018 prev_chan->scd_next = chan->scd_next;
1019 kmem_free(chan, sizeof (sysevent_channel_descriptor_t));
1024 bind_common(sysevent_channel_descriptor_t *chan, int type)
1029 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_subscriber_cache, 1,
1033 chan->scd_subscriber_ids[id] = 1;
1035 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_publisher_cache, 1,
1039 chan->scd_publisher_ids[id] = 1;
1046 unbind_common(sysevent_channel_descriptor_t *chan, int type, id_t id)
1051 if (chan->scd_subscriber_ids[id] == 0)
1053 (void) remove_all_class(chan, id);
1054 chan->scd_subscriber_ids[id] = 0;
1055 vmem_free(chan->scd_subscriber_cache, (void *)(uintptr_t)id, 1);
1059 if (chan->scd_publisher_ids[id] == 0)
1061 chan->scd_publisher_ids[id] = 0;
1062 vmem_free(chan->scd_publisher_cache, (void *)(uintptr_t)id, 1);
1069 release_id(sysevent_channel_descriptor_t *chan, int type, id_t id)
1071 if (unbind_common(chan, type, id))
1072 close_channel(chan->scd_channel_name);
1124 find_class(sysevent_channel_descriptor_t *chan, char *class_name)
1128 c_list = chan->scd_class_list_tbl[CLASS_HASH(class_name)];
1139 remove_all_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id)
1147 c_list = chan->scd_class_list_tbl[i];
1160 remove_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id,
1167 remove_all_class(chan, sub_id);
1171 if ((c_list = find_class(chan, class_name)) == NULL) {
1183 insert_class(sysevent_channel_descriptor_t *chan, char *event_class,
1189 insert_subclass(chan->scd_class_list_tbl[0],
1198 if ((c_list = find_class(chan, event_class)) == NULL) {
1199 c_list = create_channel_registration(chan, event_class,
1210 add_registration(sysevent_channel_descriptor_t *chan, uint32_t sub_id,
1237 if (insert_class(chan, event_class, event_list, num_elem, sub_id) < 0) {
1251 get_registration(sysevent_channel_descriptor_t *chan, char *databuf,
1264 if ((clist = chan->scd_class_list_tbl[class_index]) == NULL) {
1329 sysevent_channel_descriptor_t *chan;
1355 chan = get_channel(kchannel);
1356 if (chan == NULL) {
1380 if ((kdata.ps_id = bind_common(chan, kdata.ps_type)) <= 0)
1384 (void) unbind_common(chan, kdata.ps_type, (id_t)kdata.ps_id);
1391 if (add_registration(chan, kdata.ps_id, databuf, bufsz) == -1)
1399 remove_class(chan, kdata.ps_id, databuf);
1403 release_id(chan, kdata.ps_type, kdata.ps_id);
1406 error = get_registration(chan, databuf,