Lines Matching refs:cpc
56 static void cpc_err(cpc_t *cpc, const char *fn, int subcode, ...);
57 static int cpc_set_valid(cpc_t *cpc, cpc_set_t *set);
58 static int cpc_lock(cpc_t *cpc);
59 static void cpc_unlock(cpc_t *cpc, int blocked);
60 static int cpc_valid_event(cpc_t *cpc, uint_t pic, const char *ev);
61 static int cpc_valid_attr(cpc_t *cpc, char *attr);
62 static void cpc_invalidate_pctx(cpc_t *cpc, pctx_t *pctx);
67 cpc_t *cpc; in cpc_open() local
100 if ((cpc = malloc(sizeof (cpc_t))) == NULL) { in cpc_open()
105 cpc->cpc_npic = syscall(SYS_cpc, CPC_NPIC, -1, 0, 0, 0); in cpc_open()
106 cpc->cpc_caps = syscall(SYS_cpc, CPC_CAPS, -1, 0, 0, 0); in cpc_open()
108 if (syscall(SYS_cpc, CPC_IMPL_NAME, -1, &cpc->cpc_cciname, 0, 0) != 0) in cpc_open()
110 if (syscall(SYS_cpc, CPC_CPUREF, -1, &cpc->cpc_cpuref, 0, 0) != 0) in cpc_open()
114 if ((cpc->cpc_attrlist = cpc_get_list(CPC_LIST_ATTRS, 0)) == NULL) { in cpc_open()
115 free(cpc); in cpc_open()
119 if ((cpc->cpc_evlist = malloc(cpc->cpc_npic * sizeof (char *))) == in cpc_open()
121 free(cpc->cpc_attrlist); in cpc_open()
122 free(cpc); in cpc_open()
126 for (i = 0; i < cpc->cpc_npic; i++) { in cpc_open()
127 if ((cpc->cpc_evlist[i] = cpc_get_list(CPC_LIST_EVENTS, i)) == in cpc_open()
131 if (i != cpc->cpc_npic) { in cpc_open()
133 free(cpc->cpc_evlist[j]); in cpc_open()
134 free(cpc->cpc_evlist); in cpc_open()
135 free(cpc->cpc_attrlist); in cpc_open()
136 free(cpc); in cpc_open()
140 cpc->cpc_sets = NULL; in cpc_open()
141 cpc->cpc_bufs = NULL; in cpc_open()
142 cpc->cpc_errfn = NULL; in cpc_open()
143 (void) mutex_init(&cpc->cpc_lock, USYNC_THREAD, NULL); in cpc_open()
146 return (cpc); in cpc_open()
157 cpc_close(cpc_t *cpc) in cpc_close() argument
159 while (cpc->cpc_sets != NULL) { in cpc_close()
160 if (cpc->cpc_sets->cs_state != CS_UNBOUND) in cpc_close()
161 (void) cpc_unbind(cpc, cpc->cpc_sets); in cpc_close()
162 (void) cpc_set_destroy(cpc, cpc->cpc_sets); in cpc_close()
165 while (cpc->cpc_bufs != NULL) in cpc_close()
166 (void) cpc_buf_destroy(cpc, cpc->cpc_bufs); in cpc_close()
168 free(cpc); in cpc_close()
176 cpc_terminate(cpc_t *cpc) in cpc_terminate() argument
181 sigblocked = cpc_lock(cpc); in cpc_terminate()
182 for (csp = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) { in cpc_terminate()
186 cpc_unlock(cpc, sigblocked); in cpc_terminate()
190 cpc_set_create(cpc_t *cpc) in cpc_set_create() argument
208 sigblocked = cpc_lock(cpc); in cpc_set_create()
209 set->cs_next = cpc->cpc_sets; in cpc_set_create()
210 cpc->cpc_sets = set; in cpc_set_create()
211 cpc_unlock(cpc, sigblocked); in cpc_set_create()
217 cpc_set_destroy(cpc_t *cpc, cpc_set_t *set) in cpc_set_destroy() argument
226 sigblocked = cpc_lock(cpc); in cpc_set_destroy()
227 for (csp = prev = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) { in cpc_set_destroy()
233 cpc_unlock(cpc, sigblocked); in cpc_set_destroy()
237 if (csp == cpc->cpc_sets) in cpc_set_destroy()
238 cpc->cpc_sets = csp->cs_next; in cpc_set_destroy()
240 cpc_unlock(cpc, sigblocked); in cpc_set_destroy()
243 (void) cpc_unbind(cpc, csp); in cpc_set_destroy()
270 cpc_set_add_request(cpc_t *cpc, cpc_set_t *set, const char *event, in cpc_set_add_request() argument
276 int npics = cpc_npic(cpc); in cpc_set_add_request()
278 if (cpc_set_valid(cpc, set) != 0 || set->cs_state != CS_UNBOUND) { in cpc_set_add_request()
284 if (cpc_valid_event(cpc, i, event)) in cpc_set_add_request()
287 cpc_err(cpc, fn, CPC_INVALID_EVENT); in cpc_set_add_request()
310 cpc_valid_attr(cpc, attrs[i].ca_name) == 0) { in cpc_set_add_request()
311 cpc_err(cpc, fn, CPC_INVALID_ATTRIBUTE); in cpc_set_add_request()
321 cpc_err(cpc, fn, CPC_INVALID_PICNUM); in cpc_set_add_request()
325 if (cpc_valid_event(cpc, attrs[i].ca_val, in cpc_set_add_request()
327 cpc_err(cpc, fn, CPC_PIC_NOT_CAPABLE); in cpc_set_add_request()
360 cpc_buf_create(cpc_t *cpc, cpc_set_t *set) in cpc_buf_create() argument
365 if (cpc_set_valid(cpc, set) != 0) { in cpc_buf_create()
384 sigblocked = cpc_lock(cpc); in cpc_buf_create()
385 buf->cb_next = cpc->cpc_bufs; in cpc_buf_create()
386 cpc->cpc_bufs = buf; in cpc_buf_create()
387 cpc_unlock(cpc, sigblocked); in cpc_buf_create()
393 cpc_buf_destroy(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_destroy() argument
401 sigblocked = cpc_lock(cpc); in cpc_buf_destroy()
402 for (cbp = prev = cpc->cpc_bufs; cbp != NULL; cbp = cbp->cb_next) { in cpc_buf_destroy()
408 cpc_unlock(cpc, sigblocked); in cpc_buf_destroy()
412 if (cbp == cpc->cpc_bufs) in cpc_buf_destroy()
413 cpc->cpc_bufs = cbp->cb_next; in cpc_buf_destroy()
416 cpc_unlock(cpc, sigblocked); in cpc_buf_destroy()
425 cpc_bind_curlwp(cpc_t *cpc, cpc_set_t *set, uint_t flags) in cpc_bind_curlwp() argument
452 cpc_err(cpc, "cpc_bind_curlwp", subcode); in cpc_bind_curlwp()
463 cpc_bind_pctx(cpc_t *cpc, pctx_t *pctx, id_t id, cpc_set_t *set, uint_t flags) in cpc_bind_pctx() argument
473 if (flags != 0 || cpc_set_valid(cpc, set) != 0 || set->cs_nreqs <= 0) { in cpc_bind_pctx()
483 ret = __pctx_cpc(pctx, cpc, CPC_BIND, id, packed_set, (void *)packsize, in cpc_bind_pctx()
493 cpc_err(cpc, "cpc_bind_pctx", subcode); in cpc_bind_pctx()
500 cpc_bind_cpu(cpc_t *cpc, processorid_t id, cpc_set_t *set, uint_t flags) in cpc_bind_cpu() argument
513 if (flags != 0 || cpc_set_valid(cpc, set) != 0 || set->cs_nreqs <= 0) { in cpc_bind_cpu()
519 cpc_err(cpc, fn, CPC_PBIND_FAILED); in cpc_bind_cpu()
556 cpc_err(cpc, fn, subcode); in cpc_bind_cpu()
571 cpc_request_preset(cpc_t *cpc, int index, uint64_t preset) in cpc_request_preset() argument
579 cpc_set_restart(cpc_t *cpc, cpc_set_t *set) in cpc_set_restart() argument
586 cpc_unbind(cpc_t *cpc, cpc_set_t *set) in cpc_unbind() argument
591 if (cpc_set_valid(cpc, set) != 0) { in cpc_unbind()
613 ret = __pctx_cpc(set->cs_pctx, cpc, CPC_RELE, in cpc_unbind()
630 cpc_set_sample(cpc_t *cpc, cpc_set_t *set, cpc_buf_t *buf) in cpc_set_sample() argument
655 return (__pctx_cpc(set->cs_pctx, cpc, CPC_SAMPLE, set->cs_id, in cpc_set_sample()
666 cpc_buf_sub(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *a, cpc_buf_t *b) in cpc_buf_sub() argument
683 cpc_buf_add(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *a, cpc_buf_t *b) in cpc_buf_add() argument
700 cpc_buf_copy(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *src) in cpc_buf_copy() argument
712 cpc_buf_zero(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_zero() argument
724 cpc_buf_get(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val) in cpc_buf_get() argument
733 cpc_buf_set(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t val) in cpc_buf_set() argument
742 cpc_buf_hrtime(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_hrtime() argument
749 cpc_buf_tick(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_tick() argument
782 cpc_walk_requests(cpc_t *cpc, cpc_set_t *set, void *arg, in cpc_walk_requests() argument
813 cpc_walk_events_impl(cpc_t *cpc, void *arg, in cpc_walk_events_impl() argument
820 int ncounters = cpc_npic(cpc); in cpc_walk_events_impl()
832 if ((list[i] = strdup(cpc->cpc_evlist[i])) == NULL) in cpc_walk_events_impl()
873 cpc_walk_events_all(cpc_t *cpc, void *arg, in cpc_walk_events_all() argument
876 cpc_walk_events_impl(cpc, arg, action, 0); in cpc_walk_events_all()
882 cpc_walk_generic_events_all(cpc_t *cpc, void *arg, in cpc_walk_generic_events_all() argument
885 cpc_walk_events_impl(cpc, arg, action, 1); in cpc_walk_generic_events_all()
890 cpc_walk_events_pic_impl(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_events_pic_impl() argument
898 if (picno >= cpc->cpc_npic) { in cpc_walk_events_pic_impl()
903 if ((list = strdup(cpc->cpc_evlist[picno])) == NULL) in cpc_walk_events_pic_impl()
937 cpc_walk_events_pic(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_events_pic() argument
940 cpc_walk_events_pic_impl(cpc, picno, arg, action, 0); in cpc_walk_events_pic()
945 cpc_walk_generic_events_pic(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_generic_events_pic() argument
948 cpc_walk_events_pic_impl(cpc, picno, arg, action, 1); in cpc_walk_generic_events_pic()
953 cpc_walk_attrs(cpc_t *cpc, void *arg, in cpc_walk_attrs() argument
960 if ((list = strdup(cpc->cpc_attrlist)) == NULL) in cpc_walk_attrs()
986 cpc_enable(cpc_t *cpc) in cpc_enable() argument
993 cpc_disable(cpc_t *cpc) in cpc_disable() argument
1000 cpc_npic(cpc_t *cpc) in cpc_npic() argument
1002 return (cpc->cpc_npic); in cpc_npic()
1007 cpc_caps(cpc_t *cpc) in cpc_caps() argument
1009 return (cpc->cpc_caps); in cpc_caps()
1013 cpc_cciname(cpc_t *cpc) in cpc_cciname() argument
1015 return (cpc->cpc_cciname); in cpc_cciname()
1019 cpc_cpuref(cpc_t *cpc) in cpc_cpuref() argument
1021 return (cpc->cpc_cpuref); in cpc_cpuref()
1025 cpc_seterrhndlr(cpc_t *cpc, cpc_errhndlr_t *fn) in cpc_seterrhndlr() argument
1027 cpc->cpc_errfn = fn; in cpc_seterrhndlr()
1051 cpc_err(cpc_t *cpc, const char *fn, int subcode, ...) in cpc_err() argument
1072 if (cpc->cpc_errfn != NULL) in cpc_err()
1073 cpc->cpc_errfn(fn, subcode, str, ap); in cpc_err()
1093 cpc_invalidate_pctx(cpc_t *cpc, pctx_t *pctx) in cpc_invalidate_pctx() argument
1098 sigblocked = cpc_lock(cpc); in cpc_invalidate_pctx()
1099 for (set = cpc->cpc_sets; set != NULL; set = set->cs_next) in cpc_invalidate_pctx()
1102 cpc_unlock(cpc, sigblocked); in cpc_invalidate_pctx()
1111 cpc_set_valid(cpc_t *cpc, cpc_set_t *set) in cpc_set_valid() argument
1116 sigblocked = cpc_lock(cpc); in cpc_set_valid()
1117 for (csp = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) in cpc_set_valid()
1120 cpc_unlock(cpc, sigblocked); in cpc_set_valid()
1127 cpc_lock(cpc_t *cpc) in cpc_lock() argument
1130 (void) mutex_lock(&cpc->cpc_lock); in cpc_lock()
1135 cpc_unlock(cpc_t *cpc, int sigblocked) in cpc_unlock() argument
1137 (void) mutex_unlock(&cpc->cpc_lock); in cpc_unlock()
1163 cpc_valid_event(cpc_t *cpc, uint_t pic, const char *ev) in cpc_valid_event() argument
1170 cpc_walk_events_pic(cpc, pic, &pr, ev_walker); in cpc_valid_event()
1174 cpc_walk_generic_events_pic(cpc, pic, &pr, ev_walker); in cpc_valid_event()
1200 cpc_valid_attr(cpc_t *cpc, char *attr) in cpc_valid_attr() argument
1205 cpc_walk_attrs(cpc, &pr, at_walker); in cpc_valid_attr()