mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-26 22:48:23 +00:00
2002-05-15 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove lib.
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
2002-05-15 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.ac: Remove lib.
|
||||
|
||||
2002-05-14 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* config-ml.in: Take out arm and sh variants RTEMS does not support.
|
||||
|
||||
@@ -33,7 +33,6 @@ if test x"$multilib" = x"no"; then
|
||||
AC_CONFIG_SUBDIRS(exec)
|
||||
fi
|
||||
AC_CONFIG_SUBDIRS(optman)
|
||||
AC_CONFIG_SUBDIRS(lib)
|
||||
AC_CONFIG_SUBDIRS(lib/libcpu)
|
||||
AC_CONFIG_SUBDIRS(libblock)
|
||||
AC_CONFIG_SUBDIRS(lib/libbsp)
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
ACLOCAL_AMFLAGS = -I ../../../aclocal
|
||||
|
||||
include $(top_srcdir)/../../../automake/multilib.am
|
||||
|
||||
SUBDIRS = . libc
|
||||
|
||||
include_HEADERS = include/chain.h include/console.h include/clockdrv.h \
|
||||
include/iosupp.h include/ringbuf.h include/rtc.h \
|
||||
include/spurious.h include/timerdrv.h include/vmeintr.h
|
||||
|
||||
LIBC_HFILES = include/stdint.h include/inttypes.h
|
||||
include_HEADERS += $(LIBC_HFILES)
|
||||
|
||||
PREINSTALL_FILES = $(PROJECT_INCLUDE) \
|
||||
$(include_HEADERS:include/%=$(PROJECT_INCLUDE)/%)
|
||||
|
||||
$(PROJECT_INCLUDE):
|
||||
@$(mkinstalldirs) $@
|
||||
$(PROJECT_INCLUDE)/motorola:
|
||||
@$(mkinstalldirs) $@
|
||||
$(PROJECT_INCLUDE)/rtems:
|
||||
@$(mkinstalldirs) $@
|
||||
$(PROJECT_INCLUDE)/sys:
|
||||
@$(mkinstalldirs) $@
|
||||
$(PROJECT_INCLUDE)/zilog:
|
||||
@$(mkinstalldirs) $@
|
||||
|
||||
$(PROJECT_INCLUDE)/%.h: include/%.h
|
||||
$(INSTALL_DATA) $< $@
|
||||
|
||||
## motorola
|
||||
|
||||
include_motoroladir = $(includedir)/motorola
|
||||
|
||||
include_motorola_HEADERS = include/motorola/mc68230.h include/motorola/mc68681.h
|
||||
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/motorola \
|
||||
$(include_motorola_HEADERS:include/%=$(PROJECT_INCLUDE)/%)
|
||||
|
||||
## rtems
|
||||
include_rtemsdir = $(includedir)/rtems
|
||||
|
||||
include_rtems_HEADERS = \
|
||||
include/rtems/assoc.h include/rtems/error.h include/rtems/libcsupport.h \
|
||||
include/rtems/libio.h include/rtems/libio_.h \
|
||||
include/rtems/termiostypes.h
|
||||
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems \
|
||||
$(include_rtems_HEADERS:include/%=$(PROJECT_INCLUDE)/%)
|
||||
|
||||
## sys
|
||||
|
||||
include_sysdir = $(includedir)/sys
|
||||
|
||||
|
||||
if NEWLIB
|
||||
NEWLIB_H_FILES = include/sys/termios.h include/sys/cdefs.h include/sys/utsname.h
|
||||
endif
|
||||
|
||||
include_sys_HEADERS = \
|
||||
include/sys/filio.h \
|
||||
include/sys/ioccom.h \
|
||||
include/sys/ioctl.h \
|
||||
include/sys/sockio.h \
|
||||
include/sys/termios.h \
|
||||
include/sys/ttycom.h \
|
||||
include/sys/utime.h \
|
||||
$(NEWLIB_H_FILES)
|
||||
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/sys \
|
||||
$(include_sys_HEADERS:include/%=$(PROJECT_INCLUDE)/%)
|
||||
|
||||
## zilog
|
||||
|
||||
include_zilogdir = $(includedir)/zilog
|
||||
|
||||
include_zilog_HEADERS = include/zilog/z8036.h include/zilog/z8530.h \
|
||||
include/zilog/z8536.h
|
||||
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/zilog \
|
||||
$(include_zilog_HEADERS:include/%=$(PROJECT_INCLUDE)/%)
|
||||
|
||||
## General stuff
|
||||
all-local: $(PREINSTALL_FILES)
|
||||
|
||||
include $(top_srcdir)/../../../automake/subdirs.am
|
||||
include $(top_srcdir)/../../../automake/local.am
|
||||
@@ -1,39 +0,0 @@
|
||||
## Process this file with autoconf to produce a configure script.
|
||||
##
|
||||
## $Id$
|
||||
|
||||
AC_PREREQ(2.52)
|
||||
AC_INIT([rtems-c-src-lib],[_RTEMS_VERSION],[rtems-bugs@OARcorp.com])
|
||||
AC_CONFIG_SRCDIR([libc])
|
||||
RTEMS_TOP(../../..)
|
||||
AC_CONFIG_AUX_DIR(../../..)
|
||||
|
||||
RTEMS_CANONICAL_TARGET_CPU
|
||||
AM_INIT_AUTOMAKE([no-define foreign 1.6])
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
RTEMS_ENABLE_BARE
|
||||
|
||||
RTEMS_ENV_RTEMSBSP
|
||||
|
||||
RTEMS_CHECK_CPU
|
||||
RTEMS_CANONICAL_HOST
|
||||
|
||||
RTEMS_PROJECT_ROOT
|
||||
|
||||
RTEMS_PROG_CC_FOR_TARGET([-ansi -fasm])
|
||||
RTEMS_CANONICALIZE_TOOLS
|
||||
|
||||
RTEMS_CHECK_NEWLIB
|
||||
RTEMS_CHECK_CUSTOM_BSP(RTEMS_BSP)
|
||||
RTEMS_CHECK_MULTIPROCESSING(RTEMS_BSP)
|
||||
|
||||
AM_CONDITIONAL(UNIX,test x"$RTEMS_CPU" = x"unix")
|
||||
AM_CONDITIONAL(NEWLIB,test x"$RTEMS_USE_NEWLIB" = x"yes")
|
||||
|
||||
AM_CONFIG_HEADER(libc/config.h)
|
||||
|
||||
# Explicitly list all Makefiles here
|
||||
AC_CONFIG_FILES([Makefile
|
||||
libc/Makefile])
|
||||
AC_OUTPUT
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,361 +0,0 @@
|
||||
/* chain.h
|
||||
*
|
||||
* This include file contains all the constants and structures associated
|
||||
* with doubly linked chains. This file actually just provides an
|
||||
* interface to the chain object in rtems.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1997.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may in
|
||||
* the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $ld:
|
||||
*/
|
||||
|
||||
#ifndef __CHAIN_h
|
||||
#define __CHAIN_h
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
/*
|
||||
* Chain_Initialize
|
||||
*
|
||||
* This routine initializes the_chain structure to manage the
|
||||
* contiguous array of number_nodes nodes which starts at
|
||||
* starting_address. Each node is of node_size bytes.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* void *starting_address, * IN *
|
||||
* rtems_unsigned32 number_nodes, * IN *
|
||||
* rtems_unsigned32 node_size * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Initialize( the_chain, starting_address, \
|
||||
number_nodes, node_size ) \
|
||||
_Chain_Initialize( the_chain, starting_address, \
|
||||
number_nodes, node_size ) \
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Initialize_empty
|
||||
*
|
||||
* This routine initializes the specified chain to contain zero nodes.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Initialize_empty( the_chain ) \
|
||||
_Chain_Initialize_empty( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Are_nodes_equal
|
||||
*
|
||||
* This function returns TRUE if LEFT and RIGHT are equal,
|
||||
* and FALSE otherwise.
|
||||
*
|
||||
* Chain_Node *left, * IN *
|
||||
* Chain_Node *right * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Are_nodes_equal( left, right ) \
|
||||
_Chain_Are_nodes_equal( left, right )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Extract_unprotected
|
||||
*
|
||||
* This routine extracts the_node from the chain on which it resides.
|
||||
* It does NOT disable interrupts to insure the atomicity of the
|
||||
* extract operation.
|
||||
*
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Extract_unprotected( the_node ) \
|
||||
_Chain_Extract_unprotected( the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Extract
|
||||
*
|
||||
* This routine extracts the_node from the chain on which it resides.
|
||||
* It disables interrupts to insure the atomicity of the
|
||||
* extract operation.
|
||||
*
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Extract( the_node ) \
|
||||
_Chain_Extract( the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Get_unprotected
|
||||
*
|
||||
* This function removes the first node from the_chain and returns
|
||||
* a pointer to that node. If the_chain is empty, then NULL is returned.
|
||||
* It does NOT disable interrupts to insure the atomicity of the
|
||||
* get operation.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Get_unprotected( the_chain ) \
|
||||
_Chain_Get_unprotected( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Get
|
||||
*
|
||||
* This function removes the first node from the_chain and returns
|
||||
* a pointer to that node. If the_chain is empty, then NULL is returned.
|
||||
* It disables interrupts to insure the atomicity of the
|
||||
* get operation.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Get( the_chain ) \
|
||||
_Chain_Get( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Get_first_unprotected
|
||||
*
|
||||
* This function removes the first node from the_chain and returns
|
||||
* a pointer to that node. It does NOT disable interrupts to insure
|
||||
* the atomicity of the get operation.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Get_first_unprotected( the_chain ) \
|
||||
_Chain_Get_first_unprotected( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Insert_unprotected
|
||||
*
|
||||
* This routine inserts the_node on a chain immediately following
|
||||
* after_node. It does NOT disable interrupts to insure the atomicity
|
||||
* of the extract operation.
|
||||
*
|
||||
* Chain_Node *after_node, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Insert_unprotected( after_node, the_node ) \
|
||||
_Chain_Insert_unprotected( after_node, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Insert
|
||||
*
|
||||
* This routine inserts the_node on a chain immediately following
|
||||
* after_node. It disables interrupts to insure the atomicity
|
||||
* of the extract operation.
|
||||
*
|
||||
* Chain_Node *after_node, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Insert( after_node, the_node ) \
|
||||
_Chain_Insert( after_node, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Append_unprotected
|
||||
*
|
||||
* This routine appends the_node onto the end of the_chain.
|
||||
* It does NOT disable interrupts to insure the atomicity of the
|
||||
* append operation.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Append_unprotected( the_chain, the_node ) \
|
||||
_Chain_Append_unprotected( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Append
|
||||
*
|
||||
* This routine appends the_node onto the end of the_chain.
|
||||
* It disables interrupts to insure the atomicity of the
|
||||
* append operation.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Append( the_chain, the_node ) \
|
||||
_Chain_Append( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Prepend_unprotected
|
||||
*
|
||||
* This routine prepends the_node onto the front of the_chain.
|
||||
* It does NOT disable interrupts to insure the atomicity of the
|
||||
* prepend operation.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Prepend_unprotected( the_chain, the_node ) \
|
||||
_Chain_Prepend_unprotected( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Prepend
|
||||
*
|
||||
* This routine prepends the_node onto the front of the_chain.
|
||||
* It disables interrupts to insure the atomicity of the
|
||||
* prepend operation.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Prepend( the_chain, the_node ) \
|
||||
_Chain_Prepend( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Head
|
||||
*
|
||||
* This function returns a pointer to the first node on the chain.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Head( the_chain ) \
|
||||
_Chain_Head( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Tail
|
||||
*
|
||||
* This function returns a pointer to the last node on the chain.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Tail( the_chain ) \
|
||||
_Chain_Tail( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_head
|
||||
*
|
||||
* This function returns TRUE if the_node is the head of the_chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_head( the_chain, the_node ) \
|
||||
_Chain_Is_head( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_tail
|
||||
*
|
||||
* This function returns TRUE if the_node is the tail of the_chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Control *the_chain, * IN *
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_tail( the_chain, the_node ) \
|
||||
_Chain_Is_tail( the_chain, the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_first
|
||||
*
|
||||
* This function returns TRUE if the_node is the first node on a chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_first( the_node ) \
|
||||
_Chain_Is_first( the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_last
|
||||
*
|
||||
* This function returns TRUE if the_node is the last node on a chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_last( the_node ) \
|
||||
_Chain_Is_last( the_node )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_empty
|
||||
*
|
||||
* This function returns TRUE if there are no nodes on the_chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_empty( the_chain ) \
|
||||
_Chain_Is_empty( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Has_only_one_node
|
||||
*
|
||||
* This function returns TRUE if there is only one node on the_chain and
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Has_only_one_node( the_chain ) \
|
||||
_Chain_Has_only_one_node( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_null
|
||||
*
|
||||
* This function returns TRUE if the_chain is NULL and FALSE otherwise.
|
||||
*
|
||||
* Chain_Control *the_chain * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_null( the_chain ) \
|
||||
_Chain_Is_null( the_chain )
|
||||
|
||||
|
||||
/*
|
||||
* Chain_Is_null_node
|
||||
*
|
||||
* This function returns TRUE if the_node is NULL and FALSE otherwise.
|
||||
*
|
||||
* Chain_Node *the_node * IN *
|
||||
*/
|
||||
|
||||
#define Chain_Is_null_node( the_node ) \
|
||||
_Chain_Is_null_node( the_node )
|
||||
|
||||
|
||||
#undef __RTEMS_APPLICATION__
|
||||
#include <rtems/score/chain.inl>
|
||||
#define __RTEMS_APPLICATION__
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,50 +0,0 @@
|
||||
/* clock.h
|
||||
*
|
||||
* This file describes the Clock Driver for all boards.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __CLOCK_DRIVER_h
|
||||
#define __CLOCK_DRIVER_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* variables */
|
||||
|
||||
extern volatile rtems_unsigned32 Clock_driver_ticks;
|
||||
extern rtems_device_major_number rtems_clock_major;
|
||||
extern rtems_device_minor_number rtems_clock_minor;
|
||||
|
||||
/* default clock driver entry */
|
||||
|
||||
#define CLOCK_DRIVER_TABLE_ENTRY \
|
||||
{ Clock_initialize, NULL, NULL, NULL, NULL, Clock_control }
|
||||
|
||||
rtems_device_driver Clock_initialize(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver Clock_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *pargp
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,68 +0,0 @@
|
||||
/* console.h
|
||||
*
|
||||
* This file describes the Console Device Driver for all boards.
|
||||
* This driver provides support for the standard C Library.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _CONSOLE_DRIVER_h
|
||||
#define _CONSOLE_DRIVER_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CONSOLE_DRIVER_TABLE_ENTRY \
|
||||
{ console_initialize, console_open, console_close, \
|
||||
console_read, console_write, console_control }
|
||||
|
||||
rtems_device_driver console_initialize(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver console_open(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver console_close(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver console_read(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver console_write(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
rtems_device_driver console_control(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* inttypes.h
|
||||
*
|
||||
* ISO C99 Format conversion of integer types.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __INTTYPES_H
|
||||
#define __INTTYPES_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,43 +0,0 @@
|
||||
/* iosupp.h
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __IOSUPP_h
|
||||
#define __IOSUPP_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* character constants */
|
||||
|
||||
#define BS 0x08 /* backspace */
|
||||
#define LF 0x0a /* line feed */
|
||||
#define CR 0x0d /* carriage return */
|
||||
#define XON 0x11 /* control-Q */
|
||||
#define XOFF 0x13 /* control-S */
|
||||
|
||||
/* structures */
|
||||
|
||||
#ifdef IOSUPP_INIT
|
||||
#define IOSUPP_EXTERN
|
||||
#else
|
||||
#undef IOSUPP_EXTERN
|
||||
#define IOSUPP_EXTERN extern
|
||||
#endif
|
||||
|
||||
/* functions */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* mc68230.h -- Low level support code for the Motorola 68230 Parallel
|
||||
* Interface/Timer (PIT)
|
||||
*
|
||||
* Modified by Doug McBride, Colorado Space Grant College
|
||||
*
|
||||
* Format taken partly from RTEMS code and mostly from Motorola IDP user's
|
||||
* manual. RTEMS copyright information below.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MC68230_H__
|
||||
#define __MC68230_H__
|
||||
|
||||
/* Some Motorola IDP User manual defines: */
|
||||
#define PIT_ADDR 0x00c01003 /* base address of the PIT */
|
||||
#define REGOFF 0x04 /* Difference between addresses */
|
||||
#define VECT 64
|
||||
#define H1VECT 0x00
|
||||
#define H2VECT 0x01
|
||||
#define H3VECT 0x02
|
||||
#define H4VECT 0x03
|
||||
|
||||
/*
|
||||
* mc68230 register offsets
|
||||
*/
|
||||
#define PGCR 0x00
|
||||
#define PSRR 1*REGOFF
|
||||
#define PADDR 2*REGOFF
|
||||
#define PBDDR 3*REGOFF
|
||||
#define PCDDR 4*REGOFF
|
||||
#define PIVR 5*REGOFF
|
||||
#define PACR 6*REGOFF
|
||||
#define PBCR 7*REGOFF
|
||||
#define PADR 8*REGOFF
|
||||
#define PBDR 9*REGOFF
|
||||
#define PAAR 10*REGOFF
|
||||
#define PBAR 11*REGOFF
|
||||
#define PCDR 12*REGOFF
|
||||
#define PITSR 13*REGOFF
|
||||
#define TCR 16*REGOFF
|
||||
#define TIVR 17*REGOFF
|
||||
#define CPRH 19*REGOFF
|
||||
#define CPRM 20*REGOFF
|
||||
#define CPRL 21*REGOFF
|
||||
#define CNTRH 23*REGOFF
|
||||
#define CNTRM 24*REGOFF
|
||||
#define CNTRL 25*REGOFF
|
||||
#define TSR 26*REGOFF
|
||||
|
||||
/* Some RTEMS style defines: */
|
||||
#ifndef VOL8
|
||||
#define VOL8( ptr ) ((volatile rtems_unsigned8 *)(ptr))
|
||||
#endif
|
||||
|
||||
#define MC68230_WRITE( reg, data ) \
|
||||
*(VOL8(PIT_ADDR+reg)) = (data)
|
||||
|
||||
#define MC68230_READ( reg, data ) \
|
||||
(data) = *(VOL8(PIT_ADDR+reg))
|
||||
|
||||
#endif
|
||||
@@ -1,306 +0,0 @@
|
||||
/*
|
||||
* mc68681-duart.h -- Low level support code for the Motorola mc68681
|
||||
* DUART.
|
||||
*
|
||||
* Originally written by rob@cygnus.com (Rob Savoye) for the libgloss
|
||||
* IDP support.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MC68681_H__
|
||||
#define __MC68681_H__
|
||||
|
||||
/*
|
||||
* In the dark ages when this controller was designed, it was actually
|
||||
* possible to access data on unaligned byte boundaries with no penalty.
|
||||
* Now we find this chip in configurations in which the registers are
|
||||
* at 16-bit, 32-bit, and 64-bit boundaries at the whim of the board
|
||||
* designer. If the registers are not at byte addresses, then
|
||||
* set this multiplier before including this file to correct the offsets.
|
||||
*/
|
||||
|
||||
#ifndef MC68681_OFFSET_MULTIPLIER
|
||||
#define MC68681_OFFSET_MULTIPLIER 1
|
||||
#endif
|
||||
|
||||
#define __MC68681_REG(_R) ((_R) * MC68681_OFFSET_MULTIPLIER)
|
||||
|
||||
/*
|
||||
* mc68681 register offsets Read/Write Addresses
|
||||
*/
|
||||
#define MC68681_MODE_REG_1A __MC68681_REG(0) /* MR1A-MR Prior to Read */
|
||||
#define MC68681_MODE_REG_2A __MC68681_REG(0) /* MR2A-MR After Read */
|
||||
|
||||
#define MC68681_COUNT_MODE_CURRENT_MSB __MC68681_REG(6) /* CTU */
|
||||
#define MC68681_COUNTER_TIMER_UPPER_REG __MC68681_REG(6) /* CTU */
|
||||
#define MC68681_COUNT_MODE_CURRENT_LSB __MC68681_REG(7) /* CTL */
|
||||
#define MC68681_COUNTER_TIMER_LOWER_REG __MC68681_REG(7) /* CTL */
|
||||
#define MC68681_INTERRUPT_VECTOR_REG __MC68681_REG(12) /* IVR */
|
||||
|
||||
#define MC68681_MODE_REG_1B __MC68681_REG(8) /* MR1B-MR Prior to Read */
|
||||
#define MC68681_MODE_REG_2B __MC68681_REG(8) /* MR2BA-MR After Read */
|
||||
|
||||
/*
|
||||
* mc68681 register offsets Read Only Addresses
|
||||
*/
|
||||
#define MC68681_STATUS_REG_A __MC68681_REG(1) /* SRA */
|
||||
#define MC68681_MASK_ISR_REG __MC68681_REG(2) /* MISR */
|
||||
#define MC68681_RECEIVE_BUFFER_A __MC68681_REG(3) /* RHRA */
|
||||
#define MC68681_INPUT_PORT_CHANGE_REG __MC68681_REG(4) /* IPCR */
|
||||
#define MC68681_INTERRUPT_STATUS_REG __MC68681_REG(5) /* ISR */
|
||||
#define MC68681_STATUS_REG_B __MC68681_REG(9) /* SRB */
|
||||
#define MC68681_RECEIVE_BUFFER_B __MC68681_REG(11) /* RHRB */
|
||||
#define MC68681_INPUT_PORT __MC68681_REG(13) /* IP */
|
||||
#define MC68681_START_COUNT_CMD __MC68681_REG(14) /* SCC */
|
||||
#define MC68681_STOP_COUNT_CMD __MC68681_REG(15) /* STC */
|
||||
|
||||
/*
|
||||
* mc68681 register offsets Write Only Addresses
|
||||
*/
|
||||
#define MC68681_CLOCK_SELECT_REG_A __MC68681_REG(1) /* CSRA */
|
||||
#define MC68681_COMMAND_REG_A __MC68681_REG(2) /* CRA */
|
||||
#define MC68681_TRANSMIT_BUFFER_A __MC68681_REG(3) /* THRA */
|
||||
#define MC68681_AUX_CTRL_REG __MC68681_REG(4) /* ACR */
|
||||
#define MC68681_INTERRUPT_MASK_REG __MC68681_REG(5) /* IMR */
|
||||
#define MC68681_CLOCK_SELECT_REG_B __MC68681_REG(9) /* CSRB */
|
||||
#define MC68681_COMMAND_REG_B __MC68681_REG(10) /* CRB */
|
||||
#define MC68681_TRANSMIT_BUFFER_B __MC68681_REG(11) /* THRB */
|
||||
#define MC68681_OUTPUT_PORT_CONFIG_REG __MC68681_REG(13) /* OPCR */
|
||||
#define MC68681_OUTPUT_PORT_SET_REG __MC68681_REG(14) /* SOPBC */
|
||||
#define MC68681_OUTPUT_PORT_RESET_BITS __MC68681_REG(15) /* COPBC */
|
||||
|
||||
|
||||
#ifndef MC6681_VOL
|
||||
#define MC6681_VOL( ptr ) ((volatile unsigned char *)(ptr))
|
||||
#endif
|
||||
|
||||
#define MC68681_WRITE( _base, _reg, _data ) \
|
||||
*((volatile unsigned char *)_base+_reg) = (_data)
|
||||
|
||||
#define MC68681_READ( _base, _reg ) \
|
||||
*(((volatile unsigned char *)_base+_reg))
|
||||
|
||||
|
||||
|
||||
#define MC68681_CLEAR 0x00
|
||||
|
||||
#define MC68681_PORT_A 0
|
||||
#define MC68681_PORT_B 1
|
||||
|
||||
/*
|
||||
* DUART Command Register Definitions:
|
||||
*
|
||||
* MC68681_COMMAND_REG_A,MC68681_COMMAND_REG_B
|
||||
*/
|
||||
#define MC68681_MODE_REG_ENABLE_RX 0x01
|
||||
#define MC68681_MODE_REG_DISABLE_RX 0x02
|
||||
#define MC68681_MODE_REG_ENABLE_TX 0x04
|
||||
#define MC68681_MODE_REG_DISABLE_TX 0x08
|
||||
#define MC68681_MODE_REG_RESET_MR_PTR 0x10
|
||||
#define MC68681_MODE_REG_RESET_RX 0x20
|
||||
#define MC68681_MODE_REG_RESET_TX 0x30
|
||||
#define MC68681_MODE_REG_RESET_ERROR 0x40
|
||||
#define MC68681_MODE_REG_RESET_BREAK 0x50
|
||||
#define MC68681_MODE_REG_START_BREAK 0x60
|
||||
#define MC68681_MODE_REG_STOP_BREAK 0x70
|
||||
#define MC68681_MODE_REG_SET_RX_BRG 0x80
|
||||
#define MC68681_MODE_REG_CLEAR_RX_BRG 0x90
|
||||
#define MC68681_MODE_REG_SET_TX_BRG 0xa0
|
||||
#define MC68681_MODE_REG_CLEAR_TX_BRG 0xb0
|
||||
#define MC68681_MODE_REG_SET_STANDBY 0xc0
|
||||
#define MC68681_MODE_REG_SET_ACTIVE 0xd0
|
||||
|
||||
/*
|
||||
* Mode Register Definitions
|
||||
*
|
||||
* MC68681_MODE_REG_1A
|
||||
* MC68681_MODE_REG_1B
|
||||
*/
|
||||
#define MC68681_5BIT_CHARS 0x00
|
||||
#define MC68681_6BIT_CHARS 0x01
|
||||
#define MC68681_7BIT_CHARS 0x02
|
||||
#define MC68681_8BIT_CHARS 0x03
|
||||
|
||||
#define MC68681_ODD_PARITY 0x00
|
||||
#define MC68681_EVEN_PARITY 0x04
|
||||
|
||||
#define MC68681_WITH_PARITY 0x00
|
||||
#define MC68681_FORCE_PARITY 0x08
|
||||
#define MC68681_NO_PARITY 0x10
|
||||
#define MC68681_MULTI_DROP 0x18
|
||||
|
||||
#define MC68681_ERR_MODE_CHAR 0x00
|
||||
#define MC68681_ERR_MODE_BLOCK 0x20
|
||||
|
||||
#define MC68681_RX_INTR_RX_READY 0x00
|
||||
#define MC68681_RX_INTR_FFULL 0x40
|
||||
|
||||
#define MC68681_NO_RX_RTS_CTL 0x00
|
||||
#define MC68681_RX_RTS_CTRL 0x80
|
||||
|
||||
|
||||
/*
|
||||
* Mode Register Definitions
|
||||
*
|
||||
* MC68681_MODE_REG_2A
|
||||
* MC68681_MODE_REG_2B
|
||||
*/
|
||||
#define MC68681_STOP_BIT_LENGTH__563 0x00
|
||||
#define MC68681_STOP_BIT_LENGTH__625 0x01
|
||||
#define MC68681_STOP_BIT_LENGTH__688 0x02
|
||||
#define MC68681_STOP_BIT_LENGTH__75 0x03
|
||||
#define MC68681_STOP_BIT_LENGTH__813 0x04
|
||||
#define MC68681_STOP_BIT_LENGTH__875 0x05
|
||||
#define MC68681_STOP_BIT_LENGTH__938 0x06
|
||||
#define MC68681_STOP_BIT_LENGTH_1 0x07
|
||||
#define MC68681_STOP_BIT_LENGTH_1_563 0x08
|
||||
#define MC68681_STOP_BIT_LENGTH_1_625 0x09
|
||||
#define MC68681_STOP_BIT_LENGTH_1_688 0x0a
|
||||
#define MC68681_STOP_BIT_LENGTH_1_75 0x0b
|
||||
#define MC68681_STOP_BIT_LENGTH_1_813 0x0c
|
||||
#define MC68681_STOP_BIT_LENGTH_1_875 0x0d
|
||||
#define MC68681_STOP_BIT_LENGTH_1_938 0x0e
|
||||
#define MC68681_STOP_BIT_LENGTH_2 0x0f
|
||||
|
||||
#define MC68681_CTS_ENABLE_TX 0x10
|
||||
#define MC68681_TX_RTS_CTRL 0x20
|
||||
|
||||
#define MC68681_CHANNEL_MODE_NORMAL 0x00
|
||||
#define MC68681_CHANNEL_MODE_ECHO 0x40
|
||||
#define MC68681_CHANNEL_MODE_LOCAL_LOOP 0x80
|
||||
#define MC68681_CHANNEL_MODE_REMOTE_LOOP 0xc0
|
||||
|
||||
/*
|
||||
* Status Register Definitions
|
||||
*
|
||||
* MC68681_STATUS_REG_A, MC68681_STATUS_REG_B
|
||||
*/
|
||||
#define MC68681_RX_READY 0x01
|
||||
#define MC68681_FFULL 0x02
|
||||
#define MC68681_TX_READY 0x04
|
||||
#define MC68681_TX_EMPTY 0x08
|
||||
#define MC68681_OVERRUN_ERROR 0x10
|
||||
#define MC68681_PARITY_ERROR 0x20
|
||||
#define MC68681_FRAMING_ERROR 0x40
|
||||
#define MC68681_RECEIVED_BREAK 0x80
|
||||
|
||||
|
||||
/*
|
||||
* Interupt Status Register Definitions.
|
||||
*
|
||||
* MC68681_INTERRUPT_STATUS_REG
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Interupt Mask Register Definitions
|
||||
*
|
||||
* MC68681_INTERRUPT_MASK_REG
|
||||
*/
|
||||
#define MC68681_IR_TX_READY_A 0x01
|
||||
#define MC68681_IR_RX_READY_A 0x02
|
||||
#define MC68681_IR_BREAK_A 0x04
|
||||
#define MC68681_IR_COUNTER_READY 0x08
|
||||
#define MC68681_IR_TX_READY_B 0x10
|
||||
#define MC68681_IR_RX_READY_B 0x20
|
||||
#define MC68681_IR_BREAK_B 0x40
|
||||
#define MC68681_IR_INPUT_PORT_CHANGE 0x80
|
||||
|
||||
/*
|
||||
* Status Register Definitions.
|
||||
*
|
||||
* MC68681_STATUS_REG_A,MC68681_STATUS_REG_B
|
||||
*/
|
||||
#define MC68681_STATUS_RXRDY 0x01
|
||||
#define MC68681_STATUS_FFULL 0x02
|
||||
#define MC68681_STATUS_TXRDY 0x04
|
||||
#define MC68681_STATUS_TXEMT 0x08
|
||||
#define MC68681_STATUS_OVERRUN_ERROR 0x10
|
||||
#define MC68681_STATUS_PARITY_ERROR 0x20
|
||||
#define MC68681_STATUS_FRAMING_ERROR 0x40
|
||||
#define MC68681_STATUS_RECEIVED_BREAK 0x80
|
||||
|
||||
/*
|
||||
* Definitions for the Interrupt Vector Register:
|
||||
*
|
||||
* MC68681_INTERRUPT_VECTOR_REG
|
||||
*/
|
||||
#define MC68681_INTERRUPT_VECTOR_INIT 0x0f
|
||||
|
||||
/*
|
||||
* Definitions for the Auxiliary Control Register
|
||||
*
|
||||
* MC68681_AUX_CTRL_REG
|
||||
*/
|
||||
#define MC68681_AUX_BRG_SET1 0x00
|
||||
#define MC68681_AUX_BRG_SET2 0x80
|
||||
|
||||
|
||||
/*
|
||||
* The following Baud rates assume the X1 clock pin is driven with a
|
||||
* 3.6864 MHz signal. If a different frequency is used the DUART channel
|
||||
* is running at the follwoing baud rate:
|
||||
* ((Table Baud Rate)*frequency)/3.6864 MHz
|
||||
*/
|
||||
|
||||
/*
|
||||
* Definitions for the Clock Select Register:
|
||||
*
|
||||
* MC68681_CLOCK_SELECT_REG_A,MC68681_CLOCK_SELECT_REG_A
|
||||
*
|
||||
* Note: ACR[7] is the MSB of the Auxiliary Control register
|
||||
* X is the extend bit.
|
||||
* CRA - 0x08 Set Rx BRG Select Extend Bit (X=1)
|
||||
* CRA - 0x09 Clear Rx BRG Select Extend Bit (X=0)
|
||||
* CRB - 0x0a Set Tx BRG Select Extend Bit (X=1)
|
||||
* CRB - 0x0b Clear Tx BRG Select Extend Bit (x=1)
|
||||
*/
|
||||
#define MC68681_BAUD_RATE_MASK_50 0x00 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_75 0x00 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_110 0x01
|
||||
#define MC68681_BAUD_RATE_MASK_134_5 0x02
|
||||
#define MC68681_BAUD_RATE_MASK_150 0x03 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_200 0x03 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_300 0x04 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_600 0x05 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_1050 0x07 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_1200 0x06 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_1800 0x0a /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_2400 0x08 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_3600 0x04 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_4800 0x09
|
||||
#define MC68681_BAUD_RATE_MASK_7200 0x0a /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_9600 0xbb
|
||||
|
||||
#define MC68681_BAUD_RATE_MASK_14_4K 0x05 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_19_2K 0xcc /* ACR[7]=1,X=0 */
|
||||
/* ARC[7]=0,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_28_8K 0x06 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_38_4K 0xcc /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_57_6K 0x07 /* ACR[7]=0,X=0 */
|
||||
/* ARC[7]=1,X=1 */
|
||||
#define MC68681_BAUD_RATE_MASK_115_5K 0x08
|
||||
#define MC68681_BAUD_RATE_MASK_TIMER 0xdd
|
||||
#define MC68681_BAUD_RATE_MASK_TIMER_16X 0xee
|
||||
#define MC68681_BAUD_RATE_MASK_TIMER_1X 0xff
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* ringbuf.h
|
||||
*
|
||||
* This file provides simple ring buffer functionality.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __RINGBUF_H__
|
||||
#define __RINGBUF_H__
|
||||
|
||||
#ifndef RINGBUF_QUEUE_LENGTH
|
||||
#define RINGBUF_QUEUE_LENGTH 128
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
char buffer[RINGBUF_QUEUE_LENGTH];
|
||||
volatile int head;
|
||||
volatile int tail;
|
||||
} Ring_buffer_t;
|
||||
|
||||
#define Ring_buffer_Initialize( _buffer ) \
|
||||
do { \
|
||||
(_buffer)->head = (_buffer)->tail = 0; \
|
||||
} while ( 0 )
|
||||
|
||||
#define Ring_buffer_Is_empty( _buffer ) \
|
||||
( (_buffer)->head == (_buffer)->tail )
|
||||
|
||||
#define Ring_buffer_Is_full( _buffer ) \
|
||||
( (_buffer)->head == ((_buffer)->tail + 1) % RINGBUF_QUEUE_LENGTH )
|
||||
|
||||
#define Ring_buffer_Add_character( _buffer, _ch ) \
|
||||
do { \
|
||||
rtems_unsigned32 isrlevel; \
|
||||
\
|
||||
rtems_interrupt_disable( isrlevel ); \
|
||||
(_buffer)->tail = ((_buffer)->tail+1) % RINGBUF_QUEUE_LENGTH; \
|
||||
(_buffer)->buffer[ (_buffer)->tail ] = (_ch); \
|
||||
rtems_interrupt_enable( isrlevel ); \
|
||||
} while ( 0 )
|
||||
|
||||
#define Ring_buffer_Remove_character( _buffer, _ch ) \
|
||||
do { \
|
||||
rtems_unsigned32 isrlevel; \
|
||||
\
|
||||
rtems_interrupt_disable( isrlevel ); \
|
||||
(_buffer)->head = ((_buffer)->head+1) % RINGBUF_QUEUE_LENGTH; \
|
||||
(_ch) = (_buffer)->buffer[ (_buffer)->head ]; \
|
||||
rtems_interrupt_enable( isrlevel ); \
|
||||
} while ( 0 )
|
||||
|
||||
#endif
|
||||
@@ -1,38 +0,0 @@
|
||||
/* rtc.h
|
||||
*
|
||||
* This file describes the Real-Time Clock driver for all boards.
|
||||
* This driver provides support for the standard RTEMS routines
|
||||
* that set the tod based on an RTC.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2001.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _RTC_DRIVER_h
|
||||
#define _RTC_DRIVER_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RTC_DRIVER_TABLE_ENTRY \
|
||||
{ rtc_initialize, NULL, NULL, NULL, NULL, NULL }
|
||||
|
||||
rtems_device_driver rtc_initialize(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Rtems associativity routines. Mainly used to convert a value from
|
||||
* one space to another (eg: our errno's to host errno's and v.v)
|
||||
*
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_ASSOC_H
|
||||
#define _INCLUDE_ASSOC_H
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
unsigned32 local_value;
|
||||
unsigned32 remote_value;
|
||||
} rtems_assoc_t;
|
||||
|
||||
/*
|
||||
* Flag/marker for optional default value in each table
|
||||
*/
|
||||
|
||||
#define RTEMS_ASSOC_DEFAULT_NAME "(default)"
|
||||
|
||||
const rtems_assoc_t *rtems_assoc_ptr_by_name(const rtems_assoc_t *, const char *);
|
||||
const rtems_assoc_t *rtems_assoc_ptr_by_value(const rtems_assoc_t *, unsigned32);
|
||||
const rtems_assoc_t *rtems_assoc_ptr_by_remote(const rtems_assoc_t *, unsigned32);
|
||||
|
||||
unsigned32 rtems_assoc_remote_by_local(const rtems_assoc_t *, unsigned32);
|
||||
unsigned32 rtems_assoc_local_by_remote(const rtems_assoc_t *, unsigned32);
|
||||
unsigned32 rtems_assoc_remote_by_name(const rtems_assoc_t *, const char *);
|
||||
unsigned32 rtems_assoc_local_by_name(const rtems_assoc_t *, const char *);
|
||||
const char *rtems_assoc_name_by_local(const rtems_assoc_t *, unsigned32);
|
||||
const char *rtems_assoc_name_by_remote(const rtems_assoc_t *, unsigned32);
|
||||
|
||||
unsigned32 rtems_assoc_remote_by_local_bitfield(const rtems_assoc_t *, unsigned32);
|
||||
char *rtems_assoc_name_by_local_bitfield(const rtems_assoc_t *, unsigned32, char *);
|
||||
char *rtems_assoc_name_by_remote_bitfield(const rtems_assoc_t *, unsigned32, char *);
|
||||
unsigned32 rtems_assoc_local_by_remote_bitfield(const rtems_assoc_t *, unsigned32);
|
||||
|
||||
|
||||
#endif /* ! _INCLUDE_ASSOC_H */
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __RTEMS_ERROR_h
|
||||
#define __RTEMS_ERROR_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* rtems_error() and rtems_panic() support
|
||||
*/
|
||||
|
||||
#define RTEMS_ERROR_ERRNO (1<<((sizeof(int) * 8) - 2)) /* hi bit; use 'errno' */
|
||||
#define RTEMS_ERROR_PANIC (RTEMS_ERROR_ERRNO / 2) /* err fatal; no return */
|
||||
#define RTEMS_ERROR_ABORT (RTEMS_ERROR_ERRNO / 4) /* err is fatal; panic */
|
||||
|
||||
#define RTEMS_ERROR_MASK (RTEMS_ERROR_ERRNO | RTEMS_ERROR_ABORT | \
|
||||
RTEMS_ERROR_PANIC) /* all */
|
||||
|
||||
const char *rtems_status_text(rtems_status_code);
|
||||
int rtems_error(int error_code, const char *printf_format, ...);
|
||||
#ifdef __GNUC__
|
||||
void rtems_panic(const char *printf_format, ...);
|
||||
/*
|
||||
* We should be able to use this attribute but gcc complains that
|
||||
* rtems_panic does in fact return. :(
|
||||
*
|
||||
* __attribute__ ((__noreturn__));
|
||||
*/
|
||||
#else
|
||||
void rtems_panic(const char *printf_format, ...);
|
||||
#endif
|
||||
|
||||
extern int rtems_panic_in_progress;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,43 +0,0 @@
|
||||
/* libcsupport.h
|
||||
*
|
||||
* This include file contains the information regarding the
|
||||
* RTEMS specific support for the standard C library.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __LIBC_SUPPORT_h
|
||||
#define __LIBC_SUPPORT_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
void RTEMS_Malloc_Initialize(
|
||||
void *start,
|
||||
size_t length,
|
||||
size_t sbrk_amount
|
||||
);
|
||||
|
||||
extern void malloc_dump(void);
|
||||
extern void malloc_walk(size_t source, size_t printf_enabled);
|
||||
extern void libc_init(int reentrant);
|
||||
extern int host_errno(void);
|
||||
extern void fix_syscall_errno(void);
|
||||
extern size_t malloc_free_space();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,575 +0,0 @@
|
||||
/*
|
||||
* System call and file system interface definition
|
||||
*
|
||||
* General purpose communication channel for RTEMS to allow UNIX/POSIX
|
||||
* system call behavior under RTEMS. Initially this supported only
|
||||
* IO to devices but has since been enhanced to support networking
|
||||
* and support for mounted file systems.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _RTEMS_LIBIO_H
|
||||
#define _RTEMS_LIBIO_H
|
||||
|
||||
#include <rtems.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
/*
|
||||
* Define data types which must be constructed using forward references.
|
||||
*/
|
||||
|
||||
#include <rtems/fs.h>
|
||||
|
||||
/*
|
||||
* Valid RTEMS file types.
|
||||
*/
|
||||
typedef enum {
|
||||
RTEMS_FILESYSTEM_DIRECTORY,
|
||||
RTEMS_FILESYSTEM_DEVICE,
|
||||
RTEMS_FILESYSTEM_HARD_LINK,
|
||||
RTEMS_FILESYSTEM_SYM_LINK,
|
||||
RTEMS_FILESYSTEM_MEMORY_FILE
|
||||
} rtems_filesystem_node_types_t;
|
||||
|
||||
/*
|
||||
* File Handler Operations Table
|
||||
*/
|
||||
|
||||
typedef int (*rtems_filesystem_open_t)(
|
||||
rtems_libio_t *iop,
|
||||
const char *pathname,
|
||||
unsigned32 flag,
|
||||
unsigned32 mode
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_close_t)(
|
||||
rtems_libio_t *iop
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_read_t)(
|
||||
rtems_libio_t *iop,
|
||||
void *buffer,
|
||||
unsigned32 count
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_write_t)(
|
||||
rtems_libio_t *iop,
|
||||
const void *buffer,
|
||||
unsigned32 count
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_ioctl_t)(
|
||||
rtems_libio_t *iop,
|
||||
unsigned32 command,
|
||||
void *buffer
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_lseek_t)(
|
||||
rtems_libio_t *iop,
|
||||
off_t length,
|
||||
int whence
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fstat_t)(
|
||||
rtems_filesystem_location_info_t *loc,
|
||||
struct stat *buf
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fchmod_t)(
|
||||
rtems_filesystem_location_info_t *loc,
|
||||
mode_t mode
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_ftruncate_t)(
|
||||
rtems_libio_t *iop,
|
||||
off_t length
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fpathconf_t)(
|
||||
rtems_libio_t *iop,
|
||||
int name
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fsync_t)(
|
||||
rtems_libio_t *iop
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fdatasync_t)(
|
||||
rtems_libio_t *iop
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_fcntl_t)(
|
||||
int cmd,
|
||||
rtems_libio_t *iop
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_rmnod_t)(
|
||||
rtems_filesystem_location_info_t *pathloc /* IN */
|
||||
);
|
||||
|
||||
struct _rtems_filesystem_file_handlers_r {
|
||||
rtems_filesystem_open_t open_h;
|
||||
rtems_filesystem_close_t close_h;
|
||||
rtems_filesystem_read_t read_h;
|
||||
rtems_filesystem_write_t write_h;
|
||||
rtems_filesystem_ioctl_t ioctl_h;
|
||||
rtems_filesystem_lseek_t lseek_h;
|
||||
rtems_filesystem_fstat_t fstat_h;
|
||||
rtems_filesystem_fchmod_t fchmod_h;
|
||||
rtems_filesystem_ftruncate_t ftruncate_h;
|
||||
rtems_filesystem_fpathconf_t fpathconf_h;
|
||||
rtems_filesystem_fsync_t fsync_h;
|
||||
rtems_filesystem_fdatasync_t fdatasync_h;
|
||||
rtems_filesystem_fcntl_t fcntl_h;
|
||||
rtems_filesystem_rmnod_t rmnod_h;
|
||||
};
|
||||
|
||||
/*
|
||||
* File System Operations Table
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* This routine does not allocate any space and rtems_filesystem_freenode_t
|
||||
* is not called by the generic after calling this routine.
|
||||
* ie. node_access does not have to contain valid data when the
|
||||
* routine returns.
|
||||
*/
|
||||
|
||||
typedef int (*rtems_filesystem_mknod_t)(
|
||||
const char *path, /* IN */
|
||||
mode_t mode, /* IN */
|
||||
dev_t dev, /* IN */
|
||||
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_filesystem_freenode_t must be called by the generic after
|
||||
* calling this routine
|
||||
*/
|
||||
|
||||
typedef int (*rtems_filesystem_evalpath_t)(
|
||||
const char *pathname, /* IN */
|
||||
int flags, /* IN */
|
||||
rtems_filesystem_location_info_t *pathloc /* IN/OUT */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_evalmake_t)(
|
||||
const char *path, /* IN */
|
||||
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
|
||||
const char **name /* OUT */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_link_t)(
|
||||
rtems_filesystem_location_info_t *to_loc, /* IN */
|
||||
rtems_filesystem_location_info_t *parent_loc, /* IN */
|
||||
const char *name /* IN */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_unlink_t)(
|
||||
rtems_filesystem_location_info_t *pathloc /* IN */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_chown_t)(
|
||||
rtems_filesystem_location_info_t *pathloc, /* IN */
|
||||
uid_t owner, /* IN */
|
||||
gid_t group /* IN */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_freenode_t)(
|
||||
rtems_filesystem_location_info_t *pathloc /* IN */
|
||||
);
|
||||
|
||||
typedef int (* rtems_filesystem_mount_t ) (
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry /* in */
|
||||
);
|
||||
|
||||
typedef int (* rtems_filesystem_fsmount_me_t )(
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry
|
||||
);
|
||||
|
||||
typedef int (* rtems_filesystem_unmount_t ) (
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry /* in */
|
||||
);
|
||||
|
||||
typedef int (* rtems_filesystem_fsunmount_me_t ) (
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry /* in */
|
||||
);
|
||||
|
||||
typedef rtems_filesystem_node_types_t (* rtems_filesystem_node_type_t) (
|
||||
rtems_filesystem_location_info_t *pathloc /* in */
|
||||
);
|
||||
|
||||
typedef int (* rtems_filesystem_utime_t)(
|
||||
rtems_filesystem_location_info_t *pathloc, /* IN */
|
||||
time_t actime, /* IN */
|
||||
time_t modtime /* IN */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_evaluate_link_t)(
|
||||
rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
|
||||
int flags /* IN */
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_symlink_t)(
|
||||
rtems_filesystem_location_info_t *loc, /* IN */
|
||||
const char *link_name, /* IN */
|
||||
const char *node_name
|
||||
);
|
||||
|
||||
typedef int (*rtems_filesystem_readlink_t)(
|
||||
rtems_filesystem_location_info_t *loc, /* IN */
|
||||
char *buf, /* OUT */
|
||||
size_t bufsize
|
||||
);
|
||||
|
||||
/*
|
||||
* operations table that must be defined for every file system.
|
||||
*/
|
||||
|
||||
/*
|
||||
* File system types
|
||||
*/
|
||||
struct _rtems_filesystem_operations_table {
|
||||
rtems_filesystem_evalpath_t evalpath_h;
|
||||
rtems_filesystem_evalmake_t evalformake_h;
|
||||
rtems_filesystem_link_t link_h;
|
||||
rtems_filesystem_unlink_t unlink_h;
|
||||
rtems_filesystem_node_type_t node_type_h;
|
||||
rtems_filesystem_mknod_t mknod_h;
|
||||
rtems_filesystem_chown_t chown_h;
|
||||
rtems_filesystem_freenode_t freenod_h;
|
||||
rtems_filesystem_mount_t mount_h;
|
||||
rtems_filesystem_fsmount_me_t fsmount_me_h;
|
||||
rtems_filesystem_unmount_t unmount_h;
|
||||
rtems_filesystem_fsunmount_me_t fsunmount_me_h;
|
||||
rtems_filesystem_utime_t utime_h;
|
||||
rtems_filesystem_evaluate_link_t eval_link_h;
|
||||
rtems_filesystem_symlink_t symlink_h;
|
||||
rtems_filesystem_readlink_t readlink_h;
|
||||
};
|
||||
|
||||
#if 0
|
||||
/* Now in exec/include/rtems/fs.h */
|
||||
|
||||
/*
|
||||
* Structure used to determine a location/filesystem in the tree.
|
||||
*/
|
||||
|
||||
struct rtems_filesystem_location_info_tt
|
||||
{
|
||||
void *node_access;
|
||||
rtems_filesystem_file_handlers_r *handlers;
|
||||
rtems_filesystem_operations_table *ops;
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry;
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure used to contain file system specific information which
|
||||
* is required to support fpathconf().
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int link_max;
|
||||
int max_canon;
|
||||
int max_input;
|
||||
int name_max;
|
||||
int path_max;
|
||||
int pipe_buf;
|
||||
int posix_async_io;
|
||||
int posix_chown_restrictions;
|
||||
int posix_no_trunc;
|
||||
int posix_prio_io;
|
||||
int posix_sync_io;
|
||||
int posix_vdisable;
|
||||
} rtems_filesystem_limits_and_options_t;
|
||||
|
||||
/*
|
||||
* Structure for a mount table entry.
|
||||
*/
|
||||
|
||||
struct rtems_filesystem_mount_table_entry_tt {
|
||||
Chain_Node Node;
|
||||
rtems_filesystem_location_info_t mt_point_node;
|
||||
rtems_filesystem_location_info_t mt_fs_root;
|
||||
int options;
|
||||
void *fs_info;
|
||||
|
||||
rtems_filesystem_limits_and_options_t pathconf_limits_and_options;
|
||||
|
||||
/*
|
||||
* When someone adds a mounted filesystem on a real device,
|
||||
* this will need to be used.
|
||||
*
|
||||
* The best option long term for this is probably an open file descriptor.
|
||||
*/
|
||||
char *dev;
|
||||
};
|
||||
|
||||
/*
|
||||
* Valid RTEMS file systems options
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RTEMS_FILESYSTEM_READ_ONLY,
|
||||
RTEMS_FILESYSTEM_READ_WRITE,
|
||||
RTEMS_FILESYSTEM_BAD_OPTIONS
|
||||
} rtems_filesystem_options_t;
|
||||
|
||||
|
||||
/*
|
||||
* An open file data structure, indexed by 'fd'
|
||||
* TODO:
|
||||
* should really have a separate per/file data structure that this
|
||||
* points to (eg: size, offset, driver, pathname should be in that)
|
||||
*/
|
||||
|
||||
struct rtems_libio_tt {
|
||||
rtems_driver_name_t *driver;
|
||||
off_t size; /* size of file */
|
||||
off_t offset; /* current offset into file */
|
||||
unsigned32 flags;
|
||||
rtems_filesystem_location_info_t pathinfo;
|
||||
Objects_Id sem;
|
||||
unsigned32 data0; /* private to "driver" */
|
||||
void *data1; /* ... */
|
||||
void *file_info; /* used by file handlers */
|
||||
rtems_filesystem_file_handlers_r *handlers; /* type specific handlers */
|
||||
};
|
||||
|
||||
/*
|
||||
* param block for read/write
|
||||
* Note: it must include 'offset' instead of using iop's offset since
|
||||
* we can have multiple outstanding i/o's on a device.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
rtems_libio_t *iop;
|
||||
off_t offset;
|
||||
unsigned8 *buffer;
|
||||
unsigned32 count;
|
||||
unsigned32 flags;
|
||||
unsigned32 bytes_moved;
|
||||
} rtems_libio_rw_args_t;
|
||||
|
||||
/*
|
||||
* param block for open/close
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
rtems_libio_t *iop;
|
||||
unsigned32 flags;
|
||||
unsigned32 mode;
|
||||
} rtems_libio_open_close_args_t;
|
||||
|
||||
/*
|
||||
* param block for ioctl
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
rtems_libio_t *iop;
|
||||
unsigned32 command;
|
||||
void *buffer;
|
||||
unsigned32 ioctl_return;
|
||||
} rtems_libio_ioctl_args_t;
|
||||
|
||||
/*
|
||||
* Values for 'flag'
|
||||
*/
|
||||
|
||||
#define LIBIO_FLAGS_NO_DELAY 0x0001 /* return immediately if no data */
|
||||
#define LIBIO_FLAGS_READ 0x0002 /* reading */
|
||||
#define LIBIO_FLAGS_WRITE 0x0004 /* writing */
|
||||
#define LIBIO_FLAGS_OPEN 0x0100 /* device is open */
|
||||
#define LIBIO_FLAGS_APPEND 0x0200 /* all writes append */
|
||||
#define LIBIO_FLAGS_CREATE 0x0400 /* create file */
|
||||
#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800 /* close on process exec() */
|
||||
#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
|
||||
|
||||
void rtems_libio_init(void);
|
||||
|
||||
/*
|
||||
* External I/O handlers
|
||||
*/
|
||||
|
||||
typedef int (*rtems_libio_open_t)(
|
||||
const char *pathname,
|
||||
unsigned32 flag,
|
||||
unsigned32 mode
|
||||
);
|
||||
|
||||
typedef int (*rtems_libio_close_t)(
|
||||
int fd
|
||||
);
|
||||
|
||||
typedef int (*rtems_libio_read_t)(
|
||||
int fd,
|
||||
void *buffer,
|
||||
unsigned32 count
|
||||
);
|
||||
|
||||
typedef int (*rtems_libio_write_t)(
|
||||
int fd,
|
||||
const void *buffer,
|
||||
unsigned32 count
|
||||
);
|
||||
|
||||
typedef int (*rtems_libio_ioctl_t)(
|
||||
int fd,
|
||||
unsigned32 command,
|
||||
void *buffer
|
||||
);
|
||||
|
||||
typedef int (*rtems_libio_lseek_t)(
|
||||
int fd,
|
||||
off_t offset,
|
||||
int whence
|
||||
);
|
||||
|
||||
/*
|
||||
* The following macros are used to build up the permissions sets
|
||||
* used to check permissions. These are similar in style to the
|
||||
* mode_t bits and should stay compatible with them.
|
||||
*/
|
||||
|
||||
#define RTEMS_LIBIO_PERMS_READ S_IROTH
|
||||
#define RTEMS_LIBIO_PERMS_WRITE S_IWOTH
|
||||
#define RTEMS_LIBIO_PERMS_RDWR (S_IROTH|S_IWOTH)
|
||||
#define RTEMS_LIBIO_PERMS_EXEC S_IXOTH
|
||||
#define RTEMS_LIBIO_PERMS_SEARCH RTEMS_LIBIO_PERMS_EXEC
|
||||
#define RTEMS_LIBIO_PERMS_RWX S_IRWXO
|
||||
|
||||
/*
|
||||
* Macros
|
||||
*/
|
||||
|
||||
#define rtems_filesystem_make_dev_t( _major, _minor ) \
|
||||
((((dev_t)(_major)) << 32) | (dev_t)(_minor))
|
||||
|
||||
#define rtems_filesystem_dev_major_t( _dev ) \
|
||||
(rtems_device_major_number) ((_dev) >> 32)
|
||||
|
||||
#define rtems_filesystem_dev_minor_t( _dev ) \
|
||||
(rtems_device_minor_number) ((_dev) & 0xFFFFFFFF)
|
||||
|
||||
#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
|
||||
do { \
|
||||
(_major) = rtems_filesystem_dev_major_t ( _dev ); \
|
||||
(_minor) = rtems_filesystem_dev_minor_t( _dev ); \
|
||||
} while(0)
|
||||
|
||||
/*
|
||||
* Verifies that the permission flag is valid.
|
||||
*/
|
||||
#define rtems_libio_is_valid_perms( _perm ) \
|
||||
(~ ((~RTEMS_LIBIO_PERMS_RWX) & _perm ))
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes for filesystem
|
||||
*/
|
||||
|
||||
void rtems_filesystem_initialize( void );
|
||||
|
||||
|
||||
/*
|
||||
* Callbacks from TERMIOS routines to device-dependent code
|
||||
*/
|
||||
|
||||
#include <termios.h>
|
||||
|
||||
typedef struct rtems_termios_callbacks {
|
||||
int (*firstOpen)(int major, int minor, void *arg);
|
||||
int (*lastClose)(int major, int minor, void *arg);
|
||||
int (*pollRead)(int minor);
|
||||
int (*write)(int minor, const char *buf, int len);
|
||||
int (*setAttributes)(int minor, const struct termios *t);
|
||||
int (*stopRemoteTx)(int minor);
|
||||
int (*startRemoteTx)(int minor);
|
||||
int outputUsesInterrupts;
|
||||
} rtems_termios_callbacks;
|
||||
|
||||
/*
|
||||
* Device-independent TERMIOS routines
|
||||
*/
|
||||
|
||||
void rtems_termios_initialize (void);
|
||||
|
||||
rtems_status_code rtems_termios_open (
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg,
|
||||
const rtems_termios_callbacks *callbacks
|
||||
);
|
||||
|
||||
rtems_status_code rtems_termios_close(
|
||||
void *arg
|
||||
);
|
||||
|
||||
rtems_status_code rtems_termios_read(
|
||||
void *arg
|
||||
);
|
||||
|
||||
rtems_status_code rtems_termios_write(
|
||||
void *arg
|
||||
);
|
||||
|
||||
rtems_status_code rtems_termios_ioctl(
|
||||
void *arg
|
||||
);
|
||||
|
||||
int rtems_termios_enqueue_raw_characters(
|
||||
void *ttyp,
|
||||
char *buf,
|
||||
int len
|
||||
);
|
||||
|
||||
int rtems_termios_dequeue_characters(
|
||||
void *ttyp,
|
||||
int len
|
||||
);
|
||||
|
||||
void rtems_termios_reserve_resources(
|
||||
rtems_configuration_table *configuration,
|
||||
rtems_unsigned32 number_of_devices
|
||||
);
|
||||
|
||||
int unmount(
|
||||
const char *mount_path
|
||||
);
|
||||
|
||||
int mount(
|
||||
rtems_filesystem_mount_table_entry_t **mt_entry,
|
||||
rtems_filesystem_operations_table *fs_ops,
|
||||
rtems_filesystem_options_t fsoptions,
|
||||
char *device,
|
||||
char *mount_point
|
||||
);
|
||||
|
||||
/*
|
||||
* Boot Time Mount Table Structure
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
rtems_filesystem_operations_table *fs_ops;
|
||||
rtems_filesystem_options_t fsoptions;
|
||||
char *device;
|
||||
char *mount_point;
|
||||
} rtems_filesystem_mount_table_t;
|
||||
|
||||
extern rtems_filesystem_mount_table_t *rtems_filesystem_mount_table;
|
||||
extern int rtems_filesystem_mount_table_size;
|
||||
|
||||
#endif /* _RTEMS_LIBIO_H */
|
||||
@@ -1,239 +0,0 @@
|
||||
/*
|
||||
* Libio Internal Information
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __RTEMS_LIBIO_INTERNAL__h
|
||||
#define __RTEMS_LIBIO_INTERNAL__h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h> /* include before standard IO */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/*
|
||||
* Semaphore to protect the io table
|
||||
*/
|
||||
|
||||
#define RTEMS_LIBIO_SEM rtems_build_name('L', 'B', 'I', 'O')
|
||||
#define RTEMS_LIBIO_IOP_SEM(n) rtems_build_name('L', 'B', 'I', n)
|
||||
|
||||
extern rtems_id rtems_libio_semaphore;
|
||||
extern rtems_filesystem_file_handlers_r rtems_filesystem_null_handlers;
|
||||
|
||||
/*
|
||||
* File descriptor Table Information
|
||||
*/
|
||||
|
||||
extern unsigned32 rtems_libio_number_iops;
|
||||
extern rtems_libio_t *rtems_libio_iops;
|
||||
extern rtems_libio_t *rtems_libio_last_iop;
|
||||
extern rtems_libio_t *rtems_libio_iop_freelist;
|
||||
|
||||
/*
|
||||
* rtems_libio_iop
|
||||
*
|
||||
* Macro to return the file descriptor pointer.
|
||||
*/
|
||||
|
||||
#define rtems_libio_iop(_fd) \
|
||||
((((unsigned32)(_fd)) < rtems_libio_number_iops) ? \
|
||||
&rtems_libio_iops[_fd] : 0)
|
||||
|
||||
/*
|
||||
* rtems_libio_check_is_open
|
||||
*
|
||||
* Macro to check if a file descriptor is actually open.
|
||||
*/
|
||||
|
||||
#define rtems_libio_check_is_open(_iop) \
|
||||
do { \
|
||||
if (((_iop)->flags & LIBIO_FLAGS_OPEN) == 0) { \
|
||||
errno = EBADF; \
|
||||
return -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_libio_check_fd
|
||||
*
|
||||
* Macro to check if a file descriptor number is valid.
|
||||
*/
|
||||
|
||||
#define rtems_libio_check_fd(_fd) \
|
||||
do { \
|
||||
if ((unsigned32) (_fd) >= rtems_libio_number_iops) { \
|
||||
errno = EBADF; \
|
||||
return -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_libio_check_buffer
|
||||
*
|
||||
* Macro to check if a buffer pointer is valid.
|
||||
*/
|
||||
|
||||
#define rtems_libio_check_buffer(_buffer) \
|
||||
do { \
|
||||
if ((_buffer) == 0) { \
|
||||
errno = EINVAL; \
|
||||
return -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_libio_check_count
|
||||
*
|
||||
* Macro to check if a count or length is valid.
|
||||
*/
|
||||
|
||||
#define rtems_libio_check_count(_count) \
|
||||
do { \
|
||||
if ((_count) == 0) { \
|
||||
return 0; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_libio_check_permissions
|
||||
*
|
||||
* Macro to check if a file descriptor is open for this operation.
|
||||
*/
|
||||
|
||||
#define rtems_libio_check_permissions(_iop, _flag) \
|
||||
do { \
|
||||
if (((_iop)->flags & (_flag)) == 0) { \
|
||||
rtems_set_errno_and_return_minus_one( EINVAL ); \
|
||||
return -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_filesystem_freenode
|
||||
*
|
||||
* Macro to free a node.
|
||||
*/
|
||||
|
||||
#define rtems_filesystem_freenode( _node ) \
|
||||
do { \
|
||||
if ( (_node)->ops )\
|
||||
if ( (_node)->ops->freenod_h ) \
|
||||
(*(_node)->ops->freenod_h)( (_node) ); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* rtems_filesystem_is_separator
|
||||
*
|
||||
* Macro to determine if a character is a path name separator.
|
||||
*
|
||||
* NOTE: This macro handles MS-DOS and UNIX style names.
|
||||
*/
|
||||
|
||||
#define rtems_filesystem_is_separator( _ch ) \
|
||||
( ((_ch) == '/') || ((_ch) == '\\') || ((_ch) == '\0'))
|
||||
|
||||
/*
|
||||
* rtems_filesystem_get_start_loc
|
||||
*
|
||||
* Macro to determine if path is absolute or relative.
|
||||
*/
|
||||
|
||||
#define rtems_filesystem_get_start_loc( _path, _index, _loc ) \
|
||||
do { \
|
||||
if ( rtems_filesystem_is_separator( (_path)[ 0 ] ) ) { \
|
||||
*(_loc) = rtems_filesystem_root; \
|
||||
*(_index) = 1; \
|
||||
} else { \
|
||||
*(_loc) = rtems_filesystem_current; \
|
||||
*(_index) = 0; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define rtems_filesystem_get_sym_start_loc( _path, _index, _loc ) \
|
||||
do { \
|
||||
if ( rtems_filesystem_is_separator( (_path)[ 0 ] ) ) { \
|
||||
*(_loc) = rtems_filesystem_root; \
|
||||
*(_index) = 1; \
|
||||
} else { \
|
||||
*(_index) = 0; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* External structures
|
||||
*/
|
||||
#include <rtems/userenv.h>
|
||||
|
||||
extern rtems_user_env_t * rtems_current_user_env;
|
||||
extern rtems_user_env_t rtems_global_user_env;
|
||||
|
||||
/*
|
||||
* Instantiate a private copy of the per user information for the calling task.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_libio_set_private_env(void);
|
||||
rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
|
||||
|
||||
/*
|
||||
* File Descriptor Routine Prototypes
|
||||
*/
|
||||
|
||||
rtems_libio_t *rtems_libio_allocate(void);
|
||||
|
||||
unsigned32 rtems_libio_fcntl_flags(
|
||||
unsigned32 fcntl_flags
|
||||
);
|
||||
|
||||
unsigned32 rtems_libio_to_fcntl_flags(
|
||||
unsigned32 flags
|
||||
);
|
||||
|
||||
void rtems_libio_free(
|
||||
rtems_libio_t *iop
|
||||
);
|
||||
|
||||
int rtems_libio_is_open_files_in_fs(
|
||||
rtems_filesystem_mount_table_entry_t *mt_entry
|
||||
);
|
||||
|
||||
int rtems_libio_is_file_open(
|
||||
void *node_access
|
||||
);
|
||||
|
||||
/*
|
||||
* File System Routine Prototypes
|
||||
*/
|
||||
|
||||
int rtems_filesystem_evaluate_path(
|
||||
const char *pathname,
|
||||
int flags,
|
||||
rtems_filesystem_location_info_t *pathloc,
|
||||
int follow_link
|
||||
);
|
||||
|
||||
void rtems_filesystem_initialize();
|
||||
|
||||
int init_fs_mount_table();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* RTEMS termios device support internal data structures
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2000.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef TERMIOSTYPES_H
|
||||
#define TERMIOSTYPES_H
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Wakeup callback data structure
|
||||
*/
|
||||
struct ttywakeup {
|
||||
void (*sw_pfn)__P((struct termios *tty, void *arg));
|
||||
void *sw_arg;
|
||||
};
|
||||
|
||||
/*
|
||||
* Variables associated with the character buffer
|
||||
*/
|
||||
struct rtems_termios_rawbuf {
|
||||
char *theBuf;
|
||||
volatile unsigned int Head;
|
||||
volatile unsigned int Tail;
|
||||
volatile unsigned int Size;
|
||||
rtems_id Semaphore;
|
||||
};
|
||||
/*
|
||||
* Variables associated with each termios instance.
|
||||
* One structure for each hardware I/O device.
|
||||
*/
|
||||
struct rtems_termios_tty {
|
||||
/*
|
||||
* Linked-list of active TERMIOS devices
|
||||
*/
|
||||
struct rtems_termios_tty *forw;
|
||||
struct rtems_termios_tty *back;
|
||||
|
||||
/*
|
||||
* How many times has this device been opened
|
||||
*/
|
||||
int refcount;
|
||||
|
||||
/*
|
||||
* This device
|
||||
*/
|
||||
rtems_device_major_number major;
|
||||
rtems_device_major_number minor;
|
||||
|
||||
/*
|
||||
* Mutual-exclusion semaphores
|
||||
*/
|
||||
rtems_id isem;
|
||||
rtems_id osem;
|
||||
|
||||
/*
|
||||
* The canonical (cooked) character buffer
|
||||
*/
|
||||
char *cbuf;
|
||||
int ccount;
|
||||
int cindex;
|
||||
|
||||
/*
|
||||
* Keep track of cursor (printhead) position
|
||||
*/
|
||||
int column;
|
||||
int read_start_column;
|
||||
|
||||
/*
|
||||
* The ioctl settings
|
||||
*/
|
||||
struct termios termios;
|
||||
rtems_interval vtimeTicks;
|
||||
|
||||
/*
|
||||
* Raw input character buffer
|
||||
*/
|
||||
struct rtems_termios_rawbuf rawInBuf;
|
||||
rtems_unsigned32 rawInBufSemaphoreOptions;
|
||||
rtems_interval rawInBufSemaphoreTimeout;
|
||||
rtems_interval rawInBufSemaphoreFirstTimeout;
|
||||
unsigned int rawInBufDropped; /* Statistics */
|
||||
|
||||
/*
|
||||
* Raw output character buffer
|
||||
*/
|
||||
struct rtems_termios_rawbuf rawOutBuf;
|
||||
int t_dqlen; /* count of characters dequeued from device */
|
||||
enum {rob_idle, rob_busy, rob_wait } rawOutBufState;
|
||||
|
||||
/*
|
||||
* Callbacks to device-specific routines
|
||||
*/
|
||||
rtems_termios_callbacks device;
|
||||
volatile unsigned int flow_ctrl;
|
||||
unsigned int lowwater,highwater;
|
||||
|
||||
/*
|
||||
* I/O task IDs (for task-driven drivers)
|
||||
*/
|
||||
rtems_id rxTaskId;
|
||||
rtems_id txTaskId;
|
||||
/*
|
||||
* line discipline related stuff
|
||||
*/
|
||||
int t_line; /* id of line discipline */
|
||||
void *t_sc; /* hook for discipline-specific data structure */
|
||||
/*
|
||||
* Wakeup callback variables
|
||||
*/
|
||||
struct ttywakeup tty_snd;
|
||||
struct ttywakeup tty_rcv;
|
||||
int tty_rcvwakeup;
|
||||
};
|
||||
|
||||
struct linesw {
|
||||
int (*l_open) (struct rtems_termios_tty *tp);
|
||||
int (*l_close)(struct rtems_termios_tty *tp);
|
||||
int (*l_read )(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
|
||||
int (*l_write)(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
|
||||
int (*l_rint )(int c,struct rtems_termios_tty *tp);
|
||||
int (*l_start)(struct rtems_termios_tty *tp);
|
||||
int (*l_ioctl)(struct rtems_termios_tty *tp,rtems_libio_ioctl_args_t *args);
|
||||
int (*l_modem)(struct rtems_termios_tty *tp,int flags);
|
||||
};
|
||||
|
||||
/*
|
||||
* FIXME: this should move to libio.h!
|
||||
* values for rtems_termios_callbacks.outputUsesInterrupts
|
||||
*/
|
||||
#define TERMIOS_POLLED 0
|
||||
#define TERMIOS_IRQ_DRIVEN 1
|
||||
#define TERMIOS_TASK_DRIVEN 2
|
||||
|
||||
|
||||
/*
|
||||
* FIXME: this should move to termios.h!
|
||||
*/
|
||||
void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty);
|
||||
/*
|
||||
* FIXME: this should move to termios.h!
|
||||
* put a string to output ring buffer
|
||||
*/
|
||||
void rtems_termios_puts (const char *buf,
|
||||
int len,
|
||||
struct rtems_termios_tty *tty);
|
||||
/*
|
||||
* global hooks for line disciplines
|
||||
*/
|
||||
extern struct linesw linesw[];
|
||||
extern int nlinesw;
|
||||
|
||||
#define TTYDISC 0 /* termios tty line discipline */
|
||||
#define TABLDISC 3 /* tablet discipline */
|
||||
#define SLIPDISC 4 /* serial IP discipline */
|
||||
#define PPPDISC 5 /* PPP discipline */
|
||||
#define MAXLDISC 8
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* TERMIOSTYPES_H */
|
||||
@@ -1,38 +0,0 @@
|
||||
/* spurious.h
|
||||
*
|
||||
* This file describes the Spurious Interrupt Driver for all boards.
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __SPURIOUS_h
|
||||
#define __SPURIOUS_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SPURIOUS_DRIVER_TABLE_ENTRY \
|
||||
{ Spurious_Initialize, NULL, NULL, NULL, NULL, NULL }
|
||||
|
||||
rtems_device_driver Spurious_Initialize(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
void *,
|
||||
rtems_id,
|
||||
rtems_unsigned32 *
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* stdint.h
|
||||
*
|
||||
* ISO C99 integer types
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __STDINT_H
|
||||
#define __STDINT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef signed char int8_t;
|
||||
typedef short int int16_t;
|
||||
typedef int int32_t;
|
||||
typedef long int int64_t;
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned short int uint16_t;
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned long int uint64_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Berkeley Software Design, Inc.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)cdefs.h 8.8 (Berkeley) 1/9/95
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CDEFS_H_
|
||||
#define _SYS_CDEFS_H_
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#define __BEGIN_DECLS extern "C" {
|
||||
#define __END_DECLS };
|
||||
#else
|
||||
#define __BEGIN_DECLS
|
||||
#define __END_DECLS
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The __CONCAT macro is used to concatenate parts of symbol names, e.g.
|
||||
* with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
|
||||
* The __CONCAT macro is a bit tricky -- make sure you don't put spaces
|
||||
* in between its arguments. __CONCAT can also concatenate double-quoted
|
||||
* strings produced by the __STRING macro, but this only works with ANSI C.
|
||||
*
|
||||
* __XSTRING is like __STRING, but it expands any macros in its argument
|
||||
* first. It is only available with ANSI C.
|
||||
*/
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
#define __P(protos) protos /* full-blown ANSI C */
|
||||
#define __CONCAT1(x,y) x ## y
|
||||
#define __CONCAT(x,y) __CONCAT1(x,y)
|
||||
#define __STRING(x) #x /* stringify without expanding x */
|
||||
#define __XSTRING(x) __STRING(x) /* expand x, then stringify */
|
||||
|
||||
#define __const const /* define reserved names to standard */
|
||||
#define __signed signed
|
||||
#define __volatile volatile
|
||||
#if defined(__cplusplus)
|
||||
#define __inline inline /* convert to C++ keyword */
|
||||
#else
|
||||
#ifndef __GNUC__
|
||||
#define __inline /* delete GCC keyword */
|
||||
#endif /* !__GNUC__ */
|
||||
#endif /* !__cplusplus */
|
||||
|
||||
#else /* !(__STDC__ || __cplusplus) */
|
||||
#define __P(protos) () /* traditional C preprocessor */
|
||||
#define __CONCAT(x,y) x/**/y
|
||||
#define __STRING(x) "x"
|
||||
|
||||
#ifndef __GNUC__
|
||||
#define __const /* delete pseudo-ANSI C keywords */
|
||||
#define __inline
|
||||
#define __signed
|
||||
#define __volatile
|
||||
/*
|
||||
* In non-ANSI C environments, new programs will want ANSI-only C keywords
|
||||
* deleted from the program and old programs will want them left alone.
|
||||
* When using a compiler other than gcc, programs using the ANSI C keywords
|
||||
* const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
|
||||
* When using "gcc -traditional", we assume that this is the intent; if
|
||||
* __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
|
||||
*/
|
||||
#ifndef NO_ANSI_KEYWORDS
|
||||
#define const /* delete ANSI C keywords */
|
||||
#define inline
|
||||
#define signed
|
||||
#define volatile
|
||||
#endif /* !NO_ANSI_KEYWORDS */
|
||||
#endif /* !__GNUC__ */
|
||||
#endif /* !(__STDC__ || __cplusplus) */
|
||||
|
||||
/*
|
||||
* GCC1 and some versions of GCC2 declare dead (non-returning) and
|
||||
* pure (no side effects) functions using "volatile" and "const";
|
||||
* unfortunately, these then cause warnings under "-ansi -pedantic".
|
||||
* GCC2.5 uses a new, peculiar __attribute__((attrs)) style. All of
|
||||
* these work for GNU C++ (modulo a slight glitch in the C++ grammar
|
||||
* in the distribution version of 2.5.5).
|
||||
*/
|
||||
#if __GNUC__ < 2
|
||||
#define __dead
|
||||
#define __dead2
|
||||
#define __pure
|
||||
#define __pure2
|
||||
#define __unused
|
||||
#define __attribute__(x)
|
||||
#endif
|
||||
#if __GNUC__ == 2 && __GNUC_MINOR__ < 5
|
||||
#define __dead __volatile
|
||||
#define __dead2
|
||||
#define __pure __const
|
||||
#define __pure2
|
||||
#define __unused
|
||||
#endif
|
||||
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7
|
||||
#define __dead
|
||||
#define __dead2 __attribute__((__noreturn__))
|
||||
#define __pure
|
||||
#define __pure2 __attribute__((__const__))
|
||||
#define __unused
|
||||
#endif
|
||||
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3
|
||||
#define __dead
|
||||
#define __dead2 __attribute__((__noreturn__))
|
||||
#define __pure
|
||||
#define __pure2 __attribute__((__const__))
|
||||
#define __unused __attribute__((__unused__))
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
#ifdef __STDC__
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".stabs \"_" #alias "\",11,0,0,0"); \
|
||||
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".stabs \"" msg "\",30,0,0,0"); \
|
||||
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||
#else
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".stabs \"_/**/alias\",11,0,0,0"); \
|
||||
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm__(".stabs msg,30,0,0,0"); \
|
||||
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __IDSTRING(name,string) \
|
||||
static const char name[] __attribute__((__unused__)) = string
|
||||
|
||||
#ifndef __RCSID
|
||||
#define __RCSID(s) __IDSTRING(rcsid,s)
|
||||
#endif
|
||||
|
||||
#ifndef __RCSID_SOURCE
|
||||
#define __RCSID_SOURCE(s) __IDSTRING(rcsid_source,s)
|
||||
#endif
|
||||
|
||||
#ifndef __COPYRIGHT
|
||||
#define __COPYRIGHT(s) __IDSTRING(copyright,s)
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_CDEFS_H_ */
|
||||
@@ -1,59 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)filio.h 8.1 (Berkeley) 3/28/94
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FILIO_H_
|
||||
#define _SYS_FILIO_H_
|
||||
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
/* RTEMS defines all of these in sys/ioccom.h */
|
||||
#if 0
|
||||
/* Generic file-descriptor ioctl's. */
|
||||
#define FIOCLEX _IO('f', 1) /* set close on exec on fd */
|
||||
#define FIONCLEX _IO('f', 2) /* remove close on exec */
|
||||
#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */
|
||||
#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */
|
||||
#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */
|
||||
#define FIOSETOWN _IOW('f', 124, int) /* set owner */
|
||||
#define FIOGETOWN _IOR('f', 123, int) /* get owner */
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_FILIO_H_ */
|
||||
@@ -1,95 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)ioccom.h 8.2 (Berkeley) 3/28/94
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_IOCCOM_H_
|
||||
#define _SYS_IOCCOM_H_
|
||||
|
||||
/*
|
||||
* Ioctl's have the command encoded in the lower word, and the size of
|
||||
* any in or out parameters in the upper word. The high 3 bits of the
|
||||
* upper word are used to encode the in/out status of the parameter.
|
||||
*/
|
||||
#define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */
|
||||
#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
|
||||
#define IOCBASECMD(x) ((x) & ~(IOCPARM_MASK << 16))
|
||||
#define IOCGROUP(x) (((x) >> 8) & 0xff)
|
||||
|
||||
#define IOCPARM_MAX PAGE_SIZE /* max size of ioctl, mult. of PAGE_SIZE */
|
||||
#define IOC_VOID 0x20000000 /* no parameters */
|
||||
#define IOC_OUT 0x40000000 /* copy out parameters */
|
||||
#define IOC_IN 0x80000000 /* copy in parameters */
|
||||
#define IOC_INOUT (IOC_IN|IOC_OUT)
|
||||
#define IOC_DIRMASK 0xe0000000 /* mask for IN/OUT/VOID */
|
||||
|
||||
#define _IOC(inout,group,num,len) \
|
||||
(inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num))
|
||||
#define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0)
|
||||
#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
|
||||
#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))
|
||||
/* this should be _IORW, but stdio got there first */
|
||||
#define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t))
|
||||
|
||||
/*
|
||||
* IOCTL values
|
||||
*/
|
||||
|
||||
#define RTEMS_IO_GET_ATTRIBUTES 1
|
||||
#define RTEMS_IO_SET_ATTRIBUTES 2
|
||||
#define RTEMS_IO_TCDRAIN 3
|
||||
#define RTEMS_IO_RCVWAKEUP 4
|
||||
#define RTEMS_IO_SNDWAKEUP 5
|
||||
|
||||
/* copied from libnetworking/sys/filio.h and commented out there */
|
||||
/* Generic file-descriptor ioctl's. */
|
||||
#define FIOCLEX _IO('f', 1) /* set close on exec on fd */
|
||||
#define FIONCLEX _IO('f', 2) /* remove close on exec */
|
||||
#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */
|
||||
#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */
|
||||
#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */
|
||||
#define FIOSETOWN _IOW('f', 124, int) /* set owner */
|
||||
#define FIOGETOWN _IOR('f', 123, int) /* get owner */
|
||||
|
||||
#ifndef KERNEL
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
int ioctl __P((int, int, ...));
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !KERNEL */
|
||||
|
||||
#endif /* !_SYS_IOCCOM_H_ */
|
||||
@@ -1,77 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)ioctl.h 8.6 (Berkeley) 3/28/94
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_IOCTL_H_
|
||||
#define _SYS_IOCTL_H_
|
||||
|
||||
#include <sys/ttycom.h>
|
||||
|
||||
/*
|
||||
* Pun for SunOS prior to 3.2. SunOS 3.2 and later support TIOCGWINSZ
|
||||
* and TIOCSWINSZ (yes, even 3.2-3.5, the fact that it wasn't documented
|
||||
* notwithstanding).
|
||||
*/
|
||||
struct ttysize {
|
||||
unsigned short ts_lines;
|
||||
unsigned short ts_cols;
|
||||
unsigned short ts_xxx;
|
||||
unsigned short ts_yyy;
|
||||
};
|
||||
#define TIOCGSIZE TIOCGWINSZ
|
||||
#define TIOCSSIZE TIOCSWINSZ
|
||||
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
#include <sys/filio.h>
|
||||
#include <sys/sockio.h>
|
||||
|
||||
#endif /* !_SYS_IOCTL_H_ */
|
||||
|
||||
/*
|
||||
* Keep outside _SYS_IOCTL_H_
|
||||
* Compatibility with old terminal driver
|
||||
*
|
||||
* Source level -> #define USE_OLD_TTY
|
||||
* Kernel level -> options COMPAT_43 or COMPAT_SUNOS
|
||||
*/
|
||||
#if defined(USE_OLD_TTY) || defined(COMPAT_43) || defined(COMPAT_SUNOS)
|
||||
#include <sys/ioctl_compat.h>
|
||||
#endif
|
||||
@@ -1,92 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)sockio.h 8.1 (Berkeley) 3/28/94
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SOCKIO_H_
|
||||
#define _SYS_SOCKIO_H_
|
||||
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
/* Socket ioctl's. */
|
||||
#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */
|
||||
#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */
|
||||
#define SIOCSLOWAT _IOW('s', 2, int) /* set low watermark */
|
||||
#define SIOCGLOWAT _IOR('s', 3, int) /* get low watermark */
|
||||
#define SIOCATMARK _IOR('s', 7, int) /* at oob mark? */
|
||||
#define SIOCSPGRP _IOW('s', 8, int) /* set process group */
|
||||
#define SIOCGPGRP _IOR('s', 9, int) /* get process group */
|
||||
|
||||
#define SIOCADDRT _IOW('r', 10, struct ortentry) /* add route */
|
||||
#define SIOCDELRT _IOW('r', 11, struct ortentry) /* delete route */
|
||||
#define SIOCGETVIFCNT _IOWR('r', 15, struct sioc_vif_req)/* get vif pkt cnt */
|
||||
#define SIOCGETSGCNT _IOWR('r', 16, struct sioc_sg_req) /* get s,g pkt cnt */
|
||||
|
||||
#define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet address */
|
||||
#define OSIOCGIFADDR _IOWR('i', 13, struct ifreq) /* get ifnet address */
|
||||
#define SIOCGIFADDR _IOWR('i', 33, struct ifreq) /* get ifnet address */
|
||||
#define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p address */
|
||||
#define OSIOCGIFDSTADDR _IOWR('i', 15, struct ifreq) /* get p-p address */
|
||||
#define SIOCGIFDSTADDR _IOWR('i', 34, struct ifreq) /* get p-p address */
|
||||
#define SIOCSIFFLAGS _IOW('i', 16, struct ifreq) /* set ifnet flags */
|
||||
#define SIOCGIFFLAGS _IOWR('i', 17, struct ifreq) /* get ifnet flags */
|
||||
#define OSIOCGIFBRDADDR _IOWR('i', 18, struct ifreq) /* get broadcast addr */
|
||||
#define SIOCGIFBRDADDR _IOWR('i', 35, struct ifreq) /* get broadcast addr */
|
||||
#define SIOCSIFBRDADDR _IOW('i', 19, struct ifreq) /* set broadcast addr */
|
||||
#define OSIOCGIFCONF _IOWR('i', 20, struct ifconf) /* get ifnet list */
|
||||
#define SIOCGIFCONF _IOWR('i', 36, struct ifconf) /* get ifnet list */
|
||||
#define OSIOCGIFNETMASK _IOWR('i', 21, struct ifreq) /* get net addr mask */
|
||||
#define SIOCGIFNETMASK _IOWR('i', 37, struct ifreq) /* get net addr mask */
|
||||
#define SIOCSIFNETMASK _IOW('i', 22, struct ifreq) /* set net addr mask */
|
||||
#define SIOCGIFMETRIC _IOWR('i', 23, struct ifreq) /* get IF metric */
|
||||
#define SIOCSIFMETRIC _IOW('i', 24, struct ifreq) /* set IF metric */
|
||||
#define SIOCDIFADDR _IOW('i', 25, struct ifreq) /* delete IF addr */
|
||||
#define SIOCAIFADDR _IOW('i', 26, struct ifaliasreq)/* add/chg IF alias */
|
||||
|
||||
#define SIOCADDMULTI _IOW('i', 49, struct ifreq) /* add m'cast addr */
|
||||
#define SIOCDELMULTI _IOW('i', 50, struct ifreq) /* del m'cast addr */
|
||||
#define SIOCGIFMTU _IOWR('i', 51, struct ifreq) /* get IF mtu */
|
||||
#define SIOCSIFMTU _IOW('i', 52, struct ifreq) /* set IF mtu */
|
||||
#define SIOCGIFPHYS _IOWR('i', 53, struct ifreq) /* get IF wire */
|
||||
#define SIOCSIFPHYS _IOW('i', 54, struct ifreq) /* set IF wire */
|
||||
#define SIOCSIFMEDIA _IOWR('i', 55, struct ifreq) /* set net media */
|
||||
#define SIOCGIFMEDIA _IOWR('i', 56, struct ifmediareq) /* get net media */
|
||||
|
||||
/*
|
||||
* RTEMS additions for setting/getting `tap' function on incoming packets.
|
||||
*/
|
||||
#define SIOCSIFTAP _IOW('i', 80, struct ifreq) /* set tap function */
|
||||
#define SIOCGIFTAP _IOW('i', 81, struct ifreq) /* get tap function */
|
||||
|
||||
#endif /* !_SYS_SOCKIO_H_ */
|
||||
@@ -1,198 +0,0 @@
|
||||
/*
|
||||
* POSIX termios implementation for RTEMS console device driver.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef TERMIOS_H
|
||||
#define TERMIOS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned int tcflag_t;
|
||||
|
||||
#define NCCS 19
|
||||
struct termios {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
};
|
||||
|
||||
/* c_cc characters */
|
||||
#define VINTR 0
|
||||
#define VQUIT 1
|
||||
#define VERASE 2
|
||||
#define VKILL 3
|
||||
#define VEOF 4
|
||||
#define VTIME 5
|
||||
#define VMIN 6
|
||||
#define VSWTC 7
|
||||
#define VSTART 8
|
||||
#define VSTOP 9
|
||||
#define VSUSP 10
|
||||
#define VEOL 11
|
||||
#define VREPRINT 12
|
||||
#define VDISCARD 13
|
||||
#define VWERASE 14
|
||||
#define VLNEXT 15
|
||||
#define VEOL2 16
|
||||
|
||||
/* c_iflag bits */
|
||||
#define IGNBRK 0000001
|
||||
#define BRKINT 0000002
|
||||
#define IGNPAR 0000004
|
||||
#define PARMRK 0000010
|
||||
#define INPCK 0000020
|
||||
#define ISTRIP 0000040
|
||||
#define INLCR 0000100
|
||||
#define IGNCR 0000200
|
||||
#define ICRNL 0000400
|
||||
#define IUCLC 0001000
|
||||
#define IXON 0002000
|
||||
#define IXANY 0004000
|
||||
#define IXOFF 0010000
|
||||
#define IMAXBEL 0020000
|
||||
|
||||
/* c_oflag bits */
|
||||
#define OPOST 0000001
|
||||
#define OLCUC 0000002
|
||||
#define ONLCR 0000004
|
||||
#define OCRNL 0000010
|
||||
#define ONOCR 0000020
|
||||
#define ONLRET 0000040
|
||||
#define OFILL 0000100
|
||||
#define OFDEL 0000200
|
||||
#define NLDLY 0000400
|
||||
#define NL0 0000000
|
||||
#define NL1 0000400
|
||||
#define CRDLY 0003000
|
||||
#define CR0 0000000
|
||||
#define CR1 0001000
|
||||
#define CR2 0002000
|
||||
#define CR3 0003000
|
||||
#define TABDLY 0014000
|
||||
#define TAB0 0000000
|
||||
#define TAB1 0004000
|
||||
#define TAB2 0010000
|
||||
#define TAB3 0014000
|
||||
#define XTABS 0014000
|
||||
#define BSDLY 0020000
|
||||
#define BS0 0000000
|
||||
#define BS1 0020000
|
||||
#define VTDLY 0040000
|
||||
#define VT0 0000000
|
||||
#define VT1 0040000
|
||||
#define FFDLY 0100000
|
||||
#define FF0 0000000
|
||||
#define FF1 0100000
|
||||
|
||||
/* c_cflag bit meaning */
|
||||
#define CBAUD 0010017
|
||||
#define B0 0000000 /* hang up */
|
||||
#define B50 0000001
|
||||
#define B75 0000002
|
||||
#define B110 0000003
|
||||
#define B134 0000004
|
||||
#define B150 0000005
|
||||
#define B200 0000006
|
||||
#define B300 0000007
|
||||
#define B600 0000010
|
||||
#define B1200 0000011
|
||||
#define B1800 0000012
|
||||
#define B2400 0000013
|
||||
#define B4800 0000014
|
||||
#define B9600 0000015
|
||||
#define B19200 0000016
|
||||
#define B38400 0000017
|
||||
#define EXTA B19200
|
||||
#define EXTB B38400
|
||||
#define CSIZE 0000060
|
||||
#define CS5 0000000
|
||||
#define CS6 0000020
|
||||
#define CS7 0000040
|
||||
#define CS8 0000060
|
||||
#define CSTOPB 0000100
|
||||
#define CREAD 0000200
|
||||
#define PARENB 0000400
|
||||
#define PARODD 0001000
|
||||
#define HUPCL 0002000
|
||||
#define CLOCAL 0004000
|
||||
#define CBAUDEX 0010000
|
||||
#define B57600 0010001
|
||||
#define B115200 0010002
|
||||
#define B230400 0010003
|
||||
#define B460800 0010004
|
||||
#define CIBAUD 002003600000 /* input baud rate (not used) */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
|
||||
#define RTEMS_TERMIOS_NUMBER_BAUD_RATES 20
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0000001
|
||||
#define ICANON 0000002
|
||||
#define XCASE 0000004
|
||||
#define ECHO 0000010
|
||||
#define ECHOE 0000020
|
||||
#define ECHOK 0000040
|
||||
#define ECHONL 0000100
|
||||
#define NOFLSH 0000200
|
||||
#define TOSTOP 0000400
|
||||
#define ECHOCTL 0001000
|
||||
#define ECHOPRT 0002000
|
||||
#define ECHOKE 0004000
|
||||
#define FLUSHO 0010000
|
||||
#define PENDIN 0040000
|
||||
#define IEXTEN 0100000
|
||||
|
||||
/* tcflow() and TCXONC use these */
|
||||
#define TCOOFF 0
|
||||
#define TCOON 1
|
||||
#define TCIOFF 2
|
||||
#define TCION 3
|
||||
|
||||
/* tcflush() and TCFLSH use these */
|
||||
#define TCIFLUSH 0
|
||||
#define TCOFLUSH 1
|
||||
#define TCIOFLUSH 2
|
||||
|
||||
/* tcsetattr uses these */
|
||||
#define TCSANOW 0
|
||||
#define TCSADRAIN 1
|
||||
#define TCSAFLUSH 2
|
||||
|
||||
int tcdrain(int);
|
||||
int tcflow(int, int);
|
||||
int tcflush(int, int);
|
||||
int tcgetattr(int, struct termios *);
|
||||
int tcsetattr(int, int, struct termios *);
|
||||
int tcdrain(int);
|
||||
pid_t tcgetprgrp(int);
|
||||
int tcsetprgrp(int, pid_t);
|
||||
int tcsendbreak(int, int);
|
||||
|
||||
speed_t cfgetospeed(const struct termios *tp);
|
||||
int cfsetospeed(struct termios *tp, speed_t speed);
|
||||
speed_t cfgetispeed(const struct termios *tp);
|
||||
int cfsetispeed(struct termios *tp, speed_t speed);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* TERMIOS_H */
|
||||
@@ -1,141 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1990, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)ttycom.h 8.1 (Berkeley) 3/28/94
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TTYCOM_H_
|
||||
#define _SYS_TTYCOM_H_
|
||||
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
/*
|
||||
* Tty ioctl's except for those supported only for backwards compatibility
|
||||
* with the old tty driver.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Window/terminal size structure. This information is stored by the kernel
|
||||
* in order to provide a consistent interface, but is not used by the kernel.
|
||||
*/
|
||||
struct winsize {
|
||||
unsigned short ws_row; /* rows, in characters */
|
||||
unsigned short ws_col; /* columns, in characters */
|
||||
unsigned short ws_xpixel; /* horizontal size, pixels */
|
||||
unsigned short ws_ypixel; /* vertical size, pixels */
|
||||
};
|
||||
|
||||
#define TIOCMODG _IOR('t', 3, int) /* get modem control state */
|
||||
#define TIOCMODS _IOW('t', 4, int) /* set modem control state */
|
||||
#define TIOCM_LE 0001 /* line enable */
|
||||
#define TIOCM_DTR 0002 /* data terminal ready */
|
||||
#define TIOCM_RTS 0004 /* request to send */
|
||||
#define TIOCM_ST 0010 /* secondary transmit */
|
||||
#define TIOCM_SR 0020 /* secondary receive */
|
||||
#define TIOCM_CTS 0040 /* clear to send */
|
||||
#define TIOCM_CAR 0100 /* carrier detect */
|
||||
#define TIOCM_CD TIOCM_CAR
|
||||
#define TIOCM_RNG 0200 /* ring */
|
||||
#define TIOCM_RI TIOCM_RNG
|
||||
#define TIOCM_DSR 0400 /* data set ready */
|
||||
/* 8-10 compat */
|
||||
#define TIOCEXCL _IO('t', 13) /* set exclusive use of tty */
|
||||
#define TIOCNXCL _IO('t', 14) /* reset exclusive use of tty */
|
||||
/* 15 unused */
|
||||
#define TIOCFLUSH _IOW('t', 16, int) /* flush buffers */
|
||||
/* 17-18 compat */
|
||||
#define TIOCGETA _IOR('t', 19, struct termios) /* get termios struct */
|
||||
#define TIOCSETA _IOW('t', 20, struct termios) /* set termios struct */
|
||||
#define TIOCSETAW _IOW('t', 21, struct termios) /* drain output, set */
|
||||
#define TIOCSETAF _IOW('t', 22, struct termios) /* drn out, fls in, set */
|
||||
#define TIOCGETD _IOR('t', 26, int) /* get line discipline */
|
||||
#define TIOCSETD _IOW('t', 27, int) /* set line discipline */
|
||||
/* 127-124 compat */
|
||||
#define TIOCSBRK _IO('t', 123) /* set break bit */
|
||||
#define TIOCCBRK _IO('t', 122) /* clear break bit */
|
||||
#define TIOCSDTR _IO('t', 121) /* set data terminal ready */
|
||||
#define TIOCCDTR _IO('t', 120) /* clear data terminal ready */
|
||||
#define TIOCGPGRP _IOR('t', 119, int) /* get pgrp of tty */
|
||||
#define TIOCSPGRP _IOW('t', 118, int) /* set pgrp of tty */
|
||||
/* 117-116 compat */
|
||||
#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */
|
||||
#define TIOCSTI _IOW('t', 114, char) /* simulate terminal input */
|
||||
#define TIOCNOTTY _IO('t', 113) /* void tty association */
|
||||
#define TIOCPKT _IOW('t', 112, int) /* pty: set/clear packet mode */
|
||||
#define TIOCPKT_DATA 0x00 /* data packet */
|
||||
#define TIOCPKT_FLUSHREAD 0x01 /* flush packet */
|
||||
#define TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
|
||||
#define TIOCPKT_STOP 0x04 /* stop output */
|
||||
#define TIOCPKT_START 0x08 /* start output */
|
||||
#define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
|
||||
#define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
|
||||
#define TIOCPKT_IOCTL 0x40 /* state change of pty driver */
|
||||
#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */
|
||||
#define TIOCSTART _IO('t', 110) /* start output, like ^Q */
|
||||
#define TIOCMSET _IOW('t', 109, int) /* set all modem bits */
|
||||
#define TIOCMBIS _IOW('t', 108, int) /* bis modem bits */
|
||||
#define TIOCMBIC _IOW('t', 107, int) /* bic modem bits */
|
||||
#define TIOCMGET _IOR('t', 106, int) /* get all modem bits */
|
||||
#define TIOCREMOTE _IOW('t', 105, int) /* remote input editing */
|
||||
#define TIOCGWINSZ _IOR('t', 104, struct winsize) /* get window size */
|
||||
#define TIOCSWINSZ _IOW('t', 103, struct winsize) /* set window size */
|
||||
#define TIOCUCNTL _IOW('t', 102, int) /* pty: set/clr usr cntl mode */
|
||||
#define TIOCSTAT _IO('t', 101) /* simulate ^T status message */
|
||||
#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */
|
||||
#define TIOCCONS _IOW('t', 98, int) /* become virtual console */
|
||||
#define TIOCSCTTY _IO('t', 97) /* become controlling tty */
|
||||
#define TIOCEXT _IOW('t', 96, int) /* pty: external processing */
|
||||
#define TIOCSIG _IO('t', 95) /* pty: generate signal */
|
||||
#define TIOCDRAIN _IO('t', 94) /* wait till output drained */
|
||||
#define TIOCMSDTRWAIT _IOW('t', 91, int) /* modem: set wait on close */
|
||||
#define TIOCMGDTRWAIT _IOR('t', 90, int) /* modem: get wait on close */
|
||||
#define TIOCTIMESTAMP _IOR('t', 89, struct timeval) /* enable/get timestamp
|
||||
* of last input event */
|
||||
#define TIOCDCDTIMESTAMP _IOR('t', 88, struct timeval) /* enable/get timestamp
|
||||
* of last DCd rise */
|
||||
#define TIOCSDRAINWAIT _IOW('t', 87, int) /* set ttywait timeout */
|
||||
#define TIOCGDRAINWAIT _IOR('t', 86, int) /* get ttywait timeout */
|
||||
#define TIOCDSIMICROCODE _IO('t', 85) /* download microcode to
|
||||
* DSI Softmodem */
|
||||
|
||||
#define TTYDISC 0 /* termios tty line discipline */
|
||||
#define TABLDISC 3 /* tablet discipline */
|
||||
#define SLIPDISC 4 /* serial IP discipline */
|
||||
#define PPPDISC 5 /* PPP discipline */
|
||||
|
||||
#endif /* !_SYS_TTYCOM_H_ */
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __UTIME_h__
|
||||
#define __UTIME_h__
|
||||
|
||||
/*
|
||||
* POSIX 1003.1b 5.6.6 Set File Access and Modification Times
|
||||
*/
|
||||
|
||||
struct utimbuf {
|
||||
time_t actime; /* Access time */
|
||||
time_t modtime; /* Modification time */
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
int utime(
|
||||
const char *path,
|
||||
const struct utimbuf *times
|
||||
);
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,56 +0,0 @@
|
||||
/* sys/utsname.h
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __POSIX_SYS_UTSNAME_h
|
||||
#define __POSIX_SYS_UTSNAME_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <sys/times.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
* 4.4.1 Get System Name (Table 4-1), P1003.1b-1993, p. 90
|
||||
*
|
||||
* NOTE: The lengths of the strings in this structure are
|
||||
* just long enough to reliably contain the RTEMS information.
|
||||
* For example, the fields are not long enough to support
|
||||
* Internet hostnames.
|
||||
*/
|
||||
|
||||
struct utsname {
|
||||
char sysname[ 32 ]; /* Name of this implementation of the operating system */
|
||||
char nodename[ 32 ]; /* Name of this node within an implementation */
|
||||
/* specified communication network */
|
||||
char release[ 32 ]; /* Current release level of this implementation */
|
||||
char version[ 32 ]; /* Current version level of this release */
|
||||
char machine[ 32 ]; /* Name of the hardware type on which the system */
|
||||
/* is running */
|
||||
};
|
||||
|
||||
/*
|
||||
* 4.4.1 Get System Name, P1003.1b-1993, p. 90
|
||||
*/
|
||||
|
||||
int uname(
|
||||
struct utsname *name
|
||||
);
|
||||
|
||||
/*
|
||||
* 4.5.2 Get Process Times, P1003.1b-1993, p. 92
|
||||
*/
|
||||
|
||||
clock_t times(
|
||||
struct tms *buffer
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
/* end of include file */
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
/* timerdrv.h
|
||||
*
|
||||
* This file describes the Timer Driver for all boards.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __TIMER_DRIVER_h
|
||||
#define __TIMER_DRIVER_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* functions */
|
||||
|
||||
void Timer_initialize( void );
|
||||
|
||||
rtems_unsigned32 Read_timer( void );
|
||||
|
||||
rtems_status_code Empty_function( void );
|
||||
|
||||
void Set_find_average_overhead(
|
||||
rtems_boolean find_flag
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* vmeintr.h
|
||||
*
|
||||
* This file is the specification for the VMEbus interface library
|
||||
* which should be provided by all BSPs for VMEbus Single Board
|
||||
* Computers but currently only a few do so.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __VME_INTERRUPT_h
|
||||
#define __VME_INTERRUPT_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This defines the mask which is used to determine which
|
||||
* interrupt levels are affected by a call to this package.
|
||||
* The LSB corresponds to VME interrupt 0 and the MSB
|
||||
* to VME interrupt 7.
|
||||
*
|
||||
*/
|
||||
|
||||
typedef rtems_unsigned8 VME_interrupt_Mask;
|
||||
|
||||
/*
|
||||
* VME_interrupt_Disable
|
||||
*
|
||||
*/
|
||||
|
||||
void VME_interrupt_Disable (
|
||||
VME_interrupt_Mask mask /* IN */
|
||||
);
|
||||
|
||||
/*
|
||||
* VME_interrupt_Disable
|
||||
*
|
||||
*/
|
||||
|
||||
void VME_interrupt_Enable (
|
||||
VME_interrupt_Mask mask /* IN */
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* end of include file */
|
||||
@@ -1,2 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -1,108 +0,0 @@
|
||||
/* z8036.h
|
||||
*
|
||||
* This include file defines information related to a Zilog Z8036
|
||||
* Counter/Timer/IO Chip. It is a memory mapped part.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* NOTE: This file shares as much as possible with the include
|
||||
* file for the Z8536 via z8x36.h.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __Z8036_h
|
||||
#define __Z8036_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* macros */
|
||||
|
||||
#define Z8036( ptr ) ((volatile struct z8036_map *)(ptr))
|
||||
|
||||
#define Z8x36_STATE0 ( z8036 ) \
|
||||
{ /*char *garbage = *(Z8036(z8036))->???; */ }
|
||||
|
||||
|
||||
#define Z8x36_WRITE( z8036, reg, data ) \
|
||||
(Z8036(z8036))->reg = (data)
|
||||
|
||||
|
||||
#define Z8x36_READ( z8036, reg, data ) \
|
||||
(Z8036(z8036))->reg = (data)
|
||||
|
||||
/* structures */
|
||||
|
||||
struct z8036_map {
|
||||
/* MAIN CONTROL REGISTERS (0x00-0x07) */
|
||||
rtems_unsigned8 MASTER_INTR; /* Master Interrupt Ctl Reg */
|
||||
rtems_unsigned8 MASTER_CFG; /* Master Configuration Ctl Reg */
|
||||
rtems_unsigned8 PORTA_VECTOR; /* Port A - Interrupt Vector */
|
||||
rtems_unsigned8 PORTB_VECTOR; /* Port B - Interrupt Vector */
|
||||
rtems_unsigned8 CNT_TMR_VECTOR; /* Counter/Timer Interrupt Vector */
|
||||
rtems_unsigned8 PORTC_DATA_POLARITY; /* Port C - Data Path Polarity */
|
||||
rtems_unsigned8 PORTC_DIRECTION; /* Port C - Data Direction */
|
||||
rtems_unsigned8 PORTC_SPECIAL_IO_CTL; /* Port C - Special IO Control */
|
||||
/* MOST OFTEN ACCESSED REGISTERS (0x08 - 0x0f) */
|
||||
rtems_unsigned8 PORTA_CMD_STATUS; /* Port A - Command Status Reg */
|
||||
rtems_unsigned8 PORTB_CMD_STATUS; /* Port B - Command Status Reg */
|
||||
rtems_unsigned8 CT1_CMD_STATUS; /* Ctr/Timer 1 - Command Status Reg */
|
||||
rtems_unsigned8 CT2_CMD_STATUS; /* Ctr/Timer 2 - Command Status Reg */
|
||||
rtems_unsigned8 CT3_CMD_STATUS; /* Ctr/Timer 3 - Command Status Reg */
|
||||
rtems_unsigned8 PORTA_DATA; /* Port A - Data */
|
||||
rtems_unsigned8 PORTB_DATA; /* Port B - Data */
|
||||
rtems_unsigned8 PORTC_DATA; /* Port C - Data */
|
||||
/* COUNTER/TIMER RELATED REGISTERS (0x10-0x1f) */
|
||||
rtems_unsigned8 CT1_CUR_CNT_MSB; /* Ctr/Timer 1 - Current Count (MSB) */
|
||||
rtems_unsigned8 CT1_CUR_CNT_LSB; /* Ctr/Timer 1 - Current Count (LSB) */
|
||||
rtems_unsigned8 CT2_CUR_CNT_MSB; /* Ctr/Timer 2 - Current Count (MSB) */
|
||||
rtems_unsigned8 CT2_CUR_CNT_LSB; /* Ctr/Timer 2 - Current Count (LSB) */
|
||||
rtems_unsigned8 CT3_CUR_CNT_MSB; /* Ctr/Timer 3 - Current Count (MSB) */
|
||||
rtems_unsigned8 CT3_CUR_CNT_LSB; /* Ctr/Timer 3 - Current Count (LSB) */
|
||||
rtems_unsigned8 CT1_TIME_CONST_MSB; /* Ctr/Timer 1 - Time Constant (MSB) */
|
||||
rtems_unsigned8 CT1_TIME_CONST_LSB; /* Ctr/Timer 1 - Time Constant (LSB) */
|
||||
rtems_unsigned8 CT2_TIME_CONST_MSB; /* Ctr/Timer 2 - Time Constant (MSB) */
|
||||
rtems_unsigned8 CT2_TIME_CONST_LSB; /* Ctr/Timer 2 - Time Constant (LSB) */
|
||||
rtems_unsigned8 CT3_TIME_CONST_MSB; /* Ctr/Timer 3 - Time Constant (MSB) */
|
||||
rtems_unsigned8 CT3_TIME_CONST_LSB; /* Ctr/Timer 3 - Time Constant (LSB) */
|
||||
rtems_unsigned8 CT1_MODE_SPEC; /* Ctr/Timer 1 - Mode Specification */
|
||||
rtems_unsigned8 CT2_MODE_SPEC; /* Ctr/Timer 2 - Mode Specification */
|
||||
rtems_unsigned8 CT3_MODE_SPEC; /* Ctr/Timer 3 - Mode Specification */
|
||||
rtems_unsigned8 CURRENT_VECTOR; /* Current Vector */
|
||||
/* PORT A SPECIFICATION REGISTERS (0x20 -0x27) */
|
||||
rtems_unsigned8 PORTA_MODE; /* Port A - Mode Specification */
|
||||
rtems_unsigned8 PORTA_HANDSHAKE; /* Port A - Handshake Specification */
|
||||
rtems_unsigned8 PORTA_DATA_POLARITY; /* Port A - Data Path Polarity */
|
||||
rtems_unsigned8 PORTA_DIRECTION; /* Port A - Data Direction */
|
||||
rtems_unsigned8 PORTA_SPECIAL_IO_CTL; /* Port A - Special IO Control */
|
||||
rtems_unsigned8 PORTA_PATT_POLARITY; /* Port A - Pattern Polarity */
|
||||
rtems_unsigned8 PORTA_PATT_TRANS; /* Port A - Pattern Transition */
|
||||
rtems_unsigned8 PORTA_PATT_MASK; /* Port A - Pattern Mask */
|
||||
/* PORT B SPECIFICATION REGISTERS (0x28-0x2f) */
|
||||
rtems_unsigned8 PORTB_MODE; /* Port B - Mode Specification */
|
||||
rtems_unsigned8 PORTB_HANDSHAKE; /* Port B - Handshake Specification */
|
||||
rtems_unsigned8 PORTB_DATA_POLARITY; /* Port B - Data Path Polarity */
|
||||
rtems_unsigned8 PORTB_DIRECTION; /* Port B - Data Direction */
|
||||
rtems_unsigned8 PORTB_SPECIAL_IO_CTL; /* Port B - Special IO Control */
|
||||
rtems_unsigned8 PORTB_PATT_POLARITY; /* Port B - Pattern Polarity */
|
||||
rtems_unsigned8 PORTB_PATT_TRANS; /* Port B - Pattern Transition */
|
||||
rtems_unsigned8 PORTB_PATT_MASK; /* Port B - Pattern Mask */
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
/* z8530.h
|
||||
*
|
||||
* This include file defines information related to a Zilog Z8530
|
||||
* SCC Chip. It is a IO mapped part.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __Z8530_h
|
||||
#define __Z8530_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* macros */
|
||||
|
||||
#define VOL8( ptr ) ((volatile rtems_unsigned8 *)(ptr))
|
||||
|
||||
#define Z8x30_STATE0 ( z8530 ) \
|
||||
{ char *garbage; \
|
||||
(garbage) = *(VOL8(z8530)) \
|
||||
}
|
||||
|
||||
#define Z8x30_WRITE_CONTROL( z8530, reg, data ) \
|
||||
*(VOL8(z8530)) = (reg); \
|
||||
*(VOL8(z8530)) = (data)
|
||||
|
||||
#define Z8x30_READ_CONTROL( z8530, reg, data ) \
|
||||
*(VOL8(z8530)) = (reg); \
|
||||
(data) = *(VOL8(z8530))
|
||||
|
||||
#define Z8x30_WRITE_DATA( z8530, data ) \
|
||||
*(VOL8(z8530)) = (data);
|
||||
|
||||
#define Z8x30_READ_DATA( z8530, data ) \
|
||||
(data) = *(VOL8(z8530));
|
||||
|
||||
|
||||
/* RR_0 Bit Definitions */
|
||||
|
||||
#define RR_0_TX_BUFFER_EMPTY 0x04
|
||||
#define RR_0_RX_DATA_AVAILABLE 0x01
|
||||
|
||||
/* read registers */
|
||||
|
||||
#define RR_0 0x00
|
||||
#define RR_1 0x01
|
||||
#define RR_2 0x02
|
||||
#define RR_3 0x03
|
||||
#define RR_4 0x04
|
||||
#define RR_5 0x05
|
||||
#define RR_6 0x06
|
||||
#define RR_7 0x07
|
||||
#define RR_8 0x08
|
||||
#define RR_9 0x09
|
||||
#define RR_10 0x0A
|
||||
#define RR_11 0x0B
|
||||
#define RR_12 0x0C
|
||||
#define RR_13 0x0D
|
||||
#define RR_14 0x0E
|
||||
#define RR_15 0x0F
|
||||
|
||||
/* write registers */
|
||||
|
||||
#define WR_0 0x00
|
||||
#define WR_1 0x01
|
||||
#define WR_2 0x02
|
||||
#define WR_3 0x03
|
||||
#define WR_4 0x04
|
||||
#define WR_5 0x05
|
||||
#define WR_6 0x06
|
||||
#define WR_7 0x07
|
||||
#define WR_8 0x08
|
||||
#define WR_9 0x09
|
||||
#define WR_10 0x0A
|
||||
#define WR_11 0x0B
|
||||
#define WR_12 0x0C
|
||||
#define WR_13 0x0D
|
||||
#define WR_14 0x0E
|
||||
#define WR_15 0x0F
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,111 +0,0 @@
|
||||
/* z8536.h
|
||||
*
|
||||
* This include file defines information related to a Zilog Z8536
|
||||
* Counter/Timer/IO Chip. It is a IO mapped part.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* NOTE: This file shares as much as possible with the include
|
||||
* file for the Z8036 via z8x36.h.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __Z8536_h
|
||||
#define __Z8536_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* macros */
|
||||
|
||||
#define VOL8( ptr ) ((volatile rtems_unsigned8 *)(ptr))
|
||||
|
||||
#define Z8x36_STATE0 ( z8536 ) \
|
||||
{ char *garbage; \
|
||||
(garbage) = *(VOL8(z8536+0xC)) \
|
||||
}
|
||||
|
||||
#define Z8x36_WRITE( z8536, reg, data ) \
|
||||
*(VOL8(z8536+0xC)) = (reg); \
|
||||
*(VOL8(z8536+0xC)) = (data)
|
||||
|
||||
#define Z8x36_READ( z8536, reg, data ) \
|
||||
*(VOL8(z8536+0xC)) = (reg); \
|
||||
(data) = *(VOL8(z8536+0xC))
|
||||
|
||||
/* structures */
|
||||
|
||||
/* MAIN CONTROL REGISTERS (0x00-0x07) */
|
||||
#define MASTER_INTR 0x00 /* Master Interrupt Ctl Reg */
|
||||
#define MASTER_CFG 0x01 /* Master Configuration Ctl Reg */
|
||||
#define PORTA_VECTOR 0x02 /* Port A - Interrupt Vector */
|
||||
#define PORTB_VECTOR 0x03 /* Port B - Interrupt Vector */
|
||||
#define CNT_TMR_VECTOR 0x04 /* Counter/Timer Interrupt Vector */
|
||||
#define PORTC_DATA_POLARITY 0x05 /* Port C - Data Path Polarity */
|
||||
#define PORTC_DIRECTION 0x06 /* Port C - Data Direction */
|
||||
#define PORTC_SPECIAL_IO_CTL 0x07 /* Port C - Special IO Control */
|
||||
|
||||
/* MOST OFTEN ACCESSED REGISTERS (0x08 - 0x0f) */
|
||||
#define PORTA_CMD_STATUS 0x08 /* Port A - Command Status Reg */
|
||||
#define PORTB_CMD_STATUS 0x09 /* Port B - Command Status Reg */
|
||||
#define CT1_CMD_STATUS 0x0a /* Ctr/Timer 1 - Command Status Reg */
|
||||
#define CT2_CMD_STATUS 0x0b /* Ctr/Timer 2 - Command Status Reg */
|
||||
#define CT3_CMD_STATUS 0x0c /* Ctr/Timer 3 - Command Status Reg */
|
||||
#define PORTA_DATA 0x0d /* Port A - Data */
|
||||
#define PORTB_DATA 0x0e /* Port B - Data */
|
||||
#define PORTC_DATA 0x0f /* Port C - Data */
|
||||
|
||||
/* COUNTER/TIMER RELATED REGISTERS (0x10-0x1f) */
|
||||
#define CT1_CUR_CNT_MSB 0x10 /* Ctr/Timer 1 - Current Count (MSB) */
|
||||
#define CT1_CUR_CNT_LSB 0x11 /* Ctr/Timer 1 - Current Count (LSB) */
|
||||
#define CT2_CUR_CNT_MSB 0x12 /* Ctr/Timer 2 - Current Count (MSB) */
|
||||
#define CT2_CUR_CNT_LSB 0x13 /* Ctr/Timer 2 - Current Count (LSB) */
|
||||
#define CT3_CUR_CNT_MSB 0x14 /* Ctr/Timer 3 - Current Count (MSB) */
|
||||
#define CT3_CUR_CNT_LSB 0x15 /* Ctr/Timer 3 - Current Count (LSB) */
|
||||
#define CT1_TIME_CONST_MSB 0x16 /* Ctr/Timer 1 - Time Constant (MSB) */
|
||||
#define CT1_TIME_CONST_LSB 0x17 /* Ctr/Timer 1 - Time Constant (LSB) */
|
||||
#define CT2_TIME_CONST_MSB 0x18 /* Ctr/Timer 2 - Time Constant (MSB) */
|
||||
#define CT2_TIME_CONST_LSB 0x19 /* Ctr/Timer 2 - Time Constant (LSB) */
|
||||
#define CT3_TIME_CONST_MSB 0x1a /* Ctr/Timer 3 - Time Constant (MSB) */
|
||||
#define CT3_TIME_CONST_LSB 0x1b /* Ctr/Timer 3 - Time Constant (LSB) */
|
||||
#define CT1_MODE_SPEC 0x1c /* Ctr/Timer 1 - Mode Specification */
|
||||
#define CT2_MODE_SPEC 0x1d /* Ctr/Timer 2 - Mode Specification */
|
||||
#define CT3_MODE_SPEC 0x1e /* Ctr/Timer 3 - Mode Specification */
|
||||
#define CURRENT_VECTOR 0x1f /* Current Vector */
|
||||
|
||||
/* PORT A SPECIFICATION REGISTERS (0x20 -0x27) */
|
||||
#define PORTA_MODE 0x20 /* Port A - Mode Specification */
|
||||
#define PORTA_HANDSHAKE 0x21 /* Port A - Handshake Specification */
|
||||
#define PORTA_DATA_POLARITY 0x22 /* Port A - Data Path Polarity */
|
||||
#define PORTA_DIRECTION 0x23 /* Port A - Data Direction */
|
||||
#define PORTA_SPECIAL_IO_CTL 0x24 /* Port A - Special IO Control */
|
||||
#define PORTA_PATT_POLARITY 0x25 /* Port A - Pattern Polarity */
|
||||
#define PORTA_PATT_TRANS 0x26 /* Port A - Pattern Transition */
|
||||
#define PORTA_PATT_MASK 0x27 /* Port A - Pattern Mask */
|
||||
|
||||
/* PORT B SPECIFICATION REGISTERS (0x28-0x2f) */
|
||||
#define PORTB_MODE 0x28 /* Port B - Mode Specification */
|
||||
#define PORTB_HANDSHAKE 0x29 /* Port B - Handshake Specification */
|
||||
#define PORTB_DATA_POLARITY 0x2a /* Port B - Data Path Polarity */
|
||||
#define PORTB_DIRECTION 0x2b /* Port B - Data Direction */
|
||||
#define PORTB_SPECIAL_IO_CTL 0x2c /* Port B - Special IO Control */
|
||||
#define PORTB_PATT_POLARITY 0x2d /* Port B - Pattern Polarity */
|
||||
#define PORTB_PATT_TRANS 0x2e /* Port B - Pattern Transition */
|
||||
#define PORTB_PATT_MASK 0x2f /* Port B - Pattern Mask */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,6 +0,0 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
config.h
|
||||
config.h.in
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
@@ -1,23 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
This is a list of cases to consider when implementing a file system:
|
||||
|
||||
|
||||
+ Given a tree of this form:
|
||||
|
||||
a ----- b
|
||||
/
|
||||
c
|
||||
|
||||
Where a and b are directories and c is a link to directory b. Consider
|
||||
this sequence:
|
||||
|
||||
- rmdir a/b
|
||||
- mknod c/b/x
|
||||
- unlink c
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
include $(top_srcdir)/../../../automake/multilib.am
|
||||
include $(top_srcdir)/../../../automake/compile.am
|
||||
include $(top_srcdir)/../../../automake/lib.am
|
||||
|
||||
LIBNAME = libcsupport
|
||||
LIB = ${ARCH}/${LIBNAME}.a
|
||||
|
||||
INCLUDES = -I.
|
||||
|
||||
ERROR_C_FILES = error.c
|
||||
|
||||
ASSOCIATION_C_FILES = assoc.c assocnamebad.c
|
||||
|
||||
BASE_FS_C_FILES = base_fs.c mount.c unmount.c libio.c \
|
||||
libio_sockets.c eval.c fs_null_handlers.c privateenv.c
|
||||
|
||||
TERMIOS_C_FILES = cfgetispeed.c cfgetospeed.c cfsetispeed.c cfsetospeed.c \
|
||||
tcgetattr.c tcsetattr.c tcdrain.c tcflow.c tcflush.c tcgetprgrp.c \
|
||||
tcsendbreak.c tcsetpgrp.c termios.c termiosinitialize.c \
|
||||
termiosreserveresources.c
|
||||
|
||||
SYSTEM_CALL_C_FILES = open.c close.c read.c write.c lseek.c ioctl.c mkdir.c \
|
||||
mknod.c mkfifo.c rmdir.c chdir.c chmod.c fchdir.c fchmod.c chown.c \
|
||||
link.c unlink.c umask.c ftruncate.c utime.c fstat.c fcntl.c fpathconf.c \
|
||||
getdents.c fsync.c fdatasync.c pipe.c dup.c dup2.c symlink.c readlink.c \
|
||||
creat.c chroot.c
|
||||
|
||||
DIRECTORY_SCAN_C_FILES = opendir.c closedir.c readdir.c rewinddir.c \
|
||||
scandir.c seekdir.c telldir.c getcwd.c
|
||||
|
||||
MALLOC_C_FILES = malloc.c mallocfreespace.c __brk.c __sbrk.c
|
||||
|
||||
ENVIRON_C_FILES =
|
||||
|
||||
PASSWORD_GROUP_C_FILES = getpwent.c getgrent.c
|
||||
|
||||
TERMINAL_IDENTIFICATION_C_FILES = ctermid.c isatty.c ttyname.c ttyname_r.c
|
||||
|
||||
LIBC_GLUE_C_FILES = __getpid.c __gettod.c __times.c truncate.c access.c \
|
||||
stat.c lstat.c pathconf.c envlock.c newlibc.c no_posix.c no_libc.c \
|
||||
utsname.c
|
||||
|
||||
UNIX_LIBC_C_FILES = unixlibc.c hosterr.c
|
||||
|
||||
COMMON_C_FILES = gxx_wrappers.c printk.c $(BASE_FS_C_FILES) \
|
||||
$(MALLOC_C_FILES) $(ENVIRON_C_FILES) $(TERMIOS_C_FILES) $(ERROR_C_FILES) \
|
||||
$(ASSOCIATION_C_FILES)
|
||||
|
||||
UNIX_C_FILES = $(UNIX_LIBC_C_FILES)
|
||||
|
||||
EMBEDDED_C_FILES = $(LIBC_GLUE_C_FILES) $(PASSWORD_GROUP_C_FILES) \
|
||||
$(TERMINAL_IDENTIFICATION_C_FILES) $(SYSTEM_CALL_C_FILES) \
|
||||
$(DIRECTORY_SCAN_C_FILES)
|
||||
|
||||
if UNIX
|
||||
C_FILES = $(COMMON_C_FILES) $(UNIX_C_FILES)
|
||||
else
|
||||
C_FILES = $(COMMON_C_FILES) $(EMBEDDED_C_FILES)
|
||||
endif
|
||||
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
|
||||
|
||||
TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib$(MULTISUBDIR)/$(LIBNAME)$(LIB_VARIANT).a
|
||||
|
||||
OBJS = $(C_O_FILES)
|
||||
|
||||
#
|
||||
# Add local stuff here using +=
|
||||
#
|
||||
|
||||
AM_CFLAGS += $(LIBC_DEFINES)
|
||||
|
||||
all-local: ${ARCH} $(TMPINSTALL_FILES)
|
||||
|
||||
$(LIB): ${OBJS}
|
||||
$(make-library)
|
||||
|
||||
$(PROJECT_RELEASE)/lib$(MULTISUBDIR)/$(LIBNAME)$(LIB_VARIANT).a: $(LIB)
|
||||
$(INSTALL_DATA) $< $@
|
||||
|
||||
DOC_FILES = TODO CASES
|
||||
|
||||
EXTRA_DIST = $(DOC_FILES) $(COMMON_C_FILES) $(EMBEDDED_C_FILES) \
|
||||
$(UNIX_C_FILES)
|
||||
|
||||
include $(top_srcdir)/../../../automake/local.am
|
||||
@@ -1,37 +0,0 @@
|
||||
--
|
||||
-- $Id$
|
||||
--
|
||||
|
||||
Overview of newlib support (newlib is from CYGNUS)
|
||||
Each task can have its own libc state including:
|
||||
open stdio files
|
||||
strtok
|
||||
multi precision arithmetic state
|
||||
etc.
|
||||
|
||||
This is implemented by a reentrancy data structure for each task.
|
||||
|
||||
When a task is "started" (in RTEMS sense) the reentrancy structure
|
||||
is allocated. Its address is stored in notepad[NOTEPAD_LAST].
|
||||
|
||||
When task is switched to, the value of global variable _impure_ptr
|
||||
is changed to the value of the new tasks reentrancy structure.
|
||||
|
||||
When a task is deleted
|
||||
atexit() processing (for that task) happens
|
||||
task's stdio buffers are flushed
|
||||
|
||||
When exit(3) is called
|
||||
calling task's atexit processing done
|
||||
global libc state atexit processing done
|
||||
(this will include any atexit routines installed by drivers)
|
||||
executive is shutdown
|
||||
causes a context switch back to bsp land
|
||||
|
||||
|
||||
NOTE:
|
||||
libc extension are installed by bsp_libc_init()
|
||||
iff we are using clock interrupts.
|
||||
This hack is necessary to allow the tmtests to avoid
|
||||
timing the extensions.
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
+ newlib 1.8.0 has the wrong prototype for at least read() and write().
|
||||
|
||||
+ There should be a "eat it" stub for all system calls which are
|
||||
available to make filling out an operations table easier.
|
||||
See device_lseek() for an example of where this would be nice.
|
||||
|
||||
+ Fix strerror() so it prints all error numbers.
|
||||
|
||||
+ Check the node allocation coment in the fchdir call.
|
||||
+ Add an interface somewhere for this call.
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* RTEMS "Broken" __brk Implementation
|
||||
*
|
||||
* NOTE: sbrk() is provided by each BSP.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if !defined(RTEMS_UNIX)
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
int __brk(
|
||||
const void *endds
|
||||
)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* Some C Libraries reference this routine since they think getpid is
|
||||
* a real system call.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
pid_t __getpid(void)
|
||||
{
|
||||
return getpid();
|
||||
}
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* gettimeofday() - SVR4 and BSD4.3 extension required by Newlib
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#if !defined(RTEMS_UNIX)
|
||||
#ifdef RTEMS_NEWLIB
|
||||
#include <sys/reent.h>
|
||||
#endif
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* Seconds from January 1, 1970 to January 1, 1988. Used to account for
|
||||
* differences between POSIX API and RTEMS core.
|
||||
*/
|
||||
|
||||
#define POSIX_TIME_SECONDS_1970_THROUGH_1988 \
|
||||
(((1987 - 1970 + 1) * TOD_SECONDS_PER_NON_LEAP_YEAR) + \
|
||||
(4 * TOD_SECONDS_PER_DAY))
|
||||
|
||||
/*
|
||||
* NOTE: The solaris gettimeofday does not have a second parameter.
|
||||
*/
|
||||
|
||||
int gettimeofday(
|
||||
struct timeval *tp,
|
||||
struct timezone *tzp
|
||||
)
|
||||
{
|
||||
rtems_interrupt_level level;
|
||||
rtems_unsigned32 seconds;
|
||||
rtems_unsigned32 microseconds;
|
||||
|
||||
if ( !tp ) {
|
||||
errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* POSIX does not seem to allow for not having a TOD so we just
|
||||
* grab the time of day.
|
||||
*
|
||||
* NOTE: XXX this routine should really be in the executive proper.
|
||||
*/
|
||||
|
||||
rtems_interrupt_disable(level);
|
||||
seconds = _TOD_Seconds_since_epoch;
|
||||
microseconds = _TOD_Current.ticks;
|
||||
rtems_interrupt_enable(level);
|
||||
|
||||
tp->tv_sec = seconds + POSIX_TIME_SECONDS_1970_THROUGH_1988;
|
||||
tp->tv_usec = microseconds * _TOD_Microseconds_per_tick;
|
||||
|
||||
/*
|
||||
* newlib does not have timezone and daylight savings time
|
||||
* yet. When it does this needs to be fixed.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
if ( tzp ) {
|
||||
tzp->tz_minuteswest = 0; /* at UTC */
|
||||
tzp->tz_dsttime = 0; /* no daylight savings */
|
||||
tzp->minuteswest = timezone / 60; /* from seconds to minutes */
|
||||
tzp->dsttime = daylight;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
/*
|
||||
* "Reentrant" version
|
||||
*/
|
||||
|
||||
int _gettimeofday_r(
|
||||
struct _reent *ignored_reentrancy_stuff,
|
||||
struct timeval *tp,
|
||||
struct timezone *tzp
|
||||
)
|
||||
{
|
||||
return gettimeofday( tp, tzp );
|
||||
}
|
||||
|
||||
/*
|
||||
* "System call" version
|
||||
*/
|
||||
|
||||
int _gettimeofday(
|
||||
struct timeval *tp,
|
||||
struct timezone *tzp
|
||||
)
|
||||
{
|
||||
return gettimeofday( tp, tzp );
|
||||
}
|
||||
|
||||
#endif /* defined(RTEMS_NEWLIB) */
|
||||
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* RTEMS "Broken" __sbrk Implementation
|
||||
*
|
||||
* NOTE: sbrk is provided by the BSP.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if !defined(RTEMS_UNIX)
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
void * __sbrk(
|
||||
int incr
|
||||
)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return (void *)0;
|
||||
}
|
||||
#endif
|
||||
@@ -1,89 +0,0 @@
|
||||
/*
|
||||
* times() - POSIX 1003.1b 4.5.2 - Get Process Times
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#include <sys/times.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
|
||||
clock_t _times(
|
||||
struct tms *ptms
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
rtems_interval ticks;
|
||||
|
||||
if ( !ptms ) {
|
||||
errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* "POSIX" does not seem to allow for not having a TOD */
|
||||
status = rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &ticks );
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
assert( 0 );
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* RTEMS has no notion of system versus user time and although
|
||||
* a way to keep track of per task CPU usage was added since
|
||||
* 3.6.0, this routine does not utilize it yet.
|
||||
*/
|
||||
|
||||
ptms->tms_utime = ticks;
|
||||
ptms->tms_stime = 0;
|
||||
ptms->tms_cutime = 0;
|
||||
ptms->tms_cstime = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* times()
|
||||
*
|
||||
* times() system call wrapper for _times() above.
|
||||
*/
|
||||
|
||||
clock_t times(
|
||||
struct tms *ptms
|
||||
)
|
||||
{
|
||||
return _times( ptms );
|
||||
}
|
||||
|
||||
/*
|
||||
* _times_r
|
||||
*
|
||||
* This is the Newlib dependent reentrant version of times().
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <reent.h>
|
||||
|
||||
clock_t _times_r(
|
||||
struct _reent *ptr,
|
||||
struct tms *ptms
|
||||
)
|
||||
{
|
||||
return _times( ptms );
|
||||
}
|
||||
#endif
|
||||
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* access() - POSIX 1003.1b 5.6.3 - File Accessibility
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
int access(
|
||||
const char *path,
|
||||
int amode
|
||||
)
|
||||
{
|
||||
struct stat statbuf;
|
||||
|
||||
if ( stat(path, &statbuf) )
|
||||
return -1;
|
||||
|
||||
if ( amode & R_OK ) {
|
||||
if (!( statbuf.st_mode & S_IREAD ))
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( amode & W_OK ) {
|
||||
if ( !( statbuf.st_mode & S_IWRITE ) )
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( amode & X_OK ) {
|
||||
if ( !( statbuf.st_mode & S_IEXEC ) )
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,254 +0,0 @@
|
||||
/*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/assoc.h>
|
||||
|
||||
#include <string.h> /* strcat, strcmp */
|
||||
|
||||
#define STREQ(a,b) (strcmp((a), (b)) == 0)
|
||||
#define rtems_assoc_is_default(ap) ((ap)->name && STREQ(ap->name, RTEMS_ASSOC_DEFAULT_NAME))
|
||||
|
||||
const rtems_assoc_t *
|
||||
rtems_assoc_ptr_by_name(
|
||||
const rtems_assoc_t *ap,
|
||||
const char *name
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *default_ap = 0;
|
||||
|
||||
if (rtems_assoc_is_default(ap))
|
||||
default_ap = ap++;
|
||||
|
||||
for ( ; ap->name; ap++)
|
||||
if (strcmp(ap->name, name) == 0)
|
||||
return ap;
|
||||
|
||||
return default_ap;
|
||||
}
|
||||
|
||||
const rtems_assoc_t *
|
||||
rtems_assoc_ptr_by_local(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 local_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *default_ap = 0;
|
||||
|
||||
if (rtems_assoc_is_default(ap))
|
||||
default_ap = ap++;
|
||||
|
||||
for ( ; ap->name; ap++)
|
||||
if (ap->local_value == local_value)
|
||||
return ap;
|
||||
|
||||
return default_ap;
|
||||
}
|
||||
|
||||
|
||||
const rtems_assoc_t *
|
||||
rtems_assoc_ptr_by_remote(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 remote_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *default_ap = 0;
|
||||
|
||||
if (rtems_assoc_is_default(ap))
|
||||
default_ap = ap++;
|
||||
|
||||
for ( ; ap->name; ap++)
|
||||
if (ap->remote_value == remote_value)
|
||||
return ap;
|
||||
|
||||
return default_ap;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get values
|
||||
*/
|
||||
|
||||
unsigned32
|
||||
rtems_assoc_remote_by_local(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 local_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_local(ap, local_value);
|
||||
if (nap)
|
||||
return nap->remote_value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned32
|
||||
rtems_assoc_local_by_remote(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 remote_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_remote(ap, remote_value);
|
||||
if (nap)
|
||||
return nap->local_value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned32
|
||||
rtems_assoc_remote_by_name(
|
||||
const rtems_assoc_t *ap,
|
||||
const char *name
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_name(ap, name);
|
||||
if (nap)
|
||||
return nap->remote_value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned32
|
||||
rtems_assoc_local_by_name(
|
||||
const rtems_assoc_t *ap,
|
||||
const char *name
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_name(ap, name);
|
||||
if (nap)
|
||||
return nap->local_value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* what to return if a value is not found
|
||||
* this is not reentrant, but it really shouldn't be invoked anyway
|
||||
*/
|
||||
|
||||
const char *rtems_assoc_name_bad(
|
||||
unsigned32 bad_value
|
||||
);
|
||||
|
||||
/* body in separate file to reduce dependency on printf */
|
||||
|
||||
|
||||
const char *
|
||||
rtems_assoc_name_by_local(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 local_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_local(ap, local_value);
|
||||
if (nap)
|
||||
return nap->name;
|
||||
|
||||
return rtems_assoc_name_bad(local_value);
|
||||
}
|
||||
|
||||
const char *
|
||||
rtems_assoc_name_by_remote(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 remote_value
|
||||
)
|
||||
{
|
||||
const rtems_assoc_t *nap;
|
||||
nap = rtems_assoc_ptr_by_remote(ap, remote_value);
|
||||
if (nap)
|
||||
return nap->name;
|
||||
|
||||
return rtems_assoc_name_bad(remote_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitfield functions assume just 1 bit set in each of remote and local
|
||||
* entries; they do not check for this.
|
||||
*/
|
||||
|
||||
unsigned32 rtems_assoc_remote_by_local_bitfield(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 local_value
|
||||
)
|
||||
{
|
||||
unsigned32 b;
|
||||
unsigned32 remote_value = 0;
|
||||
|
||||
for (b = 1; b; b <<= 1)
|
||||
if (b & local_value)
|
||||
remote_value |= rtems_assoc_remote_by_local(ap, b);
|
||||
|
||||
return remote_value;
|
||||
}
|
||||
|
||||
|
||||
unsigned32 rtems_assoc_local_by_remote_bitfield(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 remote_value
|
||||
)
|
||||
{
|
||||
unsigned32 b;
|
||||
unsigned32 local_value = 0;
|
||||
|
||||
for (b = 1; b; b <<= 1)
|
||||
if (b & remote_value)
|
||||
local_value |= rtems_assoc_local_by_remote(ap, b);
|
||||
|
||||
return local_value;
|
||||
}
|
||||
|
||||
char *
|
||||
rtems_assoc_name_by_remote_bitfield(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 value,
|
||||
char *buffer
|
||||
)
|
||||
{
|
||||
unsigned32 b;
|
||||
|
||||
*buffer = 0;
|
||||
|
||||
for (b = 1; b; b <<= 1)
|
||||
if (b & value)
|
||||
{
|
||||
if (*buffer)
|
||||
strcat(buffer, " ");
|
||||
strcat(buffer, rtems_assoc_name_by_remote(ap, b));
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
char *
|
||||
rtems_assoc_name_by_local_bitfield(
|
||||
const rtems_assoc_t *ap,
|
||||
unsigned32 value,
|
||||
char *buffer
|
||||
)
|
||||
{
|
||||
unsigned32 b;
|
||||
|
||||
*buffer = 0;
|
||||
|
||||
for (b = 1; b; b <<= 1)
|
||||
if (b & value)
|
||||
{
|
||||
if (*buffer)
|
||||
strcat(buffer, " ");
|
||||
strcat(buffer, rtems_assoc_name_by_local(ap, b));
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/assoc.h>
|
||||
|
||||
#include <stdio.h> /* sprintf */
|
||||
#include <string.h> /* strcat, strcmp */
|
||||
|
||||
#define STREQ(a,b) (strcmp((a), (b)) == 0)
|
||||
#define rtems_assoc_is_default(ap) ((ap)->name && STREQ(ap->name, RTEMS_ASSOC_DEFAULT_NAME))
|
||||
|
||||
/*
|
||||
* what to return if a value is not found
|
||||
* this is not reentrant, but it really shouldn't be invoked anyway
|
||||
*/
|
||||
|
||||
const char *
|
||||
rtems_assoc_name_bad(
|
||||
unsigned32 bad_value
|
||||
)
|
||||
{
|
||||
#ifdef RTEMS_DEBUG
|
||||
static char bad_buffer[32];
|
||||
|
||||
sprintf(bad_buffer, "< %d [0x%x] >", bad_value, bad_value);
|
||||
#else
|
||||
static char bad_buffer[32] = "<assoc.c: BAD NAME>";
|
||||
#endif
|
||||
return bad_buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
/*
|
||||
* Base file system initialization
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
/*
|
||||
* Global information for the base file system.
|
||||
*/
|
||||
|
||||
rtems_user_env_t rtems_global_user_env;
|
||||
rtems_user_env_t * rtems_current_user_env = &rtems_global_user_env;
|
||||
|
||||
/*
|
||||
* Default mode for created files.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* rtems_filesystem_initialize
|
||||
*
|
||||
* Initialize the foundation of the file system. This is specified
|
||||
* by the structure rtems_filesystem_mount_table. The usual
|
||||
* configuration is a single instantiation of the IMFS or miniIMFS with
|
||||
* a single "/dev" directory in it.
|
||||
*/
|
||||
|
||||
void rtems_filesystem_initialize( void )
|
||||
{
|
||||
#if !defined(RTEMS_UNIX)
|
||||
#if 0
|
||||
int i;
|
||||
#endif
|
||||
int status;
|
||||
rtems_filesystem_mount_table_entry_t *entry;
|
||||
rtems_filesystem_mount_table_t *mt;
|
||||
|
||||
/*
|
||||
* Set the default umask to "022".
|
||||
*/
|
||||
|
||||
rtems_filesystem_umask = 022;
|
||||
|
||||
|
||||
init_fs_mount_table();
|
||||
|
||||
/*
|
||||
* mount the first filesystem.
|
||||
*/
|
||||
|
||||
if ( rtems_filesystem_mount_table_size == 0 )
|
||||
rtems_fatal_error_occurred( 0xABCD0001 );
|
||||
|
||||
mt = &rtems_filesystem_mount_table[0];
|
||||
|
||||
status = mount(
|
||||
&entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point );
|
||||
|
||||
if ( status == -1 )
|
||||
rtems_fatal_error_occurred( 0xABCD0002 );
|
||||
|
||||
rtems_filesystem_link_counts = 0;
|
||||
rtems_filesystem_root = entry->mt_fs_root;
|
||||
rtems_filesystem_current = rtems_filesystem_root;
|
||||
|
||||
|
||||
/*
|
||||
* Traditionally RTEMS devices are under "/dev" so install this directory.
|
||||
*
|
||||
* If the mkdir() fails, we can't print anything so just fatal error.
|
||||
*
|
||||
* NOTE: UNIX root is 755 and owned by root/root (0/0). It is actually
|
||||
* created that way by the IMFS.
|
||||
*/
|
||||
|
||||
status = mkdir( "/dev", 0777);
|
||||
if ( status != 0 )
|
||||
rtems_fatal_error_occurred( 0xABCD0003 );
|
||||
|
||||
/*
|
||||
* This code if if'ed 0 out because you can't mount another
|
||||
* filesystem properly until the mount point it will be
|
||||
* mounted onto is created. Moreover, if it is going to
|
||||
* use a device, then it is REALLY unfair to attempt this
|
||||
* before device drivers are initialized.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Now if there are other filesystems to mount, go for it.
|
||||
*/
|
||||
|
||||
for ( i=1 ; i < rtems_filesystem_mount_table_size ; i++ ) {
|
||||
mt = &rtems_filesystem_mount_table[0];
|
||||
|
||||
status = mount(
|
||||
&entry, mt->fs_ops, mt->fsoptions, mt->device, mt->mount_point );
|
||||
|
||||
if ( status == -1 )
|
||||
rtems_fatal_error_occurred( 0xABCD0003 );
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* cfgetispeed() - POSIX 1003.1b 7.1.3 - Baud Rate Functions
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
|
||||
speed_t cfgetispeed(
|
||||
const struct termios *tp
|
||||
)
|
||||
{
|
||||
return (tp->c_cflag / (CIBAUD / CBAUD)) & CBAUD;
|
||||
}
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* cfgetospeed() - POSIX 1003.1b 7.1.3 - Baud Rate Functions
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
|
||||
speed_t cfgetospeed(
|
||||
const struct termios *tp
|
||||
)
|
||||
{
|
||||
return tp->c_cflag & CBAUD;
|
||||
}
|
||||
#endif
|
||||
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* cfsetispeed() - POSIX 1003.1b 7.1.3 - Baud Rate Functions
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int cfsetispeed(
|
||||
struct termios *tp,
|
||||
speed_t speed
|
||||
)
|
||||
{
|
||||
if ( speed & ~CBAUD )
|
||||
rtems_set_errno_and_return_minus_one( EINVAL );
|
||||
|
||||
tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* cfsetospeed() - POSIX 1003.1b 7.1.3 - Baud Rate Functions
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int cfsetospeed(
|
||||
struct termios *tp,
|
||||
speed_t speed
|
||||
)
|
||||
{
|
||||
if ( speed & ~CBAUD )
|
||||
rtems_set_errno_and_return_minus_one( EINVAL );
|
||||
|
||||
tp->c_cflag = (tp->c_cflag & ~CBAUD) | speed;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* chdir() - POSIX 1003.1b - 5.2.1 - Change Current Working Directory
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int chdir(
|
||||
const char *pathname
|
||||
)
|
||||
{
|
||||
rtems_filesystem_location_info_t loc;
|
||||
int result;
|
||||
|
||||
/*
|
||||
* Get the node where we wish to go.
|
||||
*/
|
||||
|
||||
result = rtems_filesystem_evaluate_path(
|
||||
pathname, RTEMS_LIBIO_PERMS_SEARCH, &loc, TRUE );
|
||||
if ( result != 0 )
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* Verify you can change directory into this node.
|
||||
*/
|
||||
|
||||
if ( !loc.ops->node_type_h ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTDIR );
|
||||
}
|
||||
|
||||
rtems_filesystem_freenode( &rtems_filesystem_current );
|
||||
|
||||
rtems_filesystem_current = loc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* chmod() - POSIX 1003.1b 5.6.4 - Change File Modes
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int chmod(
|
||||
const char *path,
|
||||
mode_t mode
|
||||
)
|
||||
{
|
||||
int status;
|
||||
rtems_filesystem_location_info_t loc;
|
||||
int result;
|
||||
|
||||
status = rtems_filesystem_evaluate_path( path, 0, &loc, TRUE );
|
||||
if ( status != 0 )
|
||||
return -1;
|
||||
|
||||
if ( !loc.handlers ){
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_set_errno_and_return_minus_one( EBADF );
|
||||
}
|
||||
|
||||
if ( !loc.handlers->fchmod_h ){
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*loc.handlers->fchmod_h)( &loc, mode );
|
||||
|
||||
rtems_filesystem_freenode( &loc );
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* chown() - POSIX 1003.1b 5.6.5 - Change Owner and Group of a File
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int chown(
|
||||
const char *path,
|
||||
uid_t owner,
|
||||
gid_t group
|
||||
)
|
||||
{
|
||||
rtems_filesystem_location_info_t loc;
|
||||
int result;
|
||||
|
||||
if ( rtems_filesystem_evaluate_path( path, 0x00, &loc, TRUE ) )
|
||||
return -1;
|
||||
|
||||
if ( !loc.ops->chown_h ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*loc.ops->chown_h)( &loc, owner, group );
|
||||
|
||||
rtems_filesystem_freenode( &loc );
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* chroot() - Change Root Directory
|
||||
* Author: fernando.ruiz@ctv.es
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int chroot(
|
||||
const char *pathname
|
||||
)
|
||||
{
|
||||
int result;
|
||||
rtems_filesystem_location_info_t loc;
|
||||
|
||||
/* an automatic call to new private env the first time */
|
||||
if (rtems_current_user_env == &rtems_global_user_env) {
|
||||
rtems_libio_set_private_env(); /* try to set a new private env*/
|
||||
if (rtems_current_user_env == &rtems_global_user_env) /* not ok */
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
};
|
||||
|
||||
loc = rtems_filesystem_root; /* save the value */
|
||||
|
||||
result = chdir(pathname);
|
||||
if (result) {
|
||||
rtems_filesystem_root = loc; /* restore the value */
|
||||
rtems_set_errno_and_return_minus_one( errno );
|
||||
};
|
||||
rtems_filesystem_root = rtems_filesystem_current;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* close() - POSIX 1003.1b 6.3.1 - Close a File
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
int close(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
rtems_status_code rc;
|
||||
|
||||
rtems_libio_check_fd(fd);
|
||||
iop = rtems_libio_iop(fd);
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
rc = RTEMS_SUCCESSFUL;
|
||||
if ( iop->handlers->close_h )
|
||||
rc = (*iop->handlers->close_h)( iop );
|
||||
|
||||
rtems_filesystem_freenode( &iop->pathinfo );
|
||||
rtems_libio_free( iop );
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* _close_r
|
||||
*
|
||||
* This is the Newlib dependent reentrant version of close().
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <reent.h>
|
||||
|
||||
int _close_r(
|
||||
struct _reent *ptr,
|
||||
int fd
|
||||
)
|
||||
{
|
||||
return close( fd );
|
||||
}
|
||||
#endif
|
||||
@@ -1,74 +0,0 @@
|
||||
/*
|
||||
* closedir() - POSIX 1003.1b - XXX
|
||||
*
|
||||
* This was copied from Newlib 1.8.0.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1983 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)closedir.c 5.9 (Berkeley) 2/23/91";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
/*
|
||||
* close a directory.
|
||||
*/
|
||||
int
|
||||
closedir(dirp)
|
||||
register DIR *dirp;
|
||||
{
|
||||
int fd;
|
||||
|
||||
if ( !dirp )
|
||||
rtems_set_errno_and_return_minus_one( EBADF );
|
||||
|
||||
fd = dirp->dd_fd;
|
||||
dirp->dd_fd = -1;
|
||||
dirp->dd_loc = 0;
|
||||
(void)free((void *)dirp->dd_buf);
|
||||
(void)free((void *)dirp);
|
||||
return(close(fd));
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* creat() "system call" */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/* This is needed by f2c and therefore the SPEC benchmarks. */
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
int
|
||||
creat (const char *path, mode_t mode)
|
||||
{
|
||||
return open (path, O_WRONLY | O_CREAT | O_TRUNC, mode);
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* ctermid() - POSIX 1003.1b 4.7.1 - Generate Terminal Pathname
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
static char *ctermid_name = "/dev/console";
|
||||
|
||||
char *ctermid(
|
||||
char *s
|
||||
)
|
||||
{
|
||||
if ( !s )
|
||||
return ctermid_name;
|
||||
|
||||
strcpy( s, ctermid_name );
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* dup() - POSIX 1003.1b 6.2.1 Duplicate an Open File Descriptor
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
int dup(
|
||||
int fildes
|
||||
)
|
||||
{
|
||||
return fcntl( fildes, F_DUPFD, 0 );
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* dup2() - POSIX 1003.1b 6.2.1 Duplicate an Open File Descriptor
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
int dup2(
|
||||
int fildes,
|
||||
int fildes2
|
||||
)
|
||||
{
|
||||
int status;
|
||||
struct stat buf;
|
||||
|
||||
/*
|
||||
* If fildes is not valid, then fildes2 should not be closed.
|
||||
*/
|
||||
|
||||
status = fstat( fildes, &buf );
|
||||
if ( status == -1 )
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* If fildes2 is not valid, then we should not do anything either.
|
||||
*/
|
||||
|
||||
status = fstat( fildes2, &buf );
|
||||
if ( status == -1 )
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* This fcntl handles everything else.
|
||||
*/
|
||||
|
||||
return fcntl( fildes, F_DUPFD, fildes2 );
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Author: Till Straumann <strauman@slac.stanford.edu>, 3/2002
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* provide locking for the global environment 'environ' */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <sys/reent.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* NOTES:
|
||||
* - although it looks like a classical multiple-readers / single writer (MRSW)
|
||||
* locking problem, we still use a single lock for the following reasons:
|
||||
* 1) newlib has no provision / hook for calling different locking routines
|
||||
* from setenv/putenv and getenv, respectively.
|
||||
* 2) MRSW involves calling several semaphore-primitives, even in the most
|
||||
* likely case of a first-reader's access. This probably takes more CPU
|
||||
* time than just waiting until another reader is done; environment
|
||||
* access is fast.
|
||||
* - the lock implementation must allow nesting (same thread may call
|
||||
* lock-lock-unlock-unlock).
|
||||
* - NEWLIB-1.8.2 has an ugly BUG: if environ is NULL, _findenv_r() bails
|
||||
* out leaving the lock held :-(
|
||||
*
|
||||
* Used by the following functions:
|
||||
* findenv_r(), setenv_r(), and unsetenv_r() which are called by
|
||||
* getenv(), getenv_r(), setenv(), and unsetenv().
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(ENVLOCK_DEDIDCATED_MUTEX)
|
||||
static rtems_id envLock=0;
|
||||
|
||||
static void
|
||||
__rtems_envlock_init(void)
|
||||
{
|
||||
extern char **environ;
|
||||
rtems_status_code rc;
|
||||
|
||||
if (envLock) /* already initialized */
|
||||
return;
|
||||
|
||||
assert(environ && "MUST have non-NULL 'environ' due to newlib bug");
|
||||
|
||||
rc = rtems_semaphore_create(
|
||||
rtems_build_name('E','N','V','S'),
|
||||
1,
|
||||
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
|
||||
0,
|
||||
&envLock);
|
||||
if (RTEMS_SUCCESSFUL!=rc)
|
||||
rtems_fatal_error_occurred(rc);
|
||||
}
|
||||
|
||||
void
|
||||
__env_lock(struct _reent *r)
|
||||
{
|
||||
/* Do lazy init */
|
||||
if (!envLock)
|
||||
__rtems_envlock_init();
|
||||
/*
|
||||
* Must not use a semaphore before pre-tasking hook is called.
|
||||
* - it will corrupt memory :-(
|
||||
*/
|
||||
|
||||
if (_Thread_Executing)
|
||||
rtems_semaphore_obtain(envLock, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
|
||||
}
|
||||
|
||||
void
|
||||
__env_unlock(struct _reent *r)
|
||||
{
|
||||
/*
|
||||
* Must not use a semaphore before pre-tasking hook is called.
|
||||
* - it will corrupt memory :-(
|
||||
*/
|
||||
if (_Thread_Executing)
|
||||
rtems_semaphore_release(envLock);
|
||||
}
|
||||
#else
|
||||
|
||||
/*
|
||||
* Reuse the libio mutex -- it is always initialized before we
|
||||
* could possibly run.
|
||||
*/
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
void
|
||||
__env_lock(struct _reent *r)
|
||||
{
|
||||
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
|
||||
}
|
||||
|
||||
void
|
||||
__env_unlock(struct _reent *r)
|
||||
{
|
||||
rtems_semaphore_release( rtems_libio_semaphore );
|
||||
}
|
||||
#endif
|
||||
@@ -1,213 +0,0 @@
|
||||
/*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These routines provide general purpose error reporting.
|
||||
* rtems_error reports an error to stderr and allows use of
|
||||
* printf style formatting. A newline is appended to all messages.
|
||||
*
|
||||
* error_flag can be specified as any of the following:
|
||||
*
|
||||
* RTEMS_ERROR_ERRNO -- include errno text in output
|
||||
* RTEMS_ERROR_PANIC -- halts local system after output
|
||||
* RTEMS_ERROR_ABORT -- abort after output
|
||||
*
|
||||
* It can also include a rtems_status value which can be OR'd
|
||||
* with the above flags. *
|
||||
*
|
||||
* EXAMPLE
|
||||
* #include <rtems.h>
|
||||
* #include <rtems/error.h>
|
||||
* rtems_error(0, "stray interrupt %d", intr);
|
||||
*
|
||||
* EXAMPLE
|
||||
* if ((status = rtems_task_create(...)) != RTEMS_SUCCCESSFUL)
|
||||
* {
|
||||
* rtems_error(status | RTEMS_ERROR_ABORT,
|
||||
* "could not create task");
|
||||
* }
|
||||
*
|
||||
* EXAMPLE
|
||||
* if ((fd = open(pathname, O_RDNLY)) < 0)
|
||||
* {
|
||||
* rtems_error(RTEMS_ERROR_ERRNO, "open of '%s' failed", pathname);
|
||||
* goto failed;
|
||||
* }
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
#include <rtems.h>
|
||||
|
||||
#include <rtems/error.h>
|
||||
#include <rtems/assoc.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h> /* _exit() */
|
||||
|
||||
/* bug in hpux <errno.h>: no prototypes unless you are C++ */
|
||||
#ifdef hpux9
|
||||
char *strerror(int);
|
||||
#endif
|
||||
|
||||
extern char *rtems_progname;
|
||||
int rtems_panic_in_progress;
|
||||
|
||||
rtems_assoc_t rtems_status_assoc[] = {
|
||||
{ "successful completion", RTEMS_SUCCESSFUL, },
|
||||
{ "returned from a thread", RTEMS_TASK_EXITTED, },
|
||||
{ "multiprocessing not configured", RTEMS_MP_NOT_CONFIGURED, },
|
||||
{ "invalid object name", RTEMS_INVALID_NAME, },
|
||||
{ "invalid object id", RTEMS_INVALID_ID, },
|
||||
{ "too many", RTEMS_TOO_MANY, },
|
||||
{ "timed out waiting", RTEMS_TIMEOUT, },
|
||||
{ "object deleted while waiting", RTEMS_OBJECT_WAS_DELETED, },
|
||||
{ "specified size was invalid", RTEMS_INVALID_SIZE, },
|
||||
{ "address specified is invalid", RTEMS_INVALID_ADDRESS, },
|
||||
{ "number was invalid", RTEMS_INVALID_NUMBER, },
|
||||
{ "item has not been initialized", RTEMS_NOT_DEFINED, },
|
||||
{ "resources still outstanding", RTEMS_RESOURCE_IN_USE, },
|
||||
{ "request not satisfied", RTEMS_UNSATISFIED, },
|
||||
{ "thread is in wrong state", RTEMS_INCORRECT_STATE, },
|
||||
{ "thread already in state", RTEMS_ALREADY_SUSPENDED, },
|
||||
{ "illegal on calling thread", RTEMS_ILLEGAL_ON_SELF, },
|
||||
{ "illegal for remote object", RTEMS_ILLEGAL_ON_REMOTE_OBJECT, },
|
||||
{ "called from wrong environment", RTEMS_CALLED_FROM_ISR, },
|
||||
{ "invalid thread priority", RTEMS_INVALID_PRIORITY, },
|
||||
{ "invalid date/time", RTEMS_INVALID_CLOCK, },
|
||||
{ "invalid node id", RTEMS_INVALID_NODE, },
|
||||
{ "directive not configured", RTEMS_NOT_CONFIGURED, },
|
||||
{ "not owner of resource", RTEMS_NOT_OWNER_OF_RESOURCE , },
|
||||
{ "directive not implemented", RTEMS_NOT_IMPLEMENTED, },
|
||||
{ "RTEMS inconsistency detected", RTEMS_INTERNAL_ERROR, },
|
||||
{ "could not get enough memory", RTEMS_NO_MEMORY, },
|
||||
{ "driver IO error", RTEMS_IO_ERROR, },
|
||||
{ "internal multiprocessing only", THREAD_STATUS_PROXY_BLOCKING, },
|
||||
{ 0, 0, 0 },
|
||||
};
|
||||
|
||||
|
||||
const char *
|
||||
rtems_status_text(
|
||||
rtems_status_code status
|
||||
)
|
||||
{
|
||||
return rtems_assoc_name_by_local(rtems_status_assoc, status);
|
||||
}
|
||||
|
||||
|
||||
static int rtems_verror(
|
||||
unsigned32 error_flag,
|
||||
const char *printf_format,
|
||||
va_list arglist
|
||||
)
|
||||
{
|
||||
int local_errno = 0;
|
||||
int chars_written = 0;
|
||||
rtems_status_code status;
|
||||
|
||||
if (error_flag & RTEMS_ERROR_PANIC)
|
||||
{
|
||||
if (rtems_panic_in_progress++)
|
||||
_Thread_Disable_dispatch(); /* disable task switches */
|
||||
|
||||
/* don't aggravate things */
|
||||
if (rtems_panic_in_progress > 2)
|
||||
return 0;
|
||||
}
|
||||
|
||||
(void) fflush(stdout); /* in case stdout/stderr same */
|
||||
|
||||
status = error_flag & ~RTEMS_ERROR_MASK;
|
||||
if (error_flag & RTEMS_ERROR_ERRNO) /* include errno? */
|
||||
local_errno = errno;
|
||||
|
||||
if (_System_state_Is_multiprocessing)
|
||||
fprintf(stderr, "[%d] ", _Configuration_MP_table->node);
|
||||
|
||||
if (rtems_progname && *rtems_progname)
|
||||
chars_written += fprintf(stderr, "%s: ", rtems_progname);
|
||||
chars_written += vfprintf(stderr, printf_format, arglist);
|
||||
|
||||
if (status)
|
||||
chars_written += fprintf(stderr, " (status: %s)", rtems_status_text(status));
|
||||
|
||||
if (local_errno)
|
||||
{
|
||||
if ((local_errno > 0) && *strerror(local_errno))
|
||||
chars_written += fprintf(stderr, " (errno: %s)", strerror(local_errno));
|
||||
else
|
||||
chars_written += fprintf(stderr, " (unknown errno=%d)", local_errno);
|
||||
}
|
||||
|
||||
chars_written += fprintf(stderr, "\n");
|
||||
|
||||
(void) fflush(stderr);
|
||||
|
||||
if (error_flag & (RTEMS_ERROR_PANIC | RTEMS_ERROR_ABORT))
|
||||
{
|
||||
if (error_flag & RTEMS_ERROR_PANIC)
|
||||
{
|
||||
rtems_error(0, "fatal error, exiting");
|
||||
_exit(local_errno);
|
||||
}
|
||||
else
|
||||
{
|
||||
rtems_error(0, "fatal error, aborting");
|
||||
abort();
|
||||
}
|
||||
}
|
||||
return chars_written;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Report an error.
|
||||
* error_flag is as above; printf_format is a normal
|
||||
* printf(3) format string, with its concommitant arguments.
|
||||
*
|
||||
* Returns the number of characters written.
|
||||
*/
|
||||
|
||||
int rtems_error(
|
||||
int error_flag,
|
||||
const char *printf_format,
|
||||
...
|
||||
)
|
||||
{
|
||||
va_list arglist;
|
||||
int chars_written;
|
||||
|
||||
va_start(arglist, printf_format);
|
||||
chars_written = rtems_verror(error_flag, printf_format, arglist);
|
||||
va_end(arglist);
|
||||
|
||||
return chars_written;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_panic is shorthand for rtems_error(RTEMS_ERROR_PANIC, ...)
|
||||
*/
|
||||
|
||||
void rtems_panic(
|
||||
const char *printf_format,
|
||||
...
|
||||
)
|
||||
{
|
||||
va_list arglist;
|
||||
|
||||
va_start(arglist, printf_format);
|
||||
(void) rtems_verror(RTEMS_ERROR_PANIC, printf_format, arglist);
|
||||
va_end(arglist);
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* rtems_filesystem_evaluate_path()
|
||||
*
|
||||
* Routine to seed the evaluate path routine.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int rtems_filesystem_evaluate_path(
|
||||
const char *pathname,
|
||||
int flags,
|
||||
rtems_filesystem_location_info_t *pathloc,
|
||||
int follow_link
|
||||
)
|
||||
{
|
||||
int i;
|
||||
int result;
|
||||
rtems_filesystem_node_types_t type;
|
||||
|
||||
/*
|
||||
* Verify Input parameters.
|
||||
*/
|
||||
|
||||
if ( !pathname )
|
||||
rtems_set_errno_and_return_minus_one( EFAULT );
|
||||
|
||||
if ( !pathloc )
|
||||
rtems_set_errno_and_return_minus_one( EIO ); /* should never happen */
|
||||
|
||||
/*
|
||||
* Evaluate the path using the optable evalpath.
|
||||
*/
|
||||
|
||||
rtems_filesystem_get_start_loc( pathname, &i, pathloc );
|
||||
|
||||
if ( !pathloc->ops->evalpath_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
result = (*pathloc->ops->evalpath_h)( &pathname[i], flags, pathloc );
|
||||
|
||||
/*
|
||||
* Get the Node type and determine if you need to follow the link or
|
||||
* not.
|
||||
*/
|
||||
|
||||
if ( (result == 0) && follow_link ) {
|
||||
|
||||
if ( !pathloc->ops->node_type_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
type = (*pathloc->ops->node_type_h)( pathloc );
|
||||
|
||||
if ( ( type == RTEMS_FILESYSTEM_HARD_LINK ) ||
|
||||
( type == RTEMS_FILESYSTEM_SYM_LINK ) ) {
|
||||
|
||||
if ( !pathloc->ops->eval_link_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
result = (*pathloc->ops->eval_link_h)( pathloc, flags );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
/*
|
||||
* fchdir() - compatible with SVr4, 4.4BSD and X/OPEN - Change Directory
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2000.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int fchdir(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
/*
|
||||
* Now process the fchmod().
|
||||
*/
|
||||
|
||||
rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ );
|
||||
|
||||
/*
|
||||
* Verify you can change directory into this node.
|
||||
*/
|
||||
|
||||
if ( !iop->pathinfo.ops ) {
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
if ( !iop->pathinfo.ops->node_type_h ) {
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
if ( (*iop->pathinfo.ops->node_type_h)( &iop->pathinfo ) !=
|
||||
RTEMS_FILESYSTEM_DIRECTORY ) {
|
||||
rtems_set_errno_and_return_minus_one( ENOTDIR );
|
||||
}
|
||||
|
||||
rtems_filesystem_freenode( &rtems_filesystem_current );
|
||||
|
||||
/*
|
||||
* FIXME : I feel there should be another call to
|
||||
* actually take into account the extra reference to
|
||||
* this node which we are making here. I can
|
||||
* see the freenode interface but do not see
|
||||
* allocnode node interface. It maybe node_type.
|
||||
*/
|
||||
|
||||
rtems_filesystem_current = iop->pathinfo;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* fchmod() - POSIX 1003.1b 5.6.4 - Change File Modes
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int fchmod(
|
||||
int fd,
|
||||
mode_t mode
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
/*
|
||||
* Now process the fchmod().
|
||||
*/
|
||||
|
||||
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
|
||||
|
||||
if ( !iop->handlers->fchmod_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
return (*iop->pathinfo.handlers->fchmod_h)( &iop->pathinfo, mode );
|
||||
}
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* fcntl() - POSIX 1003.1b 6.5.2 - File Control
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
int fcntl(
|
||||
int fd,
|
||||
int cmd,
|
||||
...
|
||||
)
|
||||
{
|
||||
va_list ap;
|
||||
rtems_libio_t *iop;
|
||||
rtems_libio_t *diop;
|
||||
int fd2;
|
||||
int flags;
|
||||
int mask;
|
||||
int ret = 0;
|
||||
|
||||
va_start( ap, cmd );
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
/*
|
||||
* Now process the fcntl().
|
||||
*/
|
||||
|
||||
/*
|
||||
* This switch should contain all the cases from POSIX.
|
||||
*/
|
||||
|
||||
switch ( cmd ) {
|
||||
case F_DUPFD: /* dup */
|
||||
fd2 = va_arg( ap, int );
|
||||
if ( fd2 )
|
||||
diop = rtems_libio_iop( fd2 );
|
||||
else {
|
||||
/* allocate a file control block */
|
||||
diop = rtems_libio_allocate();
|
||||
if ( diop == 0 ) {
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
diop->handlers = iop->handlers;
|
||||
diop->file_info = iop->file_info;
|
||||
diop->flags = iop->flags;
|
||||
diop->pathinfo = iop->pathinfo;
|
||||
ret = (int) (diop - rtems_libio_iops);
|
||||
break;
|
||||
|
||||
case F_GETFD: /* get f_flags */
|
||||
ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0);
|
||||
break;
|
||||
|
||||
case F_SETFD: /* set f_flags */
|
||||
/*
|
||||
* Interpret the third argument as the "close on exec()" flag.
|
||||
* If this argument is 1, then the file descriptor is to be closed
|
||||
* if a new process is exec()'ed. Since RTEMS does not support
|
||||
* processes, then we can ignore this one except to make
|
||||
* F_GETFD work.
|
||||
*/
|
||||
|
||||
if ( va_arg( ap, int ) )
|
||||
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
|
||||
else
|
||||
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
|
||||
break;
|
||||
|
||||
case F_GETFL: /* more flags (cloexec) */
|
||||
ret = rtems_libio_to_fcntl_flags( iop->flags );
|
||||
break;
|
||||
|
||||
case F_SETFL:
|
||||
flags = rtems_libio_fcntl_flags( va_arg( ap, int ) );
|
||||
mask = LIBIO_FLAGS_NO_DELAY | LIBIO_FLAGS_APPEND;
|
||||
|
||||
/*
|
||||
* XXX If we are turning on append, should we seek to the end?
|
||||
*/
|
||||
|
||||
iop->flags = (iop->flags & ~mask) | (flags & mask);
|
||||
break;
|
||||
|
||||
case F_GETLK:
|
||||
errno = ENOTSUP;
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
case F_SETLK:
|
||||
errno = ENOTSUP;
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
case F_SETLKW:
|
||||
errno = ENOTSUP;
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
case F_SETOWN: /* for sockets. */
|
||||
errno = ENOTSUP;
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
case F_GETOWN: /* for sockets. */
|
||||
errno = ENOTSUP;
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
default:
|
||||
errno = EINVAL;
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we got this far successfully, then we give the optional
|
||||
* filesystem specific handler a chance to process this.
|
||||
*/
|
||||
|
||||
if (ret >= 0) {
|
||||
if (iop->handlers->fcntl_h) {
|
||||
int err = (*iop->handlers->fcntl_h)( cmd, iop );
|
||||
if (err) {
|
||||
errno = err;
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* fdatasync() - POSIX 1003.1b 6.6.2 - Synchronize the Data of a File
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int fdatasync(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
|
||||
|
||||
/*
|
||||
* Now process the fdatasync().
|
||||
*/
|
||||
|
||||
if ( !iop->handlers->fdatasync_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
return (*iop->handlers->fdatasync_h)( iop );
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
/*
|
||||
* fpathconf() - POSIX 1003.1b - 5.7.1 - Configurable Pathname Varables
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
long fpathconf(
|
||||
int fd,
|
||||
int name
|
||||
)
|
||||
{
|
||||
long return_value;
|
||||
rtems_libio_t *iop;
|
||||
rtems_filesystem_limits_and_options_t *the_limits;
|
||||
|
||||
rtems_libio_check_fd(fd);
|
||||
iop = rtems_libio_iop(fd);
|
||||
rtems_libio_check_is_open(iop);
|
||||
rtems_libio_check_permissions(iop, LIBIO_FLAGS_READ);
|
||||
|
||||
/*
|
||||
* Now process the information request.
|
||||
*/
|
||||
|
||||
the_limits = &iop->pathinfo.mt_entry->pathconf_limits_and_options;
|
||||
|
||||
switch ( name ) {
|
||||
case _PC_LINK_MAX:
|
||||
return_value = the_limits->link_max;
|
||||
break;
|
||||
case _PC_MAX_CANON:
|
||||
return_value = the_limits->max_canon;
|
||||
break;
|
||||
case _PC_MAX_INPUT:
|
||||
return_value = the_limits->max_input;
|
||||
break;
|
||||
case _PC_NAME_MAX:
|
||||
return_value = the_limits->name_max;
|
||||
break;
|
||||
case _PC_PATH_MAX:
|
||||
return_value = the_limits->path_max;
|
||||
break;
|
||||
case _PC_PIPE_BUF:
|
||||
return_value = the_limits->pipe_buf;
|
||||
break;
|
||||
case _PC_CHOWN_RESTRICTED:
|
||||
return_value = the_limits->posix_chown_restrictions;
|
||||
break;
|
||||
case _PC_NO_TRUNC:
|
||||
return_value = the_limits->posix_no_trunc;
|
||||
break;
|
||||
case _PC_VDISABLE:
|
||||
return_value = the_limits->posix_vdisable;
|
||||
break;
|
||||
case _PC_ASYNC_IO:
|
||||
return_value = the_limits->posix_async_io;
|
||||
break;
|
||||
case _PC_PRIO_IO:
|
||||
return_value = the_limits->posix_prio_io;
|
||||
break;
|
||||
case _PC_SYNC_IO:
|
||||
return_value = the_limits->posix_sync_io;
|
||||
break;
|
||||
default:
|
||||
rtems_set_errno_and_return_minus_one( EINVAL );
|
||||
break;
|
||||
}
|
||||
|
||||
return return_value;
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Null Filesystem Operations Tables
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio.h>
|
||||
|
||||
/*
|
||||
* Set of null operations handlers.
|
||||
*/
|
||||
|
||||
rtems_filesystem_file_handlers_r rtems_filesystem_null_handlers = {
|
||||
NULL, /* open */
|
||||
NULL, /* close */
|
||||
NULL, /* read */
|
||||
NULL, /* write */
|
||||
NULL, /* ioctl */
|
||||
NULL, /* lseek */
|
||||
NULL, /* fstat */
|
||||
NULL, /* fchmod */
|
||||
NULL, /* ftruncate */
|
||||
NULL, /* fpathconf */
|
||||
NULL, /* fsync */
|
||||
NULL, /* fdatasync */
|
||||
NULL, /* fcntl */
|
||||
NULL /* rmnod */
|
||||
};
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* fstat() - POSIX 1003.1b 5.6.2 - Get File Status
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int fstat(
|
||||
int fd,
|
||||
struct stat *sbuf
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
/*
|
||||
* Check to see if we were passed a valid pointer.
|
||||
*/
|
||||
|
||||
if ( !sbuf )
|
||||
rtems_set_errno_and_return_minus_one( EFAULT );
|
||||
|
||||
/*
|
||||
* Now process the stat() request.
|
||||
*/
|
||||
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_fd( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
if ( !iop->handlers )
|
||||
rtems_set_errno_and_return_minus_one( EBADF );
|
||||
|
||||
if ( !iop->handlers->fstat_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
/*
|
||||
* Zero out the stat structure so the various support
|
||||
* versions of stat don't have to.
|
||||
*/
|
||||
memset( sbuf, 0, sizeof(struct stat) );
|
||||
|
||||
return (*iop->handlers->fstat_h)( &iop->pathinfo, sbuf );
|
||||
}
|
||||
|
||||
/*
|
||||
* _fstat_r
|
||||
*
|
||||
* This is the Newlib dependent reentrant version of fstat().
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <reent.h>
|
||||
|
||||
int _fstat_r(
|
||||
struct _reent *ptr,
|
||||
int fd,
|
||||
struct stat *buf
|
||||
)
|
||||
{
|
||||
return fstat( fd, buf );
|
||||
}
|
||||
#endif
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* fsync() - POSIX 1003.1b 6.6.1 - Synchronize the State of a File
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int fsync(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
|
||||
|
||||
/*
|
||||
* Now process the fsync().
|
||||
*/
|
||||
|
||||
if ( !iop->handlers )
|
||||
rtems_set_errno_and_return_minus_one( EBADF );
|
||||
|
||||
if ( !iop->handlers->fsync_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
return (*iop->handlers->fsync_h)( iop );
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* ftruncate() - Truncate a File to the Specified Length
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int ftruncate(
|
||||
int fd,
|
||||
off_t length
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
rtems_filesystem_location_info_t loc;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
/*
|
||||
* Now process the ftruncate() request.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Make sure we are not working on a directory
|
||||
*/
|
||||
|
||||
loc = iop->pathinfo;
|
||||
if ( !loc.ops->node_type_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY )
|
||||
rtems_set_errno_and_return_minus_one( EISDIR );
|
||||
|
||||
rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE );
|
||||
|
||||
if ( !iop->handlers->ftruncate_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
return (*iop->handlers->ftruncate_h)( iop, length );
|
||||
}
|
||||
|
||||
@@ -1,287 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1989, 1991 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* Copied from newlib 1.8.1. RTEMS can not build all of the contents
|
||||
* of the UNIX directory but we need this routine.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Added these when moved to RTEMS
|
||||
*/
|
||||
|
||||
#define _stat stat
|
||||
#define _opendir opendir
|
||||
#define _fstat fstat
|
||||
#define _readdir readdir
|
||||
#define _closedir closedir
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getcwd.c 5.11 (Berkeley) 2/24/91";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <reent.h>
|
||||
#include <_syslist.h>
|
||||
|
||||
#define bcopy(a,b,c) memmove (b,a,c)
|
||||
|
||||
#define ISDOT(dp) \
|
||||
(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
|
||||
(dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
|
||||
|
||||
#ifndef _REENT_ONLY
|
||||
|
||||
char *
|
||||
getcwd (pt, size)
|
||||
char *pt;
|
||||
size_t size;
|
||||
{
|
||||
register struct dirent *dp;
|
||||
register DIR *dir = 0;
|
||||
register dev_t dev;
|
||||
register ino_t ino;
|
||||
register int first;
|
||||
register char *bpt, *bup;
|
||||
struct stat s;
|
||||
dev_t root_dev;
|
||||
ino_t root_ino;
|
||||
size_t ptsize, upsize;
|
||||
int save_errno;
|
||||
char *ept, *eup, *up;
|
||||
|
||||
/*
|
||||
* If no buffer specified by the user, allocate one as necessary.
|
||||
* If a buffer is specified, the size has to be non-zero. The path
|
||||
* is built from the end of the buffer backwards.
|
||||
*/
|
||||
|
||||
if (pt)
|
||||
{
|
||||
ptsize = 0;
|
||||
if (!size)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return (char *) NULL;
|
||||
}
|
||||
ept = pt + size;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(pt = (char *) malloc (ptsize = 1024 - 4)))
|
||||
{
|
||||
return (char *) NULL;
|
||||
}
|
||||
ept = pt + ptsize;
|
||||
}
|
||||
bpt = ept - 1;
|
||||
*bpt = '\0';
|
||||
|
||||
/*
|
||||
* Allocate bytes (1024 - malloc space) for the string of "../"'s.
|
||||
* Should always be enough (it's 340 levels). If it's not, allocate
|
||||
* as necessary. Special * case the first stat, it's ".", not "..".
|
||||
*/
|
||||
|
||||
if (!(up = (char *) malloc (upsize = 1024 - 4)))
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
eup = up + MAXPATHLEN;
|
||||
bup = up;
|
||||
up[0] = '.';
|
||||
up[1] = '\0';
|
||||
|
||||
/* Save root values, so know when to stop. */
|
||||
if (stat ("/", &s))
|
||||
goto err;
|
||||
root_dev = s.st_dev;
|
||||
root_ino = s.st_ino;
|
||||
|
||||
errno = 0; /* XXX readdir has no error return. */
|
||||
|
||||
for (first = 1;; first = 0)
|
||||
{
|
||||
/* Stat the current level. */
|
||||
if (_stat (up, &s))
|
||||
goto err;
|
||||
|
||||
/* Save current node values. */
|
||||
ino = s.st_ino;
|
||||
dev = s.st_dev;
|
||||
|
||||
/* Check for reaching root. */
|
||||
if (root_dev == dev && root_ino == ino)
|
||||
{
|
||||
*--bpt = '/';
|
||||
/*
|
||||
* It's unclear that it's a requirement to copy the
|
||||
* path to the beginning of the buffer, but it's always
|
||||
* been that way and stuff would probably break.
|
||||
*/
|
||||
(void) bcopy (bpt, pt, ept - bpt);
|
||||
free (up);
|
||||
return pt;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build pointer to the parent directory, allocating memory
|
||||
* as necessary. Max length is 3 for "../", the largest
|
||||
* possible component name, plus a trailing NULL.
|
||||
*/
|
||||
|
||||
if (bup + 3 + MAXNAMLEN + 1 >= eup)
|
||||
{
|
||||
if (!(up = (char *) realloc (up, upsize *= 2)))
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
bup = up;
|
||||
eup = up + upsize;
|
||||
}
|
||||
*bup++ = '.';
|
||||
*bup++ = '.';
|
||||
*bup = '\0';
|
||||
|
||||
/* Open and stat parent directory. */
|
||||
if (!(dir = _opendir (up)) || _fstat (__dirfd (dir), &s))
|
||||
goto err;
|
||||
|
||||
/* Add trailing slash for next directory. */
|
||||
*bup++ = '/';
|
||||
|
||||
/*
|
||||
* If it's a mount point, have to stat each element because
|
||||
* the inode number in the directory is for the entry in the
|
||||
* parent directory, not the inode number of the mounted file.
|
||||
*/
|
||||
|
||||
save_errno = 0;
|
||||
if (s.st_dev == dev)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
if (!(dp = _readdir (dir)))
|
||||
goto notfound;
|
||||
if (dp->d_ino == ino)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
for (;;)
|
||||
{
|
||||
if (!(dp = _readdir (dir)))
|
||||
goto notfound;
|
||||
if (ISDOT (dp))
|
||||
continue;
|
||||
bcopy (dp->d_name, bup, strlen (dp->d_name) + 1);
|
||||
|
||||
/* Save the first error for later. */
|
||||
if (stat (up, &s))
|
||||
{
|
||||
if (!save_errno)
|
||||
save_errno = errno;
|
||||
errno = 0;
|
||||
continue;
|
||||
}
|
||||
if (s.st_dev == dev && s.st_ino == ino)
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for length of the current name, preceding slash,
|
||||
* leading slash.
|
||||
*/
|
||||
|
||||
if (bpt - pt <= strlen (dp->d_name) + (first ? 1 : 2))
|
||||
{
|
||||
size_t len, off;
|
||||
|
||||
if (!ptsize)
|
||||
{
|
||||
errno = ERANGE;
|
||||
goto err;
|
||||
}
|
||||
off = bpt - pt;
|
||||
len = ept - bpt;
|
||||
if (!(pt = (char *) realloc (pt, ptsize *= 2)))
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
bpt = pt + off;
|
||||
ept = pt + ptsize;
|
||||
(void) bcopy (bpt, ept - len, len);
|
||||
bpt = ept - len;
|
||||
}
|
||||
if (!first)
|
||||
*--bpt = '/';
|
||||
bpt -= strlen (dp->d_name);
|
||||
bcopy (dp->d_name, bpt, strlen (dp->d_name));
|
||||
(void) _closedir (dir);
|
||||
dir = 0;
|
||||
|
||||
/* Truncate any file name. */
|
||||
*bup = '\0';
|
||||
}
|
||||
|
||||
notfound:
|
||||
/*
|
||||
* If readdir set errno, use it, not any saved error; otherwise,
|
||||
* didn't find the current directory in its parent directory, set
|
||||
* errno to ENOENT.
|
||||
*/
|
||||
|
||||
if (!errno)
|
||||
errno = save_errno ? save_errno : ENOENT;
|
||||
/* FALLTHROUGH */
|
||||
|
||||
err:
|
||||
if(dir)
|
||||
(void) _closedir (dir);
|
||||
if (ptsize)
|
||||
free (pt);
|
||||
free (up);
|
||||
return (char *) NULL;
|
||||
}
|
||||
|
||||
#endif /* _REENT_ONLY */
|
||||
@@ -1,63 +0,0 @@
|
||||
/*
|
||||
* getdents() - Get Directory Entries
|
||||
*
|
||||
* SVR4 and SVID extension required by Newlib readdir() family.
|
||||
*
|
||||
* This routine will dd_len / (sizeof dirent) directory entries relative to
|
||||
* the current directory position index. These entries will be placed in
|
||||
* character array pointed to by -dd_buf-
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int getdents(
|
||||
int dd_fd,
|
||||
char *dd_buf,
|
||||
int dd_len
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
rtems_filesystem_location_info_t loc;
|
||||
|
||||
/*
|
||||
* Get the file control block structure associated with the file descriptor
|
||||
*/
|
||||
|
||||
iop = rtems_libio_iop( dd_fd );
|
||||
|
||||
/*
|
||||
* Make sure we are working on a directory
|
||||
*/
|
||||
loc = iop->pathinfo;
|
||||
if ( !loc.ops->node_type_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY )
|
||||
rtems_set_errno_and_return_minus_one( ENOTDIR );
|
||||
|
||||
/*
|
||||
* Return the number of bytes that were actually transfered as a result
|
||||
* of the read attempt.
|
||||
*/
|
||||
|
||||
if ( !iop->handlers->read_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
return (*iop->handlers->read_h)( iop, dd_buf, dd_len );
|
||||
}
|
||||
@@ -1,193 +0,0 @@
|
||||
/*
|
||||
* POSIX 1003.1b - 9.2.1 - Group Database Access Routines
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
|
||||
static struct group gr_group; /* password structure */
|
||||
static FILE *group_fp;
|
||||
|
||||
/*
|
||||
* The size of these buffers is arbitrary and there is no provision
|
||||
* to protect any of them from overflowing. The scanf patterns
|
||||
* need to be changed to prevent overflowing. In addition,
|
||||
* the limits on these needs to be examined.
|
||||
*/
|
||||
|
||||
static char groupname[8];
|
||||
static char password[1024];
|
||||
static char groups[1024];
|
||||
static char *gr_mem[16] = { } ;
|
||||
|
||||
extern void init_etc_passwd_group(void);
|
||||
|
||||
int getgrnam_r(
|
||||
const char *name,
|
||||
struct group *grp,
|
||||
char *buffer,
|
||||
size_t bufsize,
|
||||
struct group **result
|
||||
)
|
||||
{
|
||||
FILE *fp;
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets (buffer, bufsize, fp)) {
|
||||
sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, (int *) &grp->gr_gid,
|
||||
groups);
|
||||
grp->gr_name = groupname;
|
||||
grp->gr_passwd = password;
|
||||
grp->gr_mem = gr_mem ;
|
||||
|
||||
if (!strcmp (groupname, name)) {
|
||||
fclose (fp);
|
||||
*result = grp;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct group *getgrnam(
|
||||
const char *name
|
||||
)
|
||||
{
|
||||
char buf[1024];
|
||||
struct group *g;
|
||||
|
||||
if ( getgrnam_r( name, &gr_group, buf, 1024, &g ) )
|
||||
return NULL;
|
||||
|
||||
return g;
|
||||
}
|
||||
|
||||
int getgrgid_r(
|
||||
gid_t gid,
|
||||
struct group *grp,
|
||||
char *buffer,
|
||||
size_t bufsize,
|
||||
struct group **result
|
||||
)
|
||||
{
|
||||
FILE *fp;
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
|
||||
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets (buffer, bufsize, fp)) {
|
||||
sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, (int *) &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
|
||||
if (gid == gr_group.gr_gid) {
|
||||
fclose (fp);
|
||||
*result = grp;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct group *getgrgid (
|
||||
gid_t gid
|
||||
)
|
||||
{
|
||||
char buf[1024];
|
||||
struct group *g;
|
||||
|
||||
if ( getgrgid_r( gid, &gr_group, buf, 1024, &g ) )
|
||||
return NULL;
|
||||
|
||||
return g;
|
||||
}
|
||||
|
||||
struct group *getgrent( void )
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (group_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), group_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, (int *) &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
return &gr_group;
|
||||
}
|
||||
|
||||
void
|
||||
setgrent ()
|
||||
{
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
|
||||
group_fp = fopen ("/etc/group", "r");
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
}
|
||||
|
||||
void
|
||||
endgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
}
|
||||
@@ -1,248 +0,0 @@
|
||||
/*
|
||||
* POSIX 1003.1b - 9.2.2 - User Database Access Routines
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
static struct passwd pw_passwd; /* password structure */
|
||||
static FILE *passwd_fp;
|
||||
|
||||
/*
|
||||
* The size of these buffers is arbitrary and there is no provision
|
||||
* to protect any of them from overflowing. The scanf patterns
|
||||
* need to be changed to prevent overflowing. In addition,
|
||||
* the limits on these needs to be examined.
|
||||
*/
|
||||
|
||||
static char logname[8];
|
||||
static char password[1024];
|
||||
static char comment[1024];
|
||||
static char gecos[1024];
|
||||
static char dir[1024];
|
||||
static char shell[1024];
|
||||
|
||||
/*
|
||||
* Initialize a useable but dummy /etc/passwd
|
||||
*
|
||||
* NOTE: Ignore all errors.
|
||||
*
|
||||
*/
|
||||
|
||||
static char etc_passwd_initted = 0;
|
||||
|
||||
void init_etc_passwd_group(void)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
if ( etc_passwd_initted )
|
||||
return;
|
||||
etc_passwd_initted = 1;
|
||||
|
||||
(void) mkdir( "/etc", 0777);
|
||||
|
||||
/*
|
||||
* Initialize /etc/passwd
|
||||
*/
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "w")) == NULL)
|
||||
return;
|
||||
|
||||
fprintf( fp, "root:*:0:0:root,,,,:/:/bin/sh\n"
|
||||
"rtems:*:1:1:RTEMS Application,,,,:/:/bin/sh\n"
|
||||
"tty:!:2:2:tty owner,,,,:/:/bin/false\n" );
|
||||
|
||||
fclose( fp );
|
||||
|
||||
/*
|
||||
* Initialize /etc/group
|
||||
*/
|
||||
|
||||
if ((fp = fopen ("/etc/group", "w")) == NULL)
|
||||
return;
|
||||
|
||||
fprintf( fp, "root:x:0:root\n"
|
||||
"rtems:x:1:rtems\n"
|
||||
"tty:x:2:tty\n" );
|
||||
|
||||
fclose( fp );
|
||||
}
|
||||
|
||||
int getpwnam_r(
|
||||
const char *name,
|
||||
struct passwd *pwd,
|
||||
char *buffer,
|
||||
size_t bufsize,
|
||||
struct passwd **result
|
||||
)
|
||||
{
|
||||
FILE *fp;
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets (buffer, bufsize, fp)) {
|
||||
sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pwd->pw_uid,
|
||||
&pwd->pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pwd->pw_name = logname;
|
||||
pwd->pw_passwd = password;
|
||||
pwd->pw_comment = comment;
|
||||
pwd->pw_gecos = gecos;
|
||||
pwd->pw_dir = dir;
|
||||
pwd->pw_shell = shell;
|
||||
|
||||
if (!strcmp (logname, name)) {
|
||||
fclose (fp);
|
||||
*result = pwd;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct passwd *getpwnam(
|
||||
const char *name
|
||||
)
|
||||
{
|
||||
char buf[1024];
|
||||
struct passwd *p;
|
||||
|
||||
if ( getpwnam_r( name, &pw_passwd, buf, 1024, &p ) )
|
||||
return NULL;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
int getpwuid_r(
|
||||
uid_t uid,
|
||||
struct passwd *pwd,
|
||||
char *buffer,
|
||||
size_t bufsize,
|
||||
struct passwd **result
|
||||
)
|
||||
{
|
||||
FILE *fp;
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (fgets (buffer, bufsize, fp)) {
|
||||
sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pwd->pw_name = logname;
|
||||
pwd->pw_passwd = password;
|
||||
pwd->pw_comment = comment;
|
||||
pwd->pw_gecos = gecos;
|
||||
pwd->pw_dir = dir;
|
||||
pwd->pw_shell = shell;
|
||||
|
||||
if (uid == pwd->pw_uid) {
|
||||
fclose (fp);
|
||||
*result = pwd;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
errno = EINVAL;
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct passwd *getpwuid(
|
||||
uid_t uid
|
||||
)
|
||||
{
|
||||
char buf[1024];
|
||||
struct passwd *p;
|
||||
|
||||
if ( getpwuid_r( uid, &pw_passwd, buf, 1024, &p ) )
|
||||
return NULL;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
struct passwd *getpwent()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (passwd_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), passwd_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
return &pw_passwd;
|
||||
}
|
||||
|
||||
void setpwent( void )
|
||||
{
|
||||
rtems_user_env_t * aux=rtems_current_user_env; /* save */
|
||||
init_etc_passwd_group();
|
||||
rtems_current_user_env=&rtems_global_user_env; /* set root */
|
||||
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
|
||||
passwd_fp = fopen ("/etc/passwd", "r");
|
||||
rtems_current_user_env=aux; /* restore */
|
||||
}
|
||||
|
||||
void endpwent( void )
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
}
|
||||
@@ -1,218 +0,0 @@
|
||||
/*
|
||||
* RTEMS threads compatibily routines for libgcc2.
|
||||
*
|
||||
* by: Rosimildo da Silva ( rdasilva@connecttel.com
|
||||
*
|
||||
* Used ideas from:
|
||||
* W. Eric Norum
|
||||
* Canadian Light Source
|
||||
* University of Saskatchewan
|
||||
* Saskatoon, Saskatchewan, CANADA
|
||||
* eric@cls.usask.ca
|
||||
*
|
||||
* Eric sent some e-mail in the rtems-list as a start point for this
|
||||
* module implementation.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/* We might not need, defined just in case */
|
||||
#define __RTEMS_INSIDE__ 1
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/system.h>
|
||||
#include <rtems/error.h> /* rtems_panic */
|
||||
#include <rtems/rtems/tasks.h>
|
||||
|
||||
/*
|
||||
* These typedefs should match with the ones defined in the file
|
||||
* gcc/gthr-rtems.h in the gcc distribution.
|
||||
*/
|
||||
typedef void *__gthread_key_t;
|
||||
typedef int __gthread_once_t;
|
||||
typedef void *__gthread_mutex_t;
|
||||
|
||||
|
||||
/* uncomment this if you need to debug this interface */
|
||||
|
||||
/*
|
||||
#define DEBUG_GXX_WRAPPERS 1
|
||||
*/
|
||||
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
/* local function to return the ID of the calling thread */
|
||||
static rtems_id get_tid( void )
|
||||
{
|
||||
rtems_id id = 0;
|
||||
rtems_task_ident( RTEMS_SELF, 0, &id );
|
||||
return id;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int rtems_gxx_once(__gthread_once_t *once, void (*func) (void))
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: once=%x, func=%x\n", *once, func );
|
||||
#endif
|
||||
if( *(volatile __gthread_once_t *)once == 0 )
|
||||
{
|
||||
rtems_mode saveMode;
|
||||
rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode);
|
||||
if( *(volatile __gthread_once_t *)once == 0 )
|
||||
{
|
||||
*(volatile __gthread_once_t *)once = 1;
|
||||
(*func)();
|
||||
}
|
||||
rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *))
|
||||
{
|
||||
/* Ok, this can be a bit tricky. We are going to return a "key" as a
|
||||
* pointer to the buffer that will hold the value of the key itself.
|
||||
* We have to to this, becuase the others functions on this interface
|
||||
* deal with the value of the key, as used with the POSIX API.
|
||||
*/
|
||||
/* Do not pull your hair, trust me this works. :-) */
|
||||
__gthread_key_t *new_key = ( __gthread_key_t * )malloc( sizeof( __gthread_key_t ) );
|
||||
*key = ( __gthread_key_t )new_key;
|
||||
*new_key = NULL;
|
||||
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: create key=%x, dtor=%x, new_key=%x\n", key, dtor, new_key );
|
||||
#endif
|
||||
/* register with RTEMS the buffer that will hold the key values */
|
||||
if( rtems_task_variable_add( RTEMS_SELF, (void **)new_key, NULL ) == RTEMS_SUCCESSFUL )
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rtems_gxx_key_dtor (__gthread_key_t key, void *ptr)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: dtor key=%x, ptr=%x\n", key, ptr );
|
||||
#endif
|
||||
*(void **)key = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rtems_gxx_key_delete (__gthread_key_t key)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: delete key=%x\n", key );
|
||||
#endif
|
||||
/* register with RTEMS the buffer that will hold the key values */
|
||||
if( rtems_task_variable_delete( RTEMS_SELF, (void **)key ) == RTEMS_SUCCESSFUL )
|
||||
{
|
||||
if( key ) free( (void *)key );
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void *rtems_gxx_getspecific(__gthread_key_t key)
|
||||
{
|
||||
void *p= 0;
|
||||
|
||||
/* register with RTEMS the buffer that will hold the key values */
|
||||
if( rtems_task_variable_get( RTEMS_SELF, (void **)key, &p ) == RTEMS_SUCCESSFUL )
|
||||
{
|
||||
/* We do not have to do this, but what the heck ! */
|
||||
p= *( void **)key;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* fisrt time, always set to zero, it is unknown the value that the others
|
||||
* threads are using at the moment of this call
|
||||
*/
|
||||
if( rtems_task_variable_add( RTEMS_SELF, (void **)key, NULL ) != RTEMS_SUCCESSFUL )
|
||||
{
|
||||
rtems_panic ("rtems_gxx_getspecific");
|
||||
}
|
||||
*( void ** )key = (void *)0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: getspecific key=%x, ptr=%x, id=%x\n", key, p, get_tid() );
|
||||
#endif
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: setspecific key=%x, ptr=%x, id=%x\n", key, ptr, get_tid() );
|
||||
#endif
|
||||
/* register with RTEMS the buffer that will hold the key values */
|
||||
if( rtems_task_variable_add( RTEMS_SELF, (void **)key, NULL ) == RTEMS_SUCCESSFUL )
|
||||
{
|
||||
/* now let's set the proper value */
|
||||
*( void ** )key = (void *)ptr;
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* MUTEX support
|
||||
*/
|
||||
void rtems_gxx_mutex_init (__gthread_mutex_t *mutex)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: mutex init =%X\n", *mutex );
|
||||
#endif
|
||||
if( rtems_semaphore_create( rtems_build_name ('G', 'C', 'C', '2'),
|
||||
1,
|
||||
RTEMS_PRIORITY|RTEMS_BINARY_SEMAPHORE
|
||||
|RTEMS_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING|RTEMS_LOCAL,
|
||||
0,
|
||||
(rtems_id *)mutex ) != RTEMS_SUCCESSFUL )
|
||||
{
|
||||
rtems_panic ("rtems_gxx_mutex_init");
|
||||
}
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: mutex init complete =%X\n", *mutex );
|
||||
#endif
|
||||
}
|
||||
|
||||
int rtems_gxx_mutex_lock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: lock mutex=%X\n", *mutex );
|
||||
#endif
|
||||
return ( rtems_semaphore_obtain( (rtems_id)*mutex,
|
||||
RTEMS_WAIT, RTEMS_NO_TIMEOUT ) == RTEMS_SUCCESSFUL) ? 0 : -1;
|
||||
}
|
||||
|
||||
int rtems_gxx_mutex_trylock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: trylock mutex=%X\n", *mutex );
|
||||
#endif
|
||||
return (rtems_semaphore_obtain ((rtems_id)*mutex,
|
||||
RTEMS_NO_WAIT, 0) == RTEMS_SUCCESSFUL) ? 0 : -1;
|
||||
}
|
||||
|
||||
int rtems_gxx_mutex_unlock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
#ifdef DEBUG_GXX_WRAPPERS
|
||||
printk( "gxx_wrappers: unlock mutex=%X\n", *mutex );
|
||||
#endif
|
||||
return (rtems_semaphore_release( (rtems_id)*mutex ) == RTEMS_SUCCESSFUL) ? 0 :-1;
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Routines to access a host errno
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#if defined(RTEMS_UNIX)
|
||||
#include <errno.h>
|
||||
|
||||
int host_errno( void );
|
||||
|
||||
/*
|
||||
* fix_syscall_errno
|
||||
*
|
||||
* copy host errno, if any to thread aware errno, if any
|
||||
*/
|
||||
|
||||
void fix_syscall_errno( void )
|
||||
{
|
||||
errno = host_errno();
|
||||
}
|
||||
|
||||
/*
|
||||
* host_errno
|
||||
*
|
||||
* Get the host system errno, if any
|
||||
* When using newlib (or possibly other libc's) on top of UNIX
|
||||
* the errno returned by system calls may be unavailable due
|
||||
* to trickery of making errno thread aware.
|
||||
* This provides a kludge of getting at it.
|
||||
*/
|
||||
|
||||
#undef errno
|
||||
extern int errno;
|
||||
int host_errno(void)
|
||||
{
|
||||
return errno;
|
||||
}
|
||||
#endif
|
||||
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* ioctl() system call
|
||||
*
|
||||
* This routine is not defined in the POSIX 1003.1b standard but is
|
||||
* commonly supported on most UNIX and POSIX systems.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
int ioctl(
|
||||
int fd,
|
||||
int command,
|
||||
...
|
||||
)
|
||||
{
|
||||
va_list ap;
|
||||
rtems_status_code rc;
|
||||
rtems_libio_t *iop;
|
||||
void *buffer;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
va_start(ap, command);
|
||||
|
||||
buffer = va_arg(ap, void *);
|
||||
|
||||
/*
|
||||
* Now process the ioctl().
|
||||
*/
|
||||
|
||||
if ( !iop->handlers )
|
||||
rtems_set_errno_and_return_minus_one( EBADF );
|
||||
|
||||
if ( !iop->handlers->ioctl_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
rc = (*iop->handlers->ioctl_h)( iop, command, buffer );
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
int isatty(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (fstat (fd, &buf) < 0)
|
||||
return 0;
|
||||
|
||||
if (S_ISCHR (buf.st_mode))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,335 +0,0 @@
|
||||
/*
|
||||
* This file contains the support infrastructure used to manage the
|
||||
* table of integer style file descriptors used by the low level
|
||||
* POSIX system calls like open(), read, fstat(), etc.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/libio_.h> /* libio_.h pulls in rtems */
|
||||
#include <rtems.h>
|
||||
#include <rtems/assoc.h> /* assoc.h not included by rtems.h */
|
||||
|
||||
#include <stdio.h> /* O_RDONLY, et.al. */
|
||||
#include <fcntl.h> /* O_RDONLY, et.al. */
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#if ! defined(O_NDELAY)
|
||||
# if defined(solaris2)
|
||||
# define O_NDELAY O_NONBLOCK
|
||||
# elif defined(__CYGWIN__)
|
||||
# define O_NDELAY _FNBIO
|
||||
# elif defined(RTEMS_NEWLIB)
|
||||
# define O_NDELAY _FNBIO
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h> /* strcmp */
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h> /* calloc() */
|
||||
|
||||
#include <rtems/libio.h> /* libio.h not pulled in by rtems */
|
||||
|
||||
/*
|
||||
* File descriptor Table Information
|
||||
*/
|
||||
|
||||
extern unsigned32 rtems_libio_number_iops;
|
||||
rtems_id rtems_libio_semaphore;
|
||||
rtems_libio_t *rtems_libio_iops;
|
||||
rtems_libio_t *rtems_libio_iop_freelist;
|
||||
|
||||
/*
|
||||
* rtems_libio_init
|
||||
*
|
||||
* Called by BSP startup code to initialize the libio subsystem.
|
||||
*/
|
||||
|
||||
void rtems_libio_init( void )
|
||||
{
|
||||
rtems_status_code rc;
|
||||
int i;
|
||||
rtems_libio_t *iop;
|
||||
|
||||
if (rtems_libio_number_iops > 0)
|
||||
{
|
||||
rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops,
|
||||
sizeof(rtems_libio_t));
|
||||
if (rtems_libio_iops == NULL)
|
||||
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
|
||||
|
||||
iop = rtems_libio_iop_freelist = rtems_libio_iops;
|
||||
for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++)
|
||||
iop->data1 = iop + 1;
|
||||
iop->data1 = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the binary semaphore used to provide mutual exclusion
|
||||
* on the IOP Table.
|
||||
*/
|
||||
|
||||
rc = rtems_semaphore_create(
|
||||
RTEMS_LIBIO_SEM,
|
||||
1,
|
||||
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
|
||||
RTEMS_NO_PRIORITY,
|
||||
&rtems_libio_semaphore
|
||||
);
|
||||
if ( rc != RTEMS_SUCCESSFUL )
|
||||
rtems_fatal_error_occurred( rc );
|
||||
|
||||
/*
|
||||
* Initialize the base file system infrastructure.
|
||||
*/
|
||||
|
||||
rtems_filesystem_initialize();
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_fcntl_flags
|
||||
*
|
||||
* Convert UNIX fnctl(2) flags to ones that RTEMS drivers understand
|
||||
*/
|
||||
|
||||
rtems_assoc_t access_modes_assoc[] = {
|
||||
{ "READ", LIBIO_FLAGS_READ, O_RDONLY },
|
||||
{ "WRITE", LIBIO_FLAGS_WRITE, O_WRONLY },
|
||||
{ "READ/WRITE", LIBIO_FLAGS_READ_WRITE, O_RDWR },
|
||||
{ 0, 0, 0 },
|
||||
};
|
||||
|
||||
rtems_assoc_t status_flags_assoc[] = {
|
||||
{ "NO DELAY", LIBIO_FLAGS_NO_DELAY, O_NDELAY },
|
||||
{ "NONBLOCK", LIBIO_FLAGS_NO_DELAY, O_NONBLOCK },
|
||||
{ "APPEND", LIBIO_FLAGS_APPEND, O_APPEND },
|
||||
{ "CREATE", LIBIO_FLAGS_CREATE, O_CREAT },
|
||||
{ 0, 0, 0 },
|
||||
};
|
||||
|
||||
unsigned32 rtems_libio_fcntl_flags(
|
||||
unsigned32 fcntl_flags
|
||||
)
|
||||
{
|
||||
unsigned32 flags = 0;
|
||||
unsigned32 access_modes;
|
||||
|
||||
/*
|
||||
* Access mode is a small integer
|
||||
*/
|
||||
|
||||
access_modes = fcntl_flags & O_ACCMODE;
|
||||
fcntl_flags &= ~O_ACCMODE;
|
||||
flags = rtems_assoc_local_by_remote( access_modes_assoc, access_modes );
|
||||
|
||||
/*
|
||||
* Everything else is single bits
|
||||
*/
|
||||
|
||||
flags |=
|
||||
rtems_assoc_local_by_remote_bitfield(status_flags_assoc, fcntl_flags);
|
||||
return flags;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_to_fcntl_flags
|
||||
*
|
||||
* Convert RTEMS internal flags to UNIX fnctl(2) flags
|
||||
*/
|
||||
|
||||
unsigned32 rtems_libio_to_fcntl_flags(
|
||||
unsigned32 flags
|
||||
)
|
||||
{
|
||||
unsigned32 fcntl_flags = 0;
|
||||
|
||||
if ( (flags & LIBIO_FLAGS_READ_WRITE) == LIBIO_FLAGS_READ_WRITE ) {
|
||||
fcntl_flags |= O_RDWR;
|
||||
} else if ( (flags & LIBIO_FLAGS_READ) == LIBIO_FLAGS_READ) {
|
||||
fcntl_flags |= O_RDONLY;
|
||||
} else if ( (flags & LIBIO_FLAGS_WRITE) == LIBIO_FLAGS_WRITE) {
|
||||
fcntl_flags |= O_WRONLY;
|
||||
}
|
||||
|
||||
if ( (flags & LIBIO_FLAGS_NO_DELAY) == LIBIO_FLAGS_NO_DELAY ) {
|
||||
fcntl_flags |= O_NDELAY;
|
||||
}
|
||||
|
||||
if ( (flags & LIBIO_FLAGS_APPEND) == LIBIO_FLAGS_APPEND ) {
|
||||
fcntl_flags |= O_APPEND;
|
||||
}
|
||||
|
||||
if ( (flags & LIBIO_FLAGS_CREATE) == LIBIO_FLAGS_CREATE ) {
|
||||
fcntl_flags |= O_CREAT;
|
||||
}
|
||||
|
||||
return fcntl_flags;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_allocate
|
||||
*
|
||||
* This routine searches the IOP Table for an unused entry. If it
|
||||
* finds one, it returns it. Otherwise, it returns NULL.
|
||||
*/
|
||||
|
||||
rtems_libio_t *rtems_libio_allocate( void )
|
||||
{
|
||||
rtems_libio_t *iop, *next;
|
||||
rtems_status_code rc;
|
||||
|
||||
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
|
||||
|
||||
if (rtems_libio_iop_freelist) {
|
||||
iop = rtems_libio_iop_freelist;
|
||||
next = iop->data1;
|
||||
(void) memset( iop, 0, sizeof(rtems_libio_t) );
|
||||
iop->flags = LIBIO_FLAGS_OPEN;
|
||||
rc = rtems_semaphore_create(
|
||||
RTEMS_LIBIO_IOP_SEM(iop - rtems_libio_iops),
|
||||
1,
|
||||
RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
|
||||
RTEMS_NO_PRIORITY,
|
||||
&iop->sem
|
||||
);
|
||||
if (rc != RTEMS_SUCCESSFUL)
|
||||
goto failed;
|
||||
rtems_libio_iop_freelist = next;
|
||||
goto done;
|
||||
}
|
||||
|
||||
failed:
|
||||
iop = 0;
|
||||
|
||||
done:
|
||||
rtems_semaphore_release( rtems_libio_semaphore );
|
||||
return iop;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_free
|
||||
*
|
||||
* This routine frees the resources associated with an IOP (file descriptor)
|
||||
* and clears the slot in the IOP Table.
|
||||
*/
|
||||
|
||||
void rtems_libio_free(
|
||||
rtems_libio_t *iop
|
||||
)
|
||||
{
|
||||
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
|
||||
|
||||
if (iop->sem)
|
||||
rtems_semaphore_delete(iop->sem);
|
||||
|
||||
iop->flags &= ~LIBIO_FLAGS_OPEN;
|
||||
iop->data1 = rtems_libio_iop_freelist;
|
||||
rtems_libio_iop_freelist = iop;
|
||||
|
||||
rtems_semaphore_release(rtems_libio_semaphore);
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_is_open_files_in_fs
|
||||
*
|
||||
* This routine scans the entire file descriptor table to determine if the
|
||||
* are any active file descriptors that refer to the at least one node in the
|
||||
* file system that we are trying to dismount.
|
||||
*
|
||||
* If there is at least one node in the file system referenced by the mount
|
||||
* table entry a 1 is returned, otherwise a 0 is returned.
|
||||
*/
|
||||
|
||||
int rtems_libio_is_open_files_in_fs(
|
||||
rtems_filesystem_mount_table_entry_t * fs_mt_entry
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
int result = 0;
|
||||
int i;
|
||||
|
||||
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
|
||||
|
||||
/*
|
||||
* Look for any active file descriptor entry.
|
||||
*/
|
||||
|
||||
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
|
||||
|
||||
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
|
||||
|
||||
/*
|
||||
* Check if this node is under the file system that we
|
||||
* are trying to dismount.
|
||||
*/
|
||||
|
||||
if ( iop->pathinfo.mt_entry == fs_mt_entry ) {
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rtems_semaphore_release( rtems_libio_semaphore );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtems_libio_is_file_open
|
||||
*
|
||||
* This routine scans the entire file descriptor table to determine if the
|
||||
* given file refers to an active file descriptor.
|
||||
*
|
||||
* If the given file is open a 1 is returned, otherwise a 0 is returned.
|
||||
*/
|
||||
|
||||
int rtems_libio_is_file_open(
|
||||
void *node_access
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
int result=0;
|
||||
int i;
|
||||
|
||||
rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
|
||||
|
||||
/*
|
||||
* Look for any active file descriptor entry.
|
||||
*/
|
||||
|
||||
for (iop=rtems_libio_iops,i=0; i < rtems_libio_number_iops; iop++, i++){
|
||||
if ((iop->flags & LIBIO_FLAGS_OPEN) != 0) {
|
||||
|
||||
/*
|
||||
* Check if this node is under the file system that we
|
||||
* are trying to dismount.
|
||||
*/
|
||||
|
||||
if ( iop->pathinfo.node_access == node_access ) {
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rtems_semaphore_release( rtems_libio_semaphore );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* This file contains the support infrastructure used to manage the
|
||||
* table of integer style file descriptors used by the socket calls.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/libio_.h> /* libio_.h pulls in rtems */
|
||||
#include <rtems.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/*
|
||||
* Convert an RTEMS file descriptor to a BSD socket pointer.
|
||||
*/
|
||||
|
||||
struct socket *rtems_bsdnet_fdToSocket(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
|
||||
/* same as rtems_libio_check_fd(_fd) but different return */
|
||||
if ((unsigned32)fd >= rtems_libio_number_iops) {
|
||||
errno = EBADF;
|
||||
return NULL;
|
||||
}
|
||||
iop = &rtems_libio_iops[fd];
|
||||
|
||||
/* same as rtems_libio_check_is_open(iop) but different return */
|
||||
if ((iop->flags & LIBIO_FLAGS_OPEN) == 0) {
|
||||
errno = EBADF;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (iop->data1 == NULL)
|
||||
errno = EBADF;
|
||||
return iop->data1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create an RTEMS file descriptor for a socket
|
||||
*/
|
||||
|
||||
int rtems_bsdnet_makeFdForSocket(
|
||||
void *so,
|
||||
const rtems_filesystem_file_handlers_r *h
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
int fd;
|
||||
|
||||
iop = rtems_libio_allocate();
|
||||
if (iop == 0) {
|
||||
errno = ENFILE;
|
||||
return -1;
|
||||
}
|
||||
fd = iop - rtems_libio_iops;
|
||||
iop->flags |= LIBIO_FLAGS_WRITE | LIBIO_FLAGS_READ;
|
||||
iop->data0 = fd;
|
||||
iop->data1 = so;
|
||||
iop->handlers = (rtems_filesystem_file_handlers_r *) h;
|
||||
return fd;
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
/*
|
||||
* link() - POSIX 1003.1b - 5.3.4 - Create a new link
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int link(
|
||||
const char *existing,
|
||||
const char *new
|
||||
)
|
||||
{
|
||||
rtems_filesystem_location_info_t existing_loc;
|
||||
rtems_filesystem_location_info_t parent_loc;
|
||||
int i;
|
||||
int result;
|
||||
const char *name_start;
|
||||
|
||||
/*
|
||||
* Get the node we are linking to.
|
||||
*/
|
||||
|
||||
result = rtems_filesystem_evaluate_path( existing, 0, &existing_loc, TRUE );
|
||||
if ( result != 0 )
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* Get the parent of the node we are creating.
|
||||
*/
|
||||
|
||||
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
|
||||
|
||||
if ( !parent_loc.ops->evalformake_h ) {
|
||||
rtems_filesystem_freenode( &existing_loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*parent_loc.ops->evalformake_h)( &new[i], &parent_loc, &name_start );
|
||||
if ( result != 0 ) {
|
||||
rtems_filesystem_freenode( &existing_loc );
|
||||
rtems_set_errno_and_return_minus_one( result );
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see if the caller is trying to link across file system
|
||||
* boundaries.
|
||||
*/
|
||||
|
||||
if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
|
||||
rtems_filesystem_freenode( &existing_loc );
|
||||
rtems_filesystem_freenode( &parent_loc );
|
||||
rtems_set_errno_and_return_minus_one( EXDEV );
|
||||
}
|
||||
|
||||
if ( !parent_loc.ops->link_h ) {
|
||||
rtems_filesystem_freenode( &existing_loc );
|
||||
rtems_filesystem_freenode( &parent_loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*parent_loc.ops->link_h)( &existing_loc, &parent_loc, name_start );
|
||||
|
||||
rtems_filesystem_freenode( &existing_loc );
|
||||
rtems_filesystem_freenode( &parent_loc );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* _link_r
|
||||
*
|
||||
* This is the Newlib dependent reentrant version of link().
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <reent.h>
|
||||
|
||||
int _link_r(
|
||||
struct _reent *ptr,
|
||||
const char *existing,
|
||||
const char *new
|
||||
)
|
||||
{
|
||||
return link( existing, new );
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
/*
|
||||
* lseek() - POSIX 1003.1b 6.5.3 - Reposition Read/Write File Offset
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
off_t lseek(
|
||||
int fd,
|
||||
off_t offset,
|
||||
int whence
|
||||
)
|
||||
{
|
||||
rtems_libio_t *iop;
|
||||
off_t old_offset;
|
||||
off_t status;
|
||||
|
||||
rtems_libio_check_fd( fd );
|
||||
iop = rtems_libio_iop( fd );
|
||||
rtems_libio_check_is_open(iop);
|
||||
|
||||
/*
|
||||
* Check as many errors as possible before touching iop->offset.
|
||||
*/
|
||||
|
||||
if ( !iop->handlers->lseek_h )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
/*
|
||||
* Now process the lseek().
|
||||
*/
|
||||
|
||||
old_offset = iop->offset;
|
||||
switch ( whence ) {
|
||||
case SEEK_SET:
|
||||
iop->offset = offset;
|
||||
break;
|
||||
|
||||
case SEEK_CUR:
|
||||
iop->offset += offset;
|
||||
break;
|
||||
|
||||
case SEEK_END:
|
||||
iop->offset = iop->size + offset;
|
||||
break;
|
||||
|
||||
default:
|
||||
rtems_set_errno_and_return_minus_one( EINVAL );
|
||||
}
|
||||
|
||||
/*
|
||||
* At this time, handlers assume iop->offset has the desired
|
||||
* new offset.
|
||||
*/
|
||||
|
||||
status = (*iop->handlers->lseek_h)( iop, offset, whence );
|
||||
if ( status == (off_t) -1 )
|
||||
iop->offset = old_offset;
|
||||
|
||||
/*
|
||||
* So if the operation failed, we have to restore iop->offset.
|
||||
*/
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* _lseek_r
|
||||
*
|
||||
* This is the Newlib dependent reentrant version of lseek().
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
#include <reent.h>
|
||||
|
||||
off_t _lseek_r(
|
||||
struct _reent *ptr,
|
||||
int fd,
|
||||
off_t offset,
|
||||
int whence
|
||||
)
|
||||
{
|
||||
return lseek( fd, offset, whence );
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* lstat() - BSD 4.3 and SVR4 - Get File Status
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define _STAT_NAME lstat
|
||||
#define _STAT_R_NAME _lstat_r
|
||||
#define _STAT_FOLLOW_LINKS FALSE
|
||||
|
||||
#include "stat.c"
|
||||
@@ -1,426 +0,0 @@
|
||||
/*
|
||||
* RTEMS Malloc Family Implementation
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
#include <rtems.h>
|
||||
#include <rtems/libcsupport.h>
|
||||
#ifdef RTEMS_NEWLIB
|
||||
#include <sys/reent.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <unistd.h> /* sbrk(2) */
|
||||
|
||||
rtems_id RTEMS_Malloc_Heap;
|
||||
size_t RTEMS_Malloc_Sbrk_amount;
|
||||
|
||||
#ifdef RTEMS_DEBUG
|
||||
#define MALLOC_STATS
|
||||
#define MALLOC_DIRTY
|
||||
#endif
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
#define MSBUMP(f,n) rtems_malloc_stats.f += (n)
|
||||
|
||||
struct {
|
||||
unsigned32 space_available; /* current size of malloc area */
|
||||
unsigned32 malloc_calls; /* # calls to malloc */
|
||||
unsigned32 free_calls;
|
||||
unsigned32 realloc_calls;
|
||||
unsigned32 calloc_calls;
|
||||
unsigned32 max_depth; /* most ever malloc'd at 1 time */
|
||||
unsigned64 lifetime_allocated;
|
||||
unsigned64 lifetime_freed;
|
||||
} rtems_malloc_stats;
|
||||
|
||||
#else /* No rtems_malloc_stats */
|
||||
#define MSBUMP(f,n)
|
||||
#endif
|
||||
|
||||
void RTEMS_Malloc_Initialize(
|
||||
void *start,
|
||||
size_t length,
|
||||
size_t sbrk_amount
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
void *starting_address;
|
||||
rtems_unsigned32 old_address;
|
||||
rtems_unsigned32 u32_address;
|
||||
|
||||
/*
|
||||
* If the starting address is 0 then we are to attempt to
|
||||
* get length worth of memory using sbrk. Make sure we
|
||||
* align the address that we get back.
|
||||
*/
|
||||
|
||||
starting_address = start;
|
||||
RTEMS_Malloc_Sbrk_amount = sbrk_amount;
|
||||
|
||||
if (!starting_address) {
|
||||
u32_address = (unsigned int)sbrk(length);
|
||||
|
||||
if (u32_address == (rtems_unsigned32) -1) {
|
||||
rtems_fatal_error_occurred( RTEMS_NO_MEMORY );
|
||||
/* DOES NOT RETURN!!! */
|
||||
}
|
||||
|
||||
if (u32_address & (CPU_HEAP_ALIGNMENT-1)) {
|
||||
old_address = u32_address;
|
||||
u32_address = (u32_address + CPU_HEAP_ALIGNMENT) & ~(CPU_HEAP_ALIGNMENT-1);
|
||||
|
||||
/*
|
||||
* adjust the length by whatever we aligned by
|
||||
*/
|
||||
|
||||
length -= u32_address - old_address;
|
||||
}
|
||||
|
||||
starting_address = (void *)u32_address;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the BSP is not clearing out the workspace, then it is most likely
|
||||
* not clearing out the initial memory for the heap. There is no
|
||||
* standard supporting zeroing out the heap memory. But much code
|
||||
* with UNIX history seems to assume that memory malloc'ed during
|
||||
* initialization (before any free's) is zero'ed. This is true most
|
||||
* of the time under UNIX because zero'ing memory when it is first
|
||||
* given to a process eliminates the chance of a process seeing data
|
||||
* left over from another process. This would be a security violation.
|
||||
*/
|
||||
|
||||
if ( rtems_cpu_configuration_get_do_zero_of_workspace() )
|
||||
memset( starting_address, 0, length );
|
||||
|
||||
/*
|
||||
* Unfortunately we cannot use assert if this fails because if this
|
||||
* has failed we do not have a heap and if we do not have a heap
|
||||
* STDIO cannot work because there will be no buffers.
|
||||
*/
|
||||
|
||||
status = rtems_region_create(
|
||||
rtems_build_name( 'H', 'E', 'A', 'P' ),
|
||||
starting_address,
|
||||
length,
|
||||
CPU_HEAP_ALIGNMENT,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&RTEMS_Malloc_Heap
|
||||
);
|
||||
if ( status != RTEMS_SUCCESSFUL )
|
||||
rtems_fatal_error_occurred( status );
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
/* zero all the stats */
|
||||
(void) memset( &rtems_malloc_stats, 0, sizeof(rtems_malloc_stats) );
|
||||
#endif
|
||||
|
||||
MSBUMP(space_available, length);
|
||||
}
|
||||
|
||||
#ifdef RTEMS_NEWLIB
|
||||
void *malloc(
|
||||
size_t size
|
||||
)
|
||||
{
|
||||
void *return_this;
|
||||
void *starting_address;
|
||||
rtems_unsigned32 the_size;
|
||||
rtems_unsigned32 sbrk_amount;
|
||||
rtems_status_code status;
|
||||
|
||||
MSBUMP(malloc_calls, 1);
|
||||
|
||||
if ( !size )
|
||||
return (void *) 0;
|
||||
|
||||
/*
|
||||
* Try to give a segment in the current region if there is not
|
||||
* enough space then try to grow the region using rtems_region_extend().
|
||||
* If this fails then return a NULL pointer.
|
||||
*/
|
||||
|
||||
status = rtems_region_get_segment(
|
||||
RTEMS_Malloc_Heap,
|
||||
size,
|
||||
RTEMS_NO_WAIT,
|
||||
RTEMS_NO_TIMEOUT,
|
||||
&return_this
|
||||
);
|
||||
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
/*
|
||||
* Round to the "requested sbrk amount" so hopefully we won't have
|
||||
* to grow again for a while. This effectively does sbrk() calls
|
||||
* in "page" amounts.
|
||||
*/
|
||||
|
||||
sbrk_amount = RTEMS_Malloc_Sbrk_amount;
|
||||
|
||||
if ( sbrk_amount == 0 )
|
||||
return (void *) 0;
|
||||
|
||||
the_size = ((size + sbrk_amount) / sbrk_amount * sbrk_amount);
|
||||
|
||||
if (((rtems_unsigned32)starting_address = (void *)sbrk(the_size))
|
||||
== (rtems_unsigned32) -1)
|
||||
return (void *) 0;
|
||||
|
||||
status = rtems_region_extend(
|
||||
RTEMS_Malloc_Heap,
|
||||
starting_address,
|
||||
the_size
|
||||
);
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
sbrk(-the_size);
|
||||
errno = ENOMEM;
|
||||
return (void *) 0;
|
||||
}
|
||||
|
||||
MSBUMP(space_available, the_size);
|
||||
|
||||
status = rtems_region_get_segment(
|
||||
RTEMS_Malloc_Heap,
|
||||
size,
|
||||
RTEMS_NO_WAIT,
|
||||
RTEMS_NO_TIMEOUT,
|
||||
&return_this
|
||||
);
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
errno = ENOMEM;
|
||||
return (void *) 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
if (return_this)
|
||||
{
|
||||
unsigned32 actual_size;
|
||||
unsigned32 current_depth;
|
||||
status = rtems_region_get_segment_size(
|
||||
RTEMS_Malloc_Heap, return_this, &actual_size);
|
||||
MSBUMP(lifetime_allocated, actual_size);
|
||||
current_depth = rtems_malloc_stats.lifetime_allocated -
|
||||
rtems_malloc_stats.lifetime_freed;
|
||||
if (current_depth > rtems_malloc_stats.max_depth)
|
||||
rtems_malloc_stats.max_depth = current_depth;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MALLOC_DIRTY
|
||||
(void) memset(return_this, 0xCF, size);
|
||||
#endif
|
||||
|
||||
return return_this;
|
||||
}
|
||||
|
||||
void *calloc(
|
||||
size_t nelem,
|
||||
size_t elsize
|
||||
)
|
||||
{
|
||||
register char *cptr;
|
||||
int length;
|
||||
|
||||
MSBUMP(calloc_calls, 1);
|
||||
|
||||
length = nelem * elsize;
|
||||
cptr = malloc( length );
|
||||
if ( cptr )
|
||||
memset( cptr, '\0', length );
|
||||
|
||||
MSBUMP(malloc_calls, -1); /* subtract off the malloc */
|
||||
|
||||
return cptr;
|
||||
}
|
||||
|
||||
void *realloc(
|
||||
void *ptr,
|
||||
size_t size
|
||||
)
|
||||
{
|
||||
rtems_unsigned32 old_size;
|
||||
rtems_status_code status;
|
||||
char *new_area;
|
||||
|
||||
MSBUMP(realloc_calls, 1);
|
||||
|
||||
if ( !ptr )
|
||||
return malloc( size );
|
||||
|
||||
if ( !size ) {
|
||||
free( ptr );
|
||||
return (void *) 0;
|
||||
}
|
||||
|
||||
new_area = malloc( size );
|
||||
|
||||
MSBUMP(malloc_calls, -1); /* subtract off the malloc */
|
||||
|
||||
if ( !new_area ) {
|
||||
free( ptr );
|
||||
return (void *) 0;
|
||||
}
|
||||
|
||||
status = rtems_region_get_segment_size( RTEMS_Malloc_Heap, ptr, &old_size );
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
errno = EINVAL;
|
||||
return (void *) 0;
|
||||
}
|
||||
|
||||
memcpy( new_area, ptr, (size < old_size) ? size : old_size );
|
||||
free( ptr );
|
||||
|
||||
return new_area;
|
||||
|
||||
}
|
||||
|
||||
void free(
|
||||
void *ptr
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
|
||||
MSBUMP(free_calls, 1);
|
||||
|
||||
if ( !ptr )
|
||||
return;
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
{
|
||||
unsigned32 size;
|
||||
status = rtems_region_get_segment_size( RTEMS_Malloc_Heap, ptr, &size );
|
||||
if ( status == RTEMS_SUCCESSFUL ) {
|
||||
MSBUMP(lifetime_freed, size);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
status = rtems_region_return_segment( RTEMS_Malloc_Heap, ptr );
|
||||
if ( status != RTEMS_SUCCESSFUL ) {
|
||||
errno = EINVAL;
|
||||
assert( 0 );
|
||||
}
|
||||
}
|
||||
/* end if RTEMS_NEWLIB */
|
||||
#endif
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
/*
|
||||
* Dump the malloc statistics
|
||||
* May be called via atexit() (installable by our bsp) or
|
||||
* at any time by user
|
||||
*/
|
||||
|
||||
void malloc_dump(void)
|
||||
{
|
||||
unsigned32 allocated = rtems_malloc_stats.lifetime_allocated -
|
||||
rtems_malloc_stats.lifetime_freed;
|
||||
|
||||
printf("Malloc stats\n");
|
||||
printf(" avail:%uk allocated:%uk (%d%%) "
|
||||
"max:%uk (%d%%) lifetime:%Luk freed:%Luk\n",
|
||||
(unsigned int) rtems_malloc_stats.space_available / 1024,
|
||||
(unsigned int) allocated / 1024,
|
||||
/* avoid float! */
|
||||
(allocated * 100) / rtems_malloc_stats.space_available,
|
||||
(unsigned int) rtems_malloc_stats.max_depth / 1024,
|
||||
(rtems_malloc_stats.max_depth * 100) / rtems_malloc_stats.space_available,
|
||||
(unsigned64) rtems_malloc_stats.lifetime_allocated / 1024,
|
||||
(unsigned64) rtems_malloc_stats.lifetime_freed / 1024);
|
||||
printf(" Call counts: malloc:%d free:%d realloc:%d calloc:%d\n",
|
||||
rtems_malloc_stats.malloc_calls,
|
||||
rtems_malloc_stats.free_calls,
|
||||
rtems_malloc_stats.realloc_calls,
|
||||
rtems_malloc_stats.calloc_calls);
|
||||
}
|
||||
|
||||
|
||||
void malloc_walk(size_t source, size_t printf_enabled)
|
||||
{
|
||||
register Region_Control *the_region;
|
||||
Objects_Locations location;
|
||||
|
||||
the_region = _Region_Get( RTEMS_Malloc_Heap, &location );
|
||||
if ( location == OBJECTS_LOCAL )
|
||||
{
|
||||
_Heap_Walk( &the_region->Memory, source, printf_enabled );
|
||||
_Thread_Enable_dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void malloc_dump(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void malloc_walk(size_t source, size_t printf_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "Reentrant" versions of the above routines implemented above.
|
||||
*/
|
||||
|
||||
#ifdef RTEMS_NEWLIB
|
||||
void *_malloc_r(
|
||||
struct _reent *ignored,
|
||||
size_t size
|
||||
)
|
||||
{
|
||||
return malloc( size );
|
||||
}
|
||||
|
||||
void *_calloc_r(
|
||||
struct _reent *ignored,
|
||||
size_t nelem,
|
||||
size_t elsize
|
||||
)
|
||||
{
|
||||
return calloc( nelem, elsize );
|
||||
}
|
||||
|
||||
void *_realloc_r(
|
||||
struct _reent *ignored,
|
||||
void *ptr,
|
||||
size_t size
|
||||
)
|
||||
{
|
||||
return realloc( ptr, size );
|
||||
}
|
||||
|
||||
void _free_r(
|
||||
struct _reent *ignored,
|
||||
void *ptr
|
||||
)
|
||||
{
|
||||
free( ptr );
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* RTEMS Malloc Get Status Information
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2000.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
#include <rtems.h>
|
||||
#include <rtems/libcsupport.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
extern rtems_id RTEMS_Malloc_Heap;
|
||||
|
||||
/*
|
||||
* Find amount of free heap remaining
|
||||
*/
|
||||
|
||||
size_t malloc_free_space( void )
|
||||
{
|
||||
region_information_block heap_info;
|
||||
|
||||
if ( rtems_region_get_information( RTEMS_Malloc_Heap, &heap_info ) ) {
|
||||
return (size_t) heap_info.free_size;
|
||||
}
|
||||
return (size_t) -1;
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* mkdir() - POSIX 1003.1b 5.4.1 - Make a Directory
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int mkdir(
|
||||
const char *pathname,
|
||||
mode_t mode
|
||||
)
|
||||
{
|
||||
return mknod( pathname, mode | S_IFDIR, 0LL);
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* mkfifo() - POSIX 1003.1b 5.4.1 - Make a FIFO Special File
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
|
||||
int mkfifo(
|
||||
const char *path,
|
||||
mode_t mode
|
||||
)
|
||||
{
|
||||
return mknod( path, mode | S_IFIFO, 0LL );
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
/*
|
||||
* mknod()
|
||||
*
|
||||
* This routine is not defined in the POSIX 1003.1b standard but is
|
||||
* commonly supported on most UNIX and POSIX systems. It is the
|
||||
* foundation for creating file system objects.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
#include <rtems/seterr.h>
|
||||
|
||||
int mknod(
|
||||
const char *pathname,
|
||||
mode_t mode,
|
||||
dev_t dev
|
||||
)
|
||||
{
|
||||
rtems_filesystem_location_info_t temp_loc;
|
||||
int i;
|
||||
const char *name_start;
|
||||
int result;
|
||||
|
||||
if ( !(mode & (S_IFREG|S_IFCHR|S_IFBLK|S_IFIFO) ) )
|
||||
rtems_set_errno_and_return_minus_one( EINVAL );
|
||||
|
||||
if ( S_ISFIFO(mode) )
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
|
||||
rtems_filesystem_get_start_loc( pathname, &i, &temp_loc );
|
||||
|
||||
if ( !temp_loc.ops->evalformake_h ) {
|
||||
rtems_filesystem_freenode( &temp_loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*temp_loc.ops->evalformake_h)(
|
||||
&pathname[i],
|
||||
&temp_loc,
|
||||
&name_start
|
||||
);
|
||||
if ( result != 0 )
|
||||
return -1;
|
||||
|
||||
if ( !temp_loc.ops->mknod_h ) {
|
||||
rtems_filesystem_freenode( &temp_loc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc );
|
||||
|
||||
rtems_filesystem_freenode( &temp_loc );
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,274 +0,0 @@
|
||||
/*
|
||||
* mount()
|
||||
*
|
||||
* XXX
|
||||
*
|
||||
* XXX make sure no required ops are NULL
|
||||
* XXX make sure no optional ops you are using are NULL
|
||||
* XXX unmount should be required.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <chain.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <rtems/libio_.h>
|
||||
|
||||
Chain_Control rtems_filesystem_mount_table_control;
|
||||
|
||||
/*
|
||||
* Prototypes that probably should be somewhere else.
|
||||
*/
|
||||
|
||||
int init_fs_mount_table( void );
|
||||
static int Is_node_fs_root(
|
||||
rtems_filesystem_location_info_t *loc
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* XXX
|
||||
*/
|
||||
|
||||
#define FOUND 0
|
||||
#define NOT_FOUND -1
|
||||
|
||||
/*
|
||||
* mount
|
||||
*
|
||||
* This routine will attempt to mount a new file system at the specified
|
||||
* mount point. A series of tests will be run to determine if any of the
|
||||
* following reasons exist to prevent the mount operation:
|
||||
*
|
||||
* 1) The file system type or options are not valid
|
||||
* 2) No new file system root node is specified
|
||||
* 3) The selected file system has already been mounted
|
||||
* 4) The mount point exists with the proper permissions to allow mounting
|
||||
* 5) The selected mount point already has a file system mounted to it
|
||||
*
|
||||
*/
|
||||
|
||||
int mount(
|
||||
rtems_filesystem_mount_table_entry_t **mt_entry,
|
||||
rtems_filesystem_operations_table *fs_ops,
|
||||
rtems_filesystem_options_t options,
|
||||
char *device,
|
||||
char *mount_point
|
||||
)
|
||||
{
|
||||
rtems_filesystem_location_info_t loc;
|
||||
rtems_filesystem_mount_table_entry_t *temp_mt_entry;
|
||||
rtems_filesystem_location_info_t *loc_to_free = NULL;
|
||||
size_t size;
|
||||
|
||||
/* XXX add code to check for required operations */
|
||||
|
||||
/*
|
||||
* Is there a file system operations table?
|
||||
*/
|
||||
|
||||
if ( fs_ops == NULL ) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Are the file system options valid?
|
||||
*/
|
||||
|
||||
if ( options != RTEMS_FILESYSTEM_READ_ONLY &&
|
||||
options != RTEMS_FILESYSTEM_READ_WRITE ) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a mount table entry
|
||||
*/
|
||||
|
||||
size = sizeof(rtems_filesystem_mount_table_entry_t);
|
||||
if ( device )
|
||||
size += strlen( device ) + 1;
|
||||
temp_mt_entry = malloc( size );
|
||||
|
||||
if ( !temp_mt_entry ) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
}
|
||||
|
||||
temp_mt_entry->mt_fs_root.mt_entry = temp_mt_entry;
|
||||
temp_mt_entry->options = options;
|
||||
if ( device ) {
|
||||
temp_mt_entry->dev =
|
||||
(char *)temp_mt_entry + sizeof( rtems_filesystem_mount_table_entry_t );
|
||||
strcpy( temp_mt_entry->dev, device );
|
||||
} else
|
||||
temp_mt_entry->dev = 0;
|
||||
|
||||
/*
|
||||
* The mount_point should be a directory with read/write/execute
|
||||
* permissions in the existing tree.
|
||||
*/
|
||||
|
||||
if ( mount_point ) {
|
||||
|
||||
if ( rtems_filesystem_evaluate_path(
|
||||
mount_point, RTEMS_LIBIO_PERMS_RWX, &loc, TRUE ) == -1 )
|
||||
goto cleanup_and_bail;
|
||||
|
||||
/*
|
||||
* Test to see if it is a directory
|
||||
*/
|
||||
|
||||
loc_to_free = &loc;
|
||||
if ( loc.ops->node_type_h( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
|
||||
errno = ENOTDIR;
|
||||
goto cleanup_and_bail;
|
||||
}
|
||||
|
||||
/*
|
||||
* You can only mount one file system onto a single mount point.
|
||||
*/
|
||||
|
||||
if ( Is_node_fs_root( &loc ) ){
|
||||
errno = EBUSY;
|
||||
goto cleanup_and_bail;
|
||||
}
|
||||
|
||||
/*
|
||||
* This must be a good mount point, so move the location information
|
||||
* into the allocated mount entry. Note: the information that
|
||||
* may have been allocated in loc should not be sent to freenode
|
||||
* until the system is unmounted. It may be needed to correctly
|
||||
* traverse the tree.
|
||||
*/
|
||||
|
||||
temp_mt_entry->mt_point_node.node_access = loc.node_access;
|
||||
temp_mt_entry->mt_point_node.handlers = loc.handlers;
|
||||
temp_mt_entry->mt_point_node.ops = loc.ops;
|
||||
temp_mt_entry->mt_point_node.mt_entry = loc.mt_entry;
|
||||
|
||||
/*
|
||||
* This link to the parent is only done when we are dealing with system
|
||||
* below the base file system
|
||||
*/
|
||||
|
||||
if ( !loc.ops->mount_h ){
|
||||
errno = ENOTSUP;
|
||||
goto cleanup_and_bail;
|
||||
}
|
||||
|
||||
if ( loc.ops->mount_h( temp_mt_entry ) ) {
|
||||
goto cleanup_and_bail;
|
||||
}
|
||||
} else {
|
||||
|
||||
/*
|
||||
* This is a mount of the base file system --> The
|
||||
* mt_point_node.node_access will be set to null to indicate that this
|
||||
* is the root of the entire file system.
|
||||
*/
|
||||
|
||||
temp_mt_entry->mt_fs_root.node_access = NULL;
|
||||
temp_mt_entry->mt_fs_root.handlers = NULL;
|
||||
temp_mt_entry->mt_fs_root.ops = NULL;
|
||||
|
||||
temp_mt_entry->mt_point_node.node_access = NULL;
|
||||
temp_mt_entry->mt_point_node.handlers = NULL;
|
||||
temp_mt_entry->mt_point_node.ops = NULL;
|
||||
temp_mt_entry->mt_point_node.mt_entry = NULL;
|
||||
}
|
||||
|
||||
if ( !fs_ops->fsmount_me_h ) {
|
||||
errno = ENOTSUP;
|
||||
goto cleanup_and_bail;
|
||||
}
|
||||
|
||||
if ( fs_ops->fsmount_me_h( temp_mt_entry ) )
|
||||
goto cleanup_and_bail;
|
||||
|
||||
/*
|
||||
* Add the mount table entry to the mount table chain
|
||||
*/
|
||||
|
||||
Chain_Append( &rtems_filesystem_mount_table_control, &temp_mt_entry->Node );
|
||||
|
||||
*mt_entry = temp_mt_entry;
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup_and_bail:
|
||||
|
||||
free( temp_mt_entry );
|
||||
|
||||
if ( loc_to_free )
|
||||
rtems_filesystem_freenode( loc_to_free );
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* init_fs_mount_table
|
||||
*
|
||||
* This routine will initialize the chain control element that manages the
|
||||
* mount table chain.
|
||||
*/
|
||||
|
||||
int init_fs_mount_table()
|
||||
{
|
||||
Chain_Initialize_empty ( &rtems_filesystem_mount_table_control );
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is_node_fs_root
|
||||
*
|
||||
* This routine will run through the entries that currently exist in the
|
||||
* mount table chain. For each entry in the mount table chain it will
|
||||
* compare the mount tables root node to the node describing the selected
|
||||
* mount point. If any match is found true is returned else false is
|
||||
* returned.
|
||||
*
|
||||
*/
|
||||
|
||||
static int Is_node_fs_root(
|
||||
rtems_filesystem_location_info_t *loc
|
||||
)
|
||||
{
|
||||
Chain_Node *the_node;
|
||||
rtems_filesystem_mount_table_entry_t *the_mount_entry;
|
||||
|
||||
/*
|
||||
* For each mount table entry
|
||||
*/
|
||||
|
||||
for ( the_node = rtems_filesystem_mount_table_control.first;
|
||||
!Chain_Is_tail( &rtems_filesystem_mount_table_control, the_node );
|
||||
the_node = the_node->next ) {
|
||||
the_mount_entry = (rtems_filesystem_mount_table_entry_t *) the_node;
|
||||
if ( the_mount_entry->mt_fs_root.node_access == loc->node_access )
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1,334 +0,0 @@
|
||||
/*
|
||||
* Implementation of hooks for the CYGNUS newlib libc
|
||||
* These hooks set things up so that:
|
||||
* + '_REENT' is switched at task switch time.
|
||||
*
|
||||
* COPYRIGHT (c) 1994 by Division Incorporated
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
#include <rtems.h>
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
#include <rtems/libcsupport.h>
|
||||
#include <stdlib.h> /* for free() */
|
||||
#include <string.h> /* for memset() */
|
||||
|
||||
#include <sys/reent.h> /* for extern of _REENT (aka _impure_ptr) */
|
||||
#include <errno.h>
|
||||
|
||||
/*
|
||||
* NOTE:
|
||||
* There is some problem with doing this on the hpux version
|
||||
* of the UNIX simulator (symptom is printf core dumps), so
|
||||
* we just don't for now.
|
||||
* Not sure if this is a problem with hpux, newlib, or something else.
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_UNIX) && !defined(hpux)
|
||||
#define NEED_SETVBUF
|
||||
#endif
|
||||
|
||||
#ifdef NEED_SETVBUF
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
int libc_reentrant; /* do we think we are reentrant? */
|
||||
struct _reent libc_global_reent;
|
||||
|
||||
/*
|
||||
* CYGNUS newlib routine that does atexit() processing and flushes
|
||||
* stdio streams
|
||||
* undocumented
|
||||
*/
|
||||
|
||||
extern void _wrapup_reent(struct _reent *);
|
||||
extern void _reclaim_reent(struct _reent *);
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void libc_wrapup(void)
|
||||
{
|
||||
/*
|
||||
* In case RTEMS is already down, don't do this. It could be
|
||||
* dangerous.
|
||||
*/
|
||||
|
||||
if (!_System_state_Is_up(_System_state_Get()))
|
||||
return;
|
||||
|
||||
/*
|
||||
* This was already done if the user called exit() directly .
|
||||
_wrapup_reent(0);
|
||||
*/
|
||||
|
||||
if (_REENT != &libc_global_reent) {
|
||||
_wrapup_reent(&libc_global_reent);
|
||||
#if 0
|
||||
/* Don't reclaim this one, just in case we do printfs
|
||||
* on the way out to ROM.
|
||||
*/
|
||||
_reclaim_reent(&libc_global_reent);
|
||||
#endif
|
||||
_REENT = &libc_global_reent;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to drain output buffers.
|
||||
*
|
||||
* Should this be changed to do *all* file streams?
|
||||
* _fwalk (_REENT, fclose);
|
||||
*/
|
||||
|
||||
fclose (stdin);
|
||||
fclose (stdout);
|
||||
fclose (stderr);
|
||||
}
|
||||
|
||||
|
||||
rtems_boolean libc_create_hook(
|
||||
rtems_tcb *current_task,
|
||||
rtems_tcb *creating_task
|
||||
)
|
||||
{
|
||||
creating_task->libc_reent = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Called for all user TASKS (system tasks are MPCI Receive Server and IDLE)
|
||||
*/
|
||||
|
||||
rtems_extension libc_start_hook(
|
||||
rtems_tcb *current_task,
|
||||
rtems_tcb *starting_task
|
||||
)
|
||||
{
|
||||
struct _reent *ptr;
|
||||
|
||||
/* NOTE: The RTEMS malloc is reentrant without a reent ptr since
|
||||
* it is based on the Classic API Region Manager.
|
||||
*/
|
||||
|
||||
ptr = (struct _reent *) calloc(1, sizeof(struct _reent));
|
||||
|
||||
if (!ptr)
|
||||
rtems_fatal_error_occurred(RTEMS_NO_MEMORY);
|
||||
|
||||
#ifdef __GNUC__
|
||||
/* GCC extension: structure constants */
|
||||
*ptr = (struct _reent) _REENT_INIT((*ptr));
|
||||
#else
|
||||
/*
|
||||
* WARNING: THIS IS VERY DEPENDENT ON NEWLIB!!!
|
||||
* Last visual check was against newlib 1.8.2 but last known
|
||||
* use was against 1.7.0. This is basically an exansion of
|
||||
* REENT_INIT() in <sys/reent.h>.
|
||||
* NOTE: calloc() takes care of zeroing fields.
|
||||
*/
|
||||
ptr->_stdin = &ptr->__sf[0];
|
||||
ptr->_stdout = &ptr->__sf[1];
|
||||
ptr->_stderr = &ptr->__sf[2];
|
||||
ptr->_current_locale = "C";
|
||||
ptr->_new._reent._rand_next = 1;
|
||||
#endif
|
||||
|
||||
starting_task->libc_reent = ptr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Called for all user TASKS (system tasks are MPCI Receive Server and IDLE)
|
||||
*/
|
||||
|
||||
#ifdef NEED_SETVBUF
|
||||
rtems_extension libc_begin_hook(rtems_tcb *current_task)
|
||||
{
|
||||
setvbuf( stdout, NULL, _IOLBF, BUFSIZ );
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Function: libc_delete_hook
|
||||
* Created: 94/12/10
|
||||
*
|
||||
* Description:
|
||||
* Called when a task is deleted.
|
||||
* Must restore the new lib reentrancy state for the new current
|
||||
* task.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
*
|
||||
* Side Effects:
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
*
|
||||
* Deficiencies/ToDo:
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
rtems_extension libc_delete_hook(
|
||||
rtems_tcb *current_task,
|
||||
rtems_tcb *deleted_task
|
||||
)
|
||||
{
|
||||
struct _reent *ptr;
|
||||
|
||||
/*
|
||||
* The reentrancy structure was allocated by newlib using malloc()
|
||||
*/
|
||||
|
||||
if (current_task == deleted_task) {
|
||||
ptr = _REENT;
|
||||
} else {
|
||||
ptr = (struct _reent *) deleted_task->libc_reent;
|
||||
}
|
||||
|
||||
/* if (ptr) */
|
||||
if (ptr && ptr != &libc_global_reent) {
|
||||
_wrapup_reent(ptr);
|
||||
_reclaim_reent(ptr);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
deleted_task->libc_reent = NULL;
|
||||
|
||||
/*
|
||||
* Require the switch back to another task to install its own
|
||||
*/
|
||||
|
||||
if ( current_task == deleted_task ) {
|
||||
_REENT = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: libc_init
|
||||
* Created: 94/12/10
|
||||
*
|
||||
* Description:
|
||||
* Init libc for CYGNUS newlib
|
||||
* Set up _REENT to use our global libc_global_reent.
|
||||
* (newlib provides a global of its own, but we prefer our
|
||||
* own name for it)
|
||||
*
|
||||
* If reentrancy is desired (which it should be), then
|
||||
* we install the task extension hooks to maintain the
|
||||
* newlib reentrancy global variable _REENT on task
|
||||
* create, delete, switch, exit, etc.
|
||||
*
|
||||
* Parameters:
|
||||
* reentrant non-zero if reentrant library desired.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* Side Effects:
|
||||
* installs libc extensions if reentrant.
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
*
|
||||
* Deficiencies/ToDo:
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
libc_init(int reentrant)
|
||||
{
|
||||
rtems_extensions_table libc_extension;
|
||||
rtems_status_code rc;
|
||||
rtems_id extension_id;
|
||||
|
||||
libc_global_reent = (struct _reent) _REENT_INIT((libc_global_reent));
|
||||
_REENT = &libc_global_reent;
|
||||
|
||||
if (reentrant) {
|
||||
memset(&libc_extension, 0, sizeof(libc_extension));
|
||||
|
||||
libc_extension.thread_create = libc_create_hook;
|
||||
libc_extension.thread_start = libc_start_hook;
|
||||
#ifdef NEED_SETVBUF
|
||||
libc_extension.thread_begin = libc_begin_hook;
|
||||
#endif
|
||||
libc_extension.thread_delete = libc_delete_hook;
|
||||
|
||||
_Thread_Set_libc_reent ((void**) &_REENT);
|
||||
|
||||
rc = rtems_extension_create(rtems_build_name('L', 'I', 'B', 'C'),
|
||||
&libc_extension, &extension_id);
|
||||
if (rc != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred( rc );
|
||||
|
||||
libc_reentrant = reentrant;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: _exit
|
||||
* Created: 94/12/10
|
||||
*
|
||||
* Description:
|
||||
* Called from exit() after it does atexit() processing and stdio fflush's
|
||||
*
|
||||
* called from bottom of exit() to really delete the task.
|
||||
* If we are using reentrant libc, then let the delete extension
|
||||
* do all the work, otherwise if a shutdown is in progress,
|
||||
* then just do it.
|
||||
*
|
||||
* Parameters:
|
||||
* exit status
|
||||
*
|
||||
* Returns:
|
||||
* does not return
|
||||
*
|
||||
* Side Effects:
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
*
|
||||
* Deficiencies/ToDo:
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#if !defined(RTEMS_UNIX)
|
||||
void _exit(int status)
|
||||
{
|
||||
/*
|
||||
* We need to do the exit processing on the global reentrancy structure.
|
||||
* This has already been done on the per task reentrancy structure
|
||||
* associated with this task.
|
||||
*/
|
||||
|
||||
libc_wrapup();
|
||||
rtems_shutdown_executive(status);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void exit(int status)
|
||||
{
|
||||
libc_wrapup();
|
||||
rtems_shutdown_executive(status);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user