diff --git a/apps/examples/pashello/README.txt b/apps/examples/pashello/README.txt index b976f18cf..b19846966 100644 --- a/apps/examples/pashello/README.txt +++ b/apps/examples/pashello/README.txt @@ -30,5 +30,5 @@ device.c device.c implements a simple device driver. Reads from this device will access the in-memory copy of hello.pex This device driver is - registered as /dev/pashello in the psuedo filesystem. + registered as /dev/pashello in the pseudo filesystem. diff --git a/apps/nshlib/README.txt b/apps/nshlib/README.txt index a6cb2d7d7..d8edd8969 100644 --- a/apps/nshlib/README.txt +++ b/apps/nshlib/README.txt @@ -505,14 +505,14 @@ o mkfatfs Format a fat file system on the block device specified by path. NSH provides this command to access the mkfatfs() NuttX API. - This block device must reside in the NuttX psuedo filesystem and + This block device must reside in the NuttX pseudo filesystem and must have been created by some call to register_blockdriver() (see include/nuttx/fs/fs.h). o mkfifo Creates a FIFO character device anywhere in the pseudo file system, - creating whatever psuedo directories that may be needed to complete + creating whatever pseudo directories that may be needed to complete the full path. By convention, however, device drivers are place in the standard /dev directory. After it is created, the FIFO device may be used as any other device driver. NSH provides this command @@ -584,7 +584,7 @@ o mount [-t ] If the mount parameters are provied on the command after the 'mount' command, then the 'mount' command will mount a file system in the - NuttX psuedo-file system. 'mount' performs a three way association, + NuttX pseudo-file system. 'mount' performs a three way association, binding: File system. The '-t ' option identifies the type of @@ -592,19 +592,19 @@ o mount [-t ] of this writing, vfat is the only supported value for Block Device. The argument is the full or relative - path to a block driver inode in the psuedo filesystem. By convention, + path to a block driver inode in the pseudo filesystem. By convention, this is a name under the /dev sub-directory. This must have been previously formatted with the same file system type as specified by - Mount Point. The mount point is the location in the psuedo file + Mount Point. The mount point is the location in the pseudo file system where the mounted volume will appear. This mount point - can only reside in the NuttX psuedo filesystem. By convention, this + can only reside in the NuttX pseudo filesystem. By convention, this mount point is a subdirectory under /mnt. The mount command will - create whatever psuedo directories that may be needed to complete + create whatever pseudo directories that may be needed to complete the full path but the full path must not already exist. - After the volume has been mounted in the NuttX psuedo file + After the volume has been mounted in the NuttX pseudo file system, it may be access in the same way as other objects in the file system. diff --git a/apps/nshlib/nsh_parse.c b/apps/nshlib/nsh_parse.c index 049444397..165f842fc 100644 --- a/apps/nshlib/nsh_parse.c +++ b/apps/nshlib/nsh_parse.c @@ -88,12 +88,12 @@ # define MAX_ARGV_ENTRIES (NSH_MAX_ARGUMENTS+4) #endif -/* Help layout */ +/* Help command summary layout */ #define MAX_CMDLEN 12 -#define CMDS_PER_LINE 5 +#define CMDS_PER_LINE 6 -#define NUM_CMDS (sizeof(g_cmdmap)/sizeof(struct cmdmap_s)) +#define NUM_CMDS ((sizeof(g_cmdmap)/sizeof(struct cmdmap_s)) - 1) #define NUM_CMD_ROWS ((NUM_CMDS + (CMDS_PER_LINE-1)) / CMDS_PER_LINE) /**************************************************************************** @@ -443,7 +443,7 @@ static inline void help_cmdlist(FAR struct nsh_vtbl_s *vtbl) for (i = 0; i < NUM_CMD_ROWS; i++) { nsh_output(vtbl, " "); - for (j = 0, k = i; j < CMDS_PER_LINE && k < NUM_CMDS; j++, k += CMDS_PER_LINE) + for (j = 0, k = i; j < CMDS_PER_LINE && k < NUM_CMDS; j++, k += NUM_CMD_ROWS) { nsh_output(vtbl, "%-12s", g_cmdmap[k].cmd); } @@ -516,6 +516,7 @@ static int help_cmd(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd) { /* Yes... show it */ + nsh_output(vtbl, "%s usage:", cmd); help_showcmd(vtbl, cmdmap); return OK; } @@ -574,14 +575,14 @@ static inline void help_builtins(FAR struct nsh_vtbl_s *vtbl) static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { FAR const char *cmd = NULL; -#ifdef CONFIG_NSH_HELP_TERSE +#ifndef CONFIG_NSH_HELP_TERSE bool verbose = false; int i; #endif /* The command may be followed by a verbose option */ -#ifdef CONFIG_NSH_HELP_TERSE +#ifndef CONFIG_NSH_HELP_TERSE i = 1; if (argc > i) { @@ -618,14 +619,13 @@ static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { /* Yes.. show the single command */ - nsh_output(vtbl, "%s usage:", cmd); help_cmd(vtbl, cmd); } else { /* In verbose mode, show detailed help for all commands */ -#ifdef CONFIG_NSH_HELP_TERSE +#ifndef CONFIG_NSH_HELP_TERSE if (verbose) { nsh_output(vtbl, "Where is one of:\n"); @@ -637,7 +637,6 @@ static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) else #endif { - nsh_output(vtbl, "help usage:"); help_cmd(vtbl, "help"); nsh_output(vtbl, "\n"); help_cmdlist(vtbl); diff --git a/misc/pascal/include/podefs.h b/misc/pascal/include/podefs.h index 25d0042b6..9d372b402 100644 --- a/misc/pascal/include/podefs.h +++ b/misc/pascal/include/podefs.h @@ -1,204 +1,204 @@ -/*********************************************************************** - * podefs.h - * Logical P-code operation code definitions - * - * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ***********************************************************************/ - -#ifndef __PODEFS_H -#define __PODEFS_H - -/* These definitions represent logical operations as needed by the - * the compiler. The specific INSN generation layer must interpret - * these requests as is appropriate to the supported INSNS. - */ - -enum pcode_e -{ - - /**------------------------------------------------------------------- - * OPCODES WITH NO ARGUMENTS - **-------------------------------------------------------------------**/ - - /* Program control (No stack arguments) */ - - opNOP = 0, - - /* Arithmetic & logical & and integer conversions (One stack argument) */ - - opNEG, opABS, opINC, opDEC, opNOT, - - /* Arithmetic & logical (Two stack arguments) */ - - opADD, opSUB, opMUL, opDIV, opMOD, opSLL, opSRL, opSRA, opOR, opAND, - - /* Comparisons (One stack argument) */ - - opEQUZ, opNEQZ, opLTZ, opGTEZ, opGTZ, opLTEZ, - - /* Comparisons (Two stack arguments) */ - - opEQU, opNEQ, opLT, opGTE, opGT, opLTE, - opBIT, - - /* Load Immediate */ - - opLDI, opLDIB, opLDIM, - - /* Store Immediate */ - - opSTI, opSTIB, opSTIM, - - /* Data stack */ - - opDUP, opPUSHS, opPOPS, - - /* Program control (No stack arguments) - * Behavior: - * Pop return address - * Pop saved base register (BR) - * Discard saved base address - * Set program counter (PC) to return address - */ - - opRET, - - /* System Functions (No stack arguments) */ - - opEND, - - /**------------------------------------------------------------------- - ** OPCODES WITH ONE ARGUMENT - **-------------------------------------------------------------------**/ - - /* Floating point operations: arg = FP op-code */ - - opFLOAT, - - /* Program control: arg = unsigned label (One stack argument) */ - - opJEQUZ, opJNEQZ, - - /* Program control: arg = unsigned label (no stack arguments) */ - - opJMP, - - /* Program control: arg = unsigned label (One stack argument) */ - - opJEQU, opJNEQ, opJLT, opJGTE, opJGT, opJLTE, - - /* Load: arg = unsigned base offset */ - - opLD, opLDH, opLDB, opLDM, - - /* Store: arg = unsigned base offset */ - - opST, opSTB, opSTM, - - /* Load Indexed: arg = unsigned base offset */ - - opLDX, opLDXB, opLDXM, - - /* Store Indexed: arg16 = unsigned base offset */ - - opSTX, opSTXB, opSTXM, - - /* Load address relative to stack base: arg = unsigned offset */ - - opLA, - - /* Load absolute stack address: arg = RODATA offset (No stack arguments) */ - - opLAC, - - /* Data stack: arg = 16 bit signed data (no stack arguments) */ - - opPUSH, opINDS, - - /* Load address relative to stack base: arg1 = unsigned offset, TOS=index */ - - opLAX, - - /* System functions: arg = 16-bit library call identifier */ - - opLIB, - - /* Program control: arg = unsigned label (no stack arguments) */ - - opLABEL, - - /**------------------------------------------------------------------- - ** OPCODES WITH TWO ARGUMENTS - **-------------------------------------------------------------------**/ - - /* Program Control: arg1 = level; arg2 = unsigned label */ - - opPCAL, - - /* Load: arg1 = level; arg2 = signed frame offset */ - - opLDS, opLDSH, opLDSB, opLDSM, - - /* Store: arg1 = level; arg2 = signed frame offset */ - - opSTS, opSTSB, opSTSM, - - /* Load Indexed: arg1 = level; arg2 = signed frame offset */ - - opLDSX, opLDSXB, opLDSXM, - - /* Store Indexed: arg1 = level; arg2 = signed frame offset */ - - opSTSX, opSTSXB, opSTSXM, - - /* FOR LAS/LASX arg1 = level; arg2 = signed frame offset - * (no stack arguments) - */ - - opLAS, opLASX, - - /* System calls: - * For SYSIO: arg1 = file number; arg2 = sub-function code - */ - - opSYSIO, - - /* Psuedo-operations: - * For LINE: arg1 = file number; arg2 = line number - */ - - opLINE, - - NUM_OPCODES -}; - -#endif /* __PODEFS_H */ +/*********************************************************************** + * podefs.h + * Logical P-code operation code definitions + * + * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ***********************************************************************/ + +#ifndef __PODEFS_H +#define __PODEFS_H + +/* These definitions represent logical operations as needed by the + * the compiler. The specific INSN generation layer must interpret + * these requests as is appropriate to the supported INSNS. + */ + +enum pcode_e +{ + + /**------------------------------------------------------------------- + * OPCODES WITH NO ARGUMENTS + **-------------------------------------------------------------------**/ + + /* Program control (No stack arguments) */ + + opNOP = 0, + + /* Arithmetic & logical & and integer conversions (One stack argument) */ + + opNEG, opABS, opINC, opDEC, opNOT, + + /* Arithmetic & logical (Two stack arguments) */ + + opADD, opSUB, opMUL, opDIV, opMOD, opSLL, opSRL, opSRA, opOR, opAND, + + /* Comparisons (One stack argument) */ + + opEQUZ, opNEQZ, opLTZ, opGTEZ, opGTZ, opLTEZ, + + /* Comparisons (Two stack arguments) */ + + opEQU, opNEQ, opLT, opGTE, opGT, opLTE, + opBIT, + + /* Load Immediate */ + + opLDI, opLDIB, opLDIM, + + /* Store Immediate */ + + opSTI, opSTIB, opSTIM, + + /* Data stack */ + + opDUP, opPUSHS, opPOPS, + + /* Program control (No stack arguments) + * Behavior: + * Pop return address + * Pop saved base register (BR) + * Discard saved base address + * Set program counter (PC) to return address + */ + + opRET, + + /* System Functions (No stack arguments) */ + + opEND, + + /**------------------------------------------------------------------- + ** OPCODES WITH ONE ARGUMENT + **-------------------------------------------------------------------**/ + + /* Floating point operations: arg = FP op-code */ + + opFLOAT, + + /* Program control: arg = unsigned label (One stack argument) */ + + opJEQUZ, opJNEQZ, + + /* Program control: arg = unsigned label (no stack arguments) */ + + opJMP, + + /* Program control: arg = unsigned label (One stack argument) */ + + opJEQU, opJNEQ, opJLT, opJGTE, opJGT, opJLTE, + + /* Load: arg = unsigned base offset */ + + opLD, opLDH, opLDB, opLDM, + + /* Store: arg = unsigned base offset */ + + opST, opSTB, opSTM, + + /* Load Indexed: arg = unsigned base offset */ + + opLDX, opLDXB, opLDXM, + + /* Store Indexed: arg16 = unsigned base offset */ + + opSTX, opSTXB, opSTXM, + + /* Load address relative to stack base: arg = unsigned offset */ + + opLA, + + /* Load absolute stack address: arg = RODATA offset (No stack arguments) */ + + opLAC, + + /* Data stack: arg = 16 bit signed data (no stack arguments) */ + + opPUSH, opINDS, + + /* Load address relative to stack base: arg1 = unsigned offset, TOS=index */ + + opLAX, + + /* System functions: arg = 16-bit library call identifier */ + + opLIB, + + /* Program control: arg = unsigned label (no stack arguments) */ + + opLABEL, + + /**------------------------------------------------------------------- + ** OPCODES WITH TWO ARGUMENTS + **-------------------------------------------------------------------**/ + + /* Program Control: arg1 = level; arg2 = unsigned label */ + + opPCAL, + + /* Load: arg1 = level; arg2 = signed frame offset */ + + opLDS, opLDSH, opLDSB, opLDSM, + + /* Store: arg1 = level; arg2 = signed frame offset */ + + opSTS, opSTSB, opSTSM, + + /* Load Indexed: arg1 = level; arg2 = signed frame offset */ + + opLDSX, opLDSXB, opLDSXM, + + /* Store Indexed: arg1 = level; arg2 = signed frame offset */ + + opSTSX, opSTSXB, opSTSXM, + + /* FOR LAS/LASX arg1 = level; arg2 = signed frame offset + * (no stack arguments) + */ + + opLAS, opLASX, + + /* System calls: + * For SYSIO: arg1 = file number; arg2 = sub-function code + */ + + opSYSIO, + + /* Pseudo-operations: + * For LINE: arg1 = file number; arg2 = line number + */ + + opLINE, + + NUM_OPCODES +}; + +#endif /* __PODEFS_H */ diff --git a/misc/pascal/insn16/include/pinsn16.h b/misc/pascal/insn16/include/pinsn16.h index a966f7aa3..92f335400 100644 --- a/misc/pascal/insn16/include/pinsn16.h +++ b/misc/pascal/insn16/include/pinsn16.h @@ -1,408 +1,408 @@ -/**************************************************************************** - * pinsn16.h - * 16-bit P-code operation code definitions - * - * Copyright (C) 2008 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -#ifndef __PINSN16_H -#define __PINSN16_H - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -/**************************************************************************** - * Definitions - ****************************************************************************/ - -/* Op-code bit definitions */ - -#define o16 (0x80) -#define o8 (0x40) - -/* Opcode Encoding Summary: - * - * NO ARGS arg8 ONLY arg16 ONLY BOTH - * 00xx xxxx 01xx xxxx 10xx xxxx 11xx xxxx - * xx00 0000 NOP --- --- --- - * xx00 0001 NEG --- --- --- - * xx00 0010 ABS --- --- --- - * xx00 0011 INC --- --- --- - * xx00 0100 DEC --- --- --- - * xx00 0101 NOT --- --- --- - * xx00 0110 ADD --- --- --- - * xx00 0111 SUB --- --- --- - * xx00 1000 MUL --- --- PCAL l,ilbl - * xx00 1001 DIV --- --- --- - * xx00 1010 MOD --- --- --- - * xx00 1011 SLL --- --- --- - * xx00 1100 SRL --- --- --- - * xx00 1101 SRA --- --- --- - * xx00 1110 OR --- --- --- - * xx00 1111 AND --- --- --- - * - * xx01 0000 EQUZ --- JEQUZ ilbl --- - * xx01 0001 NEQZ --- JNEQZ ilbl --- - * xx01 0010 LTZ --- JLTZ ilbl --- - * xx01 0011 GTEZ --- JGTEZ ilbl --- - * xx01 0100 GTZ --- JGTZ ilbl --- - * xx01 0101 LTEZ --- JLTEZ ilbl --- - * xx01 0110 --- --- JMP ilbl --- - * xx01 0111 --- --- --- --- - * xx01 1000 EQU --- JEQU ilbl --- - * xx01 1001 NEQ --- JNEQ ilbl --- - * xx01 1010 LT --- JLT ilbl --- - * xx01 1011 GTE --- JGTE ilbl --- - * xx01 1100 GT --- JGT ilbl --- - * xx01 1101 LTE --- JLTE ilbl --- - * xx01 1110 --- --- --- --- - * xx01 1111 BIT --- --- --- - * - * xx10 0000 LDI --- LD uoffs LDS lvl,offs - * xx10 0001 LDIH --- LDH uoffs LDSH lvl,offs - * xx10 0010 LDIB --- LDB uoffs LDSB lvl,offs - * xx10 0011 LDIM --- LDM uoffs LDSM lvl,offs - * xx10 0100 STI --- ST uoffs STS lvl,offs - * xx10 0101 STIH --- STH uoffs STSH lvl,offs - * xx10 0110 STIB --- STB uoffs STSB lvl,offs - * xx10 0111 STIM --- STM uoffs STSM lvl,offs - * xx10 1000 DUP --- LDX uoffs LDSX lvl,offs - * xx10 1001 DUPH --- LDXH uoffs LDSXH lvl,offs - * xx10 1010 PUSHS --- LDXB uoffs LDSXB lvl,offs - * xx10 1011 POPS --- LDXM uoffs LDSXM lvl,offs - * xx10 1100 --- --- STX uoffs STSX lvl,offs - * xx10 1101 --- --- STXH uoffs STSXH lvl,offs - * xx10 1110 --- --- STXB uoffs STSXB lvl,offs - * xx10 1111 RET --- STXM uoffs STSXM lvl,offs - * - * xx11 0000 --- FLOAT fop LA uoffs LAS lvl,offs - * xx11 0001 --- --- LAC dlbl --- - * xx11 0010 --- --- --- --- - * xx11 0011 --- --- --- --- - * xx11 0100 --- PUSHB n PUSH nn --- - * xx11 0101 --- --- INDS nn --- - * xx11 0110 --- --- --- --- - * xx11 0111 --- --- --- --- - * xx11 1000 --- --- LAX uoffs LASX lvl,offs - * xx11 1001 --- --- LIB lop SYSIO fn,sop - * xx11 1010 --- --- --- --- - * xx11 1011 --- --- --- --- - * xx11 1100 --- --- --- --- - * xx11 1101 --- --- --- --- - * xx11 1110 --- --- --- --- - * xx11 1111 END --- *LABEL ilbl *LINE fn,lineno - * - * KEY: - * n = 8-bit value (unsigned) - * lvl = 8-bit static nesting level offset (unsigned) - * vt = 8-bit type code (unsigned) - * nn = 16-bit value (signed) - * fop = 8-bit floating point operation - * sop = 16-bit sysio operation - * lop = 16-bit library call identifier - * fn = 8-bit file number - * ilbl = instruction space label - * dlbl = stack data label - * offs = 16-bit frame offset (signed) - * uoffs = 16-bit base offset (unsigned) - * c = string follows psuedo-operation - * * = Indicates pseudo-operations (these are removed - * after final fixup of the object file). - */ - -/** OPCODES WITH NO ARGUMENTS ***********************************************/ - -/* Program control (No stack arguments) */ - -#define oNOP (0x00) - -/* Arithmetic & logical & and integer conversions (One 16-bit stack argument) */ - -#define oNEG (0x01) -#define oABS (0x02) -#define oINC (0x03) -#define oDEC (0x04) -#define oNOT (0x05) - -/* Arithmetic & logical (Two 16-bit stack arguments) */ - -#define oADD (0x06) -#define oSUB (0x07) -#define oMUL (0x08) -#define oDIV (0x09) -#define oMOD (0x0a) -#define oSLL (0x0b) -#define oSRL (0x0c) -#define oSRA (0x0d) -#define oOR (0x0e) -#define oAND (0x0f) - -/* Comparisons (One 16-bit stack argument) */ - -#define oEQUZ (0x10) -#define oNEQZ (0x11) -#define oLTZ (0x12) -#define oGTEZ (0x13) -#define oGTZ (0x14) -#define oLTEZ (0x15) - -/* 0x16-0x17 -- unassigned */ - -/* Comparisons (Two 16-bit stack arguments) */ - -#define oEQU (0x18) -#define oNEQ (0x19) -#define oLT (0x1a) -#define oGTE (0x1b) -#define oGT (0x1c) -#define oLTE (0x1d) - -/* 0x1e -- unassigned */ - -#define oBIT (0x1f) - -/* Load Immediate */ - -#define oLDI (0x20) /* (One 16-bit stack argument) */ -#define oLDIH (0x21) /* (One 16-bit stack argument) */ -#define oLDIB (0x22) /* (One 16-bit stack argument) */ -#define oLDIM (0x23) /* (Two 16-bit stack arguments) */ - -/* Store Immediate */ - -#define oSTI (0x24) /* (One 32-bit and one 16-bit stack arguments) */ -#define oSTIH (0x25) /* (Two 16-bit stack arguments) */ -#define oSTIB (0x26) /* (Two 16-bit stack arguments) */ -#define oSTIM (0x27) /* (Two + n 16-bit stack arguments) */ - -/* Data stack */ - -#define oDUP (0x28) /* (One 32-bit stack argument */ -#define oDUPH (0x29) /* (One 16-bit stack argument) */ - -/* 0x2a - 0x2b -- unassigned */ - -#define oPUSHS (0x2a) /* No arguments */ -#define oPOPS (0x2b) /* (One 16-bit stack argument) */ - -/* 0x2c - 0x2e -- unassigned */ - -/* Program control (No stack arguments) - * Behavior: - * Pop return address - * Pop saved base register (BR) - * Discard saved base address - * Set program counter (PC) to return address - */ - -#define oRET (0x2f) - -/* 0x30 - 0x3e -- unassigned */ - -/* System Functions (No stack arguments) */ - -#define oEND (0x3f) - -/** OPCODES WITH SINGLE BYTE ARGUMENT (arg8) ********************************/ - -/* (o8|0x00)-(o8|0x2f) -- unassigned */ - -/* Floating point operations: arg8 = FP op-code */ - -#define oFLOAT (o8|0x30) - -/* (o8|0x31)-(o8|0x33) -- unassigned */ - -/* Data stack: arg8 = 8 bit unsigned data (no stack arguments) */ - -#define oPUSHB (o8|0x34) - -/* (o8|0x35)-(o8|0x3f) -- unassigned */ - -/** OPCODES WITH SINGLE 16-BIT ARGUMENT (arg16) *****************************/ - -/* (o16|0x00)-(o16|0x0f) -- unassigned */ - -/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ - -#define oJEQUZ (o16|0x10) -#define oJNEQZ (o16|0x11) -#define oJLTZ (o16|0x12) -#define oJGTEZ (o16|0x13) -#define oJGTZ (o16|0x14) -#define oJLTEZ (o16|0x15) - -/* Program control: arg16 = unsigned label (no stack arguments) */ - -#define oJMP (o16|0x16) - -/* (o16|0x17) -- unassigned */ - -/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ - -#define oJEQU (o16|0x18) -#define oJNEQ (o16|0x19) -#define oJLT (o16|0x1a) -#define oJGTE (o16|0x1b) -#define oJGT (o16|0x1c) -#define oJLTE (o16|0x1d) - -/* (o16|0x1e)-(o16|0x1f) -- unassigned */ - -/* Load: arg16 = unsigned base offset */ - -#define oLD (o16|0x20) /* (no stack arguments) */ -#define oLDH (o16|0x21) /* (no stack arguments) */ -#define oLDB (o16|0x22) /* (no stack arguments) */ -#define oLDM (o16|0x23) /* (One 16-bit stack argument) */ - -/* Store: arg16 = unsigned base offset */ - -#define oST (o16|0x24) /* (One 32-bit stack argument) */ -#define oSTH (o16|0x25) /* (One 16-bit stack argument) */ -#define oSTB (o16|0x26) /* (One 16-bit stack argument) */ -#define oSTM (o16|0x27) /* (One+n 16-bit stack arguments) */ - -/* Load Indexed: arg16 = unsigned base offset */ - -#define oLDX (o16|0x28) /* (One 16-bit stack argument) */ -#define oLDXH (o16|0x29) /* (One 16-bit stack argument) */ -#define oLDXB (o16|0x2a) /* (One 16-bit stack argument) */ -#define oLDXM (o16|0x2b) /* (Two 16-bit stack arguments) */ - -/* Store Indexed: arg16 = unsigned base offset */ - -#define oSTX (o16|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ -#define oSTXH (o16|0x2d) /* (Two 16-bit stack arguments) */ -#define oSTXB (o16|0x2e) /* (Two 16-bit stack arguments) */ -#define oSTXM (o16|0x2f) /* (Two+n 16-bit stack arguments) */ - -/* Load address relative to stack base: arg16 = unsigned offset */ - -#define oLA (o16|0x30) - -/* Load absolute stack address: arg16 = RODATA offset (No stack arguments) */ - -#define oLAC (o16|0x31) - -/* (o16|0x32)-(o16|0x33) -- unassigned */ - -/* Data stack: arg16 = 16 bit signed data (no stack arguments) */ - -#define oPUSH (o16|0x34) -#define oINDS (o16|0x35) - -/* (o16|0x34)-(o16|0x37) -- unassigned */ - -/* Load address relative to stack base: arg16 = unsigned offset, TOS=index */ - -#define oLAX (o16|0x38) - -/* System functions: arg16 = 16-bit library call identifier */ - -#define oLIB (o16|0x39) - -/* (o16|0x3a)-(o16|0x3e) -- unassigned */ - -/* Program control: arg16 = unsigned label (no stack arguments) */ - -#define oLABEL (o16|0x3f) - -/** OPCODES WITH 24-BITS OF ARGUMENET (arg8 + arg16) ************************/ - -/* (o16|o8|0x00)-(o8|o16|0x07) -- unassigned */ - -/* Program Control: arg8 = level; arg16 = unsigned label - * (No stack arguments) - * Behavior: - * Push base address of level - * Push base register (BR) value - * Set new base register value (BR) as top of stack - * Push return address - * Set program counter (PC) for address associated with label - */ - -#define oPCAL (o16|o8|0x08) - -/* (o16|o8|0x09)-(o8|o16|0x1f) -- unassigned */ - -/* Load: arg8 = level; arg16 = signed frame offset */ - -#define oLDS (o16|o8|0x20) /* (no stack arguments) */ -#define oLDSH (o16|o8|0x21) /* (no stack arguments) */ -#define oLDSB (o16|o8|0x22) /* (no stack arguments) */ -#define oLDSM (o16|o8|0x23) /* (One 16-bit stack argument) */ - -/* Store: arg8 = level; arg16 = signed frame offset */ - -#define oSTS (o16|o8|0x24) /* (One 32-bit stack argument) */ -#define oSTSH (o16|o8|0x25) /* (One 16-bit stack argument) */ -#define oSTSB (o16|o8|0x26) /* (One 16-bit stack argument) */ -#define oSTSM (o16|o8|0x27) /* (One+n 16-bit stack arguments) */ - -/* Load Indexed: arg8 = level; arg16 = signed frame offset */ - -#define oLDSX (o16|o8|0x28) /* (One 16-bit stack argument) */ -#define oLDSXH (o16|o8|0x29) /* (One 16-bit stack argument) */ -#define oLDSXB (o16|o8|0x2a) /* (One 16-bit stack argument) */ -#define oLDSXM (o16|o8|0x2b) /* (Two 16-bit stack arguments) */ - -/* Store Indexed: arg8 = level; arg16 = signed frame offset */ - -#define oSTSX (o16|o8|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ -#define oSTSXH (o16|o8|0x2d) /* (Two 16-bit stack arguments) */ -#define oSTSXB (o16|o8|0x2e) /* (Two 16-bit stack arguments) */ -#define oSTSXM (o16|o8|0x2f) /* (Two+n 16-bit stack arguments) */ - -/* FOR LAS/LASX arg8 = level; arg16 = signed frame offset - * (no stack arguments) - */ - -#define oLAS (o16|o8|0x30) -#define oLASX (o16|o8|0x38) - -/* System calls: - * For SYSIO: arg8 = file number; arg16 = sub-function code - */ - -#define oSYSIO (o16|o8|0x39) - -/* (o16|o8|0x3a)-(o8|o16|0x3e) -- unassigned */ - -/* Psuedo-operations: - * For LINE: arg8 = file number; arg16 = line number - */ - -#define oLINE (o16|o8|0x3f) - -#endif /* __PINSN16_H */ +/**************************************************************************** + * pinsn16.h + * 16-bit P-code operation code definitions + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __PINSN16_H +#define __PINSN16_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/* Op-code bit definitions */ + +#define o16 (0x80) +#define o8 (0x40) + +/* Opcode Encoding Summary: + * + * NO ARGS arg8 ONLY arg16 ONLY BOTH + * 00xx xxxx 01xx xxxx 10xx xxxx 11xx xxxx + * xx00 0000 NOP --- --- --- + * xx00 0001 NEG --- --- --- + * xx00 0010 ABS --- --- --- + * xx00 0011 INC --- --- --- + * xx00 0100 DEC --- --- --- + * xx00 0101 NOT --- --- --- + * xx00 0110 ADD --- --- --- + * xx00 0111 SUB --- --- --- + * xx00 1000 MUL --- --- PCAL l,ilbl + * xx00 1001 DIV --- --- --- + * xx00 1010 MOD --- --- --- + * xx00 1011 SLL --- --- --- + * xx00 1100 SRL --- --- --- + * xx00 1101 SRA --- --- --- + * xx00 1110 OR --- --- --- + * xx00 1111 AND --- --- --- + * + * xx01 0000 EQUZ --- JEQUZ ilbl --- + * xx01 0001 NEQZ --- JNEQZ ilbl --- + * xx01 0010 LTZ --- JLTZ ilbl --- + * xx01 0011 GTEZ --- JGTEZ ilbl --- + * xx01 0100 GTZ --- JGTZ ilbl --- + * xx01 0101 LTEZ --- JLTEZ ilbl --- + * xx01 0110 --- --- JMP ilbl --- + * xx01 0111 --- --- --- --- + * xx01 1000 EQU --- JEQU ilbl --- + * xx01 1001 NEQ --- JNEQ ilbl --- + * xx01 1010 LT --- JLT ilbl --- + * xx01 1011 GTE --- JGTE ilbl --- + * xx01 1100 GT --- JGT ilbl --- + * xx01 1101 LTE --- JLTE ilbl --- + * xx01 1110 --- --- --- --- + * xx01 1111 BIT --- --- --- + * + * xx10 0000 LDI --- LD uoffs LDS lvl,offs + * xx10 0001 LDIH --- LDH uoffs LDSH lvl,offs + * xx10 0010 LDIB --- LDB uoffs LDSB lvl,offs + * xx10 0011 LDIM --- LDM uoffs LDSM lvl,offs + * xx10 0100 STI --- ST uoffs STS lvl,offs + * xx10 0101 STIH --- STH uoffs STSH lvl,offs + * xx10 0110 STIB --- STB uoffs STSB lvl,offs + * xx10 0111 STIM --- STM uoffs STSM lvl,offs + * xx10 1000 DUP --- LDX uoffs LDSX lvl,offs + * xx10 1001 DUPH --- LDXH uoffs LDSXH lvl,offs + * xx10 1010 PUSHS --- LDXB uoffs LDSXB lvl,offs + * xx10 1011 POPS --- LDXM uoffs LDSXM lvl,offs + * xx10 1100 --- --- STX uoffs STSX lvl,offs + * xx10 1101 --- --- STXH uoffs STSXH lvl,offs + * xx10 1110 --- --- STXB uoffs STSXB lvl,offs + * xx10 1111 RET --- STXM uoffs STSXM lvl,offs + * + * xx11 0000 --- FLOAT fop LA uoffs LAS lvl,offs + * xx11 0001 --- --- LAC dlbl --- + * xx11 0010 --- --- --- --- + * xx11 0011 --- --- --- --- + * xx11 0100 --- PUSHB n PUSH nn --- + * xx11 0101 --- --- INDS nn --- + * xx11 0110 --- --- --- --- + * xx11 0111 --- --- --- --- + * xx11 1000 --- --- LAX uoffs LASX lvl,offs + * xx11 1001 --- --- LIB lop SYSIO fn,sop + * xx11 1010 --- --- --- --- + * xx11 1011 --- --- --- --- + * xx11 1100 --- --- --- --- + * xx11 1101 --- --- --- --- + * xx11 1110 --- --- --- --- + * xx11 1111 END --- *LABEL ilbl *LINE fn,lineno + * + * KEY: + * n = 8-bit value (unsigned) + * lvl = 8-bit static nesting level offset (unsigned) + * vt = 8-bit type code (unsigned) + * nn = 16-bit value (signed) + * fop = 8-bit floating point operation + * sop = 16-bit sysio operation + * lop = 16-bit library call identifier + * fn = 8-bit file number + * ilbl = instruction space label + * dlbl = stack data label + * offs = 16-bit frame offset (signed) + * uoffs = 16-bit base offset (unsigned) + * c = string follows pseudo-operation + * * = Indicates pseudo-operations (these are removed + * after final fixup of the object file). + */ + +/** OPCODES WITH NO ARGUMENTS ***********************************************/ + +/* Program control (No stack arguments) */ + +#define oNOP (0x00) + +/* Arithmetic & logical & and integer conversions (One 16-bit stack argument) */ + +#define oNEG (0x01) +#define oABS (0x02) +#define oINC (0x03) +#define oDEC (0x04) +#define oNOT (0x05) + +/* Arithmetic & logical (Two 16-bit stack arguments) */ + +#define oADD (0x06) +#define oSUB (0x07) +#define oMUL (0x08) +#define oDIV (0x09) +#define oMOD (0x0a) +#define oSLL (0x0b) +#define oSRL (0x0c) +#define oSRA (0x0d) +#define oOR (0x0e) +#define oAND (0x0f) + +/* Comparisons (One 16-bit stack argument) */ + +#define oEQUZ (0x10) +#define oNEQZ (0x11) +#define oLTZ (0x12) +#define oGTEZ (0x13) +#define oGTZ (0x14) +#define oLTEZ (0x15) + +/* 0x16-0x17 -- unassigned */ + +/* Comparisons (Two 16-bit stack arguments) */ + +#define oEQU (0x18) +#define oNEQ (0x19) +#define oLT (0x1a) +#define oGTE (0x1b) +#define oGT (0x1c) +#define oLTE (0x1d) + +/* 0x1e -- unassigned */ + +#define oBIT (0x1f) + +/* Load Immediate */ + +#define oLDI (0x20) /* (One 16-bit stack argument) */ +#define oLDIH (0x21) /* (One 16-bit stack argument) */ +#define oLDIB (0x22) /* (One 16-bit stack argument) */ +#define oLDIM (0x23) /* (Two 16-bit stack arguments) */ + +/* Store Immediate */ + +#define oSTI (0x24) /* (One 32-bit and one 16-bit stack arguments) */ +#define oSTIH (0x25) /* (Two 16-bit stack arguments) */ +#define oSTIB (0x26) /* (Two 16-bit stack arguments) */ +#define oSTIM (0x27) /* (Two + n 16-bit stack arguments) */ + +/* Data stack */ + +#define oDUP (0x28) /* (One 32-bit stack argument */ +#define oDUPH (0x29) /* (One 16-bit stack argument) */ + +/* 0x2a - 0x2b -- unassigned */ + +#define oPUSHS (0x2a) /* No arguments */ +#define oPOPS (0x2b) /* (One 16-bit stack argument) */ + +/* 0x2c - 0x2e -- unassigned */ + +/* Program control (No stack arguments) + * Behavior: + * Pop return address + * Pop saved base register (BR) + * Discard saved base address + * Set program counter (PC) to return address + */ + +#define oRET (0x2f) + +/* 0x30 - 0x3e -- unassigned */ + +/* System Functions (No stack arguments) */ + +#define oEND (0x3f) + +/** OPCODES WITH SINGLE BYTE ARGUMENT (arg8) ********************************/ + +/* (o8|0x00)-(o8|0x2f) -- unassigned */ + +/* Floating point operations: arg8 = FP op-code */ + +#define oFLOAT (o8|0x30) + +/* (o8|0x31)-(o8|0x33) -- unassigned */ + +/* Data stack: arg8 = 8 bit unsigned data (no stack arguments) */ + +#define oPUSHB (o8|0x34) + +/* (o8|0x35)-(o8|0x3f) -- unassigned */ + +/** OPCODES WITH SINGLE 16-BIT ARGUMENT (arg16) *****************************/ + +/* (o16|0x00)-(o16|0x0f) -- unassigned */ + +/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ + +#define oJEQUZ (o16|0x10) +#define oJNEQZ (o16|0x11) +#define oJLTZ (o16|0x12) +#define oJGTEZ (o16|0x13) +#define oJGTZ (o16|0x14) +#define oJLTEZ (o16|0x15) + +/* Program control: arg16 = unsigned label (no stack arguments) */ + +#define oJMP (o16|0x16) + +/* (o16|0x17) -- unassigned */ + +/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ + +#define oJEQU (o16|0x18) +#define oJNEQ (o16|0x19) +#define oJLT (o16|0x1a) +#define oJGTE (o16|0x1b) +#define oJGT (o16|0x1c) +#define oJLTE (o16|0x1d) + +/* (o16|0x1e)-(o16|0x1f) -- unassigned */ + +/* Load: arg16 = unsigned base offset */ + +#define oLD (o16|0x20) /* (no stack arguments) */ +#define oLDH (o16|0x21) /* (no stack arguments) */ +#define oLDB (o16|0x22) /* (no stack arguments) */ +#define oLDM (o16|0x23) /* (One 16-bit stack argument) */ + +/* Store: arg16 = unsigned base offset */ + +#define oST (o16|0x24) /* (One 32-bit stack argument) */ +#define oSTH (o16|0x25) /* (One 16-bit stack argument) */ +#define oSTB (o16|0x26) /* (One 16-bit stack argument) */ +#define oSTM (o16|0x27) /* (One+n 16-bit stack arguments) */ + +/* Load Indexed: arg16 = unsigned base offset */ + +#define oLDX (o16|0x28) /* (One 16-bit stack argument) */ +#define oLDXH (o16|0x29) /* (One 16-bit stack argument) */ +#define oLDXB (o16|0x2a) /* (One 16-bit stack argument) */ +#define oLDXM (o16|0x2b) /* (Two 16-bit stack arguments) */ + +/* Store Indexed: arg16 = unsigned base offset */ + +#define oSTX (o16|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ +#define oSTXH (o16|0x2d) /* (Two 16-bit stack arguments) */ +#define oSTXB (o16|0x2e) /* (Two 16-bit stack arguments) */ +#define oSTXM (o16|0x2f) /* (Two+n 16-bit stack arguments) */ + +/* Load address relative to stack base: arg16 = unsigned offset */ + +#define oLA (o16|0x30) + +/* Load absolute stack address: arg16 = RODATA offset (No stack arguments) */ + +#define oLAC (o16|0x31) + +/* (o16|0x32)-(o16|0x33) -- unassigned */ + +/* Data stack: arg16 = 16 bit signed data (no stack arguments) */ + +#define oPUSH (o16|0x34) +#define oINDS (o16|0x35) + +/* (o16|0x34)-(o16|0x37) -- unassigned */ + +/* Load address relative to stack base: arg16 = unsigned offset, TOS=index */ + +#define oLAX (o16|0x38) + +/* System functions: arg16 = 16-bit library call identifier */ + +#define oLIB (o16|0x39) + +/* (o16|0x3a)-(o16|0x3e) -- unassigned */ + +/* Program control: arg16 = unsigned label (no stack arguments) */ + +#define oLABEL (o16|0x3f) + +/** OPCODES WITH 24-BITS OF ARGUMENET (arg8 + arg16) ************************/ + +/* (o16|o8|0x00)-(o8|o16|0x07) -- unassigned */ + +/* Program Control: arg8 = level; arg16 = unsigned label + * (No stack arguments) + * Behavior: + * Push base address of level + * Push base register (BR) value + * Set new base register value (BR) as top of stack + * Push return address + * Set program counter (PC) for address associated with label + */ + +#define oPCAL (o16|o8|0x08) + +/* (o16|o8|0x09)-(o8|o16|0x1f) -- unassigned */ + +/* Load: arg8 = level; arg16 = signed frame offset */ + +#define oLDS (o16|o8|0x20) /* (no stack arguments) */ +#define oLDSH (o16|o8|0x21) /* (no stack arguments) */ +#define oLDSB (o16|o8|0x22) /* (no stack arguments) */ +#define oLDSM (o16|o8|0x23) /* (One 16-bit stack argument) */ + +/* Store: arg8 = level; arg16 = signed frame offset */ + +#define oSTS (o16|o8|0x24) /* (One 32-bit stack argument) */ +#define oSTSH (o16|o8|0x25) /* (One 16-bit stack argument) */ +#define oSTSB (o16|o8|0x26) /* (One 16-bit stack argument) */ +#define oSTSM (o16|o8|0x27) /* (One+n 16-bit stack arguments) */ + +/* Load Indexed: arg8 = level; arg16 = signed frame offset */ + +#define oLDSX (o16|o8|0x28) /* (One 16-bit stack argument) */ +#define oLDSXH (o16|o8|0x29) /* (One 16-bit stack argument) */ +#define oLDSXB (o16|o8|0x2a) /* (One 16-bit stack argument) */ +#define oLDSXM (o16|o8|0x2b) /* (Two 16-bit stack arguments) */ + +/* Store Indexed: arg8 = level; arg16 = signed frame offset */ + +#define oSTSX (o16|o8|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ +#define oSTSXH (o16|o8|0x2d) /* (Two 16-bit stack arguments) */ +#define oSTSXB (o16|o8|0x2e) /* (Two 16-bit stack arguments) */ +#define oSTSXM (o16|o8|0x2f) /* (Two+n 16-bit stack arguments) */ + +/* FOR LAS/LASX arg8 = level; arg16 = signed frame offset + * (no stack arguments) + */ + +#define oLAS (o16|o8|0x30) +#define oLASX (o16|o8|0x38) + +/* System calls: + * For SYSIO: arg8 = file number; arg16 = sub-function code + */ + +#define oSYSIO (o16|o8|0x39) + +/* (o16|o8|0x3a)-(o8|o16|0x3e) -- unassigned */ + +/* Pseudo-operations: + * For LINE: arg8 = file number; arg16 = line number + */ + +#define oLINE (o16|o8|0x3f) + +#endif /* __PINSN16_H */ diff --git a/misc/pascal/insn16/libinsn/pdasm.c b/misc/pascal/insn16/libinsn/pdasm.c index b6c1ecb31..4da71869a 100644 --- a/misc/pascal/insn16/libinsn/pdasm.c +++ b/misc/pascal/insn16/libinsn/pdasm.c @@ -431,7 +431,7 @@ static const struct /* 0xfd */ { invOp, NOARG16 }, /* 0xfe */ { invOp, NOARG16 }, -/* Psuedo-operations: +/* Pseudo-operations: * For LINE: arg8 = file number; arg16 = line number */ diff --git a/misc/pascal/insn16/prun/pexec.c b/misc/pascal/insn16/prun/pexec.c index af68c49fb..46df53c2c 100644 --- a/misc/pascal/insn16/prun/pexec.c +++ b/misc/pascal/insn16/prun/pexec.c @@ -2185,7 +2185,7 @@ static int pexec32(FAR struct pexec_s *st, uint8_t opcode, uint8_t imm8, uint16_ ret = pexec_sysio(st, imm8, imm16); break; - /* Psuedo-operations: (No stack arguments) + /* Pseudo-operations: (No stack arguments) * For LINE: imm8 = file number; imm16 = line number */ diff --git a/misc/pascal/insn32/doc/insn32.txt b/misc/pascal/insn32/doc/insn32.txt index ff1416ca5..3bb7bc700 100644 --- a/misc/pascal/insn32/doc/insn32.txt +++ b/misc/pascal/insn32/doc/insn32.txt @@ -1,119 +1,119 @@ -32-bit op-code bit definitions - -Machine model: - - SPB 32-bit Pascal stack base address - SP 32-bit Pascal stack pointer - LSP 32-bit Level stack pointer - CSB 32-bit Character stack base address - CSP 32-bit Character stack pointer - DS 32-bit Data size register (for multiple reg transfers) - PC 32-bit Program Counter - CC Condition code register - --- Volatile general purpose registers - --- Static general purpose registers - -Condition codes: Z(ero), N(egative) - - +=====+=====+ - | Z | N | - +=====+=====+=====+ - | EQ | 1 | - | - | NEQ | 0 | - | - | LT | - | 1 | - | GTE | - | 0 | - | GT | 0 | 0 | - | LTE | 1 | 1 | - +=====+=====+=====+ - -Opcode Encoding Summary: - - 0rxx xxxx 1rxxx xxxx -xr00 0000 NOP LD uoffs4 -xr00 0001 NEG LDH uoffs3 -xr00 0010 ABS LDB uoffs -xr00 0011 INC LDM uoffs4 -xr00 0100 DEC ST uoffs4 -xr00 0101 NOT STH uoffs2 -xr00 0110 ADD STB uoffs -xr00 0111 SUB STM uoffs4 -xr00 1000 MUL LDX uoffs4 -xr00 1001 DIV LDXH uoffs2 -xr00 1010 MOD LDXB uoffs -xr00 1011 SLL LDXM uoffs4 -xr00 1100 SRL STX uoffs4 -xr00 1101 SRA STXH uoffs2 -xr00 1110 OR STXB uoffs -xr00 1111 AND STXM uoffs - -xr01 0000 EQUZ JEQUZ ilbl -xr01 0001 NEQZ JNEQZ ilbl -xr01 0010 LTZ JLTZ ilbl -xr01 0011 GTEZ JGTEZ ilbl -xr01 0100 GTZ JGTZ ilbl -xr01 0101 LTEZ JLTEZ ilbl -xr01 0110 --- JMP ilbl -xr01 0111 --- PUSH nn -xr01 1000 EQU JEQU ilbl -xr01 1001 NEQ JNEQ ilbl -xr01 1010 LT JLT ilbl -xr01 1011 GTE JGTE ilbl -xr01 1100 GT JGT ilbl -xr01 1101 LTE JLTE ilbl -xr01 1110 --- --- -xr01 1111 BIT INDS nn - -xr10 0000 LDI LDS offs4 -xr10 0001 LDIH LDSH offs3 -xr10 0010 LDIB LDSB offs -xr10 0011 LDIM LDSM offs4 -xr10 0100 STI STS offs4 -xr10 0101 STIH STSH offs2 -xr10 0110 STIB STSB offs -xr10 0111 STIM STSM offs4 -xr10 1000 DUP LDSX offs4 -xr10 1001 --- LDSXH offs2 -xr10 1010 PUSHS LDSXB offs -xr10 1011 POPS LDSXM offs4 -xr10 1100 --- STSX offs4 -xr10 1101 --- STSXH offs2 -xr10 1110 --- STSXB offs -xr10 1111 RET STSXM offs - -xr11 0000 --- LA uoffs -xr11 0001 --- LAS offs -xr11 0010 --- LAC dlbl -xr11 0011 --- --- -xr11 0100 --- LAX uoffs -xr11 0101 --- LASX offs -xr11 0110 --- SLSP level -xr11 0111 --- SDC uu -xr11 1000 --- --- -xr11 1001 --- PCAL ilbl -xr11 1010 --- SYSIO fn,sop -xr11 1011 --- LIB lop -xr11 1100 --- FLOAT fop -xr11 1101 --- *LABEL ilbl -xr11 1110 --- *INCLUDE fn -xr11 1111 END *LINE lineno - -KEY: - r = Reserved bit (must be zero) - fn = 8-bit file number - lvl = 8-bit static nexting level - sop = 17-bit sysio operation - lineno = 17-bit line number - nn = 32-bit constant value (signed) - uu = 32-bit constant value (unsigned) - fop = 32-bit floating point operation - lop = 32-bit library call identifier - ilbl = 32-bit Instruction space label number - dlbl = 32-stack data label - offs4 = 32-bit word offset with respect to LSP (signed) - offs2 = 32-bit halfword offset with respect to LSP (signed) - offs = 32-bit byte offset with respect to LSP (signed) - uoffs4 = 32-bit word offset with respect to SPB (unsigned) - uoffs2 = 32-bit halfword offset with respect to SPB (unsigned) - uoffs = 32-bit byte offset with respect to SPB (unsigned) - c = string follows psuedo-operation - = Indicates pseudo-operations (these are removed +32-bit op-code bit definitions + +Machine model: + + SPB 32-bit Pascal stack base address + SP 32-bit Pascal stack pointer + LSP 32-bit Level stack pointer + CSB 32-bit Character stack base address + CSP 32-bit Character stack pointer + DS 32-bit Data size register (for multiple reg transfers) + PC 32-bit Program Counter + CC Condition code register + --- Volatile general purpose registers + --- Static general purpose registers + +Condition codes: Z(ero), N(egative) + + +=====+=====+ + | Z | N | + +=====+=====+=====+ + | EQ | 1 | - | + | NEQ | 0 | - | + | LT | - | 1 | + | GTE | - | 0 | + | GT | 0 | 0 | + | LTE | 1 | 1 | + +=====+=====+=====+ + +Opcode Encoding Summary: + + 0rxx xxxx 1rxxx xxxx +xr00 0000 NOP LD uoffs4 +xr00 0001 NEG LDH uoffs3 +xr00 0010 ABS LDB uoffs +xr00 0011 INC LDM uoffs4 +xr00 0100 DEC ST uoffs4 +xr00 0101 NOT STH uoffs2 +xr00 0110 ADD STB uoffs +xr00 0111 SUB STM uoffs4 +xr00 1000 MUL LDX uoffs4 +xr00 1001 DIV LDXH uoffs2 +xr00 1010 MOD LDXB uoffs +xr00 1011 SLL LDXM uoffs4 +xr00 1100 SRL STX uoffs4 +xr00 1101 SRA STXH uoffs2 +xr00 1110 OR STXB uoffs +xr00 1111 AND STXM uoffs + +xr01 0000 EQUZ JEQUZ ilbl +xr01 0001 NEQZ JNEQZ ilbl +xr01 0010 LTZ JLTZ ilbl +xr01 0011 GTEZ JGTEZ ilbl +xr01 0100 GTZ JGTZ ilbl +xr01 0101 LTEZ JLTEZ ilbl +xr01 0110 --- JMP ilbl +xr01 0111 --- PUSH nn +xr01 1000 EQU JEQU ilbl +xr01 1001 NEQ JNEQ ilbl +xr01 1010 LT JLT ilbl +xr01 1011 GTE JGTE ilbl +xr01 1100 GT JGT ilbl +xr01 1101 LTE JLTE ilbl +xr01 1110 --- --- +xr01 1111 BIT INDS nn + +xr10 0000 LDI LDS offs4 +xr10 0001 LDIH LDSH offs3 +xr10 0010 LDIB LDSB offs +xr10 0011 LDIM LDSM offs4 +xr10 0100 STI STS offs4 +xr10 0101 STIH STSH offs2 +xr10 0110 STIB STSB offs +xr10 0111 STIM STSM offs4 +xr10 1000 DUP LDSX offs4 +xr10 1001 --- LDSXH offs2 +xr10 1010 PUSHS LDSXB offs +xr10 1011 POPS LDSXM offs4 +xr10 1100 --- STSX offs4 +xr10 1101 --- STSXH offs2 +xr10 1110 --- STSXB offs +xr10 1111 RET STSXM offs + +xr11 0000 --- LA uoffs +xr11 0001 --- LAS offs +xr11 0010 --- LAC dlbl +xr11 0011 --- --- +xr11 0100 --- LAX uoffs +xr11 0101 --- LASX offs +xr11 0110 --- SLSP level +xr11 0111 --- SDC uu +xr11 1000 --- --- +xr11 1001 --- PCAL ilbl +xr11 1010 --- SYSIO fn,sop +xr11 1011 --- LIB lop +xr11 1100 --- FLOAT fop +xr11 1101 --- *LABEL ilbl +xr11 1110 --- *INCLUDE fn +xr11 1111 END *LINE lineno + +KEY: + r = Reserved bit (must be zero) + fn = 8-bit file number + lvl = 8-bit static nexting level + sop = 17-bit sysio operation + lineno = 17-bit line number + nn = 32-bit constant value (signed) + uu = 32-bit constant value (unsigned) + fop = 32-bit floating point operation + lop = 32-bit library call identifier + ilbl = 32-bit Instruction space label number + dlbl = 32-stack data label + offs4 = 32-bit word offset with respect to LSP (signed) + offs2 = 32-bit halfword offset with respect to LSP (signed) + offs = 32-bit byte offset with respect to LSP (signed) + uoffs4 = 32-bit word offset with respect to SPB (unsigned) + uoffs2 = 32-bit halfword offset with respect to SPB (unsigned) + uoffs = 32-bit byte offset with respect to SPB (unsigned) + c = string follows pseudo-operation + = Indicates pseudo-operations (these are removed diff --git a/misc/pascal/insn32/include/pinsn32.h b/misc/pascal/insn32/include/pinsn32.h index e92202402..29cf363e7 100644 --- a/misc/pascal/insn32/include/pinsn32.h +++ b/misc/pascal/insn32/include/pinsn32.h @@ -1,426 +1,426 @@ -/**************************************************************************** - * pinsn32.h - * 32-bit P-code operation code definitions - * - * Copyright (C) 2008 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -#ifndef __PINSN32_H -#define __PINSN32_H - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -/**************************************************************************** - * Definitions - ****************************************************************************/ - -/* 32-bit op-code bit definitions - * - * Machine model: - * - * SPB 32-bit Pascal stack base address - * SP 32-bit Pascal stack pointer - * LSP 32-bit Level stack pointer - * CSB 32-bit Character stack base address - * CSP 32-bit Character stack pointer - * DS 32-bit Data size register (for multiple reg transfers) - * PC 32-bit Program Counter - * CC Condition code register - * --- Volatile general purpose registers - * --- Static general purpose registers - * - * Condition codes: Z(ero), N(egative) - * - * +=====+=====+ - * | Z | N | - * +=====+=====+=====+ - * | EQ | 1 | - | - * | NEQ | 0 | - | - * | LT | - | 1 | - * | GTE | - | 0 | - * | GT | 0 | 0 | - * | LTE | 1 | 1 | - * +=====+=====+=====+ - * - * Opcode Encoding Summary: - * - * 0rxx xxxx 1rxxx xxxx - * xr00 0000 NOP LD uoffs4 - * xr00 0001 NEG LDH uoffs3 - * xr00 0010 ABS LDB uoffs - * xr00 0011 INC LDM uoffs4 - * xr00 0100 DEC ST uoffs4 - * xr00 0101 NOT STH uoffs2 - * xr00 0110 ADD STB uoffs - * xr00 0111 SUB STM uoffs4 - * xr00 1000 MUL LDX uoffs4 - * xr00 1001 DIV LDXH uoffs2 - * xr00 1010 MOD LDXB uoffs - * xr00 1011 SLL LDXM uoffs4 - * xr00 1100 SRL STX uoffs4 - * xr00 1101 SRA STXH uoffs2 - * xr00 1110 OR STXB uoffs - * xr00 1111 AND STXM uoffs - * - * xr01 0000 EQUZ JEQUZ ilbl - * xr01 0001 NEQZ JNEQZ ilbl - * xr01 0010 LTZ JLTZ ilbl - * xr01 0011 GTEZ JGTEZ ilbl - * xr01 0100 GTZ JGTZ ilbl - * xr01 0101 LTEZ JLTEZ ilbl - * xr01 0110 --- JMP ilbl - * xr01 0111 --- PUSH nn - * xr01 1000 EQU JEQU ilbl - * xr01 1001 NEQ JNEQ ilbl - * xr01 1010 LT JLT ilbl - * xr01 1011 GTE JGTE ilbl - * xr01 1100 GT JGT ilbl - * xr01 1101 LTE JLTE ilbl - * xr01 1110 --- --- - * xr01 1111 BIT INDS nn - * - * xr10 0000 LDI LDS offs4 - * xr10 0001 LDIH LDSH offs3 - * xr10 0010 LDIB LDSB offs - * xr10 0011 LDIM LDSM offs4 - * xr10 0100 STI STS offs4 - * xr10 0101 STIH STSH offs2 - * xr10 0110 STIB STSB offs - * xr10 0111 STIM STSM offs4 - * xr10 1000 DUP LDSX offs4 - * xr10 1001 --- LDSXH offs2 - * xr10 1010 PUSHS LDSXB offs - * xr10 1011 POPS LDSXM offs4 - * xr10 1100 --- STSX offs4 - * xr10 1101 --- STSXH offs2 - * xr10 1110 --- STSXB offs - * xr10 1111 RET STSXM offs - * - * xr11 0000 --- LA uoffs - * xr11 0001 --- LAS offs - * xr11 0010 --- LAC dlbl - * xr11 0011 --- --- - * xr11 0100 --- LAX uoffs - * xr11 0101 --- LASX offs - * xr11 0110 --- SLSP level - * xr11 0111 --- SDC uu - * xr11 1000 --- --- - * xr11 1001 --- PCAL ilbl - * xr11 1010 --- SYSIO fn,sop - * xr11 1011 --- LIB lop - * xr11 1100 --- FLOAT fop - * xr11 1101 --- *LABEL ilbl - * xr11 1110 --- *INCLUDE fn - * xr11 1111 END *LINE lineno - * - * KEY: - * r = Reserved bit (must be zero) - * fn = 8-bit file number - * lvl = 8-bit static nexting level - * sop = 17-bit sysio operation - * lineno = 17-bit line number - * nn = 32-bit constant value (signed) - * uu = 32-bit constant value (unsigned) - * fop = 32-bit floating point operation - * lop = 32-bit library call identifier - * ilbl = 32-bit Instruction space label number - * dlbl = 32-stack data label - * offs4 = 32-bit word offset with respect to LSP (signed) - * offs2 = 32-bit halfword offset with respect to LSP (signed) - * offs = 32-bit byte offset with respect to LSP (signed) - * uoffs4 = 32-bit word offset with respect to SPB (unsigned) - * uoffs2 = 32-bit halfword offset with respect to SPB (unsigned) - * uoffs = 32-bit byte offset with respect to SPB (unsigned) - * c = string follows psuedo-operation - * * = Indicates pseudo-operations (these are removed - * after final fixup of the object file). - */ - -#define o32 (0x80) - -#define GETOP(o) ((o)->op) -#define PUTOP(o,v) do { (o)->op = (v); } while (0) - -#define GETARG(o) ((o)->arg) -#define PUTARG(o,a) do { (o)->arg = (a); } while (0) - -#define ARGONES 0xffffffff - -/* The opcode binary is stored in big endian order (so that the opcode - * always comes first). The following definitions simplify ordering - * of byte accesses. - */ - -#ifdef CONFIG_ENDIAN_BIG -# define opB1 0 -# define opB2 1 -# define opB3 2 -# define opB4 3 -#else -# define opB1 3 -# define opB2 2 -# define opB3 1 -# define opB4 0 -#endif - -/** 1-BYTE OPCODES WITH NO ARGUMENTS (other than stack arguments) ***********/ - -/* Program control (No stack arguments) */ - -#define oNOP (0x00) - -/* Arithmetic & logical & and integer conversions (One 32-bit stack - * argument) - */ - -#define oNEG (0x01) -#define oABS (0x02) -#define oINC (0x03) -#define oDEC (0x04) -#define oNOT (0x05) -#define oADD (0x06) -#define oSUB (0x07) -#define oMUL (0x08) -#define oDIV (0x09) -#define oMOD (0x0a) -#define oSLL (0x0b) -#define oSRL (0x0c) -#define oSRA (0x0d) -#define oOR (0x0e) -#define oAND (0x0f) - -/* Comparisons (One 32-bit stack argument) */ - -#define oEQUZ (0x10) -#define oNEQZ (0x11) -#define oLTZ (0x12) -#define oGTEZ (0x13) -#define oGTZ (0x14) -#define oLTEZ (0x15) - -/* Comparisons (Two 32-bit stack arguments) */ - -#define oEQU (0x18) -#define oNEQ (0x19) -#define oLT (0x1a) -#define oGTE (0x1b) -#define oGT (0x1c) -#define oLTE (0x1d) -#define oBIT (0x1f) - -/* Load Immediate */ - -#define oLDI (0x20) /* (One 32-bit stack argument) */ -#define oLDIH (0x21) /* (One 32-bit stack argument) */ -#define oLDIB (0x22) /* (One 32-bit stack argument) */ -#define oLDIM (0x23) /* (Two 32-bit stack argument) */ - -/* Store Immediate */ - -#define oSTI (0x24) /* (Two 32-bit stack argument) */ -#define oSTIH (0x25) /* (Two 32-bit stack argument) */ -#define oSTIB (0x26) /* (Two 32-bit stack argument) */ -#define oSTIM (0x27) /* (Two+n 32-bit stack argument) */ - -/* Data stack */ - -#define oDUP (0x28) /* (One 32-bit stack argument) */ -#define oDUPH (0x29) /* (One 32-bit stack argument) */ -#define oPUSHS (0x2a) /* No stack arguments */ -#define oPOPS (0x2b) /* (One 32-bit stack argument) */ - -/* Program control (No stack arguments) - * Behavior: - * Pop return address - * Pop saved base register (BR) - * Discard saved base address - * Set program counter (PC) to return address - */ - -#define oRET (0x2f) - -/* System Functions (No stack arguments) */ - -#define oEND (0x3f) - -/** 4-BYTE OPCODES INCLUDING ONE 32-BIT ARGUMENT ****************************/ - -/* Load: arg = unsigned base offset */ - -#define oLD (o32|0x00) /* No stack arguments */ -#define oLDH (o32|0x01) /* No stack arguments */ -#define oLDB (o32|0x02) /* No stack arguments */ -#define oLDM (o32|0x03) /* One 32-bit stack argument */ - -/* Store: arg = unsigned base offset */ - -#define oST (o32|0x04) /* One 32-bit stack argument */ -#define oSTH (o32|0x05) /* One 32-bit stack argument */ -#define oSTB (o32|0x06) /* One 32-bit stack argument */ -#define oSTM (o32|0x07) /* One+n 32-bit stack argument */ - -/* Load Indexed: arg = unsigned base offset */ - -#define oLDX (o32|0x08) /* One 32-bit stack argument */ -#define oLDXH (o32|0x09) /* One 32-bit stack argument */ -#define oLDXB (o32|0x0a) /* One 32-bit stack argument */ -#define oLDXM (o32|0x0b) /* Two 32-bit stack argument */ - -/* Store Indexed: arg = unsigned base offset */ - -#define oSTX (o32|0x0c) /* Two 32-bit stack argument */ -#define oSTXH (o32|0x0d) /* Two 32-bit stack argument */ -#define oSTXB (o32|0x0e) /* Two 32-bit stack argument */ -#define oSTXM (o32|0x0f) /* Two+n 32-bit stack argument */ - -/* Program control: arg = unsigned label (One 32-bit stack argument) */ - -#define oJEQUZ (o32|0x10) -#define oJNEQZ (o32|0x11) -#define oJLTZ (o32|0x12) -#define oJGTEZ (o32|0x13) -#define oJGTZ (o32|0x14) -#define oJLTEZ (o32|0x15) - -/* Program control: arg = unsigned label (no stack arguments) */ - -#define oJMP (o32|0x16) - -/* Data stack: arg = 32 bit signed data (no stack arguments) */ - -#define oPUSH (o32|0x17) - -/* Program control: arg = unsigned label (One 32-bit stack argument) */ - -#define oJEQU (o32|0x18) -#define oJNEQ (o32|0x19) -#define oJLT (o32|0x1a) -#define oJGTE (o32|0x1b) -#define oJGT (o32|0x1c) -#define oJLTE (o32|0x1d) - -/* Data stack: arg = 32 bit signed data (no stack arguments) */ - -#define oINDS (o32|0x1f) - -/* Load: Uses LSP; arg = signed frame offset */ - -#define oLDS (o32|0x20) /* No stack arguments */ -#define oLDSH (o32|0x21) /* No stack arguments */ -#define oLDSB (o32|0x22) /* No stack arguments */ -#define oLDSM (o32|0x23) /* One 32-bit stack argument */ - -/* Store: Uses LSP; arg = signed frame offset */ - -#define oSTS (o32|0x24) /* One 32-bit stack argument */ -#define oSTSH (o32|0x25) /* One 32-bit stack argument */ -#define oSTSB (o32|0x26) /* One 32-bit stack argument */ -#define oSTSM (o32|0x27) /* One+n 32-bit stack argument */ - -/* Load Indexed: Uses LSP; arg = signed frame offset */ - -#define oLDSX (o32|0x28) /* One 32-bit stack argument */ -#define oLDSXH (o32|0x29) /* One 32-bit stack argument */ -#define oLDSXB (o32|0x2a) /* One 32-bit stack argument */ -#define oLDSXM (o32|0x2b) /* Two 32-bit stack argument */ - -/* Store Indexed: Uses LSP; arg = signed frame offset */ - -#define oSTSX (o32|0x2c) /* Two 32-bit stack argument */ -#define oSTSXH (o32|0x2d) /* Two 32-bit stack argument */ -#define oSTSXB (o32|0x2e) /* Two 32-bit stack argument */ -#define oSTSXM (o32|0x2f) /* Two+n 32-bit stack argument */ - -/* Load address relative to stack base: arg = unsigned offset */ - -#define oLA (o32|0x30) - -/* Load address: Uses SLP, arg = signed frame offset */ - -#define oLAS (o32|0x31) /* No stack arguments */ - -/* Load absolute stack address: arg = RODATA offset (No stack arguments) */ - -#define oLAC (o32|0x32) - -/* Load address relative to stack base: arg = unsigned offset, TOS=index */ - -#define oLAX (o32|0x34) - -/* Load address indexed: Uses SLP, arg = signed frame offset */ - -#define oLASX (o32|0x35) /* No stack arguments */ - -/* Set LSP: arg = new level that evaluates to LSP value */ - -#define oSLSP (o32|0x36) - -/* Set DS: arg = new byte count in DS register */ - -#define oSDC (o32|0x37) - -/* Program Control: Uses LSP; arg = unsigned label - * (No stack arguments) - * Behavior: - * Push base address of level - * Push base register (BR) value - * Set new base register value (BR) as top of stack - * Push return address - * Set program counter (PC) for address associated with label - */ - -#define oPCAL (o32|0x39) - -/* System calls: arg = file number | sub-function code */ - -#define oSYSIO (o32|0x3a) - -/* System functions: arg = 32-bit library call identifier */ - -#define oLIB (o32|0x3b) - -/* Floating point operations: arg = FP op-code */ - -#define oFLOAT (o32|0x3c) - -/* Program control: arg = unsigned label (no stack arguments) */ - -#define oLABEL (o32|0x3d) - -/* Psuedo-operations: arg = file number OR line number */ - -#define oINCLUDE (o32|0x3e) -#define oLINE (o32|0x3f) - -#endif /* __PINSN32_H */ +/**************************************************************************** + * pinsn32.h + * 32-bit P-code operation code definitions + * + * Copyright (C) 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __PINSN32_H +#define __PINSN32_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/* 32-bit op-code bit definitions + * + * Machine model: + * + * SPB 32-bit Pascal stack base address + * SP 32-bit Pascal stack pointer + * LSP 32-bit Level stack pointer + * CSB 32-bit Character stack base address + * CSP 32-bit Character stack pointer + * DS 32-bit Data size register (for multiple reg transfers) + * PC 32-bit Program Counter + * CC Condition code register + * --- Volatile general purpose registers + * --- Static general purpose registers + * + * Condition codes: Z(ero), N(egative) + * + * +=====+=====+ + * | Z | N | + * +=====+=====+=====+ + * | EQ | 1 | - | + * | NEQ | 0 | - | + * | LT | - | 1 | + * | GTE | - | 0 | + * | GT | 0 | 0 | + * | LTE | 1 | 1 | + * +=====+=====+=====+ + * + * Opcode Encoding Summary: + * + * 0rxx xxxx 1rxxx xxxx + * xr00 0000 NOP LD uoffs4 + * xr00 0001 NEG LDH uoffs3 + * xr00 0010 ABS LDB uoffs + * xr00 0011 INC LDM uoffs4 + * xr00 0100 DEC ST uoffs4 + * xr00 0101 NOT STH uoffs2 + * xr00 0110 ADD STB uoffs + * xr00 0111 SUB STM uoffs4 + * xr00 1000 MUL LDX uoffs4 + * xr00 1001 DIV LDXH uoffs2 + * xr00 1010 MOD LDXB uoffs + * xr00 1011 SLL LDXM uoffs4 + * xr00 1100 SRL STX uoffs4 + * xr00 1101 SRA STXH uoffs2 + * xr00 1110 OR STXB uoffs + * xr00 1111 AND STXM uoffs + * + * xr01 0000 EQUZ JEQUZ ilbl + * xr01 0001 NEQZ JNEQZ ilbl + * xr01 0010 LTZ JLTZ ilbl + * xr01 0011 GTEZ JGTEZ ilbl + * xr01 0100 GTZ JGTZ ilbl + * xr01 0101 LTEZ JLTEZ ilbl + * xr01 0110 --- JMP ilbl + * xr01 0111 --- PUSH nn + * xr01 1000 EQU JEQU ilbl + * xr01 1001 NEQ JNEQ ilbl + * xr01 1010 LT JLT ilbl + * xr01 1011 GTE JGTE ilbl + * xr01 1100 GT JGT ilbl + * xr01 1101 LTE JLTE ilbl + * xr01 1110 --- --- + * xr01 1111 BIT INDS nn + * + * xr10 0000 LDI LDS offs4 + * xr10 0001 LDIH LDSH offs3 + * xr10 0010 LDIB LDSB offs + * xr10 0011 LDIM LDSM offs4 + * xr10 0100 STI STS offs4 + * xr10 0101 STIH STSH offs2 + * xr10 0110 STIB STSB offs + * xr10 0111 STIM STSM offs4 + * xr10 1000 DUP LDSX offs4 + * xr10 1001 --- LDSXH offs2 + * xr10 1010 PUSHS LDSXB offs + * xr10 1011 POPS LDSXM offs4 + * xr10 1100 --- STSX offs4 + * xr10 1101 --- STSXH offs2 + * xr10 1110 --- STSXB offs + * xr10 1111 RET STSXM offs + * + * xr11 0000 --- LA uoffs + * xr11 0001 --- LAS offs + * xr11 0010 --- LAC dlbl + * xr11 0011 --- --- + * xr11 0100 --- LAX uoffs + * xr11 0101 --- LASX offs + * xr11 0110 --- SLSP level + * xr11 0111 --- SDC uu + * xr11 1000 --- --- + * xr11 1001 --- PCAL ilbl + * xr11 1010 --- SYSIO fn,sop + * xr11 1011 --- LIB lop + * xr11 1100 --- FLOAT fop + * xr11 1101 --- *LABEL ilbl + * xr11 1110 --- *INCLUDE fn + * xr11 1111 END *LINE lineno + * + * KEY: + * r = Reserved bit (must be zero) + * fn = 8-bit file number + * lvl = 8-bit static nexting level + * sop = 17-bit sysio operation + * lineno = 17-bit line number + * nn = 32-bit constant value (signed) + * uu = 32-bit constant value (unsigned) + * fop = 32-bit floating point operation + * lop = 32-bit library call identifier + * ilbl = 32-bit Instruction space label number + * dlbl = 32-stack data label + * offs4 = 32-bit word offset with respect to LSP (signed) + * offs2 = 32-bit halfword offset with respect to LSP (signed) + * offs = 32-bit byte offset with respect to LSP (signed) + * uoffs4 = 32-bit word offset with respect to SPB (unsigned) + * uoffs2 = 32-bit halfword offset with respect to SPB (unsigned) + * uoffs = 32-bit byte offset with respect to SPB (unsigned) + * c = string follows pseudo-operation + * * = Indicates pseudo-operations (these are removed + * after final fixup of the object file). + */ + +#define o32 (0x80) + +#define GETOP(o) ((o)->op) +#define PUTOP(o,v) do { (o)->op = (v); } while (0) + +#define GETARG(o) ((o)->arg) +#define PUTARG(o,a) do { (o)->arg = (a); } while (0) + +#define ARGONES 0xffffffff + +/* The opcode binary is stored in big endian order (so that the opcode + * always comes first). The following definitions simplify ordering + * of byte accesses. + */ + +#ifdef CONFIG_ENDIAN_BIG +# define opB1 0 +# define opB2 1 +# define opB3 2 +# define opB4 3 +#else +# define opB1 3 +# define opB2 2 +# define opB3 1 +# define opB4 0 +#endif + +/** 1-BYTE OPCODES WITH NO ARGUMENTS (other than stack arguments) ***********/ + +/* Program control (No stack arguments) */ + +#define oNOP (0x00) + +/* Arithmetic & logical & and integer conversions (One 32-bit stack + * argument) + */ + +#define oNEG (0x01) +#define oABS (0x02) +#define oINC (0x03) +#define oDEC (0x04) +#define oNOT (0x05) +#define oADD (0x06) +#define oSUB (0x07) +#define oMUL (0x08) +#define oDIV (0x09) +#define oMOD (0x0a) +#define oSLL (0x0b) +#define oSRL (0x0c) +#define oSRA (0x0d) +#define oOR (0x0e) +#define oAND (0x0f) + +/* Comparisons (One 32-bit stack argument) */ + +#define oEQUZ (0x10) +#define oNEQZ (0x11) +#define oLTZ (0x12) +#define oGTEZ (0x13) +#define oGTZ (0x14) +#define oLTEZ (0x15) + +/* Comparisons (Two 32-bit stack arguments) */ + +#define oEQU (0x18) +#define oNEQ (0x19) +#define oLT (0x1a) +#define oGTE (0x1b) +#define oGT (0x1c) +#define oLTE (0x1d) +#define oBIT (0x1f) + +/* Load Immediate */ + +#define oLDI (0x20) /* (One 32-bit stack argument) */ +#define oLDIH (0x21) /* (One 32-bit stack argument) */ +#define oLDIB (0x22) /* (One 32-bit stack argument) */ +#define oLDIM (0x23) /* (Two 32-bit stack argument) */ + +/* Store Immediate */ + +#define oSTI (0x24) /* (Two 32-bit stack argument) */ +#define oSTIH (0x25) /* (Two 32-bit stack argument) */ +#define oSTIB (0x26) /* (Two 32-bit stack argument) */ +#define oSTIM (0x27) /* (Two+n 32-bit stack argument) */ + +/* Data stack */ + +#define oDUP (0x28) /* (One 32-bit stack argument) */ +#define oDUPH (0x29) /* (One 32-bit stack argument) */ +#define oPUSHS (0x2a) /* No stack arguments */ +#define oPOPS (0x2b) /* (One 32-bit stack argument) */ + +/* Program control (No stack arguments) + * Behavior: + * Pop return address + * Pop saved base register (BR) + * Discard saved base address + * Set program counter (PC) to return address + */ + +#define oRET (0x2f) + +/* System Functions (No stack arguments) */ + +#define oEND (0x3f) + +/** 4-BYTE OPCODES INCLUDING ONE 32-BIT ARGUMENT ****************************/ + +/* Load: arg = unsigned base offset */ + +#define oLD (o32|0x00) /* No stack arguments */ +#define oLDH (o32|0x01) /* No stack arguments */ +#define oLDB (o32|0x02) /* No stack arguments */ +#define oLDM (o32|0x03) /* One 32-bit stack argument */ + +/* Store: arg = unsigned base offset */ + +#define oST (o32|0x04) /* One 32-bit stack argument */ +#define oSTH (o32|0x05) /* One 32-bit stack argument */ +#define oSTB (o32|0x06) /* One 32-bit stack argument */ +#define oSTM (o32|0x07) /* One+n 32-bit stack argument */ + +/* Load Indexed: arg = unsigned base offset */ + +#define oLDX (o32|0x08) /* One 32-bit stack argument */ +#define oLDXH (o32|0x09) /* One 32-bit stack argument */ +#define oLDXB (o32|0x0a) /* One 32-bit stack argument */ +#define oLDXM (o32|0x0b) /* Two 32-bit stack argument */ + +/* Store Indexed: arg = unsigned base offset */ + +#define oSTX (o32|0x0c) /* Two 32-bit stack argument */ +#define oSTXH (o32|0x0d) /* Two 32-bit stack argument */ +#define oSTXB (o32|0x0e) /* Two 32-bit stack argument */ +#define oSTXM (o32|0x0f) /* Two+n 32-bit stack argument */ + +/* Program control: arg = unsigned label (One 32-bit stack argument) */ + +#define oJEQUZ (o32|0x10) +#define oJNEQZ (o32|0x11) +#define oJLTZ (o32|0x12) +#define oJGTEZ (o32|0x13) +#define oJGTZ (o32|0x14) +#define oJLTEZ (o32|0x15) + +/* Program control: arg = unsigned label (no stack arguments) */ + +#define oJMP (o32|0x16) + +/* Data stack: arg = 32 bit signed data (no stack arguments) */ + +#define oPUSH (o32|0x17) + +/* Program control: arg = unsigned label (One 32-bit stack argument) */ + +#define oJEQU (o32|0x18) +#define oJNEQ (o32|0x19) +#define oJLT (o32|0x1a) +#define oJGTE (o32|0x1b) +#define oJGT (o32|0x1c) +#define oJLTE (o32|0x1d) + +/* Data stack: arg = 32 bit signed data (no stack arguments) */ + +#define oINDS (o32|0x1f) + +/* Load: Uses LSP; arg = signed frame offset */ + +#define oLDS (o32|0x20) /* No stack arguments */ +#define oLDSH (o32|0x21) /* No stack arguments */ +#define oLDSB (o32|0x22) /* No stack arguments */ +#define oLDSM (o32|0x23) /* One 32-bit stack argument */ + +/* Store: Uses LSP; arg = signed frame offset */ + +#define oSTS (o32|0x24) /* One 32-bit stack argument */ +#define oSTSH (o32|0x25) /* One 32-bit stack argument */ +#define oSTSB (o32|0x26) /* One 32-bit stack argument */ +#define oSTSM (o32|0x27) /* One+n 32-bit stack argument */ + +/* Load Indexed: Uses LSP; arg = signed frame offset */ + +#define oLDSX (o32|0x28) /* One 32-bit stack argument */ +#define oLDSXH (o32|0x29) /* One 32-bit stack argument */ +#define oLDSXB (o32|0x2a) /* One 32-bit stack argument */ +#define oLDSXM (o32|0x2b) /* Two 32-bit stack argument */ + +/* Store Indexed: Uses LSP; arg = signed frame offset */ + +#define oSTSX (o32|0x2c) /* Two 32-bit stack argument */ +#define oSTSXH (o32|0x2d) /* Two 32-bit stack argument */ +#define oSTSXB (o32|0x2e) /* Two 32-bit stack argument */ +#define oSTSXM (o32|0x2f) /* Two+n 32-bit stack argument */ + +/* Load address relative to stack base: arg = unsigned offset */ + +#define oLA (o32|0x30) + +/* Load address: Uses SLP, arg = signed frame offset */ + +#define oLAS (o32|0x31) /* No stack arguments */ + +/* Load absolute stack address: arg = RODATA offset (No stack arguments) */ + +#define oLAC (o32|0x32) + +/* Load address relative to stack base: arg = unsigned offset, TOS=index */ + +#define oLAX (o32|0x34) + +/* Load address indexed: Uses SLP, arg = signed frame offset */ + +#define oLASX (o32|0x35) /* No stack arguments */ + +/* Set LSP: arg = new level that evaluates to LSP value */ + +#define oSLSP (o32|0x36) + +/* Set DS: arg = new byte count in DS register */ + +#define oSDC (o32|0x37) + +/* Program Control: Uses LSP; arg = unsigned label + * (No stack arguments) + * Behavior: + * Push base address of level + * Push base register (BR) value + * Set new base register value (BR) as top of stack + * Push return address + * Set program counter (PC) for address associated with label + */ + +#define oPCAL (o32|0x39) + +/* System calls: arg = file number | sub-function code */ + +#define oSYSIO (o32|0x3a) + +/* System functions: arg = 32-bit library call identifier */ + +#define oLIB (o32|0x3b) + +/* Floating point operations: arg = FP op-code */ + +#define oFLOAT (o32|0x3c) + +/* Program control: arg = unsigned label (no stack arguments) */ + +#define oLABEL (o32|0x3d) + +/* Pseudo-operations: arg = file number OR line number */ + +#define oINCLUDE (o32|0x3e) +#define oLINE (o32|0x3f) + +#endif /* __PINSN32_H */ diff --git a/misc/pascal/insn32/libinsn/pdasm.c b/misc/pascal/insn32/libinsn/pdasm.c index 75d79d7b6..31d45088f 100644 --- a/misc/pascal/insn32/libinsn/pdasm.c +++ b/misc/pascal/insn32/libinsn/pdasm.c @@ -303,7 +303,7 @@ static const struct optab_s g_sArg32OpTable[64] = /* 0xbd */ { NULL, LABEL_DEC }, - /* Psuedo-operations: arg = file number OR line number */ + /* Pseudo-operations: arg = file number OR line number */ /* 0xbe */ { "INCLUDE ", FILENO }, /* 0xbf */ { "LINE ", LINENO }, diff --git a/misc/pascal/pascal/pgen.c b/misc/pascal/pascal/pgen.c index fc108e3a6..25d4d956b 100644 --- a/misc/pascal/pascal/pgen.c +++ b/misc/pascal/pascal/pgen.c @@ -272,7 +272,7 @@ void pas_GenerateIoOperation(uint16_t ioOpcode, uint16_t fileNumber) } /***********************************************************************/ -/* Generate a psuedo call to a built-in, standard pascal function */ +/* Generate a pseudo call to a built-in, standard pascal function */ void pas_BuiltInFunctionCall(uint16_t libOpcode) { diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 1061f39ae..6fd497943 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -3119,7 +3119,7 @@ function called stm32_clockenable() that can be used by PM logic to re-start the PLL after re-awakening from deep sleep modes. * fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: All logic to traverse - inodes and mountpoints in the NuttX psuedo-file system. + inodes and mountpoints in the NuttX pseudo-file system. * fs/fat/fs_fat32.c: Max. filename length reported by statfs() was wrong if FAT long file names were enabled. * lib/stdio/lib_libvsprintf.c: Fieldwidth and justification were not diff --git a/nuttx/Documentation/NfsHowto.html b/nuttx/Documentation/NfsHowto.html index 0f08f4abe..0fee8baf7 100644 --- a/nuttx/Documentation/NfsHowto.html +++ b/nuttx/Documentation/NfsHowto.html @@ -1,388 +1,388 @@ - - -NFS Client How-To - - -

