source: asp3_wo_tecs/trunk/kernel/dataqueue.c@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 14.5 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者
12は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23 * 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29 * と.
30 * (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37 * 報告すること.
38 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39 * 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43 * 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45 * å…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53 * の責任を負わない.
54 *
55 * $Id: dataqueue.c 471 2015-12-30 10:03:16Z ertl-hiro $
56 */
57
58/*
59 * データキュー機能
60 */
61
62#include "kernel_impl.h"
63#include "check.h"
64#include "task.h"
65#include "wait.h"
66#include "dataqueue.h"
67
68/*
69 * トレースログマクロのデフォルト定義
70 */
71#ifndef LOG_SND_DTQ_ENTER
72#define LOG_SND_DTQ_ENTER(dtqid, data)
73#endif /* LOG_SND_DTQ_ENTER */
74
75#ifndef LOG_SND_DTQ_LEAVE
76#define LOG_SND_DTQ_LEAVE(ercd)
77#endif /* LOG_SND_DTQ_LEAVE */
78
79#ifndef LOG_PSND_DTQ_ENTER
80#define LOG_PSND_DTQ_ENTER(dtqid, data)
81#endif /* LOG_PSND_DTQ_ENTER */
82
83#ifndef LOG_PSND_DTQ_LEAVE
84#define LOG_PSND_DTQ_LEAVE(ercd)
85#endif /* LOG_PSND_DTQ_LEAVE */
86
87#ifndef LOG_TSND_DTQ_ENTER
88#define LOG_TSND_DTQ_ENTER(dtqid, data, tmout)
89#endif /* LOG_TSND_DTQ_ENTER */
90
91#ifndef LOG_TSND_DTQ_LEAVE
92#define LOG_TSND_DTQ_LEAVE(ercd)
93#endif /* LOG_TSND_DTQ_LEAVE */
94
95#ifndef LOG_FSND_DTQ_ENTER
96#define LOG_FSND_DTQ_ENTER(dtqid, data)
97#endif /* LOG_FSND_DTQ_ENTER */
98
99#ifndef LOG_FSND_DTQ_LEAVE
100#define LOG_FSND_DTQ_LEAVE(ercd)
101#endif /* LOG_FSND_DTQ_LEAVE */
102
103#ifndef LOG_RCV_DTQ_ENTER
104#define LOG_RCV_DTQ_ENTER(dtqid, p_data)
105#endif /* LOG_RCV_DTQ_ENTER */
106
107#ifndef LOG_RCV_DTQ_LEAVE
108#define LOG_RCV_DTQ_LEAVE(ercd, p_data)
109#endif /* LOG_RCV_DTQ_LEAVE */
110
111#ifndef LOG_PRCV_DTQ_ENTER
112#define LOG_PRCV_DTQ_ENTER(dtqid, p_data)
113#endif /* LOG_PRCV_DTQ_ENTER */
114
115#ifndef LOG_PRCV_DTQ_LEAVE
116#define LOG_PRCV_DTQ_LEAVE(ercd, p_data)
117#endif /* LOG_PRCV_DTQ_LEAVE */
118
119#ifndef LOG_TRCV_DTQ_ENTER
120#define LOG_TRCV_DTQ_ENTER(dtqid, p_data, tmout)
121#endif /* LOG_TRCV_DTQ_ENTER */
122
123#ifndef LOG_TRCV_DTQ_LEAVE
124#define LOG_TRCV_DTQ_LEAVE(ercd, p_data)
125#endif /* LOG_TRCV_DTQ_LEAVE */
126
127#ifndef LOG_INI_DTQ_ENTER
128#define LOG_INI_DTQ_ENTER(dtqid)
129#endif /* LOG_INI_DTQ_ENTER */
130
131#ifndef LOG_INI_DTQ_LEAVE
132#define LOG_INI_DTQ_LEAVE(ercd)
133#endif /* LOG_INI_DTQ_LEAVE */
134
135#ifndef LOG_REF_DTQ_ENTER
136#define LOG_REF_DTQ_ENTER(dtqid, pk_rdtq)
137#endif /* LOG_REF_DTQ_ENTER */
138
139#ifndef LOG_REF_DTQ_LEAVE
140#define LOG_REF_DTQ_LEAVE(ercd, pk_rdtq)
141#endif /* LOG_REF_DTQ_LEAVE */
142
143/*
144 * データキューの数
145 */
146#define tnum_dtq ((uint_t)(tmax_dtqid - TMIN_DTQID + 1))
147
148/*
149 * データキューIDからデータキュー管理ブロックを取り出すためのマクロ
150 */
151#define INDEX_DTQ(dtqid) ((uint_t)((dtqid) - TMIN_DTQID))
152#define get_dtqcb(dtqid) (&(dtqcb_table[INDEX_DTQ(dtqid)]))
153
154/*
155 * データキュー機能の初期化
156 */
157#ifdef TOPPERS_dtqini
158
159void
160initialize_dataqueue(void)
161{
162 uint_t i;
163 DTQCB *p_dtqcb;
164
165 for (i = 0; i < tnum_dtq; i++) {
166 p_dtqcb = &(dtqcb_table[i]);
167 queue_initialize(&(p_dtqcb->swait_queue));
168 p_dtqcb->p_dtqinib = &(dtqinib_table[i]);
169 queue_initialize(&(p_dtqcb->rwait_queue));
170 p_dtqcb->count = 0U;
171 p_dtqcb->head = 0U;
172 p_dtqcb->tail = 0U;
173 }
174}
175
176#endif /* TOPPERS_dtqini */
177
178/*
179 * データキュー管理領域へのデータの格納
180 */
181#ifdef TOPPERS_dtqenq
182
183void
184enqueue_data(DTQCB *p_dtqcb, intptr_t data)
185{
186 (p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->tail)->data = data;
187 p_dtqcb->count++;
188 p_dtqcb->tail++;
189 if (p_dtqcb->tail >= p_dtqcb->p_dtqinib->dtqcnt) {
190 p_dtqcb->tail = 0U;
191 }
192}
193
194#endif /* TOPPERS_dtqenq */
195
196/*
197 * データキュー管理領域へのデータの強制格納
198 */
199#ifdef TOPPERS_dtqfenq
200
201void
202force_enqueue_data(DTQCB *p_dtqcb, intptr_t data)
203{
204 (p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->tail)->data = data;
205 p_dtqcb->tail++;
206 if (p_dtqcb->tail >= p_dtqcb->p_dtqinib->dtqcnt) {
207 p_dtqcb->tail = 0U;
208 }
209 if (p_dtqcb->count < p_dtqcb->p_dtqinib->dtqcnt) {
210 p_dtqcb->count++;
211 }
212 else {
213 p_dtqcb->head = p_dtqcb->tail;
214 }
215}
216
217#endif /* TOPPERS_dtqfenq */
218
219/*
220 * データキュー管理領域からのデータの取出し
221 */
222#ifdef TOPPERS_dtqdeq
223
224void
225dequeue_data(DTQCB *p_dtqcb, intptr_t *p_data)
226{
227 *p_data = (p_dtqcb->p_dtqinib->p_dtqmb + p_dtqcb->head)->data;
228 p_dtqcb->count--;
229 p_dtqcb->head++;
230 if (p_dtqcb->head >= p_dtqcb->p_dtqinib->dtqcnt) {
231 p_dtqcb->head = 0U;
232 }
233}
234
235#endif /* TOPPERS_dtqdeq */
236
237/*
238 * データキューへのデータ送信
239 */
240#ifdef TOPPERS_dtqsnd
241
242bool_t
243send_data(DTQCB *p_dtqcb, intptr_t data)
244{
245 TCB *p_tcb;
246
247 if (!queue_empty(&(p_dtqcb->rwait_queue))) {
248 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->rwait_queue));
249 ((WINFO_RDTQ *)(p_tcb->p_winfo))->data = data;
250 wait_complete(p_tcb);
251 return(true);
252 }
253 else if (p_dtqcb->count < p_dtqcb->p_dtqinib->dtqcnt) {
254 enqueue_data(p_dtqcb, data);
255 return(true);
256 }
257 else {
258 return(false);
259 }
260}
261
262#endif /* TOPPERS_dtqsnd */
263
264/*
265 * データキューへのデータ強制送信
266 */
267#ifdef TOPPERS_dtqfsnd
268
269void
270force_send_data(DTQCB *p_dtqcb, intptr_t data)
271{
272 TCB *p_tcb;
273
274 if (!queue_empty(&(p_dtqcb->rwait_queue))) {
275 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->rwait_queue));
276 ((WINFO_RDTQ *)(p_tcb->p_winfo))->data = data;
277 wait_complete(p_tcb);
278 }
279 else {
280 force_enqueue_data(p_dtqcb, data);
281 }
282}
283
284#endif /* TOPPERS_dtqfsnd */
285
286/*
287 * データキューからのデータ受信
288 */
289#ifdef TOPPERS_dtqrcv
290
291bool_t
292receive_data(DTQCB *p_dtqcb, intptr_t *p_data)
293{
294 TCB *p_tcb;
295 intptr_t data;
296
297 if (p_dtqcb->count > 0U) {
298 dequeue_data(p_dtqcb, p_data);
299 if (!queue_empty(&(p_dtqcb->swait_queue))) {
300 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->swait_queue));
301 data = ((WINFO_SDTQ *)(p_tcb->p_winfo))->data;
302 enqueue_data(p_dtqcb, data);
303 wait_complete(p_tcb);
304 }
305 return(true);
306 }
307 else if (!queue_empty(&(p_dtqcb->swait_queue))) {
308 p_tcb = (TCB *) queue_delete_next(&(p_dtqcb->swait_queue));
309 *p_data = ((WINFO_SDTQ *)(p_tcb->p_winfo))->data;
310 wait_complete(p_tcb);
311 return(true);
312 }
313 else {
314 return(false);
315 }
316}
317
318#endif /* TOPPERS_dtqrcv */
319
320/*
321 * データキューへの送信
322 */
323#ifdef TOPPERS_snd_dtq
324
325ER
326snd_dtq(ID dtqid, intptr_t data)
327{
328 DTQCB *p_dtqcb;
329 WINFO_SDTQ winfo_sdtq;
330 ER ercd;
331
332 LOG_SND_DTQ_ENTER(dtqid, data);
333 CHECK_DISPATCH();
334 CHECK_ID(VALID_DTQID(dtqid));
335 p_dtqcb = get_dtqcb(dtqid);
336
337 lock_cpu_dsp();
338 if (p_runtsk->raster) {
339 ercd = E_RASTER;
340 }
341 else if (send_data(p_dtqcb, data)) {
342 if (p_runtsk != p_schedtsk) {
343 dispatch();
344 }
345 ercd = E_OK;
346 }
347 else {
348 winfo_sdtq.data = data;
349 p_runtsk->tstat = TS_WAITING_SDTQ;
350 wobj_make_wait((WOBJCB *) p_dtqcb, (WINFO_WOBJ *) &winfo_sdtq);
351 dispatch();
352 ercd = winfo_sdtq.winfo.wercd;
353 }
354 unlock_cpu_dsp();
355
356 error_exit:
357 LOG_SND_DTQ_LEAVE(ercd);
358 return(ercd);
359}
360
361#endif /* TOPPERS_snd_dtq */
362
363/*
364 * データキューへの送信(ポーリング)
365 */
366#ifdef TOPPERS_psnd_dtq
367
368ER
369psnd_dtq(ID dtqid, intptr_t data)
370{
371 DTQCB *p_dtqcb;
372 ER ercd;
373
374 LOG_PSND_DTQ_ENTER(dtqid, data);
375 CHECK_UNL();
376 CHECK_ID(VALID_DTQID(dtqid));
377 p_dtqcb = get_dtqcb(dtqid);
378
379 lock_cpu();
380 if (send_data(p_dtqcb, data)) {
381 if (p_runtsk != p_schedtsk) {
382 if (!sense_context()) {
383 dispatch();
384 }
385 else {
386 request_dispatch();
387 }
388 }
389 ercd = E_OK;
390 }
391 else {
392 ercd = E_TMOUT;
393 }
394 unlock_cpu();
395
396 error_exit:
397 LOG_PSND_DTQ_LEAVE(ercd);
398 return(ercd);
399}
400
401#endif /* TOPPERS_psnd_dtq */
402
403/*
404 * データキューへの送信(タイムアウトあり)
405 */
406#ifdef TOPPERS_tsnd_dtq
407
408ER
409tsnd_dtq(ID dtqid, intptr_t data, TMO tmout)
410{
411 DTQCB *p_dtqcb;
412 WINFO_SDTQ winfo_sdtq;
413 TMEVTB tmevtb;
414 ER ercd;
415
416 LOG_TSND_DTQ_ENTER(dtqid, data, tmout);
417 CHECK_DISPATCH();
418 CHECK_ID(VALID_DTQID(dtqid));
419 CHECK_PAR(VALID_TMOUT(tmout));
420 p_dtqcb = get_dtqcb(dtqid);
421
422 lock_cpu_dsp();
423 if (p_runtsk->raster) {
424 ercd = E_RASTER;
425 }
426 else if (send_data(p_dtqcb, data)) {
427 if (p_runtsk != p_schedtsk) {
428 dispatch();
429 }
430 ercd = E_OK;
431 }
432 else if (tmout == TMO_POL) {
433 ercd = E_TMOUT;
434 }
435 else {
436 winfo_sdtq.data = data;
437 p_runtsk->tstat = TS_WAITING_SDTQ;
438 wobj_make_wait_tmout((WOBJCB *) p_dtqcb, (WINFO_WOBJ *) &winfo_sdtq,
439 &tmevtb, tmout);
440 dispatch();
441 ercd = winfo_sdtq.winfo.wercd;
442 }
443 unlock_cpu_dsp();
444
445 error_exit:
446 LOG_TSND_DTQ_LEAVE(ercd);
447 return(ercd);
448}
449
450#endif /* TOPPERS_tsnd_dtq */
451
452/*
453 * データキューへの強制送信
454 */
455#ifdef TOPPERS_fsnd_dtq
456
457ER
458fsnd_dtq(ID dtqid, intptr_t data)
459{
460 DTQCB *p_dtqcb;
461 ER ercd;
462
463 LOG_FSND_DTQ_ENTER(dtqid, data);
464 CHECK_UNL();
465 CHECK_ID(VALID_DTQID(dtqid));
466 p_dtqcb = get_dtqcb(dtqid);
467 CHECK_ILUSE(p_dtqcb->p_dtqinib->dtqcnt > 0U);
468
469 lock_cpu();
470 force_send_data(p_dtqcb, data);
471 if (p_runtsk != p_schedtsk) {
472 if (!sense_context()) {
473 dispatch();
474 }
475 else {
476 request_dispatch();
477 }
478 }
479 ercd = E_OK;
480 unlock_cpu();
481
482 error_exit:
483 LOG_FSND_DTQ_LEAVE(ercd);
484 return(ercd);
485}
486
487#endif /* TOPPERS_fsnd_dtq */
488
489/*
490 * データキューからの受信
491 */
492#ifdef TOPPERS_rcv_dtq
493
494ER
495rcv_dtq(ID dtqid, intptr_t *p_data)
496{
497 DTQCB *p_dtqcb;
498 WINFO_RDTQ winfo_rdtq;
499 ER ercd;
500
501 LOG_RCV_DTQ_ENTER(dtqid, p_data);
502 CHECK_DISPATCH();
503 CHECK_ID(VALID_DTQID(dtqid));
504 p_dtqcb = get_dtqcb(dtqid);
505
506 lock_cpu_dsp();
507 if (p_runtsk->raster) {
508 ercd = E_RASTER;
509 }
510 else if (receive_data(p_dtqcb, p_data)) {
511 if (p_runtsk != p_schedtsk) {
512 dispatch();
513 }
514 ercd = E_OK;
515 }
516 else {
517 p_runtsk->tstat = TS_WAITING_RDTQ;
518 make_wait(&(winfo_rdtq.winfo));
519 queue_insert_prev(&(p_dtqcb->rwait_queue), &(p_runtsk->task_queue));
520 winfo_rdtq.p_dtqcb = p_dtqcb;
521 LOG_TSKSTAT(p_runtsk);
522 dispatch();
523 ercd = winfo_rdtq.winfo.wercd;
524 if (ercd == E_OK) {
525 *p_data = winfo_rdtq.data;
526 }
527 }
528 unlock_cpu_dsp();
529
530 error_exit:
531 LOG_RCV_DTQ_LEAVE(ercd, p_data);
532 return(ercd);
533}
534
535#endif /* TOPPERS_rcv_dtq */
536
537/*
538 * データキューからの受信(ポーリング)
539 */
540#ifdef TOPPERS_prcv_dtq
541
542ER
543prcv_dtq(ID dtqid, intptr_t *p_data)
544{
545 DTQCB *p_dtqcb;
546 ER ercd;
547
548 LOG_PRCV_DTQ_ENTER(dtqid, p_data);
549 CHECK_TSKCTX_UNL();
550 CHECK_ID(VALID_DTQID(dtqid));
551 p_dtqcb = get_dtqcb(dtqid);
552
553 lock_cpu();
554 if (receive_data(p_dtqcb, p_data)) {
555 if (p_runtsk != p_schedtsk) {
556 dispatch();
557 }
558 ercd = E_OK;
559 }
560 else {
561 ercd = E_TMOUT;
562 }
563 unlock_cpu();
564
565 error_exit:
566 LOG_PRCV_DTQ_LEAVE(ercd, p_data);
567 return(ercd);
568}
569
570#endif /* TOPPERS_prcv_dtq */
571
572/*
573 * データキューからの受信(タイムアウトあり)
574 */
575#ifdef TOPPERS_trcv_dtq
576
577ER
578trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout)
579{
580 DTQCB *p_dtqcb;
581 WINFO_RDTQ winfo_rdtq;
582 TMEVTB tmevtb;
583 ER ercd;
584
585 LOG_TRCV_DTQ_ENTER(dtqid, p_data, tmout);
586 CHECK_DISPATCH();
587 CHECK_ID(VALID_DTQID(dtqid));
588 CHECK_PAR(VALID_TMOUT(tmout));
589 p_dtqcb = get_dtqcb(dtqid);
590
591 lock_cpu_dsp();
592 if (p_runtsk->raster) {
593 ercd = E_RASTER;
594 }
595 else if (receive_data(p_dtqcb, p_data)) {
596 if (p_runtsk != p_schedtsk) {
597 dispatch();
598 }
599 ercd = E_OK;
600 }
601 else if (tmout == TMO_POL) {
602 ercd = E_TMOUT;
603 }
604 else {
605 p_runtsk->tstat = TS_WAITING_RDTQ;
606 make_wait_tmout(&(winfo_rdtq.winfo), &tmevtb, tmout);
607 queue_insert_prev(&(p_dtqcb->rwait_queue), &(p_runtsk->task_queue));
608 winfo_rdtq.p_dtqcb = p_dtqcb;
609 LOG_TSKSTAT(p_runtsk);
610 dispatch();
611 ercd = winfo_rdtq.winfo.wercd;
612 if (ercd == E_OK) {
613 *p_data = winfo_rdtq.data;
614 }
615 }
616 unlock_cpu_dsp();
617
618 error_exit:
619 LOG_TRCV_DTQ_LEAVE(ercd, p_data);
620 return(ercd);
621}
622
623#endif /* TOPPERS_trcv_dtq */
624
625/*
626 * データキューの再初期化
627 */
628#ifdef TOPPERS_ini_dtq
629
630ER
631ini_dtq(ID dtqid)
632{
633 DTQCB *p_dtqcb;
634 ER ercd;
635
636 LOG_INI_DTQ_ENTER(dtqid);
637 CHECK_TSKCTX_UNL();
638 CHECK_ID(VALID_DTQID(dtqid));
639 p_dtqcb = get_dtqcb(dtqid);
640
641 lock_cpu();
642 init_wait_queue(&(p_dtqcb->swait_queue));
643 init_wait_queue(&(p_dtqcb->rwait_queue));
644 p_dtqcb->count = 0U;
645 p_dtqcb->head = 0U;
646 p_dtqcb->tail = 0U;
647 if (p_runtsk != p_schedtsk) {
648 dispatch();
649 }
650 ercd = E_OK;
651 unlock_cpu();
652
653 error_exit:
654 LOG_INI_DTQ_LEAVE(ercd);
655 return(ercd);
656}
657
658#endif /* TOPPERS_ini_dtq */
659
660/*
661 * データキューの状æ…
662‹å‚ç…
663§
664 */
665#ifdef TOPPERS_ref_dtq
666
667ER
668ref_dtq(ID dtqid, T_RDTQ *pk_rdtq)
669{
670 DTQCB *p_dtqcb;
671 ER ercd;
672
673 LOG_REF_DTQ_ENTER(dtqid, pk_rdtq);
674 CHECK_TSKCTX_UNL();
675 CHECK_ID(VALID_DTQID(dtqid));
676 p_dtqcb = get_dtqcb(dtqid);
677
678 lock_cpu();
679 pk_rdtq->stskid = wait_tskid(&(p_dtqcb->swait_queue));
680 pk_rdtq->rtskid = wait_tskid(&(p_dtqcb->rwait_queue));
681 pk_rdtq->sdtqcnt = p_dtqcb->count;
682 ercd = E_OK;
683 unlock_cpu();
684
685 error_exit:
686 LOG_REF_DTQ_LEAVE(ercd, pk_rdtq);
687 return(ercd);
688}
689
690#endif /* TOPPERS_ref_dtq */
Note: See TracBrowser for help on using the repository browser.