From 46bd2f45d9f8df52d45e71f9bae851ee012f00f2 Mon Sep 17 00:00:00 2001
From: Kaspar Schleiser <kaspar@schleiser.de>
Date: Fri, 6 May 2016 22:10:52 +0200
Subject: [PATCH] sys: xtimer: replace XTIMER_MASK with XTIMER_WIDTH in board
 config

---
 boards/airfy-beacon/include/board.h          |  2 +-
 boards/arduino-mega2560/include/board.h      |  2 +-
 boards/cc2650stk/include/board.h             |  2 +-
 boards/chronos/include/board.h               |  2 +-
 boards/fox/include/board.h                   |  2 +-
 boards/iotlab-common/include/board_common.h  |  2 +-
 boards/msb-430-common/include/board_common.h |  2 +-
 boards/nrf51dongle/include/board.h           |  2 +-
 boards/nucleo-f103/include/board.h           |  2 +-
 boards/pca10000/include/board.h              |  2 +-
 boards/pca10005/include/board.h              |  2 +-
 boards/spark-core/include/board.h            |  2 +-
 boards/telosb/include/board.h                |  2 +-
 boards/waspmote-pro/include/board.h          |  2 +-
 boards/wsn430-common/include/board_common.h  |  2 +-
 boards/yunjia-nrf51822/include/board.h       |  2 +-
 boards/z1/include/board.h                    |  2 +-
 sys/include/xtimer.h                         | 39 +++++++++++++-------
 18 files changed, 43 insertions(+), 30 deletions(-)

