Lines Matching refs:chan

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