New API: chopstx_intr_done.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
||||
2018-09-26 NIIBE Yutaka <gniibe@fsij.org>
|
||||
|
||||
* chopstx.h (chopstx_intr_done): New function.
|
||||
* chopstx.c (chopstx_intr_done): New function.
|
||||
(chopstx_poll): Don't call chx_clr_intr.
|
||||
Ensure data memory barrier for interrupt handling.
|
||||
|
||||
* chopstx-cortex-m.c (chx_dmb): New static function.
|
||||
* chopstx-gnu-linux.c (chx_dmb): Ditto.
|
||||
|
||||
2018-09-21 NIIBE Yutaka <gniibe@fsij.org>
|
||||
|
||||
* mcu/stm32.h (struct GPIO, struct FLASH): Moved from...
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* chopstx-cortex-m.c - Threads and only threads: Arch specific code
|
||||
* for Cortex-M0/M3
|
||||
*
|
||||
* Copyright (C) 2013, 2014, 2015, 2016, 2017
|
||||
* Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018
|
||||
* Flying Stone Technology
|
||||
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
||||
*
|
||||
@@ -28,6 +28,13 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/* Data Memory Barrier. */
|
||||
static void
|
||||
chx_dmb (void)
|
||||
{
|
||||
asm volatile ("dmb" : : : "memory");
|
||||
}
|
||||
|
||||
/* Saved registers on the stack. */
|
||||
struct chx_stack_regs {
|
||||
uint32_t reg[8]; /* r0, r1, r2, r3, r12, lr, pc, xpsr */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* chopstx-gnu-linux.c - Threads and only threads: Arch specific code
|
||||
* for GNU/Linux emulation
|
||||
*
|
||||
* Copyright (C) 2017 Flying Stone Technology
|
||||
* Copyright (C) 2017, 2018 Flying Stone Technology
|
||||
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
||||
*
|
||||
* This file is a part of Chopstx, a thread library for embedded.
|
||||
@@ -32,6 +32,13 @@
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
/* Data Memory Barrier. */
|
||||
static void
|
||||
chx_dmb (void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static sigset_t ss_cur;
|
||||
|
||||
static void
|
||||
|
||||
25
chopstx.c
25
chopstx.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* chopstx.c - Threads and only threads.
|
||||
*
|
||||
* Copyright (C) 2013, 2014, 2015, 2016, 2017
|
||||
* Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018
|
||||
* Flying Stone Technology
|
||||
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
||||
*
|
||||
@@ -1034,6 +1034,23 @@ chopstx_intr_wait (chopstx_intr_t *intr)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* chopstx_intr_done - Finish an IRQ handling
|
||||
* @intr: Pointer to INTR structure
|
||||
*
|
||||
* Finish for the interrupt @intr occured.
|
||||
*
|
||||
*/
|
||||
void
|
||||
chopstx_intr_done (chopstx_intr_t *intr)
|
||||
{
|
||||
chx_dmb ();
|
||||
|
||||
if (intr->ready)
|
||||
chx_clr_intr (intr->irq_num);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* chopstx_cleanup_push - Register a clean-up
|
||||
* @clp: Pointer to clean-up structure
|
||||
@@ -1332,6 +1349,7 @@ chopstx_poll (uint32_t *usec_p, int n, struct chx_poll_head *const pd_array[])
|
||||
struct chx_poll_head *pd;
|
||||
int r = 0;
|
||||
|
||||
chx_dmb ();
|
||||
chopstx_testcancel ();
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
@@ -1384,6 +1402,7 @@ chopstx_poll (uint32_t *usec_p, int n, struct chx_poll_head *const pd_array[])
|
||||
while (r == 0);
|
||||
}
|
||||
|
||||
chx_dmb ();
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
pd = pd_array[i];
|
||||
@@ -1404,9 +1423,7 @@ chopstx_poll (uint32_t *usec_p, int n, struct chx_poll_head *const pd_array[])
|
||||
{
|
||||
struct chx_intr *intr = (struct chx_intr *)pd;
|
||||
|
||||
if (intr->ready)
|
||||
chx_clr_intr (intr->irq_num);
|
||||
else
|
||||
if (intr->ready == 0)
|
||||
{
|
||||
chx_spin_lock (&q_intr.lock);
|
||||
ll_dequeue ((struct chx_pq *)&px[i]);
|
||||
|
||||
@@ -155,7 +155,8 @@ typedef struct chx_intr chopstx_intr_t;
|
||||
|
||||
void chopstx_claim_irq (chopstx_intr_t *intr, uint8_t irq_num);
|
||||
|
||||
void chopstx_intr_wait (chopstx_intr_t *intr); /* DEPRECATED */
|
||||
void chopstx_intr_wait (chopstx_intr_t *intr);
|
||||
void chopstx_intr_done (chopstx_intr_t *intr);
|
||||
|
||||
|
||||
int chopstx_poll (uint32_t *usec_p, int n,
|
||||
|
||||
Reference in New Issue
Block a user