- - - - - -
-

NFS Client How-To

-

Last Updated: June 18, 2012

-
-

- - - - - -
-

Table of Contents

-
- -
- - - -
- - - - - -
- Adding NFS to the NuttX Configuration -
- - - - - -
- Mount Interface -
- - - - - -
- NFS Mount Command -
- - - - - -
- Configuring the NFS server (Ubuntu) -
-
- - - - - -
-

Adding NFS to the NuttX Configuration

-
- -

- The NFS client is easily added to your configuration: - You simply need to add CONFIG_NFS to your nuttx/.config file. - There are, however, a few dependencies on other system settings: -

-
    -
  1. - First, there are number of things that you must configure in order to be able to use any file system: -
  2. -
      -
    • - CONFIG_NFILE_DESCRIPTORS > 0. You must include support for file descriptors. -
    • -
    • - CONFIG_DISABLE_MOUNTPOINT=n. You must include support for mount points in the psuedo-file system. -
    • -
    -
  3. - And there are several dependencies on the networking configuration. - At a minimum, you need to have the following selections: -
  4. -
      -
    • - CONFIG_NET=y. General networking support. -
    • -
    • - CONFIG_NET_UDP=y. Support for UDP. -
    • -
    -
- - - - - -
-

Mount Interface

-
- -

