doxygen: enable AUTOBRIEF, drop \brief

Especially for short descriptions, it is annoying to have to type \brief for
every single API doc.

Drop all \brief and enable the AUTOBRIEF feature of doxygen, which always takes
the first sentence of an API doc as the brief description.

Change-Id: I11a8a821b065a128108641a2a63fb5a2b1916e87
diff --git a/Doxyfile.codec.in b/Doxyfile.codec.in
index b826a36..247a8b3 100644
--- a/Doxyfile.codec.in
+++ b/Doxyfile.codec.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.coding.in b/Doxyfile.coding.in
index 7c1a28e..9a0058d 100644
--- a/Doxyfile.coding.in
+++ b/Doxyfile.coding.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.core.in b/Doxyfile.core.in
index cc3d842..2ca0ced 100644
--- a/Doxyfile.core.in
+++ b/Doxyfile.core.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.gb.in b/Doxyfile.gb.in
index 36b4f2b..e6b7826 100644
--- a/Doxyfile.gb.in
+++ b/Doxyfile.gb.in
@@ -156,7 +156,7 @@
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
 QT_AUTOBRIEF           = YES
 
diff --git a/Doxyfile.gsm.in b/Doxyfile.gsm.in
index 9673ea7..742adc2 100644
--- a/Doxyfile.gsm.in
+++ b/Doxyfile.gsm.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/Doxyfile.vty.in b/Doxyfile.vty.in
index 204436f..917af09 100644
--- a/Doxyfile.vty.in
+++ b/Doxyfile.vty.in
@@ -150,15 +150,15 @@
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# an explicit command for a brief description.)
 
-QT_AUTOBRIEF           = NO
+QT_AUTOBRIEF           = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/include/osmocom/codec/codec.h b/include/osmocom/codec/codec.h
index 05da911..3e9b688 100644
--- a/include/osmocom/codec/codec.h
+++ b/include/osmocom/codec/codec.h
@@ -42,7 +42,7 @@
        AMR_GOOD = 1
 };
 
-/*! \brief Check if given AMR Frame Type is a speech frame
+/*! Check if given AMR Frame Type is a speech frame
  *  \param[in] ft AMR Frame Type
  *  \returns true if AMR with given Frame Type contains voice, false otherwise
  */
diff --git a/include/osmocom/coding/gsm0503_coding.h b/include/osmocom/coding/gsm0503_coding.h
index 2f0e631..a9c59e4 100644
--- a/include/osmocom/coding/gsm0503_coding.h
+++ b/include/osmocom/coding/gsm0503_coding.h
@@ -8,7 +8,7 @@
  */
 
 /*! \file gsm0503_coding.h
- *  \brief GSM TS 05.03 coding
+ *  GSM TS 05.03 coding
  */
 
 #define GSM0503_GPRS_BURSTS_NBITS	(116 * 4)
diff --git a/include/osmocom/coding/gsm0503_interleaving.h b/include/osmocom/coding/gsm0503_interleaving.h
index a5d25ed..1463fb3 100644
--- a/include/osmocom/coding/gsm0503_interleaving.h
+++ b/include/osmocom/coding/gsm0503_interleaving.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_interleaving.h
- *  \brief GSM TS 05.03 interleaving
+ *  GSM TS 05.03 interleaving
  */
 
 void gsm0503_xcch_deinterleave(sbit_t *cB, const sbit_t *iB);
diff --git a/include/osmocom/coding/gsm0503_mapping.h b/include/osmocom/coding/gsm0503_mapping.h
index 6e139bf..435c913 100644
--- a/include/osmocom/coding/gsm0503_mapping.h
+++ b/include/osmocom/coding/gsm0503_mapping.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_mapping.c
- *  \brief GSM TS 05.03 burst mapping
+ *  GSM TS 05.03 burst mapping
  */
 
 void gsm0503_xcch_burst_unmap(sbit_t *iB, const sbit_t *eB,
diff --git a/include/osmocom/coding/gsm0503_parity.h b/include/osmocom/coding/gsm0503_parity.h
index f844720..2743bdb 100644
--- a/include/osmocom/coding/gsm0503_parity.h
+++ b/include/osmocom/coding/gsm0503_parity.h
@@ -7,7 +7,7 @@
  */
 
 /*! \file gsm0503_parity.h
- *  \brief GSM TS 05.03 parity
+ *  GSM TS 05.03 parity
  */
 
 const struct osmo_crc64gen_code gsm0503_fire_crc40;
diff --git a/include/osmocom/coding/gsm0503_tables.h b/include/osmocom/coding/gsm0503_tables.h
index 4622cae..f8c43c6 100644
--- a/include/osmocom/coding/gsm0503_tables.h
+++ b/include/osmocom/coding/gsm0503_tables.h
@@ -8,7 +8,7 @@
  */
 
 /*! \file gsm0503_tables.h
- *  \brief GSM TS 05.03 tables
+ *  GSM TS 05.03 tables
  */
 
 extern const ubit_t gsm0503_pdtch_hl_hn_ubit[4][8];
diff --git a/include/osmocom/core/application.h b/include/osmocom/core/application.h
index ecaeaa8..266fa9b 100644
--- a/include/osmocom/core/application.h
+++ b/include/osmocom/core/application.h
@@ -2,16 +2,16 @@
 
 /*!
  * \file application.h
- * \brief Routines for helping with the osmocom application setup.
+ * Routines for helping with the osmocom application setup.
  */
 
-/*! \brief information containing the available logging subsystems */
+/*! information containing the available logging subsystems */
 struct log_info;
 
-/*! \brief one instance of a logging target (file, stderr, ...) */
+/*! one instance of a logging target (file, stderr, ...) */
 struct log_target;
 
-/*! \brief the default logging target, logging to stderr */
+/*! the default logging target, logging to stderr */
 extern struct log_target *osmo_stderr_target;
 
 void osmo_init_ignore_signals(void);
diff --git a/include/osmocom/core/bitXXgen.h.tpl b/include/osmocom/core/bitXXgen.h.tpl
index 7480a8f..6881d87 100644
--- a/include/osmocom/core/bitXXgen.h.tpl
+++ b/include/osmocom/core/bitXXgen.h.tpl
@@ -22,7 +22,7 @@
 
 #pragma once
 
-/*! \brief load unaligned n-byte integer (little-endian encoding) into uintXX_t
+/*! load unaligned n-byte integer (little-endian encoding) into uintXX_t
  *  \param[in] p Buffer where integer is stored
  *  \param[in] n Number of bytes stored in p
  *  \returns XX bit unsigned integer
@@ -36,7 +36,7 @@
 	return r;
 }
 
-/*! \brief load unaligned n-byte integer (big-endian encoding) into uintXX_t
+/*! load unaligned n-byte integer (big-endian encoding) into uintXX_t
  *  \param[in] p Buffer where integer is stored
  *  \param[in] n Number of bytes stored in p
  *  \returns XX bit unsigned integer
@@ -51,7 +51,7 @@
 }
 
 
-/*! \brief store unaligned n-byte integer (little-endian encoding) from uintXX_t
+/*! store unaligned n-byte integer (little-endian encoding) from uintXX_t
  *  \param[in] x unsigned XX bit integer
  *  \param[out] p Buffer to store integer
  *  \param[in] n Number of bytes to store
@@ -63,7 +63,7 @@
 	for(i = 0; i < n; q[i] = (x >> i * 8) & 0xFF, i++);
 }
 
-/*! \brief store unaligned n-byte integer (big-endian encoding) from uintXX_t
+/*! store unaligned n-byte integer (big-endian encoding) from uintXX_t
  *  \param[in] x unsigned XX bit integer
  *  \param[out] p Buffer to store integer
  *  \param[in] n Number of bytes to store
@@ -79,26 +79,26 @@
 /* Convenience function for most-used cases */
 
 
-/*! \brief load unaligned XX-bit integer (little-endian encoding) */
+/*! load unaligned XX-bit integer (little-endian encoding) */
 static inline uintXX_t osmo_loadXXle(const void *p)
 {
 	return osmo_loadXXle_ext(p, XX / 8);
 }
 
-/*! \brief load unaligned XX-bit integer (big-endian encoding) */
+/*! load unaligned XX-bit integer (big-endian encoding) */
 static inline uintXX_t osmo_loadXXbe(const void *p)
 {
 	return osmo_loadXXbe_ext(p, XX / 8);
 }
 
 
-/*! \brief store unaligned XX-bit integer (little-endian encoding) */
+/*! store unaligned XX-bit integer (little-endian encoding) */
 static inline void osmo_storeXXle(uintXX_t x, void *p)
 {
 	osmo_storeXXle_ext(x, p, XX / 8);
 }
 
-/*! \brief store unaligned XX-bit integer (big-endian encoding) */
+/*! store unaligned XX-bit integer (big-endian encoding) */
 static inline void osmo_storeXXbe(uintXX_t x, void *p)
 {
 	osmo_storeXXbe_ext(x, p, XX / 8);
diff --git a/include/osmocom/core/bitcomp.h b/include/osmocom/core/bitcomp.h
index e87c0e1..a184a1c 100644
--- a/include/osmocom/core/bitcomp.h
+++ b/include/osmocom/core/bitcomp.h
@@ -27,7 +27,7 @@
  */
 
 /*! \file bitcomp.h
- *  \brief Osmocom bit compression routines
+ *  Osmocom bit compression routines
  */
 
 #include <stdint.h>
diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h
index 5535920..61af716 100644
--- a/include/osmocom/core/bits.h
+++ b/include/osmocom/core/bits.h
@@ -12,18 +12,18 @@
  */
 
 /*! \file bits.h
- *  \brief Osmocom bit level support code
+ *  Osmocom bit level support code
  *
  *  NOTE on the endianess of pbit_t:
  *  Bits in a pbit_t are ordered MSB first, i.e. 0x80 is the first bit.
  *  Bit i in a pbit_t array is array[i/8] & (1<<(7-i%8))
  */
 
-typedef int8_t  sbit_t;		/*!< \brief soft bit (-127...127) */
-typedef uint8_t ubit_t;		/*!< \brief unpacked bit (0 or 1) */
-typedef uint8_t pbit_t;		/*!< \brief packed bis (8 bits in a byte) */
+typedef int8_t  sbit_t;		/*!< soft bit (-127...127) */
+typedef uint8_t ubit_t;		/*!< unpacked bit (0 or 1) */
+typedef uint8_t pbit_t;		/*!< packed bis (8 bits in a byte) */
 
-/*! \brief determine how many bytes we would need for \a num_bits packed bits
+/*! determine how many bytes we would need for \a num_bits packed bits
  *  \param[in] num_bits Number of packed bits
  *  \returns number of bytes needed for \a num_bits packed bits
  */
@@ -81,31 +81,31 @@
 
 /* BIT REVERSAL */
 
-/*! \brief bit-reversal mode for osmo_bit_reversal() */
+/*! bit-reversal mode for osmo_bit_reversal() */
 enum osmo_br_mode {
-	/*! \brief reverse all bits in a 32bit dword */
+	/*! reverse all bits in a 32bit dword */
 	OSMO_BR_BITS_IN_DWORD	= 31,
-	/*! \brief reverse byte order in a 32bit dword */
+	/*! reverse byte order in a 32bit dword */
 	OSMO_BR_BYTES_IN_DWORD	= 24,
-	/*! \brief reverse bits of each byte in a 32bit dword */
+	/*! reverse bits of each byte in a 32bit dword */
 	OSMO_BR_BITS_IN_BYTE	= 7,
-	/*! \brief swap the two 16bit words in a 32bit dword */
+	/*! swap the two 16bit words in a 32bit dword */
 	OSMO_BR_WORD_SWAP	= 16,
 };
 
-/*! \brief generic bit reversal function */
+/*! generic bit reversal function */
 uint32_t osmo_bit_reversal(uint32_t x, enum osmo_br_mode k);
 
-/* \brief reverse the bits within each byte of a 32bit word */
+/* reverse the bits within each byte of a 32bit word */
 uint32_t osmo_revbytebits_32(uint32_t x);
 
-/* \brief reverse the bits within a byte */
+/* reverse the bits within a byte */
 uint32_t osmo_revbytebits_8(uint8_t x);
 
-/* \brief reverse the bits of each byte in a given buffer */
+/* reverse the bits of each byte in a given buffer */
 void osmo_revbytebits_buf(uint8_t *buf, int len);
 
-/*! \brief left circular shift
+/*! left circular shift
  *  \param[in] in The 16 bit unsigned integer to be rotated
  *  \param[in] shift Number of bits to shift \a in to, [0;16] bits
  *  \returns shifted value
diff --git a/include/osmocom/core/bitvec.h b/include/osmocom/core/bitvec.h
index 6944770..9187ce2 100644
--- a/include/osmocom/core/bitvec.h
+++ b/include/osmocom/core/bitvec.h
@@ -29,7 +29,7 @@
  */
 
 /*! \file bitvec.h
- *  \brief Osmocom bit vector abstraction
+ *  Osmocom bit vector abstraction
  *
  *  These functions assume a MSB (most significant bit) first layout of the
  *  bits, so that for instance the 5 bit number abcde (a is MSB) can be
@@ -44,22 +44,22 @@
 #include <osmocom/core/talloc.h>
 #include <stdbool.h>
 
-/*! \brief A single GSM bit
+/*! A single GSM bit
  *
  * In GSM mac blocks, every bit can be 0 or 1, or L or H.  L/H are
  * defined relative to the 0x2b padding pattern */
 enum bit_value {
-	ZERO	= 0, 	/*!< \brief A zero (0) bit */
-	ONE	= 1,	/*!< \brief A one (1) bit */
-	L	= 2,	/*!< \brief A CSN.1 "L" bit */
-	H	= 3,	/*!< \brief A CSN.1 "H" bit */
+	ZERO	= 0, 	/*!< A zero (0) bit */
+	ONE	= 1,	/*!< A one (1) bit */
+	L	= 2,	/*!< A CSN.1 "L" bit */
+	H	= 3,	/*!< A CSN.1 "H" bit */
 };
 
-/*! \brief structure describing a bit vector */
+/*! structure describing a bit vector */
 struct bitvec {
-	unsigned int cur_bit;	/*!< \brief cursor to the next unused bit */
-	unsigned int data_len;	/*!< \brief length of data array in bytes */
-	uint8_t *data;		/*!< \brief pointer to data array */
+	unsigned int cur_bit;	/*!< cursor to the next unused bit */
+	unsigned int data_len;	/*!< length of data array in bytes */
+	uint8_t *data;		/*!< pointer to data array */
 };
 
 enum bit_value bitvec_get_bit_pos(const struct bitvec *bv, unsigned int bitnr);
diff --git a/include/osmocom/core/byteswap.h b/include/osmocom/core/byteswap.h
index 1f09c2b..4274b8f 100644
--- a/include/osmocom/core/byteswap.h
+++ b/include/osmocom/core/byteswap.h
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include <osmocom/core/endian.h>
 
-/*! \brief byte-swap a 32bit word
+/*! byte-swap a 32bit word
  *  \param[in] in to be swapped 32bit word
  *  \returns byte-swapped 32bit word */
 static inline uint32_t osmo_swab32(uint32_t in)
@@ -17,7 +17,7 @@
 	return out;
 }
 
-/*! \brief byte-swap a 16bit word
+/*! byte-swap a 16bit word
  *  \param[in] in to be swapped 16bit word
  *  \returns byte-swapped 16bit word */
 static inline uint16_t osmo_swab16(uint16_t in)
diff --git a/include/osmocom/core/conv.h b/include/osmocom/core/conv.h
index e7f6bd6..1888fe1 100644
--- a/include/osmocom/core/conv.h
+++ b/include/osmocom/core/conv.h
@@ -34,7 +34,7 @@
 
 #include <osmocom/core/bits.h>
 
-/*! \brief possibe termination types
+/*! possibe termination types
  *
  *  The termination type will determine which state the encoder/decoder
  *  can start/end with. This is mostly taken care of in the high level API
@@ -42,31 +42,31 @@
  *  proper calls yourself.
  */
 enum osmo_conv_term {
-	CONV_TERM_FLUSH = 0,	/*!< \brief Flush encoder state */
-	CONV_TERM_TRUNCATION,	/*!< \brief Direct truncation */
-	CONV_TERM_TAIL_BITING,	/*!< \brief Tail biting */
+	CONV_TERM_FLUSH = 0,	/*!< Flush encoder state */
+	CONV_TERM_TRUNCATION,	/*!< Direct truncation */
+	CONV_TERM_TAIL_BITING,	/*!< Tail biting */
 };
 
-/*! \brief structure describing a given convolutional code
+/*! structure describing a given convolutional code
  *
  *  The only required fields are N,K and the next_output/next_state arrays. The
  *  other can be left to default value of zero depending on what the code does.
  *  If 'len' is left at 0 then only the low level API can be used.
  */
 struct osmo_conv_code {
-	int N;				/*!< \brief Inverse of code rate */
-	int K;				/*!< \brief Constraint length */
-	int len;			/*!< \brief # of data bits */
+	int N;				/*!< Inverse of code rate */
+	int K;				/*!< Constraint length */
+	int len;			/*!< # of data bits */
 
-	enum osmo_conv_term term;	/*!< \brief Termination type */
+	enum osmo_conv_term term;	/*!< Termination type */
 
-	const uint8_t (*next_output)[2];/*!< \brief Next output array */
-	const uint8_t (*next_state)[2];	/*!< \brief Next state array  */
+	const uint8_t (*next_output)[2];/*!< Next output array */
+	const uint8_t (*next_state)[2];	/*!< Next state array  */
 
-	const uint8_t *next_term_output;/*!< \brief Flush termination output */
-	const uint8_t *next_term_state;	/*!< \brief Flush termination state  */
+	const uint8_t *next_term_output;/*!< Flush termination output */
+	const uint8_t *next_term_state;	/*!< Flush termination state  */
 
-	const int *puncture;		/*!< \brief Punctured bits indexes */
+	const int *puncture;		/*!< Punctured bits indexes */
 };
 
 
@@ -80,12 +80,12 @@
 
 	/* Low level API */
 
-/*! \brief convolutional encoder state */
+/*! convolutional encoder state */
 struct osmo_conv_encoder {
-	const struct osmo_conv_code *code; /*!< \brief for which code? */
-	int i_idx;	/*!< \brief Next input bit index */
-	int p_idx;	/*!< \brief Current puncture index */
-	uint8_t state;	/*!< \brief Current state */
+	const struct osmo_conv_code *code; /*!< for which code? */
+	int i_idx;	/*!< Next input bit index */
+	int p_idx;	/*!< Current puncture index */
+	uint8_t state;	/*!< Current state */
 };
 
 void osmo_conv_encode_init(struct osmo_conv_encoder *encoder,
@@ -105,20 +105,20 @@
 
 	/* Low level API */
 
-/*! \brief convolutional decoder state */
+/*! convolutional decoder state */
 struct osmo_conv_decoder {
-	const struct osmo_conv_code *code; /*!< \brief for which code? */
+	const struct osmo_conv_code *code; /*!< for which code? */
 
-	int n_states;		/*!< \brief number of states */
+	int n_states;		/*!< number of states */
 
-	int len;		/*!< \brief Max o_idx (excl. termination) */
+	int len;		/*!< Max o_idx (excl. termination) */
 
-	int o_idx;		/*!< \brief output index */
-	int p_idx;		/*!< \brief puncture index */
+	int o_idx;		/*!< output index */
+	int p_idx;		/*!< puncture index */
 
-	unsigned int *ae;	/*!< \brief accumulated error */
-	unsigned int *ae_next;	/*!< \brief next accumulated error (tmp in scan) */
-	uint8_t *state_history;	/*!< \brief state history [len][n_states] */
+	unsigned int *ae;	/*!< accumulated error */
+	unsigned int *ae_next;	/*!< next accumulated error (tmp in scan) */
+	uint8_t *state_history;	/*!< state history [len][n_states] */
 };
 
 void osmo_conv_decode_init(struct osmo_conv_decoder *decoder,
diff --git a/include/osmocom/core/crcXXgen.h.tpl b/include/osmocom/core/crcXXgen.h.tpl
index 164f720..4718809 100644
--- a/include/osmocom/core/crcXXgen.h.tpl
+++ b/include/osmocom/core/crcXXgen.h.tpl
@@ -35,12 +35,12 @@
 #include <osmocom/core/bits.h>
 
 
-/*! \brief structure describing a given CRC code of max XX bits */
+/*! structure describing a given CRC code of max XX bits */
 struct osmo_crcXXgen_code {
-	int bits;           /*!< \brief Actual number of bits of the CRC */
-	uintXX_t poly;      /*!< \brief Polynom (normal representation, MSB omitted */
-	uintXX_t init;      /*!< \brief Initialization value of the CRC state */
-	uintXX_t remainder; /*!< \brief Remainder of the CRC (final XOR) */
+	int bits;           /*!< Actual number of bits of the CRC */
+	uintXX_t poly;      /*!< Polynom (normal representation, MSB omitted */
+	uintXX_t init;      /*!< Initialization value of the CRC state */
+	uintXX_t remainder; /*!< Remainder of the CRC (final XOR) */
 };
 
 uintXX_t osmo_crcXXgen_compute_bits(const struct osmo_crcXXgen_code *code,
diff --git a/include/osmocom/core/defs.h b/include/osmocom/core/defs.h
index 51ac4e5..88c41b9 100644
--- a/include/osmocom/core/defs.h
+++ b/include/osmocom/core/defs.h
@@ -5,10 +5,10 @@
  */
 
 /*! \file defs.h
- *  \brief General definitions that are meant to be included from header files.
+ *  General definitions that are meant to be included from header files.
  */
 
-/*! \brief Check for gcc and version.
+/*! Check for gcc and version.
  *
  * \note Albeit glibc provides a features.h file that contains a similar
  *       definition (__GNUC_PREREQ), this definition has been copied from there
@@ -23,7 +23,7 @@
 # define OSMO_GNUC_PREREQ(maj, min) 0
 #endif
 
-/*! \brief Set the deprecated attribute with a message.
+/*! Set the deprecated attribute with a message.
  */
 #if defined(__clang__)
 # define _OSMO_HAS_ATTRIBUTE_DEPRECATED __has_attribute(deprecated)
diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h
index f42dd0c..fb182f3 100644
--- a/include/osmocom/core/fsm.h
+++ b/include/osmocom/core/fsm.h
@@ -12,21 +12,21 @@
  */
 
 /*! \file fsm.h
- *  \brief Finite State Machine
+ *  Finite State Machine
  */
 
 struct osmo_fsm_inst;
 
 enum osmo_fsm_term_cause {
-	/*! \brief terminate because parent terminated */
+	/*! terminate because parent terminated */
 	OSMO_FSM_TERM_PARENT,
-	/*! \brief terminate on explicit user request */
+	/*! terminate on explicit user request */
 	OSMO_FSM_TERM_REQUEST,
-	/*! \brief regular termination of process */
+	/*! regular termination of process */
 	OSMO_FSM_TERM_REGULAR,
-	/*! \brief erroneous termination of process */
+	/*! erroneous termination of process */
 	OSMO_FSM_TERM_ERROR,
-	/*! \brief termination due to time-out */
+	/*! termination due to time-out */
 	OSMO_FSM_TERM_TIMEOUT,
 };
 
@@ -37,80 +37,80 @@
 }
 
 
-/*! \brief description of a rule in the FSM */
+/*! description of a rule in the FSM */
 struct osmo_fsm_state {
-	/*! \brief bit-mask of permitted input events for this state */
+	/*! bit-mask of permitted input events for this state */
 	uint32_t in_event_mask;
-	/*! \brief bit-mask to which other states this state may transiton */
+	/*! bit-mask to which other states this state may transiton */
 	uint32_t out_state_mask;
-	/*! \brief human-readable name of this state */
+	/*! human-readable name of this state */
 	const char *name;
-	/*! \brief function to be called for events arriving in this state */
+	/*! function to be called for events arriving in this state */
 	void (*action)(struct osmo_fsm_inst *fi, uint32_t event, void *data);
-	/*! \brief function to be called just after entering the state */
+	/*! function to be called just after entering the state */
 	void (*onenter)(struct osmo_fsm_inst *fi, uint32_t prev_state);
-	/*! \brief function to be called just before leaving the state */
+	/*! function to be called just before leaving the state */
 	void (*onleave)(struct osmo_fsm_inst *fi, uint32_t next_state);
 };
 
-/*! \brief a description of an osmocom finite state machine */
+/*! a description of an osmocom finite state machine */
 struct osmo_fsm {
-	/*! \brief global list */
+	/*! global list */
 	struct llist_head list;
-	/*! \brief list of instances of this FSM */
+	/*! list of instances of this FSM */
 	struct llist_head instances;
-	/*! \brief human readable name */
+	/*! human readable name */
 	const char *name;
-	/*! \brief table of state transition rules */
+	/*! table of state transition rules */
 	const struct osmo_fsm_state *states;
-	/*! \brief number of entries in \ref states */
+	/*! number of entries in \ref states */
 	unsigned int num_states;
-	/*! \brief bit-mask of events permitted in all states */
+	/*! bit-mask of events permitted in all states */
 	uint32_t allstate_event_mask;
-	/*! \brief function pointer to be called for allstate events */
+	/*! function pointer to be called for allstate events */
 	void (*allstate_action)(struct osmo_fsm_inst *fi, uint32_t event, void *data);
-	/*! \brief clean-up function, called during termination */
+	/*! clean-up function, called during termination */
 	void (*cleanup)(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause);
-	/*! \brief timer call-back for states with time-out.
+	/*! timer call-back for states with time-out.
 	 * \returns 1 to request termination, 0 to keep running. */
 	int (*timer_cb)(struct osmo_fsm_inst *fi);
-	/*! \brief logging sub-system for this FSM */
+	/*! logging sub-system for this FSM */
 	int log_subsys;
-	/*! \brief human-readable names of events */
+	/*! human-readable names of events */
 	const struct value_string *event_names;
 };
 
-/*! \brief a single instanceof an osmocom finite state machine */
+/*! a single instanceof an osmocom finite state machine */
 struct osmo_fsm_inst {
-	/*! \brief member in the fsm->instances list */
+	/*! member in the fsm->instances list */
 	struct llist_head list;
-	/*! \brief back-pointer to the FSM of which we are an instance */
+	/*! back-pointer to the FSM of which we are an instance */
 	struct osmo_fsm *fsm;
-	/*! \brief human readable identifier */
+	/*! human readable identifier */
 	const char *id;
-	/*! \brief human readable fully-qualified name */
+	/*! human readable fully-qualified name */
 	const char *name;
-	/*! \brief some private data of this instance */
+	/*! some private data of this instance */
 	void *priv;
-	/*! \brief logging level for this FSM */
+	/*! logging level for this FSM */
 	int log_level;
-	/*! \brief current state of the FSM */
+	/*! current state of the FSM */
 	uint32_t state;
 
-	/*! \brief timer number for states with time-out */
+	/*! timer number for states with time-out */
 	int T;
-	/*! \brief timer back-end for states with time-out */
+	/*! timer back-end for states with time-out */
 	struct osmo_timer_list timer;
 
-	/*! \brief support for fsm-based procedures */
+	/*! support for fsm-based procedures */
 	struct {
-		/*! \brief the parent FSM that has created us */
+		/*! the parent FSM that has created us */
 		struct osmo_fsm_inst *parent;
-		/*! \brief the event we should send upon termination */
+		/*! the event we should send upon termination */
 		uint32_t parent_term_event;
-		/*! \brief a list of children processes */
+		/*! a list of children processes */
 		struct llist_head children;
-		/*! \brief \ref llist_head linked to parent->proc.children */
+		/*! \ref llist_head linked to parent->proc.children */
 		struct llist_head child;
 	} proc;
 };
@@ -156,11 +156,11 @@
 const char *osmo_fsm_inst_name(struct osmo_fsm_inst *fi);
 const char *osmo_fsm_state_name(struct osmo_fsm *fsm, uint32_t state);
 
-/*! \brief return the name of the state the FSM instance is currently in. */
+/*! return the name of the state the FSM instance is currently in. */
 static inline const char *osmo_fsm_inst_state_name(struct osmo_fsm_inst *fi)
 { return osmo_fsm_state_name(fi->fsm, fi->state); }
 
-/*! \brief perform a state change of the given FSM instance
+/*! perform a state change of the given FSM instance
  *
  *  This is a macro that calls _osmo_fsm_inst_state_chg() with the given
  *  parameters as well as the caller's source file and line number for logging
@@ -173,7 +173,7 @@
 			     unsigned long timeout_secs, int T,
 			     const char *file, int line);
 
-/*! \brief dispatch an event to an osmocom finite state machine instance
+/*! dispatch an event to an osmocom finite state machine instance
  *
  *  This is a macro that calls _osmo_fsm_inst_dispatch() with the given
  *  parameters as well as the caller's source file and line number for logging
@@ -184,7 +184,7 @@
 int _osmo_fsm_inst_dispatch(struct osmo_fsm_inst *fi, uint32_t event, void *data,
 			    const char *file, int line);
 
-/*! \brief Terminate FSM instance with given cause
+/*! Terminate FSM instance with given cause
  *
  *  This is a macro that calls _osmo_fsm_inst_term() with the given parameters
  *  as well as the caller's source file and line number for logging purposes.
@@ -196,7 +196,7 @@
 			 enum osmo_fsm_term_cause cause, void *data,
 			 const char *file, int line);
 
-/*! \brief Terminate all child FSM instances of an FSM instance.
+/*! Terminate all child FSM instances of an FSM instance.
  *
  *  This is a macro that calls _osmo_fsm_inst_term_children() with the given
  *  parameters as well as the caller's source file and line number for logging
diff --git a/include/osmocom/core/gsmtap.h b/include/osmocom/core/gsmtap.h
index f9d6f0a..0dc25bb 100644
--- a/include/osmocom/core/gsmtap.h
+++ b/include/osmocom/core/gsmtap.h
@@ -238,7 +238,7 @@
 };
 
 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
-/*! \brief Structure of the GTMTAP pseudo-header */
+/*! Structure of the GTMTAP pseudo-header */
 struct gsmtap_hdr {
 	uint8_t version;	/*!< version, set to 0x01 currently */
 	uint8_t hdr_len;	/*!< length in number of 32bit words */
@@ -258,7 +258,7 @@
 
 } __attribute__((packed));
 
-/*! \brief Structure of the GTMTAP libosmocore logging header */
+/*! Structure of the GTMTAP libosmocore logging header */
 struct gsmtap_osmocore_log_hdr {
 	struct {
 		uint32_t sec;
diff --git a/include/osmocom/core/gsmtap_util.h b/include/osmocom/core/gsmtap_util.h
index 2e3d068..b60257e 100644
--- a/include/osmocom/core/gsmtap_util.h
+++ b/include/osmocom/core/gsmtap_util.h
@@ -19,14 +19,14 @@
 			    uint8_t ss, uint32_t fn, int8_t signal_dbm,
 			    uint8_t snr, const uint8_t *data, unsigned int len);
 
-/*! \brief one gsmtap instance */
+/*! one gsmtap instance */
 struct gsmtap_inst {
-	int ofd_wq_mode;	/*!< \brief wait queue mode? */
-	struct osmo_wqueue wq;	/*!< \brief the wait queue */
-	struct osmo_fd sink_ofd;/*!< \brief file descriptor */
+	int ofd_wq_mode;	/*!< wait queue mode? */
+	struct osmo_wqueue wq;	/*!< the wait queue */
+	struct osmo_fd sink_ofd;/*!< file descriptor */
 };
 
-/*! \brief obtain the file descriptor associated with a gsmtap instance
+/*! obtain the file descriptor associated with a gsmtap instance
  *  \param[in] gti GSMTAP instance
  *  \returns file descriptor of GSMTAP instance */
 static inline int gsmtap_inst_fd(struct gsmtap_inst *gti)
diff --git a/include/osmocom/core/linuxlist.h b/include/osmocom/core/linuxlist.h
index 7d85077..5098c5f 100644
--- a/include/osmocom/core/linuxlist.h
+++ b/include/osmocom/core/linuxlist.h
@@ -7,7 +7,7 @@
 /*!
  * \file linuxlist.h
  *
- * \brief Simple doubly linked list implementation.
+ * Simple doubly linked list implementation.
  *
  * Some of the internal functions ("__xxx") are useful when
  * manipulating whole llists rather than single entries, as
@@ -24,7 +24,7 @@
 
 static inline void prefetch(const void *x) {;}
 
-/*! \brief cast a member of a structure out to the containing structure
+/*! cast a member of a structure out to the containing structure
  *
  * \param[in] ptr the pointer to the member.
  * \param[in] type the type of the container struct this is embedded in.
@@ -43,15 +43,15 @@
 #define LLIST_POISON1  ((void *) 0x00100100)
 #define LLIST_POISON2  ((void *) 0x00200200)
 
-/*! \brief (double) linked list header structure */
+/*! (double) linked list header structure */
 struct llist_head {
-	/*! \brief Pointer to next and previous item */
+	/*! Pointer to next and previous item */
 	struct llist_head *next, *prev;
 };
 
 #define LLIST_HEAD_INIT(name) { &(name), &(name) }
 
-/*! \brief define a statically-initialized \ref llist_head
+/*! define a statically-initialized \ref llist_head
  *  \param[in] name Variable name
  *
  * This is a helper macro that will define a named variable of type
@@ -59,12 +59,12 @@
 #define LLIST_HEAD(name) \
 	struct llist_head name = LLIST_HEAD_INIT(name)
 
-/*! \brief initialize a \ref llist_head to point back to self */
+/*! initialize a \ref llist_head to point back to self */
 #define INIT_LLIST_HEAD(ptr) do { \
 	(ptr)->next = (ptr); (ptr)->prev = (ptr); \
 } while (0)
 
-/*! \brief Insert a new entry between two known consecutive entries. 
+/*! Insert a new entry between two known consecutive entries. 
  *
  * This is only for internal llist manipulation where we know
  * the prev/next entries already!
@@ -79,7 +79,7 @@
 	prev->next = _new;
 }
 
-/*! \brief add a new entry into a linked list (at head)
+/*! add a new entry into a linked list (at head)
  *  \param _new New entry to be added
  *  \param head \ref llist_head to add it after
  *
@@ -91,7 +91,7 @@
 	__llist_add(_new, head, head->next);
 }
 
-/*! \brief add a new entry into a linked list (at tail)
+/*! add a new entry into a linked list (at tail)
  *  \param _new  New entry to be added
  *  \param head  Head of linked list to whose tail we shall add \a _new
  *
@@ -116,7 +116,7 @@
 	prev->next = next;
 }
 
-/*! \brief Delete entry from linked list
+/*! Delete entry from linked list
  *  \param entry  The element to delete from the llist
  *
  * Note: llist_empty on entry does not return true after this, the entry is
@@ -129,7 +129,7 @@
 	entry->prev = (struct llist_head *)LLIST_POISON2;
 }
 
-/*! \brief Delete entry from linked list and reinitialize it
+/*! Delete entry from linked list and reinitialize it
  *  \param entry  The element to delete from the list
  */
 static inline void llist_del_init(struct llist_head *entry)
@@ -138,7 +138,7 @@
 	INIT_LLIST_HEAD(entry); 
 }
 
-/*! \brief Delete from one llist and add as another's head
+/*! Delete from one llist and add as another's head
  *  \param llist The entry to move
  *  \param head	The head that will precede our entry
  */
@@ -148,7 +148,7 @@
         llist_add(llist, head);
 }
 
-/*! \brief Delete from one llist and add as another's tail
+/*! Delete from one llist and add as another's tail
  *  \param llist The entry to move
  *  \param head The head that will follow our entry
  */
@@ -159,7 +159,7 @@
         llist_add_tail(llist, head);
 }
 
-/*! \brief Test whether a linked list is empty
+/*! Test whether a linked list is empty
  *  \param[in] head  The llist to test.
  *  \returns 1 if the list is empty, 0 otherwise
  */
@@ -182,7 +182,7 @@
 	at->prev = last;
 }
 
-/*! \brief Join two llists
+/*! Join two llists
  *  \param llist The new linked list to add
  *  \param head The place to add \a llist in the other list
  */
@@ -192,7 +192,7 @@
 		__llist_splice(llist, head);
 }
 
-/*! \brief join two llists and reinitialise the emptied llist.
+/*! join two llists and reinitialise the emptied llist.
  * \param llist The new linked list to add.
  * \param head  The place to add it in the first llist.
  *
@@ -207,7 +207,7 @@
 	}
 }
 
-/*! \brief Get the struct containing this list entry
+/*! Get the struct containing this list entry
  *  \param ptr The \ref llist_head pointer
  *  \param type The type of the struct this is embedded in
  *  \param @member The name of the \ref llist_head within the struct
@@ -215,7 +215,7 @@
 #define llist_entry(ptr, type, member) \
 	container_of(ptr, type, member)
 
-/*! \brief Get the first element from a list
+/*! Get the first element from a list
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the list_head within the struct.
@@ -225,7 +225,7 @@
 #define llist_first_entry(ptr, type, member) \
 	llist_entry((ptr)->next, type, member)
 
-/*! \brief Get the last element from a list
+/*! Get the last element from a list
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the llist_head within the struct.
@@ -235,7 +235,7 @@
 #define llist_last_entry(ptr, type, member) \
 	llist_entry((ptr)->prev, type, member)
 
-/*! \brief Get the first element from a list, or NULL
+/*! Get the first element from a list, or NULL
  *  \param ptr    the list head to take the element from.
  *  \param type   the type of the struct this is embedded in.
  *  \param member the name of the list_head within the struct.
@@ -245,7 +245,7 @@
 #define llist_first_entry_or_null(ptr, type, member) \
 	(!llist_empty(ptr) ? llist_first_entry(ptr, type, member) : NULL)
 
-/*! \brief Iterate over a linked list
+/*! Iterate over a linked list
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  */
@@ -253,7 +253,7 @@
 	for (pos = (head)->next, prefetch(pos->next); pos != (head); \
         	pos = pos->next, prefetch(pos->next))
 
-/*! \brief Iterate over a llist (no prefetch)
+/*! Iterate over a llist (no prefetch)
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  *
@@ -265,7 +265,7 @@
 #define __llist_for_each(pos, head) \
 	for (pos = (head)->next; pos != (head); pos = pos->next)
 
-/*! \brief Iterate over a llist backwards
+/*! Iterate over a llist backwards
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param head The head of the list over which to iterate
  */
@@ -273,7 +273,7 @@
 	for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
         	pos = pos->prev, prefetch(pos->prev))
 
-/*! \brief Iterate over a list; safe against removal of llist entry
+/*! Iterate over a list; safe against removal of llist entry
  *  \param pos 	The \ref llist_head to use as a loop counter
  *  \param n Another \ref llist_head to use as temporary storage
  *  \param head The head of the list over which to iterate
@@ -282,7 +282,7 @@
 	for (pos = (head)->next, n = pos->next; pos != (head); \
 		pos = n, n = pos->next)
 
-/*! \brief Iterate over llist of given type
+/*! Iterate over llist of given type
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
  *  \param member The name of the \ref llist_head within struct \a pos
@@ -294,7 +294,7 @@
 	     pos = llist_entry(pos->member.next, typeof(*pos), member),	\
 		     prefetch(pos->member.next))
 
-/*! \brief Iterate backwards over llist of given type.
+/*! Iterate backwards over llist of given type.
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
  *  \param member The name of the \ref llist_head within struct \a pos
@@ -306,7 +306,7 @@
 	     pos = llist_entry(pos->member.prev, typeof(*pos), member),	\
 		     prefetch(pos->member.prev))
 
-/*! \brief iterate over llist of given type continuing after existing
+/*! iterate over llist of given type continuing after existing
  * point
  *  \param pos The 'type *' to use as a loop counter
  *  \param head The head of the list over which to iterate
@@ -319,7 +319,7 @@
 	     pos = llist_entry(pos->member.next, typeof(*pos), member),	\
 		     prefetch(pos->member.next))
 
-/*! \brief iterate over llist of given type, safe against removal of
+/*! iterate over llist of given type, safe against removal of
  * non-consecutive(!) llist entries
  *  \param pos The 'type *' to use as a loop counter
  *  \param n Another type * to use as temporary storage
@@ -381,7 +381,7 @@
 	for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \
         	(pos) = (pos)->next, ({ smp_read_barrier_depends(); 0;}), prefetch((pos)->next))
 
-/*! \brief count nr of llist items by iterating.
+/*! count nr of llist items by iterating.
  *  \param head The llist head to count items of.
  *  \returns Number of items.
  *
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 7af0ad2..4721713 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -13,15 +13,15 @@
 #include <osmocom/core/defs.h>
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Maximum number of logging contexts */
+/*! Maximum number of logging contexts */
 #define LOG_MAX_CTX		8
-/*! \brief Maximum number of logging filters */
+/*! Maximum number of logging filters */
 #define LOG_MAX_FILTERS	8
 
 #define DEBUG
 
 #ifdef DEBUG
-/*! \brief Log a debug message through the Osmocom logging framework
+/*! Log a debug message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] fmt format string
  *  \param[in] args variable argument list
@@ -39,7 +39,7 @@
 
 void logp(int subsys, const char *file, int line, int cont, const char *format, ...) OSMO_DEPRECATED("Use DEBUGP* macros instead");
 
-/*! \brief Log a new message through the Osmocom logging framework
+/*! Log a new message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] level logging level (e.g. \ref LOGL_NOTICE)
  *  \param[in] fmt format string
@@ -48,7 +48,7 @@
 #define LOGP(ss, level, fmt, args...) \
 	LOGPSRC(ss, level, NULL, 0, fmt, ## args)
 
-/*! \brief Continue a log message through the Osmocom logging framework
+/*! Continue a log message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
  *  \param[in] level logging level (e.g. \ref LOGL_NOTICE)
  *  \param[in] fmt format string
@@ -60,7 +60,7 @@
 			logp2(ss, level, __BASE_FILE__, __LINE__, 1, fmt, ##args); \
 	} while(0)
 
-/*! \brief Log through the Osmocom logging framework with explicit source.
+/*! Log through the Osmocom logging framework with explicit source.
  *  If caller_file is passed as NULL, __BASE_FILE__ and __LINE__ are used
  *  instead of caller_file and caller_line (so that this macro here defines
  *  both cases in the same place, and to catch cases where callers fail to pass
@@ -82,12 +82,12 @@
 		}\
 	} while(0)
 
-/*! \brief different log levels */
-#define LOGL_DEBUG	1	/*!< \brief debugging information */
-#define LOGL_INFO	3	/*!< \brief general information */
-#define LOGL_NOTICE	5	/*!< \brief abnormal/unexpected condition */
-#define LOGL_ERROR	7	/*!< \brief error condition, requires user action */
-#define LOGL_FATAL	8	/*!< \brief fatal, program aborted */
+/*! different log levels */
+#define LOGL_DEBUG	1	/*!< debugging information */
+#define LOGL_INFO	3	/*!< general information */
+#define LOGL_NOTICE	5	/*!< abnormal/unexpected condition */
+#define LOGL_ERROR	7	/*!< error condition, requires user action */
+#define LOGL_FATAL	8	/*!< fatal, program aborted */
 
 /* logging levels defined by the library itself */
 #define DLGLOBAL	-1	/*!< global logging */
@@ -114,7 +114,7 @@
 	uint8_t enabled;	/*!< is logging enabled? */
 };
 
-/*! \brief Information regarding one logging category */
+/*! Information regarding one logging category */
 struct log_info_cat {
 	const char *name;		/*!< name of category */
 	const char *color;		/*!< color string for cateyory */
@@ -123,12 +123,12 @@
 	uint8_t enabled;		/*!< is this category enabled or not */
 };
 
-/*! \brief Log context information, passed to filter */
+/*! Log context information, passed to filter */
 struct log_context {
 	void *ctx[LOG_MAX_CTX+1];
 };
 
-/*! \brief Indexes to indicate the object currently acted upon.
+/*! Indexes to indicate the object currently acted upon.
  * Array indexes for the global \a log_context array. */
 enum log_ctx_index {
 	LOG_CTX_GB_NSVC,
@@ -138,7 +138,7 @@
 	_LOG_CTX_COUNT
 };
 
-/*! \brief Indexes to indicate objects that should be logged.
+/*! Indexes to indicate objects that should be logged.
  * Array indexes to log_target->filter_data and bit indexes for
  * log_target->filter_map. */
 enum log_filter_index {
@@ -150,18 +150,18 @@
 	_LOG_FLT_COUNT
 };
 
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define LOG_FILTER_ALL (1<<LOG_FLT_ALL)
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define GPRS_CTX_NSVC LOG_CTX_GB_NSVC
-/*! \brief Compatibility with older libosmocore versions */
+/*! Compatibility with older libosmocore versions */
 #define GPRS_CTX_BVC LOG_CTX_GB_BVC
-/*! \brief Indexes to indicate the object currently acted upon.
+/*! Indexes to indicate the object currently acted upon.
  * Array indexes for the global \a log_context array. */
 
 struct log_target;
 
-/*! \brief Log filter function */
+/*! Log filter function */
 typedef int log_filter(const struct log_context *ctx,
 		       struct log_target *target);
 
@@ -177,60 +177,60 @@
 			      const struct log_info *info,
 			      const struct log_target *tgt);
 
-/*! \brief Logging configuration, passed to \ref log_init */
+/*! Logging configuration, passed to \ref log_init */
 struct log_info {
-	/* \brief filter callback function */
+	/* filter callback function */
 	log_filter *filter_fn;
 
-	/*! \brief per-category information */
+	/*! per-category information */
 	const struct log_info_cat *cat;
-	/*! \brief total number of categories */
+	/*! total number of categories */
 	unsigned int num_cat;
-	/*! \brief total number of user categories (not library) */
+	/*! total number of user categories (not library) */
 	unsigned int num_cat_user;
 
-	/*! \brief filter saving function */
+	/*! filter saving function */
 	log_save_filters *save_fn;
-	/*! \brief filter saving function */
+	/*! filter saving function */
 	log_print_filters *print_fn;
 };
 
-/*! \brief Type of logging target */
+/*! Type of logging target */
 enum log_target_type {
-	LOG_TGT_TYPE_VTY,	/*!< \brief VTY logging */
-	LOG_TGT_TYPE_SYSLOG,	/*!< \brief syslog based logging */
-	LOG_TGT_TYPE_FILE,	/*!< \brief text file logging */
-	LOG_TGT_TYPE_STDERR,	/*!< \brief stderr logging */
-	LOG_TGT_TYPE_STRRB,	/*!< \brief osmo_strrb-backed logging */
-	LOG_TGT_TYPE_GSMTAP,	/*!< \brief GSMTAP network logging */
+	LOG_TGT_TYPE_VTY,	/*!< VTY logging */
+	LOG_TGT_TYPE_SYSLOG,	/*!< syslog based logging */
+	LOG_TGT_TYPE_FILE,	/*!< text file logging */
+	LOG_TGT_TYPE_STDERR,	/*!< stderr logging */
+	LOG_TGT_TYPE_STRRB,	/*!< osmo_strrb-backed logging */
+	LOG_TGT_TYPE_GSMTAP,	/*!< GSMTAP network logging */
 };
 
-/*! \brief structure representing a logging target */
+/*! structure representing a logging target */
 struct log_target {
-        struct llist_head entry;		/*!< \brief linked list */
+        struct llist_head entry;		/*!< linked list */
 
-	/*! \brief Internal data for filtering */
+	/*! Internal data for filtering */
 	int filter_map;
-	/*! \brief Internal data for filtering */
+	/*! Internal data for filtering */
 	void *filter_data[LOG_MAX_FILTERS+1];
 
-	/*! \brief logging categories */
+	/*! logging categories */
 	struct log_category *categories;
 
-	/*! \brief global log level */
+	/*! global log level */
 	uint8_t loglevel;
-	/*! \brief should color be used when printing log messages? */
+	/*! should color be used when printing log messages? */
 	unsigned int use_color:1;
-	/*! \brief should log messages be prefixed with a timestamp? */
+	/*! should log messages be prefixed with a timestamp? */
 	unsigned int print_timestamp:1;
-	/*! \brief should log messages be prefixed with a filename? */
+	/*! should log messages be prefixed with a filename? */
 	unsigned int print_filename:1;
-	/*! \brief should log messages be prefixed with a category name? */
+	/*! should log messages be prefixed with a category name? */
 	unsigned int print_category:1;
-	/*! \brief should log messages be prefixed with an extended timestamp? */
+	/*! should log messages be prefixed with an extended timestamp? */
 	unsigned int print_ext_timestamp:1;
 
-	/*! \brief the type of this log taget */
+	/*! the type of this log taget */
 	enum log_target_type type;
 
 	union {
@@ -259,7 +259,7 @@
 		} tgt_gsmtap;
 	};
 
-	/*! \brief call-back function to be called when the logging framework
+	/*! call-back function to be called when the logging framework
 	 *	   wants to log a fully formatted string
 	 *  \param[in] target logging target
 	 *  \param[in] level log level of currnet message
@@ -268,7 +268,7 @@
         void (*output) (struct log_target *target, unsigned int level,
 			const char *string);
 
-	/*! \brief alternative call-back function to which the logging
+	/*! alternative call-back function to which the logging
 	 *	   framework passes the unfortmatted input arguments,
 	 *	   i.e. bypassing the internal string formatter
 	 *  \param[in] target logging target
diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h
index f5dd323..7fad943 100644
--- a/include/osmocom/core/msgb.h
+++ b/include/osmocom/core/msgb.h
@@ -33,33 +33,33 @@
 
 #define MSGB_DEBUG
 
-/*! \brief Osmocom message buffer */
+/*! Osmocom message buffer */
 struct msgb {
-	struct llist_head list; /*!< \brief linked list header */
+	struct llist_head list; /*!< linked list header */
 
 
 	/* Part of which TRX logical channel we were received / transmitted */
 	/* FIXME: move them into the control buffer */
 	union {
-		void *dst; /*!< \brief reference of origin/destination */
+		void *dst; /*!< reference of origin/destination */
 		struct gsm_bts_trx *trx;
 	};
-	struct gsm_lchan *lchan; /*!< \brief logical channel */
+	struct gsm_lchan *lchan; /*!< logical channel */
 
-	unsigned char *l1h; /*!< \brief pointer to Layer1 header (if any) */
-	unsigned char *l2h; /*!< \brief pointer to A-bis layer 2 header: OML, RSL(RLL), NS */
-	unsigned char *l3h; /*!< \brief pointer to Layer 3 header. For OML: FOM; RSL: 04.08; GPRS: BSSGP */
-	unsigned char *l4h; /*!< \brief pointer to layer 4 header */
+	unsigned char *l1h; /*!< pointer to Layer1 header (if any) */
+	unsigned char *l2h; /*!< pointer to A-bis layer 2 header: OML, RSL(RLL), NS */
+	unsigned char *l3h; /*!< pointer to Layer 3 header. For OML: FOM; RSL: 04.08; GPRS: BSSGP */
+	unsigned char *l4h; /*!< pointer to layer 4 header */
 
-	unsigned long cb[5]; /*!< \brief control buffer */
+	unsigned long cb[5]; /*!< control buffer */
 
-	uint16_t data_len;   /*!< \brief length of underlying data array */
-	uint16_t len;	     /*!< \brief length of bytes used in msgb */
+	uint16_t data_len;   /*!< length of underlying data array */
+	uint16_t len;	     /*!< length of bytes used in msgb */
 
-	unsigned char *head;	/*!< \brief start of underlying memory buffer */
-	unsigned char *tail;	/*!< \brief end of message in buffer */
-	unsigned char *data;	/*!< \brief start of message in buffer */
-	unsigned char _data[0]; /*!< \brief optional immediate data array */
+	unsigned char *head;	/*!< start of underlying memory buffer */
+	unsigned char *tail;	/*!< end of message in buffer */
+	unsigned char *data;	/*!< start of message in buffer */
+	unsigned char _data[0]; /*!< optional immediate data array */
 };
 
 extern struct msgb *msgb_alloc(uint16_t size, const char *name);
@@ -83,16 +83,16 @@
 #define MSGB_ABORT(msg, fmt, args ...)
 #endif
 
-/*! \brief obtain L1 header of msgb */
+/*! obtain L1 header of msgb */
 #define msgb_l1(m)	((void *)(m->l1h))
-/*! \brief obtain L2 header of msgb */
+/*! obtain L2 header of msgb */
 #define msgb_l2(m)	((void *)(m->l2h))
-/*! \brief obtain L3 header of msgb */
+/*! obtain L3 header of msgb */
 #define msgb_l3(m)	((void *)(m->l3h))
-/*! \brief obtain SMS header of msgb */
+/*! obtain SMS header of msgb */
 #define msgb_sms(m)	((void *)(m->l4h))
 
-/*! \brief determine length of L1 message
+/*! determine length of L1 message
  *  \param[in] msgb message buffer
  *  \returns size of L1 message in bytes
  *
@@ -104,7 +104,7 @@
 	return msgb->tail - (uint8_t *)msgb_l1(msgb);
 }
 
-/*! \brief determine length of L2 message
+/*! determine length of L2 message
  *  \param[in] msgb message buffer
  *  \returns size of L2 message in bytes
  *
@@ -116,7 +116,7 @@
 	return msgb->tail - (uint8_t *)msgb_l2(msgb);
 }
 
-/*! \brief determine length of L3 message
+/*! determine length of L3 message
  *  \param[in] msgb message buffer
  *  \returns size of L3 message in bytes
  *
@@ -128,7 +128,7 @@
 	return msgb->tail - (uint8_t *)msgb_l3(msgb);
 }
 
-/*! \brief determine the length of the header
+/*! determine the length of the header
  *  \param[in] msgb message buffer
  *  \returns number of bytes between start of buffer and start of msg
  *
@@ -140,7 +140,7 @@
 	return msgb->len - msgb->data_len;
 }
 
-/*! \brief determine how much tail room is left in msgb
+/*! determine how much tail room is left in msgb
  *  \param[in] msgb message buffer
  *  \returns number of bytes remaining at end of msgb
  *
@@ -152,7 +152,7 @@
 	return (msgb->head + msgb->data_len) - msgb->tail;
 }
 
-/*! \brief determine the amount of headroom in msgb
+/*! determine the amount of headroom in msgb
  *  \param[in] msgb message buffer
  *  \returns number of bytes left ahead of message start in msgb
  *
@@ -164,7 +164,7 @@
 	return (msgb->data - msgb->head);
 }
 
-/*! \brief append data to end of message buffer
+/*! append data to end of message buffer
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to append to message
  *  \returns pointer to start of newly-appended data
@@ -187,7 +187,7 @@
 	return tmp;
 }
 
-/*! \brief append a uint8 value to the end of the message
+/*! append a uint8 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 8bit byte to be appended
  */
@@ -197,7 +197,7 @@
 	space[0] = word & 0xFF;
 }
 
-/*! \brief append a uint16 value to the end of the message
+/*! append a uint16 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 16bit byte to be appended
  */
@@ -207,7 +207,7 @@
 	osmo_store16be(word, space);
 }
 
-/*! \brief append a uint32 value to the end of the message
+/*! append a uint32 value to the end of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 32bit byte to be appended
  */
@@ -217,7 +217,7 @@
 	osmo_store32be(word, space);
 }
 
-/*! \brief remove data from end of message
+/*! remove data from end of message
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to remove from end
  */
@@ -232,7 +232,7 @@
 	return tmp;
 }
 
-/*! \brief remove uint8 from end of message
+/*! remove uint8 from end of message
  *  \param[in] msgb message buffer
  *  \returns 8bit value taken from end of msgb
  */
@@ -242,7 +242,7 @@
 	return space[0];
 }
 
-/*! \brief remove uint16 from end of message
+/*! remove uint16 from end of message
  *  \param[in] msgb message buffer
  *  \returns 16bit value taken from end of msgb
  */
@@ -252,7 +252,7 @@
 	return osmo_load16be(space);
 }
 
-/*! \brief remove uint32 from end of message
+/*! remove uint32 from end of message
  *  \param[in] msgb message buffer
  *  \returns 32bit value taken from end of msgb
  */
@@ -262,7 +262,7 @@
 	return osmo_load32be(space);
 }
 
-/*! \brief prepend (push) some data to start of message
+/*! prepend (push) some data to start of message
  *  \param[in] msgb message buffer
  *  \param[in] len number of bytes to pre-pend
  *  \returns pointer to newly added portion at start of \a msgb
@@ -284,7 +284,7 @@
 	return msgb->data;
 }
 
-/*! \brief prepend a uint8 value to the head of the message
+/*! prepend a uint8 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 8bit byte to be prepended
  */
@@ -294,7 +294,7 @@
 	space[0] = word;
 }
 
-/*! \brief prepend a uint16 value to the head of the message
+/*! prepend a uint16 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 16bit byte to be prepended
  */
@@ -304,7 +304,7 @@
 	osmo_store16be(word, space);
 }
 
-/*! \brief prepend a uint32 value to the head of the message
+/*! prepend a uint32 value to the head of the message
  *  \param[in] msgb message buffer
  *  \param[in] word unsigned 32bit byte to be prepended
  */
@@ -314,7 +314,7 @@
 	osmo_store32be(word, space);
 }
 
-/*! \brief remove (pull) a header from the front of the message buffer
+/*! remove (pull) a header from the front of the message buffer
  *  \param[in] msgb message buffer
  *  \param[in] len number of octets to be pulled
  *  \returns pointer to new start of msgb
@@ -329,7 +329,7 @@
 	return msgb->data += len;
 }
 
-/*! \brief remove (pull) all headers in front of l3h from the message buffer.
+/*! remove (pull) all headers in front of l3h from the message buffer.
  *  \param[in] msgb message buffer with a valid l3h
  *  \returns pointer to new start of msgb (l3h)
  *
@@ -344,7 +344,7 @@
 	return ret;
 }
 
-/*! \brief remove (pull) all headers in front of l2h from the message buffer.
+/*! remove (pull) all headers in front of l2h from the message buffer.
  *  \param[in] msgb message buffer with a valid l2h
  *  \returns pointer to new start of msgb (l2h)
  *
@@ -359,7 +359,7 @@
 	return ret;
 }
 
-/*! \brief remove uint8 from front of message
+/*! remove uint8 from front of message
  *  \param[in] msgb message buffer
  *  \returns 8bit value taken from end of msgb
  */
@@ -369,7 +369,7 @@
 	return space[0];
 }
 
-/*! \brief remove uint16 from front of message
+/*! remove uint16 from front of message
  *  \param[in] msgb message buffer
  *  \returns 16bit value taken from end of msgb
  */
@@ -379,7 +379,7 @@
 	return osmo_load16be(space);
 }
 
-/*! \brief remove uint32 from front of message
+/*! remove uint32 from front of message
  *  \param[in] msgb message buffer
  *  \returns 32bit value taken from end of msgb
  */
@@ -389,7 +389,7 @@
 	return osmo_load32be(space);
 }
 
-/*! \brief Increase headroom of empty msgb, reducing the tailroom
+/*! Increase headroom of empty msgb, reducing the tailroom
  *  \param[in] msg message buffer
  *  \param[in] len amount of extra octets to be reserved as headroom
  *
@@ -406,7 +406,7 @@
 	msg->tail += len;
 }
 
-/*! \brief Trim the msgb to a given absolute length
+/*! Trim the msgb to a given absolute length
  *  \param[in] msg message buffer
  *  \param[in] len new total length of buffer
  *  \returns 0 in case of success, negative in case of error
@@ -424,7 +424,7 @@
 	return 0;
 }
 
-/*! \brief Trim the msgb to a given layer3 length
+/*! Trim the msgb to a given layer3 length
  *  \param[in] msg message buffer
  *  \param[in] l3len new layer3 length
  *  \returns 0 in case of success, negative in case of error
@@ -434,7 +434,7 @@
 	return msgb_trim(msg, (msg->l3h - msg->data) + l3len);
 }
 
-/*! \brief Allocate message buffer with specified headroom
+/*! Allocate message buffer with specified headroom
  *  \param[in] size size in bytes, including headroom
  *  \param[in] headroom headroom in bytes
  *  \param[in] name human-readable name
@@ -455,7 +455,7 @@
 	return msg;
 }
 
-/*! \brief Check a message buffer for consistency
+/*! Check a message buffer for consistency
  *  \param[in] msg message buffer
  *  \returns 0 (false) if inconsistent, != 0 (true) otherwise
  */
diff --git a/include/osmocom/core/panic.h b/include/osmocom/core/panic.h
index 5d575c4..92c557f 100644
--- a/include/osmocom/core/panic.h
+++ b/include/osmocom/core/panic.h
@@ -8,7 +8,7 @@
 
 #include <stdarg.h>
 
-/*! \brief panic handler callback function type */
+/*! panic handler callback function type */
 typedef void (*osmo_panic_handler_t)(const char *fmt, va_list args);
 
 extern void osmo_panic(const char *fmt, ...);
diff --git a/include/osmocom/core/prim.h b/include/osmocom/core/prim.h
index f04e15e..7288ba6 100644
--- a/include/osmocom/core/prim.h
+++ b/include/osmocom/core/prim.h
@@ -12,12 +12,12 @@
 #define OSMO_PRIM(prim, op)	((prim << 8) | (op & 0xFF))
 #define OSMO_PRIM_HDR(oph)	OSMO_PRIM((oph)->primitive, (oph)->operation)
 
-/*! \brief primitive operation */
+/*! primitive operation */
 enum osmo_prim_operation {
-	PRIM_OP_REQUEST,	/*!< \brief request */
-	PRIM_OP_RESPONSE,	/*!< \brief response */
-	PRIM_OP_INDICATION,	/*!< \brief indication */
-	PRIM_OP_CONFIRM,	/*!< \brief confirm */
+	PRIM_OP_REQUEST,	/*!< request */
+	PRIM_OP_RESPONSE,	/*!< response */
+	PRIM_OP_INDICATION,	/*!< indication */
+	PRIM_OP_CONFIRM,	/*!< confirm */
 };
 
 extern const struct value_string osmo_prim_op_names[5];
@@ -28,15 +28,15 @@
 #define _SAP_TETRA_BASE	(0x02 << _SAP_GSM_SHIFT)
 #define _SAP_SS7_BASE	(0x03 << _SAP_GSM_SHIFT)
 
-/*! \brief primitive header */
+/*! primitive header */
 struct osmo_prim_hdr {
-	unsigned int sap;	/*!< \brief Service Access Point */
-	unsigned int primitive;	/*!< \brief Primitive number */
-	enum osmo_prim_operation operation; /*! \brief Primitive Operation */
-	struct msgb *msg;	/*!< \brief \ref msgb containing associated data */
+	unsigned int sap;	/*!< Service Access Point */
+	unsigned int primitive;	/*!< Primitive number */
+	enum osmo_prim_operation operation; /*! Primitive Operation */
+	struct msgb *msg;	/*!< \ref msgb containing associated data */
 };
 
-/*! \brief initialize a primitive header
+/*! initialize a primitive header
  *  \param[in,out] oph primitive header
  *  \param[in] sap Service Access Point
  *  \param[in] primitive Primitive Number
@@ -54,14 +54,14 @@
 	oph->msg = msg;
 }
 
-/*! \brief primitive handler callback type */
+/*! primitive handler callback type */
 typedef int (*osmo_prim_cb)(struct osmo_prim_hdr *oph, void *ctx);
 
-/*! \brief magic value to be used as final record of \ref
+/*! magic value to be used as final record of \ref
  * osmo_prim_event_map */
 #define OSMO_NO_EVENT	0xFFFFFFFF
 
-/*! \brief single entry in a SAP/PRIM/OP -> EVENT map */
+/*! single entry in a SAP/PRIM/OP -> EVENT map */
 struct osmo_prim_event_map {
 	unsigned int sap;	/*!< SAP to match */
 	unsigned int primitive;	/*!< primtiive to match */
diff --git a/include/osmocom/core/rate_ctr.h b/include/osmocom/core/rate_ctr.h
index ebaa7a7..b75967a 100644
--- a/include/osmocom/core/rate_ctr.h
+++ b/include/osmocom/core/rate_ctr.h
@@ -10,60 +10,60 @@
 
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Number of rate counter intervals */
+/*! Number of rate counter intervals */
 #define RATE_CTR_INTV_NUM	4
 
-/*! \brief Rate counter interval */
+/*! Rate counter interval */
 enum rate_ctr_intv {
-	RATE_CTR_INTV_SEC,	/*!< \brief last second */
-	RATE_CTR_INTV_MIN,	/*!< \brief last minute */
-	RATE_CTR_INTV_HOUR,	/*!< \brief last hour */
-	RATE_CTR_INTV_DAY,	/*!< \brief last day */
+	RATE_CTR_INTV_SEC,	/*!< last second */
+	RATE_CTR_INTV_MIN,	/*!< last minute */
+	RATE_CTR_INTV_HOUR,	/*!< last hour */
+	RATE_CTR_INTV_DAY,	/*!< last day */
 };
 
-/*! \brief data we keep for each of the intervals */
+/*! data we keep for each of the intervals */
 struct rate_ctr_per_intv {
-	uint64_t last;		/*!< \brief counter value in last interval */
-	uint64_t rate;		/*!< \brief counter rate */
+	uint64_t last;		/*!< counter value in last interval */
+	uint64_t rate;		/*!< counter rate */
 };
 
-/*! \brief data we keep for each actual value */
+/*! data we keep for each actual value */
 struct rate_ctr {
-	uint64_t current;	/*!< \brief current value */
-	uint64_t previous;	/*!< \brief previous value, used for delta */
-	/*! \brief per-interval data */
+	uint64_t current;	/*!< current value */
+	uint64_t previous;	/*!< previous value, used for delta */
+	/*! per-interval data */
 	struct rate_ctr_per_intv intv[RATE_CTR_INTV_NUM];
 };
 
-/*! \brief rate counter description */
+/*! rate counter description */
 struct rate_ctr_desc {
-	const char *name;	/*!< \brief name of the counter */
-	const char *description;/*!< \brief description of the counter */
+	const char *name;	/*!< name of the counter */
+	const char *description;/*!< description of the counter */
 };
 
-/*! \brief description of a rate counter group */
+/*! description of a rate counter group */
 struct rate_ctr_group_desc {
-	/*! \brief The prefix to the name of all counters in this group */
+	/*! The prefix to the name of all counters in this group */
 	const char *group_name_prefix;
-	/*! \brief The human-readable description of the group */
+	/*! The human-readable description of the group */
 	const char *group_description;
-	/*! \brief The class to which this group belongs */
+	/*! The class to which this group belongs */
 	int class_id;
-	/*! \brief The number of counters in this group */
+	/*! The number of counters in this group */
 	const unsigned int num_ctr;
-	/*! \brief Pointer to array of counter names */
+	/*! Pointer to array of counter names */
 	const struct rate_ctr_desc *ctr_desc;
 };
 
-/*! \brief One instance of a counter group class */
+/*! One instance of a counter group class */
 struct rate_ctr_group {
-	/*! \brief Linked list of all counter groups in the system */
+	/*! Linked list of all counter groups in the system */
 	struct llist_head list;
-	/*! \brief Pointer to the counter group class */
+	/*! Pointer to the counter group class */
 	const struct rate_ctr_group_desc *desc;
-	/*! \brief The index of this ctr_group within its class */
+	/*! The index of this ctr_group within its class */
 	unsigned int idx;
-	/*! \brief Actual counter structures below */
+	/*! Actual counter structures below */
 	struct rate_ctr ctr[0];
 };
 
@@ -78,19 +78,19 @@
 
 void rate_ctr_group_free(struct rate_ctr_group *grp);
 
-/*! \brief Increment the counter by \a inc
+/*! Increment the counter by \a inc
  *  \param ctr \ref rate_ctr to increment
  *  \param inc quantity to increment \a ctr by */
 void rate_ctr_add(struct rate_ctr *ctr, int inc);
 
-/*! \brief Increment the counter by 1
+/*! Increment the counter by 1
  *  \param ctr \ref rate_ctr to increment */
 static inline void rate_ctr_inc(struct rate_ctr *ctr)
 {
 	rate_ctr_add(ctr, 1);
 }
 
-/*! \brief Return the counter difference since the last call to this function */
+/*! Return the counter difference since the last call to this function */
 int64_t rate_ctr_difference(struct rate_ctr *ctr);
 
 int rate_ctr_init(void *tall_ctx);
@@ -104,7 +104,7 @@
 typedef int (*rate_ctr_group_handler_t)(struct rate_ctr_group *, void *);
 
 
-/*! \brief Iterate over all counters
+/*! Iterate over all counters
  *  \param[in] handle_item Call-back function, aborts if rc < 0
  *  \param[in] data Private data handed through to \a handle_counter
  */
diff --git a/include/osmocom/core/select.h b/include/osmocom/core/select.h
index c2b51a4..fe84c5b 100644
--- a/include/osmocom/core/select.h
+++ b/include/osmocom/core/select.h
@@ -8,17 +8,17 @@
  */
 
 /*! \file select.h
- *  \brief select loop abstraction
+ *  select loop abstraction
  */
 
-/*! \brief Indicate interest in reading from the file descriptor */
+/*! Indicate interest in reading from the file descriptor */
 #define BSC_FD_READ	0x0001
-/*! \brief Indicate interest in writing to the file descriptor */
+/*! Indicate interest in writing to the file descriptor */
 #define BSC_FD_WRITE	0x0002
-/*! \brief Indicate interest in exceptions from the file descriptor */
+/*! Indicate interest in exceptions from the file descriptor */
 #define BSC_FD_EXCEPT	0x0004
 
-/*! \brief Structure representing a file dsecriptor */
+/*! Structure representing a file dsecriptor */
 struct osmo_fd {
 	/*! linked list for internal management */
 	struct llist_head list;	
diff --git a/include/osmocom/core/sercomm.h b/include/osmocom/core/sercomm.h
index 5ad1d73..cf15613 100644
--- a/include/osmocom/core/sercomm.h
+++ b/include/osmocom/core/sercomm.h
@@ -8,10 +8,10 @@
  */
 
 /*! \file sercomm.h
- *  \brief Osmocom Sercomm HDLC (de)multiplex
+ *  Osmocom Sercomm HDLC (de)multiplex
  */
 
-/*! \brief A low sercomm_dlci means high priority.  A high DLCI means low priority */
+/*! A low sercomm_dlci means high priority.  A high DLCI means low priority */
 enum sercomm_dlci {
 	SC_DLCI_HIGHEST = 0,
 	SC_DLCI_DEBUG   = 4,
@@ -23,44 +23,44 @@
 };
 
 struct osmo_sercomm_inst;
-/*! \brief call-back function for per-DLC receive handler
+/*! call-back function for per-DLC receive handler
  *  \param[in] sercomm instance on which msg was received
  *  \param[in] dlci DLC Identifier of received msg
  *  \param[in] msg received message that needs to be processed */
 typedef void (*dlci_cb_t)(struct osmo_sercomm_inst *sercomm, uint8_t dlci, struct msgb *msg);
 
-/*! \brief one instance of a sercomm multiplex/demultiplex */
+/*! one instance of a sercomm multiplex/demultiplex */
 struct osmo_sercomm_inst {
-	/*! \brief Has this instance been initialized? */
+	/*! Has this instance been initialized? */
 	int initialized;
-	/*! \brief UART Identifier */
+	/*! UART Identifier */
 	int uart_id;
 
-	/*! \brief transmit side */
+	/*! transmit side */
 	struct {
-		/*! \brief per-DLC queue of pending transmit msgbs */
+		/*! per-DLC queue of pending transmit msgbs */
 		struct llist_head dlci_queues[_SC_DLCI_MAX];
-		/*! \brief msgb currently being transmitted */
+		/*! msgb currently being transmitted */
 		struct msgb *msg;
-		/*! \brief transmit state */
+		/*! transmit state */
 		int state;
-		/*! \brief next to-be-transmitted char in msg */
+		/*! next to-be-transmitted char in msg */
 		uint8_t *next_char;
 	} tx;
 
-	/*! \brief receive side */
+	/*! receive side */
 	struct {
-		/*! \brief per-DLC handler call-back functions */
+		/*! per-DLC handler call-back functions */
 		dlci_cb_t dlci_handler[_SC_DLCI_MAX];
-		/*! \brief msgb allocation size for rx msgs */
+		/*! msgb allocation size for rx msgs */
 		unsigned int msg_size;
-		/*! \brief currently received msgb */
+		/*! currently received msgb */
 		struct msgb *msg;
-		/*! \brief receive state */
+		/*! receive state */
 		int state;
-		/*! \brief DLCI of currently received msgb */
+		/*! DLCI of currently received msgb */
 		uint8_t dlci;
-		/*! \brief CTRL of currently received msgb */
+		/*! CTRL of currently received msgb */
 		uint8_t ctrl;
 	} rx;
 };
@@ -86,7 +86,7 @@
 extern void sercomm_drv_lock(unsigned long *flags);
 extern void sercomm_drv_unlock(unsigned long *flags);
 
-/*! \brief low-level driver routine to request start of transmission
+/*! low-level driver routine to request start of transmission
  *  The Sercomm code calls this function to inform the low-level driver
  *  that some data is pending for transmission, and the low-level driver
  *  should (if not active already) start enabling tx_empty interrupts
@@ -96,14 +96,14 @@
  */
 extern void sercomm_drv_start_tx(struct osmo_sercomm_inst *sercomm);
 
-/*! \brief low-level driver routine to execute baud-rate change
+/*! low-level driver routine to execute baud-rate change
  *  \param[in] sercomm Osmocom sercomm instance for which to change
  *  \param[in] bdrt New Baud-Rate (integer)
  *  \returns 0 on success; negative in case of error
  */
 extern int sercomm_drv_baudrate_chg(struct osmo_sercomm_inst *sercomm, uint32_t bdrt);
 
-/*! \brief Sercomm msgb allocator function */
+/*! Sercomm msgb allocator function */
 static inline struct msgb *osmo_sercomm_alloc_msgb(unsigned int len)
 {
 	return msgb_alloc_headroom(len+4, 4, "sercomm_tx");
diff --git a/include/osmocom/core/signal.h b/include/osmocom/core/signal.h
index 5ed4e15..d7132f9 100644
--- a/include/osmocom/core/signal.h
+++ b/include/osmocom/core/signal.h
@@ -13,7 +13,7 @@
 #define OSMO_SIGNAL_SS_APPS		0
 #define OSMO_SIGNAL_SS_RESERVED		2147483648u
 
-/*! \brief signal subsystems */
+/*! signal subsystems */
 enum {
 	SS_L_GLOBAL		= OSMO_SIGNAL_SS_RESERVED,
 	SS_L_INPUT,
@@ -25,7 +25,7 @@
 #define OSMO_SIGNAL_T_APPS		0
 #define OSMO_SIGNAL_T_RESERVED		2147483648u
 
-/*! \brief signal types. */
+/*! signal types. */
 enum {
 	S_L_GLOBAL_SHUTDOWN	= OSMO_SIGNAL_T_RESERVED,
 };
diff --git a/include/osmocom/core/socket.h b/include/osmocom/core/socket.h
index 09376c3..d6a5662 100644
--- a/include/osmocom/core/socket.h
+++ b/include/osmocom/core/socket.h
@@ -5,7 +5,7 @@
  */
 
 /*! \file socket.h
- *  \brief Osmocom socket convenience functions
+ *  Osmocom socket convenience functions
  */
 
 #include <stdint.h>
diff --git a/include/osmocom/core/stat_item.h b/include/osmocom/core/stat_item.h
index 181b029..957918a 100644
--- a/include/osmocom/core/stat_item.h
+++ b/include/osmocom/core/stat_item.h
@@ -20,49 +20,49 @@
 	int32_t value;
 };
 
-/*! \brief data we keep for each actual value */
+/*! data we keep for each actual value */
 struct osmo_stat_item {
 	const struct osmo_stat_item_desc *desc;
-	/*! \brief the index of the freshest value */
+	/*! the index of the freshest value */
 	int32_t last_value_index;
-	/*! \brief offset to the freshest value in the value fifo */
+	/*! offset to the freshest value in the value fifo */
 	int16_t last_offs;
-	/*! \brief value fifo */
+	/*! value fifo */
 	struct osmo_stat_item_value values[0];
 };
 
-/*! \brief statistics value description */
+/*! statistics value description */
 struct osmo_stat_item_desc {
-	const char *name;	/*!< \brief name of the item */
-	const char *description;/*!< \brief description of the item */
-	const char *unit;	/*!< \brief unit of a value */
-	unsigned int num_values;/*!< \brief number of values to store */
+	const char *name;	/*!< name of the item */
+	const char *description;/*!< description of the item */
+	const char *unit;	/*!< unit of a value */
+	unsigned int num_values;/*!< number of values to store */
 	int32_t default_value;
 };
 
-/*! \brief description of a statistics value group */
+/*! description of a statistics value group */
 struct osmo_stat_item_group_desc {
-	/*! \brief The prefix to the name of all values in this group */
+	/*! The prefix to the name of all values in this group */
 	const char *group_name_prefix;
-	/*! \brief The human-readable description of the group */
+	/*! The human-readable description of the group */
 	const char *group_description;
-	/*! \brief The class to which this group belongs */
+	/*! The class to which this group belongs */
 	int class_id;
-	/*! \brief The number of values in this group */
+	/*! The number of values in this group */
 	const unsigned int num_items;
-	/*! \brief Pointer to array of value names */
+	/*! Pointer to array of value names */
 	const struct osmo_stat_item_desc *item_desc;
 };
 
-/*! \brief One instance of a counter group class */
+/*! One instance of a counter group class */
 struct osmo_stat_item_group {
-	/*! \brief Linked list of all value groups in the system */
+	/*! Linked list of all value groups in the system */
 	struct llist_head list;
-	/*! \brief Pointer to the counter group class */
+	/*! Pointer to the counter group class */
 	const struct osmo_stat_item_group_desc *desc;
-	/*! \brief The index of this value group within its class */
+	/*! The index of this value group within its class */
 	unsigned int idx;
-	/*! \brief Actual counter structures below */
+	/*! Actual counter structures below */
 	struct osmo_stat_item *items[0];
 };
 
@@ -89,7 +89,7 @@
 const struct osmo_stat_item *osmo_stat_item_get_by_name(
 	const struct osmo_stat_item_group *statg, const char *name);
 
-/*! \brief Retrieve the next value from the osmo_stat_item object.
+/*! Retrieve the next value from the osmo_stat_item object.
  * If a new value has been set, it is returned. The idx is used to decide
  * which value to return.
  * On success, *idx is updated to refer to the next unread value. If
@@ -107,13 +107,13 @@
  */
 int osmo_stat_item_get_next(const struct osmo_stat_item *item, int32_t *idx, int32_t *value);
 
-/*! \brief Get the last (freshest) value */
+/*! Get the last (freshest) value */
 static int32_t osmo_stat_item_get_last(const struct osmo_stat_item *item);
 
-/*! \brief Skip all values of the item and update idx accordingly */
+/*! Skip all values of the item and update idx accordingly */
 int osmo_stat_item_discard(const struct osmo_stat_item *item, int32_t *idx);
 
-/*! \brief Skip all values of all items and update idx accordingly */
+/*! Skip all values of all items and update idx accordingly */
 int osmo_stat_item_discard_all(int32_t *idx);
 
 typedef int (*osmo_stat_item_handler_t)(
@@ -121,7 +121,7 @@
 
 typedef int (*osmo_stat_item_group_handler_t)(struct osmo_stat_item_group *, void *);
 
-/*! \brief Iteate over all items
+/*! Iteate over all items
  *  \param[in] handle_item Call-back function, aborts if rc < 0
  *  \param[in] data Private data handed through to \a handle_item
  */
diff --git a/include/osmocom/core/statistics.h b/include/osmocom/core/statistics.h
index 41716cc..5ebb5fc 100644
--- a/include/osmocom/core/statistics.h
+++ b/include/osmocom/core/statistics.h
@@ -1,60 +1,60 @@
 #pragma once
 
 /*! \file statistics.h
- *  \brief Common routines regarding statistics */
+ *  Common routines regarding statistics */
 
 /*! structure representing a single counter */
 struct osmo_counter {
-	struct llist_head list;		/*!< \brief internal list head */
-	const char *name;		/*!< \brief human-readable name */
-	const char *description;	/*!< \brief humn-readable description */
-	unsigned long value;		/*!< \brief current value */
-	unsigned long previous;		/*!< \brief previous value */
+	struct llist_head list;		/*!< internal list head */
+	const char *name;		/*!< human-readable name */
+	const char *description;	/*!< humn-readable description */
+	unsigned long value;		/*!< current value */
+	unsigned long previous;		/*!< previous value */
 };
 
-/*! \brief Decrement counter */
+/*! Decrement counter */
 static inline void osmo_counter_dec(struct osmo_counter *ctr)
 {
 	ctr->value--;
 }
 
-/*! \brief Increment counter */
+/*! Increment counter */
 static inline void osmo_counter_inc(struct osmo_counter *ctr)
 {
 	ctr->value++;
 }
 
-/*! \brief Get current value of counter */
+/*! Get current value of counter */
 static inline unsigned long osmo_counter_get(struct osmo_counter *ctr)
 {
 	return ctr->value;
 }
 
-/*! \brief Reset current value of counter to 0 */
+/*! Reset current value of counter to 0 */
 static inline void osmo_counter_reset(struct osmo_counter *ctr)
 {
 	ctr->value = 0;
 }
 
-/*! \brief Allocate a new counter */
+/*! Allocate a new counter */
 struct osmo_counter *osmo_counter_alloc(const char *name);
 
-/*! \brief Free the specified counter
+/*! Free the specified counter
  *  \param[in] ctr Counter
  */
 void osmo_counter_free(struct osmo_counter *ctr);
 
-/*! \brief Iterate over all counters
+/*! Iterate over all counters
  *  \param[in] handle_counter Call-back function, aborts if rc < 0
  *  \param[in] data Private dtata handed through to \a handle_counter
  */
 int osmo_counters_for_each(int (*handle_counter)(struct osmo_counter *, void *), void *data);
 
-/*! \brief Resolve counter by human-readable name
+/*! Resolve counter by human-readable name
  *  \param[in] name human-readable name of counter
  *  \returns pointer to counter (\ref osmo_counter) or NULL otherwise
  */
 struct osmo_counter *osmo_counter_get_by_name(const char *name);
 
-/*! \brief Return the counter difference since the last call to this function */
+/*! Return the counter difference since the last call to this function */
 int osmo_counter_difference(struct osmo_counter *ctr);
diff --git a/include/osmocom/core/strrb.h b/include/osmocom/core/strrb.h
index 7507cf4..2b4d89f 100644
--- a/include/osmocom/core/strrb.h
+++ b/include/osmocom/core/strrb.h
@@ -24,7 +24,7 @@
  */
 
 /*! \file strrb.h
- *  \brief Osmocom string ringbuffer handling routines
+ *  Osmocom string ringbuffer handling routines
  */
 
 #include <unistd.h>
@@ -33,14 +33,14 @@
 
 #include <osmocom/core/talloc.h>
 
-/*! \brief A structure representing an osmocom string ringbuffer */
+/*! A structure representing an osmocom string ringbuffer */
 
 #define RB_MAX_MESSAGE_SIZE 240
 struct osmo_strrb {
-	uint16_t start;		/*!< \brief index of the first slot */
-	uint16_t end;		/*!< \brief index of the last slot */
-	uint16_t size;		/*!< \brief max number of messages to store */
-	char **buffer;		/*!< \brief storage for messages */
+	uint16_t start;		/*!< index of the first slot */
+	uint16_t end;		/*!< index of the last slot */
+	uint16_t size;		/*!< max number of messages to store */
+	char **buffer;		/*!< storage for messages */
 };
 
 struct osmo_strrb *osmo_strrb_create(TALLOC_CTX * ctx, size_t rb_size);
diff --git a/include/osmocom/core/timer.h b/include/osmocom/core/timer.h
index 48e7d8d..28785db 100644
--- a/include/osmocom/core/timer.h
+++ b/include/osmocom/core/timer.h
@@ -23,7 +23,7 @@
  */
 
 /*! \file timer.h
- *  \brief Osmocom timer handling routines
+ *  Osmocom timer handling routines
  */
 
 #pragma once
@@ -50,15 +50,15 @@
  *        remove the timers.
  *
  */
-/*! \brief A structure representing a single instance of a timer */
+/*! A structure representing a single instance of a timer */
 struct osmo_timer_list {
-	struct rb_node node;	  /*!< \brief rb-tree node header */
-	struct llist_head list;   /*!< \brief internal list header */
-	struct timeval timeout;   /*!< \brief expiration time */
-	unsigned int active  : 1; /*!< \brief is it active? */
+	struct rb_node node;	  /*!< rb-tree node header */
+	struct llist_head list;   /*!< internal list header */
+	struct timeval timeout;   /*!< expiration time */
+	unsigned int active  : 1; /*!< is it active? */
 
-	void (*cb)(void*);	  /*!< \brief call-back called at timeout */
-	void *data;		  /*!< \brief user data for callback */
+	void (*cb)(void*);	  /*!< call-back called at timeout */
+	void *data;		  /*!< user data for callback */
 };
 
 /**
diff --git a/include/osmocom/core/timer_compat.h b/include/osmocom/core/timer_compat.h
index fb2967b..44259af 100644
--- a/include/osmocom/core/timer_compat.h
+++ b/include/osmocom/core/timer_compat.h
@@ -23,7 +23,7 @@
  */
 
 /*! \file timer_compat.h
- *  \brief Compatibility header with some helpers
+ *  Compatibility header with some helpers
  */
 
 #pragma once
diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h
index 1d1ebd8..ce49cbe 100644
--- a/include/osmocom/core/utils.h
+++ b/include/osmocom/core/utils.h
@@ -9,26 +9,26 @@
 
 /*! \file utils.h */
 
-/*! \brief Determine number of elements in an array of static size */
+/*! Determine number of elements in an array of static size */
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-/*! \brief Return the maximum of two specified values */
+/*! Return the maximum of two specified values */
 #define OSMO_MAX(a, b) ((a) >= (b) ? (a) : (b))
-/*! \brief Return the minimum of two specified values */
+/*! Return the minimum of two specified values */
 #define OSMO_MIN(a, b) ((a) >= (b) ? (b) : (a))
-/*! \brief Stringify the contents of a macro, e.g. a port number */
+/*! Stringify the contents of a macro, e.g. a port number */
 #define OSMO_STRINGIFY(x) #x
-/*! \brief Make a value_string entry from an enum value name */
+/*! Make a value_string entry from an enum value name */
 #define OSMO_VALUE_STRING(x) { x, #x }
-/*! \brief Number of bytes necessary to store given BITS */
+/*! Number of bytes necessary to store given BITS */
 #define OSMO_BYTES_FOR_BITS(BITS) ((BITS + 8 - 1) / 8)
 
 #include <stdint.h>
 #include <stdio.h>
 
-/*! \brief A mapping between human-readable string and numeric value */
+/*! A mapping between human-readable string and numeric value */
 struct value_string {
-	unsigned int value;	/*!< \brief numeric value */
-	const char *str;	/*!< \brief human-readable string */
+	unsigned int value;	/*!< numeric value */
+	const char *str;	/*!< human-readable string */
 };
 
 const char *get_value_string(const struct value_string *vs, uint32_t val);
diff --git a/include/osmocom/core/write_queue.h b/include/osmocom/core/write_queue.h
index 4e0fdf3..27d090d 100644
--- a/include/osmocom/core/write_queue.h
+++ b/include/osmocom/core/write_queue.h
@@ -34,21 +34,21 @@
 
 /*! write queue instance */
 struct osmo_wqueue {
-	/*! \brief osmocom file descriptor */
+	/*! osmocom file descriptor */
 	struct osmo_fd bfd;
-	/*! \brief maximum length of write queue */
+	/*! maximum length of write queue */
 	unsigned int max_length;
-	/*! \brief current length of write queue */
+	/*! current length of write queue */
 	unsigned int current_length;
 
-	/*! \brief actual linked list implementing the queue */
+	/*! actual linked list implementing the queue */
 	struct llist_head msg_queue;
 
-	/*! \brief call-back in case qeueue is readable */
+	/*! call-back in case qeueue is readable */
 	int (*read_cb)(struct osmo_fd *fd);
-	/*! \brief call-back in case qeueue is writable */
+	/*! call-back in case qeueue is writable */
 	int (*write_cb)(struct osmo_fd *fd, struct msgb *msg);
-	/*! \brief call-back in case qeueue has exceptions */
+	/*! call-back in case qeueue has exceptions */
 	int (*except_cb)(struct osmo_fd *fd);
 };
 
diff --git a/include/osmocom/crypt/auth.h b/include/osmocom/crypt/auth.h
index 7a27f3b..af4ae15 100644
--- a/include/osmocom/crypt/auth.h
+++ b/include/osmocom/crypt/auth.h
@@ -10,14 +10,14 @@
 
 #include <osmocom/core/linuxlist.h>
 
-/*! \brief Authentication Type (GSM/UMTS) */
+/*! Authentication Type (GSM/UMTS) */
 enum osmo_sub_auth_type {
 	OSMO_AUTH_TYPE_NONE	= 0x00,
 	OSMO_AUTH_TYPE_GSM	= 0x01,
 	OSMO_AUTH_TYPE_UMTS	= 0x02,
 };
 
-/*! \brief Authentication Algorithm */
+/*! Authentication Algorithm */
 enum osmo_auth_algo {
 	OSMO_AUTH_ALG_NONE,
 	OSMO_AUTH_ALG_COMP128v1,
@@ -28,7 +28,7 @@
 	_OSMO_AUTH_ALG_NUM,
 };
 
-/*! \brief permanent (secret) subscriber auth data */
+/*! permanent (secret) subscriber auth data */
 struct osmo_sub_auth_data {
 	enum osmo_sub_auth_type type;
 	enum osmo_auth_algo algo;
@@ -61,19 +61,19 @@
 	uint32_t auth_types;	/*!< bitmask of OSMO_AUTH_TYPE_* */
 };
 
-/* \brief An implementation of an authentication algorithm */
+/* An implementation of an authentication algorithm */
 struct osmo_auth_impl {
 	struct llist_head list;
 	enum osmo_auth_algo algo; /*!< algorithm we implement */
 	const char *name;	/*!< name of the implementation */
 	unsigned int priority;	/*!< priority value (resp. othe implementations */
 
-	/*! \brief callback for generate authentication vectors */
+	/*! callback for generate authentication vectors */
 	int (*gen_vec)(struct osmo_auth_vector *vec,
 			struct osmo_sub_auth_data *aud,
 			const uint8_t *_rand);
 
-	/* \brief callback for generationg auth vectors + re-sync */
+	/* callback for generationg auth vectors + re-sync */
 	int (*gen_vec_auts)(struct osmo_auth_vector *vec,
 			    struct osmo_sub_auth_data *aud,
 			    const uint8_t *auts, const uint8_t *rand_auts,
diff --git a/include/osmocom/gprs/gprs_bssgp.h b/include/osmocom/gprs/gprs_bssgp.h
index b70487c..0e9f7d6 100644
--- a/include/osmocom/gprs/gprs_bssgp.h
+++ b/include/osmocom/gprs/gprs_bssgp.h
@@ -58,7 +58,7 @@
 
 /* gprs_bssgp.c */
 
-/*! \brief BSSGP flow control (SGSN side) According to Section 8.2 */
+/*! BSSGP flow control (SGSN side) According to Section 8.2 */
 struct bssgp_flow_control {
 	uint32_t bucket_size_max;	/*!< maximum size of the bucket (octets) */
 	uint32_t bucket_leak_rate; 	/*!< leak rate of the bucket (octets/sec) */
@@ -158,13 +158,13 @@
 	return tlv_parse(tp, &tvlv_att_def, buf, len, 0, 0);
 }
 
-/*! \brief BSSGP Paging mode */
+/*! BSSGP Paging mode */
 enum bssgp_paging_mode {
 	BSSGP_PAGING_PS,
 	BSSGP_PAGING_CS,
 };
 
-/*! \brief BSSGP Paging scope */
+/*! BSSGP Paging scope */
 enum bssgp_paging_scope {
 	BSSGP_PAGING_BSS_AREA,		/*!< all cells in BSS */
 	BSSGP_PAGING_LOCATION_AREA,	/*!< all cells in LA */
@@ -172,7 +172,7 @@
 	BSSGP_PAGING_BVCI,		/*!< one cell */
 };
 
-/*! \brief BSSGP paging information */
+/*! BSSGP paging information */
 struct bssgp_paging_info {
 	enum bssgp_paging_mode mode;	/*!< CS or PS paging */
 	enum bssgp_paging_scope scope;	/*!< bssgp_paging_scope */
diff --git a/include/osmocom/gprs/gprs_ns.h b/include/osmocom/gprs/gprs_ns.h
index 9cebbd6..5ecaed8 100644
--- a/include/osmocom/gprs/gprs_ns.h
+++ b/include/osmocom/gprs/gprs_ns.h
@@ -41,19 +41,19 @@
 #define NSE_S_ALIVE	0x0002
 #define NSE_S_RESET	0x0004
 
-/*! \brief Osmocom NS link layer types */
+/*! Osmocom NS link layer types */
 enum gprs_ns_ll {
 	GPRS_NS_LL_UDP,		/*!< NS/UDP/IP */
 	GPRS_NS_LL_E1,		/*!< NS/E1 */
 	GPRS_NS_LL_FR_GRE,	/*!< NS/FR/GRE/IP */
 };
 
-/*! \brief Osmoco NS events */
+/*! Osmoco NS events */
 enum gprs_ns_evt {
 	GPRS_NS_EVT_UNIT_DATA,
 };
 
-/*! \brief Osmocom NS VC create status */
+/*! Osmocom NS VC create status */
 enum gprs_ns_cs {
 	GPRS_NS_CS_CREATED,     /*!< A NSVC object has been created */
 	GPRS_NS_CS_FOUND,       /*!< A NSVC object has been found */
@@ -63,32 +63,32 @@
 };
 
 struct gprs_nsvc;
-/*! \brief Osmocom GPRS callback function type */
+/*! Osmocom GPRS callback function type */
 typedef int gprs_ns_cb_t(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,
 			 struct msgb *msg, uint16_t bvci);
 
-/*! \brief An instance of the NS protocol stack */
+/*! An instance of the NS protocol stack */
 struct gprs_ns_inst {
-	/*! \brief callback to the user for incoming UNIT DATA IND */
+	/*! callback to the user for incoming UNIT DATA IND */
 	gprs_ns_cb_t *cb;
 
-	/*! \brief linked lists of all NSVC in this instance */
+	/*! linked lists of all NSVC in this instance */
 	struct llist_head gprs_nsvcs;
 
-	/*! \brief a NSVC object that's needed to deal with packets for
+	/*! a NSVC object that's needed to deal with packets for
 	 * 	   unknown NSVC */
 	struct gprs_nsvc *unknown_nsvc;
 
 	uint16_t timeout[NS_TIMERS_COUNT];
 
-	/*! \brief NS-over-IP specific bits */
+	/*! NS-over-IP specific bits */
 	struct {
 		struct osmo_fd fd;
 		uint32_t local_ip;
 		uint16_t local_port;
 		int dscp;
 	} nsip;
-	/*! \brief NS-over-FR-over-GRE-over-IP specific bits */
+	/*! NS-over-FR-over-GRE-over-IP specific bits */
 	struct {
 		struct osmo_fd fd;
 		uint32_t local_ip;
@@ -104,15 +104,15 @@
 	_NSVC_TIMER_NR,
 };
 
-/*! \brief Structure representing a single NS-VC */
+/*! Structure representing a single NS-VC */
 struct gprs_nsvc {
-	/*! \brief list of NS-VCs within NS Instance */
+	/*! list of NS-VCs within NS Instance */
 	struct llist_head list;
-	/*! \brief pointer to NS Instance */
+	/*! pointer to NS Instance */
 	struct gprs_ns_inst *nsi;
 
-	uint16_t nsei;	/*! \brief end-to-end significance */
-	uint16_t nsvci;	/*! \brief uniquely identifies NS-VC at SGSN */
+	uint16_t nsei;	/*! end-to-end significance */
+	uint16_t nsvci;	/*! uniquely identifies NS-VC at SGSN */
 
 	uint32_t state;
 	uint32_t remote_state;
@@ -129,7 +129,7 @@
 	struct rate_ctr_group *ctrg;
 	struct osmo_stat_item_group *statg;
 
-	/*! \brief which link-layer are we based on? */
+	/*! which link-layer are we based on? */
 	enum gprs_ns_ll ll;
 
 	union {
diff --git a/include/osmocom/gprs/gprs_rlc.h b/include/osmocom/gprs/gprs_rlc.h
index d34d49b..5765281 100644
--- a/include/osmocom/gprs/gprs_rlc.h
+++ b/include/osmocom/gprs/gprs_rlc.h
@@ -2,14 +2,14 @@
 
 #include <stdint.h>
 
-/*! \brief Structure for CPS coding and puncturing scheme (TS 04.60 10.4.8a) */
+/*! Structure for CPS coding and puncturing scheme (TS 04.60 10.4.8a) */
 struct egprs_cps {
 	uint8_t bits;
 	uint8_t mcs;
 	uint8_t p[2];
 };
 
-/*! \brief CPS puncturing table selection (TS 04.60 10.4.8a) */
+/*! CPS puncturing table selection (TS 04.60 10.4.8a) */
 enum egprs_cps_punc {
 	EGPRS_CPS_P1,
 	EGPRS_CPS_P2,
@@ -17,7 +17,7 @@
 	EGPRS_CPS_NONE = -1,
 };
 
-/*! \brief EGPRS header types (TS 04.60 10.0a.2) */
+/*! EGPRS header types (TS 04.60 10.0a.2) */
 enum egprs_hdr_type {
         EGPRS_HDR_TYPE1,
         EGPRS_HDR_TYPE2,
diff --git a/include/osmocom/gprs/protocol/gsm_08_16.h b/include/osmocom/gprs/protocol/gsm_08_16.h
index 56ed594..c3dbe69 100644
--- a/include/osmocom/gprs/protocol/gsm_08_16.h
+++ b/include/osmocom/gprs/protocol/gsm_08_16.h
@@ -12,7 +12,7 @@
 
 /*! \file gprs_ns.h */
 
-/*! \brief Common header of GPRS NS */
+/*! Common header of GPRS NS */
 struct gprs_ns_hdr {
 	uint8_t pdu_type;	/*!< NS PDU type */
 	uint8_t data[0];	/*!< variable-length payload */
@@ -20,7 +20,7 @@
 
 extern const struct value_string gprs_ns_pdu_strings[];
 
-/*! \brief NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
+/*! NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
 enum ns_pdu_type {
 	NS_PDUT_UNITDATA	= 0x00,
 	NS_PDUT_RESET		= 0x02,
@@ -43,7 +43,7 @@
 	SNS_PDUT_SIZE_ACK	= 0x13,
 };
 
-/*! \brief NS Control IE (TS 08.16, Section 10.3, Table 12) */
+/*! NS Control IE (TS 08.16, Section 10.3, Table 12) */
 enum ns_ctrl_ie {
 	NS_IE_CAUSE		= 0x00,
 	NS_IE_VCI		= 0x01,
@@ -60,7 +60,7 @@
 	NS_IE_IP_ADDR		= 0x0b,
 };
 
-/*! \brief NS Cause (TS 08.16, Section 10.3.2, Table 13) */
+/*! NS Cause (TS 08.16, Section 10.3.2, Table 13) */
 enum ns_cause {
 	NS_CAUSE_TRANSIT_FAIL		= 0x00,
 	NS_CAUSE_OM_INTERVENTION	= 0x01,
diff --git a/include/osmocom/gprs/protocol/gsm_08_18.h b/include/osmocom/gprs/protocol/gsm_08_18.h
index 529e988..8bc9a8e 100644
--- a/include/osmocom/gprs/protocol/gsm_08_18.h
+++ b/include/osmocom/gprs/protocol/gsm_08_18.h
@@ -2,11 +2,11 @@
 
 #include <stdint.h>
 
-/*! \brief Fixed BVCI definitions (Section 5.4.1) */
+/*! Fixed BVCI definitions (Section 5.4.1) */
 #define BVCI_SIGNALLING	0x0000
 #define BVCI_PTM	0x0001
 
-/*! \brief BSSGP PDU types (Section 11.3.26 / Table 11.27) */
+/*! BSSGP PDU types (Section 11.3.26 / Table 11.27) */
 enum bssgp_pdu_type {
 	/* PDUs between RL and BSSGP SAPs */
 	BSSGP_PDUT_DL_UNITDATA		= 0x00,
@@ -52,7 +52,7 @@
 	BSSGP_PDUT_DELETE_BSS_PFC_ACK	= 0x57,
 };
 
-/*! \brief BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
+/*! BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
 struct bssgp_ud_hdr {
 	uint8_t pdu_type;	/*!< BSSGP PDU type */
 	uint32_t tlli;		/*!< Temporary Link-Local Identifier */
@@ -60,13 +60,13 @@
 	uint8_t data[0];	/* optional/conditional IEs as TLVs */
 } __attribute__((packed));
 
-/*! \brief BSSGP normal header */
+/*! BSSGP normal header */
 struct bssgp_normal_hdr {
 	uint8_t pdu_type;	/*!< BSSGP PDU type */
 	uint8_t data[0];	/*!< optional/conditional IEs as TLVs */
 };
 
-/*! \brief BSSGP Information Element Identifiers */
+/*! BSSGP Information Element Identifiers */
 enum bssgp_iei_type {
 	BSSGP_IE_ALIGNMENT		= 0x00,
 	BSSGP_IE_BMAX_DEFAULT_MS	= 0x01,
@@ -116,7 +116,7 @@
 	BSSGP_IE_SERVICE_UTRAN_CCO	= 0x3d,
 };
 
-/*! \brief Cause coding (Section 11.3.8 / Table 11.10) */
+/*! Cause coding (Section 11.3.8 / Table 11.10) */
 enum gprs_bssgp_cause {
 	BSSGP_CAUSE_PROC_OVERLOAD	= 0x00,
 	BSSGP_CAUSE_EQUIP_FAIL		= 0x01,
diff --git a/include/osmocom/gsm/a5.h b/include/osmocom/gsm/a5.h
index a2278f2..893fb02 100644
--- a/include/osmocom/gsm/a5.h
+++ b/include/osmocom/gsm/a5.h
@@ -32,10 +32,10 @@
  */
 
 /*! \file gsm/a5.h
- *  \brief Osmocom GSM A5 ciphering algorithm header
+ *  Osmocom GSM A5 ciphering algorithm header
  */
 
-/*! \brief Converts a frame number into the 22 bit number used in A5/x
+/*! Converts a frame number into the 22 bit number used in A5/x
  *  \param[in] fn The true framenumber
  *  \return 22 bit word
  */
diff --git a/include/osmocom/gsm/abis_nm.h b/include/osmocom/gsm/abis_nm.h
index 14dbc08..acddb7f 100644
--- a/include/osmocom/gsm/abis_nm.h
+++ b/include/osmocom/gsm/abis_nm.h
@@ -36,7 +36,7 @@
 extern const struct tlv_definition abis_nm_osmo_att_tlvdef;
 extern const struct tlv_definition abis_nm_att_tlvdef_ipa;
 
-/*! \brief write a human-readable OML header to the debug log
+/*! write a human-readable OML header to the debug log
  *  \param[in] ss Logging sub-system
  *  \param[in] foh A-bis OML FOM header
  */
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index 1ffe579..e76d9ee 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -60,7 +60,7 @@
 enum gsm_band gsm_band_parse(const char *mhz);
 
 /*!
- * \brief Decode a sequence of GSM 03.38 encoded 7 bit characters.
+ * Decode a sequence of GSM 03.38 encoded 7 bit characters.
  *
  * \param decoded	The destination buffer for the decoded characters.
  * \param n		A maximum of n chars is written (incl. terminating \0).
@@ -76,14 +76,14 @@
 int gsm_7bit_decode_n(char *decoded, size_t n, const uint8_t *user_data, uint8_t length);
 
 /*!
- * \brief Decode a sequence of 7 bit characters (USSD encoding).
+ * Decode a sequence of 7 bit characters (USSD encoding).
  *
  * \see gsm_7bit_encode_n()
  */
 int gsm_7bit_decode_n_ussd(char *decoded, size_t n, const uint8_t *user_data, uint8_t length);
 
 /*!
- * \brief Encode a text string into GSM 03.38 encoded 7 bit characters.
+ * Encode a text string into GSM 03.38 encoded 7 bit characters.
  *
  * \param result	The destination buffer for the packed 7 bit sequence.
  * \param n		A maximum of n octets is written.
@@ -97,7 +97,7 @@
 int gsm_7bit_encode_n(uint8_t *result, size_t n, const char *data, int *octets_written);
 
 /*!
- * \brief Encode a text string into GSM 03.38 encoded 7 bit characters (USSD encoding).
+ * Encode a text string into GSM 03.38 encoded 7 bit characters (USSD encoding).
  *
  * \see gsm_7bit_decode_n()
  */
diff --git a/include/osmocom/gsm/kasumi.h b/include/osmocom/gsm/kasumi.h
index 8ecf65f..222aece 100644
--- a/include/osmocom/gsm/kasumi.h
+++ b/include/osmocom/gsm/kasumi.h
@@ -9,7 +9,7 @@
 
 #include <stdint.h>
 
-/*! \brief Single iteration of KASUMI cipher
+/*! Single iteration of KASUMI cipher
  *  \param[in] P Block, 64 bits to be processed in this round
  *  \param[in] KLi1 Expanded subkeys
  *  \param[in] KLi2 Expanded subkeys
@@ -23,7 +23,7 @@
  */
 uint64_t _kasumi(uint64_t P, const uint16_t *KLi1, const uint16_t *KLi2, const uint16_t *KOi1, const uint16_t *KOi2, const uint16_t *KOi3, const uint16_t *KIi1, const uint16_t *KIi2, const uint16_t *KIi3);
 
-/*! \brief Implementation of the KGCORE algorithm (used by A5/3, A5/4, GEA3, GEA4 and ECSD)
+/*! Implementation of the KGCORE algorithm (used by A5/3, A5/4, GEA3, GEA4 and ECSD)
  *  \param[in] CA
  *  \param[in] cb
  *  \param[in] cc
@@ -34,7 +34,7 @@
  */
 void _kasumi_kgcore(uint8_t CA, uint8_t cb, uint32_t cc, uint8_t cd, const uint8_t *ck, uint8_t *co, uint16_t cl);
 
-/*! \brief Expand key into set of subkeys - see TS 135 202 for details
+/*! Expand key into set of subkeys - see TS 135 202 for details
  *  \param[in] key (128 bits) as array of bytes
  *  \param[out] KLi1 Expanded subkeys
  *  \param[out] KLi2 Expanded subkeys
diff --git a/include/osmocom/gsm/l1sap.h b/include/osmocom/gsm/l1sap.h
index 183edbc..322c7ec 100644
--- a/include/osmocom/gsm/l1sap.h
+++ b/include/osmocom/gsm/l1sap.h
@@ -2,51 +2,51 @@
 
 #include <osmocom/core/prim.h>
 
-/*! \brief PH-SAP related primitives (L1<->L2 SAP) */
+/*! PH-SAP related primitives (L1<->L2 SAP) */
 enum osmo_ph_prim {
-	PRIM_PH_DATA,		/*!< \brief PH-DATA */
-	PRIM_PH_RACH,		/*!< \brief PH-RANDOM_ACCESS */
-	PRIM_PH_CONN,		/*!< \brief PH-CONNECT */
-	PRIM_PH_EMPTY_FRAME,	/*!< \brief PH-EMPTY_FRAME */
-	PRIM_PH_RTS,		/*!< \brief PH-RTS */
-	PRIM_MPH_INFO,		/*!< \brief MPH-INFO */
-	PRIM_TCH,		/*!< \brief TCH */
-	PRIM_TCH_RTS,		/*!< \brief TCH */
+	PRIM_PH_DATA,		/*!< PH-DATA */
+	PRIM_PH_RACH,		/*!< PH-RANDOM_ACCESS */
+	PRIM_PH_CONN,		/*!< PH-CONNECT */
+	PRIM_PH_EMPTY_FRAME,	/*!< PH-EMPTY_FRAME */
+	PRIM_PH_RTS,		/*!< PH-RTS */
+	PRIM_MPH_INFO,		/*!< MPH-INFO */
+	PRIM_TCH,		/*!< TCH */
+	PRIM_TCH_RTS,		/*!< TCH */
 };
 
 extern const struct value_string osmo_ph_prim_names[];
 
-/*! \brief PH-SAP related primitives (L1<->L2 SAP) */
+/*! PH-SAP related primitives (L1<->L2 SAP) */
 enum osmo_mph_info_type {
-	PRIM_INFO_TIME,		/*!< \brief Current GSM time */
-	PRIM_INFO_MEAS,		/*!< \brief Measurement indication */
-	PRIM_INFO_ACTIVATE,	/*!< \brief Activation of channel */
-	PRIM_INFO_DEACTIVATE,	/*!< \brief Deactivation of channel */
-	PRIM_INFO_MODIFY,	/*!< \brief Mode Modify of channel */
-	PRIM_INFO_ACT_CIPH,	/*!< \brief Activation of ciphering */
-	PRIM_INFO_DEACT_CIPH,	/*!< \brief Deactivation of ciphering */
+	PRIM_INFO_TIME,		/*!< Current GSM time */
+	PRIM_INFO_MEAS,		/*!< Measurement indication */
+	PRIM_INFO_ACTIVATE,	/*!< Activation of channel */
+	PRIM_INFO_DEACTIVATE,	/*!< Deactivation of channel */
+	PRIM_INFO_MODIFY,	/*!< Mode Modify of channel */
+	PRIM_INFO_ACT_CIPH,	/*!< Activation of ciphering */
+	PRIM_INFO_DEACT_CIPH,	/*!< Deactivation of ciphering */
 };
 
-/*! \brief PH-DATA presence information */
+/*! PH-DATA presence information */
 enum osmo_ph_pres_info_type {
-	PRES_INFO_INVALID = 0,	/*!< \brief Data is invalid */
-	PRES_INFO_HEADER  = 1,	/*!< \brief Only header is present and valid */
-	PRES_INFO_FIRST   = 3,	/*!< \brief First half of data + header are valid (2nd half may be present but invalid) */
-	PRES_INFO_SECOND  = 5,	/*!< \brief Second half of data + header are valid (1st halfmay be present but invalid) */
-	PRES_INFO_BOTH    = 7,	/*!< \brief Both parts + header are present and valid */
+	PRES_INFO_INVALID = 0,	/*!< Data is invalid */
+	PRES_INFO_HEADER  = 1,	/*!< Only header is present and valid */
+	PRES_INFO_FIRST   = 3,	/*!< First half of data + header are valid (2nd half may be present but invalid) */
+	PRES_INFO_SECOND  = 5,	/*!< Second half of data + header are valid (1st halfmay be present but invalid) */
+	PRES_INFO_BOTH    = 7,	/*!< Both parts + header are present and valid */
 	PRES_INFO_UNKNOWN
 };
 
-/*! \brief for PH-RANDOM_ACCESS.req */
+/*! for PH-RANDOM_ACCESS.req */
 struct ph_rach_req_param {
-	uint8_t ra;		/*!< \brief Random Access */
-	uint8_t ta;		/*!< \brief Timing Advance */
-	uint8_t tx_power;	/*!< \brief Transmit Power */
-	uint8_t is_combined_ccch;/*!< \brief Are we using a combined CCCH? */
-	uint16_t offset;	/*!< \brief Timing Offset */
+	uint8_t ra;		/*!< Random Access */
+	uint8_t ta;		/*!< Timing Advance */
+	uint8_t tx_power;	/*!< Transmit Power */
+	uint8_t is_combined_ccch;/*!< Are we using a combined CCCH? */
+	uint16_t offset;	/*!< Timing Offset */
 };
 
-/*! \brief for PH_RA_IND burstType inforamtion */
+/*! for PH_RA_IND burstType inforamtion */
 enum ph_burst_type {
 	GSM_L1_BURST_TYPE_NONE = 0,
 	GSM_L1_BURST_TYPE_ACCESS_0,
@@ -54,79 +54,79 @@
 	GSM_L1_BURST_TYPE_ACCESS_2
 };
 
-/*! \brief for PH-RANDOM_ACCESS.ind */
+/*! for PH-RANDOM_ACCESS.ind */
 struct ph_rach_ind_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint16_t ra;		/*!< \brief Random Access */
-	uint8_t acc_delay;	/*!< \brief Delay in bit periods */
-	uint32_t fn;		/*!< \brief GSM Frame Number at time of RA */
-	uint8_t is_11bit;	/*!< \brief no.of bits in RACH*/
-	enum ph_burst_type burst_type; /*!< \brief type of burst*/
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint16_t ra;		/*!< Random Access */
+	uint8_t acc_delay;	/*!< Delay in bit periods */
+	uint32_t fn;		/*!< GSM Frame Number at time of RA */
+	uint8_t is_11bit;	/*!< no.of bits in RACH*/
+	enum ph_burst_type burst_type; /*!< type of burst*/
 };
 
-/*! \brief for PH-[UNIT]DATA.{req,ind} | PH-RTS.ind */
+/*! for PH-[UNIT]DATA.{req,ind} | PH-RTS.ind */
 struct ph_data_param {
-	uint8_t link_id;	/*!< \brief Link Identifier (Like RSL) */
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	int8_t rssi;		/*!< \brief RSSI of receivedindication */
-	uint16_t ber10k;	/*!< \brief BER in units of 0.01% */
-	int16_t ta_offs_qbits;	/* !< \brief Burst TA Offset in quarter bits */
-	int16_t lqual_cb;	/* !< \brief Link quality in centiBel */
-	enum osmo_ph_pres_info_type pdch_presence_info; /*!< \brief Info regarding presence/validity of header and data parts */
+	uint8_t link_id;	/*!< Link Identifier (Like RSL) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	int8_t rssi;		/*!< RSSI of receivedindication */
+	uint16_t ber10k;	/*!< BER in units of 0.01% */
+	int16_t ta_offs_qbits;	/* !< Burst TA Offset in quarter bits */
+	int16_t lqual_cb;	/* !< Link quality in centiBel */
+	enum osmo_ph_pres_info_type pdch_presence_info; /*!< Info regarding presence/validity of header and data parts */
 };
 
-/*! \brief for TCH.{req,ind} | TCH-RTS.ind */
+/*! for TCH.{req,ind} | TCH-RTS.ind */
 struct ph_tch_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	int8_t rssi;		/*!< \brief RSSI of received indication */
-	uint8_t marker;		/*!< \brief RTP Marker bit (speech onset indicator) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	int8_t rssi;		/*!< RSSI of received indication */
+	uint8_t marker;		/*!< RTP Marker bit (speech onset indicator) */
 };
 
-/*! \brief for PH-CONN.ind */
+/*! for PH-CONN.ind */
 struct ph_conn_ind_param {
-	uint32_t fn;		/*!< \brief GSM Frame Number */
+	uint32_t fn;		/*!< GSM Frame Number */
 };
 
-/*! \brief for TIME MPH-INFO.ind */
+/*! for TIME MPH-INFO.ind */
 struct info_time_ind_param {
-	uint32_t fn;		/*!< \brief GSM Frame Number */
+	uint32_t fn;		/*!< GSM Frame Number */
 };
 
-/*! \brief for MEAS MPH-INFO.ind */
+/*! for MEAS MPH-INFO.ind */
 struct info_meas_ind_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint32_t fn;		/*!< \brief GSM Frame Number */
-	uint16_t ber10k;	/*!< \brief BER in units of 0.01% */
-	int16_t ta_offs_qbits;	/*!< \brief timing advance offset (in qbits) */
-	int16_t c_i_cb;		/*!< \brief C/I ratio in 0.1 dB */
-	uint8_t is_sub:1;	/*!< \brief flags */
-	uint8_t inv_rssi;	/*!< \brief RSSI in dBm * -1 */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint32_t fn;		/*!< GSM Frame Number */
+	uint16_t ber10k;	/*!< BER in units of 0.01% */
+	int16_t ta_offs_qbits;	/*!< timing advance offset (in qbits) */
+	int16_t c_i_cb;		/*!< C/I ratio in 0.1 dB */
+	uint8_t is_sub:1;	/*!< flags */
+	uint8_t inv_rssi;	/*!< RSSI in dBm * -1 */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE,MODIFY} MPH-INFO.req */
+/*! for {ACTIVATE,DEACTIVATE,MODIFY} MPH-INFO.req */
 struct info_act_req_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
 	uint8_t sacch_only;	/*!< \breif Only deactivate SACCH */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE} MPH-INFO.cnf */
+/*! for {ACTIVATE,DEACTIVATE} MPH-INFO.cnf */
 struct info_act_cnf_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint8_t cause;		/*!< \brief RSL cause in case of nack */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint8_t cause;		/*!< RSL cause in case of nack */
 };
 
-/*! \brief for {ACTIVATE,DEACTIVATE} MPH-INFO.{req,cnf} */
+/*! for {ACTIVATE,DEACTIVATE} MPH-INFO.{req,cnf} */
 struct info_ciph_req_param {
-	uint8_t chan_nr;	/*!< \brief Channel Number (Like RSL) */
-	uint8_t downlink;	/*!< \brief Apply to downlink */
-	uint8_t uplink;		/*!< \brief Apply to uplink */
+	uint8_t chan_nr;	/*!< Channel Number (Like RSL) */
+	uint8_t downlink;	/*!< Apply to downlink */
+	uint8_t uplink;		/*!< Apply to uplink */
 };
 
-/*! \brief for MPH-INFO.ind */
+/*! for MPH-INFO.ind */
 struct mph_info_param {
-	enum osmo_mph_info_type type; /*!< \brief Info message type */
+	enum osmo_mph_info_type type; /*!< Info message type */
 	union {
 		struct info_time_ind_param time_ind;
 		struct info_meas_ind_param meas_ind;
@@ -136,9 +136,9 @@
 	} u;
 };
 
-/*! \brief primitive header for PH-SAP primitives */
+/*! primitive header for PH-SAP primitives */
 struct osmo_phsap_prim {
-	struct osmo_prim_hdr oph; /*!< \brief generic primitive header */
+	struct osmo_prim_hdr oph; /*!< generic primitive header */
 	union {
 		struct ph_data_param data;
 		struct ph_tch_param tch;
@@ -146,5 +146,5 @@
 		struct ph_rach_ind_param rach_ind;
 		struct ph_conn_ind_param conn_ind;
 		struct mph_info_param info;
-	} u;			/*!< \brief request-specific data */
+	} u;			/*!< request-specific data */
 };
diff --git a/include/osmocom/gsm/lapd_core.h b/include/osmocom/gsm/lapd_core.h
index 42ef417..8d3a0f8 100644
--- a/include/osmocom/gsm/lapd_core.h
+++ b/include/osmocom/gsm/lapd_core.h
@@ -14,16 +14,16 @@
  * primitive related stuff
  */
 
-/*! \brief LAPD related primitives (L2<->L3 SAP)*/
+/*! LAPD related primitives (L2<->L3 SAP)*/
 enum osmo_dl_prim {
-	PRIM_DL_UNIT_DATA,	/*!< \brief DL-UNIT-DATA */
-	PRIM_DL_DATA,		/*!< \brief DL-DATA */
-	PRIM_DL_EST,		/*!< \brief DL-ESTABLISH */
-	PRIM_DL_REL,		/*!< \brief DL-RLEEASE */
-	PRIM_DL_SUSP,		/*!< \brief DL-SUSPEND */
-	PRIM_DL_RES,		/*!< \brief DL-RESUME */
-	PRIM_DL_RECON,		/*!< \brief DL-RECONNECT */
-	PRIM_MDL_ERROR,		/*!< \brief MDL-ERROR */
+	PRIM_DL_UNIT_DATA,	/*!< DL-UNIT-DATA */
+	PRIM_DL_DATA,		/*!< DL-DATA */
+	PRIM_DL_EST,		/*!< DL-ESTABLISH */
+	PRIM_DL_REL,		/*!< DL-RLEEASE */
+	PRIM_DL_SUSP,		/*!< DL-SUSPEND */
+	PRIM_DL_RES,		/*!< DL-RESUME */
+	PRIM_DL_RECON,		/*!< DL-RECONNECT */
+	PRIM_MDL_ERROR,		/*!< MDL-ERROR */
 };
 
 /* Uses the same values as RLL, so no conversion for GSM is required. */
@@ -43,32 +43,32 @@
 #define MDL_CAUSE_SABM_INFO_NOTALL	0x0e
 #define MDL_CAUSE_FRMR			0x0f
 
-/*! \brief for MDL-ERROR.ind */
+/*! for MDL-ERROR.ind */
 struct mdl_error_ind_param {
-	uint8_t cause;		/*!< \brief generic cause value */
+	uint8_t cause;		/*!< generic cause value */
 };
 
-/*! \brief for DL-REL.req */
+/*! for DL-REL.req */
 struct dl_rel_req_param {
-	uint8_t mode;		/*!< \brief release mode */
+	uint8_t mode;		/*!< release mode */
 };
 
-/*! \brief primitive header for LAPD DL-SAP primitives */
+/*! primitive header for LAPD DL-SAP primitives */
 struct osmo_dlsap_prim {
-	struct osmo_prim_hdr oph; /*!< \brief generic primitive header */
+	struct osmo_prim_hdr oph; /*!< generic primitive header */
 	union {
 		struct mdl_error_ind_param error_ind;
 		struct dl_rel_req_param rel_req;
-	} u;			/*!< \brief request-specific data */
+	} u;			/*!< request-specific data */
 };
 
-/*! \brief LAPD mode/role */
+/*! LAPD mode/role */
 enum lapd_mode {
-	LAPD_MODE_USER,		/*!< \brief behave like user */
-	LAPD_MODE_NETWORK,	/*!< \brief behave like network */
+	LAPD_MODE_USER,		/*!< behave like user */
+	LAPD_MODE_NETWORK,	/*!< behave like network */
 };
 
-/*! \brief LAPD state (Figure B.2/Q.921)*/
+/*! LAPD state (Figure B.2/Q.921)*/
 enum lapd_state {
 	LAPD_STATE_NULL = 0,
 	LAPD_STATE_TEI_UNASS,
@@ -81,7 +81,7 @@
 	LAPD_STATE_TIMER_RECOV,
 };
 
-/*! \brief LAPD message format (I / S / U) */
+/*! LAPD message format (I / S / U) */
 enum lapd_format {
 	LAPD_FORM_UKN = 0,
 	LAPD_FORM_I,
@@ -89,7 +89,7 @@
 	LAPD_FORM_U,
 };
 
-/*! \brief LAPD message context */
+/*! LAPD message context */
 struct lapd_msg_ctx {
 	struct lapd_datalink *dl;
 	int n201;
@@ -119,45 +119,45 @@
 	int	more; /* if message is fragmented */
 };
 
-/*! \brief LAPD datalink */
+/*! LAPD datalink */
 struct lapd_datalink {
 	int (*send_dlsap)(struct osmo_dlsap_prim *dp,
 	        struct lapd_msg_ctx *lctx);
 	int (*send_ph_data_req)(struct lapd_msg_ctx *lctx, struct msgb *msg);
 	int (*update_pending_frames)(struct lapd_msg_ctx *lctx);
 	struct {
-		/*! \brief filled-in once we set the lapd_mode above */
+		/*! filled-in once we set the lapd_mode above */
 		struct lapd_cr_ent loc2rem;
 		struct lapd_cr_ent rem2loc;
 	} cr;
-	enum lapd_mode mode; /*!< \brief current mode of link */
-	int use_sabme; /*!< \brief use SABME instead of SABM */
-	int reestablish; /*!< \brief enable reestablish support */
-	int n200, n200_est_rel; /*!< \brief number of retranmissions */
-	struct lapd_msg_ctx lctx; /*!< \brief LAPD context */
-	int maxf; /*!< \brief maximum frame size (after defragmentation) */ 
-	uint8_t k; /*!< \brief maximum number of unacknowledged frames */
-	uint8_t v_range; /*!< \brief range of sequence numbers */
-	uint8_t v_send;	/*!< \brief seq nr of next I frame to be transmitted */
-	uint8_t v_ack;	/*!< \brief last frame ACKed by peer */
-	uint8_t v_recv;	/*!< \brief seq nr of next I frame expected to be received */
-	uint32_t state; /*!< \brief LAPD state (\ref lapd_state) */
-	int seq_err_cond; /*!< \brief condition of sequence error */
-	uint8_t own_busy; /*!< \brief receiver busy on our side */
-	uint8_t peer_busy; /*!< \brief receiver busy on remote side */
-	int t200_sec, t200_usec; /*!< \brief retry timer (default 1 sec) */
-	int t203_sec, t203_usec; /*!< \brief retry timer (default 10 secs) */
-	struct osmo_timer_list t200; /*!< \brief T200 timer */
-	struct osmo_timer_list t203; /*!< \brief T203 timer */
-	uint8_t retrans_ctr; /*!< \brief re-transmission counter */
-	struct llist_head tx_queue; /*!< \brief frames to L1 */
-	struct llist_head send_queue; /*!< \brief frames from L3 */
-	struct msgb *send_buffer; /*!< \brief current frame transmitting */
-	int send_out; /*!< \brief how much was sent from send_buffer */
-	struct lapd_history *tx_hist; /*!< \brief tx history structure array */
-	uint8_t range_hist; /*!< \brief range of history buffer 2..2^n */
-	struct msgb *rcv_buffer; /*!< \brief buffer to assemble the received message */
-	struct msgb *cont_res; /*!< \brief buffer to store content resolution data on network side, to detect multiple phones on same channel */
+	enum lapd_mode mode; /*!< current mode of link */
+	int use_sabme; /*!< use SABME instead of SABM */
+	int reestablish; /*!< enable reestablish support */
+	int n200, n200_est_rel; /*!< number of retranmissions */
+	struct lapd_msg_ctx lctx; /*!< LAPD context */
+	int maxf; /*!< maximum frame size (after defragmentation) */ 
+	uint8_t k; /*!< maximum number of unacknowledged frames */
+	uint8_t v_range; /*!< range of sequence numbers */
+	uint8_t v_send;	/*!< seq nr of next I frame to be transmitted */
+	uint8_t v_ack;	/*!< last frame ACKed by peer */
+	uint8_t v_recv;	/*!< seq nr of next I frame expected to be received */
+	uint32_t state; /*!< LAPD state (\ref lapd_state) */
+	int seq_err_cond; /*!< condition of sequence error */
+	uint8_t own_busy; /*!< receiver busy on our side */
+	uint8_t peer_busy; /*!< receiver busy on remote side */
+	int t200_sec, t200_usec; /*!< retry timer (default 1 sec) */
+	int t203_sec, t203_usec; /*!< retry timer (default 10 secs) */
+	struct osmo_timer_list t200; /*!< T200 timer */
+	struct osmo_timer_list t203; /*!< T203 timer */
+	uint8_t retrans_ctr; /*!< re-transmission counter */
+	struct llist_head tx_queue; /*!< frames to L1 */
+	struct llist_head send_queue; /*!< frames from L3 */
+	struct msgb *send_buffer; /*!< current frame transmitting */
+	int send_out; /*!< how much was sent from send_buffer */
+	struct lapd_history *tx_hist; /*!< tx history structure array */
+	uint8_t range_hist; /*!< range of history buffer 2..2^n */
+	struct msgb *rcv_buffer; /*!< buffer to assemble the received message */
+	struct msgb *cont_res; /*!< buffer to store content resolution data on network side, to detect multiple phones on same channel */
 };
 
 void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range,
diff --git a/include/osmocom/gsm/lapdm.h b/include/osmocom/gsm/lapdm.h
index 84d109d..ec14cdd 100644
--- a/include/osmocom/gsm/lapdm.h
+++ b/include/osmocom/gsm/lapdm.h
@@ -9,15 +9,15 @@
 
 /*! \file lapdm.h */
 
-/*! \brief LAPDm mode/role */
+/*! LAPDm mode/role */
 enum lapdm_mode {
-	LAPDM_MODE_MS,		/*!< \brief behave like a MS (mobile phone) */
-	LAPDM_MODE_BTS,		/*!< \brief behave like a BTS (network) */
+	LAPDM_MODE_MS,		/*!< behave like a MS (mobile phone) */
+	LAPDM_MODE_BTS,		/*!< behave like a BTS (network) */
 };
 
 struct lapdm_entity;
 
-/*! \brief LAPDm message context */
+/*! LAPDm message context */
 struct lapdm_msg_ctx {
 	struct lapdm_datalink *dl;
 	int lapdm_fmt;
@@ -27,18 +27,18 @@
 	uint8_t tx_power_ind;	/* MS power indicated by network */
 };
 
-/*! \brief LAPDm datalink like TS 04.06 / Section 3.5.2 */
+/*! LAPDm datalink like TS 04.06 / Section 3.5.2 */
 struct lapdm_datalink {
-	struct lapd_datalink dl; /* \brief common LAPD */
-	struct lapdm_msg_ctx mctx; /*!< \brief context of established connection */
+	struct lapd_datalink dl; /* common LAPD */
+	struct lapdm_msg_ctx mctx; /*!< context of established connection */
 
-	struct lapdm_entity *entity; /*!< \brief LAPDm entity we are part of */
+	struct lapdm_entity *entity; /*!< LAPDm entity we are part of */
 };
 
-/*! \brief LAPDm datalink SAPIs */
+/*! LAPDm datalink SAPIs */
 enum lapdm_dl_sapi {
-	DL_SAPI0	= 0,	/*!< \brief SAPI 0 */
-	DL_SAPI3	= 1,	/*!< \brief SAPI 1 */
+	DL_SAPI0	= 0,	/*!< SAPI 0 */
+	DL_SAPI3	= 1,	/*!< SAPI 1 */
 	_NR_DL_SAPI
 };
 
@@ -47,34 +47,34 @@
 #define LAPDM_ENT_F_EMPTY_FRAME		0x0001
 #define LAPDM_ENT_F_POLLING_ONLY	0x0002
 
-/*! \brief a LAPDm Entity */
+/*! a LAPDm Entity */
 struct lapdm_entity {
-	/*! \brief the SAPIs of the LAPDm entity */
+	/*! the SAPIs of the LAPDm entity */
 	struct lapdm_datalink datalink[_NR_DL_SAPI];
-	int last_tx_dequeue; /*!< \brief last entity that was dequeued */
-	int tx_pending; /*!< \brief currently a pending frame not confirmed by L1 */
-	enum lapdm_mode mode; /*!< \brief are we in BTS mode or MS mode */
+	int last_tx_dequeue; /*!< last entity that was dequeued */
+	int tx_pending; /*!< currently a pending frame not confirmed by L1 */
+	enum lapdm_mode mode; /*!< are we in BTS mode or MS mode */
 	unsigned int flags;
 
-	void *l1_ctx;	/*!< \brief context for layer1 instance */
-	void *l3_ctx;	/*!< \brief context for layer3 instance */
+	void *l1_ctx;	/*!< context for layer1 instance */
+	void *l3_ctx;	/*!< context for layer3 instance */
 
-	osmo_prim_cb l1_prim_cb;/*!< \brief callback for sending prims to L1 */
-	lapdm_cb_t l3_cb;	/*!< \brief callback for sending stuff to L3 */
+	osmo_prim_cb l1_prim_cb;/*!< callback for sending prims to L1 */
+	lapdm_cb_t l3_cb;	/*!< callback for sending stuff to L3 */
 
-	/*! \brief pointer to \ref lapdm_channel of which we're part */
+	/*! pointer to \ref lapdm_channel of which we're part */
 	struct lapdm_channel *lapdm_ch;
 
 	uint8_t ta;		/* TA used and indicated to network */
 	uint8_t tx_power;	/* MS power used and indicated to network */
 };
 
-/*! \brief the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) */
+/*! the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) */
 struct lapdm_channel {
-	struct llist_head list;		/*!< \brief internal linked list */
-	char *name;			/*!< \brief human-readable name */
-	struct lapdm_entity lapdm_acch;	/*!< \brief Associated Control Channel */
-	struct lapdm_entity lapdm_dcch;	/*!< \brief Dedicated Control Channel */
+	struct llist_head list;		/*!< internal linked list */
+	char *name;			/*!< human-readable name */
+	struct lapdm_entity lapdm_acch;	/*!< Associated Control Channel */
+	struct lapdm_entity lapdm_dcch;	/*!< Dedicated Control Channel */
 };
 
 const char *get_rsl_name(int value);
diff --git a/include/osmocom/gsm/oap.h b/include/osmocom/gsm/oap.h
index ff561bf..fba22c7 100644
--- a/include/osmocom/gsm/oap.h
+++ b/include/osmocom/gsm/oap.h
@@ -26,7 +26,7 @@
 #include <osmocom/core/msgb.h>
 #include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
 
-/*! \brief Information Element Identifiers for OAP IEs.
+/*! Information Element Identifiers for OAP IEs.
  * They match osmo_gsup_iei (so far). */
 enum osmo_oap_iei {
 	OAP_CAUSE_IE			= 0x02,
@@ -37,7 +37,7 @@
 	OAP_CLIENT_ID_IE		= 0x30,
 };
 
-/*! \brief OAP message types */
+/*! OAP message types */
 enum osmo_oap_message_type {
 	OAP_MSGT_REGISTER_REQUEST	= 0b00000100,
 	OAP_MSGT_REGISTER_ERROR		= 0b00000101,
@@ -52,7 +52,7 @@
 	OAP_MSGT_SYNC_RESULT		= 0b00001110,
 };
 
-/*! \brief Parsed/decoded OAP protocol message */
+/*! Parsed/decoded OAP protocol message */
 struct osmo_oap_message {
 	enum osmo_oap_message_type message_type;
 	enum gsm48_gmm_cause cause;
diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h
index 604a5df..90b6cf1 100644
--- a/include/osmocom/gsm/protocol/gsm_04_08.h
+++ b/include/osmocom/gsm/protocol/gsm_04_08.h
@@ -957,7 +957,7 @@
 
 #define GSM48_TA_INVALID 220
 
-/*! \brief Check if TA is valid according to 3GPP TS 44.018 § 10.5.2.40
+/*! Check if TA is valid according to 3GPP TS 44.018 § 10.5.2.40
  *  \param[in] ta Timing Advance value
  *  \returns true if ta is valid, false otherwise
  *  Note: Rules for GSM400 band are ignored as it's not implemented in practice.
@@ -1620,7 +1620,7 @@
 	GSM48_BCAP_MT_AUTO_1	= 8,
 };
 
-/*! \brief GSM 04.08 Bearer Capability: Speech Version Indication
+/*! GSM 04.08 Bearer Capability: Speech Version Indication
  *  (See also 3GPP TS 24.008, Table 10.5.103) */
 enum gsm48_bcap_speech_ver {
 	GSM48_BCAP_SV_FR	= 0,	/*!< GSM FR V1 (GSM FR) */
diff --git a/include/osmocom/gsm/protocol/gsm_08_08.h b/include/osmocom/gsm/protocol/gsm_08_08.h
index d165330..6ae6855 100644
--- a/include/osmocom/gsm/protocol/gsm_08_08.h
+++ b/include/osmocom/gsm/protocol/gsm_08_08.h
@@ -391,7 +391,7 @@
 	GSM0808_SPEECH_PERM_NO_CHANGE = 0x1f,
 };
 
-/*! \brief GSM 08.08 3.2.2.11 Channel Type
+/*! GSM 08.08 3.2.2.11 Channel Type
  *  (see also 3GPP TS 48.008, section 3.2.2.11) */
 enum gsm0808_permitted_speech {
 	GSM0808_PERM_FR1	= 0x01, /*!< GSM FR */
@@ -406,7 +406,7 @@
 	GSM0808_PERM_HR6	= 0x45, /*!< OHR AMR */
 };
 
-/*! \brief 3GPP TS 48.008, 3.2.2.103 Speech Codec Type */
+/*! 3GPP TS 48.008, 3.2.2.103 Speech Codec Type */
 enum gsm0808_speech_codec_type {
 	GSM0808_SCT_FR1	= 0x0, /*!< GSM FR */
 	GSM0808_SCT_FR2	= 0x2, /*!< GSM EFR */
@@ -449,7 +449,7 @@
 	uint16_t cfg;
 };
 
-/*! \brief Default speech codec configurations: Some codecs specified with
+/*! Default speech codec configurations: Some codecs specified with
  *  struct gsm0808_speech_codec, require a configuration (cfg). The following
  *  default configuration will configure the codec (RTP) to match the
  *  configuration that is used on the air interface (Um).
diff --git a/include/osmocom/gsm/protocol/gsm_08_58.h b/include/osmocom/gsm/protocol/gsm_08_58.h
index a7a2ccf..c76cf3b 100644
--- a/include/osmocom/gsm/protocol/gsm_08_58.h
+++ b/include/osmocom/gsm/protocol/gsm_08_58.h
@@ -30,59 +30,59 @@
 
 /*! \file gsm_08_58.h */
 
-/*! \brief RSL common header */
+/*! RSL common header */
 struct abis_rsl_common_hdr {
-	uint8_t	msg_discr;	/*!< \brief message discriminator (ABIS_RSL_MDISC_*) */
-	uint8_t	msg_type;	/*!< \brief message type (\ref abis_rsl_msgtype) */
-	uint8_t	data[0];	/*!< \brief actual payload data */
+	uint8_t	msg_discr;	/*!< message discriminator (ABIS_RSL_MDISC_*) */
+	uint8_t	msg_type;	/*!< message type (\ref abis_rsl_msgtype) */
+	uint8_t	data[0];	/*!< actual payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL RLL header (Chapter 8.3) */
+/* RSL RLL header (Chapter 8.3) */
 struct abis_rsl_rll_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	ie_link_id;	/*!< \brief \ref RSL_IE_LINK_IDENT (tag) */
-	uint8_t	link_id;	/*!< \brief RSL link identifier (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	ie_link_id;	/*!< \ref RSL_IE_LINK_IDENT (tag) */
+	uint8_t	link_id;	/*!< RSL link identifier (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL Dedicated Channel header (Chapter 8.3 and 8.4) */
+/* RSL Dedicated Channel header (Chapter 8.3 and 8.4) */
 struct abis_rsl_dchan_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
-/* \brief RSL Common Channel header (Chapter 8.5) */
+/* RSL Common Channel header (Chapter 8.5) */
 struct abis_rsl_cchan_hdr {
 	struct abis_rsl_common_hdr c;
-	uint8_t	ie_chan;	/*!< \brief \ref RSL_IE_CHAN_NR (tag) */
-	uint8_t	chan_nr;	/*!< \brief RSL channel number (value) */
-	uint8_t	data[0];	/*!< \brief message payload data */
+	uint8_t	ie_chan;	/*!< \ref RSL_IE_CHAN_NR (tag) */
+	uint8_t	chan_nr;	/*!< RSL channel number (value) */
+	uint8_t	data[0];	/*!< message payload data */
 } __attribute__ ((packed));
 
 
 /* Chapter 9.1 */
-/* \brief RSL Message Discriminator: RLL */
+/* RSL Message Discriminator: RLL */
 #define ABIS_RSL_MDISC_RLL		0x02
-/* \brief RSL Message Discriminator: Dedicated Channel */
+/* RSL Message Discriminator: Dedicated Channel */
 #define ABIS_RSL_MDISC_DED_CHAN		0x08
-/* \brief RSL Message Discriminator: Common Channel */
+/* RSL Message Discriminator: Common Channel */
 #define ABIS_RSL_MDISC_COM_CHAN		0x0c
-/* \brief RSL Message Discriminator: TRX Management */
+/* RSL Message Discriminator: TRX Management */
 #define ABIS_RSL_MDISC_TRX		0x10
-/* \brief RSL Message Discriminator: Location Service */
+/* RSL Message Discriminator: Location Service */
 #define ABIS_RSL_MDISC_LOC		0x20
-/* \brief RSL Message Discriminator: ip.access */
+/* RSL Message Discriminator: ip.access */
 #define ABIS_RSL_MDISC_IPACCESS		0x7e
 #define ABIS_RSL_MDISC_TRANSP		0x01
 
-/* \brief Check if given RSL message discriminator is transparent */
+/* Check if given RSL message discriminator is transparent */
 #define ABIS_RSL_MDISC_IS_TRANSP(x)	(x & 0x01)
 
-/* \brief RSL Message Type (Chapter 9.1) */
+/* RSL Message Type (Chapter 9.1) */
 enum abis_rsl_msgtype {
 	/* Radio Link Layer Management */
 	RSL_MT_DATA_REQ			= 0x01,
@@ -182,7 +182,7 @@
 	RSL_MT_IPAC_DLCX_NACK,
 };
 
-/*! \brief Siemens vendor-specific RSL message types */
+/*! Siemens vendor-specific RSL message types */
 enum abis_rsl_msgtype_siemens {
 	RSL_MT_SIEMENS_MRPCI		= 0x41,
 	RSL_MT_SIEMENS_INTRAC_HO_COND_IND = 0x42,
@@ -202,7 +202,7 @@
 	RSL_MT_SIEMENS_MODIF_COND_IND	= 0x50,
 };
 
-/*! \brief RSL Information Element Identifiers (Chapter 9.3) */
+/*! RSL Information Element Identifiers (Chapter 9.3) */
 enum abis_rsl_ie {
 	RSL_IE_CHAN_NR			= 0x01,
 	RSL_IE_LINK_IDENT,
@@ -340,7 +340,7 @@
 #define RSL_ACT_SECOND_MULTI	0x05
 #define RSL_ACT_OSMO_PDCH	0x0f	/*< non-standard, for dyn TS */
 
-/*! \brief RSL Channel Mode IF (Chapter 9.3.6) */
+/*! RSL Channel Mode IF (Chapter 9.3.6) */
 struct rsl_ie_chan_mode {
 	uint8_t dtx_dtu;
 	uint8_t spd_ind;
@@ -383,7 +383,7 @@
 #define RSL_CMOD_CSD_T_600	0x14
 #define RSL_CMOD_CSD_T_1200_75	0x15
 
-/*! \brief RSL Channel Identification IE (Chapter 9.3.5) */
+/*! RSL Channel Identification IE (Chapter 9.3.5) */
 struct rsl_ie_chan_ident {
 	/* GSM 04.08 10.5.2.5 */
 	struct {
@@ -496,7 +496,7 @@
 #define RSL_CHANNEED_TCH_F	0x02
 #define RSL_CHANNEED_TCH_ForH	0x03
 
-/*! \brief RSL Cell Broadcast Command (Chapter 9.3.45) */
+/*! RSL Cell Broadcast Command (Chapter 9.3.45) */
 struct rsl_ie_cb_cmd_type {
 	uint8_t last_block:2;
 	uint8_t spare:1;
@@ -603,7 +603,7 @@
 	RSL_REL_LOCAL_END	= 1,
 };
 
-/*! \brief ip.access specific embedded information elements */
+/*! ip.access specific embedded information elements */
 enum rsl_ipac_embedded_ie {
 	RSL_IPAC_EIE_RXLEV		= 0x00,
 	RSL_IPAC_EIE_RXQUAL		= 0x01,
diff --git a/include/osmocom/gsm/protocol/gsm_12_21.h b/include/osmocom/gsm/protocol/gsm_12_21.h
index b35da44..1bdee9c 100644
--- a/include/osmocom/gsm/protocol/gsm_12_21.h
+++ b/include/osmocom/gsm/protocol/gsm_12_21.h
@@ -32,60 +32,60 @@
 #include <stdbool.h>
 #include <osmocom/gsm/tlv.h>
 
-/*! \brief generic header in front of every OML message according to TS 08.59 */
+/*! generic header in front of every OML message according to TS 08.59 */
 struct abis_om_hdr {
-	/*! \brief Message Discriminator \ref abis_oml_mdisc */
+	/*! Message Discriminator \ref abis_oml_mdisc */
 	uint8_t	mdisc;
-	/*! \brief Placement (like \ref ABIS_OM_PLACEMENT_ONLY) */
+	/*! Placement (like \ref ABIS_OM_PLACEMENT_ONLY) */
 	uint8_t	placement;
-	/*! \brief Sequence Number (if \ref ABIS_OM_PLACEMENT_MIDDLE) */
+	/*! Sequence Number (if \ref ABIS_OM_PLACEMENT_MIDDLE) */
 	uint8_t	sequence;
-	/*! \brief Length in octets */
+	/*! Length in octets */
 	uint8_t	length;
-	/*! \brief actual payload data */
+	/*! actual payload data */
 	uint8_t	data[0];
 } __attribute__ ((packed));
 
 #define ABIS_NM_MSG_SIZE	1024
 #define ABIS_NM_MSG_HEADROOM	128
 
-/*! \brief Message Discriminator for Formatted Object Messages */
+/*! Message Discriminator for Formatted Object Messages */
 #define ABIS_OM_MDISC_FOM		0x80
-/*! \brief Message Discriminator for Man Machine Interface */
+/*! Message Discriminator for Man Machine Interface */
 #define ABIS_OM_MDISC_MMI		0x40
-/*! \brief Message Discriminator for TRAU management */
+/*! Message Discriminator for TRAU management */
 #define ABIS_OM_MDISC_TRAU		0x20
-/*! \brief Message Discriminator for Manufacturer Specific Messages */
+/*! Message Discriminator for Manufacturer Specific Messages */
 #define ABIS_OM_MDISC_MANUF		0x10
 
-/*! \brief Entire OML message is in the L2 frame */
+/*! Entire OML message is in the L2 frame */
 #define ABIS_OM_PLACEMENT_ONLY		0x80
-/*! \brief First fragment of OML message is in this L2 frame */
+/*! First fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_FIRST 	0x40
-/*! \brief Middle fragment of OML message is in this L2 frame */
+/*! Middle fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_MIDDLE	0x20
-/*! \brief Last fragment of OML message is in this L2 frame */
+/*! Last fragment of OML message is in this L2 frame */
 #define ABIS_OM_PLACEMENT_LAST		0x10
 
-/*! \brief OML Object Instance */
+/*! OML Object Instance */
 struct abis_om_obj_inst {
-	uint8_t	bts_nr;	/*!< \brief BTS Number */
-	uint8_t	trx_nr;	/*!< \brief TRX Number */
-	uint8_t	ts_nr;	/*!< \brief Timeslot Number */
+	uint8_t	bts_nr;	/*!< BTS Number */
+	uint8_t	trx_nr;	/*!< TRX Number */
+	uint8_t	ts_nr;	/*!< Timeslot Number */
 } __attribute__ ((packed));
 
-/*! \brief OML Object Instance */
+/*! OML Object Instance */
 struct abis_om_fom_hdr {
-	uint8_t	msg_type;	/*!< \brief Message Type (\ref abis_nm_msgtype) */
-	uint8_t	obj_class;	/*!< \brief Object Class (\ref abis_nm_obj_class) */
-	struct abis_om_obj_inst	obj_inst; /*!< \brief Object Instance */
-	uint8_t	data[0];	/*!< \brief Data */
+	uint8_t	msg_type;	/*!< Message Type (\ref abis_nm_msgtype) */
+	uint8_t	obj_class;	/*!< Object Class (\ref abis_nm_obj_class) */
+	struct abis_om_obj_inst	obj_inst; /*!< Object Instance */
+	uint8_t	data[0];	/*!< Data */
 } __attribute__ ((packed));
 
-/*! \brief Size of the OML FOM header in octets */
+/*! Size of the OML FOM header in octets */
 #define ABIS_OM_FOM_HDR_SIZE	(sizeof(struct abis_om_hdr) + sizeof(struct abis_om_fom_hdr))
 
-/*! \brief OML Message Type (Section 9.1) */
+/*! OML Message Type (Section 9.1) */
 enum abis_nm_msgtype {
 	/* SW Download Management Messages */
 	NM_MT_LOAD_INIT			= 0x01,
@@ -196,7 +196,7 @@
 	NM_MT_SET_ALARM_THRES_NACK,
 };
 
-/*! \brief Siemens specific OML Message Types */
+/*! Siemens specific OML Message Types */
 enum abis_nm_msgtype_bs11 {
 	NM_MT_BS11_RESET_RESOURCE	= 0x74,
 
@@ -232,7 +232,7 @@
 	NM_MT_BS11_RECONNECT_ACK,
 };
 
-/*! \brief ip.access specific OML Message Types */
+/*! ip.access specific OML Message Types */
 enum abis_nm_msgtype_ipacc {
 	NM_MT_IPACC_RESTART		= 0x87,
 	NM_MT_IPACC_RESTART_ACK,
@@ -260,7 +260,7 @@
 	NM_MT_IPACC_SET_ATTR_NACK,
 };
 
-/*! \brief OML Probable Cause (Section 9.4.43) Manufacturer specific values */
+/*! OML Probable Cause (Section 9.4.43) Manufacturer specific values */
 enum abis_mm_event_causes {
 	/* Critical causes */
 	OSMO_EVT_CRIT_SW_FATAL		= 0x0000,
@@ -288,7 +288,7 @@
 	NM_BS11_CANR_DCS1800	= 0x01,
 };
 
-/*! \brief OML Object Class (Section 9.2) */
+/*! OML Object Class (Section 9.2) */
 enum abis_nm_obj_class {
 	NM_OC_SITE_MANAGER		= 0x00,
 	NM_OC_BTS,
@@ -319,7 +319,7 @@
 	NM_OC_NULL			= 0xff,
 };
 
-/*! \brief OML Attributes / IEs (Section 9.4) */
+/*! OML Attributes / IEs (Section 9.4) */
 enum abis_nm_attr {
 	NM_ATT_ABIS_CHANNEL	= 0x01,
 	NM_ATT_ADD_INFO,
@@ -519,7 +519,7 @@
 };
 #define NM_ATT_BS11_FILE_DATA	NM_ATT_EVENT_TYPE
 
-/*! \brief OML Administrative State (Section 9.4.4) */
+/*! OML Administrative State (Section 9.4.4) */
 enum abis_nm_adm_state {
 	NM_STATE_LOCKED		= 0x01,
 	NM_STATE_UNLOCKED	= 0x02,
@@ -527,7 +527,7 @@
 	NM_STATE_NULL		= 0xff,
 };
 
-/*! \brief OML Availability State (Section 9.4.7) */
+/*! OML Availability State (Section 9.4.7) */
 enum abis_nm_avail_state {
 	NM_AVSTATE_IN_TEST	= 1,
 	NM_AVSTATE_POWER_OFF	= 2,
@@ -538,14 +538,14 @@
 	NM_AVSTATE_OK		= 0xff,
 };
 
-/*! \brief OML Operational State */
+/*! OML Operational State */
 enum abis_nm_op_state {
 	NM_OPSTATE_DISABLED	= 1,
 	NM_OPSTATE_ENABLED	= 2,
 	NM_OPSTATE_NULL		= 0xff,
 };
 
-/* \brief Channel Combination (Section 9.4.13) */
+/* Channel Combination (Section 9.4.13) */
 enum abis_nm_chan_comb {
 	NM_CHANC_TCHFull	= 0x00,	/* TCH/F + TCH/H + SACCH/TF */
 	NM_CHANC_TCHHalf	= 0x01, /* TCH/H(0,1) + FACCH/H(0,1) +
@@ -570,7 +570,7 @@
 	NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH = 0x90,
 };
 
-/*! \brief Event Type (Section 9.4.16) */
+/*! Event Type (Section 9.4.16) */
 enum abis_nm_event_type {
 	NM_EVT_COMM_FAIL	= 0x00,
 	NM_EVT_QOS_FAIL		= 0x01,
@@ -579,7 +579,7 @@
 	NM_EVT_ENV_FAIL		= 0x04,
 };
 
-/*! \brief Perceived Severity (Section: 9.4.63) */
+/*! Perceived Severity (Section: 9.4.63) */
 enum abis_nm_severity {
 	NM_SEVER_CEASED		= 0x00,
 	NM_SEVER_CRITICAL	= 0x01,
@@ -589,7 +589,7 @@
 	NM_SEVER_INDETERMINATE	= 0x05,
 };
 
-/*! \brief Probable Cause Type (Section 9.4.43) */
+/*! Probable Cause Type (Section 9.4.43) */
 enum abis_nm_pcause_type {
 	NM_PCAUSE_T_X721	= 0x01,
 	NM_PCAUSE_T_GSM		= 0x02,
@@ -600,7 +600,7 @@
 extern const struct value_string abis_nm_msgtype_names[];
 extern const struct value_string abis_nm_att_names[];
 
-/*! \brief NACK causes (Section 9.4.36) */
+/*! NACK causes (Section 9.4.36) */
 enum abis_nm_nack_cause {
 	/* General Nack Causes */
 	NM_NACK_INCORR_STRUCT		= 0x01,
@@ -638,15 +638,15 @@
 	NM_NACK_MEAS_NOTSTART		= 0x2c,
 };
 
-/*! \brief Abis OML Channel (Section 9.4.1) */
+/*! Abis OML Channel (Section 9.4.1) */
 struct abis_nm_channel {
 	uint8_t	attrib;
-	uint8_t	bts_port;	/*!< \brief BTS port number */
-	uint8_t	timeslot;	/*!< \brief E1 timeslot */
-	uint8_t	subslot;	/*!< \brief E1 sub-slot */
+	uint8_t	bts_port;	/*!< BTS port number */
+	uint8_t	timeslot;	/*!< E1 timeslot */
+	uint8_t	subslot;	/*!< E1 sub-slot */
 } __attribute__ ((packed));
 
-/*! \brief 3GPP TS 12.21 9.4.53 T200 index */
+/*! 3GPP TS 12.21 9.4.53 T200 index */
 enum abis_nm_t200_idx {
 	T200_SDCCH		= 0,
 	T200_FACCH_F		= 1,
@@ -659,7 +659,7 @@
 
 extern const uint8_t abis_nm_t200_ms[];
 
-/*! \brief Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */
+/*! Siemens BS-11 specific objects in the SienemsHW (0xA5) object class */
 enum abis_bs11_objtype {
 	BS11_OBJ_ALCO		= 0x01,
 	BS11_OBJ_BBSIG		= 0x02,	/* obj_class: 0,1 */
@@ -670,7 +670,7 @@
 	BS11_OBJ_PA		= 0x09,	/* obj_class: 0, 1*/
 };
 
-/*! \brief Siemens BS11 TRX power */
+/*! Siemens BS11 TRX power */
 enum abis_bs11_trx_power {
 	BS11_TRX_POWER_GSM_2W	= 0x06,
 	BS11_TRX_POWER_GSM_250mW= 0x07,
@@ -682,20 +682,20 @@
 	BS11_TRX_POWER_DCS_160mW= 0x0d,
 };
 
-/*! \brief Siemens BS11 PLL mode */
+/*! Siemens BS11 PLL mode */
 enum abis_bs11_li_pll_mode {
 	BS11_LI_PLL_LOCKED	= 2,
 	BS11_LI_PLL_STANDALONE	= 3,
 };
 
-/*! \brief Siemens BS11 E1 line configuration */
+/*! Siemens BS11 E1 line configuration */
 enum abis_bs11_line_cfg {
 	BS11_LINE_CFG_STAR	= 0x00,
 	BS11_LINE_CFG_MULTIDROP	= 0x01,
 	BS11_LINE_CFG_LOOP	= 0x02,
 };
 
-/*! \brief Siemens BS11 boot phase */
+/*! Siemens BS11 boot phase */
 enum abis_bs11_phase {
 	BS11_STATE_SOFTWARE_RQD		= 0x01,
 	BS11_STATE_LOAD_SMU_INTENDED	= 0x11,
@@ -712,7 +712,7 @@
 	BS11_STATE_ABIS_LOAD		= 0x13,
 };
 
-/*! \brief ip.access test number */
+/*! ip.access test number */
 enum abis_nm_ipacc_test_no {
 	NM_IPACC_TESTNO_RLOOP_ANT	= 0x01,
 	NM_IPACC_TESTNO_RLOOP_XCVR	= 0x02,
@@ -726,7 +726,7 @@
 	NM_IPACC_TESTNO_BCCCH_MONITOR	= 0x46,
 };
 
-/*! \brief first byte after length inside NM_ATT_TEST_REPORT */
+/*! first byte after length inside NM_ATT_TEST_REPORT */
 enum abis_nm_ipacc_test_res {
 	NM_IPACC_TESTRES_SUCCESS	= 0,
 	NM_IPACC_TESTRES_TIMEOUT	= 1,
@@ -735,7 +735,7 @@
 	NM_IPACC_TESTRES_STOPPED	= 4,
 };
 
-/*! \brief internal IE inside NM_ATT_TEST_REPORT */
+/*! internal IE inside NM_ATT_TEST_REPORT */
 enum abis_nm_ipacc_testres_ie {
 	NM_IPACC_TR_IE_FREQ_ERR_LIST	= 3,
 	NM_IPACC_TR_IE_CHAN_USAGE	= 4,
@@ -744,7 +744,7 @@
 	NM_IPACC_TR_IE_FREQ_ERR		= 18,
 };
 
-/*! \brief ip.access IEI */
+/*! ip.access IEI */
 enum ipac_eie {
 	NM_IPAC_EIE_ARFCN_WHITE		= 0x01,
 	NM_IPAC_EIE_ARFCH_BLACK		= 0x02,
@@ -777,7 +777,7 @@
 	NM_IPAC_EIE_BTS_ID		= 0x25,
 };
 
-/*! \brief ip.access NWL BCCH information type */
+/*! ip.access NWL BCCH information type */
 enum ipac_bcch_info_type {
 	IPAC_BINF_RXLEV			= (1 << 8),
 	IPAC_BINF_RXQUAL		= (1 << 9),
@@ -792,7 +792,7 @@
 	IPAC_BINF_CELL_ALLOC		= (1 << 2),
 };
 
-/*! \brief 3GPP TS 52.021 §9.4.62 SW Description */
+/*! 3GPP TS 52.021 §9.4.62 SW Description */
 struct abis_nm_sw_desc {
 	uint8_t file_id[UINT8_MAX];
 	uint8_t file_id_len;
diff --git a/include/osmocom/gsm/rsl.h b/include/osmocom/gsm/rsl.h
index 5da6180..93e27a1 100644
--- a/include/osmocom/gsm/rsl.h
+++ b/include/osmocom/gsm/rsl.h
@@ -17,13 +17,13 @@
 
 extern const struct tlv_definition rsl_att_tlvdef;
 
-/*! \brief Parse RSL TLV structure using \ref tlv_parse */
+/*! Parse RSL TLV structure using \ref tlv_parse */
 #define rsl_tlv_parse(dec, buf, len)     \
 			tlv_parse(dec, &rsl_att_tlvdef, buf, len, 0, 0)
 
 extern const struct tlv_definition rsl_ipac_eie_tlvdef;
 
-/*! \brief Parse RSL IPAC EIE TLV structure using \ref tlv_parse */
+/*! Parse RSL IPAC EIE TLV structure using \ref tlv_parse */
 #define rsl_ipac_eie_tlv_parse(dec, buf, len)     \
 			tlv_parse(dec, &rsl_ipac_eie_tlvdef, buf, len, 0, 0)
 
@@ -58,7 +58,7 @@
 
 extern const struct value_string rsl_act_type_names[];
 
-/*! \brief Return a human readable name for GSM 08.58 RSL_ACT_* constants. */
+/*! Return a human readable name for GSM 08.58 RSL_ACT_* constants. */
 static inline const char *rsl_act_type_name(uint8_t act_type)
 {
 	return get_value_string(rsl_act_type_names, act_type);
diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h
index 4a9bd27..fa3b656 100644
--- a/include/osmocom/gsm/tlv.h
+++ b/include/osmocom/gsm/tlv.h
@@ -25,21 +25,21 @@
 
 */
 
-/*! \brief gross length of a LV type field */
+/*! gross length of a LV type field */
 #define LV_GROSS_LEN(x)		(x+1)
-/*! \brief gross length of a TLV type field */
+/*! gross length of a TLV type field */
 #define TLV_GROSS_LEN(x)	(x+2)
-/*! \brief gross length of a TLV16 type field */
+/*! gross length of a TLV16 type field */
 #define TLV16_GROSS_LEN(x)	((2*x)+2)
-/*! \brief gross length of a TL16V type field */
+/*! gross length of a TL16V type field */
 #define TL16V_GROSS_LEN(x)	(x+3)
-/*! \brief gross length of a L16TV type field */
+/*! gross length of a L16TV type field */
 #define L16TV_GROSS_LEN(x)	(x+3)
 
-/*! \brief maximum length of TLV of one byte length */
+/*! maximum length of TLV of one byte length */
 #define TVLV_MAX_ONEBYTE	0x7f
 
-/*! \brief gross length of a TVLV type field */
+/*! gross length of a TVLV type field */
 static inline uint16_t TVLV_GROSS_LEN(uint16_t len)
 {
 	if (len <= TVLV_MAX_ONEBYTE)
@@ -48,7 +48,7 @@
 		return TL16V_GROSS_LEN(len);
 }
 
-/*! \brief gross length of vTvL header (tag+len) */
+/*! gross length of vTvL header (tag+len) */
 static inline uint16_t VTVL_GAN_GROSS_LEN(uint16_t tag, uint16_t len)
 {
 	uint16_t ret = 2;
@@ -62,7 +62,7 @@
 	return ret;
 }
 
-/*! \brief gross length of vTvLV (tag+len+val) */
+/*! gross length of vTvLV (tag+len+val) */
 static inline uint16_t VTVLV_GAN_GROSS_LEN(uint16_t tag, uint16_t len)
 {
 	uint16_t ret;
@@ -80,7 +80,7 @@
 
 /* TLV generation */
 
-/*! \brief put (append) a LV field */
+/*! put (append) a LV field */
 static inline uint8_t *lv_put(uint8_t *buf, uint8_t len,
 				const uint8_t *val)
 {
@@ -89,7 +89,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TLV field */
+/*! put (append) a TLV field */
 static inline uint8_t *tlv_put(uint8_t *buf, uint8_t tag, uint8_t len,
 				const uint8_t *val)
 {
@@ -99,7 +99,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TLV16 field */
+/*! put (append) a TLV16 field */
 static inline uint8_t *tlv16_put(uint8_t *buf, uint8_t tag, uint8_t len,
 				const uint16_t *val)
 {
@@ -109,7 +109,7 @@
 	return buf + len*2;
 }
 
-/*! \brief put (append) a TL16V field */
+/*! put (append) a TL16V field */
 static inline uint8_t *tl16v_put(uint8_t *buf, uint8_t tag, uint16_t len,
 				const uint8_t *val)
 {
@@ -120,7 +120,7 @@
 	return buf + len*2;
 }
 
-/*! \brief put (append) a TvLV field */
+/*! put (append) a TvLV field */
 static inline uint8_t *tvlv_put(uint8_t *buf, uint8_t tag, uint16_t len,
 				 const uint8_t *val)
 {
@@ -135,7 +135,7 @@
 	return ret;
 }
 
-/*! \brief put (append) a variable-length tag or variable-length length * */
+/*! put (append) a variable-length tag or variable-length length * */
 static inline uint8_t *vt_gan_put(uint8_t *buf, uint16_t tag)
 {
 	if (tag > TVLV_MAX_ONEBYTE) {
@@ -148,7 +148,7 @@
 	return buf;
 }
 
-/* \brief put (append) vTvL (GAN) field (tag + length)*/
+/* put (append) vTvL (GAN) field (tag + length)*/
 static inline uint8_t *vtvl_gan_put(uint8_t *buf, uint16_t tag, uint16_t len)
 {
 	uint8_t *ret;
@@ -157,7 +157,7 @@
 	return vt_gan_put(ret, len);
 }
 
-/* \brief put (append) vTvLV (GAN) field (tag + length + val) */
+/* put (append) vTvLV (GAN) field (tag + length + val) */
 static inline uint8_t *vtvlv_gan_put(uint8_t *buf, uint16_t tag, uint16_t len,
 				      const uint8_t *val)
 {
@@ -171,14 +171,14 @@
 	return ret;
 }
 
-/*! \brief put (append) a TLV16 field to \ref msgb */
+/*! put (append) a TLV16 field to \ref msgb */
 static inline uint8_t *msgb_tlv16_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint16_t *val)
 {
 	uint8_t *buf = msgb_put(msg, TLV16_GROSS_LEN(len));
 	return tlv16_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TL16V field to \ref msgb */
+/*! put (append) a TL16V field to \ref msgb */
 static inline uint8_t *msgb_tl16v_put(struct msgb *msg, uint8_t tag, uint16_t len,
 					const uint8_t *val)
 {
@@ -186,7 +186,7 @@
 	return tl16v_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TvLV field to \ref msgb */
+/*! put (append) a TvLV field to \ref msgb */
 static inline uint8_t *msgb_tvlv_put(struct msgb *msg, uint8_t tag, uint16_t len,
 				      const uint8_t *val)
 {
@@ -194,7 +194,7 @@
 	return tvlv_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a vTvLV field to \ref msgb */
+/*! put (append) a vTvLV field to \ref msgb */
 static inline uint8_t *msgb_vtvlv_gan_put(struct msgb *msg, uint16_t tag,
 					  uint16_t len, const uint8_t *val)
 {
@@ -202,7 +202,7 @@
 	return vtvlv_gan_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a L16TV field to \ref msgb */
+/*! put (append) a L16TV field to \ref msgb */
 static inline uint8_t *msgb_l16tv_put(struct msgb *msg, uint16_t len, uint8_t tag,
                                        const uint8_t *val)
 {
@@ -215,14 +215,14 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a V field */
+/*! put (append) a V field */
 static inline uint8_t *v_put(uint8_t *buf, uint8_t val)
 {
 	*buf++ = val;
 	return buf;
 }
 
-/*! \brief put (append) a TV field */
+/*! put (append) a TV field */
 static inline uint8_t *tv_put(uint8_t *buf, uint8_t tag, 
 				uint8_t val)
 {
@@ -231,7 +231,7 @@
 	return buf;
 }
 
-/*! \brief put (append) a TVfixed field */
+/*! put (append) a TVfixed field */
 static inline uint8_t *tv_fixed_put(uint8_t *buf, uint8_t tag,
 				    unsigned int len, const uint8_t *val)
 {
@@ -240,7 +240,7 @@
 	return buf + len;
 }
 
-/*! \brief put (append) a TV16 field
+/*! put (append) a TV16 field
  *  \param[in,out] buf data buffer
  *  \param[in] tag Tag value
  *  \param[in] val Value (in host byte order!)
@@ -254,7 +254,7 @@
 	return buf;
 }
 
-/*! \brief put (append) a LV field to a \ref msgb
+/*! put (append) a LV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_lv_put(struct msgb *msg, uint8_t len, const uint8_t *val)
 {
@@ -262,7 +262,7 @@
 	return lv_put(buf, len, val);
 }
 
-/*! \brief put (append) a TLV field to a \ref msgb
+/*! put (append) a TLV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tlv_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val)
 {
@@ -270,7 +270,7 @@
 	return tlv_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a TV field to a \ref msgb
+/*! put (append) a TV field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv_put(struct msgb *msg, uint8_t tag, uint8_t val)
 {
@@ -278,7 +278,7 @@
 	return tv_put(buf, tag, val);
 }
 
-/*! \brief put (append) a TVfixed field to a \ref msgb
+/*! put (append) a TVfixed field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv_fixed_put(struct msgb *msg, uint8_t tag,
 					unsigned int len, const uint8_t *val)
@@ -287,7 +287,7 @@
 	return tv_fixed_put(buf, tag, len, val);
 }
 
-/*! \brief put (append) a V field to a \ref msgb
+/*! put (append) a V field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_v_put(struct msgb *msg, uint8_t val)
 {
@@ -295,7 +295,7 @@
 	return v_put(buf, val);
 }
 
-/*! \brief put (append) a TV16 field to a \ref msgb
+/*! put (append) a TV16 field to a \ref msgb
  *  \returns pointer to first byte after newly-put information */
 static inline uint8_t *msgb_tv16_put(struct msgb *msg, uint8_t tag, uint16_t val)
 {
@@ -303,7 +303,7 @@
 	return tv16_put(buf, tag, val);
 }
 
-/*! \brief push (prepend) a TLV field to a \ref msgb
+/*! push (prepend) a TLV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tlv_push(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val)
 {
@@ -312,7 +312,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TV field to a \ref msgb
+/*! push (prepend) a TV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tv_push(struct msgb *msg, uint8_t tag, uint8_t val)
 {
@@ -321,7 +321,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TV16 field to a \ref msgb
+/*! push (prepend) a TV16 field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tv16_push(struct msgb *msg, uint8_t tag, uint16_t val)
 {
@@ -330,7 +330,7 @@
 	return buf;
 }
 
-/*! \brief push (prepend) a TvLV field to a \ref msgb
+/*! push (prepend) a TvLV field to a \ref msgb
  *  \returns pointer to first byte of newly-pushed information */
 static inline uint8_t *msgb_tvlv_push(struct msgb *msg, uint8_t tag, uint16_t len,
 				      const uint8_t *val)
@@ -340,7 +340,7 @@
 	return buf;
 }
 
-/* \brief push (prepend) a vTvL header to a \ref msgb
+/* push (prepend) a vTvL header to a \ref msgb
  */
 static inline uint8_t *msgb_vtvl_gan_push(struct msgb *msg, uint16_t tag,
 					   uint16_t len)
@@ -361,37 +361,37 @@
 
 /* TLV parsing */
 
-/*! \brief Entry in a TLV parser array */
+/*! Entry in a TLV parser array */
 struct tlv_p_entry {
-	uint16_t len;		/*!< \brief length */
-	const uint8_t *val;	/*!< \brief pointer to value */
+	uint16_t len;		/*!< length */
+	const uint8_t *val;	/*!< pointer to value */
 };
 
-/*! \brief TLV type */
+/*! TLV type */
 enum tlv_type {
-	TLV_TYPE_NONE,		/*!< \brief no type */
-	TLV_TYPE_FIXED,		/*!< \brief fixed-length value-only */
-	TLV_TYPE_T,		/*!< \brief tag-only */
-	TLV_TYPE_TV,		/*!< \brief tag-value (8bit) */
-	TLV_TYPE_TLV,		/*!< \brief tag-length-value */
-	TLV_TYPE_TL16V,		/*!< \brief tag, 16 bit length, value */
-	TLV_TYPE_TvLV,		/*!< \brief tag, variable length, value */
-	TLV_TYPE_SINGLE_TV,	/*!< \brief tag and value (both 4 bit) in 1 byte */
-	TLV_TYPE_vTvLV_GAN,	/*!< \brief variable-length tag, variable-length length */
+	TLV_TYPE_NONE,		/*!< no type */
+	TLV_TYPE_FIXED,		/*!< fixed-length value-only */
+	TLV_TYPE_T,		/*!< tag-only */
+	TLV_TYPE_TV,		/*!< tag-value (8bit) */
+	TLV_TYPE_TLV,		/*!< tag-length-value */
+	TLV_TYPE_TL16V,		/*!< tag, 16 bit length, value */
+	TLV_TYPE_TvLV,		/*!< tag, variable length, value */
+	TLV_TYPE_SINGLE_TV,	/*!< tag and value (both 4 bit) in 1 byte */
+	TLV_TYPE_vTvLV_GAN,	/*!< variable-length tag, variable-length length */
 };
 
-/*! \brief Definition of a single IE (Information Element) */
+/*! Definition of a single IE (Information Element) */
 struct tlv_def {
-	enum tlv_type type;	/*!< \brief TLV type */
-	uint8_t fixed_len;	/*!< \brief length in case of \ref TLV_TYPE_FIXED */
+	enum tlv_type type;	/*!< TLV type */
+	uint8_t fixed_len;	/*!< length in case of \ref TLV_TYPE_FIXED */
 };
 
-/*! \brief Definition of All 256 IE / TLV */
+/*! Definition of All 256 IE / TLV */
 struct tlv_definition {
 	struct tlv_def def[256];
 };
 
-/*! \brief result of the TLV parser */
+/*! result of the TLV parser */
 struct tlv_parsed {
 	struct tlv_p_entry lv[256];
 };
@@ -414,7 +414,7 @@
 #define TLVP_PRES_LEN(tp, tag, min_len) \
 	(TLVP_PRESENT(tp, tag) && TLVP_LEN(tp, tag) >= min_len)
 
-/*! \brief Align given TLV element with 16 bit value to an even address
+/*! Align given TLV element with 16 bit value to an even address
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 16 bit value
@@ -426,7 +426,7 @@
 	return res;
 }
 
-/*! \brief Align given TLV element with 32 bit value to an address that is a multiple of 4
+/*! Align given TLV element with 32 bit value to an address that is a multiple of 4
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 32 bit value
@@ -438,7 +438,7 @@
 	return res;
 }
 
-/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+/*! Retrieve (possibly unaligned) TLV element and convert to host byte order
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 16 bit value in host byte order
@@ -448,7 +448,7 @@
 	return osmo_load16be(TLVP_VAL(tp, pos));
 }
 
-/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+/*! Retrieve (possibly unaligned) TLV element and convert to host byte order
  *  \param[in] tp pointer to \ref tlv_parsed
  *  \param[in] pos element to return
  *  \returns aligned 32 bit value in host byte order
diff --git a/include/osmocom/sim/sim.h b/include/osmocom/sim/sim.h
index ba6fb70..eb95480 100644
--- a/include/osmocom/sim/sim.h
+++ b/include/osmocom/sim/sim.h
@@ -8,10 +8,10 @@
 
 /*!
  * \file sim.h
- * \brief Routines for helping with SIM (ISO/IEC 7816-4 more generally) communication.
+ * Routines for helping with SIM (ISO/IEC 7816-4 more generally) communication.
  */
 
-/*! \brief command-response pairs cases
+/*! command-response pairs cases
  *
  * Enumeration used to identify the APDU structure based on command-response pair case , as specified in ISO/IEC 7816-3:2006(E) §12.1.
  */
@@ -25,7 +25,7 @@
 	APDU_CASE_4E /*!< command header, command data field (extended), response data field (extended) */
 };
 
-/*! \brief APDU/TPDU command header
+/*! APDU/TPDU command header
  *
  * This structure encode an APDU/TPDU command header, as specified in ISO/IEC 7816-3:2006(E) §12.2 and §12.3.
  * The APDU (application layer) can be encoded as different TPDUs (transport layer), depending on the transport protocol used.
@@ -44,7 +44,7 @@
 
 #define msgb_apdu_dr(__x)
 
-/*! \brief APDU command body
+/*! APDU command body
  *
  * This structure encode a command body, as specified in ISO/IEC 7816-3:2006(E) §12.1.
  * The data and response contents should be provided along with this structure.
@@ -56,12 +56,12 @@
 	uint16_t sw; /*!< status word, composed of SW1 and SW2 bytes */
 } __attribute__((__may_alias__));
 #define OSIM_MSGB_CB(__msgb)	((struct osim_msgb_cb *)&((__msgb)->cb[0]))
-/*! \brief status word from msgb->cb */
+/*! status word from msgb->cb */
 #define msgb_apdu_case(__x)	OSIM_MSGB_CB(__x)->apduc
 #define msgb_apdu_lc(__x)	OSIM_MSGB_CB(__x)->lc
 #define msgb_apdu_le(__x)	OSIM_MSGB_CB(__x)->le
 #define msgb_apdu_sw(__x)	OSIM_MSGB_CB(__x)->sw
-/*! \brief pointer to the command header of the APDU */
+/*! pointer to the command header of the APDU */
 #define msgb_apdu_h(__x)	((struct osim_apdu_cmd_hdr *)(__x)->l2h)
 
 #define msgb_apdu_dc(__x)	((__x)->l2h + sizeof(struct osim_apdu_cmd_hdr))
@@ -73,7 +73,7 @@
 struct osim_file_desc;
 struct osim_decoded_data;
 
-/*! \brief Operations for a given File */
+/*! Operations for a given File */
 struct osim_file_ops {
 	/*! Parse binary file data into osim_decoded_data */
 	int (*parse)(struct osim_decoded_data *dd,
@@ -102,7 +102,7 @@
 	ELEM_REPR_HEX,
 };
 
-/*! \brief A single decoded element inside a file */
+/*! A single decoded element inside a file */
 struct osim_decoded_element {
 	struct llist_head list;
 
@@ -176,7 +176,7 @@
 	} size;
 };
 
-/*! \brief A single instance of a file: Descriptor and contents */
+/*! A single instance of a file: Descriptor and contents */
 struct osim_file {
 	/*! Descriptor for the file */
 	const struct osim_file_desc *desc;
@@ -282,7 +282,7 @@
 	.class = SW_CLS_NONE, .u.str = NULL		\
 }
 
-/*! \brief A card profile (e.g. SIM card */
+/*! A card profile (e.g. SIM card */
 struct osim_card_profile {
 	const char *name;
 	/*! Descriptor for the MF (root directory */
@@ -343,33 +343,33 @@
 };
 
 struct osim_reader_hdl {
-	/*! \brief member in global list of readers */
+	/*! member in global list of readers */
 	struct llist_head list;
 	const struct osim_reader_ops *ops;
 	uint32_t proto_supported;
 	void *priv;
-	/*! \brief current card, if any */
+	/*! current card, if any */
 	struct osim_card_hdl *card;
 };
 
 struct osim_card_hdl {
-	/*! \brief member in global list of cards */
+	/*! member in global list of cards */
 	struct llist_head list;
-	/*! \brief reader through which card is accessed */
+	/*! reader through which card is accessed */
 	struct osim_reader_hdl *reader;
-	/*! \brief card profile */
+	/*! card profile */
 	struct osim_card_profile *prof;
-	/*! \brief card protocol */
+	/*! card protocol */
 	enum osim_proto proto;
 
-	/*! \brief list of channels for this card */
+	/*! list of channels for this card */
 	struct llist_head channels;
 };
 
 struct osim_chan_hdl {
-	/*! \brief linked to card->channels */
+	/*! linked to card->channels */
 	struct llist_head list;
-	/*! \brief card to which this channel belongs */
+	/*! card to which this channel belongs */
 	struct osim_card_hdl *card;
 	const struct osim_file_desc *cwd;
 };
diff --git a/include/osmocom/vty/command.h b/include/osmocom/vty/command.h
index 62989c1..9a072d7 100644
--- a/include/osmocom/vty/command.h
+++ b/include/osmocom/vty/command.h
@@ -31,97 +31,97 @@
  */
 /*! \file command.h */
 
-/*! \brief Host configuration variable */
+/*! Host configuration variable */
 struct host {
-	/*! \brief Host name of this router. */
+	/*! Host name of this router. */
 	char *name;
 
-	/*! \brief Password for vty interface. */
+	/*! Password for vty interface. */
 	char *password;
 	char *password_encrypt;
 
-	/*! \brief Enable password */
+	/*! Enable password */
 	char *enable;
 	char *enable_encrypt;
 
-	/*! \brief System wide terminal lines. */
+	/*! System wide terminal lines. */
 	int lines;
 
-	/*! \brief Log filename. */
+	/*! Log filename. */
 	char *logfile;
 
-	/*! \brief config file name of this host */
+	/*! config file name of this host */
 	char *config;
 
-	/*! \brief Flags for services */
+	/*! Flags for services */
 	int advanced;
 	int encrypt;
 
-	/*! \brief Banner configuration. */
+	/*! Banner configuration. */
 	const char *motd;
 	char *motdfile;
 
-	/*! \brief VTY application information */
+	/*! VTY application information */
 	const struct vty_app_info *app_info;
 };
 
-/*! \brief There are some command levels which called from command node. */
+/*! There are some command levels which called from command node. */
 enum node_type {
-	AUTH_NODE,		/*!< \brief Authentication mode of vty interface. */
-	VIEW_NODE,		/*!< \brief View node. Default mode of vty interface. */
-	AUTH_ENABLE_NODE,	/*!< \brief Authentication mode for change enable. */
-	ENABLE_NODE,		/*!< \brief Enable node. */
-	CONFIG_NODE,		/*!< \brief Config node. Default mode of config file. */
-	SERVICE_NODE,		/*!< \brief Service node. */
-	DEBUG_NODE,		/*!< \brief Debug node. */
-	CFG_LOG_NODE,		/*!< \brief Configure the logging */
-	CFG_STATS_NODE,		/*!< \brief Configure the statistics */
+	AUTH_NODE,		/*!< Authentication mode of vty interface. */
+	VIEW_NODE,		/*!< View node. Default mode of vty interface. */
+	AUTH_ENABLE_NODE,	/*!< Authentication mode for change enable. */
+	ENABLE_NODE,		/*!< Enable node. */
+	CONFIG_NODE,		/*!< Config node. Default mode of config file. */
+	SERVICE_NODE,		/*!< Service node. */
+	DEBUG_NODE,		/*!< Debug node. */
+	CFG_LOG_NODE,		/*!< Configure the logging */
+	CFG_STATS_NODE,		/*!< Configure the statistics */
 
-	VTY_NODE,		/*!< \brief Vty node. */
+	VTY_NODE,		/*!< Vty node. */
 
-	L_E1INP_NODE,		/*!< \brief E1 line in libosmo-abis. */
-	L_IPA_NODE,		/*!< \brief IPA proxying commands in libosmo-abis. */
-	L_NS_NODE,		/*!< \brief NS node in libosmo-gb. */
-	L_BSSGP_NODE,		/*!< \brief BSSGP node in libosmo-gb. */
-	L_CTRL_NODE,		/*!< \brief Control interface node. */
+	L_E1INP_NODE,		/*!< E1 line in libosmo-abis. */
+	L_IPA_NODE,		/*!< IPA proxying commands in libosmo-abis. */
+	L_NS_NODE,		/*!< NS node in libosmo-gb. */
+	L_BSSGP_NODE,		/*!< BSSGP node in libosmo-gb. */
+	L_CTRL_NODE,		/*!< Control interface node. */
 
-	L_CS7_NODE,		/*!< \brief SS7 root node */
-	L_CS7_AS_NODE,		/*!< \brief SS7 Application Server */
-	L_CS7_ASP_NODE,		/*!< \brief SS7 Application Server Process */
-	L_CS7_XUA_NODE,		/*!< \brief SS7 xUA Listener */
-	L_CS7_RTABLE_NODE,	/*!< \brief SS7 Routing Table */
-	L_CS7_LINK_NODE,	/*!< \brief SS7 Link */
-	L_CS7_LINKSET_NODE,	/*!< \brief SS7 Linkset */
-	L_CS7_SCCPADDR_NODE,	/*!< \brief SS7 SCCP Address */
-	L_CS7_SCCPADDR_GT_NODE,	/*!< \brief SS7 SCCP Global Title */
+	L_CS7_NODE,		/*!< SS7 root node */
+	L_CS7_AS_NODE,		/*!< SS7 Application Server */
+	L_CS7_ASP_NODE,		/*!< SS7 Application Server Process */
+	L_CS7_XUA_NODE,		/*!< SS7 xUA Listener */
+	L_CS7_RTABLE_NODE,	/*!< SS7 Routing Table */
+	L_CS7_LINK_NODE,	/*!< SS7 Link */
+	L_CS7_LINKSET_NODE,	/*!< SS7 Linkset */
+	L_CS7_SCCPADDR_NODE,	/*!< SS7 SCCP Address */
+	L_CS7_SCCPADDR_GT_NODE,	/*!< SS7 SCCP Global Title */
 
 	/*
 	 * When adding new nodes to the libosmocore project, these nodes can be
 	 * used to avoid ABI changes for unrelated projects.
 	 */
-	RESERVED3_NODE,		/*!< \brief Reserved for later extensions */
+	RESERVED3_NODE,		/*!< Reserved for later extensions */
 
 	_LAST_OSMOVTY_NODE
 };
 
 #include "vty.h"
 
-/*! \brief Node which has some commands and prompt string and
+/*! Node which has some commands and prompt string and
  * configuration function pointer . */
 struct cmd_node {
-	/*! \brief Node index */
+	/*! Node index */
 	int node;
 
-	/*! \brief Prompt character at vty interface. */
+	/*! Prompt character at vty interface. */
 	const char *prompt;
 
-	/*! \brief Is this node's configuration goes to vtysh ? */
+	/*! Is this node's configuration goes to vtysh ? */
 	int vtysh;
 
-	/*! \brief Node's configuration write function */
+	/*! Node's configuration write function */
 	int (*func) (struct vty *);
 
-	/*! \brief Vector of this node's command list. */
+	/*! Vector of this node's command list. */
 	vector cmd_vector;
 };
 
@@ -130,26 +130,26 @@
 	CMD_ATTR_HIDDEN,
 };
 
-/*! \brief Structure of a command element */
+/*! Structure of a command element */
 struct cmd_element {
-	const char *string;	/*!< \brief Command specification by string. */
+	const char *string;	/*!< Command specification by string. */
 	int (*func) (struct cmd_element *, struct vty *, int, const char *[]);
-	const char *doc;	/*!< \brief Documentation of this command. */
-	int daemon;		/*!< \brief Daemon to which this command belong. */
-	vector strvec;		/*!< \brief Pointing out each description vector. */
-	unsigned int cmdsize;	/*!< \brief Command index count. */
-	char *config;		/*!< \brief Configuration string */
-	vector subconfig;	/*!< \brief Sub configuration string */
-	unsigned char attr;	/*!< \brief Command attributes */
+	const char *doc;	/*!< Documentation of this command. */
+	int daemon;		/*!< Daemon to which this command belong. */
+	vector strvec;		/*!< Pointing out each description vector. */
+	unsigned int cmdsize;	/*!< Command index count. */
+	char *config;		/*!< Configuration string */
+	vector subconfig;	/*!< Sub configuration string */
+	unsigned char attr;	/*!< Command attributes */
 };
 
-/*! \brief Command description structure. */
+/*! Command description structure. */
 struct desc {
-	const char *cmd;	/*!< \brief Command string. */
-	const char *str;	/*!< \brief Command's description. */
+	const char *cmd;	/*!< Command string. */
+	const char *str;	/*!< Command's description. */
 };
 
-/*! \brief Return value of the commands. */
+/*! Return value of the commands. */
 #define CMD_SUCCESS              0
 #define CMD_WARNING              1
 #define CMD_ERR_NO_MATCH         2
@@ -197,7 +197,7 @@
   static int funcname \
     (struct cmd_element *self, struct vty *vty, int argc, const char *argv[])
 
-/*! \brief Macro for defining a VTY node and function
+/*! Macro for defining a VTY node and function
  *  \param[in] funcname Name of the function implementing the node
  *  \param[in] cmdname Name of the command node
  *  \param[in] cmdstr String with syntax of node
@@ -208,7 +208,7 @@
   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \
   DEFUN_CMD_FUNC_TEXT(funcname)
 
-/*! \brief Macro for defining a non-static (global) VTY node and function
+/*! Macro for defining a non-static (global) VTY node and function
  *  \param[in] funcname Name of the function implementing the node
  *  \param[in] cmdname Name of the command node
  *  \param[in] cmdstr String with syntax of node
diff --git a/include/osmocom/vty/telnet_interface.h b/include/osmocom/vty/telnet_interface.h
index e939ec7..bca9156 100644
--- a/include/osmocom/vty/telnet_interface.h
+++ b/include/osmocom/vty/telnet_interface.h
@@ -31,17 +31,17 @@
 
 /*! \file telnet_interface.h */
 
-/*! \brief A telnet connection */
+/*! A telnet connection */
 struct telnet_connection {
-	/*! \brief linked list header for internal management */
+	/*! linked list header for internal management */
 	struct llist_head entry;
-	/*! \brief private data pointer passed through */
+	/*! private data pointer passed through */
 	void *priv;
-	/*! \brief filedsecriptor (socket ) */
+	/*! filedsecriptor (socket ) */
 	struct osmo_fd fd;
-	/*! \brief VTY instance associated with telnet connection */
+	/*! VTY instance associated with telnet connection */
 	struct vty *vty;
-	/*! \brief logging target associated with this telnet connection */
+	/*! logging target associated with this telnet connection */
 	struct log_target *dbg;
 };
 
diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h
index 43cb0cf..d59f5d4 100644
--- a/include/osmocom/vty/vty.h
+++ b/include/osmocom/vty/vty.h
@@ -25,7 +25,7 @@
 #define VTY_BUFSIZ 512
 #define VTY_MAXHIST 20
 
-/*! \brief VTY events */
+/*! VTY events */
 enum event {
 	VTY_SERV,
 	VTY_READ,
@@ -48,92 +48,92 @@
 
 /*! Internal representation of a single VTY */
 struct vty {
-	/*! \brief underlying file (if any) */
+	/*! underlying file (if any) */
 	FILE *file;
 
-	/*! \brief private data, specified by creator */
+	/*! private data, specified by creator */
 	void *priv;
 
-	/*! \brief File descripter of this vty. */
+	/*! File descripter of this vty. */
 	int fd;
 
-	/*! \brief Is this vty connect to file or not */
+	/*! Is this vty connect to file or not */
 	enum vty_type type;
 
-	/*! \brief Node status of this vty */
+	/*! Node status of this vty */
 	int node;
 
-	/*! \brief Failure count */
+	/*! Failure count */
 	int fail;
 
-	/*! \brief Output buffer. */
+	/*! Output buffer. */
 	struct buffer *obuf;
 
-	/*! \brief Command input buffer */
+	/*! Command input buffer */
 	char *buf;
 
-	/*! \brief Command cursor point */
+	/*! Command cursor point */
 	int cp;
 
-	/*! \brief Command length */
+	/*! Command length */
 	int length;
 
-	/*! \brief Command max length. */
+	/*! Command max length. */
 	int max;
 
-	/*! \brief Histry of command */
+	/*! Histry of command */
 	char *hist[VTY_MAXHIST];
 
-	/*! \brief History lookup current point */
+	/*! History lookup current point */
 	int hp;
 
-	/*! \brief History insert end point */
+	/*! History insert end point */
 	int hindex;
 
-	/*! \brief For current referencing point of interface, route-map,
+	/*! For current referencing point of interface, route-map,
 	   access-list etc... */
 	void *index;
 
-	/*! \brief For multiple level index treatment such as key chain and key. */
+	/*! For multiple level index treatment such as key chain and key. */
 	void *index_sub;
 
-	/*! \brief For escape character. */
+	/*! For escape character. */
 	unsigned char escape;
 
-	/*! \brief Current vty status. */
+	/*! Current vty status. */
 	enum { VTY_NORMAL, VTY_CLOSE, VTY_MORE, VTY_MORELINE } status;
 
-	/*! \brief IAC handling
+	/*! IAC handling
 	 *
 	 * IAC handling: was the last character received the IAC
 	 * (interpret-as-command) escape character (and therefore the next
 	 * character will be the command code)?  Refer to Telnet RFC 854. */
 	unsigned char iac;
 
-	/*! \brief IAC SB (option subnegotiation) handling */
+	/*! IAC SB (option subnegotiation) handling */
 	unsigned char iac_sb_in_progress;
 	/* At the moment, we care only about the NAWS (window size) negotiation,
 	 * and that requires just a 5-character buffer (RFC 1073):
 	 * <NAWS char> <16-bit width> <16-bit height> */
 #define TELNET_NAWS_SB_LEN 5
-	/*! \brief sub-negotiation buffer */
+	/*! sub-negotiation buffer */
 	unsigned char sb_buf[TELNET_NAWS_SB_LEN];
-	/*! \brief How many subnegotiation characters have we received?  
+	/*! How many subnegotiation characters have we received?  
 	 *
 	 * We just drop those that do not fit in the buffer. */
 	size_t sb_len;
 
-	/*! \brief Window width */
+	/*! Window width */
 	int width;
-	/*! \brief Widnow height */
+	/*! Widnow height */
 	int height;
 
-	/*! \brief Configure lines. */
+	/*! Configure lines. */
 	int lines;
 
 	int monitor;
 
-	/*! \brief In configure mode. */
+	/*! In configure mode. */
 	int config;
 };
 
@@ -147,19 +147,19 @@
 
 /*! Information an application registers with the VTY */
 struct vty_app_info {
-	/*! \brief name of the application */
+	/*! name of the application */
 	const char *name;
-	/*! \brief version string of the application */
+	/*! version string of the application */
 	const char *version;
-	/*! \brief copyright string of the application */
+	/*! copyright string of the application */
 	const char *copyright;
-	/*! \brief \ref talloc context */
+	/*! \ref talloc context */
 	void *tall_ctx;
-	/*! \brief call-back for returning to parent n ode */
+	/*! call-back for returning to parent n ode */
 	int (*go_parent_cb)(struct vty *vty);
-	/*! \brief call-back to determine if node is config node */
+	/*! call-back to determine if node is config node */
 	int (*is_config_node)(struct vty *vty, int node);
-	/*! \brief Check if the config is consistent before write */
+	/*! Check if the config is consistent before write */
 	int (*config_is_consistent)(struct vty *vty);
 };
 
diff --git a/src/application.c b/src/application.c
index 8f37c93..e7c8e0f 100644
--- a/src/application.c
+++ b/src/application.c
@@ -22,7 +22,7 @@
  */
 
 /*! \file application.c
- *  \brief Routines for helping with the osmocom application setup.
+ *  Routines for helping with the osmocom application setup.
  */
 
 /*! \mainpage libosmocore Documentation
@@ -90,7 +90,7 @@
 	log_targets_reopen();
 }
 
-/*! \brief Ignore \ref SIGPIPE, \ref SIGALRM, \ref SIGHUP and \ref SIGIO */
+/*! Ignore \ref SIGPIPE, \ref SIGALRM, \ref SIGHUP and \ref SIGIO */
 void osmo_init_ignore_signals(void)
 {
 	/* Signals that by default would terminate */
@@ -106,7 +106,7 @@
 #endif
 }
 
-/*! \brief Initialize the osmocom logging framework
+/*! Initialize the osmocom logging framework
  *  \param[in] log_info Array of available logging sub-systems
  *  \returns 0 on success, -1 in case of error
  *
@@ -125,7 +125,7 @@
 	return 0;
 }
 
-/*! \brief Turn the current process into a background daemon
+/*! Turn the current process into a background daemon
  *
  * This function will fork the process, exit the parent and set umask,
  * create a new session, close stdin/stdout/stderr and chdir to /tmp
diff --git a/src/backtrace.c b/src/backtrace.c
index 6cd798c..0240a75 100644
--- a/src/backtrace.c
+++ b/src/backtrace.c
@@ -21,7 +21,7 @@
  */
 
 /*! \file backtrace.c
- *  \brief Routines realted to generating call back traces
+ *  Routines realted to generating call back traces
  */
 
 #include <stdio.h>
@@ -60,7 +60,7 @@
 	free(strings);
 }
 
-/*! \brief Generate and print a call back-trace
+/*! Generate and print a call back-trace
  *
  * This function will generate a function call back-trace of the
  * current process and print it to stdout. */
@@ -69,7 +69,7 @@
 	_osmo_backtrace(1, 0, 0);
 }
 
-/*! \brief Generate and log a call back-trace
+/*! Generate and log a call back-trace
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Logging level
  *
diff --git a/src/bitcomp.c b/src/bitcomp.c
index 9c01246..acf165e 100644
--- a/src/bitcomp.c
+++ b/src/bitcomp.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file bitcomp.c
- *  \brief Osmocom bit compression routines
+ *  Osmocom bit compression routines
  */
 
 #include <stdint.h>
@@ -222,7 +222,7 @@
 	 }
 };
 
-/*! \brief Make-up codes for a given length
+/*! Make-up codes for a given length
  *
  *  \return Return proper make-up code word for an uninterrupted
  *  sequence of b bits of length len according to modified ITU-T T.4
@@ -307,7 +307,7 @@
 	return bitvec_set_uint(bv, t4_term[b][len], t4_term_length[b][len]);
 }
 
-/*! \brief encode bit vector in-place using T4 encoding
+/*! encode bit vector in-place using T4 encoding
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector to be encoded
  *  \return color code (if the encoding started with 0 or 1) or -1 on
diff --git a/src/bits.c b/src/bits.c
index fe92f93..45ac8e2 100644
--- a/src/bits.c
+++ b/src/bits.c
@@ -26,13 +26,13 @@
 
 /*! \addtogroup bits
  *  @{
- *  \brief Osmocom bit level support code
+ *  Osmocom bit level support code
  */
 
 /*! \file bits.c */
 
 
-/*! \brief convert unpacked bits to packed bits, return length in bytes
+/*! convert unpacked bits to packed bits, return length in bytes
  *  \param[out] out output buffer of packed bits
  *  \param[in] in input buffer of unpacked bits
  *  \param[in] num_bits number of bits
@@ -60,7 +60,7 @@
 	return outptr - out;
 }
 
-/*! \brief Shift unaligned input to octet-aligned output
+/*! Shift unaligned input to octet-aligned output
  *  \param[out] out output buffer, unaligned
  *  \param[in] in input buffer, octet-aligned
  *  \param[in] num_nibbles number of nibbles
@@ -87,7 +87,7 @@
 		out[i] = (in[i - 1] & 0xF) << 4;
 }
 
-/*! \brief Shift unaligned input to octet-aligned output
+/*! Shift unaligned input to octet-aligned output
  *  \param[out] out output buffer, octet-aligned
  *  \param[in] in input buffer, unaligned
  *  \param[in] num_nibbles number of nibbles
@@ -108,7 +108,7 @@
 		out[i] = (in[i] & 0xF) << 4;
 }
 
-/*! \brief convert unpacked bits to soft bits
+/*! convert unpacked bits to soft bits
  *  \param[out] out output buffer of soft bits
  *  \param[in] in input buffer of unpacked bits
  *  \param[in] num_bits number of bits
@@ -120,7 +120,7 @@
 		out[i] = in[i] ? -127 : 127;
 }
 
-/*! \brief convert soft bits to unpacked bits
+/*! convert soft bits to unpacked bits
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] in input buffer of soft bits
  *  \param[in] num_bits number of bits
@@ -132,7 +132,7 @@
 		out[i] = in[i] < 0;
 }
 
-/*! \brief convert packed bits to unpacked bits, return length in bytes
+/*! convert packed bits to unpacked bits, return length in bytes
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] in input buffer of packed bits
  *  \param[in] num_bits number of bits
@@ -174,7 +174,7 @@
 	return cur - out;
 }
 
-/*! \brief convert unpacked bits to packed bits (extended options)
+/*! convert unpacked bits to packed bits (extended options)
  *  \param[out] out output buffer of packed bits
  *  \param[in] out_ofs offset into output buffer
  *  \param[in] in input buffer of unpacked bits
@@ -199,7 +199,7 @@
 	return ((out_ofs + num_bits - 1) >> 3) + 1;
 }
 
-/*! \brief convert packed bits to unpacked bits (extended options)
+/*! convert packed bits to unpacked bits (extended options)
  *  \param[out] out output buffer of unpacked bits
  *  \param[in] out_ofs offset into output buffer
  *  \param[in] in input buffer of packed bits
@@ -221,7 +221,7 @@
 	return out_ofs + num_bits;
 }
 
-/*! \brief generalized bit reversal function
+/*! generalized bit reversal function
  *  \param[in] x the 32bit value to be reversed
  *  \param[in] k the type of reversal requested
  *  \returns the reversed 32bit dword
@@ -242,7 +242,7 @@
 	return x;
 }
 
-/*! \brief reverse the bit-order in each byte of a dword
+/*! reverse the bit-order in each byte of a dword
  *  \param[in] x 32bit input value
  *  \returns 32bit value where bits of each byte have been reversed
  *
@@ -257,7 +257,7 @@
 	return x;
 }
 
-/*! \brief reverse the bit order in a byte
+/*! reverse the bit order in a byte
  *  \param[in] x 8bit input value
  *  \returns 8bit value where bits order has been reversed
  *
@@ -272,7 +272,7 @@
 	return x;
 }
 
-/*! \brief reverse bit-order of each byte in a buffer
+/*! reverse bit-order of each byte in a buffer
  *  \param[in] buf buffer containing bytes to be bit-reversed
  *  \param[in] len length of buffer in bytes
  *
diff --git a/src/bitvec.c b/src/bitvec.c
index 41e4f64..8ed7296 100644
--- a/src/bitvec.c
+++ b/src/bitvec.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup bitvec
  *  @{
- *  \brief Osmocom bit vector abstraction
+ *  Osmocom bit vector abstraction
  */
 
 /*! \file bitvec.c */
@@ -71,7 +71,7 @@
 	return bitval;
 }
 
-/*! \brief check if the bit is 0 or 1 for a given position inside a bitvec
+/*! check if the bit is 0 or 1 for a given position inside a bitvec
  *  \param[in] bv the bit vector on which to check
  *  \param[in] bitnr the bit number inside the bit vector to check
  *  \return value of the requested bit
@@ -93,7 +93,7 @@
 	return ZERO;
 }
 
-/*! \brief check if the bit is L or H for a given position inside a bitvec
+/*! check if the bit is L or H for a given position inside a bitvec
  *  \param[in] bv the bit vector on which to check
  *  \param[in] bitnr the bit number inside the bit vector to check
  *  \return value of the requested bit
@@ -116,7 +116,7 @@
 	return L;
 }
 
-/*! \brief get the Nth set bit inside the bit vector
+/*! get the Nth set bit inside the bit vector
  *  \param[in] bv the bit vector to use
  *  \param[in] n the bit number to get
  *  \returns the bit number (offset) of the Nth set bit in \a bv
@@ -136,7 +136,7 @@
 	return 0;
 }
 
-/*! \brief set a bit at given position in a bit vector
+/*! set a bit at given position in a bit vector
  *  \param[in] bv bit vector on which to operate
  *  \param[in] bitnr number of bit to be set
  *  \param[in] bit value to which the bit is to be set
@@ -163,7 +163,7 @@
 	return 0;
 }
 
-/*! \brief set the next bit inside a bitvec
+/*! set the next bit inside a bitvec
  *  \param[in] bv bit vector to be used
  *  \param[in] bit value of the bit to be set
  *  \returns 0 on success, negative value on error
@@ -179,7 +179,7 @@
 	return rc;
 }
 
-/*! \brief get the next bit (low/high) inside a bitvec
+/*! get the next bit (low/high) inside a bitvec
  *  \return value of th next bit in the vector */
 int bitvec_get_bit_high(struct bitvec *bv)
 {
@@ -192,7 +192,7 @@
 	return rc;
 }
 
-/*! \brief set multiple bits (based on array of bitvals) at current pos
+/*! set multiple bits (based on array of bitvals) at current pos
  *  \param[in] bv bit vector
  *  \param[in] bits array of \ref bit_value
  *  \param[in] count number of bits to set
@@ -210,7 +210,7 @@
 	return 0;
 }
 
-/*! \brief set multiple bits (based on numeric value) at current pos
+/*! set multiple bits (based on numeric value) at current pos
  *  \return 0 in case of success; negative in case of error */
 int bitvec_set_uint(struct bitvec *bv, unsigned int ui, unsigned int num_bits)
 {
@@ -228,7 +228,7 @@
 	return 0;
 }
 
-/*! \brief get multiple bits (num_bits) from beginning of vector (MSB side)
+/*! get multiple bits (num_bits) from beginning of vector (MSB side)
  *  \return 16bit signed integer retrieved from bit vector */
 int16_t bitvec_get_int16_msb(const struct bitvec *bv, unsigned int num_bits)
 {
@@ -241,7 +241,7 @@
 	return osmo_load16be(bv->data) >> (16 - num_bits);
 }
 
-/*! \brief get multiple bits (based on numeric value) from current pos
+/*! get multiple bits (based on numeric value) from current pos
  *  \return integer value retrieved from bit vector */
 int bitvec_get_uint(struct bitvec *bv, unsigned int num_bits)
 {
@@ -260,7 +260,7 @@
 	return ui;
 }
 
-/*! \brief fill num_bits with \fill starting from the current position
+/*! fill num_bits with \fill starting from the current position
  *  \return 0 on success; negative otherwise (out of vector boundary)
  */
 int bitvec_fill(struct bitvec *bv, unsigned int num_bits, enum bit_value fill)
@@ -273,7 +273,7 @@
 	return 0;
 }
 
-/*! \brief pad all remaining bits up to num_bits
+/*! pad all remaining bits up to num_bits
  *  \return 0 on success; negative otherwise */
 int bitvec_spare_padding(struct bitvec *bv, unsigned int up_to_bit)
 {
@@ -284,7 +284,7 @@
 	return bitvec_fill(bv, n, L);
 }
 
-/*! \brief find first bit set in bit vector
+/*! find first bit set in bit vector
  *  \return 0 on success; negative otherwise */
 int bitvec_find_bit_pos(const struct bitvec *bv, unsigned int n,
 			enum bit_value val)
@@ -299,7 +299,7 @@
 	return -1;
 }
 
-/*! \brief get multiple bytes from current pos
+/*! get multiple bytes from current pos
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector
  *  \param[in] bytes array
@@ -335,7 +335,7 @@
 	return 0;
 }
 
-/*! \brief set multiple bytes at current pos
+/*! set multiple bytes at current pos
  *  Assumes MSB first encoding.
  *  \param[in] bv bit vector
  *  \param[in] bytes array
@@ -375,7 +375,7 @@
 	return 0;
 }
 
-/*! \brief Allocate a bit vector
+/*! Allocate a bit vector
  *  \param[in] size Number of bits in the vector
  *  \param[in] ctx Context from which to allocate
  *  \return pointer to allocated vector; NULL in case of error */
@@ -396,7 +396,7 @@
 	return bv;
 }
 
-/*! \brief Free a bit vector (release its memory)
+/*! Free a bit vector (release its memory)
  *  \param[in] bit vector to free */
 void bitvec_free(struct bitvec *bv)
 {
@@ -404,7 +404,7 @@
 	talloc_free(bv);
 }
 
-/*! \brief Export a bit vector to a buffer
+/*! Export a bit vector to a buffer
  *  \param[in] bitvec (unpacked bits)
  *  \param[out] buffer for the unpacked bits
  *  \return number of bytes (= bits) copied */
@@ -417,7 +417,7 @@
 	return i;
 }
 
-/*! \brief Copy buffer of unpacked bits into bit vector
+/*! Copy buffer of unpacked bits into bit vector
  *  \param[in] buffer unpacked input bits
  *  \param[out] bv unpacked bit vector
  *  \return number of bytes (= bits) copied */
@@ -430,7 +430,7 @@
 	return i;
 }
 
-/*! \brief read hexadecimap string into a bit vector
+/*! read hexadecimap string into a bit vector
  *  \param[in] src string containing hex digits
  *  \param[out] bv unpacked bit vector
  *  \return 0 in case of success; 1 in case of error
@@ -451,7 +451,7 @@
 	return 0;
 }
 
-/*! \brief read part of the vector
+/*! read part of the vector
  *  \param[in] bv The boolean vector to work on
  *  \param[in,out] read_index Where reading supposed to start in the vector
  *  \param[in] len How many bits to read from vector
@@ -475,7 +475,7 @@
 	return ui;
 }
 
-/*! \brief write into the vector
+/*! write into the vector
  *  \param[in] bv The boolean vector to work on
  *  \param[in,out] write_index Where writing supposed to start in the vector
  *  \param[in] len How many bits to write
@@ -498,7 +498,7 @@
 	return 0;
 }
 
-/*! \brief convert enum to corresponding character
+/*! convert enum to corresponding character
  *  \param v input value (bit)
  *  \return single character, either 0, 1, L or H */
 char bit_value_to_char(enum bit_value v)
@@ -512,7 +512,7 @@
 	}
 }
 
-/*! \brief prints bit vector to provided string
+/*! prints bit vector to provided string
  * It's caller's responsibility to ensure that we won't shoot him in the foot:
  * the provided buffer should be at lest cur_bit + 1 bytes long
  */
@@ -551,14 +551,14 @@
 	}
 	return 7;
 }
-/*! \brief force bit vector to all 0 and current bit to the beginnig of the vector */
+/*! force bit vector to all 0 and current bit to the beginnig of the vector */
 void bitvec_zero(struct bitvec *bv)
 {
 	bv->cur_bit = 0;
 	memset(bv->data, 0, bv->data_len);
 }
 
-/*! \brief Return number (bits) of uninterrupted bit run in vector starting from the MSB
+/*! Return number (bits) of uninterrupted bit run in vector starting from the MSB
  *  \param[in] bv The boolean vector to work on
  *  \param[in] b The boolean, sequence of which is looked at from the vector start
  *  \returns Number of consecutive bits of \p b in \p bv
@@ -574,7 +574,7 @@
 	return bv->cur_bit;
 }
 
-/*! \brief Return number (bits) of uninterrupted bit run in vector
+/*! Return number (bits) of uninterrupted bit run in vector
  *   starting from the current bit
  *  \param[in] bv The boolean vector to work on
  *  \param[in] b The boolean, sequence of 1's or 0's to be checked
@@ -619,7 +619,7 @@
 	return (bv->cur_bit - readIndex + temp_res);
 }
 
-/*! \brief Shifts bitvec to the left, n MSB bits lost */
+/*! Shifts bitvec to the left, n MSB bits lost */
 void bitvec_shiftl(struct bitvec *bv, unsigned n)
 {
 	if (0 == n)
@@ -643,7 +643,7 @@
 	bv->cur_bit -= n;
 }
 
-/*! \brief Add given array to bitvec
+/*! Add given array to bitvec
  *  \param[in,out] bv bit vector to work with
  *  \param[in] array elements to be added
  *  \param[in] array_len length of array
diff --git a/src/codec/gsm610.c b/src/codec/gsm610.c
index c1eca0c..df56583 100644
--- a/src/codec/gsm610.c
+++ b/src/codec/gsm610.c
@@ -298,7 +298,7 @@
 	29,	/* LARc5:0 */
 };
 
-/*! \brief Check whether RTP frame contains FR SID code word according to
+/*! Check whether RTP frame contains FR SID code word according to
  *  TS 101 318 §5.1.2
  *  \param[in] rtp_payload Buffer with RTP payload
  *  \param[in] payload_len Length of payload
diff --git a/src/codec/gsm620.c b/src/codec/gsm620.c
index 7067239..3064748 100644
--- a/src/codec/gsm620.c
+++ b/src/codec/gsm620.c
@@ -272,7 +272,7 @@
 	return (m - 1) ^ m;
 }
 
-/*! \brief Check whether RTP frame contains HR SID code word according to
+/*! Check whether RTP frame contains HR SID code word according to
  *  TS 101 318 §5.2.2
  *  \param[in] rtp_payload Buffer with RTP payload
  *  \param[in] payload_len Length of payload
diff --git a/src/codec/gsm690.c b/src/codec/gsm690.c
index b273f0f..74655bf 100644
--- a/src/codec/gsm690.c
+++ b/src/codec/gsm690.c
@@ -235,7 +235,7 @@
 	{ 0,			NULL },
 };
 
-/*! \brief Decode various AMR parameters from RTP payload (RFC 4867) acording to
+/*! Decode various AMR parameters from RTP payload (RFC 4867) acording to
  *         3GPP TS 26.101
  *  \param[in] rtppayload Payload from RTP packet
  *  \param[in] payload_len length of rtppayload
@@ -284,7 +284,7 @@
 	return 2 + amr_len_by_ft[type];
 }
 
-/*! \brief Encode various AMR parameters from RTP payload (RFC 4867)
+/*! Encode various AMR parameters from RTP payload (RFC 4867)
  *  \param[out] payload Payload for RTP packet, contains speech data (if any)
  *              except for have 2 first bytes where header will be built
  *  \param[in] cmr AMR codec Mode Request
diff --git a/src/coding/gsm0503_coding.c b/src/coding/gsm0503_coding.c
index 1e70d2e..bb86b2c 100644
--- a/src/coding/gsm0503_coding.c
+++ b/src/coding/gsm0503_coding.c
@@ -94,7 +94,7 @@
 /*! \addtogroup coding
  *  @{
  *
- *  \brief GSM TS 05.03 coding
+ *  GSM TS 05.03 coding
  *
  *  This module is the "master module" of libosmocoding. It uses the
  *  various other modules (mapping, parity, interleaving) in order to
@@ -137,49 +137,49 @@
 /* TS 101318 Chapter 5.3: 244 bits + 4bit sig */
 #define GSM_EFR_BYTES	31
 
-/*! \brief union across the three different EGPRS Uplink header types */
+/*! union across the three different EGPRS Uplink header types */
 union gprs_rlc_ul_hdr_egprs {
 	struct gprs_rlc_ul_header_egprs_1 type1;
 	struct gprs_rlc_ul_header_egprs_2 type2;
 	struct gprs_rlc_ul_header_egprs_3 type3;
 };
 
-/*! \brief union across the three different EGPRS Downlink header types */
+/*! union across the three different EGPRS Downlink header types */
 union gprs_rlc_dl_hdr_egprs {
 	struct gprs_rlc_dl_header_egprs_1 type1;
 	struct gprs_rlc_dl_header_egprs_2 type2;
 	struct gprs_rlc_dl_header_egprs_3 type3;
 };
 
-/*! \brief Structure describing a Modulation and Coding Scheme */
+/*! Structure describing a Modulation and Coding Scheme */
 struct gsm0503_mcs_code {
-	/*! \brief Modulation and Coding Scheme (MSC) number */
+	/*! Modulation and Coding Scheme (MSC) number */
 	uint8_t mcs;
-	/*! \brief Length of Uplink Stealing Flag (USF) in bits */
+	/*! Length of Uplink Stealing Flag (USF) in bits */
 	uint8_t usf_len;
 
 	/* Header coding */
-	/*! \brief Length of header (bits) */
+	/*! Length of header (bits) */
 	uint8_t hdr_len;
-	/*! \brief Length of header convolutional code */
+	/*! Length of header convolutional code */
 	uint8_t hdr_code_len;
-	/*! \brief Length of header code puncturing sequence */
+	/*! Length of header code puncturing sequence */
 	uint8_t hdr_punc_len;
-	/*! \brief header convolutional code */
+	/*! header convolutional code */
 	const struct osmo_conv_code *hdr_conv;
-	/*! \brief header puncturing sequence */
+	/*! header puncturing sequence */
 	const uint8_t *hdr_punc;
 
 	/* Data coding */
-	/*! \brief length of data (bits) */
+	/*! length of data (bits) */
 	uint16_t data_len;
-	/*! \brief length of data convolutional code */
+	/*! length of data convolutional code */
 	uint16_t data_code_len;
-	/*! \brief length of data code puncturing sequence */
+	/*! length of data code puncturing sequence */
 	uint16_t data_punc_len;
-	/*! \brief data convolutional code */
+	/*! data convolutional code */
 	const struct osmo_conv_code *data_conv;
-	/*! \brief data puncturing sequences */
+	/*! data puncturing sequences */
 	const uint8_t *data_punc[3];
 };
 
@@ -534,7 +534,7 @@
 	},
 };
 
-/*! \brief Convolutional Decode + compute BER
+/*! Convolutional Decode + compute BER
  *  \param[in] code Description of Convolutional Code
  *  \param[in] input Input soft-bits (-127...127)
  *  \param[out] output bits
@@ -571,7 +571,7 @@
 	return res;
 }
 
-/*! \brief convenience wrapper for decoding coded bits
+/*! convenience wrapper for decoding coded bits
  *  \param[out] l2_data caller-allocated buffer for L2 Frame
  *  \param[in] cB 456 coded (soft) bits as per TS 05.03 4.1.3
  *  \param[out] n_errors Number of detected errors
@@ -596,7 +596,7 @@
 	return 0;
 }
 
-/*! \brief convenience wrapper for encoding to coded bits
+/*! convenience wrapper for encoding to coded bits
  *  \param[out] cB caller-allocated buffer for 456 coded bits as per TS 05.03 4.1.3
  *  \param[out] l2_data to-be-encoded L2 Frame
  *  \returns 0 */
@@ -617,7 +617,7 @@
  * GSM xCCH block transcoding
  */
 
-/*! \brief Decoding of xCCH data from bursts to L2 frame
+/*! Decoding of xCCH data from bursts to L2 frame
  *  \param[out] l2_data caller-allocated output data buffer
  *  \param[in] bursts four GSM bursts in soft-bits
  *  \param[out] n_errors Number of detected errors
@@ -637,7 +637,7 @@
 	return _xcch_decode_cB(l2_data, cB, n_errors, n_bits_total);
 }
 
-/*! \brief Encoding of xCCH data from L2 frame to bursts
+/*! Encoding of xCCH data from L2 frame to bursts
  *  \param[out] bursts caller-allocated burst data (unpacked bits)
  *  \param[in] l2_data L2 input data (MAC block)
  *  \returns 0
@@ -904,7 +904,7 @@
 	return OSMO_BYTES_FOR_BITS(code->hdr_len + code->data_len);
 }
 
-/*! \brief Decode EGPRS UL message
+/*! Decode EGPRS UL message
  * 	1. Header section decoding
  * 	2. Extract CPS settings
  * 	3. Burst unmapping and deinterleaving
@@ -986,7 +986,7 @@
  * GSM PDTCH block transcoding
  */
 
-/*! \brief Decode GPRS PDTCH
+/*! Decode GPRS PDTCH
  *  \param[out] l2_data caller-allocated buffer for L2 Frame
  *  \param[in] bursts burst input data as soft unpacked bits
  *  \param[out] usf_p uplink stealing flag
@@ -1303,7 +1303,7 @@
 	return egprs_get_cps(cps, type, bits);
 }
 
-/*! \brief EGPRS DL message encoding
+/*! EGPRS DL message encoding
  *  \param[out] bursts caller-allocated buffer for unpacked burst bits
  *  \param[in] l2_data L2 (MAC) block to be encoded
  *  \param[in] l2_len length of l2_data in bytes, used to determine MCS
@@ -1398,7 +1398,7 @@
 	return -1;
 }
 
-/*! \brief GPRS DL message encoding
+/*! GPRS DL message encoding
  *  \param[out] bursts caller-allocated buffer for unpacked burst bits
  *  \param[in] l2_data L2 (MAC) block to be encoded
  *  \param[in] l2_len length of l2_data in bytes, used to determine CS
@@ -1487,7 +1487,7 @@
  * GSM TCH/F FR/EFR transcoding
  */
 
-/*! \brief assemble a FR codec frame in format as used inside RTP
+/*! assemble a FR codec frame in format as used inside RTP
  *  \param[out] tch_data Codec frame in RTP format
  *  \param[in] b_bits Codec frame in 'native' format
  *  \param[in] net_order FIXME */
@@ -1772,7 +1772,7 @@
 	memcpy(d + prot, u + prot + 6, len - prot);
 }
 
-/*! \brief Perform channel decoding of a FR/EFR channel according TS 05.03
+/*! Perform channel decoding of a FR/EFR channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] net_order FIXME
@@ -1858,7 +1858,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/FS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/FS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -1922,7 +1922,7 @@
 	return 0;
 }
 
-/*! \brief Perform channel decoding of a HR(v1) channel according TS 05.03
+/*! Perform channel decoding of a HR(v1) channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] odd Odd (1) or even (0) frame number
@@ -1999,7 +1999,7 @@
 	return 15;
 }
 
-/*! \brief Perform channel encoding on a TCH/HS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/HS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2059,7 +2059,7 @@
 	return 0;
 }
 
-/*! \brief Perform channel decoding of a TCH/AFS channel according TS 05.03
+/*! Perform channel decoding of a TCH/AFS channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] codec_mode_req is this CMR (1) or CMC (0)
@@ -2265,7 +2265,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/AFS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/AFS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2435,7 +2435,7 @@
 	return -1;
 }
 
-/*! \brief Perform channel decoding of a TCH/AFS channel according TS 05.03
+/*! Perform channel decoding of a TCH/AFS channel according TS 05.03
  *  \param[out] tch_data Codec frame in RTP payload format
  *  \param[in] bursts buffer containing the symbols of 8 bursts
  *  \param[in] odd Is this an odd (1) or even (0) frame number?
@@ -2650,7 +2650,7 @@
 	return len;
 }
 
-/*! \brief Perform channel encoding on a TCH/AHS channel according to TS 05.03
+/*! Perform channel encoding on a TCH/AHS channel according to TS 05.03
  *  \param[out] bursts caller-allocated output buffer for bursts bits
  *  \param[in] tch_data Codec input data in RTP payload format
  *  \param[in] len Length of \a tch_data in bytes
@@ -2834,7 +2834,7 @@
 	return 0;
 }
 
-/*! \brief Decode the (8-bit) RACH according to TS 05.03
+/*! Decode the (8-bit) RACH according to TS 05.03
  *  \param[out] ra output buffer for RACH data
  *  \param[in] burst Input burst data
  *  \param[in] bsic BSIC used in this cell
@@ -2857,7 +2857,7 @@
 	return 0;
 }
 
-/*! \brief Encode the (8-bit) RACH according to TS 05.03
+/*! Encode the (8-bit) RACH according to TS 05.03
  *  \param[out] burst Caller-allocated output burst buffer
  *  \param[in] ra Input RACH data
  *  \param[in] bsic BSIC used in this cell
@@ -2881,7 +2881,7 @@
  * GSM SCH transcoding
  */
 
-/*! \brief Decode the SCH according to TS 05.03
+/*! Decode the SCH according to TS 05.03
  *  \param[out] sb_info output buffer for SCH data
  *  \param[in] burst Input burst data
  *  \returns 0 on success; negative on error (e.g. CRC error) */
@@ -2901,7 +2901,7 @@
 	return 0;
 }
 
-/*! \brief Encode the SCH according to TS 05.03
+/*! Encode the SCH according to TS 05.03
  *  \param[out] burst Caller-allocated output burst buffer
  *  \param[in] sb_info Input SCH data
  *  \returns 0 on success; negative on error */
diff --git a/src/coding/gsm0503_interleaving.c b/src/coding/gsm0503_interleaving.c
index cd47cff..19e6847 100644
--- a/src/coding/gsm0503_interleaving.c
+++ b/src/coding/gsm0503_interleaving.c
@@ -29,7 +29,7 @@
 
 /*! \addtogroup interleaving
  *  @{
- *  \brief GSM TS 05.03 interleaving
+ *  GSM TS 05.03 interleaving
  *
  *  This module contains interleaving / de-interleaving routines for
  *  various channel types, as defined in 3GPP TS 05.03 / 45.003
@@ -59,7 +59,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief De-Interleave burst bits according to TS 05.03 4.1.4
+/*! De-Interleave burst bits according to TS 05.03 4.1.4
  *  \param[out] cB caller-allocated output buffer for 456 soft coded bits
  *  \param[in] iB 456 soft input bits */
 void gsm0503_xcch_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -73,7 +73,7 @@
 	}
 }
 
-/*! \brief Interleave burst bits according to TS 05.03 4.1.4
+/*! Interleave burst bits according to TS 05.03 4.1.4
  *  \param[out] iB caller-allocated output buffer for 456 soft interleaved bits
  *  \param[in] cB 456 soft input coded bits */
 void gsm0503_xcch_interleave(const ubit_t *cB, ubit_t *iB)
@@ -87,7 +87,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
+/*! De-Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
  *  \param[out] u caller-allocated output buffer for 12 soft coded bits
  *  \param[out] hc caller-allocated output buffer for 68 soft coded bits
  *  \param[out] dc caller-allocated output buffer for 372 soft coded bits
@@ -128,7 +128,7 @@
 	}
 }
 
-/*! \brief Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
+/*! Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.1.5
  *  \param[in] up 12 input soft coded bits (usf)
  *  \param[in] hc 68 input soft coded bits (header)
  *  \param[in] dc 372 input soft bits (data)
@@ -166,7 +166,7 @@
 	gsm0503_xcch_interleave(cp, iB);
 }
 
-/*! \brief Interleave MCS1 UL burst bits according to TS 05.03 5.1.5.2.4
+/*! Interleave MCS1 UL burst bits according to TS 05.03 5.1.5.2.4
  *  \param[out] hc caller-allocated output buffer for 80 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 372 soft coded data bits
  *  \param[in] iB 456 interleaved soft input bits */
@@ -200,7 +200,7 @@
 	}
 }
 
-/*! \brief Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.2.4
+/*! Interleave MCS1 DL burst bits according to TS 05.03 5.1.5.2.4
  *  \param[in] hc 80 input coded bits (header)
  *  \param[in] dc 372 input bits (data)
  *  \param[out] iB 456 interleaved output bits */
@@ -234,7 +234,7 @@
 	gsm0503_xcch_interleave(cp, iB);
 }
 
-/*! \brief Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
+/*! Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
  *  \param[in] hc 136 soft coded header input bits
  *  \param[in] dc 1248 soft coded data input bits
  *  \param[out] hi 136 interleaved header output bits
@@ -257,7 +257,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
+/*! De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.2.4
  *  \param[out] hc caller-allocated output buffer for 136 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 1248 soft coded data bits
  *  \param[in] iB interleaved soft input bits */
@@ -283,7 +283,7 @@
 	}
 }
 
-/*! \brief Interleave MCS5 DL burst bits according to TS 05.03 5.1.9.1.5
+/*! Interleave MCS5 DL burst bits according to TS 05.03 5.1.9.1.5
  *  \param[in] hc 100 soft coded header input bits
  *  \param[in] dc 1248 soft coded data input bits
  *  \param[out] hi 100 interleaved header output bits
@@ -306,7 +306,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.1.5
+/*! De-Interleave MCS5 UL burst bits according to TS 05.03 5.1.9.1.5
  *  \param[out] hc caller-allocated output buffer for 100 soft coded header bits
  *  \param[out] dc caller-allocated output buffer for 1248 soft coded data bits
  *  \param[in] iB interleaved soft input bits */
@@ -332,7 +332,7 @@
 	}
 }
 
-/*! \brief Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
+/*! Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -361,7 +361,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
+/*! De-Interleave MCS7 DL burst bits according to TS 05.03 5.1.11.1.5
  *  \param[out] hc caller-allocated output buffer for 124 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -394,7 +394,7 @@
 	}
 }
 
-/*! \brief Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
+/*! Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -423,7 +423,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
+/*! De-Interleave MCS7 UL burst bits according to TS 05.03 5.1.11.2.4
  *  \param[out] hc caller-allocated output buffer for 160 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -456,7 +456,7 @@
 	}
 }
 
-/*! \brief Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
+/*! Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
  *  \param[in] hc 160 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -486,7 +486,7 @@
 }
 
 
-/*! \brief De-Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
+/*! De-Interleave MCS8 UL burst bits according to TS 05.03 5.1.12.2.4
  *  \param[out] hc caller-allocated output buffer for 160 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -519,7 +519,7 @@
 	}
 }
 
-/*! \brief Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
+/*! Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
  *  \param[in] hc 124 soft coded header input bits
  *  \param[in] c1 612 soft coded data input bits
  *  \param[in] c2 612 soft coded data input bits
@@ -548,7 +548,7 @@
 	}
 }
 
-/*! \brief De-Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
+/*! De-Interleave MCS8 DL burst bits according to TS 05.03 5.1.12.1.5
  *  \param[out] hc caller-allocated output buffer for 124 soft coded header bits
  *  \param[out] c1 caller-allocated output buffer for 612 soft coded data bits
  *  \param[out] c2 caller-allocated output buffer for 612 soft coded data bits
@@ -605,7 +605,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief GSM TCH FR/EFR/AFS De-Interleaving and burst mapping
+/*! GSM TCH FR/EFR/AFS De-Interleaving and burst mapping
  *  \param[out] cB caller-allocated buffer for 456 unpacked output bits
  *  \param[in] iB 456 unpacked interleaved input bits */
 void gsm0503_tch_fr_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -619,7 +619,7 @@
 	}
 }
 
-/*! \brief GSM TCH FR/EFR/AFS Interleaving and burst mapping
+/*! GSM TCH FR/EFR/AFS Interleaving and burst mapping
  *  \param[in] cB caller-allocated buffer for 456 unpacked input bits
  *  \param[out] iB 456 unpacked interleaved output bits */
 void gsm0503_tch_fr_interleave(const ubit_t *cB, ubit_t *iB)
@@ -657,7 +657,7 @@
  * Where hl(B) and hn(B) are bits in burst B indicating flags.
  */
 
-/*! \brief GSM TCH HR/AHS De-Interleaving and burst mapping
+/*! GSM TCH HR/AHS De-Interleaving and burst mapping
  *  \param[out] cB caller-allocated buffer for 228 unpacked output bits
  *  \param[in] iB 228 unpacked interleaved input bits */
 void gsm0503_tch_hr_deinterleave(sbit_t *cB, const sbit_t *iB)
@@ -671,7 +671,7 @@
 	}
 }
 
-/*! \brief GSM TCH HR/AHS Interleaving and burst mapping
+/*! GSM TCH HR/AHS Interleaving and burst mapping
  *  \param[in] cB caller-allocated buffer for 228 unpacked input bits
  *  \param[out] iB 228 unpacked interleaved output bits */
 void gsm0503_tch_hr_interleave(const ubit_t *cB, ubit_t *iB)
diff --git a/src/coding/gsm0503_mapping.c b/src/coding/gsm0503_mapping.c
index 82c049c..15fd1b6 100644
--- a/src/coding/gsm0503_mapping.c
+++ b/src/coding/gsm0503_mapping.c
@@ -28,7 +28,7 @@
 /*! \addtogroup mapping
  *  @{
  *
- *  \brief GSM TS 05.03 burst mapping
+ *  GSM TS 05.03 burst mapping
  *
  *  This module contains burst mapping routines as specified in 3GPP TS
  *  05.03 / 45.003.
diff --git a/src/coding/gsm0503_parity.c b/src/coding/gsm0503_parity.c
index 171feb4..cc81702 100644
--- a/src/coding/gsm0503_parity.c
+++ b/src/coding/gsm0503_parity.c
@@ -27,7 +27,7 @@
 /*! \addtogroup parity
  *  @{
  *
- *  \brief GSM TS 05.03 parity
+ *  GSM TS 05.03 parity
  *
  *  This module contains parity/crc code definitions for the various
  *  parity/crc schemes as defined in 3GPP TS 05.03 / 45.003
@@ -35,7 +35,7 @@
 
 /*! \file gsm0503_parity.c */
 
-/*! \brief GSM (SACCH) parity (FIRE code)
+/*! GSM (SACCH) parity (FIRE code)
  *
  * g(x) = (x^23 + 1)(x^17 + x^3 + 1)
  *      = x^40 + x^26 + x^23 + x^17 + x^3 + a1
@@ -47,7 +47,7 @@
 	.remainder = 0xffffffffffULL,
 };
 
-/*! \brief GSM PDTCH CS-2, CS-3, CS-4 parity
+/*! GSM PDTCH CS-2, CS-3, CS-4 parity
  *
  * g(x) = x^16 + x^12 + x^5 + 1
  */
@@ -58,7 +58,7 @@
 	.remainder = 0xffff,
 };
 
-/*! \brief EDGE MCS header parity
+/*! EDGE MCS header parity
  *
  */
 const struct osmo_crc8gen_code gsm0503_mcs_crc8_hdr = {
@@ -68,7 +68,7 @@
 	.remainder = 0xff,
 };
 
-/*! \brief EDGE MCS data parity
+/*! EDGE MCS data parity
  *
  */
 const struct osmo_crc16gen_code gsm0503_mcs_crc12 = {
@@ -78,7 +78,7 @@
 	.remainder = 0x0fff,
 };
 
-/*! \brief GSM RACH parity
+/*! GSM RACH parity
  *
  * g(x) = x^6 + x^5 + x^3 + x^2 + x^1 + 1
  */
@@ -89,7 +89,7 @@
 	.remainder = 0x3f,
 };
 
-/*! \brief GSM SCH parity
+/*! GSM SCH parity
  *
  * g(x) = x^10 + x^8 + x^6 + x^5 + x^4 + x^2 + 1
  */
@@ -100,7 +100,7 @@
 	.remainder = 0x3ff,
 };
 
-/*! \brief GSM TCH FR/HR/EFR parity
+/*! GSM TCH FR/HR/EFR parity
  *
  * g(x) = x^3 + x + 1
  */
@@ -111,7 +111,7 @@
 	.remainder = 0x7,
 };
 
-/*! \brief GSM TCH EFR parity
+/*! GSM TCH EFR parity
  *
  * g(x) = x^8 + x^4 + x^3 + x^2 + 1
  */
@@ -122,7 +122,7 @@
 	.remainder = 0x00,
 };
 
-/*! \brief GSM AMR parity
+/*! GSM AMR parity
  *
  * g(x) = x^6 + x^5 + x^3 + x^2 + x^1 + 1
  */
diff --git a/src/coding/gsm0503_tables.c b/src/coding/gsm0503_tables.c
index 1c85765..32d12ea 100644
--- a/src/coding/gsm0503_tables.c
+++ b/src/coding/gsm0503_tables.c
@@ -27,7 +27,7 @@
 /*! \addtogroup tables
  *  @{
  *
- *  \brief GSM TS 05.03 tables
+ *  GSM TS 05.03 tables
  *
  *  This module contains various tables defining parts of 3GPP TS 05.03
  *  / 45.003, primarily for the purpose of (de)puncturing, interleaving,
diff --git a/src/conv.c b/src/conv.c
index b81e37e..38ce173 100644
--- a/src/conv.c
+++ b/src/conv.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup conv
  *  @{
- *  \brief Osmocom convolutional encoder and decoder
+ *  Osmocom convolutional encoder and decoder
  */
 
 /*! \file conv.c */
@@ -78,7 +78,7 @@
 /* Encoding                                                                 */
 /* ------------------------------------------------------------------------ */
 
-/*! \brief Initialize a convolutional encoder
+/*! Initialize a convolutional encoder
  *  \param[in,out] encoder Encoder state to initialize
  *  \param[in] code Description of convolutional code
  */
@@ -198,7 +198,7 @@
 	return o_idx;
 }
 
-/*! \brief All-in-one convolutional encoding function
+/*! All-in-one convolutional encoding function
  *  \param[in] code description of convolutional code to be used
  *  \param[in] input array of unpacked bits (uncoded)
  *  \param[out] output array of unpacked bits (encoded)
@@ -593,7 +593,7 @@
 	return min_ae;
 }
 
-/*! \brief All-in-one convolutional decoding function
+/*! All-in-one convolutional decoding function
  *  \param[in] code description of convolutional code to be used
  *  \param[in] input array of soft bits (coded)
  *  \param[out] output array of unpacked bits (decoded)
diff --git a/src/crc16.c b/src/crc16.c
index accb0b4..7d523b6 100644
--- a/src/crc16.c
+++ b/src/crc16.c
@@ -10,7 +10,7 @@
 
 #include <osmocom/core/crc16.h>
 
-/*! \brief CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
+/*! CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
 uint16_t const osmo_crc16_table[256] = {
 	0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
 	0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
@@ -46,7 +46,7 @@
 	0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
 };
 
-/*! \brief compute the CRC-16 for the data buffer
+/*! compute the CRC-16 for the data buffer
  *  \param crc[in] previous CRC value
  *  \param buffer[in] data pointer
  *  \param len[in] number of bytes in input \ref buffer
diff --git a/src/crcXXgen.c.tpl b/src/crcXXgen.c.tpl
index 1a69e85..9c63052 100644
--- a/src/crcXXgen.c.tpl
+++ b/src/crcXXgen.c.tpl
@@ -24,7 +24,7 @@
 
 /*! \addtogroup crcgen
  *  @{
- *  \brief Osmocom generic CRC routines
+ *  Osmocom generic CRC routines
  */
 
 /*! \file crcXXgen.c
@@ -37,7 +37,7 @@
 #include <osmocom/core/crcXXgen.h>
 
 
-/*! \brief Compute the CRC value of a given array of hard-bits
+/*! Compute the CRC value of a given array of hard-bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
@@ -69,7 +69,7 @@
 }
 
 
-/*! \brief Checks the CRC value of a given array of hard-bits
+/*! Checks the CRC value of a given array of hard-bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
@@ -95,7 +95,7 @@
 }
 
 
-/*! \brief Computes and writes the CRC value of a given array of bits
+/*! Computes and writes the CRC value of a given array of bits
  *  \param[in] code The CRC code description to apply
  *  \param[in] in Array of hard bits
  *  \param[in] len Length of the array of hard bits
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index 5a84f7c0..5d04cdf 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -126,7 +126,7 @@
 	return ret;
 }
 
-/*! \brief Send TRAP over given Control Interface
+/*! Send TRAP over given Control Interface
  *  \param[in] ctrl Control Interface over which TRAP will be sent
  *  \param[in] name Name of the TRAP variable
  *  \param[in] value Value of the TRAP variable
@@ -401,7 +401,7 @@
 	return rc;
 }
 
-/*! \brief Allocate CTRL connection
+/*! Allocate CTRL connection
  *  \param[in] ctx Context from which talloc should allocate it
  *  \param[in] data caller's private data parameter which should assigned to
                write queue's file descriptor data parameter.
@@ -729,7 +729,7 @@
 	return -1;
 }
 
-/*! \brief Allocate a CTRL interface handle
+/*! Allocate a CTRL interface handle
  *  \param[in] ctx Tallo callocation context to be used
  *  \param[in] data Pointer which will be made available to each
                set_..() get_..() verify_..() control command function
@@ -754,7 +754,7 @@
 	return ctrl;
 }
 
-/*! \brief Setup CTRL interface on a given address
+/*! Setup CTRL interface on a given address
  *  \param[in] data Pointer which will be made available to each
                set_..() get_..() verify_..() control command function
  *  \param[in] bind_addr Address on which CTRL socket shall listen
@@ -788,7 +788,7 @@
 	return ctrl;
 }
 
-/*! \brief Install a lookup helper function for control nodes
+/*! Install a lookup helper function for control nodes
  *  This function is used by e.g. library code to install lookup helpers
  *  for additional nodes in the control interface.
  *  \param[in] lookup The lookup helper function
@@ -813,7 +813,7 @@
 	return 0;
 }
 
-/*! \brief Helper for "local execution" of a CTRL command from a string
+/*! Helper for "local execution" of a CTRL command from a string
  *  The function will parse + execute the given control command string
  *  and return a corresponding ctrl_cmd.  Caller is responsible to
  *  talloc_free() the return value.
diff --git a/src/ctrl/fsm_ctrl_commands.c b/src/ctrl/fsm_ctrl_commands.c
index 95d5fca..6c3ecde 100644
--- a/src/ctrl/fsm_ctrl_commands.c
+++ b/src/ctrl/fsm_ctrl_commands.c
@@ -6,7 +6,7 @@
 #include <osmocom/ctrl/control_cmd.h>
 #include <osmocom/ctrl/control_if.h>
 
-/*! \brief control interface lookup function for FSM's
+/*! control interface lookup function for FSM's
  * \param[in] data Private data passed to controlif_setup()
  * \param[in] vline Vector of the line holding the command string
  * \param[out] node_type type (CTRL_NODE_) that was determined
diff --git a/src/fsm.c b/src/fsm.c
index 16f5d65..27389a7 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -30,7 +30,7 @@
 
 /*! \addtogroup fsm
  *  @{
- *  \brief Finite State Machine abstraction
+ *  Finite State Machine abstraction
  *
  *  This is a generic C-language abstraction for implementing finite
  *  state machines within the Osmocom framework.  It is intended to
@@ -89,7 +89,7 @@
 LLIST_HEAD(osmo_g_fsms);
 static bool fsm_log_addr = true;
 
-/*! \brief specify if FSM instance addresses should be logged or not
+/*! specify if FSM instance addresses should be logged or not
  *
  *  By default, the FSM name includes the pointer address of the \ref
  *  osmo_fsm_inst.  This behavior can be disabled (and re-enabled)
@@ -136,7 +136,7 @@
 	return NULL;
 }
 
-/*! \brief register a FSM with the core
+/*! register a FSM with the core
  *
  *  A FSM descriptor needs to be registered with the core before any
  *  instances can be created for it.
@@ -154,7 +154,7 @@
 	return 0;
 }
 
-/*! \brief unregister a FSM from the core
+/*! unregister a FSM from the core
  *
  *  Once the FSM descriptor is unregistered, active instances can still
  *  use it, but no new instances may be created for it.
@@ -190,7 +190,7 @@
 	osmo_fsm_inst_term(fi, OSMO_FSM_TERM_TIMEOUT, &T);
 }
 
-/*! \brief allocate a new instance of a specified FSM
+/*! allocate a new instance of a specified FSM
  *  \param[in] fsm Descriptor of the FSM
  *  \param[in] ctx talloc context from which to allocate memory
  *  \param[in] priv private data reference store in fsm instance
@@ -231,7 +231,7 @@
 	return fi;
 }
 
-/*! \brief allocate a new instance of a specified FSM as child of
+/*! allocate a new instance of a specified FSM as child of
  *  other FSM instance
  *
  *  This is like \ref osmo_fsm_inst_alloc but using the parent FSM as
@@ -265,7 +265,7 @@
 	return fi;
 }
 
-/*! \brief delete a given instance of a FSM
+/*! delete a given instance of a FSM
  *  \param[in] fsm The FSM to be un-registered and deleted
  */
 void osmo_fsm_inst_free(struct osmo_fsm_inst *fi)
@@ -276,7 +276,7 @@
 	talloc_free(fi);
 }
 
-/*! \brief get human-readable name of FSM event
+/*! get human-readable name of FSM event
  *  \param[in] fsm FSM descriptor of event
  *  \param[in] event Event integer value
  *  \returns string rendering of the event
@@ -291,7 +291,7 @@
 		return get_value_string(fsm->event_names, event);
 }
 
-/*! \brief get human-readable name of FSM instance
+/*! get human-readable name of FSM instance
  *  \param[in] fi FSM instance
  *  \returns string rendering of the FSM identity
  */
@@ -306,7 +306,7 @@
 		return fi->fsm->name;
 }
 
-/*! \brief get human-readable name of FSM instance
+/*! get human-readable name of FSM instance
  *  \param[in] fsm FSM descriptor
  *  \param[in] state FSM state number
  *  \returns string rendering of the FSM state
@@ -321,7 +321,7 @@
 		return fsm->states[state].name;
 }
 
-/*! \brief perform a state change of the given FSM instance
+/*! perform a state change of the given FSM instance
  *
  *  Best invoke via the osmo_fsm_inst_state_chg() macro which logs the source
  *  file where the state change was effected. Alternatively, you may pass \a
@@ -384,7 +384,7 @@
 	return 0;
 }
 
-/*! \brief dispatch an event to an osmocom finite state machine instance
+/*! dispatch an event to an osmocom finite state machine instance
  *
  *  Best invoke via the osmo_fsm_inst_dispatch() macro which logs the source
  *  file where the event was effected. Alternatively, you may pass \a file as
@@ -438,7 +438,7 @@
 	return 0;
 }
 
-/*! \brief Terminate FSM instance with given cause
+/*! Terminate FSM instance with given cause
  *
  *  This safely terminates the given FSM instance by first iterating
  *  over all children and sending them a termination event.  Next, it
@@ -489,7 +489,7 @@
 					file, line);
 }
 
-/*! \brief Terminate all child FSM instances of an FSM instance.
+/*! Terminate all child FSM instances of an FSM instance.
  *
  *  Iterate over all children and send them a termination event, with the given
  *  cause. Pass OSMO_FSM_TERM_PARENT to avoid dispatching events from the
diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c
index 93af98f..f41c4a4 100644
--- a/src/gb/gprs_bssgp_bss.c
+++ b/src/gb/gprs_bssgp_bss.c
@@ -41,7 +41,7 @@
 	return msgb_tvlv_put(msg, BSSGP_IE_TLLI, 4, (uint8_t *) &_tlli);
 }
 
-/*! \brief GMM-SUSPEND.req (Chapter 10.3.6) */
+/*! GMM-SUSPEND.req (Chapter 10.3.6) */
 int bssgp_tx_suspend(uint16_t nsei, uint32_t tlli,
 		     const struct gprs_ra_id *ra_id)
 {
@@ -64,7 +64,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief GMM-RESUME.req (Chapter 10.3.9) */
+/*! GMM-RESUME.req (Chapter 10.3.9) */
 int bssgp_tx_resume(uint16_t nsei, uint32_t tlli,
 		    const struct gprs_ra_id *ra_id, uint8_t suspend_ref)
 {
@@ -89,7 +89,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit RA-CAPABILITY-UPDATE (10.3.3) */
+/*! Transmit RA-CAPABILITY-UPDATE (10.3.3) */
 int bssgp_tx_ra_capa_upd(struct bssgp_bvc_ctx *bctx, uint32_t tlli, uint8_t tag)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -139,7 +139,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit RADIO-STATUS for TLLI (10.3.5) */
+/*! Transmit RADIO-STATUS for TLLI (10.3.5) */
 int bssgp_tx_radio_status_tlli(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				uint32_t tlli)
 {
@@ -153,7 +153,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit RADIO-STATUS for TMSI (10.3.5) */
+/*! Transmit RADIO-STATUS for TMSI (10.3.5) */
 int bssgp_tx_radio_status_tmsi(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				uint32_t tmsi)
 {
@@ -168,7 +168,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit RADIO-STATUS for IMSI (10.3.5) */
+/*! Transmit RADIO-STATUS for IMSI (10.3.5) */
 int bssgp_tx_radio_status_imsi(struct bssgp_bvc_ctx *bctx, uint8_t cause,
 				const char *imsi)
 {
@@ -187,7 +187,7 @@
 	return common_tx_radio_status2(msg, cause);
 }
 
-/*! \brief Transmit FLUSH-LL-ACK (Chapter 10.4.2) */
+/*! Transmit FLUSH-LL-ACK (Chapter 10.4.2) */
 int bssgp_tx_flush_ll_ack(struct bssgp_bvc_ctx *bctx, uint32_t tlli,
 			   uint8_t action, uint16_t bvci_new,
 			   uint32_t num_octets)
@@ -211,7 +211,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit LLC-DISCARDED (Chapter 10.4.3) */
+/*! Transmit LLC-DISCARDED (Chapter 10.4.3) */
 int bssgp_tx_llc_discarded(struct bssgp_bvc_ctx *bctx, uint32_t tlli,
 			   uint8_t num_frames, uint32_t num_octets)
 {
@@ -237,7 +237,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-BLOCK message (Chapter 10.4.8) */
+/*! Transmit a BVC-BLOCK message (Chapter 10.4.8) */
 int bssgp_tx_bvc_block(struct bssgp_bvc_ctx *bctx, uint8_t cause)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -258,7 +258,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-UNBLOCK message (Chapter 10.4.10) */
+/*! Transmit a BVC-UNBLOCK message (Chapter 10.4.10) */
 int bssgp_tx_bvc_unblock(struct bssgp_bvc_ctx *bctx)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -277,7 +277,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a BVC-RESET message (Chapter 10.4.12) */
+/*! Transmit a BVC-RESET message (Chapter 10.4.12) */
 int bssgp_tx_bvc_reset(struct bssgp_bvc_ctx *bctx, uint16_t bvci, uint8_t cause)
 {
 	struct msgb *msg = bssgp_msgb_alloc();
@@ -304,7 +304,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a FLOW_CONTROL-BVC (Chapter 10.4.4)
+/*! Transmit a FLOW_CONTROL-BVC (Chapter 10.4.4)
  *  \param[in] bctx BVC Context
  *  \param[in] tag Additional tag to identify acknowledge
  *  \param[in] bucket_size Maximum bucket size in octets
@@ -376,7 +376,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief Transmit a FLOW_CONTROL-MS (Chapter 10.4.6)
+/*! Transmit a FLOW_CONTROL-MS (Chapter 10.4.6)
  *  \param[in] bctx BVC Context
  *  \param[in] tlli TLLI to identify MS
  *  \param[in] tag Additional tag to identify acknowledge
@@ -421,7 +421,7 @@
 	return gprs_ns_sendmsg(bssgp_nsi, msg);
 }
 
-/*! \brief RL-UL-UNITDATA.req (Chapter 10.2.2)
+/*! RL-UL-UNITDATA.req (Chapter 10.2.2)
  *  \param[in] bctx BVC Context
  *  \param[in] tlli TLLI to identify MS
  *  \param[in] qos_profile Pointer to three octests of QoS profile
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 17933ed..51d1c3c 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -177,7 +177,7 @@
 }
 
 
-/*! \brief Lookup struct gprs_nsvc based on NSVCI
+/*! Lookup struct gprs_nsvc based on NSVCI
  *  \param[in] nsi NS instance in which to search
  *  \param[in] nsvci NSVCI to be searched
  *  \returns gprs_nsvc of respective NSVCI
@@ -192,7 +192,7 @@
 	return NULL;
 }
 
-/*! \brief Lookup struct gprs_nsvc based on NSEI
+/*! Lookup struct gprs_nsvc based on NSEI
  *  \param[in] nsi NS instance in which to search
  *  \param[in] nsei NSEI to be searched
  *  \returns first gprs_nsvc of respective NSEI
@@ -258,7 +258,7 @@
 	return nsvc;
 }
 
-/*! \brief Delete given NS-VC
+/*! Delete given NS-VC
  *  \param[in] nsvc gprs_nsvc to be deleted
  */
 void gprs_nsvc_delete(struct gprs_nsvc *nsvc)
@@ -346,7 +346,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Obtain a human-readable string for NS cause value */
+/*! Obtain a human-readable string for NS cause value */
 const char *gprs_ns_cause_str(enum ns_cause cause)
 {
 	return get_value_string(ns_cause_str, cause);
@@ -407,7 +407,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-RESET on a given NSVC
+/*! Transmit a NS-RESET on a given NSVC
  *  \param[in] nsvc NS-VC used for transmission
  *  \paam[in] cause Numeric NS cause value
  */
@@ -438,7 +438,7 @@
 
 }
 
-/*! \brief Transmit a NS-STATUS on a given NSVC
+/*! Transmit a NS-STATUS on a given NSVC
  *  \param[in] nsvc NS-VC to be used for transmission
  *  \param[in] cause Numeric NS cause value
  *  \param[in] bvci BVCI to be reset within NSVC
@@ -492,7 +492,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-BLOCK on a tiven NS-VC
+/*! Transmit a NS-BLOCK on a tiven NS-VC
  *  \param[in] nsvc NS-VC on which the NS-BLOCK is to be transmitted
  *  \param[in] cause Numeric NS Cause value
  *  \returns 0 in case of success
@@ -525,7 +525,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief Transmit a NS-UNBLOCK on a given NS-VC
+/*! Transmit a NS-UNBLOCK on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-UNBLOCK is to be transmitted
  *  \returns 0 in case of success
  */
@@ -538,7 +538,7 @@
 	return gprs_ns_tx_simple(nsvc, NS_PDUT_UNBLOCK);
 }
 
-/*! \brief Transmit a NS-ALIVE on a given NS-VC
+/*! Transmit a NS-ALIVE on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-ALIVE is to be transmitted
  *  \returns 0 in case of success
  */
@@ -551,7 +551,7 @@
 	return gprs_ns_tx_simple(nsvc, NS_PDUT_ALIVE);
 }
 
-/*! \brief Transmit a NS-ALIVE-ACK on a given NS-VC
+/*! Transmit a NS-ALIVE-ACK on a given NS-VC
  *  \param[in] nsvc NS-VC on which the NS-ALIVE-ACK is to be transmitted
  *  \returns 0 in case of success
  */
@@ -693,7 +693,7 @@
 	return gprs_ns_tx(nsvc, msg);
 }
 
-/*! \brief High-level function for transmitting a NS-UNITDATA messsage
+/*! High-level function for transmitting a NS-UNITDATA messsage
  *  \param[in] nsi NS-instance on which we shall transmit
  *  \param[in] msg struct msgb to be trasnmitted
  *
@@ -1110,7 +1110,7 @@
 int gprs_ns_process_msg(struct gprs_ns_inst *nsi, struct msgb *msg,
 		      struct gprs_nsvc **nsvc);
 
-/*! \brief Receive incoming NS message from underlying transport layer
+/*! Receive incoming NS message from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[in] saddr socketaddr from which data was received
@@ -1194,7 +1194,7 @@
 	}
 }
 
-/*! \brief Create/get NS-VC independently from underlying transport layer
+/*! Create/get NS-VC independently from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[in] fallback_nsvc is used to send error messages back to the peer
@@ -1316,7 +1316,7 @@
 	return GPRS_NS_CS_FOUND;
 }
 
-/*! \brief Process NS message independently from underlying transport layer
+/*! Process NS message independently from underlying transport layer
  *  \param nsi NS instance to which the data belongs
  *  \param[in] msg message buffer containing newly-received data
  *  \param[inout] nsvc refers to the virtual connection, may be modified when
@@ -1406,7 +1406,7 @@
 	return rc;
 }
 
-/*! \brief Create a new GPRS NS instance
+/*! Create a new GPRS NS instance
  *  \param[in] cb Call-back function for incoming BSSGP data
  *  \returns dynamically allocated gprs_ns_inst
  */
@@ -1452,7 +1452,7 @@
 	}
 }
 
-/*! \brief Destroy an entire NS instance
+/*! Destroy an entire NS instance
  *  \param nsi gprs_ns_inst that is to be destroyed
  *
  *  This function releases all resources associated with the
@@ -1552,7 +1552,7 @@
 	return rc;
 }
 
-/*! \brief Create a listening socket for GPRS NS/UDP/IP
+/*! Create a listening socket for GPRS NS/UDP/IP
  *  \param[in] nsi NS protocol instance to listen
  *  \returns >=0 (fd) in case of success, negative in case of error
  *
@@ -1586,7 +1586,7 @@
 	return ret;
 }
 
-/*! \brief Initiate a RESET procedure
+/*! Initiate a RESET procedure
  *  \param[in] nsvc NS-VC in which to start the procedure
  *  \param[in] cause Numeric NS cause value
  *
@@ -1616,7 +1616,7 @@
 	return rc;
 }
 
-/*! \brief Establish a NS connection (from the BSS) to the SGSN
+/*! Establish a NS connection (from the BSS) to the SGSN
  *  \param nsi NS-instance
  *  \param[in] dest Destination IP/Port
  *  \param[in] nsei NSEI of the to-be-established NS-VC
diff --git a/src/gsm/a5.c b/src/gsm/a5.c
index 23cbe0c..f21554f 100644
--- a/src/gsm/a5.c
+++ b/src/gsm/a5.c
@@ -28,7 +28,7 @@
 
 /*! \addtogroup crypto
  *  @{
- *  \brief Osmocom GSM/GPRS ciphering algorithm implementation
+ *  Osmocom GSM/GPRS ciphering algorithm implementation
  */
 
 /*! \file gsm/a5.c */
@@ -50,7 +50,7 @@
 /* A5/3&4                                                                   */
 /* ------------------------------------------------------------------------ */
 
-/*! \brief Generate a GSM A5/4 cipher stream
+/*! Generate a GSM A5/4 cipher stream
  *  \param[in] key 16 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -79,7 +79,7 @@
        }
 }
 
-/*! \brief Generate a GSM A5/3 cipher stream
+/*! Generate a GSM A5/3 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -119,7 +119,7 @@
 #define A5_R3_TAPS	0x700080 /* x^23 + x^22 + x^21 + x^8 + 1 */
 #define A5_R4_TAPS	0x010800 /* x^17 + x^12 + 1 */
 
-/*! \brief Computes parity of a 32-bit word
+/*! Computes parity of a 32-bit word
  *  \param[in] x 32 bit word
  *  \return Parity bit (xor of all bits) as 0 or 1
  */
@@ -133,7 +133,7 @@
 	return (0x6996 >> x) & 1;
 }
 
-/*! \brief Compute majority bit from 3 taps
+/*! Compute majority bit from 3 taps
  *  \param[in] v1 LFSR state ANDed with tap-bit
  *  \param[in] v2 LFSR state ANDed with tap-bit
  *  \param[in] v3 LFSR state ANDed with tap-bit
@@ -145,7 +145,7 @@
 	return (!!v1 + !!v2 + !!v3) >= 2;
 }
 
-/*! \brief Compute the next LFSR state
+/*! Compute the next LFSR state
  *  \param[in] r Current state
  *  \param[in] mask LFSR mask
  *  \param[in] taps LFSR taps
@@ -166,7 +166,7 @@
 #define A51_R2_CLKBIT	0x000400
 #define A51_R3_CLKBIT	0x000400
 
-/*! \brief GSM A5/1 Clocking function
+/*! GSM A5/1 Clocking function
  *  \param[in] r Register state
  *  \param[in] force Non-zero value disable conditional clocking
  */
@@ -191,7 +191,7 @@
 		r[2] = _a5_12_clock(r[2], A5_R3_MASK, A5_R3_TAPS);
 }
 
-/*! \brief GSM A5/1 Output function
+/*! GSM A5/1 Output function
  *  \param[in] r Register state
  *  \return The A5/1 output function bit
  */
@@ -203,7 +203,7 @@
 		(r[2] >> (A5_R3_LEN-1));
 }
 
-/*! \brief Generate a GSM A5/1 cipher stream
+/*! Generate a GSM A5/1 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -278,7 +278,7 @@
 #define A52_R4_CLKBIT1	0x000008
 #define A52_R4_CLKBIT2	0x000080
 
-/*! \brief GSM A5/2 Clocking function
+/*! GSM A5/2 Clocking function
  *  \param[in] r Register state
  *  \param[in] force Non-zero value disable conditional clocking
  */
@@ -305,7 +305,7 @@
 	r[3] = _a5_12_clock(r[3], A5_R4_MASK, A5_R4_TAPS);
 }
 
-/*! \brief GSM A5/2 Output function
+/*! GSM A5/2 Output function
  *  \param[in] r Register state
  *  \return The A5/2 output function bit
  */
@@ -324,7 +324,7 @@
 	return b;
 }
 
-/*! \brief Generate a GSM A5/1 cipher stream
+/*! Generate a GSM A5/1 cipher stream
  *  \param[in] key 8 byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
  *  \param[out] dl Pointer to array of ubits to return Downlink cipher stream
@@ -398,7 +398,7 @@
 	osmo_a5(2, key, fn, dl, ul);
 }
 
-/*! \brief Main method to generate a A5/x cipher stream
+/*! Main method to generate a A5/x cipher stream
  *  \param[in] n Which A5/x method to use
  *  \param[in] key 8 or 16 (for a5/4) byte array for the key (as received from the SIM)
  *  \param[in] fn Frame number
diff --git a/src/gsm/abis_nm.c b/src/gsm/abis_nm.c
index c954902..287973b 100644
--- a/src/gsm/abis_nm.c
+++ b/src/gsm/abis_nm.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup oml
  *  @{
- * \brief GSM Network Management (OML) messages on the A-bis interface
+ * GSM Network Management (OML) messages on the A-bis interface
  * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0
  */
 
@@ -41,7 +41,7 @@
 const char abis_nm_ipa_magic[13] = "com.ipaccess";
 const char abis_nm_osmo_magic[12] = "org.osmocom";
 
-/*! \brief unidirectional messages from BTS to BSC */
+/*! unidirectional messages from BTS to BSC */
 const enum abis_nm_msgtype abis_nm_reports[4] = {
 	NM_MT_SW_ACTIVATED_REP,
 	NM_MT_TEST_REP,
@@ -49,14 +49,14 @@
 	NM_MT_FAILURE_EVENT_REP,
 };
 
-/*! \brief messages without ACK/NACK */
+/*! messages without ACK/NACK */
 const enum abis_nm_msgtype abis_nm_no_ack_nack[3] = {
 	NM_MT_MEAS_RES_REQ,
 	NM_MT_STOP_MEAS,
 	NM_MT_START_MEAS,
 };
 
-/*! \brief messages related to software load */
+/*! messages related to software load */
 const enum abis_nm_msgtype abis_nm_sw_load_msgs[9] = {
 	NM_MT_LOAD_INIT_ACK,
 	NM_MT_LOAD_INIT_NACK,
@@ -70,7 +70,7 @@
 	NM_MT_SW_ACTIVATED_REP,
 };
 
-/*! \brief All NACKs (negative acknowledgements */
+/*! All NACKs (negative acknowledgements */
 const enum abis_nm_msgtype abis_nm_nacks[33] = {
 	NM_MT_LOAD_INIT_NACK,
 	NM_MT_LOAD_END_NACK,
@@ -145,7 +145,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for OML NACK message type */
+/*! Get human-readable string for OML NACK message type */
 const char *abis_nm_nack_name(uint8_t nack)
 {
 	return get_value_string(nack_names, nack);
@@ -214,7 +214,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for NACK cause */
+/*! Get human-readable string for NACK cause */
 const char *abis_nm_nack_cause_name(uint8_t cause)
 {
 	return get_value_string(nack_cause_names, cause);
@@ -230,7 +230,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for OML event type */
+/*! Get human-readable string for OML event type */
 const char *abis_nm_event_type_name(uint8_t cause)
 {
 	return get_value_string(event_type_names, cause);
@@ -247,13 +247,13 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable string for perceived OML severity */
+/*! Get human-readable string for perceived OML severity */
 const char *abis_nm_severity_name(uint8_t cause)
 {
 	return get_value_string(severity_names, cause);
 }
 
-/*! \brief 3GPP TS 12.21 9.4.53 T200 values (in msec) */
+/*! 3GPP TS 12.21 9.4.53 T200 values (in msec) */
 const uint8_t abis_nm_t200_ms[] = {
 	[T200_SDCCH]		= 5,
 	[T200_FACCH_F]		= 5,
@@ -264,7 +264,7 @@
 	[T200_SACCH_TCH_SAPI3]	= 10
 };
 
-/*! \brief 3GPP TS 52.021 §9.1 Message Types */
+/*! 3GPP TS 52.021 §9.1 Message Types */
 const struct value_string abis_nm_msgtype_names[] = {
 	{ NM_MT_LOAD_INIT,		"Load Data Initiate" },				/* §8.3.1 */
 	{ NM_MT_LOAD_INIT_ACK,		"Load Data Initiate Ack" },
@@ -367,7 +367,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief 3GPP TS 52.021 §9.4 Attributes and Parameters */
+/*! 3GPP TS 52.021 §9.4 Attributes and Parameters */
 const struct value_string abis_nm_att_names[] = {
 	{ NM_ATT_ABIS_CHANNEL,		"Abis Channel" },			/* §9.4.1 */
 	{ NM_ATT_ADD_INFO,		"Additional Info" },			/* §9.4.2 */
@@ -438,7 +438,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Attributes that the BSC can set, not only get, according to Section 9.4 */
+/*! Attributes that the BSC can set, not only get, according to Section 9.4 */
 const enum abis_nm_attr abis_nm_att_settable[] = {
 	NM_ATT_ADD_INFO,
 	NM_ATT_ADD_TEXT,
@@ -467,7 +467,7 @@
 	NM_ATT_MEAS_TYPE,
 };
 
-/*! \brief GSM A-bis OML IPA TLV parser definition */
+/*! GSM A-bis OML IPA TLV parser definition */
 const struct tlv_definition abis_nm_att_tlvdef_ipa = {
 	.def = {
 		/* ip.access specifics */
@@ -516,7 +516,7 @@
 	},
 };
 
-/*! \brief GSM A-bis OML TLV parser definition */
+/*! GSM A-bis OML TLV parser definition */
 const struct tlv_definition abis_nm_att_tlvdef = {
 	.def = {
 		[NM_ATT_ABIS_CHANNEL] =		{ TLV_TYPE_FIXED, 3 },
@@ -586,14 +586,14 @@
 	},
 };
 
-/*! \brief org.osmocom GSM A-bis OML TLV parser definition */
+/*! org.osmocom GSM A-bis OML TLV parser definition */
 const struct tlv_definition abis_nm_osmo_att_tlvdef = {
 	.def = {
 		[NM_ATT_OSMO_REDUCEPOWER] =	{ TLV_TYPE_TV },
 	},
 };
 
-/*! \brief Human-readable strings for A-bis OML Object Class */
+/*! Human-readable strings for A-bis OML Object Class */
 const struct value_string abis_nm_msg_disc_names[] = {
 	{ ABIS_OM_MDISC_FOM,	"FOM" },
 	{ ABIS_OM_MDISC_MMI,	"MMI" },
@@ -602,7 +602,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Human-readable strings for A-bis OML Object Class */
+/*! Human-readable strings for A-bis OML Object Class */
 const struct value_string abis_nm_obj_class_names[] = {
 	{ NM_OC_SITE_MANAGER,	"SITE-MANAGER" },
 	{ NM_OC_BTS,		"BTS" },
@@ -624,7 +624,7 @@
 	{ 0,			NULL }
 };
 
-/*! \brief Get human-readable string for OML Operational State */
+/*! Get human-readable string for OML Operational State */
 const char *abis_nm_opstate_name(uint8_t os)
 {
 	switch (os) {
@@ -653,7 +653,7 @@
 	{ 0,	NULL }
 };
 
-/*! \brief Get human-readable string for OML Availability State */
+/*! Get human-readable string for OML Availability State */
 const char *abis_nm_avail_name(uint8_t avail)
 {
 	return get_value_string(avail_names, avail);
@@ -671,13 +671,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable string for OML test */
+/*! Get human-readable string for OML test */
 const char *abis_nm_test_name(uint8_t test)
 {
 	return get_value_string(test_names, test);
 }
 
-/*! \brief Human-readable names for OML administrative state */
+/*! Human-readable names for OML administrative state */
 const struct value_string abis_nm_adm_state_names[] = {
 	{ NM_STATE_LOCKED,	"Locked" },
 	{ NM_STATE_UNLOCKED,	"Unlocked" },
@@ -702,7 +702,7 @@
 	/* FIXME: bounds check */
 };
 
-/*! \brief Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
+/*! Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
 struct msgb *abis_nm_fail_evt_rep(enum abis_nm_event_type t,
 				  enum abis_nm_severity s,
 				  enum abis_nm_pcause_type ct,
@@ -718,7 +718,7 @@
 	return nmsg;
 }
 
-/*! \brief Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
+/*! Pack 3GPP TS 12.21 § 8.8.2 Failure Event Report into msgb */
 struct msgb *abis_nm_fail_evt_vrep(enum abis_nm_event_type t,
 				   enum abis_nm_severity s,
 				   enum abis_nm_pcause_type ct,
@@ -753,7 +753,7 @@
 	return nmsg;
 }
 
-/*! \brief Compute length of given 3GPP TS 52.021 §9.4.62 SW Description.
+/*! Compute length of given 3GPP TS 52.021 §9.4.62 SW Description.
  *  \param[in] sw SW Description struct
  *  \param[in] put_sw_descr boolean, whether to put NM_ATT_SW_DESCR IE or not
  *  \returns length of buffer space necessary to store sw
@@ -764,7 +764,7 @@
 	return (put_sw_desc ? 1 : 0) + (sw->file_id_len + 3) + (sw->file_version_len + 3);
 }
 
-/*! \brief Put given 3GPP TS 52.021 §9.4.62 SW Description into msgb.
+/*! Put given 3GPP TS 52.021 §9.4.62 SW Description into msgb.
  *  \param[out] msg message buffer
  *  \param[in] sw SW Description struct
  *  \param[in] put_sw_descr boolean, whether to put NM_ATT_SW_DESCR IE or not
@@ -781,7 +781,7 @@
 	return abis_nm_sw_desc_len(sw, put_sw_desc);
 }
 
-/*! \brief Put given file ID/Version pair as 3GPP TS 52.021 §9.4.62 SW Description into msgb.
+/*! Put given file ID/Version pair as 3GPP TS 52.021 §9.4.62 SW Description into msgb.
  *  \param[out] msg message buffer
  *  \param[in] id File ID part of SW Description
  *  \param[in] id File Version part of SW Description
@@ -801,7 +801,7 @@
 	return abis_nm_put_sw_desc(msg, &sw, put_sw_desc);
 }
 
-/*! \brief Get length of first 3GPP TS 52.021 §9.4.62 SW Description from buffer.
+/*! Get length of first 3GPP TS 52.021 §9.4.62 SW Description from buffer.
  *  \param[in] buf buffer, may contain several SW Descriptions
  *  \param[in] len buffer length
  *  \returns length if parsing succeeded, 0 otherwise
@@ -826,7 +826,7 @@
 	return sw + 2; /* +  2-byte length field of 2nd FILE_* element */
 }
 
-/*! \brief Parse single 3GPP TS 52.021 §9.4.62 SW Description from buffer.
+/*! Parse single 3GPP TS 52.021 §9.4.62 SW Description from buffer.
  *  \param[out] sw SW Description struct
  *  \param[in] buf buffer
  *  \param[in] len buffer length
@@ -882,7 +882,7 @@
 	return 0;
 }
 
-/*! \brief Parse 3GPP TS 52.021 §9.4.61 SW Configuration from buffer.
+/*! Parse 3GPP TS 52.021 §9.4.61 SW Configuration from buffer.
  *  \param[in] buf buffer
  *  \param[in] buf_len buffer length
  *  \param[out] sw SW Description struct array
@@ -908,7 +908,7 @@
 	return i;
 }
 
-/*! \brief Obtain OML Channel Combination for phnsical channel config */
+/*! Obtain OML Channel Combination for phnsical channel config */
 int abis_nm_chcomb4pchan(enum gsm_phys_chan_config pchan)
 {
 	if (pchan < ARRAY_SIZE(chcomb4pchan))
@@ -917,7 +917,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Obtain physical channel config for OML Channel Combination */
+/*! Obtain physical channel config for OML Channel Combination */
 enum gsm_phys_chan_config abis_nm_pchan4chcomb(uint8_t chcomb)
 {
 	int i;
diff --git a/src/gsm/auth_core.c b/src/gsm/auth_core.c
index c9e403c..1bdd4a8 100644
--- a/src/gsm/auth_core.c
+++ b/src/gsm/auth_core.c
@@ -32,7 +32,7 @@
 
 /*! \addtogroup auth
  *  @{
- *  \brief GSM/GPRS/3G authentication core infrastructure
+ *  GSM/GPRS/3G authentication core infrastructure
  */
 
 /* \file auth_core.c */
@@ -41,7 +41,7 @@
 
 static struct osmo_auth_impl *selected_auths[_OSMO_AUTH_ALG_NUM];
 
-/*! \brief Register an authentication algorithm implementation with the core
+/*! Register an authentication algorithm implementation with the core
  *  \param[in] impl Structure describing implementation and it's callbacks
  *  \returns 0 on success, or a negative error code on failure
  *
@@ -63,7 +63,7 @@
 	return 0;
 }
 
-/*! \brief Load all available authentication plugins from the given path
+/*! Load all available authentication plugins from the given path
  *  \param[in] path Path name of the directory containing the plugins
  *  \returns number of plugins loaded in case of success, negative in case of error
  *
@@ -75,7 +75,7 @@
 	return osmo_plugin_load_all(path);
 }
 
-/*! \brief Determine if a given authentication algorithm is supported
+/*! Determine if a given authentication algorithm is supported
  *  \param[in] algo Algorithm which should be checked
  *  \returns 1 if algo is supported, 0 if not, negative error on failure
  *
@@ -112,7 +112,7 @@
 	memcpy(ck+8, kc, 8);
 }
 
-/*! \brief Generate 3G CK + IK from 2G authentication vector
+/*! Generate 3G CK + IK from 2G authentication vector
  *  \param vec Authentication Vector to be modified
  *  \returns 1 if the vector was changed, 0 otherwise
  *
@@ -136,7 +136,7 @@
 	return 0;
 }
 
-/*! \brief Generate authentication vector
+/*! Generate authentication vector
  *  \param[out] vec Generated authentication vector
  *  \param[in] aud Subscriber-specific key material
  *  \param[in] _rand Random challenge to be used
@@ -167,7 +167,7 @@
 	return 0;
 }
 
-/*! \brief Generate authentication vector and re-sync sequence
+/*! Generate authentication vector and re-sync sequence
  *  \param[out] vec Generated authentication vector
  *  \param[in] aud Subscriber-specific key material
  *  \param[in] auts AUTS value sent by the SIM/MS
@@ -212,13 +212,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable name of authentication algorithm */
+/*! Get human-readable name of authentication algorithm */
 const char *osmo_auth_alg_name(enum osmo_auth_algo alg)
 {
 	return get_value_string(auth_alg_vals, alg);
 }
 
-/*! \brief Parse human-readable name of authentication algorithm */
+/*! Parse human-readable name of authentication algorithm */
 enum osmo_auth_algo osmo_auth_alg_parse(const char *name)
 {
 	return get_string_value(auth_alg_vals, name);
diff --git a/src/gsm/comp128.c b/src/gsm/comp128.c
index cb3a309..78f0e07 100644
--- a/src/gsm/comp128.c
+++ b/src/gsm/comp128.c
@@ -73,7 +73,7 @@
  */
 
 /*! \file comp128.c
- *  \brief COMP128 v1; common/old GSM Authentication Algorithm (A3/A8)
+ *  COMP128 v1; common/old GSM Authentication Algorithm (A3/A8)
  */
 
 /* The compression tables (just copied ...) */
@@ -192,7 +192,7 @@
 		x[(i>>3)+16] |= bits[(i*17) & 127] << (7-(i&7));
 }
 
-/*! \brief Perform COMP128v1 algorithm
+/*! Perform COMP128v1 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
@@ -242,7 +242,7 @@
 }
 
 
-/*! \brief Perform COMP128v1 algorithm
+/*! Perform COMP128v1 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
diff --git a/src/gsm/comp128v23.c b/src/gsm/comp128v23.c
index bfb4a0e..1797ebc 100644
--- a/src/gsm/comp128v23.c
+++ b/src/gsm/comp128v23.c
@@ -33,7 +33,7 @@
  */
 
 /*! \file comp128v23.c
- *  \brief COMP128 v2 / v3; Common Algorithm used for GSM Authentication (A3/A8)
+ *  COMP128 v2 / v3; Common Algorithm used for GSM Authentication (A3/A8)
  */
 
 static const uint8_t table0[256] = {
@@ -109,7 +109,7 @@
 	}
 }
 
-/*! \brief Perform COMP128v3 algorithm
+/*! Perform COMP128v3 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
@@ -161,7 +161,7 @@
 	return 0;
 }
 
-/*! \brief Perform COMP128v2 algorithm
+/*! Perform COMP128v2 algorithm
  *  \param[in] ki Secret Key K(i) of subscriber
  *  \param[in] rand Random Challenge
  *  \param[out] sres user-supplied buffer for storing computed SRES value
diff --git a/src/gsm/gan.c b/src/gsm/gan.c
index 1d98b38..d357b7e 100644
--- a/src/gsm/gan.c
+++ b/src/gsm/gan.c
@@ -22,7 +22,7 @@
 #include <osmocom/gsm/protocol/gsm_44_318.h>
 
 /*! \file gan.c
- *  \brief Generic Access Network (GAN) / UMA according to TS 44.318
+ *  Generic Access Network (GAN) / UMA according to TS 44.318
  */
 
 
diff --git a/src/gsm/gea.c b/src/gsm/gea.c
index 8d026a2..d4e599c 100644
--- a/src/gsm/gea.c
+++ b/src/gsm/gea.c
@@ -37,7 +37,7 @@
 /*! \file gsm/gea.c */
 
 
-/*! \brief Performs the GEA4 algorithm as in 3GPP TS 55.226 V9.0.0
+/*! Performs the GEA4 algorithm as in 3GPP TS 55.226 V9.0.0
  *  \param[in,out] out Buffer for gamma for encrypted/decrypted
  *  \param[in] len Length of out, in bytes
  *  \param[in] kc Buffer with the ciphering key
@@ -51,7 +51,7 @@
 	return 0;
 }
 
-/*! \brief Performs the GEA3 algorithm as in 3GPP TS 55.216 V6.2.0
+/*! Performs the GEA3 algorithm as in 3GPP TS 55.216 V6.2.0
  *  \param[in,out] out Buffer for gamma for encrypted/decrypted
  *  \param[in] len Length of out, in bytes
  *  \param[in] kc Buffer with the ciphering key
diff --git a/src/gsm/gprs_cipher_core.c b/src/gsm/gprs_cipher_core.c
index a0cf185..b833048 100644
--- a/src/gsm/gprs_cipher_core.c
+++ b/src/gsm/gprs_cipher_core.c
@@ -88,7 +88,7 @@
 	return selected_ciphers[algo]->run(out, len, kc, iv, dir);
 }
 
-/*! \brief Obtain key lenght for given GPRS cipher
+/*! Obtain key lenght for given GPRS cipher
  *  \param[in] algo Enum representive GPRS cipher
  *  \returns unsigned integer key length for supported algorithms,
  *  for GEA0 and unknown ciphers will return 0
diff --git a/src/gsm/gprs_rlc.c b/src/gsm/gprs_rlc.c
index d1247be..4b32947 100644
--- a/src/gsm/gprs_rlc.c
+++ b/src/gsm/gprs_rlc.c
@@ -6,7 +6,7 @@
 #include <osmocom/gprs/protocol/gsm_04_60.h>
 
 /*! \file gsm/gprs_rlc.c
- *  \brief helper functions for (E)GPRS RLC according to 3GPP TS 44.060
+ *  helper functions for (E)GPRS RLC according to 3GPP TS 44.060
  */
 
 #define EGPRS_CPS_TYPE1_TBL_SZ		29
diff --git a/src/gsm/gsm0341.c b/src/gsm/gsm0341.c
index 2592b54..0e3e453 100644
--- a/src/gsm/gsm0341.c
+++ b/src/gsm/gsm0341.c
@@ -31,7 +31,7 @@
  *  @{
  */
 
-/*! \brief Encode a 3GPP TS 03.41 SMS-CB message
+/*! Encode a 3GPP TS 03.41 SMS-CB message
  *  \param[in] ctx talloc allocation context
  *  \param[in] geo_scope Geographic Scope
  *  \param[in] msg_code Message Code
diff --git a/src/gsm/gsm0411_smc.c b/src/gsm/gsm0411_smc.c
index 03016b9..dab83eb 100644
--- a/src/gsm/gsm0411_smc.c
+++ b/src/gsm/gsm0411_smc.c
@@ -62,7 +62,7 @@
 
 /*! \addtogroup sms
  *  @{
- *  \brief Point-to-Point (PP) Short Message Service (SMS) as per TS 04.11
+ *  Point-to-Point (PP) Short Message Service (SMS) as per TS 04.11
  */
 
 static void cp_timer_expired(void *data);
diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c
index 543775c..ef67930 100644
--- a/src/gsm/gsm0411_utils.c
+++ b/src/gsm/gsm0411_utils.c
@@ -45,7 +45,7 @@
 #define GSM411_ALLOC_SIZE	1024
 #define GSM411_ALLOC_HEADROOM	128
 
-/*! \brief Allocate a message buffer for use as TS 04.11 message
+/*! Allocate a message buffer for use as TS 04.11 message
  *  \returns allocated message buffer */
 struct msgb *gsm411_msgb_alloc(void)
 {
@@ -53,7 +53,7 @@
 				   "GSM 04.11");
 }
 
-/*! \brief Turn int into semi-octet representation: 98 => 0x89
+/*! Turn int into semi-octet representation: 98 => 0x89
  *  \param[in] integer value representing decimal number 0..99
  *  \returns BSC encoded as nibbles, swapped */
 uint8_t gsm411_bcdify(uint8_t value)
@@ -66,7 +66,7 @@
 	return ret;
 }
 
-/*! \brief Turn semi-octet representation into int: 0x89 => 98
+/*! Turn semi-octet representation into int: 0x89 => 98
  *  \param[in] value byte containing two BCD nibbles in revere order
  *  \returns integer representing decoded, re-ordered nibbles */
 uint8_t gsm411_unbcdify(uint8_t value)
@@ -83,7 +83,7 @@
 	return ret;
 }
 
-/*! \brief Generate 03.40 TP-SCTS
+/*! Generate 03.40 TP-SCTS
  *  \param[out] scts Caller-provided buffer to store SCTS (7 octets)
  *  \param[in] time to encode */
 void gsm340_gen_scts(uint8_t *scts, time_t time)
@@ -104,7 +104,7 @@
 #endif
 }
 
-/*! \brief Decode 03.40 TP-SCTS (into utc/gmt timestamp)
+/*! Decode 03.40 TP-SCTS (into utc/gmt timestamp)
  *  \param[in] scts SMS Center Time Stamp
  *  \return time in UTC time_t format */
 time_t gsm340_scts(uint8_t *scts)
@@ -204,7 +204,7 @@
 	return minutes;
 }
 
-/*! \brief decode validity period. return minutes
+/*! decode validity period. return minutes
  *  \param[in] sms_vpf Validity Period Format in 03.40 encoding
  *  \param[in] sms_vp Validity Period Information Element
  *  \returns validity period in minutes */
@@ -245,7 +245,7 @@
 	}
 }
 
-/*! \brief determine coding alphabet dependent on GSM 03.38 Section 4 DCS
+/*! determine coding alphabet dependent on GSM 03.38 Section 4 DCS
  *  \param[in] dcs Data Coding Scheme in 03.38 encoding
  *  \returns libosmogsm internal enum \ref sms_alphabet */
 enum sms_alphabet gsm338_get_sms_alphabet(uint8_t dcs)
@@ -285,7 +285,7 @@
 	return alpha;
 }
 
-/*! \brief generate a TPDU address field compliant with 03.40 sec. 9.1.2.5 
+/*! generate a TPDU address field compliant with 03.40 sec. 9.1.2.5 
  *  \param[out] oa caller-provided output buffer
  *  \param[in] oa_len caller-specified length of \a oa in bytes
  *  \param[in] type GSM340_TYPE_*
@@ -321,7 +321,7 @@
 	return len_in_bytes;
 }
 
-/*! \brief Prefix \ref msgb with a RP header
+/*! Prefix \ref msgb with a RP header
  *  \param msg Message Buffer containing message
  *  \param[in] rp_msg_type RP Message Type
  *  \param[in] rp_msg_ref RP Message Reference
@@ -341,7 +341,7 @@
 	return 0;
 }
 
-/*! \brief Prefix \ref msgb with a 04.08/04.11 CP header
+/*! Prefix \ref msgb with a 04.08/04.11 CP header
  *  \param msg Message Buffer containing message
  *  \param[in] proto Protocol
  *  \param[in] trans Transaction
diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c
index c96dc77..f595dd6 100644
--- a/src/gsm/gsm0808.c
+++ b/src/gsm/gsm0808.c
@@ -26,13 +26,13 @@
 
 /*! \addtogroup gsm0808
  *  @{
- *  \brief Helper functions regarding the TS 08.08 / 48.008 A interface
+ *  Helper functions regarding the TS 08.08 / 48.008 A interface
  */
 
 #define BSSMAP_MSG_SIZE 512
 #define BSSMAP_MSG_HEADROOM 128
 
-/*! \brief Create "Complete L3 Info" for AoIP
+/*! Create "Complete L3 Info" for AoIP
  *  \param[in] msg_l3 msgb containing Layer 3 Message
  *  \param[in] nc Mobile Network Code
  *  \param[in] cc Mobile Country Code
@@ -81,7 +81,7 @@
 	return msg;
 }
 
-/*! \brief Create "Complete L3 Info" for A
+/*! Create "Complete L3 Info" for A
  *  \param[in] msg_l3 msgb containing Layer 3 Message
  *  \param[in] nc Mobile Network Code
  *  \param[in] cc Mobile Country Code
@@ -94,7 +94,7 @@
 	return gsm0808_create_layer3_aoip(msg_l3, nc, cc, lac, _ci, NULL);
 }
 
-/*! \brief Create BSSMAP RESET message
+/*! Create BSSMAP RESET message
  *  \returns callee-allocated msgb with BSSMAP Reset message */
 struct msgb *gsm0808_create_reset(void)
 {
@@ -111,7 +111,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP RESET ACK message
+/*! Create BSSMAP RESET ACK message
  *  \returns callee-allocated msgb with BSSMAP Reset ACK message */
 struct msgb *gsm0808_create_reset_ack(void)
 {
@@ -126,7 +126,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Clear Complete message
+/*! Create BSSMAP Clear Complete message
  *  \returns callee-allocated msgb with BSSMAP Clear Complete message */
 struct msgb *gsm0808_create_clear_complete(void)
 {
@@ -142,7 +142,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Clear Command message
+/*! Create BSSMAP Clear Command message
  *  \param[in] reason TS 08.08 cause value
  *  \returns callee-allocated msgb with BSSMAP Clear Command message */
 struct msgb *gsm0808_create_clear_command(uint8_t reason)
@@ -159,7 +159,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Command message
+/*! Create BSSMAP Cipher Mode Command message
  *  \param[in] ei Mandatory Encryption Information
  *  \param[in] cipher_response_mode optional 1-byte Cipher Response Mode
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Command message */
@@ -196,7 +196,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Complete message
+/*! Create BSSMAP Cipher Mode Complete message
  *  \param[in] layer3 L3 Message to be included
  *  \param[in] alg_id Chosen Encrpytion Algorithm
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Complete message */
@@ -225,7 +225,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Cipher Mode Reject message
+/*! Create BSSMAP Cipher Mode Reject message
  *  \param[in] reason TS 08.08 cause value
  *  \returns callee-allocated msgb with BSSMAP Cipher Mode Reject message */
 struct msgb *gsm0808_create_cipher_reject(uint8_t cause)
@@ -242,7 +242,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Classmark Update message
+/*! Create BSSMAP Classmark Update message
  *  \param[in] cm2 Classmark 2
  *  \param[in] cm2_len length (in octets) of \a cm2
  *  \param[in] cm3 Classmark 3
@@ -267,7 +267,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP SAPI N Reject message
+/*! Create BSSMAP SAPI N Reject message
  *  \param[in] link_id Link Identifier
  *  \returns callee-allocated msgb with BSSMAP SAPI N Reject message */
 struct msgb *gsm0808_create_sapi_reject(uint8_t link_id)
@@ -286,7 +286,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Request message
+/*! Create BSSMAP Assignment Request message
  *  \param[in] ct Channel Type
  *  \param[in] cic Circuit Identity Code (Classic A only)
  *  \param[in] ss Socket Address of MSC-side RTP socket (AoIP only)
@@ -349,7 +349,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Completed message
+/*! Create BSSMAP Assignment Completed message
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] chosen_channel Chosen Channel
  *  \param[in] encr_alg_id Encryption Algorithm ID
@@ -407,7 +407,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Completed message
+/*! Create BSSMAP Assignment Completed message
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] chosen_channel Chosen Channel
  *  \param[in] encr_alg_id Encryption Algorithm ID
@@ -422,7 +422,7 @@
 					speech_mode, NULL, NULL, NULL);
 }
 
-/*! \brief Create BSSMAP Assignment Failure message
+/*! Create BSSMAP Assignment Failure message
  *  \param[in] cause BSSMAP Cause value
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \param[in] scl Optional Speech Cdec List (AoIP)
@@ -456,7 +456,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP Assignment Failure message
+/*! Create BSSMAP Assignment Failure message
  *  \param[in] cause BSSMAP Cause value
  *  \param[in] rr_cause GSM 04.08 RR Cause value
  *  \returns callee-allocated msgb with BSSMAP Assignment Failure message */
@@ -466,7 +466,7 @@
 	return gsm0808_create_ass_fail(cause, rr_cause, NULL);
 }
 
-/*! \brief Create BSSMAP Clear Request message
+/*! Create BSSMAP Clear Request message
  *  \param[in] cause BSSMAP Cause value
  *  \returns callee-allocated msgb with BSSMAP Clear Request message */
 struct msgb *gsm0808_create_clear_rqst(uint8_t cause)
@@ -485,7 +485,7 @@
 	return msg;
 }
 
-/*! \brief Create BSSMAP PAGING message
+/*! Create BSSMAP PAGING message
  *  \param[in] imsi Mandatory paged IMSI in string representation
  *  \param[in] tmsi Optional paged TMSI
  *  \param[in] cil Cell Identity List (where to page)
@@ -543,7 +543,7 @@
 	return msg;
 }
 
-/*! \brief Prepend a DTAP header to given Message Buffer
+/*! Prepend a DTAP header to given Message Buffer
  *  \param[in] msgb Message Buffer
  *  \param[in] link_id Link Identifier */
 void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id)
@@ -554,7 +554,7 @@
 	hh[2] = msg->len - 3;
 }
 
-/*! \brief Create BSSMAP DTAP message
+/*! Create BSSMAP DTAP message
  *  \param[in] msg_l3 Messge Buffer containing Layer3 message
  *  \param[in] link_id Link Identifier
  *  \returns callee-allocated msgb with BSSMAP DTAP message */
@@ -818,7 +818,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Return string name of BSSMAP Message Type */
+/*! Return string name of BSSMAP Message Type */
 const char *gsm0808_bssmap_name(uint8_t msg_type)
 {
 	return get_value_string(gsm0808_msgt_names, msg_type);
@@ -830,7 +830,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Return string name of BSSAP Message Type */
+/*! Return string name of BSSAP Message Type */
 const char *gsm0808_bssap_name(uint8_t msg_type)
 {
 	return get_value_string(gsm0808_bssap_names, msg_type);
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c
index 210f64e..34e10bb 100644
--- a/src/gsm/gsm0808_utils.c
+++ b/src/gsm/gsm0808_utils.c
@@ -44,7 +44,7 @@
  *  @{
  */
 
-/*! \brief Encode TS 08.08 AoIP transport address IE
+/*! Encode TS 08.08 AoIP transport address IE
  *  \param[out] msg Message Buffer to which to append IE
  *  \param[in] ss Socket Address to be used in IE
  *  \returns number of bytes added to \a msg */
@@ -88,7 +88,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 AoIP transport address IE
+/*! Decode TS 08.08 AoIP transport address IE
  *  \param[out] ss Caller-provided memory where decoded socket addr is stored
  *  \param[in] elem pointer to IE value
  *  \param[in] len length of \a elem in bytes
@@ -223,7 +223,7 @@
 	return (uint8_t) (msg->tail - old_tail);
 }
 
-/*! \brief Encode TS 08.08 Speech Codec IE
+/*! Encode TS 08.08 Speech Codec IE
  *  \param[out] msg Message Buffer to which IE will be appended
  *  \param[in] sc Speech Codec to be encoded into IE
  *  \returns number of bytes appended to \a msg */
@@ -247,7 +247,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Speech Codec IE
+/*! Decode TS 08.08 Speech Codec IE
  *  \param[out] sc Caller-allocated memory for Speech Codec
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -328,7 +328,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Speech Codec list
+/*! Encode TS 08.08 Speech Codec list
  *  \param[out] msg  Message Buffer to which IE is to be appended
  *  \param[in] scl Speech Codec List to be encoded into IE
  *  \returns number of bytes added to \a msg */
@@ -363,7 +363,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Speech Codec list IE
+/*! Decode TS 08.08 Speech Codec list IE
  *  \param[out] scl Caller-provided memory to store codec list
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -408,7 +408,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Channel Type IE
+/*! Encode TS 08.08 Channel Type IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] ct Channel Type to be encoded
  *  \returns number of bytes added to \a msg */
@@ -450,7 +450,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Channel Type IE
+/*! Decode TS 08.08 Channel Type IE
  *  \param[out] ct Caller-provided memory to store channel type
  *  \param[in] elem IE Value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -488,7 +488,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Encryption Information IE
+/*! Encode TS 08.08 Encryption Information IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] ei Encryption Information to be encoded
  *  \returns number of bytes appended to \a msg */
@@ -526,7 +526,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode TS 08.08 Encryption Information IE
+/*! Decode TS 08.08 Encryption Information IE
  *  \param[out] ei Caller-provided memory to store encryption information
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -565,7 +565,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Encode TS 08.08 Cell Identifier List IE
+/*! Encode TS 08.08 Cell Identifier List IE
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] cil Cell ID List to be encoded
  *  \returns number of bytes appended to \a msg */
@@ -604,7 +604,7 @@
 	return *tlv_len + 2;
 }
 
-/*! \brief Decode Cell Identifier List IE
+/*! Decode Cell Identifier List IE
  *  \param[out] cil Caller-provided memory to store Cell ID list
  *  \param[in] elem IE value to be decoded
  *  \param[in] len Length of \a elem in bytes
@@ -650,7 +650,7 @@
 	return (int)(elem - old_elem);
 }
 
-/*! \brief Convert the representation of the permitted speech codec identifier
+/*! Convert the representation of the permitted speech codec identifier
  *  that is used in struct gsm0808_channel_type to the speech codec
  *  representation we use in struct gsm0808_speech_codec.
  *  \param[in] perm_spch to be converted (see also gsm0808_permitted_speech)
@@ -687,7 +687,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Extrapolate a speech codec field from a given permitted speech
+/*! Extrapolate a speech codec field from a given permitted speech
  *  parameter (channel type).
  *  \param[out] sc Caller provided memory to store the resulting speech codec
  *  \param[in] perm_spch value that is used to derive the speech codec info
diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c
index 405c904..227dbef 100644
--- a/src/gsm/gsm48.c
+++ b/src/gsm/gsm48.c
@@ -41,10 +41,10 @@
 
 /*! \addtogroup gsm0408
  *  @{
- *  \brief GSM Mobile Radion Interface L3 messages / TS 04.08
+ *  GSM Mobile Radion Interface L3 messages / TS 04.08
  */
 
-/*! \brief TLV parser definitions for TS 04.08 CC */
+/*! TLV parser definitions for TS 04.08 CC */
 const struct tlv_definition gsm48_att_tlvdef = {
 	.def = {
 		[GSM48_IE_MOBILE_ID]	= { TLV_TYPE_TLV },
@@ -86,7 +86,7 @@
 	},
 };
 
-/*! \brief TLV parser definitions for TS 04.08 RR */
+/*! TLV parser definitions for TS 04.08 RR */
 const struct tlv_definition gsm48_rr_att_tlvdef = {
 	.def = {
 		/* NOTE: Don't add IE 17 = MOBILE_ID here, it already used. */
@@ -131,7 +131,7 @@
 	},
 };
 
-/*! \brief TLV parser definitions for TS 04.08 MM */
+/*! TLV parser definitions for TS 04.08 MM */
 const struct tlv_definition gsm48_mm_att_tlvdef = {
 	.def = {
 		[GSM48_IE_MOBILE_ID]		= { TLV_TYPE_TLV },
@@ -170,7 +170,7 @@
 	{ 0,					NULL },
 };
 
-/*! \brief return string representation of RR Cause value */
+/*! return string representation of RR Cause value */
 const char *rr_cause_name(uint8_t cause)
 {
 	return get_value_string(rr_cause_names, cause);
@@ -212,7 +212,7 @@
 	"illegal state 31",
 };
 
-/*! \brief return string representation of CC State */
+/*! return string representation of CC State */
 const char *gsm48_cc_state_name(uint8_t state)
 {
 	if (state < ARRAY_SIZE(cc_state_names))
@@ -260,7 +260,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief return string representation of CC Message Type */
+/*! return string representation of CC Message Type */
 const char *gsm48_cc_msg_name(uint8_t msgtype)
 {
 	return get_value_string(cc_msg_names, msgtype);
@@ -368,7 +368,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief return string representation of RR Message Type */
+/*! return string representation of RR Message Type */
 const char *gsm48_rr_msg_name(uint8_t msgtype)
 {
 	return get_value_string(rr_msg_names, msgtype);
@@ -408,7 +408,7 @@
 	{ 0,			NULL }
 };
 
-/*! \brief return string representation of Mobile Identity Type */
+/*! return string representation of Mobile Identity Type */
 const char *gsm48_mi_type_name(uint8_t mi)
 {
 	return get_value_string(mi_type_names, mi);
@@ -423,7 +423,7 @@
 	bcd[0] = val % 10;
 }
 
-/*! \brief Checks is particular message is cipherable in A/Gb mode according to
+/*! Checks is particular message is cipherable in A/Gb mode according to
  *         3GPP TS 24.008 § 4.7.1.2
  *  \param[in] hdr Message header
  *  \return true if message can be encrypted, false otherwise
@@ -447,7 +447,7 @@
 	}
 }
 
-/* \brief Convert MCC + MNC to BCD representation
+/* Convert MCC + MNC to BCD representation
  * \param[out] bcd_dst caller-allocated memory for output
  * \param[in] mcc Mobile Country Code
  * \param[in] mnc Mobile Network Code
@@ -492,7 +492,7 @@
 	}
 }
 
-/*! \brief Encode TS 04.08 Location Area Identifier
+/*! Encode TS 04.08 Location Area Identifier
  *  \param[out] caller-provided memory for output
  *  \param[in] mcc Mobile Country Code
  *  \param[in] mnc Mobile Network Code
@@ -504,7 +504,7 @@
 	lai48->lac = osmo_htons(lac);
 }
 
-/*! \brief Decode TS 04.08 Location Area Identifier
+/*! Decode TS 04.08 Location Area Identifier
  *  \param[in] Location Area Identifier (encoded)
  *  \param[out] mcc Mobile Country Code
  *  \param[out] mnc Mobile Network Code
@@ -520,7 +520,7 @@
 	return 0;
 }
 
-/*! \brief Set DTX mode in Cell Options IE (3GPP TS 44.018)
+/*! Set DTX mode in Cell Options IE (3GPP TS 44.018)
  *  \param[in] op Cell Options structure in which DTX parameters will be set
  *  \param[in] full Mode for full-rate channels
  *  \param[in] half Mode for half-rate channels
@@ -564,7 +564,7 @@
 	}
 }
 
-/*! \brief Generate TS 04.08 Mobile ID from TMSI
+/*! Generate TS 04.08 Mobile ID from TMSI
  *  \param[out] buf Caller-provided output buffer (7 bytes)
  *  \param[in] tmsi TMSI to be encoded
  *  \returns number of byes encoded (always 7) */
@@ -580,7 +580,7 @@
 	return 7;
 }
 
-/*! \brief Generate TS 04.08 Mobile ID from IMSI
+/*! Generate TS 04.08 Mobile ID from IMSI
  *  \param[out] buf Caller-provided output buffer
  *  \param[in] imsi IMSI to be encoded
  *  \returns number of bytes used in \a buf */
@@ -613,7 +613,7 @@
 	return 2 + buf[1];
 }
 
-/*! \brief Convert TS 04.08 Mobile Identity (10.5.1.4) to string
+/*! Convert TS 04.08 Mobile Identity (10.5.1.4) to string
  *  \param[out] string Caller-provided buffer for output
  *  \param[in] str_len Length of \a string in bytes
  *  \param[in] mi Mobile Identity to be stringified
@@ -661,7 +661,7 @@
 	return str_cur - string;
 }
 
-/*! \brief Parse TS 04.08 Routing Area Identifier
+/*! Parse TS 04.08 Routing Area Identifier
  *  \param[out] Caller-provided memory for decoded RA ID
  *  \param[in] buf Input buffer pointing to RAI IE value */
 void gsm48_parse_ra(struct gprs_ra_id *raid, const uint8_t *buf)
@@ -685,7 +685,7 @@
 	raid->rac = buf[5];
 }
 
-/*! \brief Encode a TS 04.08 Routing Area Identifier
+/*! Encode a TS 04.08 Routing Area Identifier
  *  \param[out] buf Caller-provided output buffer of 6 bytes
  *  \param[in] raid Routing Area ID to be encoded
  *  \returns number of bytes used in \a buf */
@@ -716,7 +716,7 @@
 	return 6;
 }
 
-/*! \brief Determine number of paging sub-channels
+/*! Determine number of paging sub-channels
  *  \param[in] chan_desc Control Channel Description
  *  \returns number of paging sub-channels
  *
@@ -733,7 +733,7 @@
 		return n_pag_blocks * (chan_desc->bs_pa_mfrms + 2);
 }
 
-/*! \brief TS 04.08 Protocol Descriptor names */
+/*! TS 04.08 Protocol Descriptor names */
 const struct value_string gsm48_pdisc_names[] = {
 	OSMO_VALUE_STRING(GSM48_PDISC_GROUP_CC),
 	OSMO_VALUE_STRING(GSM48_PDISC_BCAST_CC),
@@ -753,7 +753,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 RR Message Type names */
+/*! TS 04.08 RR Message Type names */
 const struct value_string gsm48_rr_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_RR_INIT_REQ),
 	OSMO_VALUE_STRING(GSM48_MT_RR_ADD_ASS),
@@ -846,7 +846,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 MM Message Type names */
+/*! TS 04.08 MM Message Type names */
 const struct value_string gsm48_mm_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_MM_IMSI_DETACH_IND),
 	OSMO_VALUE_STRING(GSM48_MT_MM_LOC_UPD_ACCEPT),
@@ -876,7 +876,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief TS 04.08 CC Message Type names */
+/*! TS 04.08 CC Message Type names */
 const struct value_string gsm48_cc_msgtype_names[] = {
 	OSMO_VALUE_STRING(GSM48_MT_CC_ALERTING),
 	OSMO_VALUE_STRING(GSM48_MT_CC_CALL_CONF),
@@ -919,7 +919,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Compose a string naming the message type for given protocol.
+/*! Compose a string naming the message type for given protocol.
  * If the message type string is known, return the message type name, otherwise
  * return "<protocol discriminator name>:<message type in hex>".
  * \param[in] pdisc protocol discriminator like GSM48_PDISC_MM
diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c
index 20d0075..d3a868d 100644
--- a/src/gsm/gsm48_ie.c
+++ b/src/gsm/gsm48_ie.c
@@ -43,7 +43,7 @@
 	'8', '9', '*', '#', 'a', 'b', 'c', '\0'
 };
 
-/*! \brief decode a 'called/calling/connect party BCD number' as in 10.5.4.7
+/*! decode a 'called/calling/connect party BCD number' as in 10.5.4.7
  *  \param[out] Caller-provided output buffer
  *  \param[in] bcd_lv Length-Value portion of to-be-decoded IE
  *  \param[in] h_len Length of an optional heder between L and V portion
@@ -73,7 +73,7 @@
 	return 0;
 }
 
-/*! \brief convert a single ASCII character to call-control BCD */
+/*! convert a single ASCII character to call-control BCD */
 static int asc_to_bcd(const char asc)
 {
 	int i;
@@ -85,7 +85,7 @@
 	return -EINVAL;
 }
 
-/*! \brief convert a ASCII phone number to 'called/calling/connect party BCD number'
+/*! convert a ASCII phone number to 'called/calling/connect party BCD number'
  *  \param[out] bcd_lv Caller-provided output buffer
  *  \param[in] max_len Maximum Length of \a bcd_lv
  *  \param[in] h_len Length of an optional heder between L and V portion
@@ -123,7 +123,7 @@
 	return (bcd_cur - bcd_lv);
 }
 
-/*! \brief Decode TS 04.08 Bearer Capability IE (10.5.4.5)
+/*! Decode TS 04.08 Bearer Capability IE (10.5.4.5)
  *  \param[out] Caller-provided memory for decoded output
  *  \[aram[in] LV portion of TS 04.08 Bearer Capability
  *  \returns 0 on success; negative on error */
@@ -235,7 +235,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Bearer Capability IE (10.5.4.5)
+/*! Encode TS 04.08 Bearer Capability IE (10.5.4.5)
  *  \param[out] msg Message Buffer to which IE is to be appended
  *  \param[in] lv_only Write only LV portion (1) or TLV (0)
  *  \param[in] bcap Decoded Bearer Capability to be encoded
@@ -294,7 +294,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Call Control Capabilities IE (10.5.4.5a)
+/*! Decode TS 04.08 Call Control Capabilities IE (10.5.4.5a)
  *  \param[out] Caller-provided memory for decoded CC capabilities
  *  \param[in] lv Length-Value of IE
  *  \retursns 0 on success; negative on error */
@@ -312,7 +312,7 @@
 	return 0;
 }
 
-/*! \brief Encodoe TS 04.08 Call Control Capabilities (10.5.4.5a)
+/*! Encodoe TS 04.08 Call Control Capabilities (10.5.4.5a)
  *  \param[out] msg Message Buffer to which to append IE (as TLV)
  *  \param[in] ccap Decoded CC Capabilities to be encoded
  *  \returns 0 on success; negative on error */
@@ -333,7 +333,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Called Party BCD Number IE (10.5.4.7)
+/*! Decode TS 04.08 Called Party BCD Number IE (10.5.4.7)
  *  \param[out] called Caller-provided memory for decoded number
  *  \param[in] lv Length-Value portion of IE
  *  \returns 0 on success; negative on error */
@@ -355,7 +355,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Called Party IE (10.5.4.7)
+/*! Encode TS 04.08 Called Party IE (10.5.4.7)
  *  \param[out] msg Mesage Buffer to which to append IE (as TLV)
  *  \param[in] called MNCC Number to encode/append
  *  \returns 0 on success; negative on error */
@@ -380,7 +380,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Caller ID
+/*! Decode TS 04.08 Caller ID
  *  \param[out] called Caller-provided memory for decoded number
  *  \param[in] lv Length-Value portion of IE
  *  \returns 0 on success; negative on error */
@@ -410,7 +410,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Caller ID IE
+/*! Encode TS 04.08 Caller ID IE
  *  \param[out] msg Mesage Buffer to which to append IE (as TLV)
  *  \param[in] ie IE Identifier (tag)
  *  \param[in] max_len maximum generated output in bytes
@@ -446,7 +446,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Cause IE (10.5.4.11)
+/*! Decode TS 04.08 Cause IE (10.5.4.11)
  *  \param[out] cause Caller-provided memory for output
  *  \param[in] lv LV portion of Cause IE
  *  \returns 0 on success; negative on error */
@@ -492,7 +492,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Cause IE (10.5.4.11)
+/*! Encode TS 04.08 Cause IE (10.5.4.11)
  *  \param[out] msg Message Buffer to which to append IE
  *  \param[in] lv_only Encode as LV (1) or TLV (0)
  *  \param[in] cause Cause value to be encoded
@@ -536,49 +536,49 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Calling Number IE (10.5.4.9) */
+/*! Decode TS 04.08 Calling Number IE (10.5.4.9) */
 int gsm48_decode_calling(struct gsm_mncc_number *calling,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(calling, lv);
 }
 
-/*! \brief Encode TS 04.08 Calling Number IE (10.5.4.9) */
+/*! Encode TS 04.08 Calling Number IE (10.5.4.9) */
 int gsm48_encode_calling(struct msgb *msg, 
 			  const struct gsm_mncc_number *calling)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_CALLING_BCD, 14, calling);
 }
 
-/*! \brief Decode TS 04.08 Connected Number IE (10.5.4.13) */
+/*! Decode TS 04.08 Connected Number IE (10.5.4.13) */
 int gsm48_decode_connected(struct gsm_mncc_number *connected,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(connected, lv);
 }
 
-/*! \brief Encode TS 04.08 Connected Number IE (10.5.4.13) */
+/*! Encode TS 04.08 Connected Number IE (10.5.4.13) */
 int gsm48_encode_connected(struct msgb *msg,
 			    const struct gsm_mncc_number *connected)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_CONN_BCD, 14, connected);
 }
 
-/*! \brief Decode TS 04.08 Redirecting Number IE (10.5.4.21b) */
+/*! Decode TS 04.08 Redirecting Number IE (10.5.4.21b) */
 int gsm48_decode_redirecting(struct gsm_mncc_number *redirecting,
 			 const uint8_t *lv)
 {
 	return gsm48_decode_callerid(redirecting, lv);
 }
 
-/*! \brief Encode TS 04.08 Redirecting Number IE (10.5.4.21b) */
+/*! Encode TS 04.08 Redirecting Number IE (10.5.4.21b) */
 int gsm48_encode_redirecting(struct msgb *msg,
 			      const struct gsm_mncc_number *redirecting)
 {
 	return gsm48_encode_callerid(msg, GSM48_IE_REDIR_BCD, 19, redirecting);
 }
 
-/*! \brief Decode TS 04.08 Facility IE (10.5.4.15) */
+/*! Decode TS 04.08 Facility IE (10.5.4.15) */
 int gsm48_decode_facility(struct gsm_mncc_facility *facility,
 			   const uint8_t *lv)
 {
@@ -596,7 +596,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Facility IE (10.5.4.15) */
+/*! Encode TS 04.08 Facility IE (10.5.4.15) */
 int gsm48_encode_facility(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_facility *facility)
 {
@@ -615,7 +615,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Notify IE (10.5.4.20) */
+/*! Decode TS 04.08 Notify IE (10.5.4.20) */
 int gsm48_decode_notify(int *notify, const uint8_t *v)
 {
 	*notify = v[0] & 0x7f;
@@ -623,7 +623,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Notify IE (10.5.4.20) */
+/*! Encode TS 04.08 Notify IE (10.5.4.20) */
 int gsm48_encode_notify(struct msgb *msg, int notify)
 {
 	msgb_v_put(msg, notify | 0x80);
@@ -631,7 +631,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Signal IE (10.5.4.23) */
+/*! Decode TS 04.08 Signal IE (10.5.4.23) */
 int gsm48_decode_signal(int *signal, const uint8_t *v)
 {
 	*signal = v[0];
@@ -639,7 +639,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Signal IE (10.5.4.23) */
+/*! Encode TS 04.08 Signal IE (10.5.4.23) */
 int gsm48_encode_signal(struct msgb *msg, int signal)
 {
 	msgb_tv_put(msg, GSM48_IE_SIGNAL, signal);
@@ -647,7 +647,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Keypad IE (10.5.4.17) */
+/*! Decode TS 04.08 Keypad IE (10.5.4.17) */
 int gsm48_decode_keypad(int *keypad, const uint8_t *lv)
 {
 	uint8_t in_len = lv[0];
@@ -660,7 +660,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Keypad IE (10.5.4.17) */
+/*! Encode TS 04.08 Keypad IE (10.5.4.17) */
 int gsm48_encode_keypad(struct msgb *msg, int keypad)
 {
 	msgb_tv_put(msg, GSM48_IE_KPD_FACILITY, keypad);
@@ -668,7 +668,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 Progress IE (10.5.4.21) */
+/*! Decode TS 04.08 Progress IE (10.5.4.21) */
 int gsm48_decode_progress(struct gsm_mncc_progress *progress,
 			   const uint8_t *lv)
 {
@@ -684,7 +684,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 Progress IE (10.5.4.21) */
+/*! Encode TS 04.08 Progress IE (10.5.4.21) */
 int gsm48_encode_progress(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_progress *p)
 {
@@ -701,7 +701,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 User-User IE (10.5.4.25) */
+/*! Decode TS 04.08 User-User IE (10.5.4.25) */
 int gsm48_decode_useruser(struct gsm_mncc_useruser *uu,
 			   const uint8_t *lv)
 {
@@ -727,7 +727,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 User-User IE (10.5.4.25) */
+/*! Encode TS 04.08 User-User IE (10.5.4.25) */
 int gsm48_encode_useruser(struct msgb *msg, int lv_only,
 			   const struct gsm_mncc_useruser *uu)
 {
@@ -747,7 +747,7 @@
 	return 0;
 }
 
-/*! \brief Decode TS 04.08 SS Version IE (10.5.4.24) */
+/*! Decode TS 04.08 SS Version IE (10.5.4.24) */
 int gsm48_decode_ssversion(struct gsm_mncc_ssversion *ssv,
 			    const uint8_t *lv)
 {
@@ -762,7 +762,7 @@
 	return 0;
 }
 
-/*! \brief Encode TS 04.08 SS Version IE (10.5.4.24) */
+/*! Encode TS 04.08 SS Version IE (10.5.4.24) */
 int gsm48_encode_ssversion(struct msgb *msg,
 			   const struct gsm_mncc_ssversion *ssv)
 {
@@ -780,7 +780,7 @@
 
 /* decode 'more data' does not require a function, because it has no value */
 
-/*! \brief Encode TS 04.08 More Data IE (10.5.4.19) */
+/*! Encode TS 04.08 More Data IE (10.5.4.19) */
 int gsm48_encode_more(struct msgb *msg)
 {
 	uint8_t *ie;
@@ -803,7 +803,7 @@
 	return res;
 }
 
-/*! \brief Decode TS 04.08 Cell Channel Description IE (10.5.2.1b) and other frequency lists
+/*! Decode TS 04.08 Cell Channel Description IE (10.5.2.1b) and other frequency lists
  *  \param[out] f Caller-provided output memory
  *  \param[in] cd Cell Channel Description IE
  *  \param[in] len Length of \a cd in bytes
diff --git a/src/gsm/gsm_04_08_gprs.c b/src/gsm/gsm_04_08_gprs.c
index bd986d7..7bcef4e 100644
--- a/src/gsm/gsm_04_08_gprs.c
+++ b/src/gsm/gsm_04_08_gprs.c
@@ -30,7 +30,7 @@
  *  @{
  */
 
-/*! \brief 10.5.5.14 GPRS MM Cause / Table 10.5.147 */
+/*! 10.5.5.14 GPRS MM Cause / Table 10.5.147 */
 const struct value_string gsm48_gmm_cause_names_[] = {
 	{ GMM_CAUSE_IMSI_UNKNOWN,	"IMSI unknown in HLR" },
 	{ GMM_CAUSE_ILLEGAL_MS,		"Illegal MS" },
@@ -75,7 +75,7 @@
 
 const struct value_string *gsm48_gmm_cause_names = gsm48_gmm_cause_names_;
 
-/*! \brief 10.5.6.6 SM Cause / Table 10.5.157 */
+/*! 10.5.6.6 SM Cause / Table 10.5.157 */
 const struct value_string gsm48_gsm_cause_names_[] = {
 	{ GSM_CAUSE_OPER_DET_BARR, "Operator Determined Barring" },
 	{ GSM_CAUSE_MBMS_CAP_INSUF, "MBMS bearer capabilities insufficient for the service" },
@@ -115,7 +115,7 @@
 
 const struct value_string *gsm48_gsm_cause_names = gsm48_gsm_cause_names_;
 
-/*! \brief Check if MS supports particular version of GEA by inspecting
+/*! Check if MS supports particular version of GEA by inspecting
  *         MS network capability IE specified in 3GPP TS 24.008
  *  \param[in] ms_net_cap Buffer with raw MS network capability IE value,
  *                        3 - 10 bytes
@@ -142,7 +142,7 @@
 	}
 }
 
-/*! \brief String names of GMM message types */
+/*! String names of GMM message types */
 const struct value_string gprs_msgt_gmm_names[] = {
 	{ GSM48_MT_GMM_ATTACH_REQ,		"ATTACH REQUEST" },
 	{ GSM48_MT_GMM_ATTACH_ACK,		"ATTACH ACK" },
@@ -167,7 +167,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief String names of GPRS Attach types according to 10.5.5.2 */
+/*! String names of GPRS Attach types according to 10.5.5.2 */
 const struct value_string gprs_att_t_strs_[] = {
 	{ GPRS_ATT_T_ATTACH,		"GPRS attach" },
 	{ GPRS_ATT_T_ATT_WHILE_IMSI,	"GPRS attach while IMSI attached" },
@@ -177,7 +177,7 @@
 
 const struct value_string *gprs_att_t_strs = gprs_att_t_strs_;
 
-/*! \brief String names of GPRS Location Update Types */
+/*! String names of GPRS Location Update Types */
 const struct value_string gprs_upd_t_strs_[] = {
 	{ GPRS_UPD_T_RA,		"RA updating" },
 	{ GPRS_UPD_T_RA_LA,		"combined RA/LA updating" },
@@ -188,7 +188,7 @@
 
 const struct value_string *gprs_upd_t_strs = gprs_upd_t_strs_;
 
-/*! \brief String names of GMM MO Detach Types according to 10.5.5.5 */
+/*! String names of GMM MO Detach Types according to 10.5.5.5 */
 const struct value_string gprs_det_t_mo_strs_[] = {
 	{ GPRS_DET_T_MO_GPRS,		"GPRS detach" },
 	{ GPRS_DET_T_MO_IMSI,		"IMSI detach" },
@@ -198,7 +198,7 @@
 
 const struct value_string *gprs_det_t_mo_strs = gprs_det_t_mo_strs_;
 
-/*! \brief String names of GMM MT Detach Types according to 10.5.5.5 */
+/*! String names of GMM MT Detach Types according to 10.5.5.5 */
 const struct value_string gprs_det_t_mt_strs_[] = {
 	{ GPRS_DET_T_MT_REATT_REQ,	"re-attach required" },
 	{ GPRS_DET_T_MT_REATT_NOTREQ,	"re-attach not required" },
@@ -208,7 +208,7 @@
 
 const struct value_string *gprs_det_t_mt_strs = gprs_det_t_mt_strs_;
 
-/*! \brief String names of GMM Service Types */
+/*! String names of GMM Service Types */
 const struct value_string gprs_service_t_strs_[] = {
 	{ GPRS_SERVICE_T_SIGNALLING,	"signalling" },
 	{ GPRS_SERVICE_T_DATA,		"data" },
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 9cb5df6..fd16e98 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -146,7 +146,7 @@
 	return octet_len;
 }
 
-/*! \brief TS 03.38 7-bit Character unpacking (6.2.1)
+/*! TS 03.38 7-bit Character unpacking (6.2.1)
  *  \param[out] text Caller-provided output text buffer
  *  \param[in] n Length of \a text
  *  \param[in] user_data Input Data (septets)
@@ -210,13 +210,13 @@
 	return text - text_buf_begin;
 }
 
-/*! \brief Decode 7bit GSM Alphabet */
+/*! Decode 7bit GSM Alphabet */
 int gsm_7bit_decode_n(char *text, size_t n, const uint8_t *user_data, uint8_t septet_l)
 {
 	return gsm_7bit_decode_n_hdr(text, n, user_data, septet_l, 0);
 }
 
-/*! \brief Decode 7bit GSM Alphabet (USSD) */
+/*! Decode 7bit GSM Alphabet (USSD) */
 int gsm_7bit_decode_n_ussd(char *text, size_t n, const uint8_t *user_data, uint8_t length)
 {
 	int nchars;
@@ -229,7 +229,7 @@
 	return nchars;
 }
 
-/*! \brief Encode a ASCII characterrs as 7-bit GSM alphabet (TS 03.38)
+/*! Encode a ASCII characterrs as 7-bit GSM alphabet (TS 03.38)
  *
  *  This function converts a zero-terminated input string \a data from
  *  ASCII into octet-aligned 7-bit GSM characters. No packing is
@@ -266,7 +266,7 @@
 	return y;
 }
 
-/*! \brief GSM Default Alphabet 7bit to octet packing
+/*! GSM Default Alphabet 7bit to octet packing
  *  \param[out] result Caller-provided output buffer
  *  \param[in] rdata Input data septets
  *  \param[in] septet_len Length of \a rdata
@@ -317,7 +317,7 @@
 	return z;
 }
 
-/*! \brief GSM 7-bit alphabet TS 03.38 6.2.1 Character packing
+/*! GSM 7-bit alphabet TS 03.38 6.2.1 Character packing
  *  \param[out] result Caller-provided output buffer
  *  \param[in] n Maximum length of \a result in bytes
  *  \param[in] data octet-aligned string
@@ -361,7 +361,7 @@
 	return y;
 }
 
-/*! \brief Encode according to GSM 7-bit alphabet (TS 03.38 6.2.1) for USSD
+/*! Encode according to GSM 7-bit alphabet (TS 03.38 6.2.1) for USSD
  *  \param[out] result Caller-provided output buffer
  *  \param[in] n Maximum length of \a result in bytes
  *  \param[in] data octet-aligned string
@@ -385,7 +385,7 @@
 	return y;
 }
 
-/*! \brief Build the RSL uplink measurement IE (3GPP TS 08.58 § 9.3.25)
+/*! Build the RSL uplink measurement IE (3GPP TS 08.58 § 9.3.25)
  *  \param[in] mru Unidirectional measurement report structure
  *  \param[in] dtxd_used Indicates if DTXd was used during measurement report
  *             period
@@ -403,7 +403,7 @@
 	return 3;
 }
 
-/*! \brief Convert power class to dBm according to GSM TS 05.05
+/*! Convert power class to dBm according to GSM TS 05.05
  *  \param[in] band GSM frequency band
  *  \param[in] class GSM power class
  *  \returns maximum transmit power of power class in dBm */
@@ -447,7 +447,7 @@
 	return -EINVAL;
 }
 
-/*! \brief determine power control level for given dBm value, as indicated
+/*! determine power control level for given dBm value, as indicated
  *  by the tables in chapter 4.1.1 of GSM TS 05.05
  *  \param[in] GSM frequency band
  *  \param[in] dbm RF power value in dBm
@@ -500,7 +500,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert TS 05.05 power level to absolute dBm value
+/*! Convert TS 05.05 power level to absolute dBm value
  *  \param[in] band GSM frequency band
  *  \param[in] lvl TS 05.05 power control level
  *  \returns RF power level in dBm */
@@ -542,7 +542,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert TS 05.08 RxLev to dBm (TS 05.08 Chapter 8.1.4)
+/*! Convert TS 05.08 RxLev to dBm (TS 05.08 Chapter 8.1.4)
  *  \param[in] rxlev TS 05.08 RxLev value
  *  \returns Received RF power in dBm */
 int rxlev2dbm(uint8_t rxlev)
@@ -553,7 +553,7 @@
 	return -110 + rxlev;
 }
 
-/*! \brief Convert RF signal level in dBm to TS 05.08 RxLev (TS 05.08 Chapter 8.1.4)
+/*! Convert RF signal level in dBm to TS 05.08 RxLev (TS 05.08 Chapter 8.1.4)
  *  \param[in] dbm RF signal level in dBm
  *  \returns TS 05.08 RxLev value */
 uint8_t dbm2rxlev(int dbm)
@@ -568,7 +568,7 @@
 	return rxlev;
 }
 
-/*! \brief Return string name of a given GSM Band */
+/*! Return string name of a given GSM Band */
 const char *gsm_band_name(enum gsm_band band)
 {
 	switch (band) {
@@ -592,7 +592,7 @@
 	return "invalid";
 }
 
-/*! \brief Parse string name of a GSM band */
+/*! Parse string name of a GSM band */
 enum gsm_band gsm_band_parse(const char* mhz)
 {
 	while (*mhz && !isdigit(*mhz))
@@ -623,7 +623,7 @@
 	}
 }
 
-/*! \brief Resolve GSM band from ARFCN
+/*! Resolve GSM band from ARFCN
  *  In Osmocom, we use the highest bit of the \a arfcn to indicate PCS
  *  \param[in] arfcn Osmocom ARFCN, highest bit determines PCS mode
  *  \returns GSM Band */
@@ -676,7 +676,7 @@
 	{ /* Guard */ }
 };
 
-/*! \brief Convert an ARFCN to the frequency in MHz * 10
+/*! Convert an ARFCN to the frequency in MHz * 10
  *  \param[in] arfcn GSM ARFCN to convert
  *  \param[in] uplink Uplink (1) or Downlink (0) frequency
  *  \returns Frequency in units of 1/10ths of MHz (100kHz) */
@@ -703,7 +703,7 @@
 	return uplink ? freq10_ul : freq10_dl;
 }
 
-/*! \brief Convert a Frequency in MHz * 10 to ARFCN
+/*! Convert a Frequency in MHz * 10 to ARFCN
  *  \param[in] freq10 Frequency in units of 1/10ths of MHz (100kHz)
  *  \param[in] uplink Frequency is Uplink (1) or Downlink (0)
  *  \returns ARFCN in case of success; 0xffff on error */
@@ -736,7 +736,7 @@
 	return arfcn;
 }
 
-/*! \brief Parse GSM Frame Number into struct \ref gsm_time
+/*! Parse GSM Frame Number into struct \ref gsm_time
  *  \param[out] time Caller-provided memory for \ref gsm_time
  *  \param[in] fn GSM Frame Number */
 void gsm_fn2gsmtime(struct gsm_time *time, uint32_t fn)
@@ -748,7 +748,7 @@
 	time->tc = (time->fn / 51) % 8;
 }
 
-/*! \brief Encode decoded \ref gsm_time to Frame Number
+/*! Encode decoded \ref gsm_time to Frame Number
  *  \param[in] time GSM Time in decoded structure
  *  \returns GSM Frame Number */
 uint32_t gsm_gsmtime2fn(struct gsm_time *time)
@@ -757,7 +757,7 @@
 	return (51 * ((time->t3 - time->t2 + 26) % 26) + time->t3 + (26 * 51 * time->t1));
 }
 
-/*! \brief append range1024 encoded data to bit vector
+/*! append range1024 encoded data to bit vector
  *  \param[out] bv Caller-provided output bit-vector
  *  \param[in] r Input Range1024 sructure */
 void bitvec_add_range1024(struct bitvec *bv, const struct gsm48_range_1024 *r)
@@ -793,7 +793,7 @@
 	bitvec_set_uint(bv, r->w16, 6);
 }
 
-/*! \brief Determine GPRS TLLI Type (TS 23.003 Chapter 2.6) */
+/*! Determine GPRS TLLI Type (TS 23.003 Chapter 2.6) */
 int gprs_tlli_type(uint32_t tlli)
 {
 	if ((tlli & 0xc0000000) == 0xc0000000)
@@ -812,7 +812,7 @@
 	return TLLI_RESERVED;
 }
 
-/*! \brief Determine TLLI from P-TMSI
+/*! Determine TLLI from P-TMSI
  *  \param[in] p_tmsi P-TMSI
  *  \param[in] type TLLI Type we want to derive from \a p_tmsi
  *  \returns TLLI of given type */
diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c
index 3cac201..780198c 100644
--- a/src/gsm/gsup.c
+++ b/src/gsm/gsup.c
@@ -33,7 +33,7 @@
 
 /*! \addtogroup gsup
  *  @{
- *  \brief Osmocom Generic Subscriber Update Protocol
+ *  Osmocom Generic Subscriber Update Protocol
  */
 
 const struct value_string osmo_gsup_message_type_names[] = {
diff --git a/src/gsm/ipa.c b/src/gsm/ipa.c
index 5c37d64..2c7cf58 100644
--- a/src/gsm/ipa.c
+++ b/src/gsm/ipa.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup ipa
  *  @{
- *  \brief IPA Multiplex utility routines
+ *  IPA Multiplex utility routines
  */
 
 #define IPA_ALLOC_SIZE 1200
@@ -213,7 +213,7 @@
 
 #define IPA_STRING_MAX 64
 
-/*! \brief Generate IPA CCM ID RESP based on list of IEs
+/*! Generate IPA CCM ID RESP based on list of IEs
  *  \param[in] dev Descriptor describing identity data for response
  *  \param[in] ies_req List of IEIs to include in response
  *  \param[in] num_ies_req Number of IEIs in \a ies_req
@@ -296,7 +296,7 @@
 	return msg;
 }
 
-/*! \brief Generate IPA CCM ID RESP based on requets payload
+/*! Generate IPA CCM ID RESP based on requets payload
  *  \param[in] dev Descriptor describing identity data for response
  *  \param[in] data Payload of the IPA CCM ID GET request
  *  \param[in] len Length of \a data in octets
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index b7a9539..4ad7556 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup lapd
  *  @{
- *  \brief Osmocom LAPD core, used for Q.921, LAPDm and others
+ *  Osmocom LAPD core, used for Q.921, LAPDm and others
  */
 
 /*! \file lapd_core.c */
@@ -332,7 +332,7 @@
 	dl->tx_hist = NULL;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm entity */
+/*! Set the \ref lapdm_mode of a LAPDm entity */
 int lapd_set_mode(struct lapd_datalink *dl, enum lapd_mode mode)
 {
 	switch (mode) {
diff --git a/src/gsm/lapdm.c b/src/gsm/lapdm.c
index 8ec942f..1152e0d 100644
--- a/src/gsm/lapdm.c
+++ b/src/gsm/lapdm.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup lapdm
  *  @{
- *  \brief GSM LAPDm (TS 04.06) implementation
+ *  GSM LAPDm (TS 04.06) implementation
  */
 
 /*! \file lapdm.c */
@@ -144,7 +144,7 @@
 	dl->dl.t200_sec = t200; dl->dl.t200_usec = 0;
 }
 
-/*! \brief initialize a LAPDm entity and all datalinks inside
+/*! initialize a LAPDm entity and all datalinks inside
  *  \param[in] le LAPDm entity
  *  \param[in] mode \ref lapdm_mode (BTS/MS)
  */
@@ -158,7 +158,7 @@
 	lapdm_entity_set_mode(le, mode);
 }
 
-/*! \brief initialize a LAPDm channel and all its channels
+/*! initialize a LAPDm channel and all its channels
  *  \param[in] lc \ref lapdm_channel to be initialized
  *  \param[in] mode \ref lapdm_mode (BTS/MS)
  *
@@ -172,7 +172,7 @@
 	lapdm_entity_init(&lc->lapdm_dcch, mode, 1);
 }
 
-/*! \brief flush and release all resoures in LAPDm entity */
+/*! flush and release all resoures in LAPDm entity */
 void lapdm_entity_exit(struct lapdm_entity *le)
 {
 	unsigned int i;
@@ -184,7 +184,7 @@
 	}
 }
 
-/* \brief lfush and release all resources in LAPDm channel
+/* lfush and release all resources in LAPDm channel
  *
  * A convenience wrapper calling \ref lapdm_entity_exit on both
  * entities inside the \ref lapdm_channel
@@ -287,7 +287,7 @@
 	return msg;
 }
 
-/*! \brief dequeue a msg that's pending transmission via L1 and wrap it into
+/*! dequeue a msg that's pending transmission via L1 and wrap it into
  * a osmo_phsap_prim */
 int lapdm_phsap_dequeue_prim(struct lapdm_entity *le, struct osmo_phsap_prim *pp)
 {
@@ -711,7 +711,7 @@
 
 static int l2_ph_chan_conf(struct msgb *msg, struct lapdm_entity *le, uint32_t frame_nr);
 
-/*! \brief Receive a PH-SAP primitive from L1 */
+/*! Receive a PH-SAP primitive from L1 */
 int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
 {
 	struct osmo_phsap_prim *pp = (struct osmo_phsap_prim *) oph;
@@ -1213,7 +1213,7 @@
 	return rc;
 }
 
-/*! \brief Receive a RSLms \ref msgb from Layer 3 */
+/*! Receive a RSLms \ref msgb from Layer 3 */
 int lapdm_rslms_recvmsg(struct msgb *msg, struct lapdm_channel *lc)
 {
 	struct abis_rsl_common_hdr *rslh = msgb_l2(msg);
@@ -1241,7 +1241,7 @@
 	return rc;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm entity */
+/*! Set the \ref lapdm_mode of a LAPDm entity */
 int lapdm_entity_set_mode(struct lapdm_entity *le, enum lapdm_mode mode)
 {
 	int i;
@@ -1267,7 +1267,7 @@
 	return 0;
 }
 
-/*! \brief Set the \ref lapdm_mode of a LAPDm channel*/
+/*! Set the \ref lapdm_mode of a LAPDm channel*/
 int lapdm_channel_set_mode(struct lapdm_channel *lc, enum lapdm_mode mode)
 {
 	int rc;
@@ -1279,7 +1279,7 @@
 	return lapdm_entity_set_mode(&lc->lapdm_acch, mode);
 }
 
-/*! \brief Set the L1 callback and context of a LAPDm channel */
+/*! Set the L1 callback and context of a LAPDm channel */
 void lapdm_channel_set_l1(struct lapdm_channel *lc, osmo_prim_cb cb, void *ctx)
 {
 	lc->lapdm_dcch.l1_prim_cb = cb;
@@ -1288,7 +1288,7 @@
 	lc->lapdm_acch.l1_ctx = ctx;
 }
 
-/*! \brief Set the L3 callback and context of a LAPDm channel */
+/*! Set the L3 callback and context of a LAPDm channel */
 void lapdm_channel_set_l3(struct lapdm_channel *lc, lapdm_cb_t cb, void *ctx)
 {
 	lc->lapdm_dcch.l3_cb = cb;
@@ -1297,7 +1297,7 @@
 	lc->lapdm_acch.l3_ctx = ctx;
 }
 
-/*! \brief Reset an entire LAPDm entity and all its datalinks */
+/*! Reset an entire LAPDm entity and all its datalinks */
 void lapdm_entity_reset(struct lapdm_entity *le)
 {
 	struct lapdm_datalink *dl;
@@ -1309,20 +1309,20 @@
 	}
 }
 
-/*! \brief Reset a LAPDm channel with all its entities */
+/*! Reset a LAPDm channel with all its entities */
 void lapdm_channel_reset(struct lapdm_channel *lc)
 {
 	lapdm_entity_reset(&lc->lapdm_dcch);
 	lapdm_entity_reset(&lc->lapdm_acch);
 }
 
-/*! \brief Set the flags of a LAPDm entity */
+/*! Set the flags of a LAPDm entity */
 void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags)
 {
 	le->flags = flags;
 }
 
-/*! \brief Set the flags of all LAPDm entities in a LAPDm channel */
+/*! Set the flags of all LAPDm entities in a LAPDm channel */
 void lapdm_channel_set_flags(struct lapdm_channel *lc, unsigned int flags)
 {
 	lapdm_entity_set_flags(&lc->lapdm_dcch, flags);
diff --git a/src/gsm/oap.c b/src/gsm/oap.c
index 5706e8f..88c98f7 100644
--- a/src/gsm/oap.c
+++ b/src/gsm/oap.c
@@ -30,10 +30,10 @@
 
 /*! \addtogroup oap
  *  @{
- *  \brief Osmocom Authentication Protocol
+ *  Osmocom Authentication Protocol
  */
 
-/*! \brief Decode OAP message data.
+/*! Decode OAP message data.
  * \param[out] oap_msg  Parsed data is written to this instance.
  * \param[in] data  Pointer to the data buffer containing the OAP message.
  * \param[in] data_len  Length of the OAP message data.
@@ -152,7 +152,7 @@
 	return 0;
 }
 
-/*! \brief Compose OAP message data.
+/*! Compose OAP message data.
  * \param[out] msg  OAP message data is appended to this message buffer.
  * \param[in] oap_msg  Elements to encode in the message data.
  */
diff --git a/src/gsm/rsl.c b/src/gsm/rsl.c
index 5bdb006..4a1f733 100644
--- a/src/gsm/rsl.c
+++ b/src/gsm/rsl.c
@@ -30,17 +30,17 @@
 
 /*! \addtogroup rsl
  *  @{
- *  \brief GSM Radio Signalling Link (TS 08.58)
+ *  GSM Radio Signalling Link (TS 08.58)
  */
 
 /*! \file rsl.c */
 
-/*! \brief Size for RSL \ref msgb_alloc */
+/*! Size for RSL \ref msgb_alloc */
 #define RSL_ALLOC_SIZE		200
-/*! \brief Headroom size for RSL \ref msgb_alloc */
+/*! Headroom size for RSL \ref msgb_alloc */
 #define RSL_ALLOC_HEADROOM	56
 
-/*! \brief Initialize a RSL RLL header
+/*! Initialize a RSL RLL header
  *  \param[out] dh Caller-allocated RSL RLL header
  *  \param[in] msg_type Message Type */
 void rsl_init_rll_hdr(struct abis_rsl_rll_hdr *dh, uint8_t msg_type)
@@ -51,7 +51,7 @@
 	dh->ie_link_id = RSL_IE_LINK_IDENT;
 }
 
-/*! \brief Initialize a RSL Common Channel header
+/*! Initialize a RSL Common Channel header
  *  \param[out] ch Caller-allocated RSL Common Channel Header
  *  \param[in] msg_type Message Type */
 void rsl_init_cchan_hdr(struct abis_rsl_cchan_hdr *ch, uint8_t msg_type)
@@ -61,7 +61,7 @@
 	ch->ie_chan = RSL_IE_CHAN_NR;
 }
 
-/* \brief TLV parser definition for RSL */
+/* TLV parser definition for RSL */
 const struct tlv_definition rsl_att_tlvdef = {
 	.def = {
 		[RSL_IE_CHAN_NR]		= { TLV_TYPE_TV },
@@ -142,7 +142,7 @@
 	},
 };
 
-/*! \brief Encode channel number as per Section 9.3.1
+/*! Encode channel number as per Section 9.3.1
  *  \param[in] Channel Type (RSL_CHAN_...)
  *  \param[in] subch Sub-Channel within Channel
  *  \param[in] timeslot Air interface timeslot
@@ -173,7 +173,7 @@
 	return ret;
 }
 
-/*! \brief Decode RSL channel number
+/*! Decode RSL channel number
  *  \param[in] chan_nr Channel Number
  *  \param[out] type Channel Type
  *  \param[out] subch Sub-channel Number
@@ -210,7 +210,7 @@
 	return 0;
 }
 
-/*! \brief Get human-readable string for RSL channel number */
+/*! Get human-readable string for RSL channel number */
 const char *rsl_chan_nr_str(uint8_t chan_nr)
 {
 	static char str[20];
@@ -272,7 +272,7 @@
 	{ 0,				NULL }
 };
 
-/*! \brief Get human-readable name for RSL Error */
+/*! Get human-readable name for RSL Error */
 const char *rsl_err_name(uint8_t err)
 {
 	return get_value_string(rsl_err_vals, err);
@@ -349,13 +349,13 @@
 };
 
 
-/*! \brief Get human-readable string for RSL Message Type */
+/*! Get human-readable string for RSL Message Type */
 const char *rsl_msg_name(uint8_t msg_type)
 {
 	return get_value_string(rsl_msgt_names, msg_type);
 }
 
-/*! \brief ip.access specific */
+/*! ip.access specific */
 static const struct value_string rsl_ipac_msgt_names[] = {
 	{ RSL_MT_IPAC_PDCH_ACT,		"IPAC_PDCH_ACT" },
 	{ RSL_MT_IPAC_PDCH_ACT_ACK,	"IPAC_PDCH_ACT_ACK" },
@@ -385,13 +385,13 @@
 	{ 0, NULL }
 };
 
-/*! \brief Get human-readable name of ip.access RSL msg type */
+/*! Get human-readable name of ip.access RSL msg type */
 const char *rsl_ipac_msg_name(uint8_t msg_type)
 {
 	return get_value_string(rsl_ipac_msgt_names, msg_type);
 }
 
-/*! \brief Get human-readable name of standard or ip.access RSL msg type.
+/*! Get human-readable name of standard or ip.access RSL msg type.
  * If msg_type is a standard RSL message type, return its human-readable name.
  * Otherwise return rsl_ipac_msg_name(msg_type). */
 const char *rsl_or_ipac_msg_name(uint8_t msg_type)
@@ -420,7 +420,7 @@
 	{ 0,				NULL },
 };
 
-/*! \brief Get human-readable string for RLM cause */
+/*! Get human-readable string for RLM cause */
 const char *rsl_rlm_cause_name(uint8_t err)
 {
 	return get_value_string(rsl_rlm_cause_strs, err);
@@ -464,7 +464,7 @@
 	}
 }
 
-/*! \brief Push a RSL RLL header onto an existing msgb
+/*! Push a RSL RLL header onto an existing msgb
  *  \param msg Message Buffer to which RLL header shall be pushed
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_nr RSL Channel Number
@@ -486,7 +486,7 @@
 	msg->l2h = (uint8_t *)rh;
 }
 
-/*! \brief Wrap msgb in L3 Info IE and push a RSL RLL header
+/*! Wrap msgb in L3 Info IE and push a RSL RLL header
  *  \param[in] msg Message Buffer to which L3 Header shall be appended
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_hr RSL Channel Number
@@ -507,7 +507,7 @@
 	rsl_rll_push_hdr(msg, msg_type, chan_nr, link_id, transparent);
 }
 
-/*! \brief Create msgb with RSL RLL header
+/*! Create msgb with RSL RLL header
  *  \param[in] msg_type RSL Message Type
  *  \param[in] chan_nr RSL Channel Number
  *  \param[in] link_id RSL Link Identifier
@@ -539,7 +539,7 @@
 	return msg;
 }
 
-/*! \brief TLV parser definitions for IPA embedded IEs */
+/*! TLV parser definitions for IPA embedded IEs */
 const struct tlv_definition rsl_ipac_eie_tlvdef = {
 	.def = {
 		[RSL_IPAC_EIE_RXLEV]		= { TLV_TYPE_TV },
@@ -566,7 +566,7 @@
 	},
 };
 
-/*! \brief String names of RSL Channel Activation Types */
+/*! String names of RSL Channel Activation Types */
 const struct value_string rsl_act_type_names[] = {
 	{ RSL_ACT_TYPE_INITIAL,	"INITIAL" },
 	{ RSL_ACT_TYPE_REACT,	"REACT" },
diff --git a/src/gsm/sysinfo.c b/src/gsm/sysinfo.c
index b5ebd57..201acfc 100644
--- a/src/gsm/sysinfo.c
+++ b/src/gsm/sysinfo.c
@@ -125,7 +125,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief Add pair of arfcn and measurement bandwith value to earfcn struct
+/*! Add pair of arfcn and measurement bandwith value to earfcn struct
  *  \param[in,out] e earfcn struct
  *  \param[in] arfcn EARFCN value, 16 bits
  *  \param[in] meas_bw measurement bandwith value
@@ -144,7 +144,7 @@
 	return -ENOMEM;
 }
 
-/*! \brief Return number of bits necessary to represent earfcn struct as
+/*! Return number of bits necessary to represent earfcn struct as
  *  Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1
  *  \param[in,out] e earfcn struct
  *  \returns number of bits
@@ -154,7 +154,7 @@
 	return osmo_earfcn_bit_size_ext(e, 0);
 }
 
-/*! \brief Return number of bits necessary to represent earfcn struct as
+/*! Return number of bits necessary to represent earfcn struct as
  *  Repeated E-UTRAN Neighbour Cells IE from 3GPP TS 44.018 Table 10.5.2.33b.1
  *  \param[in,out] e earfcn struct
  *  \param[in] offset into earfcn struct: how many EARFCNs to skip while estimating size
@@ -183,7 +183,7 @@
 	return bits;
 }
 
-/*! \brief Delete arfcn (and corresponding measurement bandwith) from earfcn
+/*! Delete arfcn (and corresponding measurement bandwith) from earfcn
  *  struct
  *  \param[in,out] e earfcn struct
  *  \param[in] arfcn EARFCN value, 16 bits
@@ -202,7 +202,7 @@
 	return -ENOENT;
 }
 
-/*! \brief Initialize earfcn struct
+/*! Initialize earfcn struct
  *  \param[in,out] e earfcn struct
  */
 void osmo_earfcn_init(struct osmo_earfcn_si2q *e)
diff --git a/src/gsm/tlv_parser.c b/src/gsm/tlv_parser.c
index d7604c6..d9072c9 100644
--- a/src/gsm/tlv_parser.c
+++ b/src/gsm/tlv_parser.c
@@ -25,7 +25,7 @@
 
 /*! \addtogroup tlv
  *  @{
- *  \brief Osmocom TLV Parser
+ *  Osmocom TLV Parser
  *
  *  The Osmocom TLV parser is intended to operate as a low-level C
  *  implementation without dynamic memory allocations.  Basically, it
@@ -46,7 +46,7 @@
 struct tlv_definition tvlv_att_def;
 struct tlv_definition vtvlv_gan_att_def;
 
-/*! \brief Dump pasred TLV structure to stdout */
+/*! Dump pasred TLV structure to stdout */
 int tlv_dump(struct tlv_parsed *dec)
 {
 	int i;
@@ -59,7 +59,7 @@
 	return 0;
 }
 
-/*! \brief Copy \ref tlv_parsed using given talloc context
+/*! Copy \ref tlv_parsed using given talloc context
  *  \param[in] tp_orig Parsed TLV structure
  *  \param[in] ctx Talloc context for allocations
  *  \returns NULL on errors, \ref tlv_parsed pointer otherwise
@@ -94,7 +94,7 @@
 	return tp_out;
 }
 
-/*! \brief Merge all \ref tlv_parsed attributes of 'src' into 'dst'
+/*! Merge all \ref tlv_parsed attributes of 'src' into 'dst'
  *  \param[in] dst Parsed TLV structure to merge into
  *  \param[in] src Parsed TLV structure to merge from
  *  \returns 0 on success, negative on error
@@ -118,7 +118,7 @@
 	return 0;
 }
 
-/*! \brief Parse a single TLV encoded IE
+/*! Parse a single TLV encoded IE
  *  \param[out] o_tag the tag of the IE that was found
  *  \param[out] o_len length of the IE that was found
  *  \param[out] o_val pointer to the data of the IE that was found
@@ -218,7 +218,7 @@
 	return len;
 }
 
-/*! \brief Parse an entire buffer of TLV encoded Information Elements
+/*! Parse an entire buffer of TLV encoded Information Elements
  *  \param[out] dec caller-allocated pointer to \ref tlv_parsed
  *  \param[in] def structure defining the valid TLV tags / configurations
  *  \param[in] buf the input data buffer to be parsed
@@ -277,7 +277,7 @@
 	return num_parsed;
 }
 
-/*! \brief take a master (src) tlvdev and fill up all empty slots in 'dst'
+/*! take a master (src) tlvdev and fill up all empty slots in 'dst'
  *  \param dst TLV parser definition that is to be patched
  *  \param[in] src TLV parser definition whose content is patched into \a dst */
 void tlv_def_patch(struct tlv_definition *dst, const struct tlv_definition *src)
diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 64b54f3..62bbd57 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -43,12 +43,12 @@
 
 /*! \addtogroup gsmtap
  *  @{
- *  \brief GSMTAP utility routines. Encapsulates GSM messages over UDP
+ *  GSMTAP utility routines. Encapsulates GSM messages over UDP
  */
 /*! \file gsmtap_util.c */
 
 
-/*! \brief convert RSL channel number to GSMTAP channel type
+/*! convert RSL channel number to GSMTAP channel type
  *  \param[in] rsl_chantype RSL channel type
  *  \param[in] link_id RSL link identifier
  *  \returns GSMTAP channel type
@@ -88,7 +88,7 @@
 	return ret;
 }
 
-/*! \brief create an arbitrary type GSMTAP message
+/*! create an arbitrary type GSMTAP message
  *  \param[in] type The GSMTAP_TYPE_xxx constant of the message to create
  *  \param[in] arfcn GSM ARFCN (Channel Number)
  *  \param[in] ts GSM time slot
@@ -136,7 +136,7 @@
 	return msg;
 }
 
-/*! \brief create L1/L2 data and put it into GSMTAP
+/*! create L1/L2 data and put it into GSMTAP
  *  \param[in] arfcn GSM ARFCN (Channel Number)
  *  \param[in] ts GSM time slot
  *  \param[in] chan_type Channel Type
@@ -164,7 +164,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 
-/*! \brief Create a new (sending) GSMTAP source socket 
+/*! Create a new (sending) GSMTAP source socket 
  *  \param[in] host host name or IP address in string format
  *  \param[in] port UDP port number in host byte order
  *  \return file descriptor of the new socket
@@ -185,7 +185,7 @@
 				OSMO_SOCK_F_CONNECT);
 }
 
-/*! \brief Add a local sink to an existing GSMTAP source and return fd
+/*! Add a local sink to an existing GSMTAP source and return fd
  *  \param[in] gsmtap_fd file descriptor of the gsmtap socket
  *  \returns file descriptor of locally bound receive socket
  *
@@ -217,7 +217,7 @@
 	return -ENODEV;
 }
 
-/*! \brief Send a \ref msgb through a GSMTAP source
+/*! Send a \ref msgb through a GSMTAP source
  *  \param[in] gti GSMTAP instance
  *  \param[in] msg message buffer
  *  \return 0 in case of success; negative in case of error
@@ -246,7 +246,7 @@
 	}
 }
 
-/*! \brief send an arbitrary type through GSMTAP.
+/*! send an arbitrary type through GSMTAP.
  *  See \ref gsmtap_makemsg_ex for arguments
  */
 int gsmtap_send_ex(struct gsmtap_inst *gti, uint8_t type, uint16_t arfcn, uint8_t ts,
@@ -267,7 +267,7 @@
 	return gsmtap_sendmsg(gti, msg);
 }
 
-/*! \brief send a message from L1/L2 through GSMTAP.
+/*! send a message from L1/L2 through GSMTAP.
  *  See \ref gsmtap_makemsg for arguments
  */
 int gsmtap_send(struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts,
@@ -313,7 +313,7 @@
 	return 0;
 }
 
-/*! \brief Add a local sink to an existing GSMTAP source and return fd
+/*! Add a local sink to an existing GSMTAP source and return fd
  *  \param[in] gsmtap_fd file descriptor of the gsmtap socket
  *  \returns file descriptor of locally bound receive socket
  *
@@ -355,7 +355,7 @@
 }
 
 
-/*! \brief Open GSMTAP source socket, connect and register osmo_fd
+/*! Open GSMTAP source socket, connect and register osmo_fd
  *  \param[in] host host name or IP address in string format
  *  \param[in] port UDP port number in host byte order
  *  \param[in] ofd_wq_mode Register \ref osmo_wqueue (1) or not (0)
diff --git a/src/logging.c b/src/logging.c
index 3b3dd05..964128b 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -22,7 +22,7 @@
 
 /* \addtogroup logging
  * @{
- * \brief libosmocore Logging sub-system
+ * libosmocore Logging sub-system
  */
 
 /* \file logging.c */
@@ -163,7 +163,7 @@
 	},
 };
 
-/*! \brief descriptive string for each log level */
+/*! descriptive string for each log level */
 /* You have to keep this in sync with the structure loglevel_strs. */
 static const char *loglevel_descriptions[LOGLEVEL_DEFS+1] = {
 	"Don't use. It doesn't log anything",
@@ -190,7 +190,7 @@
 	return (subsys * -1) + (osmo_log_info->num_cat_user-1);
 }
 
-/*! \brief Parse a human-readable log level into a numeric value
+/*! Parse a human-readable log level into a numeric value
  *  \param lvl[in] zero-terminated string containing log level name
  *  \returns numeric log level
  */
@@ -199,7 +199,7 @@
 	return get_string_value(loglevel_strs, lvl);
 }
 
-/*! \brief convert a numeric log level into human-readable string
+/*! convert a numeric log level into human-readable string
  *  \param lvl[in] numeric log level
  *  \returns zero-terminated string (log level name)
  */
@@ -208,7 +208,7 @@
 	return get_value_string(loglevel_strs, lvl);
 }
 
-/*! \brief parse a human-readable log category into numeric form
+/*! parse a human-readable log category into numeric form
  *  \param[in] category human-readable log category name
  *  \returns numeric category value, or -EINVAL otherwise
  */
@@ -228,7 +228,7 @@
 	return -EINVAL;
 }
 
-/*! \brief parse the log category mask
+/*! parse the log category mask
  *  \param[in] target log target to be configured
  *  \param[in] _mask log category mask string
  *
@@ -426,7 +426,7 @@
 	return true;
 }
 
-/*! \brief vararg version of logging function
+/*! vararg version of logging function
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Log level
  *  \param[in] file name of source code file
@@ -459,7 +459,7 @@
 	}
 }
 
-/*! \brief logging function used by DEBUGP() macro
+/*! logging function used by DEBUGP() macro
  *  \param[in] subsys Logging sub-system
  *  \param[in] file name of source code file
  *  \param[in] cont continuation (1) or new line (0)
@@ -475,7 +475,7 @@
 	va_end(ap);
 }
 
-/*! \brief logging function used by LOGP() macro
+/*! logging function used by LOGP() macro
  *  \param[in] subsys Logging sub-system
  *  \param[in] level Log level
  *  \param[in] file name of source code file
@@ -491,7 +491,7 @@
 	va_end(ap);
 }
 
-/*! \brief Register a new log target with the logging core
+/*! Register a new log target with the logging core
  *  \param[in] target Log target to be registered
  */
 void log_add_target(struct log_target *target)
@@ -499,7 +499,7 @@
 	llist_add_tail(&target->entry, &osmo_log_target_list);
 }
 
-/*! \brief Unregister a log target from the logging core
+/*! Unregister a log target from the logging core
  *  \param[in] target Log target to be unregistered
  */
 void log_del_target(struct log_target *target)
@@ -507,13 +507,13 @@
 	llist_del(&target->entry);
 }
 
-/*! \brief Reset (clear) the logging context */
+/*! Reset (clear) the logging context */
 void log_reset_context(void)
 {
 	memset(&log_context, 0, sizeof(log_context));
 }
 
-/*! \brief Set the logging context
+/*! Set the logging context
  *  \param[in] ctx_nr logging context number
  *  \param[in] value value to which the context is to be set
  *  \returns 0 in case of success; negative otherwise
@@ -534,7 +534,7 @@
 	return 0;
 }
 
-/*! \brief Enable the \ref LOG_FLT_ALL log filter
+/*! Enable the \ref LOG_FLT_ALL log filter
  *  \param[in] target Log target to be affected
  *  \param[in] all enable (1) or disable (0) the ALL filter
  *
@@ -550,7 +550,7 @@
 		target->filter_map &= ~(1 << LOG_FLT_ALL);
 }
 
-/*! \brief Enable or disable the use of colored output
+/*! Enable or disable the use of colored output
  *  \param[in] target Log target to be affected
  *  \param[in] use_color Use color (1) or don't use color (0)
  */
@@ -559,7 +559,7 @@
 	target->use_color = use_color;
 }
 
-/*! \brief Enable or disable printing of timestamps while logging
+/*! Enable or disable printing of timestamps while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_timestamp Enable (1) or disable (0) timestamps
  */
@@ -568,7 +568,7 @@
 	target->print_timestamp = print_timestamp;
 }
 
-/*! \brief Enable or disable printing of extended timestamps while logging
+/*! Enable or disable printing of extended timestamps while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_timestamp Enable (1) or disable (0) timestamps
  *
@@ -581,7 +581,7 @@
 	target->print_ext_timestamp = print_timestamp;
 }
 
-/*! \brief Enable or disable printing of the filename while logging
+/*! Enable or disable printing of the filename while logging
  *  \param[in] target Log target to be affected
  *  \param[in] print_filename Enable (1) or disable (0) filenames
  */
@@ -590,7 +590,7 @@
 	target->print_filename = print_filename;
 }
 
-/*! \brief Enable or disable printing of the category name
+/*! Enable or disable printing of the category name
  *  \param[in] target Log target to be affected
  *  \param[in] print_catname Enable (1) or disable (0) filenames
  *
@@ -601,7 +601,7 @@
 	target->print_category = print_category;
 }
 
-/*! \brief Set the global log level for a given log target
+/*! Set the global log level for a given log target
  *  \param[in] target Log target to be affected
  *  \param[in] log_level New global log level
  */
@@ -610,7 +610,7 @@
 	target->loglevel = log_level;
 }
 
-/*! \brief Set a category filter on a given log target
+/*! Set a category filter on a given log target
  *  \param[in] target Log target to be affected
  *  \param[in] category Log category to be affected
  *  \param[in] enable whether to enable or disable the filter
@@ -635,7 +635,7 @@
 }
 #endif
 
-/*! \brief Create a new log target skeleton
+/*! Create a new log target skeleton
  *  \returns dynamically-allocated log target
  *  This funcition allocates a \ref log_target and initializes it
  *  with some default values.  The newly created target is not
@@ -679,7 +679,7 @@
 	return target;
 }
 
-/*! \brief Create the STDERR log target
+/*! Create the STDERR log target
  *  \returns dynamically-allocated \ref log_target for STDERR */
 struct log_target *log_target_create_stderr(void)
 {
@@ -701,7 +701,7 @@
 }
 
 #if (!EMBEDDED)
-/*! \brief Create a new file-based log target
+/*! Create a new file-based log target
  *  \param[in] fname File name of the new log file
  *  \returns Log target in case of success, NULL otherwise
  */
@@ -726,7 +726,7 @@
 }
 #endif
 
-/*! \brief Find a registered log target
+/*! Find a registered log target
  *  \param[in] type Log target type
  *  \param[in] fname File name
  *  \returns Log target (if found), NULL otherwise
@@ -747,7 +747,7 @@
 	return NULL;
 }
 
-/*! \brief Unregister, close and delete a log target
+/*! Unregister, close and delete a log target
  *  \param target[in] log target to unregister, close and delete */
 void log_target_destroy(struct log_target *target)
 {
@@ -772,7 +772,7 @@
 	talloc_free(target);
 }
 
-/*! \brief close and re-open a log file (for log file rotation)
+/*! close and re-open a log file (for log file rotation)
  *  \param[in] target log target to re-open
  *  \returns 0 in case of success; negative otherwise */
 int log_target_file_reopen(struct log_target *target)
@@ -788,7 +788,7 @@
 	return 0;
 }
 
-/*! \brief close and re-open all log files (for log file rotation)
+/*! close and re-open all log files (for log file rotation)
  *  \returns 0 in case of success; negative otherwise */
 int log_targets_reopen(void)
 {
@@ -809,7 +809,7 @@
 	return rc;
 }
 
-/*! \brief Generates the logging command string for VTY
+/*! Generates the logging command string for VTY
  *  \param[in] unused_info Deprecated parameter, no longer used!
  *  \returns vty command string for use by VTY command node
  */
@@ -889,7 +889,7 @@
 	return str;
 }
 
-/*! \brief Generates the logging command description for VTY
+/*! Generates the logging command description for VTY
  *  \param[in] unused_info Deprecated parameter, no longer used!
  *  \returns logging command description for use by VTY command node
  */
@@ -952,7 +952,7 @@
 	return str;
 }
 
-/*! \brief Initialize the Osmocom logging core
+/*! Initialize the Osmocom logging core
  *  \param[in] inf Information regarding logging categories
  *  \param[in] ctx \ref talloc context for logging allocations
  *  \returns 0 in case of success, negative in case of error
@@ -1000,7 +1000,7 @@
 	return 0;
 }
 
-/* \brief De-initialize the Osmocom logging core
+/* De-initialize the Osmocom logging core
  * This function destroys all targets and releases associated memory */
 void log_fini(void)
 {
@@ -1015,7 +1015,7 @@
 	tall_log_ctx = NULL;
 }
 
-/*! \brief Check whether a log entry will be generated.
+/*! Check whether a log entry will be generated.
  *  \returns != 0 if a log entry might get generated by at least one target */
 int log_check_level(int subsys, unsigned int level)
 {
diff --git a/src/logging_gsmtap.c b/src/logging_gsmtap.c
index 7358bf6..9e5884b 100644
--- a/src/logging_gsmtap.c
+++ b/src/logging_gsmtap.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file logging_gsmtap.c
- *  \brief libosmocore log output encapsulated in GSMTAP
+ *  libosmocore log output encapsulated in GSMTAP
  *
  *  Encapsulating the log output inside GSMTAP frames allows us to
  *  observer protocol traces (of Um, Abis, A or any other interface in
@@ -102,7 +102,7 @@
 	gsmtap_sendmsg(target->tgt_gsmtap.gsmtap_inst, msg);
 }
 
-/*! \brief Create a new logging target for GSMTAP logging
+/*! Create a new logging target for GSMTAP logging
  *  \param[in] ident string identifier
  *  \returns Log target in case of success, NULL in case of error
  */
diff --git a/src/logging_syslog.c b/src/logging_syslog.c
index 6fe3c71..a80a31e 100644
--- a/src/logging_syslog.c
+++ b/src/logging_syslog.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file logging_syslog.c
- *  \brief libosmocore logging output via syslog
+ *  libosmocore logging output via syslog
  */
 
 #include "../config.h"
@@ -65,7 +65,7 @@
 	syslog(logp2syslog_level(level), "%s", log);
 }
 
-/*! \brief Create a new logging target for syslog logging
+/*! Create a new logging target for syslog logging
  *  \param[in] ident syslog string identifier
  *  \param[in] option syslog options
  *  \param[in] facility syslog facility
diff --git a/src/loggingrb.c b/src/loggingrb.c
index 3fb38ca..64033fc 100644
--- a/src/loggingrb.c
+++ b/src/loggingrb.c
@@ -24,7 +24,7 @@
  */
 
 /*! \file loggingrb.c
- *  \brief libosmocore logging backend for a ring-buffer of last log messages
+ *  libosmocore logging backend for a ring-buffer of last log messages
  */
 
 #include <osmocom/core/strrb.h>
@@ -37,7 +37,7 @@
 	osmo_strrb_add(target->tgt_rb.rb, log);
 }
 
-/*! \brief Return the number of log strings in the osmo_strrb-backed target.
+/*! Return the number of log strings in the osmo_strrb-backed target.
  *  \param[in] target The target to search.
  *
  *  \return The number of log strings in the osmo_strrb-backed target.
@@ -47,7 +47,7 @@
 	return osmo_strrb_elements(target->tgt_rb.rb);
 }
 
-/*! \brief Return the capacity of the osmo_strrb-backed target.
+/*! Return the capacity of the osmo_strrb-backed target.
  *  \param[in] target The target to search.
  *
  * Note that this is the capacity (aka max number of messages).
@@ -60,7 +60,7 @@
 	return rb->size - 1;
 }
 
-/*! \brief Return the nth log entry in a target.
+/*! Return the nth log entry in a target.
  *  \param[in] target The target to search.
  *  \param[in] logindex The index of the log entry/error message.
  *
@@ -71,7 +71,7 @@
 	return osmo_strrb_get_nth(target->tgt_rb.rb, logindex);
 }
 
-/*! \brief Create a new logging target for ringbuffer-backed logging.
+/*! Create a new logging target for ringbuffer-backed logging.
  *  \param[in] size The capacity (number of messages) of the logging target.
  *  \returns A log target in case of success, NULL in case of error.
  */
diff --git a/src/macaddr.c b/src/macaddr.c
index e5db8cf..6a1588d 100644
--- a/src/macaddr.c
+++ b/src/macaddr.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file macaddr.c
- *  \brief MAC address utility routines
+ *  MAC address utility routines
  */
 
 #include "config.h"
@@ -35,7 +35,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-/*! \brief Parse a MAC address from human-readable notation
+/*! Parse a MAC address from human-readable notation
  *  This function parses an ethernet MAC address in the commonly-used
  *  hex/colon notation (00:00:00:00:00:00) and generates the binary
  *  representation from it.
@@ -70,7 +70,7 @@
 #include <net/if_dl.h>
 #include <net/if_types.h>
 
-/*! \brief Obtain the MAC address of a given network device
+/*! Obtain the MAC address of a given network device
  *  \param[out] mac_out pointer to caller-allocated buffer of 6 bytes
  *  \param[in] dev_name string name of the network device
  *  \returns 0 in case of success; negative otherwise
@@ -114,7 +114,7 @@
 #include <netinet/in.h>
 #include <netinet/ip.h>
 
-/*! \brief Obtain the MAC address of a given network device
+/*! Obtain the MAC address of a given network device
  *  \param[out] mac_out pointer to caller-allocated buffer of 6 bytes
  *  \param[in] dev_name string name of the network device
  *  \returns 0 in case of success; negative otherwise
diff --git a/src/msgb.c b/src/msgb.c
index 136ad88..bad98f4 100644
--- a/src/msgb.c
+++ b/src/msgb.c
@@ -20,7 +20,7 @@
 
 /*! \addtogroup msgb
  *  @{
- *  \brief libosmocore message buffers, inspired by Linux kernel skbuff
+ *  libosmocore message buffers, inspired by Linux kernel skbuff
  *
  *  Inspired by the 'struct skbuff' of the Linux kernel, we implement a
  *  'struct msgb' which we use for handling network
@@ -62,7 +62,7 @@
 
 void *tall_msgb_ctx = NULL;
 
-/*! \brief Allocate a new message buffer
+/*! Allocate a new message buffer
  * \param[in] size Length in octets, including headroom
  * \param[in] name Human-readable name to be associated with msgb
  * \returns dynamically-allocated \ref msgb
@@ -91,7 +91,7 @@
 	return msg;
 }
 
-/*! \brief Release given message buffer
+/*! Release given message buffer
  * \param[in] m Message buffer to be free'd
  */
 void msgb_free(struct msgb *m)
@@ -99,7 +99,7 @@
 	talloc_free(m);
 }
 
-/*! \brief Enqueue message buffer to tail of a queue
+/*! Enqueue message buffer to tail of a queue
  * \param[in] queue linked list header of queue
  * \param[in] msg message buffer to be added to the queue
  *
@@ -111,7 +111,7 @@
 	llist_add_tail(&msg->list, queue);
 }
 
-/*! \brief Dequeue message buffer from head of queue
+/*! Dequeue message buffer from head of queue
  * \param[in] queue linked list header of queue
  * \returns message buffer (if any) or NULL if queue empty
  *
@@ -134,7 +134,7 @@
 		return NULL;
 }
 
-/*! \brief Re-set all message buffer pointers
+/*! Re-set all message buffer pointers
  *  \param[in] msg message buffer that is to be resetted
  *
  * This will re-set the various internal pointers into the underlying
@@ -157,7 +157,7 @@
 	memset(&msg->cb, 0, sizeof(msg->cb));
 }
 
-/*! \brief get pointer to data section of message buffer
+/*! get pointer to data section of message buffer
  *  \param[in] msg message buffer
  *  \returns pointer to data section of message buffer
  */
@@ -166,7 +166,7 @@
 	return msg->data;
 }
 
-/*! \brief get length of message buffer
+/*! get length of message buffer
  *  \param[in] msg message buffer
  *  \returns length of data section in message buffer
  */
@@ -175,7 +175,7 @@
 	return msg->len;
 }
 
-/*! \brief Set the talloc context for \ref msgb_alloc
+/*! Set the talloc context for \ref msgb_alloc
  * Deprecated, use msgb_talloc_ctx_init() instead.
  *  \param[in] ctx talloc context to be used as root for msgb allocations
  */
@@ -184,7 +184,7 @@
 	tall_msgb_ctx = ctx;
 }
 
-/*! \brief Initialize a msgb talloc context for \ref msgb_alloc.
+/*! Initialize a msgb talloc context for \ref msgb_alloc.
  * Create a talloc context called "msgb". If \a pool_size is 0, create a named
  * const as msgb talloc context. If \a pool_size is nonzero, create a talloc
  * pool, possibly for faster msgb allocations (see talloc_pool()).
@@ -202,7 +202,7 @@
 	return tall_msgb_ctx;
 }
 
-/*! \brief Copy an msgb.
+/*! Copy an msgb.
  *
  *  This function allocates a new msgb, copies the data buffer of msg,
  *  and adjusts the pointers (incl l1h-l4h) accordingly. The cb part
@@ -239,7 +239,7 @@
 	return new_msg;
 }
 
-/*! \brief Resize an area within an msgb
+/*! Resize an area within an msgb
  *
  *  This resizes a sub area of the msgb data and adjusts the pointers (incl
  *  l1h-l4h) accordingly. The cb part is not updated. If the area is extended,
@@ -293,7 +293,7 @@
 }
 
 
-/*! \brief Return a (static) buffer containing a hexdump of the msg
+/*! Return a (static) buffer containing a hexdump of the msg
  * \param[in] msg message buffer
  * \returns a pointer to a static char array
  */
diff --git a/src/panic.c b/src/panic.c
index e233588..251fdad 100644
--- a/src/panic.c
+++ b/src/panic.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file panic.c
- *  \brief Routines for panic handling
+ *  Routines for panic handling
  */
 
 #include <osmocom/core/panic.h>
@@ -59,7 +59,7 @@
 #endif
 
 
-/*! \brief Terminate the current program with a panic
+/*! Terminate the current program with a panic
  *
  * You can call this function in case some severely unexpected situation
  * is detected and the program is supposed to terminate in a way that
@@ -87,7 +87,7 @@
 }
  
 
-/*! \brief Set the panic handler
+/*! Set the panic handler
  *  \param[in] h New panic handler function
  *
  *  This changes the panic handling function from the currently active
diff --git a/src/plugin.c b/src/plugin.c
index 71df88b..b6a5a48 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -25,7 +25,7 @@
  */
 
 /*! \file plugin.c
- *  \brief Routines for loading and managing shared library plug-ins.
+ *  Routines for loading and managing shared library plug-ins.
  */
 
 
@@ -41,7 +41,7 @@
 
 #include <osmocom/core/plugin.h>
 
-/*! \brief Load all plugins available in given directory
+/*! Load all plugins available in given directory
  *  \param[in] directory full path name of directory containing plug-ins
  *  \returns number of plugins loaded in case of success, negative in case of error
  */
diff --git a/src/prim.c b/src/prim.c
index 5851f6f..f39527f 100644
--- a/src/prim.c
+++ b/src/prim.c
@@ -1,7 +1,7 @@
 #include <osmocom/core/utils.h>
 #include <osmocom/core/prim.h>
 
-/*! \brief human-readable string mapping for
+/*! human-readable string mapping for
  *  \ref osmo_prim_operation */
 const struct value_string osmo_prim_op_names[5] = {
 	{ PRIM_OP_REQUEST,			"request" },
@@ -11,7 +11,7 @@
 	{ 0, NULL }
 };
 
-/*! \brief resolve the (fsm) event for a given primitive using a map
+/*! resolve the (fsm) event for a given primitive using a map
  *  \param[in] oph primitive header used as key for match
  *  \param[in] maps list of mappings from primitive to event
  *  \returns event determined by map; \ref OSMO_NO_EVENT if no match */
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index 47067fb..068d491 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup rate_ctr
  *  @{
- *  \brief conters about events and their event rates
+ *  conters about events and their event rates
  */
 
 /*! \file rate_ctr.c */
@@ -41,7 +41,7 @@
 
 static void *tall_rate_ctr_ctx;
 
-/*! \brief Allocate a new group of counters according to description
+/*! Allocate a new group of counters according to description
  *  \param[in] ctx \ref talloc context
  *  \param[in] desc Rate counter group description
  *  \param[in] idx Index of new counter group
@@ -71,20 +71,20 @@
 	return group;
 }
 
-/*! \brief Free the memory for the specified group of counters */
+/*! Free the memory for the specified group of counters */
 void rate_ctr_group_free(struct rate_ctr_group *grp)
 {
 	llist_del(&grp->list);
 	talloc_free(grp);
 }
 
-/*! \brief Add a number to the counter */
+/*! Add a number to the counter */
 void rate_ctr_add(struct rate_ctr *ctr, int inc)
 {
 	ctr->current += inc;
 }
 
-/*! \brief Return the counter difference since the last call to this function */
+/*! Return the counter difference since the last call to this function */
 int64_t rate_ctr_difference(struct rate_ctr *ctr)
 {
 	int64_t result = ctr->current - ctr->previous;
@@ -144,7 +144,7 @@
 	osmo_timer_schedule(&rate_ctr_timer, 1, 0);
 }
 
-/*! \brief Initialize the counter module */
+/*! Initialize the counter module */
 int rate_ctr_init(void *tall_ctx)
 {
 	tall_rate_ctr_ctx = tall_ctx;
@@ -154,7 +154,7 @@
 	return 0;
 }
 
-/*! \brief Search for counter group based on group name and index
+/*! Search for counter group based on group name and index
  *  \param[in] name Name of the counter group you're looking for
  *  \param[in] idx Index inside the counter group
  *  \returns \ref rate_ctr_group or NULL in case of error */
@@ -174,7 +174,7 @@
 	return NULL;
 }
 
-/*! \brief Search for counter based on group + name
+/*! Search for counter based on group + name
  *  \param[in] ctrg pointer to \ref rate_ctr_group
  *  \param[in] name name of counter inside group
  *  \returns \ref rate_ctr or NULL in caes of error
@@ -197,7 +197,7 @@
 	return NULL;
 }
 
-/*! \brief Iterate over each counter in group and call function
+/*! Iterate over each counter in group and call function
  *  \param[in] counter group over whose counter to iterate
  *  \param[in] handle_counter function pointer
  *  \param[in] data Data to hand transparently to \ref handle_counter
@@ -220,7 +220,7 @@
 	return rc;
 }
 
-/*! \brief Iterate over all counter groups
+/*! Iterate over all counter groups
  *  \param[in] handle_group function pointer of callback function
  *  \param[in] data Data to hand transparently to \ref handle_group
  *  \returns 0 on success; negative otherwise
diff --git a/src/select.c b/src/select.c
index bdd53b2..575fd77 100644
--- a/src/select.c
+++ b/src/select.c
@@ -36,7 +36,7 @@
 
 /*! \addtogroup select
  *  @{
- *  \brief select() loop abstraction
+ *  select() loop abstraction
  */
 
 /*! \file select.c */
@@ -46,7 +46,7 @@
 static int unregistered_count;
 
 
-/*! \brief Check if a file descriptor is already registered
+/*! Check if a file descriptor is already registered
  *  \param[in] fd osmocom file descriptor to be checked
  *  \returns true if registered; otherwise false
  */
@@ -62,7 +62,7 @@
 	return false;
 }
 
-/*! \brief Register a new file descriptor with select loop abstraction
+/*! Register a new file descriptor with select loop abstraction
  *  \param[in] fd osmocom file descriptor to be registered
  *  \returns 0 on success; negative in case of error
  */
@@ -104,7 +104,7 @@
 	return 0;
 }
 
-/*! \brief Unregister a file descriptor from select loop abstraction
+/*! Unregister a file descriptor from select loop abstraction
  *  \param[in] fd osmocom file descriptor to be unregistered
  */
 void osmo_fd_unregister(struct osmo_fd *fd)
@@ -116,7 +116,7 @@
 	llist_del(&fd->list);
 }
 
-/*! \brief Populate the fd_sets and return the highest fd number
+/*! Populate the fd_sets and return the highest fd number
  *  \param[in] _rset The readfds to populate
  *  \param[in] _wset The wrtiefds to populate
  *  \param[in] _eset The errorfds to populate
@@ -187,7 +187,7 @@
 	return work;
 }
 
-/*! \brief select main loop integration
+/*! select main loop integration
  *  \param[in] polling should we pollonly (1) or block on select (0)
  *  \returns 0 if no fd handled; 1 if fd handled; negative in case of error
  */
@@ -217,7 +217,7 @@
 	return osmo_fd_disp_fds(&readset, &writeset, &exceptset);
 }
 
-/*! \brief find an osmo_fd based on the integer fd
+/*! find an osmo_fd based on the integer fd
  *  \param[in] fd file descriptor to use as search key
  *  \returns \ref osmo_fd for \ref fd; NULL in case it doesn't exist */
 struct osmo_fd *osmo_fd_get_by_fd(int fd)
diff --git a/src/sercomm.c b/src/sercomm.c
index 33d4853..d02b39e 100644
--- a/src/sercomm.c
+++ b/src/sercomm.c
@@ -22,7 +22,7 @@
 
 /*! \addtogroup sercomm
  *  @{
- *  \brief Serial communications layer, based on HDLC
+ *  Serial communications layer, based on HDLC
  */
 
 /*! \file sercomm.c
@@ -41,9 +41,9 @@
 
 #ifndef EMBEDDED
 # define DEFAULT_RX_MSG_SIZE	2048
-/*! \brief Protect against IRQ context */
+/*! Protect against IRQ context */
 void sercomm_drv_lock(unsigned long __attribute__((unused)) *flags) {}
-/*! \brief Release protection against IRQ context */
+/*! Release protection against IRQ context */
 void sercomm_drv_unlock(unsigned long __attribute__((unused)) *flags) {}
 #else
 # define DEFAULT_RX_MSG_SIZE	256
@@ -71,7 +71,7 @@
 	RX_ST_ESCAPE,
 };
 
-/*! \brief Initialize an Osmocom sercomm instance
+/*! Initialize an Osmocom sercomm instance
  *  \param sercomm Caller-allocated sercomm instance to be initialized
  *
  *  This function initializes the sercomm instance, including the
@@ -92,7 +92,7 @@
 	osmo_sercomm_register_rx_cb(sercomm, SC_DLCI_ECHO, &osmo_sercomm_sendmsg);
 }
 
-/*! \brief Determine if a given Osmocom sercomm instance has been initialized
+/*! Determine if a given Osmocom sercomm instance has been initialized
  *  \param[in] sercomm Osmocom sercomm instance to be checked
  *  \returns 1 in case \a sercomm was previously initialized; 0 otherwise */
 int osmo_sercomm_initialized(struct osmo_sercomm_inst *sercomm)
@@ -100,7 +100,7 @@
 	return sercomm->initialized;
 }
 
-/*! \brief User interface for transmitting messages for a given DLCI
+/*! User interface for transmitting messages for a given DLCI
  *  \param[in] sercomm Osmocom sercomm instance through which to transmit
  *  \param[in] dlci DLCI through whcih to transmit \a msg
  *  \param[in] msg Message buffer to be transmitted via \a dlci on \a *  sercomm
@@ -125,7 +125,7 @@
 	sercomm_drv_start_tx(sercomm);
 }
 
-/*! \brief How deep is the Tx queue for a given DLCI?
+/*! How deep is the Tx queue for a given DLCI?
  *  \param[n] sercomm Osmocom sercomm instance on which to operate
  *  \param[in] dlci DLCI whose queue depthy is to be determined
  *  \returns number of elements in the per-DLCI transmit queue */
@@ -141,7 +141,7 @@
 	return num;
 }
 
-/*! \brief wait until everything has been transmitted, then grab the lock and
+/*! wait until everything has been transmitted, then grab the lock and
  *	   change the baud rate as requested
  *  \param[in] sercomm Osmocom sercomm instance
  *  \param[in] bdrt New UART Baud Rate
@@ -178,7 +178,7 @@
 	return -1;
 }
 
-/*! \brief fetch one octet of to-be-transmitted serial data
+/*! fetch one octet of to-be-transmitted serial data
  *  \param[in] sercomm Sercomm Instance from which to fetch pending data
  *  \param[out] ch pointer to caller-allocaed output memory
  *  \returns 1 in case of succss; 0 if no data available; negative on error */
@@ -243,7 +243,7 @@
 	return 1;
 }
 
-/*! \brief Register a handler for a given DLCI
+/*! Register a handler for a given DLCI
  *  \param sercomm Sercomm Instance in which caller wishes to register
  *  \param[in] dlci Data Ling Connection Identifier to register
  *  \param[in] cb Callback function for \a dlci
@@ -271,7 +271,7 @@
 	sercomm->rx.dlci_handler[dlci](sercomm, dlci, msg);
 }
 
-/*! \brief the driver has received one byte, pass it into sercomm layer
+/*! the driver has received one byte, pass it into sercomm layer
  *  \param[in] sercomm Sercomm Instance for which a byte was received
  *  \param[in] ch byte that was received from line for said instance
  *  \returns 1 on success; 0 on unrecognized char; negative on error */
diff --git a/src/serial.c b/src/serial.c
index 51a32bb..b8c347b 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -24,7 +24,7 @@
 
 /*! \addtogroup serial
  *  @{
- *  \brief Osmocom serial port helpers
+ *  Osmocom serial port helpers
  */
 
 /*! \file serial.c */
@@ -50,7 +50,7 @@
 # define dbg_perror(x) do { } while (0)
 #endif
 
-/*! \brief Open serial device and does base init
+/*! Open serial device and does base init
  *  \param[in] dev Path to the device node to open
  *  \param[in] baudrate Baudrate constant (speed_t: B9600, B...)
  *  \returns >=0 file descriptor in case of success or negative errno.
@@ -149,7 +149,7 @@
 	return 0;
 }
 
-/*! \brief Change current baudrate
+/*! Change current baudrate
  *  \param[in] fd File descriptor of the open device
  *  \param[in] baudrate Baudrate constant (speed_t: B9600, B...)
  *  \returns 0 for success or negative errno.
@@ -161,7 +161,7 @@
 	return _osmo_serial_set_baudrate(fd, baudrate);
 }
 
-/*! \brief Change current baudrate to a custom one using OS specific method
+/*! Change current baudrate to a custom one using OS specific method
  *  \param[in] fd File descriptor of the open device
  *  \param[in] baudrate Baudrate as integer
  *  \returns 0 for success or negative errno.
@@ -210,7 +210,7 @@
 #endif
 }
 
-/*! \brief Clear any custom baudrate
+/*! Clear any custom baudrate
  *  \param[in] fd File descriptor of the open device
  *  \returns 0 for success or negative errno.
  *
diff --git a/src/signal.c b/src/signal.c
index 1d11617..301b021 100644
--- a/src/signal.c
+++ b/src/signal.c
@@ -27,7 +27,7 @@
 
 /*! \addtogroup signal
  *  @{
- *  \brief Generic signalling/notification infrastructure
+ *  Generic signalling/notification infrastructure
  */
 
 /*! \file signal.c */
@@ -44,7 +44,7 @@
 };
 
 
-/*! \brief Register a new signal handler
+/*! Register a new signal handler
  *  \param[in] subsys Subsystem number
  *  \param[in] cbfn Callback function
  *  \param[in] data Data passed through to callback
@@ -72,7 +72,7 @@
 	return 0;
 }
 
-/*! \brief Unregister signal handler
+/*! Unregister signal handler
  *  \param[in] subsys Subsystem number
  *  \param[in] cbfn Callback function
  *  \param[in] data Data passed through to callback
@@ -92,7 +92,7 @@
 	}
 }
 
-/*! \brief dispatch (deliver) a new signal to all registered handlers
+/*! dispatch (deliver) a new signal to all registered handlers
  *  \param[in] subsys Subsystem number
  *  \param[in] signal Signal number,
  *  \param[in] signal_data Data to be passed along to handlers
diff --git a/src/sim/core.c b/src/sim/core.c
index 1ce2fed..15a1563 100644
--- a/src/sim/core.c
+++ b/src/sim/core.c
@@ -210,7 +210,7 @@
 }
 
 
-/*! \brief Generate an APDU message and initialize APDU command header
+/*! Generate an APDU message and initialize APDU command header
  *  \param[in] cla CLASS byte
  *  \param[in] ins INSTRUCTION byte
  *  \param[in] p1 Parameter 1 byte
diff --git a/src/socket.c b/src/socket.c
index 6fa05a8..f033912 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -23,7 +23,7 @@
 
 /*! \addtogroup socket
  *  @{
- *  \brief Osmocom socket convenience functions
+ *  Osmocom socket convenience functions
  */
 
 /*! \file socket.c */
@@ -104,7 +104,7 @@
 }
 
 
-/*! \brief Initialize a socket (including bind and/or connect)
+/*! Initialize a socket (including bind and/or connect)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -232,7 +232,7 @@
 }
 
 
-/*! \brief Initialize a socket (including bind/connect)
+/*! Initialize a socket (including bind/connect)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -317,7 +317,7 @@
 	return sfd;
 }
 
-/*! \brief fill \ref osmo_fd for a give sfd
+/*! fill \ref osmo_fd for a give sfd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] sfd socket file descriptor
  *  \returns socket fd on success; negative on error
@@ -343,7 +343,7 @@
 	return sfd;
 }
 
-/*! \brief Initialize a socket and fill \ref osmo_fd
+/*! Initialize a socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
@@ -362,7 +362,7 @@
 	return osmo_fd_init_ofd(ofd, osmo_sock_init(family, type, proto, host, port, flags));
 }
 
-/*! \brief Initialize a socket and fill \ref osmo_fd
+/*! Initialize a socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
@@ -385,7 +385,7 @@
 					local_port, remote_host, remote_port, flags));
 }
 
-/*! \brief Initialize a socket and fill \ref sockaddr
+/*! Initialize a socket and fill \ref sockaddr
  *  \param[out] ss socket address (will be filled in)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -459,7 +459,7 @@
 	return 0;
 }
 
-/*! \brief Determine if the given address is a local address
+/*! Determine if the given address is a local address
  *  \param[in] addr Socket Address
  *  \param[in] addrlen Length of socket address in bytes
  *  \returns 1 if address is local, 0 otherwise.
@@ -484,7 +484,7 @@
 	return 0;
 }
 
-/*! \brief Initialize a unix domain socket (including bind/connect)
+/*! Initialize a unix domain socket (including bind/connect)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
  *  \param[in] socket_path path to identify the socket
@@ -557,7 +557,7 @@
 	return -1;
 }
 
-/*! \brief Initialize a unix domain socket and fill \ref osmo_fd
+/*! Initialize a unix domain socket and fill \ref osmo_fd
  *  \param[out] ofd file descriptor (will be filled in)
  *  \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
  *  \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP
@@ -574,7 +574,7 @@
 	return osmo_fd_init_ofd(ofd, osmo_sock_unix_init(type, proto, socket_path, flags));
 }
 
-/*! \brief Get address/port information on soocket in dyn-alloc string
+/*! Get address/port information on soocket in dyn-alloc string
  *  \param[in] ctx talloc context from which to allocate string buffer
  *  \param[in] fd file descriptor of socket
  *  \returns string identifying the connection of this socket
diff --git a/src/stat_item.c b/src/stat_item.c
index fcd6781..3b67ba0 100644
--- a/src/stat_item.c
+++ b/src/stat_item.c
@@ -42,7 +42,7 @@
 
 static void *tall_stat_item_ctx;
 
-/*! \brief Allocate a new group of counters according to description
+/*! Allocate a new group of counters according to description
  *  \param[in] ctx \ref talloc context
  *  \param[in] desc Statistics item group description
  *  \param[in] idx Index of new stat item group
@@ -114,7 +114,7 @@
 	return group;
 }
 
-/*! \brief Free the memory for the specified group of counters */
+/*! Free the memory for the specified group of counters */
 void osmo_stat_item_group_free(struct osmo_stat_item_group *grp)
 {
 	llist_del(&grp->list);
@@ -172,7 +172,7 @@
 	return idx_delta;
 }
 
-/*! \brief Skip all values of this item and update idx accordingly */
+/*! Skip all values of this item and update idx accordingly */
 int osmo_stat_item_discard(const struct osmo_stat_item *item, int32_t *idx)
 {
 	int discarded = item->values[item->last_offs].id + 1 - *idx;
@@ -181,7 +181,7 @@
 	return discarded;
 }
 
-/*! \brief Skip all values of all items and update idx accordingly */
+/*! Skip all values of all items and update idx accordingly */
 int osmo_stat_item_discard_all(int32_t *idx)
 {
 	int discarded = global_value_id + 1 - *idx;
@@ -190,7 +190,7 @@
 	return discarded;
 }
 
-/*! \brief Initialize the stat item module */
+/*! Initialize the stat item module */
 int osmo_stat_item_init(void *tall_ctx)
 {
 	tall_stat_item_ctx = tall_ctx;
@@ -198,7 +198,7 @@
 	return 0;
 }
 
-/*! \brief Search for item group based on group name and index */
+/*! Search for item group based on group name and index */
 struct osmo_stat_item_group *osmo_stat_item_get_group_by_name_idx(
 	const char *name, const unsigned int idx)
 {
@@ -215,7 +215,7 @@
 	return NULL;
 }
 
-/*! \brief Search for item group based on group name */
+/*! Search for item group based on group name */
 const struct osmo_stat_item *osmo_stat_item_get_by_name(
 	const struct osmo_stat_item_group *statg, const char *name)
 {
diff --git a/src/strrb.c b/src/strrb.c
index 69c4dda..0c56be2 100644
--- a/src/strrb.c
+++ b/src/strrb.c
@@ -26,7 +26,7 @@
  */
 
 /*! \file strrb.c
- *  \brief Lossy string ringbuffer for logging; keeps newest messages.
+ *  Lossy string ringbuffer for logging; keeps newest messages.
  */
 
 #include <stdio.h>
@@ -49,7 +49,7 @@
  * is the case unless this is the first time the ringbuffer becomes full).
 */
 
-/*! \brief Create an empty, initialized osmo_strrb.
+/*! Create an empty, initialized osmo_strrb.
  *  \param[in] ctx The talloc memory context which should own this.
  *  \param[in] rb_size The number of message slots the osmo_strrb can hold.
  *  \returns A struct osmo_strrb* on success, NULL in case of error.
@@ -87,7 +87,7 @@
 	return NULL;
 }
 
-/*! \brief Check if an osmo_strrb is empty.
+/*! Check if an osmo_strrb is empty.
  *  \param[in] rb The osmo_strrb to check.
  *  \returns True if the osmo_strrb is empty, false otherwise.
  */
@@ -96,7 +96,7 @@
 	return rb->end == rb->start;
 }
 
-/*! \brief Return a pointer to the Nth string in the osmo_strrb.
+/*! Return a pointer to the Nth string in the osmo_strrb.
  * \param[in] rb The osmo_strrb to search.
  * \param[in] string_index The index sought (N), zero-indexed.
  *
@@ -130,7 +130,7 @@
 	return (bufi < rb->end) || (bufi >= rb->start);
 }
 
-/*! \brief Count the number of log messages in an osmo_strrb.
+/*! Count the number of log messages in an osmo_strrb.
  *  \param[in] rb The osmo_strrb to count the elements of.
  *
  *  \returns The number of log messages in the osmo_strrb.
@@ -143,7 +143,7 @@
 	return rb->end - rb->start;
 }
 
-/*! \brief Add a string to the osmo_strrb.
+/*! Add a string to the osmo_strrb.
  * \param[in] rb The osmo_strrb to add to.
  * \param[in] data The string to add.
  *
diff --git a/src/timer.c b/src/timer.c
index 72176b8..e18195a 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -26,7 +26,7 @@
 
 /*! \addtogroup timer
  *  @{
- *  \brief Osmocom timer abstraction; modelled after linux kernel timers
+ *  Osmocom timer abstraction; modelled after linux kernel timers
  */
 
 /*! \file timer.c */
@@ -65,7 +65,7 @@
         rb_insert_color(&timer->node, &timer_root);
 }
 
-/*! \brief set up timer callback and data
+/*! set up timer callback and data
  *  \param[in] timer the timer that should be added
  *  \param[in] callback function to be called when timer expires
  *  \param[in] pointer to data that passed to the callback function
@@ -77,7 +77,7 @@
 	timer->data	= data;
 }
 
-/*! \brief add a new timer to the timer management
+/*! add a new timer to the timer management
  *  \param[in] timer the timer that should be added
  */
 void osmo_timer_add(struct osmo_timer_list *timer)
@@ -88,7 +88,7 @@
 	__add_timer(timer);
 }
 
-/*! \brief schedule a timer at a given future relative time
+/*! schedule a timer at a given future relative time
  *  \param[in] timer the to-be-added timer
  *  \param[in] seconds number of seconds from now
  *  \param[in] microseconds number of microseconds from now
@@ -110,7 +110,7 @@
 	osmo_timer_add(timer);
 }
 
-/*! \brief delete a timer from timer management
+/*! delete a timer from timer management
  *  \param[in] timer the to-be-deleted timer
  *
  * This function can be used to delete a previously added/scheduled
@@ -127,7 +127,7 @@
 	}
 }
 
-/*! \brief check if given timer is still pending
+/*! check if given timer is still pending
  *  \param[in] timer the to-be-checked timer
  *  \return 1 if pending, 0 otherwise
  *
@@ -139,7 +139,7 @@
 	return timer->active;
 }
 
-/*! \brief compute the remaining time of a timer
+/*! compute the remaining time of a timer
  *  \param[in] timer the to-be-checked timer
  *  \param[in] now the current time (NULL if not known)
  *  \param[out] remaining remaining time until timer fires
@@ -167,7 +167,7 @@
 	return 0;
 }
 
-/*! \brief Determine time between now and the nearest timer
+/*! Determine time between now and the nearest timer
  *  \returns pointer to timeval of nearest timer, NULL if there is none
  *
  * if we have a nearest time return the delta between the current
@@ -198,7 +198,7 @@
 	}
 }
 
-/*! \brief Find the nearest time and update nearest_p */
+/*! Find the nearest time and update nearest_p */
 void osmo_timers_prepare(void)
 {
 	struct rb_node *node;
@@ -216,7 +216,7 @@
 	}
 }
 
-/*! \brief fire all timers... and remove them */
+/*! fire all timers... and remove them */
 int osmo_timers_update(void)
 {
 	struct timeval current_time;
@@ -261,7 +261,7 @@
 	return work;
 }
 
-/*! \brief Check how many timers we have in the system
+/*! Check how many timers we have in the system
  *  \returns number of \ref osmo_timer_list registered */
 int osmo_timers_check(void)
 {
diff --git a/src/timer_gettimeofday.c b/src/timer_gettimeofday.c
index 3573051..3a2ae9a 100644
--- a/src/timer_gettimeofday.c
+++ b/src/timer_gettimeofday.c
@@ -34,7 +34,7 @@
 bool osmo_gettimeofday_override = false;
 struct timeval osmo_gettimeofday_override_time = { 23, 424242 };
 
-/*! \brief shim around gettimeofday to be able to set the time manually.
+/*! shim around gettimeofday to be able to set the time manually.
  * To override, set osmo_gettimeofday_override == true and set the desired
  * current time in osmo_gettimeofday_override_time. */
 int osmo_gettimeofday(struct timeval *tv, struct timezone *tz)
@@ -47,7 +47,7 @@
 	return gettimeofday(tv, tz);
 }
 
-/*! \brief convenience function to advance the fake time.
+/*! convenience function to advance the fake time.
  * Add the given values to osmo_gettimeofday_override_time. */
 void osmo_gettimeofday_override_add(time_t secs, suseconds_t usecs)
 {
diff --git a/src/utils.c b/src/utils.c
index e7c6bcf..2bd4c19 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -33,14 +33,14 @@
 
 /*! \addtogroup utils
  * @{
- * \brief various utility routines
+ * various utility routines
  */
 
 /*! \file utils.c */
 
 static char namebuf[255];
 
-/*! \brief get human-readable string for given value
+/*! get human-readable string for given value
  *  \param[in] vs Array of value_string tuples
  *  \param[in] val Value to be converted
  *  \returns pointer to human-readable string
@@ -60,7 +60,7 @@
 	return namebuf;
 }
 
-/*! \brief get human-readable string or NULL for given value
+/*! get human-readable string or NULL for given value
  *  \param[in] vs Array of value_string tuples
  *  \param[in] val Value to be converted
  *  \returns pointer to human-readable string or NULL if val is not found
@@ -80,7 +80,7 @@
 	return NULL;
 }
 
-/*! \brief get numeric value for given human-readable string
+/*! get numeric value for given human-readable string
  *  \param[in] vs Array of value_string tuples
  *  \param[in] str human-readable string
  *  \returns numeric value (>0) or negative numer in case of error
@@ -98,7 +98,7 @@
 	return -EINVAL;
 }
 
-/*! \brief Convert BCD-encoded digit into printable character
+/*! Convert BCD-encoded digit into printable character
  *  \param[in] bcd A single BCD-encoded digit
  *  \returns single printable character
  */
@@ -110,7 +110,7 @@
 		return 'A' + (bcd - 0xa);
 }
 
-/*! \brief Convert number in ASCII to BCD value
+/*! Convert number in ASCII to BCD value
  *  \param[in] c ASCII character
  *  \returns BCD encoded value of character
  */
@@ -119,7 +119,7 @@
 	return c - 0x30;
 }
 
-/*! \brief Parse a string containing hexadecimal digits
+/*! Parse a string containing hexadecimal digits
  *  \param[in] str string containing ASCII encoded hexadecimal digits
  *  \param[out] b output buffer
  *  \param[in] max_len maximum space in output buffer
@@ -194,7 +194,7 @@
 	return hexd_buff;
 }
 
-/*! \brief Convert a sequence of unpacked bits to ASCII string
+/*! Convert a sequence of unpacked bits to ASCII string
  * \param[in] bits A sequence of unpacked bits
  * \param[in] len Length of bits
  */
@@ -228,7 +228,7 @@
 	return hexd_buff;
 }
 
-/*! \brief Convert binary sequence to hexadecimal ASCII string
+/*! Convert binary sequence to hexadecimal ASCII string
  *  \param[in] buf pointer to sequence of bytes
  *  \param[in] len length of buf in number of bytes
  *  \returns pointer to zero-terminated string
@@ -241,7 +241,7 @@
 	return _osmo_hexdump(buf, len, " ");
 }
 
-/*! \brief Convert binary sequence to hexadecimal ASCII string
+/*! Convert binary sequence to hexadecimal ASCII string
  *  \param[in] buf pointer to sequence of bytes
  *  \param[in] len length of buf in number of bytes
  *  \returns pointer to zero-terminated string
@@ -265,7 +265,7 @@
 #include "../config.h"
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
-/*! \brief Convert an entire string to lower case
+/*! Convert an entire string to lower case
  *  \param[out] out output string, caller-allocated
  *  \param[in] in input string
  */
@@ -278,7 +278,7 @@
 	out[strlen(in)] = '\0';
 }
 
-/*! \brief Convert an entire string to upper case
+/*! Convert an entire string to upper case
  *  \param[out] out output string, caller-allocated
  *  \param[in] in input string
  */
@@ -292,7 +292,7 @@
 }
 #endif /* HAVE_CTYPE_H */
 
-/*! \brief Wishful thinking to generate a constant time compare
+/*! Wishful thinking to generate a constant time compare
  *  \param[in] exp Expected data
  *  \param[in] rel Comparison value
  *  \param[in] count Number of bytes to compare
@@ -313,7 +313,7 @@
 	return x? 1 : 0;
 }
 
-/*! \brief Generic retrieval of 1..8 bytes as big-endian uint64_t
+/*! Generic retrieval of 1..8 bytes as big-endian uint64_t
  *  \param[in] data Input data as byte-array
  *  \param[in] data_len Length of \a data in octets
  *  \returns uint64_t of \a data interpreted as big-endian
@@ -337,7 +337,7 @@
 	return value;
 }
 
-/*! \brief Generic big-endian encoding of big endian number up to 64bit
+/*! Generic big-endian encoding of big endian number up to 64bit
  *  \param[in] value unsigned integer value to be stored
  *  \param[in] data_len number of octets 
  *  \returns static buffer containing big-endian stored value
@@ -353,7 +353,7 @@
 	return buf;
 }
 
-/*! \brief Copy a C-string into a sized buffer
+/*! Copy a C-string into a sized buffer
  *  \param[in] src source string
  *  \param[out] dst destination string
  *  \param[in] siz size of the \a dst buffer
diff --git a/src/vty/command.c b/src/vty/command.c
index 0168462..a0824d3 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup command
  *  @{
- *  \brief VTY command handling
+ *  VTY command handling
  */
 /*! \file command.c */
 
@@ -88,7 +88,7 @@
 /* Default motd string. */
 const char *default_motd = "";
 
-/*! \brief print the version (and optionally copyright) information
+/*! print the version (and optionally copyright) information
  *
  * This is called from main when a daemon is invoked with -v or --version. */
 void print_version(int print_copyright)
@@ -123,7 +123,7 @@
 	return str;
 }
 
-/*! \brief Install top node of command vector. */
+/*! Install top node of command vector. */
 void install_node(struct cmd_node *node, int (*func) (struct vty *))
 {
 	vector_set_index(cmdvec, node->node, node);
@@ -160,7 +160,7 @@
 		return vty->node > CONFIG_NODE;
 }
 
-/*! \brief Sort each node's command element according to command string. */
+/*! Sort each node's command element according to command string. */
 void sort_node(void)
 {
 	unsigned int i, j;
@@ -240,7 +240,7 @@
 	}
 }
 
-/*! \brief Free allocated string vector. */
+/*! Free allocated string vector. */
 void cmd_free_strvec(vector v)
 {
 	unsigned int i;
@@ -256,7 +256,7 @@
 	vector_free(v);
 }
 
-/*! \brief Fetch next description.  Used in \ref cmd_make_descvec(). */
+/*! Fetch next description.  Used in \ref cmd_make_descvec(). */
 static char *cmd_desc_str(const char **string)
 {
 	const char *cp, *start;
@@ -291,7 +291,7 @@
 	return token;
 }
 
-/*! \brief New string vector. */
+/*! New string vector. */
 static vector cmd_make_descvec(const char *string, const char *descstr)
 {
 	int multiple = 0;
@@ -394,7 +394,7 @@
 	return size;
 }
 
-/*! \brief Return prompt character of specified node. */
+/*! Return prompt character of specified node. */
 const char *cmd_prompt(enum node_type node)
 {
 	struct cmd_node *cnode;
@@ -404,7 +404,7 @@
 }
 
 /*!
- * \brief escape all special asciidoc symbols
+ * escape all special asciidoc symbols
  * \param unsafe string
  * \return a new talloc char *
  */
@@ -595,7 +595,7 @@
 	return 0;
 }
 
-/* \brief Check if a command with given string exists at given node */
+/* Check if a command with given string exists at given node */
 static int check_element_exists(struct cmd_node *cnode, const char *cmdstring)
 {
 	int i;
@@ -611,7 +611,7 @@
 	return 0;
 }
 
-/*! \brief Install a command into a node
+/*! Install a command into a node
  *  \param[in] ntype Node Type
  *  \param[cmd] element to be installed
  */
@@ -3406,7 +3406,7 @@
 }
 
 /**
- * \brief Write the current running config to a given file
+ * Write the current running config to a given file
  * \param[in] vty the vty of the code
  * \param[in] filename where to store the file
  * \return 0 in case of success.
@@ -3426,7 +3426,7 @@
 }
 
 /**
- * \brief Save the current state to the config file
+ * Save the current state to the config file
  * \return 0 in case of success.
  *
  * If the filename already exists create a filename.sav
diff --git a/src/vty/fsm_vty.c b/src/vty/fsm_vty.c
index 3824fe8..acc8ca6 100644
--- a/src/vty/fsm_vty.c
+++ b/src/vty/fsm_vty.c
@@ -35,7 +35,7 @@
 
 /*! \addtogroup fsm
  *  @{
- *  \brief VTY interface for Osmocom FSM
+ *  VTY interface for Osmocom FSM
  *
  *  This is code implementing generic VTY access to Osmocom FSMs from
  *  libosmocore.  This means that any application can expose all state
@@ -48,7 +48,7 @@
  * consumption. */
 extern struct llist_head osmo_g_fsms;
 
-/*! \brief Print information about a FSM [class] to the given VTY
+/*! Print information about a FSM [class] to the given VTY
  *  \param vty The VTY to which to print
  *  \param[in] fsm The FSM class to print
  */
@@ -74,7 +74,7 @@
 	}
 }
 
-/*! \brief Print a FSM instance to the given VTY
+/*! Print a FSM instance to the given VTY
  *  \param vty The VTY to which to print
  *  \param[in] fsmi The FSM instance to print
  */
@@ -174,7 +174,7 @@
 	return CMD_SUCCESS;
 }
 
-/*! \brief Install VTY commands for FSM introspection
+/*! Install VTY commands for FSM introspection
  *  This installs a couple of VTY commands for introspection of FSM
  *  classes as well as FSM instances. Call this once from your
  *  application if you want to support those commands. */
diff --git a/src/vty/logging_vty.c b/src/vty/logging_vty.c
index 8c8a323..4cb1379 100644
--- a/src/vty/logging_vty.c
+++ b/src/vty/logging_vty.c
@@ -41,7 +41,7 @@
 
 /*! \addtogroup logging
  *  @{
- *  \brief Configuration of logging from VTY
+ *  Configuration of logging from VTY
  *
  *  This module implements functions that permit configuration of
  *  the libosmocore logging framework from VTY commands.  This applies
diff --git a/src/vty/stats_vty.c b/src/vty/stats_vty.c
index af69289..0557820 100644
--- a/src/vty/stats_vty.c
+++ b/src/vty/stats_vty.c
@@ -43,7 +43,7 @@
 
 /*! \addtogroup stats
  *  @{
- *  \brief VTY interface for statsd / statistic items
+ *  VTY interface for statsd / statistic items
  */
 
 /* containing version info */
@@ -576,7 +576,7 @@
 	return 1;
 }
 
-/*! \brief Add stats related commands to the VTY
+/*! Add stats related commands to the VTY
  *  Call this once during your application initialization if you would
  *  like to have stats VTY commands enabled.
  */
diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c
index d53881a..d59516c 100644
--- a/src/vty/telnet_interface.c
+++ b/src/vty/telnet_interface.c
@@ -38,7 +38,7 @@
 
 /*! \addtogroup telnet_interface
  *  @{
- *  \brief Telnet interface towards Osmocom VTY
+ *  Telnet interface towards Osmocom VTY
  *
  *  This module contains the code implementing a telnet server for VTY
  *  access.  This telnet server gets linked into each libosmovty-using
@@ -61,7 +61,7 @@
 	.priv_nr    = 0,
 };
 
-/*! \brief Initialize telnet based VTY interface listening to 127.0.0.1
+/*! Initialize telnet based VTY interface listening to 127.0.0.1
  *  \param[in] tall_ctx \ref talloc context
  *  \param[in] priv private data to be passed to callback
  *  \param[in] port UDP port number
@@ -71,7 +71,7 @@
 	return telnet_init_dynif(tall_ctx, priv, "127.0.0.1", port);
 }
 
-/*! \brief Initialize telnet based VTY interface
+/*! Initialize telnet based VTY interface
  *  \param[in] tall_ctx \ref talloc context
  *  \param[in] priv private data to be passed to callback
  *  \param[in] ip IP to listen to ('::1' for localhost, '::0' for all, ...)
@@ -104,7 +104,7 @@
 
 extern struct host host;
 
-/*! \brief close a telnet connection */
+/*! close a telnet connection */
 int telnet_close_client(struct osmo_fd *fd)
 {
 	struct telnet_connection *conn = (struct telnet_connection*)fd->data;
@@ -182,7 +182,7 @@
 	return 0;
 }
 
-/*! \brief callback from core VTY code about VTY related events */
+/*! callback from core VTY code about VTY related events */
 void vty_event(enum event event, int sock, struct vty *vty)
 {
 	struct vty_signal_data sig_data = { 0, };
diff --git a/src/vty/utils.c b/src/vty/utils.c
index 6772593..267d76e 100644
--- a/src/vty/utils.c
+++ b/src/vty/utils.c
@@ -67,7 +67,7 @@
 	return 0;
 }
 
-/*! \brief print a rate counter group to given VTY
+/*! print a rate counter group to given VTY
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] ctrg Rate counter group to be printed
@@ -126,7 +126,7 @@
 	return 0;
 }
 
-/*! \brief print a stat item group to given VTY
+/*! print a stat item group to given VTY
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] statg Stat item group to be printed
@@ -200,7 +200,7 @@
 	vty_out_statistics_partial(vty, prefix, INT_MAX);
 }
 
-/*! \brief Generate a VTY command string from value_string */
+/*! Generate a VTY command string from value_string */
 char *vty_cmd_string_from_valstr(void *ctx, const struct value_string *vals,
 				 const char *prefix, const char *sep,
 				 const char *end, int do_lower)
diff --git a/src/vty/vector.c b/src/vty/vector.c
index b95e15c..c21bca7 100644
--- a/src/vty/vector.c
+++ b/src/vty/vector.c
@@ -29,7 +29,7 @@
 
 /*! \addtogroup vector
  *  @{
- *  \brief Generic vector routines, used by VTY internally
+ *  Generic vector routines, used by VTY internally
  */
 
 void *tall_vty_vec_ctx;
diff --git a/src/vty/vty.c b/src/vty/vty.c
index 2ec9538..6e60eb7 100644
--- a/src/vty/vty.c
+++ b/src/vty/vty.c
@@ -103,7 +103,7 @@
 	memset(vty->buf, 0, vty->max);
 }
 
-/*! \brief Allocate a new vty interface structure */
+/*! Allocate a new vty interface structure */
 struct vty *vty_new(void)
 {
 	struct vty *new = talloc_zero(tall_vty_ctx, struct vty);
@@ -196,7 +196,7 @@
 	}
 }
 
-/*! \brief Close a given vty interface. */
+/*! Close a given vty interface. */
 void vty_close(struct vty *vty)
 {
 	int i;
@@ -237,14 +237,14 @@
 	talloc_free(vty);
 }
 
-/*! \brief Return if this VTY is a shell or not */
+/*! Return if this VTY is a shell or not */
 int vty_shell(struct vty *vty)
 {
 	return vty->type == VTY_SHELL ? 1 : 0;
 }
 
 
-/*! \brief VTY standard output function
+/*! VTY standard output function
  *  \param[in] vty VTY to which we should print
  *  \param[in] format variable-length format string
  */
@@ -304,7 +304,7 @@
 	return len;
 }
 
-/*! \brief print a newline on the given VTY */
+/*! print a newline on the given VTY */
 int vty_out_newline(struct vty *vty)
 {
 	const char *p = vty_newline(vty);
@@ -312,19 +312,19 @@
 	return 0;
 }
 
-/*! \brief return the current index of a given VTY */
+/*! return the current index of a given VTY */
 void *vty_current_index(struct vty *vty)
 {
 	return vty->index;
 }
 
-/*! \brief return the current node of a given VTY */
+/*! return the current node of a given VTY */
 int vty_current_node(struct vty *vty)
 {
 	return vty->node;
 }
 
-/*! \brief Lock the configuration to a given VTY
+/*! Lock the configuration to a given VTY
  *  \param[in] vty VTY to which the config shall be locked
  *  \returns 1 on success, 0 on error
  *
@@ -339,7 +339,7 @@
 	return vty->config;
 }
 
-/*! \brief Unlock the configuration from a given VTY
+/*! Unlock the configuration from a given VTY
  *  \param[in] vty VTY from which the configuration shall be unlocked
  *  \returns 0 in case of success
  */
@@ -1272,7 +1272,7 @@
 	vty_redraw_line(vty);
 }
 
-/*! \brief Read data via vty socket. */
+/*! Read data via vty socket. */
 int vty_read(struct vty *vty)
 {
 	int i;
@@ -1492,7 +1492,7 @@
 	return 0;
 }
 
-/*! \brief Create new vty structure. */
+/*! Create new vty structure. */
 struct vty *
 vty_create (int vty_sock, void *priv)
 {
@@ -1702,7 +1702,7 @@
 	1,
 };
 
-/*! \brief Reset all VTY status. */
+/*! Reset all VTY status. */
 void vty_reset(void)
 {
 	unsigned int i;
@@ -1760,7 +1760,7 @@
 
 extern void *tall_bsc_ctx;
 
-/*! \brief Initialize VTY layer
+/*! Initialize VTY layer
  *  \param[in] app_info application information
  */
 /* Install vty's own commands like `who' command. */
@@ -1797,7 +1797,7 @@
 	install_element(VTY_NODE, &vty_bind_cmd);
 }
 
-/*! \brief Read the configuration file using the VTY code
+/*! Read the configuration file using the VTY code
  *  \param[in] file_name file name of the configuration file
  *  \param[in] priv private data to be passed to \ref vty_read_file
  */
diff --git a/src/write_queue.c b/src/write_queue.c
index 1e4cda5..d929774 100644
--- a/src/write_queue.c
+++ b/src/write_queue.c
@@ -27,12 +27,12 @@
 
 /*! \addtogroup write_queue
  *  @{
- *  \brief write queue for writing \ref msgb to sockets/fd's
+ *  write queue for writing \ref msgb to sockets/fd's
  */
 
 /*! \file write_queue.c */
 
-/*! \brief Select loop function for write queue handling
+/*! Select loop function for write queue handling
  *  \param[in] fd osmocom file descriptor
  *  \param[in] what bit-mask of events that have happened
  *  \returns 0 on success; negative on error
@@ -85,7 +85,7 @@
 	return 0;
 }
 
-/*! \brief Initialize a \ref osmo_wqueue structure
+/*! Initialize a \ref osmo_wqueue structure
  *  \param[in] queue Write queue to operate on
  *  \param[in] max_length Maximum length of write queue
  */
@@ -100,7 +100,7 @@
 	INIT_LLIST_HEAD(&queue->msg_queue);
 }
 
-/*! \brief Enqueue a new \ref msgb into a write queue
+/*! Enqueue a new \ref msgb into a write queue
  *  \param[in] queue Write queue to be used
  *  \param[in] data to-be-enqueued message buffer
  *  \returns 0 on success; negative on error
@@ -120,7 +120,7 @@
 	return 0;
 }
 
-/*! \brief Clear a \ref osmo_wqueue
+/*! Clear a \ref osmo_wqueue
  *  \param[in] queue Write queue to be cleared
  *
  * This function will clear (remove/release) all messages in it.
diff --git a/utils/conv_gen.py b/utils/conv_gen.py
index 0cdba75..6b6b267 100644
--- a/utils/conv_gen.py
+++ b/utils/conv_gen.py
@@ -170,8 +170,7 @@
 
 	def print_description(self, fi, brief = False):
 		if brief is True:
-			fi.write("/*! \\brief ")
-			fi.write("structure describing %s\n"
+			fi.write("/*! structure describing %s.\n"
 				% self.description[0])
 			for line in self.description[1:]:
 				fi.write(" * %s\n" % line)