--- c/src/lib/libbsp/sparc/shared/include/tlib.h | 8 ++++++++ c/src/lib/libbsp/sparc/shared/timer/gptimer.c | 16 ++++++++++++++++ 2 files changed, 24 insertions(+)
diff --git a/c/src/lib/libbsp/sparc/shared/include/tlib.h b/c/src/lib/libbsp/sparc/shared/include/tlib.h index 7e6c49a..5e49dd4 100644 --- a/c/src/lib/libbsp/sparc/shared/include/tlib.h +++ b/c/src/lib/libbsp/sparc/shared/include/tlib.h @@ -43,6 +43,7 @@ struct tlib_drv { void (*get_counter)(struct tlib_dev *hand, unsigned int *counter); int (*custom)(struct tlib_dev *hand, int cmd, void *arg); int (*int_pend)(struct tlib_dev *hand, int ack); + void (*get_widthmask)(struct tlib_dev *hand, unsigned int *widthmask); }; struct tlib_dev { @@ -183,6 +184,13 @@ static inline int tlib_interrupt_pending(void *hand, int ack) return dev->drv->int_pend(dev, ack); } +static inline void tlib_get_widthmask(void *hand, unsigned int *widthmask) +{ + struct tlib_dev *dev = hand; + + dev->drv->get_widthmask(dev, widthmask); +} + #ifdef __cplusplus } #endif diff --git a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c index f8c6da2..f47952f 100644 --- a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c +++ b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c @@ -93,6 +93,7 @@ struct gptimer_priv { struct gptimer_regs *regs; unsigned int base_clk; unsigned int base_freq; + unsigned int widthmask; char separate_interrupt; char isr_installed; @@ -265,6 +266,10 @@ int gptimer_init1(struct drvmgr_dev *dev) else irq_ack_mask = ~0; + /* Probe timer register width mask */ + priv->regs->timer[timer_start].value = 0xffffffff; + priv->widthmask = priv->regs->timer[timer_start].value; + priv->timer_cnt = timer_cnt; for (i=0; i<timer_cnt; i++) { timer = &priv->timers[i]; @@ -493,6 +498,16 @@ static void gptimer_tlib_get_counter( *counter = timer->tregs->value; } +static void gptimer_tlib_get_widthmask( + struct tlib_dev *hand, + unsigned int *widthmask) +{ + struct gptimer_timer *timer = (struct gptimer_timer *)hand; + struct gptimer_priv *priv = priv_from_timer(timer); + + *widthmask = priv->widthmask; +} + static struct tlib_drv gptimer_tlib_drv = { .reset = gptimer_tlib_reset, @@ -506,4 +521,5 @@ static struct tlib_drv gptimer_tlib_drv = .get_counter = gptimer_tlib_get_counter, .custom = NULL, .int_pend = gptimer_tlib_int_pend, + .get_widthmask = gptimer_tlib_get_widthmask, }; -- 2.7.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel