Renesas/RX: add RX setjmp, ARCH_RENESAS_RX, and RX65N ioctl
This commit is contained in:
parent
87fabb2bc7
commit
863834057b
@ -57,25 +57,32 @@ config ARCH_SH1
|
|||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config ARCH_RENESAS_RX
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
select ARCH_HAVE_SETJMP
|
||||||
|
select CYGWIN_WINTOOL if WINDOWS_CYGWIN
|
||||||
|
|
||||||
config ARCH_RX65N
|
config ARCH_RX65N
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
select CYGWIN_WINTOOL if WINDOWS_CYGWIN
|
select ARCH_RENESAS_RX
|
||||||
|
|
||||||
config ARCH_RX65N_RSK1MB
|
config ARCH_RX65N_RSK1MB
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
select CYGWIN_WINTOOL if WINDOWS_CYGWIN
|
select ARCH_RENESAS_RX
|
||||||
|
|
||||||
config ARCH_RX65N_RSK2MB
|
config ARCH_RX65N_RSK2MB
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
select CYGWIN_WINTOOL if WINDOWS_CYGWIN
|
select ARCH_RENESAS_RX
|
||||||
|
|
||||||
|
|
||||||
config ARCH_RX65N_GRROSE
|
config ARCH_RX65N_GRROSE
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
select CYGWIN_WINTOOL if WINDOWS_CYGWIN
|
select ARCH_RENESAS_RX
|
||||||
|
|
||||||
config ARCH_M16C
|
config ARCH_M16C
|
||||||
bool
|
bool
|
||||||
@ -85,10 +92,7 @@ config ARCH_CHIP
|
|||||||
string
|
string
|
||||||
default "sh1" if ARCH_SH1
|
default "sh1" if ARCH_SH1
|
||||||
default "m16c" if ARCH_M16C
|
default "m16c" if ARCH_M16C
|
||||||
default "rx65n" if ARCH_RX65N
|
default "rx65n" if ARCH_RENESAS_RX
|
||||||
default "rx65n" if ARCH_RX65N_RSK1MB
|
|
||||||
default "rx65n" if ARCH_RX65N_RSK2MB
|
|
||||||
default "rx65n" if ARCH_RX65N_GRROSE
|
|
||||||
|
|
||||||
source arch/renesas/src/common/Kconfig
|
source arch/renesas/src/common/Kconfig
|
||||||
source arch/renesas/src/m16c/Kconfig
|
source arch/renesas/src/m16c/Kconfig
|
||||||
|
56
arch/renesas/include/setjmp.h
Normal file
56
arch/renesas/include/setjmp.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* arch/renesas/include/setjmp.h
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __ARCH_RENESAS_INCLUDE_SETJUMP_H
|
||||||
|
#define __ARCH_RENESAS_INCLUDE_SETJUMP_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
#include <nuttx/compiler.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Types
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_ARCH_RENESAS_RX)
|
||||||
|
struct setjmp_buf_s
|
||||||
|
{
|
||||||
|
unsigned regs[10];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Traditional typedef for setjmp_buf */
|
||||||
|
|
||||||
|
typedef struct setjmp_buf_s jmp_buf[1];
|
||||||
|
|
||||||
|
#else
|
||||||
|
# error "setjmp() not compiled!"
|
||||||
|
#endif /* CONFIG_ARCH_RX... */
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int setjmp(jmp_buf env);
|
||||||
|
void longjmp(jmp_buf env, int val) noreturn_function;
|
||||||
|
|
||||||
|
#endif /* __ARCH_RENESAS_INCLUDE_SETJUMP_H */
|
@ -281,6 +281,7 @@ static int up_setup(struct uart_dev_s *dev);
|
|||||||
static void up_shutdown(struct uart_dev_s *dev);
|
static void up_shutdown(struct uart_dev_s *dev);
|
||||||
static int up_attach(struct uart_dev_s *dev);
|
static int up_attach(struct uart_dev_s *dev);
|
||||||
static void up_detach(struct uart_dev_s *dev);
|
static void up_detach(struct uart_dev_s *dev);
|
||||||
|
static int up_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||||
static int up_xmtinterrupt(int irq, void *context, FAR void *arg);
|
static int up_xmtinterrupt(int irq, void *context, FAR void *arg);
|
||||||
static int up_rcvinterrupt(int irq, void *context, FAR void *arg);
|
static int up_rcvinterrupt(int irq, void *context, FAR void *arg);
|
||||||
static int up_eriinterrupt(int irq, void *context, FAR void *arg);
|
static int up_eriinterrupt(int irq, void *context, FAR void *arg);
|
||||||
@ -365,6 +366,7 @@ struct uart_ops_s g_sci_ops =
|
|||||||
.attach = up_attach,
|
.attach = up_attach,
|
||||||
.detach = up_detach,
|
.detach = up_detach,
|
||||||
.receive = up_receive,
|
.receive = up_receive,
|
||||||
|
.ioctl = up_ioctl,
|
||||||
.rxint = up_rxint,
|
.rxint = up_rxint,
|
||||||
.rxavailable = up_rxavailable,
|
.rxavailable = up_rxavailable,
|
||||||
#ifdef CONFIG_SERIAL_IFLOWCONTROL
|
#ifdef CONFIG_SERIAL_IFLOWCONTROL
|
||||||
@ -1282,6 +1284,31 @@ static int up_xmtinterrupt(int irq, void *context, FAR void *arg)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_ioctl
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* All ioctl calls will be routed through this method
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int up_ioctl(struct file *filep, int cmd, unsigned long arg)
|
||||||
|
{
|
||||||
|
int ret = OK;
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_SERIAL_TERMIOS
|
||||||
|
#error CONFIG_SERIAL_TERMIOS NOT IMPLEMENTED
|
||||||
|
#endif /* CONFIG_SERIAL_TERMIOS */
|
||||||
|
default:
|
||||||
|
ret = -ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_receive
|
* Name: up_receive
|
||||||
*
|
*
|
||||||
|
@ -174,5 +174,8 @@ endif
|
|||||||
if ARCH_XTENSA
|
if ARCH_XTENSA
|
||||||
source libs/libc/machine/xtensa/Kconfig
|
source libs/libc/machine/xtensa/Kconfig
|
||||||
endif
|
endif
|
||||||
|
if ARCH_RENESAS
|
||||||
|
source libs/libc/machine/renesas/Kconfig
|
||||||
|
endif
|
||||||
|
|
||||||
endmenu # Architecture-Specific Support
|
endmenu # Architecture-Specific Support
|
||||||
|
@ -33,3 +33,6 @@ endif
|
|||||||
ifeq ($(CONFIG_ARCH_XTENSA),y)
|
ifeq ($(CONFIG_ARCH_XTENSA),y)
|
||||||
include $(TOPDIR)/libs/libc/machine/xtensa/Make.defs
|
include $(TOPDIR)/libs/libc/machine/xtensa/Make.defs
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(CONFIG_ARCH_RENESAS),y)
|
||||||
|
include $(TOPDIR)/libs/libc/machine/renesas/Make.defs
|
||||||
|
endif
|
||||||
|
9
libs/libc/machine/renesas/Kconfig
Normal file
9
libs/libc/machine/renesas/Kconfig
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# For a description of the syntax of this configuration file,
|
||||||
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||||
|
#
|
||||||
|
|
||||||
|
#if ARCH_RENESAS_RX
|
||||||
|
#source libs/libc/machine/renesas/rx/Kconfig
|
||||||
|
#endif
|
||||||
|
|
23
libs/libc/machine/renesas/Make.defs
Normal file
23
libs/libc/machine/renesas/Make.defs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
############################################################################
|
||||||
|
# libs/libc/machine/renesas/Make.defs
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership. The
|
||||||
|
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance with the
|
||||||
|
# License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_RENESAS_RX),y)
|
||||||
|
include $(TOPDIR)/libs/libc/machine/renesas/rx/Make.defs
|
||||||
|
endif
|
7
libs/libc/machine/renesas/rx/Kconfig
Normal file
7
libs/libc/machine/renesas/rx/Kconfig
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# For a description of the syntax of this configuration file,
|
||||||
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||||
|
#
|
||||||
|
|
||||||
|
if ARCH_RENESAS_RX
|
||||||
|
endif
|
26
libs/libc/machine/renesas/rx/Make.defs
Normal file
26
libs/libc/machine/renesas/rx/Make.defs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
############################################################################
|
||||||
|
# libs/libc/machine/renesas/rx/Make.defs
|
||||||
|
#
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership. The
|
||||||
|
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance with the
|
||||||
|
# License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_SETJMP_H),y)
|
||||||
|
ASRCS += arch_setjmp.S
|
||||||
|
endif
|
||||||
|
|
||||||
|
DEPPATH += --dep-path machine/renesas/rx/gnu
|
||||||
|
VPATH += :machine/renesas/rx/gnu
|
146
libs/libc/machine/renesas/rx/gnu/arch_setjmp.S
Normal file
146
libs/libc/machine/renesas/rx/gnu/arch_setjmp.S
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* libs/libc/machine/renesas/rx/gnu/arm_setjmp.S
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Symbols
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.global _setjmp
|
||||||
|
.global _longjmp
|
||||||
|
|
||||||
|
.file "setjmp.S"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: setjmp
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Given the pointer to a register save area (in R1), save the state of the
|
||||||
|
* all callee-saved registers
|
||||||
|
*
|
||||||
|
* C Function Prototype:
|
||||||
|
* int setjmp(jmp_buf env);
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* env - A pointer to the register save area in which to save the floating point
|
||||||
|
* registers and core registers. Since setjmp() can not be inlined, we
|
||||||
|
* only need to save the ABI-specified callee-saved registers.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* 0 setjmp called directly
|
||||||
|
* non-0 we justed returned from a longjmp()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
.type _setjmp, function
|
||||||
|
_setjmp:
|
||||||
|
/* save Stack Pointer */
|
||||||
|
mov.l r0, [r1]
|
||||||
|
|
||||||
|
/* Store callee-saved registers R6-R13 */
|
||||||
|
mov.l r6, 0x4[r1]
|
||||||
|
mov.l r7, 0x8[r1]
|
||||||
|
mov.l r8, 0xc[r1]
|
||||||
|
mov.l r9, 0x10[r1]
|
||||||
|
mov.l r10, 0x14[r1]
|
||||||
|
mov.l r11, 0x18[r1]
|
||||||
|
mov.l r12, 0x1c[r1]
|
||||||
|
mov.l r13, 0x20[r1]
|
||||||
|
|
||||||
|
/* get return address from stack */
|
||||||
|
mov.l [r0], r2
|
||||||
|
|
||||||
|
/* save return address */
|
||||||
|
mov.l r2, 0x24[r1]
|
||||||
|
|
||||||
|
/* return 0 */
|
||||||
|
mov #0, r1
|
||||||
|
rts
|
||||||
|
|
||||||
|
.size _setjmp, .-_setjmp
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: longjmp
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* The longjmp() function used the information saved in env to transfer control
|
||||||
|
* control back to the point where setjmp() was called and to restore ("rewind")
|
||||||
|
* the stack to its state at the time of the setjmp() call. When control is
|
||||||
|
* passed back to where setjmp() had been called, setjmp() will return with
|
||||||
|
* 'val', the second parameter passed to longjmp().
|
||||||
|
*
|
||||||
|
* C Function Prototype:
|
||||||
|
* void longjmp(jmp_buf env, int val);
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* jmp_buf env
|
||||||
|
* int val
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* This function does not return anything explicitly.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
.type _longjmp, function
|
||||||
|
_longjmp:
|
||||||
|
/* check if r2 is zero */
|
||||||
|
tst r2, r2
|
||||||
|
/* set r2 to 1 if it was zero */
|
||||||
|
stz #1, r2
|
||||||
|
|
||||||
|
/* restore stack pointer */
|
||||||
|
mov.l [r1], r0
|
||||||
|
|
||||||
|
/* get the saved return address */
|
||||||
|
mov.l 0x24[r1], r3
|
||||||
|
/* set our return address */
|
||||||
|
mov.l r3, [r0]
|
||||||
|
|
||||||
|
/* restore callee-saved registers R6-R13 */
|
||||||
|
mov.l 0x20[r1], r13
|
||||||
|
mov.l 0x1c[r1], r12
|
||||||
|
mov.l 0x18[r1], r11
|
||||||
|
mov.l 0x14[r1], r10
|
||||||
|
mov.l 0x10[r1], r9
|
||||||
|
mov.l 0xc[r1], r8
|
||||||
|
mov.l 0x8[r1], r7
|
||||||
|
mov.l 0x4[r1], r6
|
||||||
|
|
||||||
|
/* return val */
|
||||||
|
mov.l r2, r1
|
||||||
|
/* return */
|
||||||
|
rts
|
||||||
|
|
||||||
|
.size _longjmp, .-_longjmp
|
||||||
|
.end
|
Loading…
x
Reference in New Issue
Block a user