XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
seqlock.h
浏览该文件的文档.
1
13#ifndef __xwos_osal_lock_seqlock_h__
14#define __xwos_osal_lock_seqlock_h__
15
16#include <xwos/standard.h>
18#include <xwos/osal/irq.h>
19
109struct xwos_sqlk {
110 xwosdl_sqlk_t ossql;
111};
112
116#define XWOS_SQLK_INITIALIZER { .ossql = XWOSDL_SQLK_INITIALIZER, }
117
121#define XWOS_SQLK_GRANULARITY XWOSDL_SQLK_GRANULARITY
122
130void xwos_sqlk_init(struct xwos_sqlk * sql)
131{
132 xwosdl_sqlk_init(&sql->ossql);
133}
134
146{
147 return xwosdl_sqlk_rd_begin(&sql->ossql);
148}
149
160bool xwos_sqlk_rd_retry(struct xwos_sqlk * sql, xwsq_t start)
161{
162 return xwosdl_sqlk_rd_retry(&sql->ossql, start);
163}
164
173{
174 return xwosdl_sqlk_get_seq(&sql->ossql);
175}
176
187{
188 xwosdl_sqlk_rdex_lock(&sql->ossql);
189}
190
204{
205 return xwosdl_sqlk_rdex_trylock(&sql->ossql);
206}
207
216{
217 xwosdl_sqlk_rdex_unlock(&sql->ossql);
218}
219
231{
232 xwosdl_sqlk_rdex_lock_cpuirq(&sql->ossql);
233}
234
248{
249 return xwosdl_sqlk_rdex_trylock_cpuirq(&sql->ossql);
250}
251
260{
261 xwosdl_sqlk_rdex_unlock_cpuirq(&sql->ossql);
262}
263
276 xwreg_t * cpuirq)
277{
278 xwosdl_sqlk_rdex_lock_cpuirqsv(&sql->ossql, cpuirq);
279}
280
295 xwreg_t * cpuirq)
296{
297 return xwosdl_sqlk_rdex_trylock_cpuirqsv(&sql->ossql, cpuirq);
298}
299
309 xwreg_t cpuirq)
310{
311 xwosdl_sqlk_rdex_unlock_cpuirqrs(&sql->ossql, cpuirq);
312}
313
328 const xwirq_t irqs[],
329 xwsz_t num)
330{
331 xwosdl_sqlk_rdex_lock_irqs(&sql->ossql, irqs, num);
332}
333
350 const xwirq_t irqs[],
351 xwsz_t num)
352{
353 return xwosdl_sqlk_rdex_trylock_irqs(&sql->ossql, irqs, num);
354}
355
366 const xwirq_t irqs[],
367 xwsz_t num)
368{
369 xwosdl_sqlk_rdex_unlock_irqs(&sql->ossql, irqs, num);
370}
371
387 const xwirq_t irqs[],
388 xwreg_t flags[], xwsz_t num)
389{
390 xwosdl_sqlk_rdex_lock_irqssv(&sql->ossql, irqs, flags, num);
391}
392
410 const xwirq_t irqs[],
411 xwreg_t flags[], xwsz_t num)
412{
413 return xwosdl_sqlk_rdex_trylock_irqssv(&sql->ossql, irqs, flags, num);
414}
415
427 const xwirq_t irqs[],
428 xwreg_t flags[], xwsz_t num)
429{
430 xwosdl_sqlk_rdex_unlock_irqsrs(&sql->ossql, irqs, flags, num);
431}
432
445{
446 xwosdl_sqlk_rdex_lock_bh(&sql->ossql);
447}
448
463{
464 return xwosdl_sqlk_rdex_trylock_bh(&sql->ossql);
465}
466
475{
476 xwosdl_sqlk_rdex_unlock_bh(&sql->ossql);
477}
478
488void xwos_sqlk_wr_lock(struct xwos_sqlk * sql)
489{
490 xwosdl_sqlk_wr_lock(&sql->ossql);
491}
492
504{
505 return xwosdl_sqlk_wr_trylock(&sql->ossql);
506}
507
518{
519 xwosdl_sqlk_wr_unlock(&sql->ossql);
520}
521
533{
534 xwosdl_sqlk_wr_lock_cpuirq(&sql->ossql);
535}
536
550{
551 return xwosdl_sqlk_wr_trylock_cpuirq(&sql->ossql);
552}
553
562{
563 xwosdl_sqlk_wr_unlock_cpuirq(&sql->ossql);
564}
565
578 xwreg_t * cpuirq)
579{
580 xwosdl_sqlk_wr_lock_cpuirqsv(&sql->ossql, cpuirq);
581}
582
597 xwreg_t * cpuirq)
598{
599 return xwosdl_sqlk_wr_trylock_cpuirqsv(&sql->ossql, cpuirq);
600}
601
611 xwreg_t cpuirq)
612{
613 xwosdl_sqlk_wr_unlock_cpuirqrs(&sql->ossql, cpuirq);
614}
615
630 const xwirq_t irqs[],
631 xwsz_t num)
632{
633 xwosdl_sqlk_wr_lock_irqs(&sql->ossql, irqs, num);
634}
635
652 const xwirq_t irqs[],
653 xwsz_t num)
654{
655 return xwosdl_sqlk_wr_trylock_irqs(&sql->ossql, irqs, num);
656}
657
668 const xwirq_t irqs[],
669 xwsz_t num)
670{
671 xwosdl_sqlk_wr_unlock_irqs(&sql->ossql, irqs, num);
672}
673
674
690 const xwirq_t irqs[],
691 xwreg_t flags[], xwsz_t num)
692{
693 xwosdl_sqlk_wr_lock_irqssv(&sql->ossql, irqs, flags, num);
694}
695
713 const xwirq_t irqs[],
714 xwreg_t flags[], xwsz_t num)
715{
716 return xwosdl_sqlk_wr_trylock_irqssv(&sql->ossql, irqs, flags, num);
717}
718
730 const xwirq_t irqs[],
731 xwreg_t flags[], xwsz_t num)
732{
733 xwosdl_sqlk_wr_unlock_irqsrs(&sql->ossql, irqs, flags, num);
734}
735
748{
749 xwosdl_sqlk_wr_lock_bh(&sql->ossql);
750}
751
766{
767 return xwosdl_sqlk_wr_trylock_bh(&sql->ossql);
768}
769
780{
781 xwosdl_sqlk_wr_unlock_bh(&sql->ossql);
782}
783
788#endif /* xwos/osal/lock/seqlock.h */
#define __xwos_inline_api
Definition compiler.h:179
signed long xwer_t
Definition type.h:554
signed int xwirq_t
Definition type.h:517
unsigned long xwsz_t
Definition type.h:339
unsigned long xwsq_t
Definition type.h:445
xwptr_t xwreg_t
Definition type.h:409
static xwer_t xwos_sqlk_wr_trylock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:尝试开启写临界区,保存本地CPU的中断标志并关闭
Definition seqlock.h:596
static void xwos_sqlk_rdex_lock(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区
Definition seqlock.h:186
static void xwos_sqlk_wr_unlock(struct xwos_sqlk *sql)
XWOS API:关闭写临界区
Definition seqlock.h:517
static void xwos_sqlk_rdex_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭独占读临界区,恢复部分中断的中断标志
Definition seqlock.h:426
static void xwos_sqlk_wr_lock(struct xwos_sqlk *sql)
XWOS API:开启写临界区
Definition seqlock.h:488
static void xwos_sqlk_rdex_unlock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:关闭独占读临界区,并开启部分中断
Definition seqlock.h:365
static void xwos_sqlk_init(struct xwos_sqlk *sql)
XWOS API:初始化顺序锁
Definition seqlock.h:130
static void xwos_sqlk_rdex_lock_cpuirq(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区,并关闭本地CPU的中断
Definition seqlock.h:230
static xwer_t xwos_sqlk_wr_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启写临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:712
static void xwos_sqlk_rdex_lock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:开启独占读临界区,并关闭部分中断
Definition seqlock.h:327
static void xwos_sqlk_rdex_unlock(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区
Definition seqlock.h:215
static void xwos_sqlk_wr_unlock_bh(struct xwos_sqlk *sql)
XWOS API:关闭写临界区,开启本地CPU的中断底半部
Definition seqlock.h:779
static void xwos_sqlk_wr_unlock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:关闭写临界区,并开启部分中断
Definition seqlock.h:667
static xwsq_t xwos_sqlk_get_seq(struct xwos_sqlk *sql)
XWOS API:获取顺序锁的顺序值
Definition seqlock.h:172
static xwer_t xwos_sqlk_wr_trylock_bh(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区,关闭本地CPU的中断底半部
Definition seqlock.h:765
static void xwos_sqlk_rdex_unlock_bh(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区,开启本地CPU的中断底半部
Definition seqlock.h:474
static void xwos_sqlk_wr_lock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:开启写临界区,并关闭部分中断
Definition seqlock.h:629
static xwer_t xwos_sqlk_wr_trylock(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区
Definition seqlock.h:503
static xwer_t xwos_sqlk_rdex_trylock_cpuirq(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区,并关闭本地CPU的中断
Definition seqlock.h:247
static void xwos_sqlk_wr_lock_cpuirq(struct xwos_sqlk *sql)
XWOS API:开启写临界区,并关闭本地CPU的中断
Definition seqlock.h:532
static void xwos_sqlk_wr_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启写临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:689
static void xwos_sqlk_wr_unlock_cpuirq(struct xwos_sqlk *sql)
XWOS API:关闭写临界区,并开启本地CPU的中断
Definition seqlock.h:561
static void xwos_sqlk_rdex_unlock_cpuirqrs(struct xwos_sqlk *sql, xwreg_t cpuirq)
XWOS API:关闭独占读临界区,恢复本地CPU的中断标志
Definition seqlock.h:308
static void xwos_sqlk_rdex_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启独占读临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:386
static xwer_t xwos_sqlk_rdex_trylock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:尝试开启独占读临界区,保存本地CPU的中断标志并关闭
Definition seqlock.h:294
static xwsq_t xwos_sqlk_rd_begin(struct xwos_sqlk *sql)
XWOS API:开启共享读临界区
Definition seqlock.h:145
static void xwos_sqlk_rdex_lock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:开启独占读临界区,保存本地CPU的中断标志并关闭
Definition seqlock.h:275
static xwer_t xwos_sqlk_wr_trylock_cpuirq(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区,并关闭本地CPU的中断
Definition seqlock.h:549
static xwer_t xwos_sqlk_rdex_trylock(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区
Definition seqlock.h:203
static xwer_t xwos_sqlk_rdex_trylock_bh(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区,关闭本地CPU的中断底半部
Definition seqlock.h:462
static void xwos_sqlk_wr_lock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:开启写临界区,保存本地CPU的中断标志并关闭
Definition seqlock.h:577
static bool xwos_sqlk_rd_retry(struct xwos_sqlk *sql, xwsq_t start)
XWOS API:关闭共享读临界区,并检查是否需要重试
Definition seqlock.h:160
static void xwos_sqlk_wr_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭写临界区,恢复部分中断的中断标志
Definition seqlock.h:729
static xwer_t xwos_sqlk_wr_trylock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:尝试开启写临界区,并关闭部分中断
Definition seqlock.h:651
static xwer_t xwos_sqlk_rdex_trylock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:尝试开启独占读临界区,并关闭部分中断
Definition seqlock.h:349
static void xwos_sqlk_rdex_lock_bh(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区,关闭本地CPU的中断底半部
Definition seqlock.h:444
static void xwos_sqlk_wr_unlock_cpuirqrs(struct xwos_sqlk *sql, xwreg_t cpuirq)
XWOS API:关闭写临界区,恢复本地CPU的中断标志
Definition seqlock.h:610
static void xwos_sqlk_rdex_unlock_cpuirq(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区,并开启本地CPU的中断
Definition seqlock.h:259
static xwer_t xwos_sqlk_rdex_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:409
static void xwos_sqlk_wr_lock_bh(struct xwos_sqlk *sql)
XWOS API:开启写临界区,关闭本地CPU的中断底半部
Definition seqlock.h:747
操作系统抽象层:异常与中断
操作系统抽象层:顺序锁接口描述
XWOS API:顺序锁
Definition seqlock.h:109
xwosdl_sqlk_t ossql
Definition seqlock.h:110
XWOS的标准头文件