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/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