13#ifndef __xwos_osal_lock_seqlock_h__
14#define __xwos_osal_lock_seqlock_h__
116#define XWOS_SQLK_INITIALIZER { .ossql = XWOSDL_SQLK_INITIALIZER, }
121#define XWOS_SQLK_GRANULARITY XWOSDL_SQLK_GRANULARITY
132 xwosdl_sqlk_init(&sql->
ossql);
147 return xwosdl_sqlk_rd_begin(&sql->
ossql);
162 return xwosdl_sqlk_rd_retry(&sql->
ossql, start);
174 return xwosdl_sqlk_get_seq(&sql->
ossql);
188 xwosdl_sqlk_rdex_lock(&sql->
ossql);
205 return xwosdl_sqlk_rdex_trylock(&sql->
ossql);
217 xwosdl_sqlk_rdex_unlock(&sql->
ossql);
232 xwosdl_sqlk_rdex_lock_cpuirq(&sql->
ossql);
249 return xwosdl_sqlk_rdex_trylock_cpuirq(&sql->
ossql);
261 xwosdl_sqlk_rdex_unlock_cpuirq(&sql->
ossql);
278 xwosdl_sqlk_rdex_lock_cpuirqsv(&sql->
ossql, cpuirq);
297 return xwosdl_sqlk_rdex_trylock_cpuirqsv(&sql->
ossql, cpuirq);
311 xwosdl_sqlk_rdex_unlock_cpuirqrs(&sql->
ossql, cpuirq);
331 xwosdl_sqlk_rdex_lock_irqs(&sql->
ossql, irqs, num);
353 return xwosdl_sqlk_rdex_trylock_irqs(&sql->
ossql, irqs, num);
369 xwosdl_sqlk_rdex_unlock_irqs(&sql->
ossql, irqs, num);
390 xwosdl_sqlk_rdex_lock_irqssv(&sql->
ossql, irqs, flags, num);
413 return xwosdl_sqlk_rdex_trylock_irqssv(&sql->
ossql, irqs, flags, num);
430 xwosdl_sqlk_rdex_unlock_irqsrs(&sql->
ossql, irqs, flags, num);
446 xwosdl_sqlk_rdex_lock_bh(&sql->
ossql);
464 return xwosdl_sqlk_rdex_trylock_bh(&sql->
ossql);
476 xwosdl_sqlk_rdex_unlock_bh(&sql->
ossql);
490 xwosdl_sqlk_wr_lock(&sql->
ossql);
505 return xwosdl_sqlk_wr_trylock(&sql->
ossql);
519 xwosdl_sqlk_wr_unlock(&sql->
ossql);
534 xwosdl_sqlk_wr_lock_cpuirq(&sql->
ossql);
551 return xwosdl_sqlk_wr_trylock_cpuirq(&sql->
ossql);
563 xwosdl_sqlk_wr_unlock_cpuirq(&sql->
ossql);
580 xwosdl_sqlk_wr_lock_cpuirqsv(&sql->
ossql, cpuirq);
599 return xwosdl_sqlk_wr_trylock_cpuirqsv(&sql->
ossql, cpuirq);
613 xwosdl_sqlk_wr_unlock_cpuirqrs(&sql->
ossql, cpuirq);
633 xwosdl_sqlk_wr_lock_irqs(&sql->
ossql, irqs, num);
655 return xwosdl_sqlk_wr_trylock_irqs(&sql->
ossql, irqs, num);
671 xwosdl_sqlk_wr_unlock_irqs(&sql->
ossql, irqs, num);
693 xwosdl_sqlk_wr_lock_irqssv(&sql->
ossql, irqs, flags, num);
716 return xwosdl_sqlk_wr_trylock_irqssv(&sql->
ossql, irqs, flags, num);
733 xwosdl_sqlk_wr_unlock_irqsrs(&sql->
ossql, irqs, flags, num);
749 xwosdl_sqlk_wr_lock_bh(&sql->
ossql);
767 return xwosdl_sqlk_wr_trylock_bh(&sql->
ossql);
781 xwosdl_sqlk_wr_unlock_bh(&sql->
ossql);
#define __xwos_inline_api
static xwer_t xwos_sqlk_wr_trylock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:尝试开启写临界区,保存本地CPU的中断标志并关闭
static void xwos_sqlk_rdex_lock(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区
static void xwos_sqlk_wr_unlock(struct xwos_sqlk *sql)
XWOS API:关闭写临界区
static void xwos_sqlk_rdex_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭独占读临界区,恢复部分中断的中断标志
static void xwos_sqlk_wr_lock(struct xwos_sqlk *sql)
XWOS API:开启写临界区
static void xwos_sqlk_rdex_unlock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:关闭独占读临界区,并开启部分中断
static void xwos_sqlk_init(struct xwos_sqlk *sql)
XWOS API:初始化顺序锁
static void xwos_sqlk_rdex_lock_cpuirq(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区,并关闭本地CPU的中断
static xwer_t xwos_sqlk_wr_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启写临界区,保存部分中断的中断标志并关闭
static void xwos_sqlk_rdex_lock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:开启独占读临界区,并关闭部分中断
static void xwos_sqlk_rdex_unlock(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区
static void xwos_sqlk_wr_unlock_bh(struct xwos_sqlk *sql)
XWOS API:关闭写临界区,开启本地CPU的中断底半部
static void xwos_sqlk_wr_unlock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:关闭写临界区,并开启部分中断
static xwsq_t xwos_sqlk_get_seq(struct xwos_sqlk *sql)
XWOS API:获取顺序锁的顺序值
static xwer_t xwos_sqlk_wr_trylock_bh(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区,关闭本地CPU的中断底半部
static void xwos_sqlk_rdex_unlock_bh(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区,开启本地CPU的中断底半部
static void xwos_sqlk_wr_lock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:开启写临界区,并关闭部分中断
static xwer_t xwos_sqlk_wr_trylock(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区
static xwer_t xwos_sqlk_rdex_trylock_cpuirq(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区,并关闭本地CPU的中断
static void xwos_sqlk_wr_lock_cpuirq(struct xwos_sqlk *sql)
XWOS API:开启写临界区,并关闭本地CPU的中断
static void xwos_sqlk_wr_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启写临界区,保存部分中断的中断标志并关闭
static void xwos_sqlk_wr_unlock_cpuirq(struct xwos_sqlk *sql)
XWOS API:关闭写临界区,并开启本地CPU的中断
static void xwos_sqlk_rdex_unlock_cpuirqrs(struct xwos_sqlk *sql, xwreg_t cpuirq)
XWOS API:关闭独占读临界区,恢复本地CPU的中断标志
static void xwos_sqlk_rdex_lock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:开启独占读临界区,保存部分中断的中断标志并关闭
static xwer_t xwos_sqlk_rdex_trylock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:尝试开启独占读临界区,保存本地CPU的中断标志并关闭
static xwsq_t xwos_sqlk_rd_begin(struct xwos_sqlk *sql)
XWOS API:开启共享读临界区
static void xwos_sqlk_rdex_lock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:开启独占读临界区,保存本地CPU的中断标志并关闭
static xwer_t xwos_sqlk_wr_trylock_cpuirq(struct xwos_sqlk *sql)
XWOS API:尝试开启写临界区,并关闭本地CPU的中断
static xwer_t xwos_sqlk_rdex_trylock(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区
static xwer_t xwos_sqlk_rdex_trylock_bh(struct xwos_sqlk *sql)
XWOS API:尝试开启独占读临界区,关闭本地CPU的中断底半部
static void xwos_sqlk_wr_lock_cpuirqsv(struct xwos_sqlk *sql, xwreg_t *cpuirq)
XWOS API:开启写临界区,保存本地CPU的中断标志并关闭
static bool xwos_sqlk_rd_retry(struct xwos_sqlk *sql, xwsq_t start)
XWOS API:关闭共享读临界区,并检查是否需要重试
static void xwos_sqlk_wr_unlock_irqsrs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:关闭写临界区,恢复部分中断的中断标志
static xwer_t xwos_sqlk_wr_trylock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:尝试开启写临界区,并关闭部分中断
static xwer_t xwos_sqlk_rdex_trylock_irqs(struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
XWOS API:尝试开启独占读临界区,并关闭部分中断
static void xwos_sqlk_rdex_lock_bh(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区,关闭本地CPU的中断底半部
static void xwos_sqlk_wr_unlock_cpuirqrs(struct xwos_sqlk *sql, xwreg_t cpuirq)
XWOS API:关闭写临界区,恢复本地CPU的中断标志
static void xwos_sqlk_rdex_unlock_cpuirq(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区,并开启本地CPU的中断
static xwer_t xwos_sqlk_rdex_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭
static void xwos_sqlk_wr_lock_bh(struct xwos_sqlk *sql)
XWOS API:开启写临界区,关闭本地CPU的中断底半部