Lines Matching refs:priv

84 static void convert_ticks_to_time(struct timer_group_priv *priv,  in convert_ticks_to_time()  argument
87 *time = (u64)div_u64(ticks, priv->timerfreq); in convert_ticks_to_time()
91 static int convert_time_to_ticks(struct timer_group_priv *priv, in convert_time_to_ticks() argument
96 max_value = div_u64(ULLONG_MAX, priv->timerfreq); in convert_time_to_ticks()
101 *ticks = (u64)time * (u64)priv->timerfreq; in convert_time_to_ticks()
108 struct timer_group_priv *priv) in detect_idle_cascade_timer() argument
119 spin_lock_irqsave(&priv->lock, flags); in detect_idle_cascade_timer()
120 map = casc_priv->cascade_map & priv->idle; in detect_idle_cascade_timer()
123 priv->timer[num].cascade_handle = casc_priv; in detect_idle_cascade_timer()
126 priv->idle &= ~casc_priv->cascade_map; in detect_idle_cascade_timer()
127 spin_unlock_irqrestore(&priv->lock, flags); in detect_idle_cascade_timer()
128 return &priv->timer[num]; in detect_idle_cascade_timer()
130 spin_unlock_irqrestore(&priv->lock, flags); in detect_idle_cascade_timer()
137 static int set_cascade_timer(struct timer_group_priv *priv, u64 ticks, in set_cascade_timer() argument
146 casc_priv = priv->timer[num].cascade_handle; in set_cascade_timer()
152 setbits32(priv->group_tcr, tcr); in set_cascade_timer()
156 out_be32(&priv->regs[num].gtccr, 0); in set_cascade_timer()
157 out_be32(&priv->regs[num].gtbcr, tmp_ticks | TIMER_STOP); in set_cascade_timer()
159 out_be32(&priv->regs[num - 1].gtccr, 0); in set_cascade_timer()
160 out_be32(&priv->regs[num - 1].gtbcr, rem_ticks); in set_cascade_timer()
165 static struct mpic_timer *get_cascade_timer(struct timer_group_priv *priv, in get_cascade_timer() argument
178 allocated_timer = detect_idle_cascade_timer(priv); in get_cascade_timer()
183 ret = set_cascade_timer(priv, ticks, allocated_timer->num); in get_cascade_timer()
192 struct timer_group_priv *priv; in get_timer() local
201 list_for_each_entry(priv, &timer_group_list, node) { in get_timer()
202 ret = convert_time_to_ticks(priv, time, &ticks); in get_timer()
207 if (!(priv->flags & FSL_GLOBAL_TIMER)) in get_timer()
210 timer = get_cascade_timer(priv, ticks); in get_timer()
220 spin_lock_irqsave(&priv->lock, flags); in get_timer()
221 if (priv->idle & (1 << i)) { in get_timer()
223 priv->idle &= ~(1 << i); in get_timer()
225 out_be32(&priv->regs[num].gtbcr, in get_timer()
227 out_be32(&priv->regs[num].gtccr, 0); in get_timer()
228 priv->timer[num].cascade_handle = NULL; in get_timer()
229 spin_unlock_irqrestore(&priv->lock, flags); in get_timer()
230 return &priv->timer[num]; in get_timer()
232 spin_unlock_irqrestore(&priv->lock, flags); in get_timer()
248 struct timer_group_priv *priv = container_of(handle, in mpic_start_timer() local
251 clrbits32(&priv->regs[handle->num].gtbcr, TIMER_STOP); in mpic_start_timer()
263 struct timer_group_priv *priv = container_of(handle, in mpic_stop_timer() local
267 setbits32(&priv->regs[handle->num].gtbcr, TIMER_STOP); in mpic_stop_timer()
269 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_stop_timer()
271 out_be32(&priv->regs[handle->num].gtccr, 0); in mpic_stop_timer()
272 out_be32(&priv->regs[handle->num - 1].gtccr, 0); in mpic_stop_timer()
274 out_be32(&priv->regs[handle->num].gtccr, 0); in mpic_stop_timer()
288 struct timer_group_priv *priv = container_of(handle, in mpic_get_remain_time() local
295 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_get_remain_time()
297 tmp_ticks = in_be32(&priv->regs[handle->num].gtccr); in mpic_get_remain_time()
300 tmp_ticks = in_be32(&priv->regs[handle->num - 1].gtccr); in mpic_get_remain_time()
303 ticks = in_be32(&priv->regs[handle->num].gtccr); in mpic_get_remain_time()
307 convert_ticks_to_time(priv, ticks, time); in mpic_get_remain_time()
321 struct timer_group_priv *priv = container_of(handle, in mpic_free_timer() local
329 casc_priv = priv->timer[handle->num].cascade_handle; in mpic_free_timer()
331 free_irq(priv->timer[handle->num].irq, priv->timer[handle->num].dev); in mpic_free_timer()
333 spin_lock_irqsave(&priv->lock, flags); in mpic_free_timer()
338 clrbits32(priv->group_tcr, tcr); in mpic_free_timer()
339 priv->idle |= casc_priv->cascade_map; in mpic_free_timer()
340 priv->timer[handle->num].cascade_handle = NULL; in mpic_free_timer()
342 priv->idle |= TIMER_OFFSET(handle->num); in mpic_free_timer()
344 spin_unlock_irqrestore(&priv->lock, flags); in mpic_free_timer()
387 struct timer_group_priv *priv) in timer_group_get_freq() argument
391 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_get_freq()
397 &priv->timerfreq); in timer_group_get_freq()
402 if (priv->timerfreq <= 0) in timer_group_get_freq()
405 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_get_freq()
407 priv->timerfreq /= div; in timer_group_get_freq()
414 struct timer_group_priv *priv) in timer_group_get_irq() argument
451 priv->idle |= TIMER_OFFSET((offset + j)); in timer_group_get_irq()
452 priv->timer[offset + j].irq = irq; in timer_group_get_irq()
453 priv->timer[offset + j].num = offset + j; in timer_group_get_irq()
463 struct timer_group_priv *priv; in timer_group_init() local
467 priv = kzalloc(sizeof(struct timer_group_priv), GFP_KERNEL); in timer_group_init()
468 if (!priv) { in timer_group_init()
474 priv->flags |= FSL_GLOBAL_TIMER; in timer_group_init()
476 priv->regs = of_iomap(np, i++); in timer_group_init()
477 if (!priv->regs) { in timer_group_init()
482 if (priv->flags & FSL_GLOBAL_TIMER) { in timer_group_init()
483 priv->group_tcr = of_iomap(np, i++); in timer_group_init()
484 if (!priv->group_tcr) { in timer_group_init()
490 ret = timer_group_get_freq(np, priv); in timer_group_init()
496 ret = timer_group_get_irq(np, priv); in timer_group_init()
502 spin_lock_init(&priv->lock); in timer_group_init()
505 if (priv->flags & FSL_GLOBAL_TIMER) in timer_group_init()
506 setbits32(priv->group_tcr, MPIC_TIMER_TCR_CLKDIV); in timer_group_init()
508 list_add_tail(&priv->node, &timer_group_list); in timer_group_init()
513 if (priv->regs) in timer_group_init()
514 iounmap(priv->regs); in timer_group_init()
516 if (priv->group_tcr) in timer_group_init()
517 iounmap(priv->group_tcr); in timer_group_init()
519 kfree(priv); in timer_group_init()
524 struct timer_group_priv *priv; in mpic_timer_resume() local
526 list_for_each_entry(priv, &timer_group_list, node) { in mpic_timer_resume()
528 if (priv->flags & FSL_GLOBAL_TIMER) in mpic_timer_resume()
529 setbits32(priv->group_tcr, MPIC_TIMER_TCR_CLKDIV); in mpic_timer_resume()