- A low-level, C-callable interface is provided to mount a file system. - That interface is called mount() and is mentioned in the porting guide and is prototyped in the header file include/sys/mount.h: -

-
    -int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
    -
-

- Synopsis: - mount() attaches the filesystem specified by the source block device name into the root file system at the path specified by target. -

-

- Input Paramters: -

    -
  • source. A null-terminated string providing the fill path to a block driver in the NuttX psuedo-file system. -
  • target. The location in the NuttX psuedo-file system where the volume will be mounted. -
  • filesystemtype. A string identifying the type of file system to use. -
  • mountflags. Various flags that can be used to qualify how the file system is mounted. -
  • data. Opaque data that is passed to the file system with the mount occurs. -
-

-

- Returned Values - Zero is returned on success; -1 is returned on an error and errno is set appropriately: -

    -
  • EACCES. - A component of a path was not searchable or mounting a read-onlyfilesystem was attempted without giving the MS_RDONLY flag. -
  • -
  • EBUSY. - source is already mounted. -
  • -
  • EFAULT. - One of the pointer arguments points outside the user address space. -
  • -
  • EINVAL. - source had an invalid superblock. -
  • -
  • ENODEV. - filesystemtype not configured -
  • -
  • ENOENT. - A pathname was empty or had a nonexistent component. -
  • -
  • ENOMEM. - Could not allocate a memory to copy filenames or data into. -
  • -
  • ENOTBLK. - source is not a block device -
  • -
