edge: Select implementation by mode in rlc_data_to_dl_append
Currently the GPRS data block encoding is applied to every coding scheme, even if an MCS is selected. This commit renames the actual encoding function to rlc_data_to_dl_append_gprs (not exported) and puts selection code into Encoding::rlc_data_to_dl_append. This requires an additional cs argument. Sponsored-by: On-Waves ehf
This commit is contained in:
parent
fec94d1c5c
commit
5058bd6e9e
|
@ -752,7 +752,7 @@ unsigned int Encoding::rlc_copy_from_aligned_buffer(
|
|||
return rdbi->data_len;
|
||||
}
|
||||
|
||||
Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
||||
static Encoding::AppendResult rlc_data_to_dl_append_gprs(
|
||||
struct gprs_rlc_data_block_info *rdbi,
|
||||
gprs_llc *llc, int *offset, int *num_chunks,
|
||||
uint8_t *data_block,
|
||||
|
@ -784,7 +784,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
|||
/* return data block as message */
|
||||
*offset = rdbi->data_len;
|
||||
(*num_chunks)++;
|
||||
return AR_NEED_MORE_BLOCKS;
|
||||
return Encoding::AR_NEED_MORE_BLOCKS;
|
||||
}
|
||||
/* if FINAL chunk would fit precisely in space left */
|
||||
if (chunk == space && is_final)
|
||||
|
@ -801,7 +801,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
|||
*offset = rdbi->data_len;
|
||||
(*num_chunks)++;
|
||||
rdbi->cv = 0;
|
||||
return AR_COMPLETED_BLOCK_FILLED;
|
||||
return Encoding::AR_COMPLETED_BLOCK_FILLED;
|
||||
}
|
||||
/* if chunk would fit exactly in space left */
|
||||
if (chunk == space) {
|
||||
|
@ -828,7 +828,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
|||
/* return data block as message */
|
||||
*offset = rdbi->data_len;
|
||||
(*num_chunks)++;
|
||||
return AR_NEED_MORE_BLOCKS;
|
||||
return Encoding::AR_NEED_MORE_BLOCKS;
|
||||
}
|
||||
|
||||
LOGP(DRLCMACDL, LOGL_DEBUG, "-- Chunk with length %d is less "
|
||||
|
@ -856,7 +856,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
|||
/* if we have more data and we have space left */
|
||||
if (space > 0 && !is_final) {
|
||||
li->m = 1; /* we indicate more frames to follow */
|
||||
return AR_COMPLETED_SPACE_LEFT;
|
||||
return Encoding::AR_COMPLETED_SPACE_LEFT;
|
||||
}
|
||||
/* if we don't have more LLC frames */
|
||||
if (is_final) {
|
||||
|
@ -864,11 +864,27 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
|||
"done.\n");
|
||||
li->e = 1; /* we cannot extend */
|
||||
rdbi->cv = 0;
|
||||
return AR_COMPLETED_BLOCK_FILLED;
|
||||
return Encoding::AR_COMPLETED_BLOCK_FILLED;
|
||||
}
|
||||
/* we have no space left */
|
||||
LOGP(DRLCMACDL, LOGL_DEBUG, "-- No space left, so we are "
|
||||
"done.\n");
|
||||
li->e = 1; /* we cannot extend */
|
||||
return AR_COMPLETED_BLOCK_FILLED;
|
||||
return Encoding::AR_COMPLETED_BLOCK_FILLED;
|
||||
}
|
||||
|
||||
Encoding::AppendResult Encoding::rlc_data_to_dl_append(
|
||||
struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs,
|
||||
gprs_llc *llc, int *offset, int *num_chunks,
|
||||
uint8_t *data_block,
|
||||
bool is_final)
|
||||
{
|
||||
if (cs.isGprs())
|
||||
return rlc_data_to_dl_append_gprs(rdbi,
|
||||
llc, offset, num_chunks, data_block, is_final);
|
||||
|
||||
LOGP(DRLCMACDL, LOGL_ERROR, "%s data block encoding not implemented\n",
|
||||
cs.name());
|
||||
|
||||
return AR_NEED_MORE_BLOCKS;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <gsm_rlcmac.h>
|
||||
#include <gprs_coding_scheme.h>
|
||||
|
||||
struct gprs_rlcmac_bts;
|
||||
struct gprs_rlcmac_tbf;
|
||||
|
@ -86,7 +87,7 @@ public:
|
|||
};
|
||||
|
||||
static AppendResult rlc_data_to_dl_append(
|
||||
struct gprs_rlc_data_block_info *rdbi,
|
||||
struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs,
|
||||
gprs_llc *llc, int *offset, int *num_chunks,
|
||||
uint8_t *data,
|
||||
bool is_final);
|
||||
|
|
|
@ -484,7 +484,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, const uint8_t
|
|||
|
||||
is_final = llc_queue()->size() == 0 && !keep_open(fn);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(rdbi, cs,
|
||||
&m_llc, &write_offset, &num_chunks, data, is_final);
|
||||
|
||||
if (ar == Encoding::AR_NEED_MORE_BLOCKS)
|
||||
|
|
|
@ -509,7 +509,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 11);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT);
|
||||
|
@ -520,7 +520,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 26);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT);
|
||||
|
@ -531,7 +531,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 99);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
@ -556,7 +556,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 20);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
@ -575,7 +575,7 @@ static void test_rlc_unit_encoder()
|
|||
|
||||
OSMO_ASSERT(llc.chunk_size() == 1);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT);
|
||||
|
@ -586,7 +586,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 99);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
@ -609,7 +609,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 7);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT);
|
||||
|
@ -620,7 +620,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 11);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_BLOCK_FILLED);
|
||||
|
@ -644,7 +644,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 99);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
@ -667,7 +667,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 20);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, true);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_BLOCK_FILLED);
|
||||
|
@ -690,7 +690,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 30);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
@ -708,7 +708,7 @@ static void test_rlc_unit_encoder()
|
|||
|
||||
OSMO_ASSERT(llc.chunk_size() == 10);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT);
|
||||
|
@ -719,7 +719,7 @@ static void test_rlc_unit_encoder()
|
|||
llc.reset();
|
||||
llc.put_frame(llc_data, 99);
|
||||
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi,
|
||||
ar = Encoding::rlc_data_to_dl_append(&rdbi, cs,
|
||||
&llc, &write_offset, &num_chunks, data, false);
|
||||
|
||||
OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS);
|
||||
|
|
Loading…
Reference in New Issue