本文整理汇总了C++中CLOCKSOURCE_MASK函数的典型用法代码示例。如果您正苦于以下问题:C++ CLOCKSOURCE_MASK函数的具体用法?C++ CLOCKSOURCE_MASK怎么用?C++ CLOCKSOURCE_MASK使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CLOCKSOURCE_MASK函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CLOCKSOURCE_MASK
return count;
}
static struct clock_event_device clockevent_gptimer = {
.name = "gpt_event_1",
.features = CLOCK_EVT_FEAT_ONESHOT,
.shift = 32,
.set_next_event = gptimer_set_next_event,
.set_mode = gptimer_set_mode
};
static struct clocksource clksrc_gptimer = {
.name = "gpt_source_2",
.rating = 200,
.read = gptimer_clksrc_read,
.mask = CLOCKSOURCE_MASK(32), /* Although Kona timers have 64 bit counters,
To avail all the four channels of HUB_TIMER
the match register is compared with 32 bit value
and to make everything in sync, the Linux framework
is informed that CS timer is 32 bit.
*/
.shift = 16, /* Fix shift as 16 and calculate mult based on this during init */
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void __init gptimer_clockevents_init(void)
{
clockevent_gptimer.mult = div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC,
clockevent_gptimer.shift);
clockevent_gptimer.max_delta_ns =
示例2: cksrc_dc21285_disable
*CSR_TIMER2_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_DIV16;
return 0;
}
static void cksrc_dc21285_disable(struct clocksource *cs)
{
*CSR_TIMER2_CNTL = 0;
}
static struct clocksource cksrc_dc21285 = {
.name = "dc21285_timer2",
.rating = 200,
.read = cksrc_dc21285_read,
.enable = cksrc_dc21285_enable,
.disable = cksrc_dc21285_disable,
.mask = CLOCKSOURCE_MASK(24),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void ckevt_dc21285_set_mode(enum clock_event_mode mode,
struct clock_event_device *c)
{
switch (mode) {
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_PERIODIC:
*CSR_TIMER1_CLR = 0;
*CSR_TIMER1_LOAD = (mem_fclk_21285 + 8 * HZ) / (16 * HZ);
*CSR_TIMER1_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD |
TIMER_CNTL_DIV16;
break;
示例3: CLOCKSOURCE_MASK
static struct msm_clock msm_clocks[] = {
{
.clockevent = {
.name = "gp_timer",
.features = CLOCK_EVT_FEAT_ONESHOT,
.shift = 32,
.rating = 200,
.set_next_event = msm_timer_set_next_event,
.set_mode = msm_timer_set_mode,
},
.clocksource = {
.name = "gp_timer",
.rating = 200,
.read = msm_gpt_read,
.mask = CLOCKSOURCE_MASK(32),
.shift = 24,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
},
.irq = {
.name = "gp_timer",
.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_TRIGGER_RISING,
.handler = msm_timer_interrupt,
.dev_id = &msm_clocks[0].clockevent,
.irq = INT_GP_TIMER_EXP
},
.regbase = MSM_GPT_BASE,
.freq = GPT_HZ
},
{
.clockevent = {
示例4: WARN_ON
WARN_ON(!p->cs_enabled);
iowrite8(0, p->mapbase1 + TCR);
iowrite8(0, p->mapbase2 + TCR);
p->cs_enabled = false;
}
static struct tpu_priv tpu_priv = {
.cs = {
.name = "H8S_TPU",
.rating = 200,
.read = tpu_clocksource_read,
.enable = tpu_clocksource_enable,
.disable = tpu_clocksource_disable,
.mask = CLOCKSOURCE_MASK(sizeof(unsigned long) * 8),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
},
};
#define CH_L 0
#define CH_H 1
static int __init h8300_tpu_init(struct device_node *node)
{
void __iomem *base[2];
struct clk *clk;
int ret = -ENXIO;
clk = of_clk_get(node, 0);
if (IS_ERR(clk)) {
示例5: arch_counter_get_cntpct_mem
else
return arch_counter_get_cntpct_mem();
}
EXPORT_SYMBOL(arch_counter_get_cntpct);
u64 arch_counter_get_cntvct(void)
{
return arch_timer_read_counter();
}
EXPORT_SYMBOL(arch_counter_get_cntvct);
static struct clocksource clocksource_counter = {
.name = "arch_sys_counter",
.rating = 400,
.read = arch_counter_read,
.mask = CLOCKSOURCE_MASK(56),
.flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SUSPEND_NONSTOP,
};
static struct cyclecounter cyclecounter = {
.read = arch_counter_read_cc,
.mask = CLOCKSOURCE_MASK(56),
};
static struct timecounter timecounter;
struct timecounter *arch_timer_get_timecounter(void)
{
return &timecounter;
}
示例6: cpumask_of
&nuc900_clockevent_device);
nuc900_clockevent_device.cpumask = cpumask_of(0);
clockevents_register_device(&nuc900_clockevent_device);
}
static cycle_t nuc900_get_cycles(struct clocksource *cs)
{
return (~__raw_readl(REG_TDR1)) & TDR_MASK;
}
static struct clocksource clocksource_nuc900 = {
.name = "nuc900-timer1",
.rating = 200,
.read = nuc900_get_cycles,
.mask = CLOCKSOURCE_MASK(TDR_SHIFT),
.shift = 10,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void __init nuc900_clocksource_init(void)
{
unsigned int val;
unsigned int rate;
struct clk *clk = clk_get(NULL, "timer1");
BUG_ON(IS_ERR(clk));
__raw_writel(0x00, REG_TCSR1);
clk_enable(clk);
示例7: pr_info
fout = ((2 * n * fin) / (m * (0x01 << p)));
pr_info("MIPS Clock Freq=%d kHz\n", fout);
return fout;
}
static cycle_t c0_hpt_read(struct clocksource *cs)
{
return read_c0_count();
}
static struct clocksource clocksource_mips = {
.name = "powertv-counter",
.read = c0_hpt_read,
.mask = CLOCKSOURCE_MASK(32),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void __init powertv_c0_hpt_clocksource_init(void)
{
unsigned int pll_freq = mips_get_pll_freq();
pr_info("CPU frequency %d.%02d MHz\n", pll_freq / 1000,
(pll_freq % 1000) * 100 / 1000);
mips_hpt_frequency = pll_freq / 2 * 1000;
clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
示例8: rmb
nsec = lguest_data.time.tv_nsec;
/* Make sure we've done that. */
rmb();
/* Now if the seconds part has changed, try again. */
} while (unlikely(lguest_data.time.tv_sec != sec));
/* Our lguest clock is in real nanoseconds. */
return sec*1000000000ULL + nsec;
}
/* This is the fallback clocksource: lower priority than the TSC clocksource. */
static struct clocksource lguest_clock = {
.name = "lguest",
.rating = 200,
.read = lguest_clock_read,
.mask = CLOCKSOURCE_MASK(64),
.mult = 1 << 22,
.shift = 22,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
/* We also need a "struct clock_event_device": Linux asks us to set it to go
* off some time in the future. Actually, James Morris figured all this out, I
* just applied the patch. */
static int lguest_clockevent_set_next_event(unsigned long delta,
struct clock_event_device *evt)
{
/* FIXME: I don't think this can ever happen, but James tells me he had
* to put this code in. Maybe we should remove it now. Anyone? */
if (delta < LG_CLOCK_MIN_DELTA) {
if (printk_ratelimit())
示例9: ixgbe_ptp_start_cyclecounter
/**
* ixgbe_ptp_start_cyclecounter - create the cycle counter from hw
* @adapter: pointer to the adapter structure
*
* This function should be called to set the proper values for the TIMINCA
* register and tell the cyclecounter structure what the tick rate of SYSTIME
* is. It does not directly modify SYSTIME registers or the timecounter
* structure. It should be called whenever a new TIMINCA value is necessary,
* such as during initialization or when the link speed changes.
*/
void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
{
struct ixgbe_hw *hw = &adapter->hw;
u32 incval = 0;
u32 shift = 0;
unsigned long flags;
/**
* Scale the NIC cycle counter by a large factor so that
* relatively small corrections to the frequency can be added
* or subtracted. The drawbacks of a large factor include
* (a) the clock register overflows more quickly, (b) the cycle
* counter structure must be able to convert the systime value
* to nanoseconds using only a multiplier and a right-shift,
* and (c) the value must fit within the timinca register space
* => math based on internal DMA clock rate and available bits
*
* Note that when there is no link, internal DMA clock is same as when
* link speed is 10Gb. Set the registers correctly even when link is
* down to preserve the clock setting
*/
switch (adapter->link_speed) {
case IXGBE_LINK_SPEED_100_FULL:
incval = IXGBE_INCVAL_100;
shift = IXGBE_INCVAL_SHIFT_100;
break;
case IXGBE_LINK_SPEED_1GB_FULL:
incval = IXGBE_INCVAL_1GB;
shift = IXGBE_INCVAL_SHIFT_1GB;
break;
case IXGBE_LINK_SPEED_10GB_FULL:
default:
incval = IXGBE_INCVAL_10GB;
shift = IXGBE_INCVAL_SHIFT_10GB;
break;
}
/**
* Modify the calculated values to fit within the correct
* number of bits specified by the hardware. The 82599 doesn't
* have the same space as the X540, so bitshift the calculated
* values to fit.
*/
switch (hw->mac.type) {
case ixgbe_mac_X540:
IXGBE_WRITE_REG(hw, IXGBE_TIMINCA, incval);
break;
case ixgbe_mac_82599EB:
incval >>= IXGBE_INCVAL_SHIFT_82599;
shift -= IXGBE_INCVAL_SHIFT_82599;
IXGBE_WRITE_REG(hw, IXGBE_TIMINCA,
(1 << IXGBE_INCPER_SHIFT_82599) |
incval);
break;
default:
/* other devices aren't supported */
return;
}
/* update the base incval used to calculate frequency adjustment */
ACCESS_ONCE(adapter->base_incval) = incval;
smp_mb();
/* need lock to prevent incorrect read while modifying cyclecounter */
spin_lock_irqsave(&adapter->tmreg_lock, flags);
memset(&adapter->hw_cc, 0, sizeof(adapter->hw_cc));
adapter->hw_cc.read = ixgbe_ptp_read_82599;
adapter->hw_cc.mask = CLOCKSOURCE_MASK(64);
adapter->hw_cc.shift = shift;
adapter->hw_cc.mult = 1;
spin_unlock_irqrestore(&adapter->tmreg_lock, flags);
}
示例10: u300_get_cycles
.name = "U300 Timer Tick",
.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
.handler = u300_timer_interrupt,
};
/* Use general purpose timer 2 as clock source */
static cycle_t u300_get_cycles(struct clocksource *cs)
{
return (cycles_t) readl(U300_TIMER_APP_VBASE + U300_TIMER_APP_GPT2CC);
}
static struct clocksource clocksource_u300_1mhz = {
.name = "GPT2",
.rating = 300, /* Reasonably fast and accurate clock source */
.read = u300_get_cycles,
.mask = CLOCKSOURCE_MASK(32), /* 32 bits */
/* 22 calculated using the algorithm in arch/mips/kernel/time.c */
.shift = 22,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
unsigned long long notrace sched_clock(void)
{
return clocksource_cyc2ns(clocksource_u300_1mhz.read(
&clocksource_u300_1mhz),
clocksource_u300_1mhz.mult,
clocksource_u300_1mhz.shift);
}
static void __init u300_timer_init(void)
示例11: omap_32k_sync_probe
static int __init omap_32k_sync_probe(struct platform_device *pdev)
{
struct omap_32k_sync_device *omap;
struct resource *res;
struct clk *ick;
int ret;
void __iomem *base;
omap = kzalloc(sizeof(*omap), GFP_KERNEL);
if (!omap) {
dev_dbg(&pdev->dev, "unable to allocate memory\n");
ret = -ENOMEM;
goto err0;
}
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_dbg(&pdev->dev, "couldn't get resource\n");
ret = -ENODEV;
goto err1;
}
base = ioremap(res->start, resource_size(res));
if (!base) {
dev_dbg(&pdev->dev, "ioremap failed\n");
ret = -ENOMEM;
goto err2;
}
ick = clk_get(&pdev->dev, "ick");
if (IS_ERR(ick)) {
dev_dbg(&pdev->dev, "couldn't get clock\n");
ret = PTR_ERR(ick);
goto err3;
}
ret = clk_enable(ick);
if (ret) {
dev_dbg(&pdev->dev, "couldn't enable clock\n");
goto err4;
}
omap->base = base;
omap->dev = &pdev->dev;
omap->ick = ick;
omap->cs.name = "timer-32k";
omap->cs.rating = 250;
omap->cs.read = omap_32k_sync_32k_read;
omap->cs.mask = CLOCKSOURCE_MASK(32);
omap->cs.shift = 10;
omap->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
omap->cs.mult = clocksource_hz2mult(32768, omap->cs.shift);
platform_set_drvdata(pdev, omap);
ret = clocksource_register(&omap->cs);
if (ret) {
dev_dbg(&pdev->dev, "failed to register clocksource\n");
goto err5;
}
/* initialize our offset */
omap->offset_32k = omap_32k_sync_32k_read(&omap->cs);
/*
* REVISIT for now we need to keep a global static pointer
* to this clocksource instance. Would it make any sense
* to provide a get_clocksource() to fetch the clocksource
* we just registered ?
*/
thecs = omap;
omap_32k_sync_register_chrdev();
return 0;
err5:
clk_disable(ick);
err4:
clk_put(ick);
err3:
iounmap(base);
err2:
err1:
kfree(omap);
err0:
return ret;
}
示例12: ext_timer_read_count
if (timer_cs_used == -1)
return 0;
ret = ext_timer_read_count(timer_cs_used, &count);
if (ret == 0)
return (cycle_t)count;
else
return 0;
}
static struct clocksource bcm63xx_clocksource = {
.name = "timer_cs",
.rating = 350,
.read = bcm63xx_read_timer_count,
.mask = CLOCKSOURCE_MASK(30),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void __init periph_timer_clocksource_init(void)
{
if (timer_cs_used != -1)
return;
timer_cs_used = ext_timer_alloc(-1, PERIPH_TIMER_PERIOD_MAX, NULL, 0);
/* cannot allocate timer, just quit. Shouldn't happen! */
if (timer_cs_used == -1)
return;
示例13: txx9_cs_read
static struct txx9_tmr_reg __iomem *txx9_cs_tmrptr;
static cycle_t txx9_cs_read(void)
{
return __raw_readl(&txx9_cs_tmrptr->trr);
}
/* Use 1 bit smaller width to use full bits in that width */
#define TXX9_CLOCKSOURCE_BITS (TXX9_TIMER_BITS - 1)
static struct clocksource txx9_clocksource = {
.name = "TXx9",
.rating = 200,
.read = txx9_cs_read,
.mask = CLOCKSOURCE_MASK(TXX9_CLOCKSOURCE_BITS),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
void __init txx9_clocksource_init(unsigned long baseaddr,
unsigned int imbusclk)
{
struct txx9_tmr_reg __iomem *tmrptr;
clocksource_set_clock(&txx9_clocksource, TIMER_CLK(imbusclk));
clocksource_register(&txx9_clocksource);
tmrptr = ioremap(baseaddr, sizeof(struct txx9_tmr_reg));
__raw_writel(TCR_BASE, &tmrptr->tcr);
__raw_writel(0, &tmrptr->tisr);
__raw_writel(TIMER_CCD, &tmrptr->ccdr);
示例14: return
{
/*
* The value should be inverted, because the SysTick timer counts down,
* and we need a value that counts up.
*/
return (cycle_t)(CM3_SYSTICK->val ^ CM3_SYSTICK_LOAD_RELOAD_MSK);
}
/*
* SysTick clock source device
*/
static struct clocksource clocksource_systick = {
.name = "cm3-systick",
.rating = 200,
.read = clocksource_systick_value_get,
.mask = CLOCKSOURCE_MASK(CM3_SYSTICK_LOAD_RELOAD_BITWIDTH),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
/*
* Register the SysTick timer as a clocksource
*/
void cortex_m3_register_systick_clocksource(u32 systick_clk)
{
/*
* Configure and enable the SysTick timer if it was not enabled
* in the bootloader.
*/
CM3_SYSTICK->load = CM3_SYSTICK_LOAD_RELOAD_MSK;
CM3_SYSTICK->val = 0;
CM3_SYSTICK->ctrl |= CM3_SYSTICK_CTRL_EN;
示例15: read_clk32k
}
/* this irq is shared ... */
return IRQ_NONE;
}
static cycle_t read_clk32k(struct clocksource *cs)
{
return read_CRTR();
}
static struct clocksource clk32k = {
.name = "32k_counter",
.rating = 150,
.read = read_clk32k,
.mask = CLOCKSOURCE_MASK(20),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
};
static void clkdev32k_disable_and_flush_irq(void)
{
unsigned int val;
/* Disable and flush pending timer interrupts */
regmap_write(regmap_st, AT91_ST_IDR, AT91_ST_PITS | AT91_ST_ALMS);
regmap_read(regmap_st, AT91_ST_SR, &val);
last_crtr = read_CRTR();
}
static int clkevt32k_shutdown(struct clock_event_device *evt)
{