coding: clarify the USF decoding for PDCH blocks

The USF (Uplink State Flag) field is present in the MAC header of all
Downlink PDCH blocks.  It is used by the network to indicate which MS
can transmit on subsequent Uplink PDCH block(s).  This field is of a
high importance for the MS, thus the decoder API allows the caller
to obtain USF value separately from the actual data bits.

In the case of gsm0503_pdtch_decode(), if the 'usf_p' pointer is not
NULL, the USF value would be assigned for CS2/CS3/CS4 (but not CS1)
even if the CRC check fails (negative return value).  A subsequent
patch is to bring the CS1 in consistency with CS2/CS3/CS4.

In the case of gsm0503_pdtch_egprs_decode(), decoding of the USF
field separately from data bits is not implemented, and moreover
the function itself cannot be used for decoding Downlink blocks.

Change-Id: I43e8bfb4003f34766ace7c5c6080ca583ce5efbb
diff --git a/src/coding/gsm0503_coding.c b/src/coding/gsm0503_coding.c
index 612e0ad..5b78502 100644
--- a/src/coding/gsm0503_coding.c
+++ b/src/coding/gsm0503_coding.c
@@ -921,7 +921,7 @@
  *  \param[out] l2_data caller-allocated buffer for L2 Frame
  *  \param[in] bursts burst input data as soft unpacked bits
  *  \param[in] nbits number of bits in \a bursts
- *  \param usf_p unused argument ?!?
+ *  \param usf_p Uplink State Flag, FIXME: not implemented
  *  \param[out] n_errors number of detected bit-errors
  *  \param[out] n_bits_total total number of decoded bits
  *  \returns number of bytes decoded; negative on error */
@@ -1010,7 +1010,7 @@
 /*! 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
+ *  \param[out] usf_p Uplink State Flag, only relevant for DL blocks
  *  \param[out] n_errors number of detected bit-errors
  *  \param[out] n_bits_total total number of dcoded bits
  *  \returns number of bytes decoded; negative on error */
@@ -1061,6 +1061,7 @@
 		osmo_conv_decode_ber(&gsm0503_cs2_np, cB,
 			conv, n_errors, n_bits_total);
 
+		/* 5.1.2.2 a) the three USF bits d(0),d(1),d(2) are precoded into six bits */
 		for (i = 0; i < 8; i++) {
 			for (j = 0, k = 0; j < 6; j++)
 				k += abs(((int)gsm0503_usf2six[i][j]) - ((int)conv[j]));
@@ -1096,6 +1097,7 @@
 		osmo_conv_decode_ber(&gsm0503_cs3_np, cB,
 			conv, n_errors, n_bits_total);
 
+		/* 5.1.3.2 a) the three USF bits d(0),d(1),d(2) are precoded into six bits */
 		for (i = 0; i < 8; i++) {
 			for (j = 0, k = 0; j < 6; j++)
 				k += abs(((int)gsm0503_usf2six[i][j]) - ((int)conv[j]));
@@ -1124,6 +1126,7 @@
 		for (i = 12; i < 456; i++)
 			conv[i] = (cB[i] < 0) ? 1 : 0;
 
+		/* 5.1.4.2 a) the three USF bits d(0),d(1),d(2) are precoded into twelve bits */
 		for (i = 0; i < 8; i++) {
 			for (j = 0, k = 0; j < 12; j++)
 				k += abs(((int)gsm0503_usf2twelve_sbit[i][j]) - ((int)cB[j]));