本文整理汇总了C++中clockevents_config_and_register函数的典型用法代码示例。如果您正苦于以下问题:C++ clockevents_config_and_register函数的具体用法?C++ clockevents_config_and_register怎么用?C++ clockevents_config_and_register使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了clockevents_config_and_register函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: generic_timer_setup
/*
* Setup the local clock events for a CPU.
*/
static int __cpuinit generic_timer_setup(struct clock_event_device *clk)
{
struct clock_event_device **this_cpu_clk;
pr_info("[ca7_timer]%s entry\n", __func__);
generic_timer_calibrate_rate();
write_cntp_ctl(0x0);
clk->name = "generic_timer";
clk->features = CLOCK_EVT_FEAT_ONESHOT;
clk->rating = 350;
clk->set_mode = generic_timer_set_mode;
clk->set_next_event = generic_timer_set_next_event;
clk->irq = timer_ppi;
this_cpu_clk = __this_cpu_ptr(timer_evt);
*this_cpu_clk = clk;
clockevents_config_and_register(clk, generic_timer_rate,
0xf, 0x7fffffff);
enable_percpu_irq(clk->irq, 0);
return 0;
}
开发者ID:Duiesel,项目名称:ZTE_Blade_L5,代码行数:29,代码来源:ca7_timer.c
示例2: rk_timer_init_clockevent
static __cpuinit int rk_timer_init_clockevent(struct clock_event_device *ce, unsigned int cpu)
{
struct irqaction *irq = &timer.ce_irq[cpu];
void __iomem *base = timer.ce_base[cpu];
if (!base)
return 0;
ce->name = timer.ce_name[cpu];
ce->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
ce->set_next_event = rk_timer_set_next_event;
ce->set_mode = rk_timer_set_mode;
ce->irq = irq->irq;
ce->cpumask = cpumask_of(cpu);
writel_relaxed(1, base + TIMER_INT_STATUS);
rk_timer_disable(base);
irq->dev_id = ce;
irq_set_affinity(irq->irq, cpumask_of(cpu));
setup_irq(irq->irq, irq);
clockevents_config_and_register(ce, 24000000, 0xF, 0xFFFFFFFF);
return 0;
}
开发者ID:Avasz,项目名称:D33_KK_Kernel,代码行数:26,代码来源:rk_timer.c
示例3: integrator_clockevent_init
static int integrator_clockevent_init(unsigned long inrate,
void __iomem *base, int irq)
{
unsigned long rate = inrate;
unsigned int ctrl = 0;
int ret;
clkevt_base = base;
/* Calculate and program a divisor */
if (rate > 0x100000 * HZ) {
rate /= 256;
ctrl |= TIMER_CTRL_DIV256;
} else if (rate > 0x10000 * HZ) {
rate /= 16;
ctrl |= TIMER_CTRL_DIV16;
}
timer_reload = rate / HZ;
writel(ctrl, clkevt_base + TIMER_CTRL);
ret = setup_irq(irq, &integrator_timer_irq);
if (ret)
return ret;
clockevents_config_and_register(&integrator_clockevent,
rate,
1,
0xffffU);
return 0;
}
开发者ID:ezequielgarcia,项目名称:linux,代码行数:29,代码来源:timer-integrator-ap.c
示例4: __sp804_clockevents_init
void __init __sp804_clockevents_init(void __iomem *base, unsigned int irq, struct clk *clk, const char *name)
{
struct clock_event_device *evt = &sp804_clockevent;
long rate;
if (!clk)
clk = clk_get_sys("sp804", name);
if (IS_ERR(clk)) {
pr_err("sp804: %s clock not found: %d\n", name,
(int)PTR_ERR(clk));
return;
}
rate = sp804_get_clock_rate(clk);
if (rate < 0)
return;
clkevt_base = base;
clkevt_reload = DIV_ROUND_CLOSEST(rate, HZ);
evt->name = name;
evt->irq = irq;
evt->cpumask = cpu_possible_mask;
writel(0, base + TIMER_CTRL);
setup_irq(irq, &sp804_timer_irq);
clockevents_config_and_register(evt, rate, 0xf, 0xffffffff);
}
开发者ID:mildrock,项目名称:overlay_plane_display,代码行数:28,代码来源:timer-sp.c
示例5: _clps711x_clkevt_init
static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base,
unsigned int irq)
{
struct clock_event_device *clkevt;
unsigned long rate;
if (!irq)
return -EINVAL;
if (!base)
return -ENOMEM;
if (IS_ERR(clock))
return PTR_ERR(clock);
clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL);
if (!clkevt)
return -ENOMEM;
rate = clk_get_rate(clock);
/* Set Timer prescaler */
writew(DIV_ROUND_CLOSEST(rate, HZ), base);
clkevt->name = "clps711x-clockevent";
clkevt->rating = 300;
clkevt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_C3STOP;
clkevt->cpumask = cpumask_of(0);
clockevents_config_and_register(clkevt, HZ, 0, 0);
return request_irq(irq, clps711x_timer_interrupt, IRQF_TIMER,
"clps711x-timer", clkevt);
}
开发者ID:020gzh,项目名称:linux,代码行数:31,代码来源:clps711x-timer.c
示例6: twd_timer_setup
/*
* Setup the local clock events for a CPU.
*/
void __cpuinit twd_timer_setup(struct clock_event_device *clk)
{
if (!twd_clk)
twd_clk = twd_get_clock();
if (!IS_ERR_OR_NULL(twd_clk))
twd_timer_rate = clk_get_rate(twd_clk);
else
twd_calibrate_rate();
clk->name = "local_timer";
clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_C3STOP;
clk->rating = 350;
clk->set_mode = twd_set_mode;
clk->set_next_event = twd_set_next_event;
__get_cpu_var(twd_ce) = clk;
clockevents_config_and_register(clk, twd_timer_rate,
0xf, 0xffffffff);
/* Make sure our local interrupt controller has this enabled */
gic_enable_ppi(clk->irq);
}
开发者ID:Borkata,项目名称:adam-nv-3.1,代码行数:28,代码来源:smp_twd.c
示例7: mmp_percpu_timer_setup
static int __cpuinit mmp_percpu_timer_setup(struct clock_event_device *clk)
{
u32 cpuid = hard_smp_processor_id();
clk->features = CLOCK_EVT_FEAT_ONESHOT;
clk->name = "apb_percpu_timer";
clk->rating = 300;
clk->irq = irq_map[cpuid].irq;
clk->cpumask = cpumask_of(cpuid);
clk->set_mode = percpu_timer_set_mode;
clk->set_next_event = percpu_timer_set_next_event;
clk->set_mode(CLOCK_EVT_MODE_SHUTDOWN, NULL);
irq_map[cpuid].irq_act.dev_id = clk;
irq_set_affinity(clk->irq, clk->cpumask);
clockevents_config_and_register(clk, CLOCK_TICK_RATE_32KHZ,
MIN_DELTA, MAX_DELTA);
enable_irq(clk->irq);
/* the broadcast clockevent is no longer needed */
if (cpuid == 0) {
remove_irq(ckevt.irq, &timer_irq);
#ifndef CONFIG_TZ_HYPERVISOR
/* reset APB and functional domain */
__raw_writel(APBC_RST, APBC_PXA1088_TIMERS2);
#endif /* CONFIG_TZ_HYPERVISOR */
}
return 0;
}
开发者ID:C457,项目名称:android_kernel_samsung_t110,代码行数:35,代码来源:time-apb.c
示例8: msm_local_timer_setup
static int msm_local_timer_setup(struct clock_event_device *evt)
{
int cpu = smp_processor_id();
int err;
evt->irq = msm_timer_irq;
evt->name = "msm_timer";
evt->features = CLOCK_EVT_FEAT_ONESHOT;
evt->rating = 200;
evt->set_mode = msm_timer_set_mode;
evt->set_next_event = msm_timer_set_next_event;
evt->cpumask = cpumask_of(cpu);
clockevents_config_and_register(evt, GPT_HZ, 4, 0xffffffff);
if (msm_timer_has_ppi) {
enable_percpu_irq(evt->irq, IRQ_TYPE_EDGE_RISING);
} else {
err = request_irq(evt->irq, msm_timer_interrupt,
IRQF_TIMER | IRQF_NOBALANCING |
IRQF_TRIGGER_RISING, "gp_timer", evt);
if (err)
pr_err("request_irq failed\n");
}
return 0;
}
开发者ID:0x000000FF,项目名称:edison-linux,代码行数:27,代码来源:qcom-timer.c
示例9: msm_local_timer_starting_cpu
static int msm_local_timer_starting_cpu(unsigned int cpu)
{
struct clock_event_device *evt = per_cpu_ptr(msm_evt, cpu);
int err;
evt->irq = msm_timer_irq;
evt->name = "msm_timer";
evt->features = CLOCK_EVT_FEAT_ONESHOT;
evt->rating = 200;
evt->set_state_shutdown = msm_timer_shutdown;
evt->set_state_oneshot = msm_timer_shutdown;
evt->tick_resume = msm_timer_shutdown;
evt->set_next_event = msm_timer_set_next_event;
evt->cpumask = cpumask_of(cpu);
clockevents_config_and_register(evt, GPT_HZ, 4, 0xffffffff);
if (msm_timer_has_ppi) {
enable_percpu_irq(evt->irq, IRQ_TYPE_EDGE_RISING);
} else {
err = request_irq(evt->irq, msm_timer_interrupt,
IRQF_TIMER | IRQF_NOBALANCING |
IRQF_TRIGGER_RISING, "gp_timer", evt);
if (err)
pr_err("request_irq failed\n");
}
return 0;
}
开发者ID:AK101111,项目名称:linux,代码行数:29,代码来源:qcom-timer.c
示例10: armada_370_xp_timer_setup
/*
* Setup the local clock events for a CPU.
*/
static int armada_370_xp_timer_setup(struct clock_event_device *evt)
{
u32 u;
int cpu = smp_processor_id();
u = readl(local_base + TIMER_CTRL_OFF);
if (timer25Mhz)
writel(u | TIMER0_25MHZ, local_base + TIMER_CTRL_OFF);
else
writel(u & ~TIMER0_25MHZ, local_base + TIMER_CTRL_OFF);
evt->name = "armada_370_xp_per_cpu_tick",
evt->features = CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_PERIODIC;
evt->shift = 32,
evt->rating = 300,
evt->set_next_event = armada_370_xp_clkevt_next_event,
evt->set_mode = armada_370_xp_clkevt_mode,
evt->irq = armada_370_xp_clkevt_irq;
evt->cpumask = cpumask_of(cpu);
clockevents_config_and_register(evt, timer_clk, 1, 0xfffffffe);
enable_percpu_irq(evt->irq, 0);
return 0;
}
开发者ID:andrewgreen5610,项目名称:linux,代码行数:29,代码来源:time-armada-370-xp.c
示例11: jz_clockevent_init
static void jz_clockevent_init(struct jz_timerevent *evt_dev) {
struct clock_event_device *cd = &evt_dev->clkevt;
struct clk *ext_clk = clk_get(NULL,"ext1");
spin_lock_init(&evt_dev->lock);
evt_dev->rate = clk_get_rate(ext_clk) / CLKEVENT_DIV;
clk_put(ext_clk);
stoptimer();
tcu_writel(CH_TCSR(CLKEVENT_CH),CSRDIV(CLKEVENT_DIV) | CSR_EXT_EN);
evt_dev->evt_action.handler = jz_timer_interrupt;
evt_dev->evt_action.thread_fn = NULL;
evt_dev->evt_action.flags = IRQF_DISABLED | IRQF_TIMER;
evt_dev->evt_action.name = "jz-timerirq";
evt_dev->evt_action.dev_id = (void*)evt_dev;
if(setup_irq(IRQ_TCU1, &evt_dev->evt_action) < 0) {
pr_err("timer request irq error\n");
BUG();
}
memset(cd,0,sizeof(struct clock_event_device));
cd->name = "jz-clockenvent";
cd->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC;
cd->shift = 10;
cd->rating = 400;
cd->set_mode = jz_set_mode;
cd->set_next_event = jz_set_next_event;
cd->irq = IRQ_TCU1;
cd->cpumask = cpumask_of(0);
clockevents_config_and_register(cd,evt_dev->rate,4,65536);
printk("clockevents_config_and_register success.\n");
}
开发者ID:piet-delaney,项目名称:KERNEL-NPM801,代码行数:33,代码来源:timer.c
示例12: armada_370_xp_timer_starting_cpu
/*
* Setup the local clock events for a CPU.
*/
static int armada_370_xp_timer_starting_cpu(unsigned int cpu)
{
struct clock_event_device *evt = per_cpu_ptr(armada_370_xp_evt, cpu);
u32 clr = 0, set = 0;
if (timer25Mhz)
set = TIMER0_25MHZ;
else
clr = TIMER0_25MHZ;
local_timer_ctrl_clrset(clr, set);
evt->name = "armada_370_xp_per_cpu_tick",
evt->features = CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_PERIODIC;
evt->shift = 32,
evt->rating = 300,
evt->set_next_event = armada_370_xp_clkevt_next_event,
evt->set_state_shutdown = armada_370_xp_clkevt_shutdown;
evt->set_state_periodic = armada_370_xp_clkevt_set_periodic;
evt->set_state_oneshot = armada_370_xp_clkevt_shutdown;
evt->tick_resume = armada_370_xp_clkevt_shutdown;
evt->irq = armada_370_xp_clkevt_irq;
evt->cpumask = cpumask_of(cpu);
clockevents_config_and_register(evt, timer_clk, 1, 0xfffffffe);
enable_percpu_irq(evt->irq, 0);
return 0;
}
开发者ID:AshishNamdev,项目名称:linux,代码行数:32,代码来源:time-armada-370-xp.c
示例13: at91rm9200_timer_init
/*
* ST (system timer) module supports both clockevents and clocksource.
*/
void __init at91rm9200_timer_init(void)
{
/* For device tree enabled device: initialize here */
of_at91rm9200_st_init();
/* Disable all timer interrupts, and clear any pending ones */
at91_st_write(AT91_ST_IDR,
AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS);
at91_st_read(AT91_ST_SR);
/* Make IRQs happen for the system timer */
setup_irq(at91rm9200_timer_irq.irq, &at91rm9200_timer_irq);
/* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used
* directly for the clocksource and all clockevents, after adjusting
* its prescaler from the 1 Hz default.
*/
at91_st_write(AT91_ST_RTMR, 1);
/* Setup timer clockevent, with minimum of two ticks (important!!) */
clkevt.cpumask = cpumask_of(0);
clockevents_config_and_register(&clkevt, AT91_SLOW_CLOCK,
2, AT91_ST_ALMV);
/* register clocksource */
clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK);
}
开发者ID:383530895,项目名称:linux,代码行数:30,代码来源:at91rm9200_time.c
示例14: arc_clockevent_setup
/*
* clockevent setup for boot CPU
*/
static void __init arc_clockevent_setup(struct device_node *node)
{
struct clock_event_device *evt = this_cpu_ptr(&arc_clockevent_device);
int ret;
register_cpu_notifier(&arc_timer_cpu_nb);
arc_timer_irq = irq_of_parse_and_map(node, 0);
if (arc_timer_irq <= 0)
panic("clockevent: missing irq");
ret = arc_get_timer_clk(node);
if (ret)
panic("clockevent: missing clk");
evt->irq = arc_timer_irq;
evt->cpumask = cpumask_of(smp_processor_id());
clockevents_config_and_register(evt, arc_timer_freq,
0, ARC_TIMER_MAX);
/* Needs apriori irq_set_percpu_devid() done in intc map function */
ret = request_percpu_irq(arc_timer_irq, timer_irq_handler,
"Timer0 (per-cpu-tick)", evt);
if (ret)
panic("clockevent: unable to request irq\n");
enable_percpu_irq(arc_timer_irq, 0);
}
开发者ID:1314cc,项目名称:linux,代码行数:31,代码来源:time.c
示例15: armada_370_xp_timer_setup
/*
* Setup the local clock events for a CPU.
*/
static int armada_370_xp_timer_setup(struct clock_event_device *evt)
{
u32 clr = 0, set = 0;
int cpu = smp_processor_id();
if (timer25Mhz)
set = TIMER0_25MHZ;
else
clr = TIMER0_25MHZ;
local_timer_ctrl_clrset(clr, set);
evt->name = "armada_370_xp_per_cpu_tick",
evt->features = CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_PERIODIC;
evt->shift = 32,
evt->rating = 300,
evt->set_next_event = armada_370_xp_clkevt_next_event,
evt->set_mode = armada_370_xp_clkevt_mode,
evt->irq = armada_370_xp_clkevt_irq;
evt->cpumask = cpumask_of(cpu);
clockevents_config_and_register(evt, timer_clk, 1, 0xfffffffe);
enable_percpu_irq(evt->irq, 0);
return 0;
}
开发者ID:0x000000FF,项目名称:edison-linux,代码行数:29,代码来源:time-armada-370-xp.c
示例16: arch_timer_setup
static int __cpuinit arch_timer_setup(struct clock_event_device *clk)
{
clk->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP;
clk->name = "arch_sys_timer";
clk->rating = 450;
if (arch_timer_use_virtual) {
clk->irq = arch_timer_ppi[VIRT_PPI];
clk->set_mode = arch_timer_set_mode_virt;
clk->set_next_event = arch_timer_set_next_event_virt;
} else {
clk->irq = arch_timer_ppi[PHYS_SECURE_PPI];
clk->set_mode = arch_timer_set_mode_phys;
clk->set_next_event = arch_timer_set_next_event_phys;
}
clk->cpumask = cpumask_of(smp_processor_id());
clk->set_mode(CLOCK_EVT_MODE_SHUTDOWN, NULL);
clockevents_config_and_register(clk, arch_timer_rate,
0xf, 0x7fffffff);
if (arch_timer_use_virtual)
enable_percpu_irq(arch_timer_ppi[VIRT_PPI], 0);
else {
enable_percpu_irq(arch_timer_ppi[PHYS_SECURE_PPI], 0);
if (arch_timer_ppi[PHYS_NONSECURE_PPI])
enable_percpu_irq(arch_timer_ppi[PHYS_NONSECURE_PPI], 0);
}
arch_counter_set_user_access();
return 0;
}
开发者ID:0x000000FF,项目名称:Linux4Edison,代码行数:34,代码来源:arm_arch_timer.c
示例17: shmac_clockevent_init
static void __init shmac_clockevent_init(struct device_node *np)
{
void __iomem *base;
u32 freq;
int irq;
base = of_iomap(np, 0);
if (!base)
panic("Can't remap registers");
if (of_property_read_u32(np, "clock-frequency", &freq))
panic("Can't read clock-frequency");
ticks_per_jiffy = DIV_ROUND_UP(freq, HZ);
irq = irq_of_parse_and_map(np, DEFAULT_TIMER);
if (irq <= 0)
panic("Can't parse IRQ");
if (setup_irq(irq, &shmac_clock_event_irq))
panic("Can't set up timer IRQ\n");
clock_event_ddata.base = base;
clockevents_config_and_register(&clock_event_ddata.evtdev, freq, 0xf, 0xffff);
pr_info("SHMAC clockevent init done\n");
}
开发者ID:HEATHlabs,项目名称:ravlinux,代码行数:28,代码来源:shmac_timer.c
示例18: sh_tmu_register_clockevent
static void sh_tmu_register_clockevent(struct sh_tmu_priv *p,
char *name, unsigned long rating)
{
struct clock_event_device *ced = &p->ced;
int ret;
memset(ced, 0, sizeof(*ced));
ced->name = name;
ced->features = CLOCK_EVT_FEAT_PERIODIC;
ced->features |= CLOCK_EVT_FEAT_ONESHOT;
ced->rating = rating;
ced->cpumask = cpumask_of(0);
ced->set_next_event = sh_tmu_clock_event_next;
ced->set_mode = sh_tmu_clock_event_mode;
ced->suspend = sh_tmu_clock_event_suspend;
ced->resume = sh_tmu_clock_event_resume;
dev_info(&p->pdev->dev, "used for clock events\n");
clockevents_config_and_register(ced, 1, 0x300, 0xffffffff);
ret = setup_irq(p->irqaction.irq, &p->irqaction);
if (ret) {
dev_err(&p->pdev->dev, "failed to request irq %d\n",
p->irqaction.irq);
return;
}
}
开发者ID:7799,项目名称:linux,代码行数:29,代码来源:sh_tmu.c
示例19: omap2_gp_clockevent_init
static void __init omap2_gp_clockevent_init(int gptimer_id,
const char *fck_source,
const char *property)
{
int res;
clkev.id = gptimer_id;
clkev.errata = omap_dm_timer_get_errata();
/*
* For clock-event timers we never read the timer counter and
* so we are not impacted by errata i103 and i767. Therefore,
* we can safely ignore this errata for clock-event timers.
*/
__omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767);
res = omap_dm_timer_init_one(&clkev, fck_source, property,
&clockevent_gpt.name, OMAP_TIMER_POSTED);
BUG_ON(res);
omap2_gp_timer_irq.dev_id = &clkev;
setup_irq(clkev.irq, &omap2_gp_timer_irq);
__omap_dm_timer_int_enable(&clkev, OMAP_TIMER_INT_OVERFLOW);
clockevent_gpt.cpumask = cpu_possible_mask;
clockevent_gpt.irq = omap_dm_timer_get_irq(&clkev);
clockevents_config_and_register(&clockevent_gpt, clkev.rate,
3, /* Timer internal resynch latency */
0xffffffff);
pr_info("OMAP clockevent source: %s at %lu Hz\n", clockevent_gpt.name,
clkev.rate);
}
开发者ID:21cnbao,项目名称:linux,代码行数:34,代码来源:timer.c
示例20: twd_timer_setup
static int __cpuinit twd_timer_setup(struct clock_event_device *clk)
{
struct clock_event_device **this_cpu_clk;
if (!twd_clk)
twd_clk = twd_get_clock();
if (!IS_ERR_OR_NULL(twd_clk))
twd_timer_rate = clk_get_rate(twd_clk);
else
twd_calibrate_rate();
__raw_writel(0, twd_base + TWD_TIMER_CONTROL);
clk->name = "local_timer";
clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_C3STOP;
clk->rating = 350;
clk->set_mode = twd_set_mode;
clk->set_next_event = twd_set_next_event;
clk->irq = twd_ppi;
this_cpu_clk = __this_cpu_ptr(twd_evt);
*this_cpu_clk = clk;
clockevents_config_and_register(clk, twd_timer_rate,
0xf, 0xffffffff);
enable_percpu_irq(clk->irq, 0);
return 0;
}
开发者ID:Blackburn29,项目名称:PsycoKernel,代码行数:31,代码来源:smp_twd.c
注:本文中的clockevents_config_and_register函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论