board/control: add irq affinity control
add support for set an IRQ affinity to CPUs by software Signed-off-by: chao an <anchao@lixiang.com>
This commit is contained in:
parent
4b3b22cbeb
commit
f732428331
@ -4703,6 +4703,13 @@ config BOARDCTL_TESTSET
|
|||||||
Enables support for the BOARDIOC_SPINLOCK boardctl() command.
|
Enables support for the BOARDIOC_SPINLOCK boardctl() command.
|
||||||
Architecture specific logic must provide up_testset() interface.
|
Architecture specific logic must provide up_testset() interface.
|
||||||
|
|
||||||
|
config BOARDCTL_IRQ_AFFINITY
|
||||||
|
bool "Set an IRQ affinity to CPUs by software"
|
||||||
|
default n
|
||||||
|
depends on SMP
|
||||||
|
---help---
|
||||||
|
Enables support for Set an IRQ affinity to CPUs by software.
|
||||||
|
|
||||||
config BOARDCTL_IOCTL
|
config BOARDCTL_IOCTL
|
||||||
bool "Board-specific boardctl() commands"
|
bool "Board-specific boardctl() commands"
|
||||||
default n
|
default n
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <nuttx/arch.h>
|
||||||
#include <nuttx/board.h>
|
#include <nuttx/board.h>
|
||||||
#include <nuttx/lib/modlib.h>
|
#include <nuttx/lib/modlib.h>
|
||||||
#include <nuttx/binfmt/symtab.h>
|
#include <nuttx/binfmt/symtab.h>
|
||||||
@ -835,6 +836,25 @@ int boardctl(unsigned int cmd, uintptr_t arg)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_IRQ_AFFINITY
|
||||||
|
/* CMD: BOARDIOC_IRQ_AFFINITY
|
||||||
|
* DESCRIPTION: Set an IRQ affinity by software.
|
||||||
|
* ARG: Integer array:
|
||||||
|
member 0 is the interrupt number
|
||||||
|
member 1 is the CPU index
|
||||||
|
* CONFIGURATION: CONFIG_BOARDCTL_IRQ_AFFINITY
|
||||||
|
* DEPENDENCIES: Bound Multi-Processing (CONFIG_BMP)
|
||||||
|
*/
|
||||||
|
|
||||||
|
case BOARDIOC_IRQ_AFFINITY:
|
||||||
|
{
|
||||||
|
FAR unsigned int *affinity = (FAR unsigned int *)arg;
|
||||||
|
up_affinity_irq(affinity[0], affinity[1]);
|
||||||
|
ret = OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BOARDCTL_IOCTL
|
#ifdef CONFIG_BOARDCTL_IOCTL
|
||||||
|
@ -209,6 +209,7 @@
|
|||||||
#define BOARDIOC_SWITCH_BOOT _BOARDIOC(0x0013)
|
#define BOARDIOC_SWITCH_BOOT _BOARDIOC(0x0013)
|
||||||
#define BOARDIOC_BOOT_IMAGE _BOARDIOC(0x0014)
|
#define BOARDIOC_BOOT_IMAGE _BOARDIOC(0x0014)
|
||||||
#define BOARDIOC_RESET_CAUSE _BOARDIOC(0x0015)
|
#define BOARDIOC_RESET_CAUSE _BOARDIOC(0x0015)
|
||||||
|
#define BOARDIOC_IRQ_AFFINITY _BOARDIOC(0x0016)
|
||||||
|
|
||||||
/* If CONFIG_BOARDCTL_IOCTL=y, then board-specific commands will be support.
|
/* If CONFIG_BOARDCTL_IOCTL=y, then board-specific commands will be support.
|
||||||
* In this case, all commands not recognized by boardctl() will be forwarded
|
* In this case, all commands not recognized by boardctl() will be forwarded
|
||||||
@ -217,7 +218,7 @@
|
|||||||
* User defined board commands may begin with this value:
|
* User defined board commands may begin with this value:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define BOARDIOC_USER _BOARDIOC(0x0016)
|
#define BOARDIOC_USER _BOARDIOC(0x0017)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Type Definitions
|
* Public Type Definitions
|
||||||
|
Loading…
Reference in New Issue
Block a user