-

-

- This same interface can be used to mount a remote, NFS file system using some special parameters. - The NFS mount differs from the normal file system mount in that: (1) there is no block driver for the NFS file system, and (2) special parameters must be passed as data to describe the remote NFS server. - Thus the following code snippet might represent how an NFS file system is mounted: -

-
    -#include <sys/mount.h>
    -#include <nuttx/fs/nfs.h>
    -
    -struct nfs_args data;
    -char *mountpoint;
    -
    -ret = mount(NULL, mountpoint, string "nfs", 0, (FAR void *)&data);
    -
-

- NOTE that: (1) the block driver paramter is NULL. - The mount() is smart enough to know that no block driver is needed with the NFS file system. - (2) The NFS file system is identified with the simple string "nfs" - (3) A reference to struct nfs_args is passed as an NFS-specific argument. -

-

- The NFS-specific interface is described in the file include/nuttx/fs/nfs.h. - There you can see that struct nfs_args is defined as: -

-
    -struct nfs_args
    -{
    -  uint8_t  addrlen;               /* Length of address */
    -  uint8_t  sotype;                /* Socket type */
    -  uint8_t  flags;                 /* Flags, determines if following are valid: */
    -  uint8_t  timeo;                 /* Time value in deciseconds (with NFSMNT_TIMEO) */
    -  uint8_t  retrans;               /* Times to retry send (with NFSMNT_RETRANS) */
    -  uint16_t wsize;                 /* Write size in bytes (with NFSMNT_WSIZE) */
    -  uint16_t rsize;                 /* Read size in bytes (with NFSMNT_RSIZE) */
    -  uint16_t readdirsize;           /* readdir size in bytes (with NFSMNT_READDIRSIZE) */
    -  char    *path;                  /* Server's path of the directory being mount */
    -  struct   sockaddr_storage addr; /* File server address (requires 32-bit alignment) */
    -};
    -
