Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/hwpmc/hwpmc_core.c
Show First 20 Lines • Show All 744 Lines • ▼ Show 20 Lines | iap_allocate_pmc(int cpu, int ri, struct pmc *pm, | ||||
uint32_t caps; | uint32_t caps; | ||||
const struct pmc_md_iap_op_pmcallocate *iap; | const struct pmc_md_iap_op_pmcallocate *iap; | ||||
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | ||||
("[core,%d] illegal CPU %d", __LINE__, cpu)); | ("[core,%d] illegal CPU %d", __LINE__, cpu)); | ||||
KASSERT(ri >= 0 && ri < core_iap_npmc, | KASSERT(ri >= 0 && ri < core_iap_npmc, | ||||
("[core,%d] illegal row-index value %d", __LINE__, ri)); | ("[core,%d] illegal row-index value %d", __LINE__, ri)); | ||||
if (a->pm_class != PMC_CLASS_IAP) | |||||
return (EINVAL); | |||||
/* check requested capabilities */ | /* check requested capabilities */ | ||||
caps = a->pm_caps; | caps = a->pm_caps; | ||||
if ((IAP_PMC_CAPS & caps) != caps) | if ((IAP_PMC_CAPS & caps) != caps) | ||||
return (EPERM); | return (EPERM); | ||||
iap = &a->pm_md.pm_iap; | iap = &a->pm_md.pm_iap; | ||||
ev = IAP_EVSEL_GET(iap->pm_iap_config); | ev = IAP_EVSEL_GET(iap->pm_iap_config); | ||||
switch (core_cputype) { | switch (core_cputype) { | ||||
▲ Show 20 Lines • Show All 584 Lines • Show Last 20 Lines |