diff --git a/boards/airfy-beacon/include/board.h b/boards/airfy-beacon/include/board.h
index 49b17c03e7..59db7e7200 100644
--- a/boards/airfy-beacon/include/board.h
+++ b/boards/airfy-beacon/include/board.h
@@ -33,7 +33,7 @@
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xff000000)
+#define XTIMER_WIDTH                (24)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/arduino-mega2560/include/board.h b/boards/arduino-mega2560/include/board.h
index 5432669417..b09d20df4f 100644
--- a/boards/arduino-mega2560/include/board.h
+++ b/boards/arduino-mega2560/include/board.h
@@ -56,7 +56,7 @@ extern "C" {
  * @brief xtimer configuration values
  * @{
  */
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_SHIFT                (2)
 #define XTIMER_BACKOFF              (40)
 /** @} */
diff --git a/boards/cc2650stk/include/board.h b/boards/cc2650stk/include/board.h
index 12754112ca..84d4d8980b 100644
--- a/boards/cc2650stk/include/board.h
+++ b/boards/cc2650stk/include/board.h
@@ -31,7 +31,7 @@ extern "C" {
  * @brief   Xtimer configuration
  * @{
  */
-#define XTIMER_MASK                 (0xFFFF0000)
+#define XTIMER_WIDTH                (16)
 /** @} */
 
 /**
diff --git a/boards/chronos/include/board.h b/boards/chronos/include/board.h
index 00dab1df8a..b4d4de2c0f 100644
--- a/boards/chronos/include/board.h
+++ b/boards/chronos/include/board.h
@@ -40,7 +40,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 /** @} */
 
 /**
diff --git a/boards/fox/include/board.h b/boards/fox/include/board.h
index e62bf4c7e2..51540e1ab5 100644
--- a/boards/fox/include/board.h
+++ b/boards/fox/include/board.h
@@ -36,7 +36,7 @@ extern "C" {
 /**
  * @name Tell the xtimer that we use a 16-bit peripheral timer
  */
-#define XTIMER_MASK         (0xffff0000)
+#define XTIMER_WIDTH        (16)
 
 /**
  * @name Define the interface to the AT86RF231 radio
diff --git a/boards/iotlab-common/include/board_common.h b/boards/iotlab-common/include/board_common.h
index 29babc2b96..1ecbf33706 100644
--- a/boards/iotlab-common/include/board_common.h
+++ b/boards/iotlab-common/include/board_common.h
@@ -46,7 +46,7 @@ extern "C" {
 /**
  * @name Tell the xtimer that we use a 16-bit peripheral timer
  */
-#define XTIMER_MASK         (0xffff0000)
+#define XTIMER_WIDTH        (16)
 
 /**
  * @name Define the interface to the AT86RF231 radio
diff --git a/boards/msb-430-common/include/board_common.h b/boards/msb-430-common/include/board_common.h
index 72d856dcb7..e87fd8eb38 100644
--- a/boards/msb-430-common/include/board_common.h
+++ b/boards/msb-430-common/include/board_common.h
@@ -39,7 +39,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/nrf51dongle/include/board.h b/boards/nrf51dongle/include/board.h
index 3e3ee91c66..c215c36973 100644
--- a/boards/nrf51dongle/include/board.h
+++ b/boards/nrf51dongle/include/board.h
@@ -34,7 +34,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xff000000)
+#define XTIMER_WIDTH                (24)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/nucleo-f103/include/board.h b/boards/nucleo-f103/include/board.h
index 7641bd1b37..944ba64d1b 100755
--- a/boards/nucleo-f103/include/board.h
+++ b/boards/nucleo-f103/include/board.h
@@ -35,7 +35,7 @@ extern "C" {
 /**
  * @name xtimer configuration
  */
-#define XTIMER_MASK         (0xffff0000)
+#define XTIMER_WIDTH        (16)
 #define XTIMER_BACKOFF      5
 /** @} */
 
diff --git a/boards/pca10000/include/board.h b/boards/pca10000/include/board.h
index 11ee1dcbb3..490a8b491d 100644
--- a/boards/pca10000/include/board.h
+++ b/boards/pca10000/include/board.h
@@ -34,7 +34,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xff000000)
+#define XTIMER_WIDTH                (24)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/pca10005/include/board.h b/boards/pca10005/include/board.h
index ab8a291f77..a3d2c2b656 100644
--- a/boards/pca10005/include/board.h
+++ b/boards/pca10005/include/board.h
@@ -34,7 +34,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xff000000)
+#define XTIMER_WIDTH                (24)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/spark-core/include/board.h b/boards/spark-core/include/board.h
index 3e0895eecd..3909af7abf 100644
--- a/boards/spark-core/include/board.h
+++ b/boards/spark-core/include/board.h
@@ -38,7 +38,7 @@
 /**
  * @name Tell the xtimer that we use a 16-bit peripheral timer
  */
-#define XTIMER_MASK         (0xffff0000)
+#define XTIMER_WIDTH        (16)
 
 /**
  * @brief   Macros for controlling the on-board LEDs
diff --git a/boards/telosb/include/board.h b/boards/telosb/include/board.h
index a3e36ab473..e5136a19f2 100644
--- a/boards/telosb/include/board.h
+++ b/boards/telosb/include/board.h
@@ -56,7 +56,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/waspmote-pro/include/board.h b/boards/waspmote-pro/include/board.h
index 6ed7ad4f47..a63f84aaa7 100644
--- a/boards/waspmote-pro/include/board.h
+++ b/boards/waspmote-pro/include/board.h
@@ -154,7 +154,7 @@ extern "C" {
  * @brief xtimer configuration values
  * @{
  */
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_SHIFT                (4)
 #define XTIMER_BACKOFF              (40)
 #define XTIMER_TICKS_INIT           (921600ul)
diff --git a/boards/wsn430-common/include/board_common.h b/boards/wsn430-common/include/board_common.h
index 1942986328..08734f92f3 100644
--- a/boards/wsn430-common/include/board_common.h
+++ b/boards/wsn430-common/include/board_common.h
@@ -39,7 +39,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/yunjia-nrf51822/include/board.h b/boards/yunjia-nrf51822/include/board.h
index 22f21e9905..2442f045e5 100644
--- a/boards/yunjia-nrf51822/include/board.h
+++ b/boards/yunjia-nrf51822/include/board.h
@@ -33,7 +33,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xff000000)
+#define XTIMER_WIDTH                (24)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/boards/z1/include/board.h b/boards/z1/include/board.h
index 4698181e04..0e2fde78a1 100644
--- a/boards/z1/include/board.h
+++ b/boards/z1/include/board.h
@@ -50,7 +50,7 @@ extern "C" {
  */
 #define XTIMER                      (0)
 #define XTIMER_CHAN                 (0)
-#define XTIMER_MASK                 (0xffff0000)
+#define XTIMER_WIDTH                (16)
 #define XTIMER_BACKOFF              (40)
 /** @} */
 
diff --git a/sys/include/xtimer.h b/sys/include/xtimer.h
index 1d6bec9899..9759fa7c2c 100644
--- a/sys/include/xtimer.h
+++ b/sys/include/xtimer.h
@@ -357,26 +357,38 @@ int xtimer_msg_receive_timeout64(msg_t *msg, uint64_t us);
 #define XTIMER_TICKS_TO_USEC(value) ( (value) << XTIMER_SHIFT )
 #endif
 
-/**
- * @brief set xtimer default timer configuration
- * @{
+/*
+ * Default xtimer configuration
  */
 #ifndef XTIMER
-#define XTIMER (0)
+/**
+ * @brief Underlying hardware timer device to assign to xtimer
+ */
+#define XTIMER TIMER_DEV(0)
+/**
+ * @brief Underlying hardware timer channel to assign to xtimer
+ */
 #define XTIMER_CHAN (0)
 
-#if TIMER_0_MAX_VALUE == 0xffffff
-#define XTIMER_MASK 0xff000000
-#elif TIMER_0_MAX_VALUE == 0xffff
-#define XTIMER_MASK 0xffff0000
+#if (TIMER_0_MAX_VALUE) == 0xfffffful
+#define XTIMER_WIDTH (24)
+#elif (TIMER_0_MAX_VALUE) == 0xffff
+#define XTIMER_WIDTH (16)
 #endif
 
 #endif
+
+#ifndef XTIMER_WIDTH
 /**
- * @}
+ * @brief xtimer timer width
+ *
+ * This value specifies the width (in bits) of the hardware timer used by xtimer.
+ * Default is 32.
  */
+#define XTIMER_WIDTH (32)
+#endif
 
-#ifndef XTIMER_MASK
+#if XTIMER_WIDTH != 32
 /**
  * @brief xtimer timer mask
  *
@@ -384,12 +396,13 @@ int xtimer_msg_receive_timeout64(msg_t *msg, uint64_t us);
  * counts to, e.g., 0xffffffff & ~TIMER_MAXVALUE.
  *
  * For a 16bit timer, the mask would be 0xFFFF0000, for a 24bit timer, the mask
- * would be 0xFF000000. Don't set this for 32bit timers.
- *
- * This is supposed to be defined per-device in e.g., periph_conf.h.
+ * would be 0xFF000000.
  */
+#define XTIMER_MASK ((0xffffffff >> XTIMER_WIDTH) << XTIMER_WIDTH)
+#else
 #define XTIMER_MASK (0)
 #endif
+
 #define XTIMER_MASK_SHIFTED XTIMER_TICKS_TO_USEC(XTIMER_MASK)
 
 #if XTIMER_MASK
-- 
GitLab