- - - - - -
-

NFS Mount Command

-
- -

- The NuttShell (NSH) also supports a command called nfsmount - that can be used to mount a remote file system via the NSH command line. -

-

- Command Syntax: -

-
    -nfsmount <server-address> <mount-point> <remote-path>
    -
-

- Synopsis. - The nfsmount command mounts a network file system in the NuttX psuedo filesystem. - The nfsmount will use NFSv3 UDP protocol to mount the remote file system. -

-

- Command Line Arguments. - The nfsmount takes three arguments: -

-
    -
  1. - The <server-address> is the IP address of the server exporting the file system you wish to mount. - This implementation of NFS for the NuttX RTOS is only for a local area network, so the server and client must be in the same network. -
  2. -
  3. - The <mount-point > is the location in the NuttX pseudo filesystem where the mounted volume will appear. - This mount point can only reside in the NuttX pseudo filesystem. - By convention, this mount point is a subdirectory under /mnt. - The mount command will create whatever psuedo directories that may be needed to complete the full path (but the full path must not already exist). -
  4. -
  5. - The <remote-path> is the file system / directory being exported from server. - This / directory must have been configured for exportation on the server before when the NFS server was set up. -
  6. -
- -

- After the volume has been mounted in the NuttX pseudo filesystem, it may be access in the same way as other objects in the file system. -

