Lines Matching refs:priv
92 static void convert_ticks_to_time(struct timer_group_priv *priv, in convert_ticks_to_time() argument
97 time->tv_sec = (__kernel_time_t)div_u64(ticks, priv->timerfreq); in convert_ticks_to_time()
98 tmp_sec = (u64)time->tv_sec * (u64)priv->timerfreq; in convert_ticks_to_time()
104 div_u64((ticks - tmp_sec) * 1000000, priv->timerfreq); in convert_ticks_to_time()
110 static int convert_time_to_ticks(struct timer_group_priv *priv, in convert_time_to_ticks() argument
120 max_value = div_u64(ULLONG_MAX, priv->timerfreq); in convert_time_to_ticks()
126 tmp_sec = (u64)time->tv_sec * (u64)priv->timerfreq; in convert_time_to_ticks()
130 tmp_ms = div_u64((u64)tmp_ms * (u64)priv->timerfreq, 1000); in convert_time_to_ticks()
134 tmp_us = div_u64((u64)tmp_us * (u64)priv->timerfreq, 1000000); in convert_time_to_ticks()
144 struct timer_group_priv *priv) in detect_idle_cascade_timer() argument
155 spin_lock_irqsave(&priv->lock, flags); in detect_idle_cascade_timer()
156 map = casc_priv->cascade_map & priv->idle; in detect_idle_cascade_timer()
159 priv->timer[num].cascade_handle = casc_priv; in detect_idle_cascade_timer()
162 priv->idle &= ~casc_priv->cascade_map; in detect_idle_cascade_timer()
163 spin_unlock_irqrestore(&priv->lock, flags); in detect_idle_cascade_timer()
164 return &priv->timer[num]; in detect_idle_cascade_timer()
166 spin_unlock_irqrestore(&priv->lock, flags); in detect_idle_cascade_timer()
173 static int set_cascade_timer(struct timer_group_priv *priv, u64 ticks, in set_cascade_timer() argument
182 casc_priv = priv->timer[num].cascade_handle; in set_cascade_timer()
188 setbits32(priv->group_tcr, tcr); in set_cascade_timer()
192 out_be32(&priv->regs[num].gtccr, 0); in set_cascade_timer()
193 out_be32(&priv->regs[num].gtbcr, tmp_ticks | TIMER_STOP); in set_cascade_timer()
195 out_be32(&priv->regs[num - 1].gtccr, 0); in set_cascade_timer()
196 out_be32(&priv->regs[num - 1].gtbcr, rem_ticks); in set_cascade_timer()
201 static struct mpic_timer *get_cascade_timer(struct timer_group_priv *priv, in get_cascade_timer() argument
214 allocated_timer = detect_idle_cascade_timer(priv); in get_cascade_timer()
219 ret = set_cascade_timer(priv, ticks, allocated_timer->num); in get_cascade_timer()
228 struct timer_group_priv *priv; in get_timer() local
237 list_for_each_entry(priv, &timer_group_list, node) { in get_timer()
238 ret = convert_time_to_ticks(priv, time, &ticks); in get_timer()
243 if (!(priv->flags & FSL_GLOBAL_TIMER)) in get_timer()
246 timer = get_cascade_timer(priv, ticks); in get_timer()
256 spin_lock_irqsave(&priv->lock, flags); in get_timer()
257 if (priv->idle & (1 << i)) { in get_timer()
259 priv->idle &= ~(1 << i); in get_timer()
261 out_be32(&priv->regs[num].gtbcr, in get_timer()
263 out_be32(&priv->regs[num].gtccr, 0); in get_timer()
264 priv->timer[num].cascade_handle = NULL; in get_timer()
265 spin_unlock_irqrestore(&priv->lock, flags); in get_timer()
266 return &priv->timer[num]; in get_timer()
268 spin_unlock_irqrestore(&priv->lock, flags); in get_timer()
284 struct timer_group_priv *priv = container_of(handle, in mpic_start_timer() local
287 clrbits32(&priv->regs[handle->num].gtbcr, TIMER_STOP); in mpic_start_timer()
299 struct timer_group_priv *priv = container_of(handle, in mpic_stop_timer() local
303 setbits32(&priv->regs[handle->num].gtbcr, TIMER_STOP); in mpic_stop_timer()
305 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_stop_timer()
307 out_be32(&priv->regs[handle->num].gtccr, 0); in mpic_stop_timer()
308 out_be32(&priv->regs[handle->num - 1].gtccr, 0); in mpic_stop_timer()
310 out_be32(&priv->regs[handle->num].gtccr, 0); in mpic_stop_timer()
324 struct timer_group_priv *priv = container_of(handle, in mpic_get_remain_time() local
331 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_get_remain_time()
333 tmp_ticks = in_be32(&priv->regs[handle->num].gtccr); in mpic_get_remain_time()
336 tmp_ticks = in_be32(&priv->regs[handle->num - 1].gtccr); in mpic_get_remain_time()
339 ticks = in_be32(&priv->regs[handle->num].gtccr); in mpic_get_remain_time()
343 convert_ticks_to_time(priv, ticks, time); in mpic_get_remain_time()
357 struct timer_group_priv *priv = container_of(handle, in mpic_free_timer() local
365 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_free_timer()
367 free_irq(priv->timer[handle->num].irq, priv->timer[handle->num].dev); in mpic_free_timer()
369 spin_lock_irqsave(&priv->lock, flags); in mpic_free_timer()
374 clrbits32(priv->group_tcr, tcr); in mpic_free_timer()
375 priv->idle |= casc_priv->cascade_map; in mpic_free_timer()
376 priv->timer[handle->num].cascade_handle = NULL; in mpic_free_timer()
378 priv->idle |= TIMER_OFFSET(handle->num); in mpic_free_timer()
380 spin_unlock_irqrestore(&priv->lock, flags); in mpic_free_timer()
427 struct timer_group_priv *priv) in timer_group_get_freq() argument
431 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_get_freq()
437 &priv->timerfreq); in timer_group_get_freq()
442 if (priv->timerfreq <= 0) in timer_group_get_freq()
445 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_get_freq()
447 priv->timerfreq /= div; in timer_group_get_freq()
454 struct timer_group_priv *priv) in timer_group_get_irq() argument
493 priv->idle |= TIMER_OFFSET((offset + j)); in timer_group_get_irq()
494 priv->timer[offset + j].irq = irq; in timer_group_get_irq()
495 priv->timer[offset + j].num = offset + j; in timer_group_get_irq()
505 struct timer_group_priv *priv; in timer_group_init() local
509 priv = kzalloc(sizeof(struct timer_group_priv), GFP_KERNEL); in timer_group_init()
510 if (!priv) { in timer_group_init()
517 priv->flags |= FSL_GLOBAL_TIMER; in timer_group_init()
519 priv->regs = of_iomap(np, i++); in timer_group_init()
520 if (!priv->regs) { in timer_group_init()
526 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_init()
527 priv->group_tcr = of_iomap(np, i++); in timer_group_init()
528 if (!priv->group_tcr) { in timer_group_init()
535 ret = timer_group_get_freq(np, priv); in timer_group_init()
541 ret = timer_group_get_irq(np, priv); in timer_group_init()
547 spin_lock_init(&priv->lock); in timer_group_init()
550 if (priv->flags & FSL_GLOBAL_TIMER) in timer_group_init()
551 setbits32(priv->group_tcr, MPIC_TIMER_TCR_CLKDIV); in timer_group_init()
553 list_add_tail(&priv->node, &timer_group_list); in timer_group_init()
558 if (priv->regs) in timer_group_init()
559 iounmap(priv->regs); in timer_group_init()
561 if (priv->group_tcr) in timer_group_init()
562 iounmap(priv->group_tcr); in timer_group_init()
564 kfree(priv); in timer_group_init()
569 struct timer_group_priv *priv; in mpic_timer_resume() local
571 list_for_each_entry(priv, &timer_group_list, node) { in mpic_timer_resume()
573 if (priv->flags & FSL_GLOBAL_TIMER) in mpic_timer_resume()
574 setbits32(priv->group_tcr, MPIC_TIMER_TCR_CLKDIV); in mpic_timer_resume()