@@ -151,88 +151,26 @@ int net_rx_priority2tc(enum net_priority prio)
151151
152152#if defined(CONFIG_NET_TC_THREAD_PRIO_CUSTOM )
153153#define BASE_PRIO_TX CONFIG_NET_TC_TX_THREAD_BASE_PRIO
154+ #define PRIO_SPREAD_TX CONFIG_NET_TC_TX_THREAD_PRIO_SPREAD
154155#elif defined(CONFIG_NET_TC_THREAD_COOPERATIVE )
155156#define BASE_PRIO_TX (CONFIG_NET_TC_NUM_PRIORITIES - 1)
157+ #define PRIO_SPREAD_TX 1
158+ BUILD_ASSERT (NET_TC_TX_COUNT <= CONFIG_NUM_COOP_PRIORITIES , "Too many traffic classes" );
156159#else
157160#define BASE_PRIO_TX (CONFIG_NET_TC_TX_COUNT - 1)
161+ #define PRIO_SPREAD_TX 1
158162#endif
159163
160- #define PRIO_TX (i , _ ) (BASE_PRIO_TX - i)
161-
162164#if defined(CONFIG_NET_TC_THREAD_PRIO_CUSTOM )
163165#define BASE_PRIO_RX CONFIG_NET_TC_RX_THREAD_BASE_PRIO
166+ #define PRIO_SPREAD_RX CONFIG_NET_TC_RX_THREAD_PRIO_SPREAD
164167#elif defined(CONFIG_NET_TC_THREAD_COOPERATIVE )
165168#define BASE_PRIO_RX (CONFIG_NET_TC_NUM_PRIORITIES - 1)
169+ #define PRIO_SPREAD_RX 1
170+ BUILD_ASSERT (NET_TC_RX_COUNT <= CONFIG_NUM_COOP_PRIORITIES , "Too many traffic classes" );
166171#else
167172#define BASE_PRIO_RX (CONFIG_NET_TC_RX_COUNT - 1)
168- #endif
169-
170- #define PRIO_RX (i , _ ) (BASE_PRIO_RX - i)
171-
172- #if NET_TC_TX_COUNT > 0
173- /* Convert traffic class to thread priority */
174- static uint8_t tx_tc2thread (uint8_t tc )
175- {
176- /* Initial implementation just maps the traffic class to certain queue.
177- * If there are less queues than classes, then map them into
178- * some specific queue.
179- *
180- * Lower value in this table means higher thread priority. The
181- * value is used as a parameter to K_PRIO_COOP() or K_PRIO_PREEMPT()
182- * which converts it to actual thread priority.
183- *
184- * Higher traffic class value means higher priority queue. This means
185- * that thread_priorities[7] value should contain the highest priority
186- * for the TX queue handling thread.
187- *
188- * For example, if NET_TC_TX_COUNT = 8, which is the maximum number of
189- * traffic classes, then this priority array will contain following
190- * values if preemptive priorities are used:
191- * 7, 6, 5, 4, 3, 2, 1, 0
192- * and
193- * 14, 13, 12, 11, 10, 9, 8, 7
194- * if cooperative priorities are used.
195- *
196- * Then these will be converted to following thread priorities if
197- * CONFIG_NET_TC_THREAD_COOPERATIVE is enabled:
198- * -1, -2, -3, -4, -5, -6, -7, -8
199- *
200- * and if CONFIG_NET_TC_THREAD_PREEMPTIVE is enabled, following thread
201- * priorities are used:
202- * 7, 6, 5, 4, 3, 2, 1, 0
203- *
204- * This means that the lowest traffic class 1, will have the lowest
205- * cooperative priority -1 for coop priorities and 7 for preemptive
206- * priority.
207- */
208- static const uint8_t thread_priorities [] = {
209- LISTIFY (NET_TC_TX_COUNT , PRIO_TX , (,))
210- };
211-
212- BUILD_ASSERT (NET_TC_TX_COUNT <= CONFIG_NUM_COOP_PRIORITIES ,
213- "Too many traffic classes" );
214-
215- NET_ASSERT (tc < ARRAY_SIZE (thread_priorities ));
216-
217- return thread_priorities [tc ];
218- }
219- #endif
220-
221- #if NET_TC_RX_COUNT > 0
222- /* Convert traffic class to thread priority */
223- static uint8_t rx_tc2thread (uint8_t tc )
224- {
225- static const uint8_t thread_priorities [] = {
226- LISTIFY (NET_TC_RX_COUNT , PRIO_RX , (,))
227- };
228-
229- BUILD_ASSERT (NET_TC_RX_COUNT <= CONFIG_NUM_COOP_PRIORITIES ,
230- "Too many traffic classes" );
231-
232- NET_ASSERT (tc < ARRAY_SIZE (thread_priorities ));
233-
234- return thread_priorities [tc ];
235- }
173+ #define PRIO_SPREAD_RX 1
236174#endif
237175
238176#if defined(CONFIG_NET_STATISTICS )
@@ -362,7 +300,8 @@ void net_tc_tx_init(void)
362300 int priority ;
363301 k_tid_t tid ;
364302
365- thread_priority = tx_tc2thread (i );
303+ BUILD_ASSERT (BASE_PRIO_TX >= PRIO_SPREAD_TX * (NET_TC_TX_COUNT - 1 ));
304+ thread_priority = BASE_PRIO_TX - PRIO_SPREAD_TX * i ;
366305
367306 priority = IS_ENABLED (CONFIG_NET_TC_THREAD_COOPERATIVE ) ?
368307 K_PRIO_COOP (thread_priority ) :
@@ -430,7 +369,8 @@ void net_tc_rx_init(void)
430369 int priority ;
431370 k_tid_t tid ;
432371
433- thread_priority = rx_tc2thread (i );
372+ BUILD_ASSERT (BASE_PRIO_RX >= PRIO_SPREAD_RX * (NET_TC_RX_COUNT - 1 ));
373+ thread_priority = BASE_PRIO_RX - PRIO_SPREAD_RX * i ;
434374
435375 priority = IS_ENABLED (CONFIG_NET_TC_THREAD_COOPERATIVE ) ?
436376 K_PRIO_COOP (thread_priority ) :
0 commit comments