-

- Example. - Suppose the the NFS server has been configured to export the directory /export/shared. - The the following command would mount that file system (assuming that the target also has privileges to mount the file system). -

-
    -NuttShell (NSH)
    -nsh> ls /mnt
    -/mnt:
    -nsh: ls: no such directory: /mnt
    -nsh> nfsmount 10.0.0.1 /mnt/nfs /export/shared
    -nsh> ls -l /mnt/nfs
    -/mnt/nfs:
    - drwxrwxrwx   4096 ..
    - drwxrwxrwx   4096 testdir/
    - -rw-rw-rw-      6 ctest.txt
    - -rw-r--r--     15 btest.txt
    - drwxrwxrwx   4096 .
    -nsh> echo "This is a test" >/mnt/nfs/testdir/testfile.txt
    -nsh> ls -l /mnt/nfs/testdir
    -/mnt/nfs/testdir:
    - -rw-rw-rw-     21 another.txt
    - drwxrwxrwx   4096 ..
    - drwxrwxrwx   4096 .
    - -rw-rw-rw-     16 testfile.txt
    -nsh> cat /mnt/nfs/testdir/testfile.txt
    -This is a test
    -
- - - - - -
-

Configuring the NFS server (Ubuntu)

-
- -

- Setting up the server will be done in two steps: - First, setting up the configuration file for NFS, and then starting the NFS services. - But first, you need to install the nfs server on Ubuntu with the these two commands: -

-
    -# sudo apt-get install nfs-common
    -# sudo apt-get install nfs-kernel-server
    -
- -

- After that, we need to make or choose the directory we want to export from the NFS server. - In our case, we are going to make a new directory called /export. -

-
    -# sudo mkdir /export
    -
-

- It is important that /export directory allow access to everyone (777 permissions) as we will be accessing the NFS share from the client with no authentication. -

-
    -# sudo chmod 777 /export
    -
-

- When all this is done, we will need to edit the configuration file to set up an NFS server: /etc/exports. - This file contains a list of entries; - each entry indicates a volume that is shared and how it is shared. - For more information for a complete description of all the setup options for this file you can check in the man pages (man export).

- An entry in /etc/exports will typically look like this: -

-
    -directory machine1(option11,option12)
    -
-

- So for our example we export /export to the client 10.0.0.2 add the entry: -

-
    -/export 10.0.0.2(rw)
    -
-

- In our case we are using all the default options except for the ro that we replaced with rw so that our client will have read and write access to the directory that we are exporting. -

-

- After we do all the require configurations, we are ready to start the server with the next command: -

-
    -# sudo /etc/init.d/nfs-kernel-server start
    -
-

- Note: If you later decide to add more NFS exports to the /etc/exports file, you will need to either restart NFS daemon -or run command exportfs. -

-
    -# sudo /etc/init.d/nfs-kernel-server start 
    -
-

Or

-
    -# exportfs -ra
    -
-

- Now we can check if the export directory and our mount point is properly set up. -

-
    -# sudo showmount -e
    -# sudo showmount -a
    -
-

- And also we can verify if NFS is running in the system with: -

-

-

    -# rpcinfo –p
    -program vers proto   port
    -   100000   2   tcp    111  portmapper
    -   100000   2   udp    111  portmapper
    -   100011   1   udp   749  rquotad
    -   100011   2   udp   749  rquotad
    -   100005   1   udp    759  mountd
    -   100005   1   tcp    761  mountd
    -   100005   2   udp    764  mountd
    -   100005   2   tcp    766  mountd
    -   100005   3   udp    769  mountd
    -   100005   3   tcp    771  mountd
    -   100003   2   udp   2049  nfs
    -   100003   3   udp   2049  nfs
    -   300019   1   tcp    830  amd
    -   300019   1   udp    831  amd
    -   100024   1   udp    944  status
    -   100024   1   tcp    946  status
    -   100021   1   udp   1042  nlockmgr
    -   100021   3   udp   1042  nlockmgr
    -   100021   4   udp   1042  nlockmgr
    -   100021   1   tcp   1629  nlockmgr
    -   100021   3   tcp   1629  nlockmgr
    -   100021   4   tcp   1629  nlockmgr
    -
-

- Now your NFS sever is sharing /export directory to be accessed. -

- - - + + +NFS Client How-To + + +

+ + + + + +
+

NFS Client How-To

+

Last Updated: June 18, 2012

+
+

+ + + + + +
+

Table of Contents

+
+ +
+ + + +
+ + + + + +
+ Adding NFS to the NuttX Configuration +
+ + + + + +
+ Mount Interface +
+ + + + + +
+ NFS Mount Command +
+ + + + + +
+ Configuring the NFS server (Ubuntu) +
+
+ + + + + +
+

Adding NFS to the NuttX Configuration

+
+ +

+ The NFS client is easily added to your configuration: + You simply need to add CONFIG_NFS to your nuttx/.config file. + There are, however, a few dependencies on other system settings: +

+
    +
  1. + First, there are number of things that you must configure in order to be able to use any file system: +
  2. +
      +
    • + CONFIG_NFILE_DESCRIPTORS > 0. You must include support for file descriptors. +
    • +
    • + CONFIG_DISABLE_MOUNTPOINT=n. You must include support for mount points in the pseudo-file system. +
    • +
    +
  3. + And there are several dependencies on the networking configuration. + At a minimum, you need to have the following selections: +
  4. +
      +
    • + CONFIG_NET=y. General networking support. +
    • +
    • + CONFIG_NET_UDP=y. Support for UDP. +
    • +
    +
+ + + + + +
+

Mount Interface

+
+ +

+ A low-level, C-callable interface is provided to mount a file system. + That interface is called mount() and is mentioned in the porting guide and is prototyped in the header file include/sys/mount.h: +

+
    +int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
    +
+

+ Synopsis: + mount() attaches the filesystem specified by the source block device name into the root file system at the path specified by target. +

+

+ Input Paramters: +

    +
  • source. A null-terminated string providing the fill path to a block driver in the NuttX pseudo-file system. +
  • target. The location in the NuttX pseudo-file system where the volume will be mounted. +
  • filesystemtype. A string identifying the type of file system to use. +
  • mountflags. Various flags that can be used to qualify how the file system is mounted. +
  • data. Opaque data that is passed to the file system with the mount occurs. +
+

+

+ Returned Values + Zero is returned on success; -1 is returned on an error and errno is set appropriately: +

    +
  • EACCES. + A component of a path was not searchable or mounting a read-onlyfilesystem was attempted without giving the MS_RDONLY flag. +
  • +
  • EBUSY. + source is already mounted. +
  • +
  • EFAULT. + One of the pointer arguments points outside the user address space. +
  • +
  • EINVAL. + source had an invalid superblock. +
  • +
  • ENODEV. + filesystemtype not configured +
  • +
  • ENOENT. + A pathname was empty or had a nonexistent component. +
  • +
  • ENOMEM. + Could not allocate a memory to copy filenames or data into. +
  • +
  • ENOTBLK. + source is not a block device +
  • +
+

+

+ This same interface can be used to mount a remote, NFS file system using some special parameters. + The NFS mount differs from the normal file system mount in that: (1) there is no block driver for the NFS file system, and (2) special parameters must be passed as data to describe the remote NFS server. + Thus the following code snippet might represent how an NFS file system is mounted: +

+
    +#include <sys/mount.h>
    +#include <nuttx/fs/nfs.h>
    +
    +struct nfs_args data;
    +char *mountpoint;
    +
    +ret = mount(NULL, mountpoint, string "nfs", 0, (FAR void *)&data);
    +
