Lines Matching refs:cpc

55 static void cpc_err(cpc_t *cpc, const char *fn, int subcode, ...);
56 static int cpc_set_valid(cpc_t *cpc, cpc_set_t *set);
57 static int cpc_lock(cpc_t *cpc);
58 static void cpc_unlock(cpc_t *cpc, int blocked);
59 static int cpc_valid_event(cpc_t *cpc, uint_t pic, const char *ev);
60 static int cpc_valid_attr(cpc_t *cpc, char *attr);
61 static void cpc_invalidate_pctx(cpc_t *cpc, pctx_t *pctx);
66 cpc_t *cpc; in cpc_open() local
99 if ((cpc = malloc(sizeof (cpc_t))) == NULL) { in cpc_open()
104 cpc->cpc_npic = syscall(SYS_cpc, CPC_NPIC, -1, 0, 0, 0); in cpc_open()
105 cpc->cpc_caps = syscall(SYS_cpc, CPC_CAPS, -1, 0, 0, 0); in cpc_open()
107 if (syscall(SYS_cpc, CPC_IMPL_NAME, -1, &cpc->cpc_cciname, 0, 0) != 0) in cpc_open()
109 if (syscall(SYS_cpc, CPC_CPUREF, -1, &cpc->cpc_cpuref, 0, 0) != 0) in cpc_open()
113 if ((cpc->cpc_attrlist = cpc_get_list(CPC_LIST_ATTRS, 0)) == NULL) { in cpc_open()
114 free(cpc); in cpc_open()
118 if ((cpc->cpc_evlist = malloc(cpc->cpc_npic * sizeof (char *))) == in cpc_open()
120 free(cpc->cpc_attrlist); in cpc_open()
121 free(cpc); in cpc_open()
125 for (i = 0; i < cpc->cpc_npic; i++) { in cpc_open()
126 if ((cpc->cpc_evlist[i] = cpc_get_list(CPC_LIST_EVENTS, i)) == in cpc_open()
130 if (i != cpc->cpc_npic) { in cpc_open()
132 free(cpc->cpc_evlist[j]); in cpc_open()
133 free(cpc->cpc_evlist); in cpc_open()
134 free(cpc->cpc_attrlist); in cpc_open()
135 free(cpc); in cpc_open()
139 cpc->cpc_sets = NULL; in cpc_open()
140 cpc->cpc_bufs = NULL; in cpc_open()
141 cpc->cpc_errfn = NULL; in cpc_open()
142 (void) mutex_init(&cpc->cpc_lock, USYNC_THREAD, NULL); in cpc_open()
145 return (cpc); in cpc_open()
156 cpc_close(cpc_t *cpc) in cpc_close() argument
158 while (cpc->cpc_sets != NULL) { in cpc_close()
159 if (cpc->cpc_sets->cs_state != CS_UNBOUND) in cpc_close()
160 (void) cpc_unbind(cpc, cpc->cpc_sets); in cpc_close()
161 (void) cpc_set_destroy(cpc, cpc->cpc_sets); in cpc_close()
164 while (cpc->cpc_bufs != NULL) in cpc_close()
165 (void) cpc_buf_destroy(cpc, cpc->cpc_bufs); in cpc_close()
167 free(cpc); in cpc_close()
175 cpc_terminate(cpc_t *cpc) in cpc_terminate() argument
180 sigblocked = cpc_lock(cpc); in cpc_terminate()
181 for (csp = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) { in cpc_terminate()
185 cpc_unlock(cpc, sigblocked); in cpc_terminate()
189 cpc_set_create(cpc_t *cpc) in cpc_set_create() argument
207 sigblocked = cpc_lock(cpc); in cpc_set_create()
208 set->cs_next = cpc->cpc_sets; in cpc_set_create()
209 cpc->cpc_sets = set; in cpc_set_create()
210 cpc_unlock(cpc, sigblocked); in cpc_set_create()
216 cpc_set_destroy(cpc_t *cpc, cpc_set_t *set) in cpc_set_destroy() argument
225 sigblocked = cpc_lock(cpc); in cpc_set_destroy()
226 for (csp = prev = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) { in cpc_set_destroy()
232 cpc_unlock(cpc, sigblocked); in cpc_set_destroy()
236 if (csp == cpc->cpc_sets) in cpc_set_destroy()
237 cpc->cpc_sets = csp->cs_next; in cpc_set_destroy()
239 cpc_unlock(cpc, sigblocked); in cpc_set_destroy()
242 (void) cpc_unbind(cpc, csp); in cpc_set_destroy()
269 cpc_set_add_request(cpc_t *cpc, cpc_set_t *set, const char *event, in cpc_set_add_request() argument
275 int npics = cpc_npic(cpc); in cpc_set_add_request()
277 if (cpc_set_valid(cpc, set) != 0 || set->cs_state != CS_UNBOUND) { in cpc_set_add_request()
283 if (cpc_valid_event(cpc, i, event)) in cpc_set_add_request()
286 cpc_err(cpc, fn, CPC_INVALID_EVENT); in cpc_set_add_request()
309 cpc_valid_attr(cpc, attrs[i].ca_name) == 0) { in cpc_set_add_request()
310 cpc_err(cpc, fn, CPC_INVALID_ATTRIBUTE); in cpc_set_add_request()
320 cpc_err(cpc, fn, CPC_INVALID_PICNUM); in cpc_set_add_request()
324 if (cpc_valid_event(cpc, attrs[i].ca_val, in cpc_set_add_request()
326 cpc_err(cpc, fn, CPC_PIC_NOT_CAPABLE); in cpc_set_add_request()
359 cpc_buf_create(cpc_t *cpc, cpc_set_t *set) in cpc_buf_create() argument
364 if (cpc_set_valid(cpc, set) != 0) { in cpc_buf_create()
383 sigblocked = cpc_lock(cpc); in cpc_buf_create()
384 buf->cb_next = cpc->cpc_bufs; in cpc_buf_create()
385 cpc->cpc_bufs = buf; in cpc_buf_create()
386 cpc_unlock(cpc, sigblocked); in cpc_buf_create()
392 cpc_buf_destroy(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_destroy() argument
400 sigblocked = cpc_lock(cpc); in cpc_buf_destroy()
401 for (cbp = prev = cpc->cpc_bufs; cbp != NULL; cbp = cbp->cb_next) { in cpc_buf_destroy()
407 cpc_unlock(cpc, sigblocked); in cpc_buf_destroy()
411 if (cbp == cpc->cpc_bufs) in cpc_buf_destroy()
412 cpc->cpc_bufs = cbp->cb_next; in cpc_buf_destroy()
415 cpc_unlock(cpc, sigblocked); in cpc_buf_destroy()
424 cpc_bind_curlwp(cpc_t *cpc, cpc_set_t *set, uint_t flags) in cpc_bind_curlwp() argument
451 cpc_err(cpc, "cpc_bind_curlwp", subcode); in cpc_bind_curlwp()
462 cpc_bind_pctx(cpc_t *cpc, pctx_t *pctx, id_t id, cpc_set_t *set, uint_t flags) in cpc_bind_pctx() argument
472 if (flags != 0 || cpc_set_valid(cpc, set) != 0 || set->cs_nreqs <= 0) { in cpc_bind_pctx()
482 ret = __pctx_cpc(pctx, cpc, CPC_BIND, id, packed_set, (void *)packsize, in cpc_bind_pctx()
492 cpc_err(cpc, "cpc_bind_pctx", subcode); in cpc_bind_pctx()
499 cpc_bind_cpu(cpc_t *cpc, processorid_t id, cpc_set_t *set, uint_t flags) in cpc_bind_cpu() argument
512 if (flags != 0 || cpc_set_valid(cpc, set) != 0 || set->cs_nreqs <= 0) { in cpc_bind_cpu()
518 cpc_err(cpc, fn, CPC_PBIND_FAILED); in cpc_bind_cpu()
555 cpc_err(cpc, fn, subcode); in cpc_bind_cpu()
570 cpc_request_preset(cpc_t *cpc, int index, uint64_t preset) in cpc_request_preset() argument
578 cpc_set_restart(cpc_t *cpc, cpc_set_t *set) in cpc_set_restart() argument
585 cpc_unbind(cpc_t *cpc, cpc_set_t *set) in cpc_unbind() argument
590 if (cpc_set_valid(cpc, set) != 0) { in cpc_unbind()
612 ret = __pctx_cpc(set->cs_pctx, cpc, CPC_RELE, in cpc_unbind()
629 cpc_set_sample(cpc_t *cpc, cpc_set_t *set, cpc_buf_t *buf) in cpc_set_sample() argument
654 return (__pctx_cpc(set->cs_pctx, cpc, CPC_SAMPLE, set->cs_id, in cpc_set_sample()
665 cpc_buf_sub(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *a, cpc_buf_t *b) in cpc_buf_sub() argument
682 cpc_buf_add(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *a, cpc_buf_t *b) in cpc_buf_add() argument
699 cpc_buf_copy(cpc_t *cpc, cpc_buf_t *ds, cpc_buf_t *src) in cpc_buf_copy() argument
711 cpc_buf_zero(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_zero() argument
723 cpc_buf_get(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t *val) in cpc_buf_get() argument
732 cpc_buf_set(cpc_t *cpc, cpc_buf_t *buf, int index, uint64_t val) in cpc_buf_set() argument
741 cpc_buf_hrtime(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_hrtime() argument
748 cpc_buf_tick(cpc_t *cpc, cpc_buf_t *buf) in cpc_buf_tick() argument
781 cpc_walk_requests(cpc_t *cpc, cpc_set_t *set, void *arg, in cpc_walk_requests() argument
812 cpc_walk_events_impl(cpc_t *cpc, void *arg, in cpc_walk_events_impl() argument
819 int ncounters = cpc_npic(cpc); in cpc_walk_events_impl()
831 if ((list[i] = strdup(cpc->cpc_evlist[i])) == NULL) in cpc_walk_events_impl()
872 cpc_walk_events_all(cpc_t *cpc, void *arg, in cpc_walk_events_all() argument
875 cpc_walk_events_impl(cpc, arg, action, 0); in cpc_walk_events_all()
881 cpc_walk_generic_events_all(cpc_t *cpc, void *arg, in cpc_walk_generic_events_all() argument
884 cpc_walk_events_impl(cpc, arg, action, 1); in cpc_walk_generic_events_all()
889 cpc_walk_events_pic_impl(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_events_pic_impl() argument
897 if (picno >= cpc->cpc_npic) { in cpc_walk_events_pic_impl()
902 if ((list = strdup(cpc->cpc_evlist[picno])) == NULL) in cpc_walk_events_pic_impl()
936 cpc_walk_events_pic(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_events_pic() argument
939 cpc_walk_events_pic_impl(cpc, picno, arg, action, 0); in cpc_walk_events_pic()
944 cpc_walk_generic_events_pic(cpc_t *cpc, uint_t picno, void *arg, in cpc_walk_generic_events_pic() argument
947 cpc_walk_events_pic_impl(cpc, picno, arg, action, 1); in cpc_walk_generic_events_pic()
952 cpc_walk_attrs(cpc_t *cpc, void *arg, in cpc_walk_attrs() argument
959 if ((list = strdup(cpc->cpc_attrlist)) == NULL) in cpc_walk_attrs()
985 cpc_enable(cpc_t *cpc) in cpc_enable() argument
992 cpc_disable(cpc_t *cpc) in cpc_disable() argument
999 cpc_npic(cpc_t *cpc) in cpc_npic() argument
1001 return (cpc->cpc_npic); in cpc_npic()
1006 cpc_caps(cpc_t *cpc) in cpc_caps() argument
1008 return (cpc->cpc_caps); in cpc_caps()
1012 cpc_cciname(cpc_t *cpc) in cpc_cciname() argument
1014 return (cpc->cpc_cciname); in cpc_cciname()
1018 cpc_cpuref(cpc_t *cpc) in cpc_cpuref() argument
1020 return (cpc->cpc_cpuref); in cpc_cpuref()
1024 cpc_seterrhndlr(cpc_t *cpc, cpc_errhndlr_t *fn) in cpc_seterrhndlr() argument
1026 cpc->cpc_errfn = fn; in cpc_seterrhndlr()
1050 cpc_err(cpc_t *cpc, const char *fn, int subcode, ...) in cpc_err() argument
1071 if (cpc->cpc_errfn != NULL) in cpc_err()
1072 cpc->cpc_errfn(fn, subcode, str, ap); in cpc_err()
1092 cpc_invalidate_pctx(cpc_t *cpc, pctx_t *pctx) in cpc_invalidate_pctx() argument
1097 sigblocked = cpc_lock(cpc); in cpc_invalidate_pctx()
1098 for (set = cpc->cpc_sets; set != NULL; set = set->cs_next) in cpc_invalidate_pctx()
1101 cpc_unlock(cpc, sigblocked); in cpc_invalidate_pctx()
1110 cpc_set_valid(cpc_t *cpc, cpc_set_t *set) in cpc_set_valid() argument
1115 sigblocked = cpc_lock(cpc); in cpc_set_valid()
1116 for (csp = cpc->cpc_sets; csp != NULL; csp = csp->cs_next) in cpc_set_valid()
1119 cpc_unlock(cpc, sigblocked); in cpc_set_valid()
1126 cpc_lock(cpc_t *cpc) in cpc_lock() argument
1129 (void) mutex_lock(&cpc->cpc_lock); in cpc_lock()
1134 cpc_unlock(cpc_t *cpc, int sigblocked) in cpc_unlock() argument
1136 (void) mutex_unlock(&cpc->cpc_lock); in cpc_unlock()
1162 cpc_valid_event(cpc_t *cpc, uint_t pic, const char *ev) in cpc_valid_event() argument
1169 cpc_walk_events_pic(cpc, pic, &pr, ev_walker); in cpc_valid_event()
1173 cpc_walk_generic_events_pic(cpc, pic, &pr, ev_walker); in cpc_valid_event()
1199 cpc_valid_attr(cpc_t *cpc, char *attr) in cpc_valid_attr() argument
1204 cpc_walk_attrs(cpc, &pr, at_walker); in cpc_valid_attr()