int init_hw_perf_events()

in kernel/perf_event.c [1198:1279]


int init_hw_perf_events(void)
{
	csky_pmu.hw_events = alloc_percpu_gfp(struct pmu_hw_events,
					      GFP_KERNEL);
	if (!csky_pmu.hw_events) {
		pr_info("failed to allocate per-cpu PMU data.\n");
		return -ENOMEM;
	}

	csky_pmu.pmu = (struct pmu) {
		.pmu_enable	= csky_pmu_enable,
		.pmu_disable	= csky_pmu_disable,
		.event_init	= csky_pmu_event_init,
		.add		= csky_pmu_add,
		.del		= csky_pmu_del,
		.start		= csky_pmu_start,
		.stop		= csky_pmu_stop,
		.read		= csky_pmu_read,
	};

	memset((void *)hw_raw_read_mapping, 0,
		sizeof(hw_raw_read_mapping[CSKY_PMU_MAX_EVENTS]));

	hw_raw_read_mapping[0x1]  = csky_pmu_read_cc;
	hw_raw_read_mapping[0x2]  = csky_pmu_read_ic;
	hw_raw_read_mapping[0x3]  = csky_pmu_read_icac;
	hw_raw_read_mapping[0x4]  = csky_pmu_read_icmc;
	hw_raw_read_mapping[0x5]  = csky_pmu_read_dcac;
	hw_raw_read_mapping[0x6]  = csky_pmu_read_dcmc;
	hw_raw_read_mapping[0x7]  = csky_pmu_read_l2ac;
	hw_raw_read_mapping[0x8]  = csky_pmu_read_l2mc;
	hw_raw_read_mapping[0xa]  = csky_pmu_read_iutlbmc;
	hw_raw_read_mapping[0xb]  = csky_pmu_read_dutlbmc;
	hw_raw_read_mapping[0xc]  = csky_pmu_read_jtlbmc;
	hw_raw_read_mapping[0xd]  = csky_pmu_read_softc;
	hw_raw_read_mapping[0xe]  = csky_pmu_read_cbmc;
	hw_raw_read_mapping[0xf]  = csky_pmu_read_cbic;
	hw_raw_read_mapping[0x10] = csky_pmu_read_ibmc;
	hw_raw_read_mapping[0x11] = csky_pmu_read_ibic;
	hw_raw_read_mapping[0x12] = csky_pmu_read_lsfc;
	hw_raw_read_mapping[0x13] = csky_pmu_read_sic;
	hw_raw_read_mapping[0x14] = csky_pmu_read_dcrac;
	hw_raw_read_mapping[0x15] = csky_pmu_read_dcrmc;
	hw_raw_read_mapping[0x16] = csky_pmu_read_dcwac;
	hw_raw_read_mapping[0x17] = csky_pmu_read_dcwmc;
	hw_raw_read_mapping[0x18] = csky_pmu_read_l2rac;
	hw_raw_read_mapping[0x19] = csky_pmu_read_l2rmc;
	hw_raw_read_mapping[0x1a] = csky_pmu_read_l2wac;
	hw_raw_read_mapping[0x1b] = csky_pmu_read_l2wmc;

	memset((void *)hw_raw_write_mapping, 0,
		sizeof(hw_raw_write_mapping[CSKY_PMU_MAX_EVENTS]));

	hw_raw_write_mapping[0x1]  = csky_pmu_write_cc;
	hw_raw_write_mapping[0x2]  = csky_pmu_write_ic;
	hw_raw_write_mapping[0x3]  = csky_pmu_write_icac;
	hw_raw_write_mapping[0x4]  = csky_pmu_write_icmc;
	hw_raw_write_mapping[0x5]  = csky_pmu_write_dcac;
	hw_raw_write_mapping[0x6]  = csky_pmu_write_dcmc;
	hw_raw_write_mapping[0x7]  = csky_pmu_write_l2ac;
	hw_raw_write_mapping[0x8]  = csky_pmu_write_l2mc;
	hw_raw_write_mapping[0xa]  = csky_pmu_write_iutlbmc;
	hw_raw_write_mapping[0xb]  = csky_pmu_write_dutlbmc;
	hw_raw_write_mapping[0xc]  = csky_pmu_write_jtlbmc;
	hw_raw_write_mapping[0xd]  = csky_pmu_write_softc;
	hw_raw_write_mapping[0xe]  = csky_pmu_write_cbmc;
	hw_raw_write_mapping[0xf]  = csky_pmu_write_cbic;
	hw_raw_write_mapping[0x10] = csky_pmu_write_ibmc;
	hw_raw_write_mapping[0x11] = csky_pmu_write_ibic;
	hw_raw_write_mapping[0x12] = csky_pmu_write_lsfc;
	hw_raw_write_mapping[0x13] = csky_pmu_write_sic;
	hw_raw_write_mapping[0x14] = csky_pmu_write_dcrac;
	hw_raw_write_mapping[0x15] = csky_pmu_write_dcrmc;
	hw_raw_write_mapping[0x16] = csky_pmu_write_dcwac;
	hw_raw_write_mapping[0x17] = csky_pmu_write_dcwmc;
	hw_raw_write_mapping[0x18] = csky_pmu_write_l2rac;
	hw_raw_write_mapping[0x19] = csky_pmu_write_l2rmc;
	hw_raw_write_mapping[0x1a] = csky_pmu_write_l2wac;
	hw_raw_write_mapping[0x1b] = csky_pmu_write_l2wmc;

	return 0;
}