gsm_08_08: define GSM0808_SCT_EXT (separately)

As per 3GPP TS 48.008, section 3.2.2.103, the "Codec Type" field may
contain either a certain 3GPP Speech Codec Type directly (4 bit value),
or the so called "Codec Extension" = 0xFh, in which case the real Codec
Type follows in the next octet as "Extended Codec Type".

CSD is such an example, the encoding is defined as follows:

     8    7    6    5    4    3    2    1
  +----+----+----+----+-------------------+
  | -- | PI | PT | -- |        0xFh       |
  +----+----+----+----+-------------------+
  |      Extended Codec Type (CSData)     |
  +----+----+-----------------------------+
  | R2 | R3 |                             |
  +----+----+-----------------------------+

  CSData is coded with 0xFDh or '1111 1101' (0xfd).

Let's have the "Codec Extension" value clearly defined in the header
file, but intentionally separate from the other GSM0808_SCT_* values.

Change-Id: Iafaa25070684d2ba400c75fa33e803651a5ce857
Related: OS#6110, OS#4393, OS#4394
diff --git a/include/osmocom/gsm/protocol/gsm_08_08.h b/include/osmocom/gsm/protocol/gsm_08_08.h
index 967e4fe..1e211dc 100644
--- a/include/osmocom/gsm/protocol/gsm_08_08.h
+++ b/include/osmocom/gsm/protocol/gsm_08_08.h
@@ -557,6 +557,12 @@
 	GSM0808_SCT_CSD	= 0xfd, /*!< CSData (see also TS 26.103) */
 };
 
+/* Codec Extension (the real Codec Type follows in the next octet).
+ * This value is intentionally not included in gsm0808_speech_codec_type,
+ * because {enc,dec}_speech_codec() functions take care of the extended
+ * encoding internally.  It shall not be used in struct gsm0808_speech_codec. */
+#define GSM0808_SCT_EXT	0x0f
+
 extern const struct value_string gsm0808_speech_codec_type_names[];
 static inline const char *gsm0808_speech_codec_type_name(enum gsm0808_speech_codec_type val)
 { return get_value_string(gsm0808_speech_codec_type_names, val); }