+

+ NOTE that: (1) the block driver paramter is NULL. + The mount() is smart enough to know that no block driver is needed with the NFS file system. + (2) The NFS file system is identified with the simple string "nfs" + (3) A reference to struct nfs_args is passed as an NFS-specific argument. +

+

+ The NFS-specific interface is described in the file include/nuttx/fs/nfs.h. + There you can see that struct nfs_args is defined as: +

+
    +struct nfs_args
    +{
    +  uint8_t  addrlen;               /* Length of address */
    +  uint8_t  sotype;                /* Socket type */
    +  uint8_t  flags;                 /* Flags, determines if following are valid: */
    +  uint8_t  timeo;                 /* Time value in deciseconds (with NFSMNT_TIMEO) */
    +  uint8_t  retrans;               /* Times to retry send (with NFSMNT_RETRANS) */
    +  uint16_t wsize;                 /* Write size in bytes (with NFSMNT_WSIZE) */
    +  uint16_t rsize;                 /* Read size in bytes (with NFSMNT_RSIZE) */
    +  uint16_t readdirsize;           /* readdir size in bytes (with NFSMNT_READDIRSIZE) */
    +  char    *path;                  /* Server's path of the directory being mount */
    +  struct   sockaddr_storage addr; /* File server address (requires 32-bit alignment) */
    +};
    +
+ + + + + +
+

NFS Mount Command

+
+ +

+ The NuttShell (NSH) also supports a command called nfsmount + that can be used to mount a remote file system via the NSH command line. +

+

+ Command Syntax: +

+
    +nfsmount <server-address> <mount-point> <remote-path>
    +
+

+ Synopsis. + The nfsmount command mounts a network file system in the NuttX pseudo filesystem. + The nfsmount will use NFSv3 UDP protocol to mount the remote file system. +

+

+ Command Line Arguments. + The nfsmount takes three arguments: +

+
    +
  1. + The <server-address> is the IP address of the server exporting the file system you wish to mount. + This implementation of NFS for the NuttX RTOS is only for a local area network, so the server and client must be in the same network. +
  2. +
  3. + The <mount-point > is the location in the NuttX pseudo filesystem where the mounted volume will appear. + This mount point can only reside in the NuttX pseudo filesystem. + By convention, this mount point is a subdirectory under /mnt. + The mount command will create whatever pseudo directories that may be needed to complete the full path (but the full path must not already exist). +
  4. +
  5. + The <remote-path> is the file system / directory being exported from server. + This / directory must have been configured for exportation on the server before when the NFS server was set up. +
  6. +
+ +

+ After the volume has been mounted in the NuttX pseudo filesystem, it may be access in the same way as other objects in the file system. +

+

+ Example. + Suppose the the NFS server has been configured to export the directory /export/shared. + The the following command would mount that file system (assuming that the target also has privileges to mount the file system). +

+
    +NuttShell (NSH)
    +nsh> ls /mnt
    +/mnt:
    +nsh: ls: no such directory: /mnt
    +nsh> nfsmount 10.0.0.1 /mnt/nfs /export/shared
    +nsh> ls -l /mnt/nfs
    +/mnt/nfs:
    + drwxrwxrwx   4096 ..
    + drwxrwxrwx   4096 testdir/
    + -rw-rw-rw-      6 ctest.txt
    + -rw-r--r--     15 btest.txt
    + drwxrwxrwx   4096 .
    +nsh> echo "This is a test" >/mnt/nfs/testdir/testfile.txt
    +nsh> ls -l /mnt/nfs/testdir
    +/mnt/nfs/testdir:
    + -rw-rw-rw-     21 another.txt
    + drwxrwxrwx   4096 ..
    + drwxrwxrwx   4096 .
    + -rw-rw-rw-     16 testfile.txt
    +nsh> cat /mnt/nfs/testdir/testfile.txt
    +This is a test
    +
+ + + + + +
+

Configuring the NFS server (Ubuntu)

+
+ +

+ Setting up the server will be done in two steps: + First, setting up the configuration file for NFS, and then starting the NFS services. + But first, you need to install the nfs server on Ubuntu with the these two commands: +

+
    +# sudo apt-get install nfs-common
    +# sudo apt-get install nfs-kernel-server
    +
+ +

+ After that, we need to make or choose the directory we want to export from the NFS server. + In our case, we are going to make a new directory called /export. +

+
    +# sudo mkdir /export
    +
+

+ It is important that /export directory allow access to everyone (777 permissions) as we will be accessing the NFS share from the client with no authentication. +

+
    +# sudo chmod 777 /export
    +
+

+ When all this is done, we will need to edit the configuration file to set up an NFS server: /etc/exports. + This file contains a list of entries; + each entry indicates a volume that is shared and how it is shared. + For more information for a complete description of all the setup options for this file you can check in the man pages (man export).

+ An entry in /etc/exports will typically look like this: +

+
    +directory machine1(option11,option12)
    +
+

+ So for our example we export /export to the client 10.0.0.2 add the entry: +

+
    +/export 10.0.0.2(rw)
    +
+

+ In our case we are using all the default options except for the ro that we replaced with rw so that our client will have read and write access to the directory that we are exporting. +

+

+ After we do all the require configurations, we are ready to start the server with the next command: +

+
    +# sudo /etc/init.d/nfs-kernel-server start
    +
+

+ Note: If you later decide to add more NFS exports to the /etc/exports file, you will need to either restart NFS daemon +or run command exportfs. +

+
    +# sudo /etc/init.d/nfs-kernel-server start 
    +
+

Or

+
    +# exportfs -ra
    +
+

+ Now we can check if the export directory and our mount point is properly set up. +

+
    +# sudo showmount -e
    +# sudo showmount -a
    +
+

+ And also we can verify if NFS is running in the system with: +

+

+

    +# rpcinfo –p
    +program vers proto   port
    +   100000   2   tcp    111  portmapper
    +   100000   2   udp    111  portmapper
    +   100011   1   udp   749  rquotad
    +   100011   2   udp   749  rquotad
    +   100005   1   udp    759  mountd
    +   100005   1   tcp    761  mountd
    +   100005   2   udp    764  mountd
    +   100005   2   tcp    766  mountd
    +   100005   3   udp    769  mountd
    +   100005   3   tcp    771  mountd
    +   100003   2   udp   2049  nfs
    +   100003   3   udp   2049  nfs
    +   300019   1   tcp    830  amd
    +   300019   1   udp    831  amd
    +   100024   1   udp    944  status
    +   100024   1   tcp    946  status
    +   100021   1   udp   1042  nlockmgr
    +   100021   3   udp   1042  nlockmgr
    +   100021   4   udp   1042  nlockmgr
    +   100021   1   tcp   1629  nlockmgr
    +   100021   3   tcp   1629  nlockmgr
    +   100021   4   tcp   1629  nlockmgr
    +
+

+ Now your NFS sever is sharing /export directory to be accessed. +

+ + + diff --git a/nuttx/Documentation/NuttShell.html b/nuttx/Documentation/NuttShell.html index 8e57e27b2..0413a4695 100644 --- a/nuttx/Documentation/NuttShell.html +++ b/nuttx/Documentation/NuttShell.html @@ -1400,7 +1400,7 @@ mkfifo <path>

Synopsis. Creates a FIFO character device anywhere in the pseudo file system, creating - whatever psuedo directories that may be needed to complete the <path>. + whatever pseudo directories that may be needed to complete the <path>. By convention, however, device drivers are place in the standard /dev directory. After it is created, the FIFO device may be used as any other device driver. NSH provides this command to access the mkfifo() NuttX API. @@ -1492,7 +1492,7 @@ mount -t <fstype> <block-device> <dir-path> If no paramters are provided on the command line after the mount command, then the mount command will enumerate all of the current mountpoints on the console.

- If the mount parameters are provied on the command after the mount command, then the mount command will mount a file system in the NuttX psuedo-file system. + If the mount parameters are provied on the command after the mount command, then the mount command will mount a file system in the NuttX pseudo-file system. mount' performs a three way association, binding:

    @@ -1513,7 +1513,7 @@ mount -t <fstype> <block-device> <dir-path> pseudo filesystem where the mounted volume will appear. This mount point can only reside in the NuttX pseudo filesystem. By convention, this mount point is a subdirectory under /mnt. - The mount command will create whatever psuedo directories that may be needed to complete the + The mount command will create whatever pseudo directories that may be needed to complete the full path but the full path must not already exist.
