Lines Matching refs:chan

821 static void remove_all_class(sysevent_channel_descriptor_t *chan,
867 create_channel_registration(sysevent_channel_descriptor_t *chan, in create_channel_registration() argument
885 c_list->cl_next = chan->scd_class_list_tbl[index]; in create_channel_registration()
886 chan->scd_class_list_tbl[index] = c_list; in create_channel_registration()
892 free_channel_registration(sysevent_channel_descriptor_t *chan) in free_channel_registration() argument
900 clist = chan->scd_class_list_tbl[i]; in free_channel_registration()
917 chan->scd_class_list_tbl[0] = NULL; in free_channel_registration()
924 sysevent_channel_descriptor_t *chan, *chan_list; in open_channel() local
946 chan = kmem_zalloc(sizeof (sysevent_channel_descriptor_t), KM_SLEEP); in open_channel()
947 chan->scd_channel_name = channel_name; in open_channel()
954 if ((chan->scd_subscriber_cache = vmem_create(channel_name, (void *)1, in open_channel()
957 kmem_free(chan, sizeof (sysevent_channel_descriptor_t)); in open_channel()
960 if ((chan->scd_publisher_cache = vmem_create(channel_name, (void *)1, in open_channel()
963 vmem_destroy(chan->scd_subscriber_cache); in open_channel()
964 kmem_free(chan, sizeof (sysevent_channel_descriptor_t)); in open_channel()
968 chan->scd_ref_cnt = 1; in open_channel()
970 (void) create_channel_registration(chan, EC_ALL, 0); in open_channel()
973 chan->scd_next = registered_channels[hash_index]; in open_channel()
975 registered_channels[hash_index] = chan; in open_channel()
986 sysevent_channel_descriptor_t *chan, *prev_chan; in close_channel() local
990 prev_chan = chan = registered_channels[hash_index]; in close_channel()
992 while (chan != NULL) { in close_channel()
993 if (strcmp(chan->scd_channel_name, channel_name) == 0) { in close_channel()
996 prev_chan = chan; in close_channel()
997 chan = chan->scd_next; in close_channel()
1001 if (chan == NULL) in close_channel()
1004 chan->scd_ref_cnt--; in close_channel()
1005 if (chan->scd_ref_cnt > 0) in close_channel()
1008 free_channel_registration(chan); in close_channel()
1009 vmem_destroy(chan->scd_subscriber_cache); in close_channel()
1010 vmem_destroy(chan->scd_publisher_cache); in close_channel()
1011 kmem_free(chan->scd_channel_name, in close_channel()
1012 strlen(chan->scd_channel_name) + 1); in close_channel()
1013 if (registered_channels[hash_index] == chan) in close_channel()
1014 registered_channels[hash_index] = chan->scd_next; in close_channel()
1016 prev_chan->scd_next = chan->scd_next; in close_channel()
1017 kmem_free(chan, sizeof (sysevent_channel_descriptor_t)); in close_channel()
1022 bind_common(sysevent_channel_descriptor_t *chan, int type) in bind_common() argument
1027 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_subscriber_cache, 1, in bind_common()
1031 chan->scd_subscriber_ids[id] = 1; in bind_common()
1033 id = (id_t)(uintptr_t)vmem_alloc(chan->scd_publisher_cache, 1, in bind_common()
1037 chan->scd_publisher_ids[id] = 1; in bind_common()
1044 unbind_common(sysevent_channel_descriptor_t *chan, int type, id_t id) in unbind_common() argument
1049 if (chan->scd_subscriber_ids[id] == 0) in unbind_common()
1051 (void) remove_all_class(chan, id); in unbind_common()
1052 chan->scd_subscriber_ids[id] = 0; in unbind_common()
1053 vmem_free(chan->scd_subscriber_cache, (void *)(uintptr_t)id, 1); in unbind_common()
1057 if (chan->scd_publisher_ids[id] == 0) in unbind_common()
1059 chan->scd_publisher_ids[id] = 0; in unbind_common()
1060 vmem_free(chan->scd_publisher_cache, (void *)(uintptr_t)id, 1); in unbind_common()
1067 release_id(sysevent_channel_descriptor_t *chan, int type, id_t id) in release_id() argument
1069 if (unbind_common(chan, type, id)) in release_id()
1070 close_channel(chan->scd_channel_name); in release_id()
1122 find_class(sysevent_channel_descriptor_t *chan, char *class_name) in find_class() argument
1126 c_list = chan->scd_class_list_tbl[CLASS_HASH(class_name)]; in find_class()
1137 remove_all_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id) in remove_all_class() argument
1145 c_list = chan->scd_class_list_tbl[i]; in remove_all_class()
1158 remove_class(sysevent_channel_descriptor_t *chan, uint32_t sub_id, in remove_class() argument
1165 remove_all_class(chan, sub_id); in remove_class()
1169 if ((c_list = find_class(chan, class_name)) == NULL) { in remove_class()
1181 insert_class(sysevent_channel_descriptor_t *chan, char *event_class, in insert_class() argument
1187 insert_subclass(chan->scd_class_list_tbl[0], in insert_class()
1196 if ((c_list = find_class(chan, event_class)) == NULL) { in insert_class()
1197 c_list = create_channel_registration(chan, event_class, in insert_class()
1208 add_registration(sysevent_channel_descriptor_t *chan, uint32_t sub_id, in add_registration() argument
1235 if (insert_class(chan, event_class, event_list, num_elem, sub_id) < 0) { in add_registration()
1249 get_registration(sysevent_channel_descriptor_t *chan, char *databuf, in get_registration() argument
1262 if ((clist = chan->scd_class_list_tbl[class_index]) == NULL) { in get_registration()
1327 sysevent_channel_descriptor_t *chan; in log_sysevent_register() local
1353 chan = get_channel(kchannel); in log_sysevent_register()
1354 if (chan == NULL) { in log_sysevent_register()
1378 if ((kdata.ps_id = bind_common(chan, kdata.ps_type)) <= 0) in log_sysevent_register()
1382 (void) unbind_common(chan, kdata.ps_type, (id_t)kdata.ps_id); in log_sysevent_register()
1389 if (add_registration(chan, kdata.ps_id, databuf, bufsz) == -1) in log_sysevent_register()
1397 remove_class(chan, kdata.ps_id, databuf); in log_sysevent_register()
1401 release_id(chan, kdata.ps_type, kdata.ps_id); in log_sysevent_register()
1404 error = get_registration(chan, databuf, in log_sysevent_register()