diff --git a/nuttx/TODO b/nuttx/TODO index a4bad193e..e2abce7f4 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -703,9 +703,9 @@ o File system / Generic drivers (fs/, drivers/) Title: REMOVING PIPES AND FIFOS Description: There is no way to remove a FIFO or PIPE created in the - psuedo filesystem. Once created, they persist indefinitely + pseudo filesystem. Once created, they persist indefinitely and cannot be unlinked. This is actually a more generic - issue: unlink does not work for anything in the psuedo- + issue: unlink does not work for anything in the pseudo- filesystem. Status: Open, but partially resolved: pipe buffer is at least freed when there are not open references to the pipe/FIFO. diff --git a/nuttx/configs/lincoln60/README.txt b/nuttx/configs/lincoln60/README.txt index 7a06a852b..6ad37d363 100644 --- a/nuttx/configs/lincoln60/README.txt +++ b/nuttx/configs/lincoln60/README.txt @@ -413,7 +413,7 @@ host operations. To make these modifications, do the following: When this change is made, NSH should be extended to support USB flash devices. When a FLASH device is inserted, you should see a device -appear in the /dev (psuedo) directory. The device name should be +appear in the /dev (pseudo) directory. The device name should be like /dev/sda, /dev/sdb, etc. The USB mass storage device, is present it can be mounted from the NSH command line like: diff --git a/nuttx/configs/lpc4330-xplorer/README.txt b/nuttx/configs/lpc4330-xplorer/README.txt index a5c0709ea..4ebe89d9e 100644 --- a/nuttx/configs/lpc4330-xplorer/README.txt +++ b/nuttx/configs/lpc4330-xplorer/README.txt @@ -829,7 +829,7 @@ host operations. To make these modifications, do the following: When this change is made, NSH should be extended to support USB flash devices. When a FLASH device is inserted, you should see a device -appear in the /dev (psuedo) directory. The device name should be +appear in the /dev (pseudo) directory. The device name should be like /dev/sda, /dev/sdb, etc. The USB mass storage device, is present it can be mounted from the NSH command line like: diff --git a/nuttx/configs/mbed/README.txt b/nuttx/configs/mbed/README.txt index 3366ed320..0b98d9085 100755 --- a/nuttx/configs/mbed/README.txt +++ b/nuttx/configs/mbed/README.txt @@ -384,7 +384,7 @@ host operations. To make these modifications, do the following: When this change is made, NSH should be extended to support USB flash devices. When a FLASH device is inserted, you should see a device -appear in the /dev (psuedo) directory. The device name should be +appear in the /dev (pseudo) directory. The device name should be like /dev/sda, /dev/sdb, etc. The USB mass storage device, is present it can be mounted from the NSH command line like: diff --git a/nuttx/configs/olimex-lpc1766stk/README.txt b/nuttx/configs/olimex-lpc1766stk/README.txt index b2a1ad5fa..b81826e30 100755 --- a/nuttx/configs/olimex-lpc1766stk/README.txt +++ b/nuttx/configs/olimex-lpc1766stk/README.txt @@ -788,7 +788,7 @@ USB host operations. To make these modifications, do the following: When this change is made, NSH should be extended to support USB flash devices. When a FLASH device is inserted, you should see a device -appear in the /dev (psuedo) directory. The device name should be +appear in the /dev (pseudo) directory. The device name should be like /dev/sda, /dev/sdb, etc. The USB mass storage device, is present it can be mounted from the NSH command line like: diff --git a/nuttx/fs/fs_closedir.c b/nuttx/fs/fs_closedir.c index fe0994478..ba4f12961 100644 --- a/nuttx/fs/fs_closedir.c +++ b/nuttx/fs/fs_closedir.c @@ -96,7 +96,7 @@ int closedir(FAR DIR *dirp) */ #ifndef CONFIG_DISABLE_MOUNTPOINT - if (INODE_IS_MOUNTPT(inode) && !DIRENT_ISPSUEDONODE(idir->fd_flags)) + if (INODE_IS_MOUNTPT(inode) && !DIRENT_ISPSEUDONODE(idir->fd_flags)) { /* The node is a file system mointpoint. Verify that the mountpoint * supports the closedir() method (not an error if it does not) @@ -117,13 +117,13 @@ int closedir(FAR DIR *dirp) else #endif { - /* The node is part of the root psuedo file system, release + /* The node is part of the root pseudo file system, release * our contained reference to the 'next' inode. */ - if (idir->u.psuedo.fd_next) + if (idir->u.pseudo.fd_next) { - inode_release(idir->u.psuedo.fd_next); + inode_release(idir->u.pseudo.fd_next); } } diff --git a/nuttx/fs/fs_files.c b/nuttx/fs/fs_files.c index 033cd8c63..425e7c73f 100644 --- a/nuttx/fs/fs_files.c +++ b/nuttx/fs/fs_files.c @@ -342,7 +342,7 @@ int files_dup(FAR struct file *filep1, FAR struct file *filep2) #endif #endif { - /* Open the psuedo file or device driver */ + /* Open the pseudo file or device driver */ ret = inode->u.i_ops->open(filep2); } diff --git a/nuttx/fs/fs_foreachinode.c b/nuttx/fs/fs_foreachinode.c index 08630263b..c5874c669 100644 --- a/nuttx/fs/fs_foreachinode.c +++ b/nuttx/fs/fs_foreachinode.c @@ -171,7 +171,7 @@ int foreach_inodelevel(FAR struct inode *node, struct inode_path_s *info) * when the callback 'handler' returns a non-zero value, or when all of * the inodes have been visited. * - * NOTE 1: Use with caution... The psuedo-file system is locked throughout + * NOTE 1: Use with caution... The pseudo-file system is locked throughout * the traversal. * NOTE 2: The search algorithm is recursive and could, in principle, use * an indeterminant amount of stack space. This will not usually be a diff --git a/nuttx/fs/fs_foreachmountpoint.c b/nuttx/fs/fs_foreachmountpoint.c index e7a620650..74e3e8356 100644 --- a/nuttx/fs/fs_foreachmountpoint.c +++ b/nuttx/fs/fs_foreachmountpoint.c @@ -154,7 +154,7 @@ static int mountpoint_filter(FAR struct inode *node, * mountpoint inodes. It is intended to support the mount() command to * when the mount command is used to enumerate mounts. * - * NOTE 1: Use with caution... The psuedo-file system is locked throughout + * NOTE 1: Use with caution... The pseudo-file system is locked throughout * the traversal. * NOTE 2: The search algorithm is recursive and could, in principle, use * an indeterminant amount of stack space. This will not usually be a diff --git a/nuttx/fs/fs_internal.h b/nuttx/fs/fs_internal.h index dbabb63d1..786c683dc 100644 --- a/nuttx/fs/fs_internal.h +++ b/nuttx/fs/fs_internal.h @@ -75,10 +75,10 @@ /* Mountpoint fd_flags values */ -#define DIRENTFLAGS_PSUEDONODE 1 +#define DIRENTFLAGS_PSEUDONODE 1 -#define DIRENT_SETPSUEDONODE(f) do (f) |= DIRENTFLAGS_PSUEDONODE; while (0) -#define DIRENT_ISPSUEDONODE(f) (((f) & DIRENTFLAGS_PSUEDONODE) != 0) +#define DIRENT_SETPSEUDONODE(f) do (f) |= DIRENTFLAGS_PSEUDONODE; while (0) +#define DIRENT_ISPSEUDONODE(f) (((f) & DIRENTFLAGS_PSEUDONODE) != 0) /**************************************************************************** * Public Types @@ -236,7 +236,7 @@ EXTERN void inode_release(FAR struct inode *inode); * when the callback 'handler' returns a non-zero value, or when all of * the inodes have been visited. * - * NOTE 1: Use with caution... The psuedo-file system is locked throughout + * NOTE 1: Use with caution... The pseudo-file system is locked throughout * the traversal. * NOTE 2: The search algorithm is recursive and could, in principle, use * an indeterminant amount of stack space. This will not usually be a diff --git a/nuttx/fs/fs_opendir.c b/nuttx/fs/fs_opendir.c index a52c538fe..1c87c984d 100644 --- a/nuttx/fs/fs_opendir.c +++ b/nuttx/fs/fs_opendir.c @@ -138,19 +138,19 @@ static inline int open_mountpoint(FAR struct inode *inode, static void open_pseudodir(FAR struct inode *inode, FAR struct fs_dirent_s *dir) { - /* We have a valid psuedo-filesystem node. Take two references on the + /* We have a valid pseudo-filesystem node. Take two references on the * inode -- one for the parent (fd_root) and one for the child (fd_next). * Note that we do not call inode_addref because we are holding the tree * semaphore and that would result in deadlock. */ inode->i_crefs += 2; - dir->u.psuedo.fd_next = inode; /* This is the next node to use for readdir() */ + dir->u.pseudo.fd_next = inode; /* This is the next node to use for readdir() */ - /* Flag the inode as belonging to the psuedo-filesystem */ + /* Flag the inode as belonging to the pseudo-filesystem */ #ifndef CONFIG_DISABLE_MOUNTPOINT - DIRENT_SETPSUEDONODE(dir->fd_flags); + DIRENT_SETPSEUDONODE(dir->fd_flags); #endif } @@ -242,7 +242,7 @@ FAR DIR *opendir(FAR const char *path) } /* Populate the DIR structure and return it to the caller. The way that - * we do this depends on whenever this is a "normal" psuedo-file-system + * we do this depends on whenever this is a "normal" pseudo-file-system * inode or a file system mountpoint. */ @@ -262,7 +262,7 @@ FAR DIR *opendir(FAR const char *path) open_pseudodir(inode, dir); } - /* Is this a node in the psuedo filesystem? Or a mountpoint? If the node + /* Is this a node in the pseudo filesystem? Or a mountpoint? If the node * is the root (bisroot == TRUE), then this is a special case. */ @@ -280,7 +280,7 @@ FAR DIR *opendir(FAR const char *path) #endif else { - /* The node is part of the root psuedo file system. Does the inode have a child? + /* The node is part of the root pseudo file system. Does the inode have a child? * If so that the child would be the 'root' of a list of nodes under * the directory. */ @@ -292,7 +292,7 @@ FAR DIR *opendir(FAR const char *path) goto errout_with_direntry; } - /* It looks we have a valid psuedo-filesystem directory node. */ + /* It looks we have a valid pseudo-filesystem directory node. */ open_pseudodir(inode, dir); } diff --git a/nuttx/fs/fs_readdir.c b/nuttx/fs/fs_readdir.c index 8df1bf655..f5b266392 100644 --- a/nuttx/fs/fs_readdir.c +++ b/nuttx/fs/fs_readdir.c @@ -53,16 +53,16 @@ ****************************************************************************/ /**************************************************************************** - * Name: readpsuedodir + * Name: readpseudodir ****************************************************************************/ -static inline int readpsuedodir(struct fs_dirent_s *idir) +static inline int readpseudodir(struct fs_dirent_s *idir) { FAR struct inode *prev; /* Check if we are at the end of the list */ - if (!idir->u.psuedo.fd_next) + if (!idir->u.pseudo.fd_next) { /* End of file and error conditions are not distinguishable * with readdir. Here we return -ENOENT to signal the end @@ -74,21 +74,21 @@ static inline int readpsuedodir(struct fs_dirent_s *idir) /* Copy the inode name into the dirent structure */ - strncpy(idir->fd_dir.d_name, idir->u.psuedo.fd_next->i_name, NAME_MAX+1); + strncpy(idir->fd_dir.d_name, idir->u.pseudo.fd_next->i_name, NAME_MAX+1); /* If the node has file operations, we will say that it is * a file. */ idir->fd_dir.d_type = 0; - if (idir->u.psuedo.fd_next->u.i_ops) + if (idir->u.pseudo.fd_next->u.i_ops) { #ifndef CONFIG_DISABLE_MOUNTPOINT - if (INODE_IS_BLOCK(idir->u.psuedo.fd_next)) + if (INODE_IS_BLOCK(idir->u.pseudo.fd_next)) { idir->fd_dir.d_type |= DTYPE_BLK; } - if (INODE_IS_MOUNTPT(idir->u.psuedo.fd_next)) + if (INODE_IS_MOUNTPT(idir->u.pseudo.fd_next)) { idir->fd_dir.d_type |= DTYPE_DIRECTORY; } @@ -103,7 +103,7 @@ static inline int readpsuedodir(struct fs_dirent_s *idir) * is a directory. NOTE: that the node can be both! */ - if (idir->u.psuedo.fd_next->i_child || !idir->u.psuedo.fd_next->u.i_ops) + if (idir->u.pseudo.fd_next->i_child || !idir->u.pseudo.fd_next->u.i_ops) { idir->fd_dir.d_type |= DTYPE_DIRECTORY; } @@ -112,14 +112,14 @@ static inline int readpsuedodir(struct fs_dirent_s *idir) inode_semtake(); - prev = idir->u.psuedo.fd_next; - idir->u.psuedo.fd_next = prev->i_peer; /* The next node to visit */ + prev = idir->u.pseudo.fd_next; + idir->u.pseudo.fd_next = prev->i_peer; /* The next node to visit */ - if (idir->u.psuedo.fd_next) + if (idir->u.pseudo.fd_next) { /* Increment the reference count on this next node */ - idir->u.psuedo.fd_next->i_crefs++; + idir->u.pseudo.fd_next->i_crefs++; } inode_semgive(); @@ -179,7 +179,7 @@ FAR struct dirent *readdir(DIR *dirp) #ifndef CONFIG_DISABLE_MOUNTPOINT inode = idir->fd_root; - if (INODE_IS_MOUNTPT(inode) && !DIRENT_ISPSUEDONODE(idir->fd_flags)) + if (INODE_IS_MOUNTPT(inode) && !DIRENT_ISPSEUDONODE(idir->fd_flags)) { /* The node is a file system mointpoint. Verify that the mountpoint * supports the readdir() method @@ -198,9 +198,9 @@ FAR struct dirent *readdir(DIR *dirp) else #endif { - /* The node is part of the root psuedo file system */ + /* The node is part of the root pseudo file system */ - ret = readpsuedodir(idir); + ret = readpseudodir(idir); } /* ret < 0 is an error. Special case: ret = -ENOENT is end of file */ diff --git a/nuttx/fs/fs_rewinddir.c b/nuttx/fs/fs_rewinddir.c index a0e2be7d8..c22c15f18 100644 --- a/nuttx/fs/fs_rewinddir.c +++ b/nuttx/fs/fs_rewinddir.c @@ -52,10 +52,10 @@ ****************************************************************************/ /**************************************************************************** - * Name: rewindpsuedodir + * Name: rewindpseudodir ****************************************************************************/ -static inline void rewindpsuedodir(struct fs_dirent_s *idir) +static inline void rewindpseudodir(struct fs_dirent_s *idir) { struct inode *prev; @@ -63,8 +63,8 @@ static inline void rewindpsuedodir(struct fs_dirent_s *idir) /* Reset the position to the beginning */ - prev = idir->u.psuedo.fd_next; /* (Save to delete later) */ - idir->u.psuedo.fd_next = idir->fd_root; /* The next node to visit */ + prev = idir->u.pseudo.fd_next; /* (Save to delete later) */ + idir->u.pseudo.fd_next = idir->fd_root; /* The next node to visit */ idir->fd_position = 0; /* Reset position */ /* Increment the reference count on the root=next node. We @@ -138,8 +138,8 @@ void rewinddir(FAR DIR *dirp) else #endif { - /* The node is part of the root psuedo file system */ + /* The node is part of the root pseudo file system */ - rewindpsuedodir(idir); + rewindpseudodir(idir); } } diff --git a/nuttx/fs/fs_seekdir.c b/nuttx/fs/fs_seekdir.c index ec530c67d..781d35f27 100644 --- a/nuttx/fs/fs_seekdir.c +++ b/nuttx/fs/fs_seekdir.c @@ -53,10 +53,10 @@ ****************************************************************************/ /**************************************************************************** - * Name: seekpsuedodir + * Name: seekpseudodir ****************************************************************************/ -static inline void seekpsuedodir(struct fs_dirent_s *idir, off_t offset) +static inline void seekpseudodir(struct fs_dirent_s *idir, off_t offset) { struct inode *curr; struct inode *prev; @@ -76,7 +76,7 @@ static inline void seekpsuedodir(struct fs_dirent_s *idir, off_t offset) else { pos = idir->fd_position; - curr = idir->u.psuedo.fd_next; + curr = idir->u.pseudo.fd_next; } /* Traverse the peer list starting at the 'root' of the @@ -90,8 +90,8 @@ static inline void seekpsuedodir(struct fs_dirent_s *idir, off_t offset) /* Now get the inode to vist next time that readdir() is called */ - prev = idir->u.psuedo.fd_next; - idir->u.psuedo.fd_next = curr; /* The next node to visit (might be null) */ + prev = idir->u.pseudo.fd_next; + idir->u.pseudo.fd_next = curr; /* The next node to visit (might be null) */ idir->fd_position = pos; /* Might be beyond the last dirent */ if (curr) @@ -223,8 +223,8 @@ void seekdir(FAR DIR *dirp, off_t offset) else #endif { - /* The node is part of the root psuedo file system */ + /* The node is part of the root pseudo file system */ - seekpsuedodir(idir, offset); + seekpseudodir(idir, offset); } } diff --git a/nuttx/fs/fs_stat.c b/nuttx/fs/fs_stat.c index 5cb342081..cf27e87a6 100644 --- a/nuttx/fs/fs_stat.c +++ b/nuttx/fs/fs_stat.c @@ -51,10 +51,10 @@ ****************************************************************************/ /**************************************************************************** - * Name: statpsuedo + * Name: statpseudo ****************************************************************************/ -static inline int statpsuedo(FAR struct inode *inode, FAR struct stat *buf) +static inline int statpseudo(FAR struct inode *inode, FAR struct stat *buf) { /* Most of the stat entries just do not apply */ @@ -92,7 +92,7 @@ static inline int statpsuedo(FAR struct inode *inode, FAR struct stat *buf) { /* If it has no operations, then it must just be a intermediate * node in the inode tree. It is something like a directory. - * We'll say that all psuedo-directories are read-able but not + * We'll say that all pseudo-directories are read-able but not * write-able. */ @@ -195,9 +195,9 @@ int stat(const char *path, FAR struct stat *buf) else #endif { - /* The node is part of the root psuedo file system */ + /* The node is part of the root pseudo file system */ - ret = statpsuedo(inode, buf); + ret = statpseudo(inode, buf); } /* Check if the stat operation was successful */ diff --git a/nuttx/fs/fs_statfs.c b/nuttx/fs/fs_statfs.c index 540eb86bb..df7321bbd 100644 --- a/nuttx/fs/fs_statfs.c +++ b/nuttx/fs/fs_statfs.c @@ -52,10 +52,10 @@ ****************************************************************************/ /**************************************************************************** - * Name: statpsuedo + * Name: statpseudo ****************************************************************************/ -static inline int statpsuedofs(FAR struct inode *inode, FAR struct statfs *buf) +static inline int statpseudofs(FAR struct inode *inode, FAR struct statfs *buf) { memset(buf, 0, sizeof(struct statfs)); buf->f_type = PROC_SUPER_MAGIC; @@ -137,9 +137,9 @@ int statfs(FAR const char *path, FAR struct statfs *buf) else #endif { - /* The node is part of the root psuedo file system */ + /* The node is part of the root pseudo file system */ - ret = statpsuedofs(inode, buf); + ret = statpseudofs(inode, buf); } /* Check if the statfs operation was successful */ diff --git a/nuttx/fs/fs_syslog.c b/nuttx/fs/fs_syslog.c index 1fe8c03a1..1d569082a 100644 --- a/nuttx/fs/fs_syslog.c +++ b/nuttx/fs/fs_syslog.c @@ -319,7 +319,7 @@ int syslog_initialize(void) SYSLOG_OFLAGS, 0666); } - /* No... then it must be a character driver in the NuttX psuedo- + /* No... then it must be a character driver in the NuttX pseudo- * file system. */ diff --git a/nuttx/fs/fs_unregisterblockdriver.c b/nuttx/fs/fs_unregisterblockdriver.c index 4ee9016fc..4d169fddf 100644 --- a/nuttx/fs/fs_unregisterblockdriver.c +++ b/nuttx/fs/fs_unregisterblockdriver.c @@ -71,7 +71,7 @@ * Name: unregister_blockdriver * * Description: - * Remove the block driver inode at 'path' from the psuedo-file system + * Remove the block driver inode at 'path' from the pseudo-file system * ****************************************************************************/ diff --git a/nuttx/fs/fs_unregisterdriver.c b/nuttx/fs/fs_unregisterdriver.c index 7537274b5..c9ac0b619 100644 --- a/nuttx/fs/fs_unregisterdriver.c +++ b/nuttx/fs/fs_unregisterdriver.c @@ -71,7 +71,7 @@ * Name: unregister_driver * * Description: - * Remove the character driver inode at 'path' from the psuedo-file system + * Remove the character driver inode at 'path' from the pseudo-file system * ****************************************************************************/ diff --git a/nuttx/include/nuttx/fs/dirent.h b/nuttx/include/nuttx/fs/dirent.h index 8aad4242b..75867c87a 100644 --- a/nuttx/include/nuttx/fs/dirent.h +++ b/nuttx/include/nuttx/fs/dirent.h @@ -65,12 +65,12 @@ * reference, a position, a dirent structure, and file-system-specific * information. * - * For the root psuedo-file system, we need retain only the 'next' inode + * For the root pseudo-file system, we need retain only the 'next' inode * need for the next readdir() operation. We hold a reference on this * inode so we know that it will persist until closedir is called. */ -struct fs_psuedodir_s +struct fs_pseudodir_s { struct inode *fd_next; /* The inode for the next call to readdir() */ }; @@ -140,7 +140,7 @@ struct fs_dirent_s { /* This is the node that was opened by opendir. The type of the inode * determines the way that the readdir() operations are performed. For the - * psuedo root psuedo-file system, it is also used to support rewind. + * pseudo root pseudo-file system, it is also used to support rewind. * * We hold a reference on this inode so we know that it will persist until * closedir() is called (although inodes linked to this inode may change). @@ -166,9 +166,9 @@ struct fs_dirent_s union { - /* Private data used by the built-in psuedo-file system */ + /* Private data used by the built-in pseudo-file system */ - struct fs_psuedodir_s psuedo; + struct fs_pseudodir_s pseudo; /* Private data used by other file systems */ diff --git a/nuttx/include/nuttx/fs/fs.h b/nuttx/include/nuttx/fs/fs.h index 07d28597e..81f81622f 100644 --- a/nuttx/include/nuttx/fs/fs.h +++ b/nuttx/include/nuttx/fs/fs.h @@ -199,7 +199,7 @@ union inode_ops_u #endif }; -/* This structure represents one inode in the Nuttx psuedo-file system */ +/* This structure represents one inode in the Nuttx pseudo-file system */ struct inode { @@ -342,7 +342,7 @@ EXTERN void weak_function fs_initialize(void); * mountpoint inodes. It is intended to support the mount() command to * when the mount command is used to enumerate mounts. * - * NOTE 1: Use with caution... The psuedo-file system is locked throughout + * NOTE 1: Use with caution... The pseudo-file system is locked throughout * the traversal. * NOTE 2: The search algorithm is recursive and could, in principle, use * an indeterminant amount of stack space. This will not usually be a @@ -415,7 +415,7 @@ EXTERN int register_blockdriver(const char *path, * Name: unregister_driver * * Description: - * Remove the character driver inode at 'path' from the psuedo-file system + * Remove the character driver inode at 'path' from the pseudo-file system * ****************************************************************************/ @@ -426,7 +426,7 @@ EXTERN int unregister_driver(const char *path); * Name: unregister_blockdriver * * Description: - * Remove the block driver inode at 'path' from the psuedo-file system + * Remove the block driver inode at 'path' from the pseudo-file system * ****************************************************************************/