diff options
Diffstat (limited to 'cpukit/libcsupport/include')
31 files changed, 4930 insertions, 0 deletions
diff --git a/cpukit/libcsupport/include/clockdrv.h b/cpukit/libcsupport/include/clockdrv.h new file mode 100644 index 0000000000..d0eb55e9f6 --- /dev/null +++ b/cpukit/libcsupport/include/clockdrv.h @@ -0,0 +1,52 @@ +/** + * @file rtems/clockdrv.h + */ + +/* 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_CLOCKDRV_H +#define _RTEMS_CLOCKDRV_H + +#include <rtems/io.h> /* rtems_device_driver */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* variables */ + +extern volatile uint32_t 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, NULL } + +rtems_device_driver Clock_initialize( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +void Clock_exit(void); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/console.h b/cpukit/libcsupport/include/console.h new file mode 100644 index 0000000000..0a2d258887 --- /dev/null +++ b/cpukit/libcsupport/include/console.h @@ -0,0 +1,162 @@ +/** + * @file rtems/console.h + */ + +/* 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_CONSOLE_H +#define _RTEMS_CONSOLE_H + +#include <rtems/io.h> /* rtems_device_driver */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This macro defines the standard name for the console device + * that is available to applications. + */ +#define CONSOLE_DEVICE_NAME "/dev/console" + +/** + * This macro defines the standard device driver table entry for + * a console device driver. + */ +#define CONSOLE_DRIVER_TABLE_ENTRY \ + { console_initialize, console_open, console_close, \ + console_read, console_write, console_control } + +/** + * @brief Console Initialization Entry Point + * + * This method initializes the console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver is successfully initialized. + */ +rtems_device_driver console_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Console Open Entry Point + * + * This method opens a specific device supported by the + * console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver is successfully opened. + */ +rtems_device_driver console_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Console Close Entry Point + * + * This method closes a specific device supported by the + * console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully closed. + */ +rtems_device_driver console_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Console Read Entry Point + * + * This method reads from a specific device supported by the + * console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully read from. + */ +rtems_device_driver console_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Console Write Entry Point + * + * This method writes to a specific device supported by the + * console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully written. + */ +rtems_device_driver console_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Console IO Control Entry Point + * + * This method performs an IO Control operation on a + * specific device supported by the console device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver IO control operation is + * successfully performed. + */ +rtems_device_driver console_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/iosupp.h b/cpukit/libcsupport/include/iosupp.h new file mode 100644 index 0000000000..cd2ff02e06 --- /dev/null +++ b/cpukit/libcsupport/include/iosupp.h @@ -0,0 +1,46 @@ +/** + * @file rtems/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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_IOSUPP_H +#define _RTEMS_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 diff --git a/cpukit/libcsupport/include/motorola/mc68230.h b/cpukit/libcsupport/include/motorola/mc68230.h new file mode 100644 index 0000000000..d993a150fd --- /dev/null +++ b/cpukit/libcsupport/include/motorola/mc68230.h @@ -0,0 +1,74 @@ +/** + * @file rtems/motorola/mc68230.h + */ + +/* + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_MOTOROLA_MC68230_H +#define _RTEMS_MOTOROLA_MC68230_H + +/* Some Motorola IDP User manual defines: */ +#define MC68230_PIT_ADDR 0x00c01003 /* base address of the PIT */ +#define MC68230_REGOFF 0x04 /* Difference between addresses */ +#define MC68230_VECT 64 +#define MC68230_H1VECT 0x00 +#define MC68230_H2VECT 0x01 +#define MC68230_H3VECT 0x02 +#define MC68230_H4VECT 0x03 + +/* + * mc68230 register offsets + */ +#define MC68230_PGCR 0x00 +#define MC68230_PSRR 1*MC68230_REGOFF +#define MC68230_PADDR 2*MC68230_REGOFF +#define MC68230_PBDDR 3*MC68230_REGOFF +#define MC68230_PCDDR 4*MC68230_REGOFF +#define MC68230_PIVR 5*MC68230_REGOFF +#define MC68230_PACR 6*MC68230_REGOFF +#define MC68230_PBCR 7*MC68230_REGOFF +#define MC68230_PADR 8*MC68230_REGOFF +#define MC68230_PBDR 9*MC68230_REGOFF +#define MC68230_PAAR 10*MC68230_REGOFF +#define MC68230_PBAR 11*MC68230_REGOFF +#define MC68230_PCDR 12*MC68230_REGOFF +#define MC68230_PITSR 13*MC68230_REGOFF +#define MC68230_TCR 16*MC68230_REGOFF +#define MC68230_TIVR 17*MC68230_REGOFF +#define MC68230_CPRH 19*MC68230_REGOFF +#define MC68230_CPRM 20*MC68230_REGOFF +#define MC68230_CPRL 21*MC68230_REGOFF +#define MC68230_CNTRH 23*MC68230_REGOFF +#define MC68230_CNTRM 24*MC68230_REGOFF +#define MC68230_CNTRL 25*MC68230_REGOFF +#define MC68230_TSR 26*MC68230_REGOFF + +/* Some RTEMS style defines: */ +#ifndef MC68230_VOL8 +#define MC68230_VOL8( ptr ) ((volatile uint8_t *)(ptr)) +#endif + +#define MC68230_WRITE( reg, data ) \ + *(MC68230_VOL8(MC68230_PIT_ADDR+reg)) = (data) + +#define MC68230_READ( reg, data ) \ + (data) = *(MC68230_VOL8(MC68230_PIT_ADDR+reg)) + +#endif diff --git a/cpukit/libcsupport/include/motorola/mc68681.h b/cpukit/libcsupport/include/motorola/mc68681.h new file mode 100644 index 0000000000..7b2f566da3 --- /dev/null +++ b/cpukit/libcsupport/include/motorola/mc68681.h @@ -0,0 +1,309 @@ +/** + * @file rtems/motorola/mc68681.h + * + * + * 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 _RTEMS_MOTOROLA_MC68681_H +#define _RTEMS_MOTOROLA_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 diff --git a/cpukit/libcsupport/include/ringbuf.h b/cpukit/libcsupport/include/ringbuf.h new file mode 100644 index 0000000000..39941d857d --- /dev/null +++ b/cpukit/libcsupport/include/ringbuf.h @@ -0,0 +1,55 @@ +/** + * @file rtems/ringbuf.h + * + * This file provides simple ring buffer functionality. + */ + +/* + * $Id$ + */ + +#ifndef _RTEMS_RINGBUF_H +#define _RTEMS_RINGBUF_H + +#ifndef RINGBUF_QUEUE_LENGTH +#define RINGBUF_QUEUE_LENGTH 128 +#endif + +typedef struct { + uint8_t 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 { \ + uint32_t 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 { \ + uint32_t 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 diff --git a/cpukit/libcsupport/include/rtc.h b/cpukit/libcsupport/include/rtc.h new file mode 100644 index 0000000000..cc6f8c2b80 --- /dev/null +++ b/cpukit/libcsupport/include/rtc.h @@ -0,0 +1,116 @@ +/** + * @file + * + * Real-time clock driver interface. + */ + +/* + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_RTC_H +#define _RTEMS_RTC_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup rtems_rtc Real-Time Clock Driver Interface + * + * This driver interface provides support to read and set the real-time clock + * and to initialize the time of day for the system. + * + * @{ + */ + +/** + * Device file name path. + */ +#define RTC_DEVICE_NAME "/dev/rtc" + +/** + * Device driver table entry. + */ +#define RTC_DRIVER_TABLE_ENTRY \ + { rtc_initialize, rtc_open, rtc_close, \ + rtc_read, rtc_write, rtc_control } + +/** + * Initializes the real-time clock device and sets the time of day for the + * system. + * + * If the real-time clock provides an invalid time of day value the system time + * of day must remain untouched. + */ +rtems_device_driver rtc_initialize( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** + * Opens the real-time clock device. + */ +rtems_device_driver rtc_open( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** + * Closes the real-time clock device. + */ +rtems_device_driver rtc_close( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** + * Reads the real-time clock value. + * + * The value will be returned in a @ref rtems_time_of_day structure. + */ +rtems_device_driver rtc_read( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** + * Sets the real-time clock value. + * + * The value will be set from a @ref rtems_time_of_day structure. + */ +rtems_device_driver rtc_write( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** + * Controls the real-time clock. + */ +rtems_device_driver rtc_control( + rtems_device_major_number, + rtems_device_minor_number, + void * +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/libcsupport/include/rtems/assoc.h b/cpukit/libcsupport/include/rtems/assoc.h new file mode 100644 index 0000000000..5b72b8d086 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/assoc.h @@ -0,0 +1,120 @@ +/** + * @file rtems/assoc.h + */ + +/* + * + * 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 _RTEMS_RTEMS_ASSOC_H +#define _RTEMS_RTEMS_ASSOC_H + +#include <stdint.h> /* uint32_t */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + const char *name; + uint32_t local_value; + uint32_t 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_remote( + const rtems_assoc_t *, + uint32_t +); + +uint32_t rtems_assoc_remote_by_local( + const rtems_assoc_t *, + uint32_t +); + +uint32_t rtems_assoc_local_by_remote( + const rtems_assoc_t *, + uint32_t +); + +uint32_t rtems_assoc_remote_by_name( + const rtems_assoc_t *, + const char * +); +uint32_t rtems_assoc_local_by_name( + const rtems_assoc_t *, + const char * +); + +const char *rtems_assoc_name_by_local( + const rtems_assoc_t *, + uint32_t +); + +const char *rtems_assoc_name_by_remote( + const rtems_assoc_t *, + uint32_t +); + +uint32_t rtems_assoc_remote_by_local_bitfield( + const rtems_assoc_t *, + uint32_t +); + +char *rtems_assoc_name_by_local_bitfield( + const rtems_assoc_t *, + uint32_t , + char * +); + +char *rtems_assoc_name_by_remote_bitfield( + const rtems_assoc_t *, + uint32_t , + char * +); + +uint32_t rtems_assoc_local_by_remote_bitfield( + const rtems_assoc_t *, + uint32_t +); + +const rtems_assoc_t *rtems_assoc_ptr_by_local( + const rtems_assoc_t *ap, + uint32_t local_value +); + +#if defined(INSIDE_ASSOC) + +#define rtems_assoc_is_default(_ap) \ + ((_ap)->name && !strcmp((_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( + uint32_t bad_value +); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ! _RTEMS_RTEMS_ASSOC_H */ diff --git a/cpukit/libcsupport/include/rtems/error.h b/cpukit/libcsupport/include/rtems/error.h new file mode 100644 index 0000000000..6c589e8e94 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/error.h @@ -0,0 +1,60 @@ +/** + * @file rtems/error.h + */ + +/* + * Defines and externs for rtems error reporting + * + * $Id$ + */ + +#ifndef _RTEMS_RTEMS_ERROR_H +#define _RTEMS_RTEMS_ERROR_H + +#include <rtems/rtems/status.h> +#include <rtems/score/interr.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef Internal_errors_t rtems_error_code_t; + +/* + * rtems_error() and rtems_panic() support + */ + +#if 0 +/* not 16bit-int host clean */ +#define RTEMS_ERROR_ERRNO (1<<((sizeof(rtems_error_code_t) * CHAR_BIT) - 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 */ +#else +#define RTEMS_ERROR_ERRNO (0x40000000) /* hi bit; use 'errno' */ +#define RTEMS_ERROR_PANIC (0x20000000) /* err fatal; no return */ +#define RTEMS_ERROR_ABORT (0x10000000) /* err is fatal; panic */ +#endif + +#define RTEMS_ERROR_MASK \ + (RTEMS_ERROR_ERRNO | RTEMS_ERROR_ABORT | RTEMS_ERROR_PANIC) /* all */ + +const char *rtems_status_text(rtems_status_code sc); +int rtems_error( + rtems_error_code_t error_code, + const char *printf_format, + ... +); +void rtems_panic( + const char *printf_format, + ... +) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE; + +extern int rtems_panic_in_progress; + +#ifdef __cplusplus +} +#endif + + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/rtems/framebuffer.h b/cpukit/libcsupport/include/rtems/framebuffer.h new file mode 100644 index 0000000000..a300716c58 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/framebuffer.h @@ -0,0 +1,158 @@ +/** + * @file rtems/framebuffer.h + */ + +/* + * This file describes the Frame Buffer Device Driver for all boards. + * + * COPYRIGHT (c) 1989-2009. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef __RTEMS_FRAMEBUFFER_h__ +#define __RTEMS_FRAMEBUFFER_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This macro defines the standard name for the frame buffer device + * that is available to applications. + */ +#define FRAMEBUFFER_DEVICE_NAME "/dev/fb" + +/** + * This macro defines the standard device driver table entry for + * a frame buffer device driver. + */ +#define FRAME_BUFFER_DRIVER_TABLE_ENTRY \ + { frame_buffer_initialize, frame_buffer_open, frame_buffer_close, \ + frame_buffer_read, frame_buffer_write, frame_buffer_control } + +/** + * @brief Frame Buffer Initialization Entry Point + * + * This method initializes the frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver is successfully initialized. + */ +rtems_device_driver frame_buffer_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Frame Buffer Open Entry Point + * + * This method opens a specific device supported by the + * frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver is successfully opened. + */ +rtems_device_driver frame_buffer_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Frame Buffer Close Entry Point + * + * This method closes a specific device supported by the + * frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully closed. + */ +rtems_device_driver frame_buffer_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Frame Buffer Read Entry Point + * + * This method reads from a specific device supported by the + * frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully read from. + */ +rtems_device_driver frame_buffer_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Frame Buffer Write Entry Point + * + * This method writes to a specific device supported by the + * frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device is successfully written. + */ +rtems_device_driver frame_buffer_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +/** + * @brief Frame Buffer IO Control Entry Point + * + * This method performs an IO Control operation on a + * specific device supported by the frame buffer device driver. + * + * @param[in] major is the device driver major number + * @param[in] minor is the device driver minor number + * @param[in] arg is the parameters to this call + * + * @return This method returns RTEMS_SUCCESSFUL when + * the device driver IO control operation is + * successfully performed. + */ +rtems_device_driver frame_buffer_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/rtems/gxx_wrappers.h b/cpukit/libcsupport/include/rtems/gxx_wrappers.h new file mode 100755 index 0000000000..d4d4aae799 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/gxx_wrappers.h @@ -0,0 +1,78 @@ +/* + * RTEMS threads compatibility 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. + * + * $Id$ + */ + +#ifndef __GCC_WRAPPERS_h +#define __GCC_WRAPPERS_h + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* + * These typedefs should match with the ones defined in the file + * gcc/gthr-rtems.h in the gcc distribution. + * FIXME: T.S, 2007/01/31: -> gcc/gthr-rtems.h still declares + * void * __gthread_key_t; + */ +typedef struct __gthread_key_ { + void *val; /* this is switched with the task */ + void (*dtor)(void*); /* this remains in place for all tasks */ +} __gthread_key, *__gthread_key_t; + +typedef int __gthread_once_t; +typedef void *__gthread_mutex_t; +typedef void *__gthread_recursive_mutex_t; + +int rtems_gxx_once(__gthread_once_t *once, void (*func) (void)); + +int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *)); + +int rtems_gxx_key_dtor (__gthread_key_t key, void *ptr); + +int rtems_gxx_key_delete (__gthread_key_t key); + +void *rtems_gxx_getspecific(__gthread_key_t key); + +int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr); + +/* + * MUTEX support + */ +void rtems_gxx_mutex_init (__gthread_mutex_t *mutex); + +int rtems_gxx_mutex_lock (__gthread_mutex_t *mutex); + +int rtems_gxx_mutex_destroy (__gthread_mutex_t *mutex); + +int rtems_gxx_mutex_trylock (__gthread_mutex_t *mutex); + +int rtems_gxx_mutex_unlock (__gthread_mutex_t *mutex); + +void rtems_gxx_recursive_mutex_init(__gthread_recursive_mutex_t *mutex); + +int rtems_gxx_recursive_mutex_lock(__gthread_recursive_mutex_t *mutex); + +int rtems_gxx_recursive_mutex_trylock(__gthread_recursive_mutex_t *mutex); + +int rtems_gxx_recursive_mutex_unlock(__gthread_recursive_mutex_t *mutex); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __GCC_WRAPPERS_h */ diff --git a/cpukit/libcsupport/include/rtems/libcsupport.h b/cpukit/libcsupport/include/rtems/libcsupport.h new file mode 100644 index 0000000000..9dfcf851fe --- /dev/null +++ b/cpukit/libcsupport/include/rtems/libcsupport.h @@ -0,0 +1,81 @@ +/** + * @file rtems/libcsupport.h + */ + +/* 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_RTEMS_LIBCSUPPORT_H +#define _RTEMS_RTEMS_LIBCSUPPORT_H + +#include <sys/types.h> +#include <stdint.h> + +#include <rtems/score/heap.h> +#include <rtems/rtems/tasks.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void RTEMS_Malloc_Initialize( + void *heap_begin, + uintptr_t heap_size, + size_t sbrk_amount +); + +extern void malloc_dump(void); +extern void malloc_walk(size_t source, size_t printf_enabled); +void malloc_set_heap_pointer(Heap_Control *new_heap); +Heap_Control *malloc_get_heap_pointer( void ); +extern void libc_init(void); +extern int host_errno(void); +extern void fix_syscall_errno(void); +extern size_t malloc_free_space(void); +extern void open_dev_console(void); + +/* + * Prototypes required to install newlib reentrancy user extension + */ +bool newlib_create_hook( + rtems_tcb *current_task, + rtems_tcb *creating_task +); + +#define __RTEMS_NEWLIB_BEGIN 0 + +void newlib_delete_hook( + rtems_tcb *current_task, + rtems_tcb *deleted_task +); + +#define RTEMS_NEWLIB_EXTENSION \ +{ \ + newlib_create_hook, /* rtems_task_create */ \ + 0, /* rtems_task_start */ \ + 0, /* rtems_task_restart */ \ + newlib_delete_hook, /* rtems_task_delete */ \ + 0, /* task_switch */ \ + __RTEMS_NEWLIB_BEGIN, /* task_begin */ \ + 0, /* task_exitted */ \ + 0 /* fatal */ \ +} + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h new file mode 100644 index 0000000000..73c52e31d7 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/libio.h @@ -0,0 +1,1685 @@ +/** + * @file + * + * @ingroup LibIO + * + * @brief Basic IO API. + */ + +/* + * COPYRIGHT (c) 1989-2008. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_RTEMS_LIBIO_H +#define _RTEMS_RTEMS_LIBIO_H + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <sys/statvfs.h> + +#include <unistd.h> +#include <termios.h> + +#include <rtems.h> +#include <rtems/fs.h> +#include <rtems/chain.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup LibIO IO Library + * + * @brief Provides system call and file system interface definitions. + * + * 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. + * + * @{ + */ + +/** + * A 64-bit file offset for internal use by RTEMS. Based on the Newlib + * type. + */ +typedef _off64_t rtems_off64_t; + +/** + * @brief File system node types. + */ +typedef enum { + RTEMS_FILESYSTEM_INVALID_NODE_TYPE, + RTEMS_FILESYSTEM_DIRECTORY, + RTEMS_FILESYSTEM_DEVICE, + RTEMS_FILESYSTEM_HARD_LINK, + RTEMS_FILESYSTEM_SYM_LINK, + RTEMS_FILESYSTEM_MEMORY_FILE +} rtems_filesystem_node_types_t; + +/** + * @name File System Node Operations + * + * @{ + */ + +/** + * This type defines the interface to the open(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_open_t)( + rtems_libio_t *iop, + const char *pathname, + uint32_t flag, + uint32_t mode +); + +/** + * This type defines the interface to the close(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_close_t)( + rtems_libio_t *iop +); + +/** + * This type defines the interface to the read(2) system call + * support which is provided by a file system implementation. + */ +typedef ssize_t (*rtems_filesystem_read_t)( + rtems_libio_t *iop, + void *buffer, + size_t count +); + +/** + * This type defines the interface to the write(2) system call + * support which is provided by a file system implementation. + */ +typedef ssize_t (*rtems_filesystem_write_t)( + rtems_libio_t *iop, + const void *buffer, + size_t count +); + +/** + * This type defines the interface to the ioctl(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_ioctl_t)( + rtems_libio_t *iop, + uint32_t command, + void *buffer +); + +/** + * This type defines the interface to the lseek(2) system call + * support which is provided by a file system implementation. + */ +typedef rtems_off64_t (*rtems_filesystem_lseek_t)( + rtems_libio_t *iop, + rtems_off64_t length, + int whence +); + +/** + * This type defines the interface to the fstat(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fstat_t)( + rtems_filesystem_location_info_t *loc, + struct stat *buf +); + +/** + * This type defines the interface to the fchmod(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fchmod_t)( + rtems_filesystem_location_info_t *loc, + mode_t mode +); + +/** + * This type defines the interface to the ftruncate(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_ftruncate_t)( + rtems_libio_t *iop, + rtems_off64_t length +); + +/** + * This type defines the interface to the fpathconf(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fpathconf_t)( + rtems_libio_t *iop, + int name +); + +/** + * This type defines the interface to the fsync(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fsync_t)( + rtems_libio_t *iop +); + +/** + * This type defines the interface to the fdatasync(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fdatasync_t)( + rtems_libio_t *iop +); + +/** + * This type defines the interface to the fnctl(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_fcntl_t)( + int cmd, + rtems_libio_t *iop +); + +typedef int (*rtems_filesystem_rmnod_t)( + rtems_filesystem_location_info_t *parent_loc, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** @} */ + +/** + * @brief File system node operations table. + */ +struct _rtems_filesystem_file_handlers_r { + /** + * This field points to the file system specific implementation + * of the support routine for the open(2) system call + * + * @note This method must have a filesystem specific implementation. + * + * @note There is no default implementation. + */ + rtems_filesystem_open_t open_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the close(2) system call + * + * @note This method is REQUIRED by all file systems. + * + * @note There is no default implementation. + */ + rtems_filesystem_close_t close_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the read(2) system call + * + * @note This method must have a filesystem specific implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_read_t read_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the write(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_write_t write_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the ioctl(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_ioctl_t ioctl_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the lseek(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_lseek_t lseek_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fstat(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fstat_t fstat_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fchmod(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fchmod_t fchmod_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the ftruncate(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_ftruncate_t ftruncate_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fpathconf(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fpathconf_t fpathconf_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fsync(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fsync_t fsync_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fdatasync(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fdatasync_t fdatasync_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fcntl(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fcntl_t fcntl_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the rmnod(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_rmnod_t rmnod_h; +}; + +extern const rtems_filesystem_file_handlers_r +rtems_filesystem_handlers_default; + +/** + * This method defines the interface to the default open(2) + * system call support which is provided by a file system + * implementation. + */ +int rtems_filesystem_default_open( + rtems_libio_t *iop, + const char *pathname, + uint32_t flag, + uint32_t mode +); + +/** + * This method defines the interface to the default close(2) + * system call support which is provided by a file system + * implementation. + */ +int rtems_filesystem_default_close( + rtems_libio_t *iop +); + + +/** + * This method defines the interface to the default read(2) + * system call support which is provided by a file system + * implementation. + */ +ssize_t rtems_filesystem_default_read( + rtems_libio_t *iop, + void *buffer, + size_t count +); + +/** + * This method defines the interface to the default write(2) system call + * support which is provided by a file system implementation. + */ +ssize_t rtems_filesystem_default_write( + rtems_libio_t *iop, + const void *buffer, + size_t count +); + +/** + * This method defines the interface to the default ioctl(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_ioctl( + rtems_libio_t *iop, + uint32_t command, + void *buffer +); + +/** + * This method defines the interface to the default lseek(2) system call + * support which is provided by a file system implementation. + */ +rtems_off64_t rtems_filesystem_default_lseek( + rtems_libio_t *iop, + rtems_off64_t length, + int whence +); + +/** + * This method defines the interface to the default fstat(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fstat( + rtems_filesystem_location_info_t *loc, + struct stat *buf +); + +/** + * This method defines the interface to the default fchmod(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fchmod( + rtems_filesystem_location_info_t *loc, + mode_t mode +); + +/** + * This method defines the interface to the default ftruncate(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_ftruncate( + rtems_libio_t *iop, + rtems_off64_t length +); + +/** + * This method defines the interface to the default fpathconf(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fpathconf( + rtems_libio_t *iop, + int name +); + +/** + * This method defines the interface to the default fsync(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fsync( + rtems_libio_t *iop +); + +/** + * This method defines the interface to the default fdatasync(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fdatasync( + rtems_libio_t *iop +); + +/** + * This method defines the interface to the default fnctl(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_fcntl( + int cmd, + rtems_libio_t *iop +); + +/** + * This method defines the interface to the default rmnod(2) system call + * support which is provided by a file system implementation. + */ +int rtems_filesystem_default_rmnod( + rtems_filesystem_location_info_t *parent_loc, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * @name File System Operations + * + * @{ + */ + +/** + * This type defines the interface to the mknod(2) system call + * support which is provided by a file system implementation. + * + * @note 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 */ +); + +/** + * This type defines the interface that allows the + * file system implementation to parse a path and + * allocate any memory necessary for tracking purposes. + * + * @note rtems_filesystem_freenode_t must be called by + * the generic after calling this routine + */ +typedef int (*rtems_filesystem_evalpath_t)( + const char *pathname, /* IN */ + size_t pathnamelen, /* IN */ + int flags, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN/OUT */ +); + +/** + * This type defines the interface that allows the + * file system implementation to parse a path with the + * intent of creating a new node and to + * allocate any memory necessary for tracking purposes. + * + * @note rtems_filesystem_freenode_t must be called by + * the generic after calling this routine + */ +typedef int (*rtems_filesystem_evalmake_t)( + const char *path, /* IN */ + rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ + const char **name /* OUT */ +); + +/** + * This type defines the interface to the link(2) system call + * support which is provided by a file system implementation. + */ +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 */ +); + +/** + * This type defines the interface to the unlink(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_unlink_t)( + rtems_filesystem_location_info_t *parent_pathloc, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * This type defines the interface to the chown(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_chown_t)( + rtems_filesystem_location_info_t *pathloc, /* IN */ + uid_t owner, /* IN */ + gid_t group /* IN */ +); + +/** + * This type defines the interface to the freenod(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_freenode_t)( + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * This type defines the interface that allows the implemented + * filesystem ot mount another filesystem at the given location. + */ +typedef int (* rtems_filesystem_mount_t ) ( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + +/** + * This type defines the interface that allows a file system + * implementation to do any necessary work that is needed when + * it is being mounted. + */ +typedef int (* rtems_filesystem_fsmount_me_t )( + rtems_filesystem_mount_table_entry_t *mt_entry, /* IN */ + const void *data /* IN */ +); + +/** + * This type defines the interface allow the filesystem to + * unmount a filesystem that was mounted at one of its node + * locations. + */ +typedef int (* rtems_filesystem_unmount_t ) ( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + +/** + * This type defines the interface that allows a file system + * implementation to do any necessary work that is needed when + * it is being unmounted. + */ +typedef int (* rtems_filesystem_fsunmount_me_t ) ( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + +/** + * This type defines the interface that will return the + * type of a filesystem implementations node. + */ +typedef rtems_filesystem_node_types_t (* rtems_filesystem_node_type_t) ( + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * This type defines the interface to the time(2) system call + * support which is provided by a file system implementation. + */ +typedef int (* rtems_filesystem_utime_t)( + rtems_filesystem_location_info_t *pathloc, /* IN */ + time_t actime, /* IN */ + time_t modtime /* IN */ +); + +/** + * This type defines the interface to the link(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_evaluate_link_t)( + rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ + int flags /* IN */ +); + +/** + * This type defines the interface to the symlink(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_symlink_t)( + rtems_filesystem_location_info_t *loc, /* IN */ + const char *link_name, /* IN */ + const char *node_name +); + +/** + * This type defines the interface to the readlink(2) system call + * support which is provided by a file system implementation. + */ +typedef ssize_t (*rtems_filesystem_readlink_t)( + rtems_filesystem_location_info_t *loc, /* IN */ + char *buf, /* OUT */ + size_t bufsize +); + +/** + * This type defines the interface to the name(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_rename_t)( + rtems_filesystem_location_info_t *old_parent_loc, /* IN */ + rtems_filesystem_location_info_t *old_loc, /* IN */ + rtems_filesystem_location_info_t *new_parent_loc, /* IN */ + const char *name /* IN */ +); + +/** + * This type defines the interface to the statvfs(2) system call + * support which is provided by a file system implementation. + */ +typedef int (*rtems_filesystem_statvfs_t)( + rtems_filesystem_location_info_t *loc, /* IN */ + struct statvfs *buf /* OUT */ +); + +/** @} */ + +/** + * @brief File system operations table. + */ +struct _rtems_filesystem_operations_table { + + /** + * This field points to the file system specific implementation + * of the support routine that evaluates a character path and + * returns the node assocated with the last node in the path. + * + * @note This method must have a filesystem specific implementation. + * + * @note There is no default implementation. + */ + rtems_filesystem_evalpath_t evalpath_h; + + /** + * This field points to the file system specific implementation + * of the support routine that evaluates a character path and + * returns the node assocated with next to the last node in + * the path. The last node will be the new node to be created. + * + * @note This method must have a filesystem specific implementation. + * + * @note There is no default implementation. + */ + rtems_filesystem_evalmake_t evalformake_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the link(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_link_t link_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the unlink(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_unlink_t unlink_h; + + /** + * This field points to the file system specific implementation + * of a method that returns the node type of the given node. + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_node_type_t node_type_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the link(2) system call + * + * @note This method may use a mknod implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_mknod_t mknod_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the link(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_chown_t chown_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the freenod(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_freenode_t freenod_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the mount(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_mount_t mount_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fsmount(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fsmount_me_t fsmount_me_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the unmount(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_unmount_t unmount_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the fsunmount(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_fsunmount_me_t fsunmount_me_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the utime(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_utime_t utime_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the eval_link(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_evaluate_link_t eval_link_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the sumlink(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_symlink_t symlink_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the readlink(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_readlink_t readlink_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the rename(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_rename_t rename_h; + + /** + * This field points to the file system specific implementation + * of the support routine for the statvfs(2) system call + * + * @note This method may use a default implementation. + * + * @note The default implementation returns -1 and sets + * errno to ENOTSUP. + */ + rtems_filesystem_statvfs_t statvfs_h; +}; + +extern const rtems_filesystem_operations_table +rtems_filesystem_operations_default; + +/** + * @brief Provides a defualt routine for filesystem + * implementation of path evaluation. + */ +int rtems_filesystem_default_evalpath( + const char *pathname, + size_t pathnamelen, + int flags, + rtems_filesystem_location_info_t *pathloc +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of path evaluation for make. + */ +int rtems_filesystem_default_evalformake( + const char *path, + rtems_filesystem_location_info_t *pathloc, + const char **name +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a link command. + */ +int rtems_filesystem_default_link( + rtems_filesystem_location_info_t *to_loc, /* IN */ + rtems_filesystem_location_info_t *parent_loc, /* IN */ + const char *name /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a unlink command. + */ +int rtems_filesystem_default_unlink( + rtems_filesystem_location_info_t *parent_pathloc, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation to determine the node type. + */ +rtems_filesystem_node_types_t rtems_filesystem_default_node_type( + rtems_filesystem_location_info_t *pathloc +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation to create a new node. + */ +int rtems_filesystem_default_mknod( + const char *path, /* IN */ + mode_t mode, /* IN */ + dev_t dev, /* IN */ + rtems_filesystem_location_info_t *pathloc /* IN/OUT */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a chown command. + */ +int rtems_filesystem_default_chown( + rtems_filesystem_location_info_t *pathloc, /* IN */ + uid_t owner, /* IN */ + gid_t group /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a freenode command. + */ +int rtems_filesystem_default_freenode( + rtems_filesystem_location_info_t *pathloc /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a mount command. + */ +int rtems_filesystem_default_mount ( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a fsmount command. + */ +int rtems_filesystem_default_fsmount( + rtems_filesystem_mount_table_entry_t *mt_entry, /* IN */ + const void *data /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a unmount command. + */ +int rtems_filesystem_default_unmount( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a fsunmount command. + */ +int rtems_filesystem_default_fsunmount( + rtems_filesystem_mount_table_entry_t *mt_entry /* IN */ +); + + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a utime command. + */ +int rtems_filesystem_default_utime( + rtems_filesystem_location_info_t *pathloc, /* IN */ + time_t actime, /* IN */ + time_t modtime /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a link command. + */ +int rtems_filesystem_default_evaluate_link( + rtems_filesystem_location_info_t *pathloc, /* IN/OUT */ + int flags /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a symlink command. + */ +int rtems_filesystem_default_symlink( + rtems_filesystem_location_info_t *loc, /* IN */ + const char *link_name, /* IN */ + const char *node_name +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a readlink command. + */ +ssize_t rtems_filesystem_default_readlink( + rtems_filesystem_location_info_t *loc, /* IN */ + char *buf, /* OUT */ + size_t bufsize +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a rename command. + */ +int rtems_filesystem_default_rename( + rtems_filesystem_location_info_t *old_parent_loc, /* IN */ + rtems_filesystem_location_info_t *old_loc, /* IN */ + rtems_filesystem_location_info_t *new_parent_loc, /* IN */ + const char *name /* IN */ +); + +/** + * @brief Provides a defualt routine for filesystem + * implementation of a statvfs command. + */ +int rtems_filesystem_default_statvfs( + rtems_filesystem_location_info_t *loc, /* IN */ + struct statvfs *buf /* OUT */ +); + +/** + * @brief Gets the mount handler for the file system @a type. + * + * @return The file system mount handler associated with the @a type, or + * @c NULL if no such association exists. + */ +rtems_filesystem_fsmount_me_t +rtems_filesystem_get_mount_handler( + const char *type +); + +/** + * @brief Contain file system specific information which is required to support + * fpathconf(). + */ +typedef struct { + int link_max; /* count */ + int max_canon; /* max formatted input line size */ + int max_input; /* max input line size */ + int name_max; /* max name length */ + int path_max; /* max path */ + int pipe_buf; /* pipe buffer size */ + int posix_async_io; /* async IO supported on fs, 0=no, 1=yes */ + int posix_chown_restrictions; /* can chown: 0=no, 1=yes */ + int posix_no_trunc; /* error on names > max name, 0=no, 1=yes */ + int posix_prio_io; /* priority IO, 0=no, 1=yes */ + int posix_sync_io; /* file can be sync'ed, 0=no, 1=yes */ + int posix_vdisable; /* special char processing, 0=no, 1=yes */ +} rtems_filesystem_limits_and_options_t; + +/** + * @brief Default pathconf settings. + * + * Override in a filesystem. + */ +extern const rtems_filesystem_limits_and_options_t rtems_filesystem_default_pathconf; + +/** + * @brief An open file data structure. + * + * It will be 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; + rtems_off64_t size; /* size of file */ + rtems_off64_t offset; /* current offset into file */ + uint32_t flags; + rtems_filesystem_location_info_t pathinfo; + rtems_id sem; + uint32_t data0; /* private to "driver" */ + void *data1; /* ... */ +}; + +/** + * @brief Paramameter block for read/write. + * + * 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; + rtems_off64_t offset; + char *buffer; + uint32_t count; + uint32_t flags; + uint32_t bytes_moved; +} rtems_libio_rw_args_t; + +/** + * @brief Parameter block for open/close. + */ +typedef struct { + rtems_libio_t *iop; + uint32_t flags; + uint32_t mode; +} rtems_libio_open_close_args_t; + +/** + * @brief Parameter block for ioctl. + */ +typedef struct { + rtems_libio_t *iop; + uint32_t command; + void *buffer; + uint32_t ioctl_return; +} rtems_libio_ioctl_args_t; + +/** + * @name Flag Values + * + * @{ + */ + +#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); + +/** + * @name External I/O Handlers + * + * @{ + */ + +typedef int (*rtems_libio_open_t)( + const char *pathname, + uint32_t flag, + uint32_t mode +); + +typedef int (*rtems_libio_close_t)( + int fd +); + +typedef ssize_t (*rtems_libio_read_t)( + int fd, + void *buffer, + size_t count +); + +typedef ssize_t (*rtems_libio_write_t)( + int fd, + const void *buffer, + size_t count +); + +typedef int (*rtems_libio_ioctl_t)( + int fd, + uint32_t command, + void *buffer +); + +typedef rtems_off64_t (*rtems_libio_lseek_t)( + int fd, + rtems_off64_t offset, + int whence +); + +/** @} */ + +/** + * @name Permission Macros + * + * @{ + */ + +/* + * 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 + +/** @} */ + +union __rtems_dev_t { + dev_t device; + struct { + rtems_device_major_number major; + rtems_device_minor_number minor; + } __overlay; +}; + +static inline dev_t rtems_filesystem_make_dev_t( + rtems_device_major_number _major, + rtems_device_minor_number _minor +) +{ + union __rtems_dev_t temp; + + temp.__overlay.major = _major; + temp.__overlay.minor = _minor; + return temp.device; +} + +static inline rtems_device_major_number rtems_filesystem_dev_major_t( + dev_t device +) +{ + union __rtems_dev_t temp; + + temp.device = device; + return temp.__overlay.major; +} + + +static inline rtems_device_minor_number rtems_filesystem_dev_minor_t( + dev_t device +) +{ + union __rtems_dev_t temp; + + temp.device = device; + return temp.__overlay.minor; +} + +#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 ) == 0) + +/* + * Prototypes for filesystem + */ + +void rtems_filesystem_initialize( void ); + +typedef void (*rtems_libio_init_functions_t)(void); +extern rtems_libio_init_functions_t rtems_libio_init_helper; + +void open_dev_console(void); + +typedef void (*rtems_libio_supp_functions_t)(void); +extern rtems_libio_supp_functions_t rtems_libio_supp_helper; + +typedef void (*rtems_fs_init_functions_t)(void); +extern rtems_fs_init_functions_t rtems_fs_init_helper; + +/** + * @brief Creates a directory and all its parent directories according to + * @a path. + * + * The @a mode value selects the access permissions of the directory. + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +extern int rtems_mkdir(const char *path, mode_t mode); + +/** @} */ + +/** + * @defgroup FileSystemTypesAndMount File System Types and Mount + * + * @ingroup LibIO + * + * @brief File system types and mount. + * + * @{ + */ + +/** + * @name File System Types + * + * @{ + */ + +#define RTEMS_FILESYSTEM_TYPE_IMFS "imfs" +#define RTEMS_FILESYSTEM_TYPE_MINIIMFS "mimfs" +#define RTEMS_FILESYSTEM_TYPE_DEVFS "devfs" +#define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs" +#define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs" +#define RTEMS_FILESYSTEM_TYPE_NFS "nfs" +#define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs" +#define RTEMS_FILESYSTEM_TYPE_RFS "rfs" + +/** @} */ + +/** + * @brief Mount table entry. + */ +struct rtems_filesystem_mount_table_entry_tt { + rtems_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; + + /* + * The target or mount point of the file system. + */ + const char *target; + + /* + * The type of filesystem or the name of the filesystem. + */ + const char *type; + + /* + * When someone adds a mounted filesystem on a real device, + * this will need to be used. + * + * The lower layers can manage how this is managed. Leave as a + * string. + */ + char *dev; +}; + +/** + * @brief File system options. + */ +typedef enum { + RTEMS_FILESYSTEM_READ_ONLY, + RTEMS_FILESYSTEM_READ_WRITE, + RTEMS_FILESYSTEM_BAD_OPTIONS +} rtems_filesystem_options_t; + +/** + * @brief File system table entry. + */ +typedef struct rtems_filesystem_table_t { + const char *type; + rtems_filesystem_fsmount_me_t mount_h; +} rtems_filesystem_table_t; + +/** + * @brief Static table of file systems. + * + * Externally defined by confdefs.h or the user. + */ +extern const rtems_filesystem_table_t rtems_filesystem_table []; + +/** + * @brief Registers a file system @a type. + * + * The @a mount_h handler will be used to mount a file system of this @a type. + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int rtems_filesystem_register( + const char *type, + rtems_filesystem_fsmount_me_t mount_h +); + +/** + * @brief Unregisters a file system @a type. + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int rtems_filesystem_unregister( + const char *type +); + +/** + * @brief Unmounts the file system at @a mount_path. + * + * @todo Due to file system implementation shortcomings it is possible to + * unmount file systems in use. This likely leads to heap corruption. Unmount + * only file systems which are not in use by the application. + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int unmount( + const char *mount_path +); + +/** + * @brief Mounts a file system at @a target. + * + * The @a source may be a path to the corresponding device file, or @c NULL. + * The @a target path must lead to an existing directory, or @c NULL. In case + * @a target is @c NULL, the root file system will be mounted. The @a data + * parameter will be forwarded to the file system initialization handler. The + * file system type is selected by @a filesystemtype and may be one of + * - RTEMS_FILESYSTEM_TYPE_DEVFS, + * - RTEMS_FILESYSTEM_TYPE_DOSFS, + * - RTEMS_FILESYSTEM_TYPE_FTPFS, + * - RTEMS_FILESYSTEM_TYPE_IMFS, + * - RTEMS_FILESYSTEM_TYPE_MINIIMFS, + * - RTEMS_FILESYSTEM_TYPE_NFS, + * - RTEMS_FILESYSTEM_TYPE_RFS, or + * - RTEMS_FILESYSTEM_TYPE_TFTPFS. + * + * Only configured or registered file system types are available. You can add + * file system types to your application configuration with + * - CONFIGURE_FILESYSTEM_DEVFS, + * - CONFIGURE_FILESYSTEM_DOSFS, + * - CONFIGURE_FILESYSTEM_FTPFS, + * - CONFIGURE_FILESYSTEM_IMFS, + * - CONFIGURE_FILESYSTEM_MINIIMFS, + * - CONFIGURE_FILESYSTEM_NFS, + * - CONFIGURE_FILESYSTEM_RFS, and + * - CONFIGURE_FILESYSTEM_TFTPFS. + * + * @see rtems_filesystem_register() and mount_and_make_target_path(). + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int mount( + const char *source, + const char *target, + const char *filesystemtype, + rtems_filesystem_options_t options, + const void *data +); + +/** + * @brief Mounts a file system and makes the @a target path. + * + * The @a target path will be created with rtems_mkdir() and must not be + * @c NULL. + * + * @see mount(). + * + * @retval 0 Successful operation. + * @retval -1 An error occured. The @c errno indicates the error. + */ +int mount_and_make_target_path( + const char *source, + const char *target, + const char *filesystemtype, + rtems_filesystem_options_t options, + const void *data +); + +/** + * @brief Per file system type routine. + * + * @see rtems_filesystem_iterate(). + * + * @retval true Stop the iteration. + * @retval false Continue the iteration. + */ +typedef bool (*rtems_per_filesystem_routine)( + const rtems_filesystem_table_t *fs_entry, + void *arg +); + +/** + * @brief Iterates over all file system types. + * + * For each file system type the @a routine will be called with the entry and + * the @a routine_arg parameter. + * + * Do not register or unregister file system types in @a routine. + * + * The iteration is protected by the IO library mutex. + * + * @retval true Iteration stopped due to @a routine return status. + * @retval false Iteration through all entries. + */ +bool rtems_filesystem_iterate( + rtems_per_filesystem_routine routine, + void *routine_arg +); + +/** + * @brief Per file system mount routine. + * + * @see rtems_filesystem_mount_iterate(). + * + * @retval true Stop the iteration. + * @retval false Continue the iteration. + */ +typedef bool (*rtems_per_filesystem_mount_routine)( + const rtems_filesystem_mount_table_entry_t *mt_entry, + void *arg +); + +/** + * @brief Iterates over all file system mounts. + * + * For each file system mount the @a routine will be called with the entry and + * the @a routine_arg parameter. + * + * Do not mount or unmount file systems in @a routine. + * + * The iteration is protected by the IO library mutex. + * + * @retval true Iteration stopped due to @a routine return status. + * @retval false Iteration through all entries. + */ +bool +rtems_filesystem_mount_iterate( + rtems_per_filesystem_mount_routine routine, + void *routine_arg +); + +/** + * @brief Boot time mount table entry. + */ +typedef struct { + const char *type; + rtems_filesystem_options_t fsoptions; + const char *device; + const char *mount_point; +} rtems_filesystem_mount_table_t; + +/** + * @brief Boot time mount table. + * + * @todo Only the first entry will be evaluated. Why do we need a table? + */ +extern const rtems_filesystem_mount_table_t *rtems_filesystem_mount_table; + +/** + * @brief Boot time mount table entry count. + * + * @todo Only the first entry will be evaluated. Why do we need a table? + */ +extern const int rtems_filesystem_mount_table_size; + +/** @} */ + +/** + * @defgroup Termios Termios + * + * @ingroup LibIO + * + * @brief Termios + * + * @{ + */ + +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); + ssize_t (*write)(int minor, const char *buf, size_t len); + int (*setAttributes)(int minor, const struct termios *t); + int (*stopRemoteTx)(int minor); + int (*startRemoteTx)(int minor); + int outputUsesInterrupts; +} rtems_termios_callbacks; + +void rtems_termios_initialize (void); + +/* + * CCJ: Change before opening a tty. Newer code from Eric is coming + * so extra work to handle an open tty is not worth it. If the tty + * is open, close then open it again. + */ +rtems_status_code rtems_termios_bufsize ( + int cbufsize, /* cooked buffer size */ + int raw_input, /* raw input buffer size */ + int raw_output /* raw output buffer size */ +); + +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 +); + +/** @} */ + +/** + * @brief The pathconf setting for a file system. + */ +#define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options) + +/** + * @brief The type of file system. Its name. + */ +#define rtems_filesystem_type(_mte) ((_mte)->type) + +/** + * @brief The mount point of a file system. + */ +#define rtems_filesystem_mount_point(_mte) ((_mte)->target) + +/** + * @brief The device entry of a file system. + */ +#define rtems_filesystem_mount_device(_mte) ((_mte)->dev) + +#ifdef __cplusplus +} +#endif + +#endif /* _RTEMS_LIBIO_H */ diff --git a/cpukit/libcsupport/include/rtems/libio_.h b/cpukit/libcsupport/include/rtems/libio_.h new file mode 100644 index 0000000000..f5cb537210 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/libio_.h @@ -0,0 +1,246 @@ +/** + * @file rtems/libio_.h + */ + +/* + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_RTEMS_LIBIO__H +#define _RTEMS_RTEMS_LIBIO__H + +#include <rtems.h> +#include <rtems/libio.h> /* include before standard IO */ + +#include <sys/types.h> + +#include <errno.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 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; + +/* + * File descriptor Table Information + */ + +extern uint32_t 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) \ + ((((uint32_t)(_fd)) < rtems_libio_number_iops) ? \ + &rtems_libio_iops[_fd] : 0) + +/* + * rtems_libio_iop_to_descriptor + * + * Macro to convert an internal file descriptor pointer (iop) into + * the integer file descriptor used by the "section 2" system calls. + */ + +#define rtems_libio_iop_to_descriptor(_iop) \ + ((!(_iop)) ? -1 : (_iop - rtems_libio_iops)) + +/* + * 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 ((uint32_t) (_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. + */ + +void rtems_filesystem_freenode( rtems_filesystem_location_info_t* node ); + +/* + * 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) ; + +static inline void rtems_libio_lock( void ) +{ + rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT ); +} + +static inline void rtems_libio_unlock( void ) +{ + rtems_semaphore_release( rtems_libio_semaphore ); +} + +/* + * File Descriptor Routine Prototypes + */ + +rtems_libio_t *rtems_libio_allocate(void); + +uint32_t rtems_libio_fcntl_flags( + uint32_t fcntl_flags +); + +uint32_t rtems_libio_to_fcntl_flags( + uint32_t 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_relative_path( + const char *pathname, + size_t pathnamelen, + int flags, + rtems_filesystem_location_info_t *pathloc, + int follow_link +); + +int rtems_filesystem_evaluate_path( + const char *pathname, + size_t pathnamelen, + int flags, + rtems_filesystem_location_info_t *pathloc, + int follow_link +); + +int rtems_filesystem_dirname( + const char *pathname +); + +int rtems_filesystem_prefix_separators( + const char *pathname, + int pathnamelen +); + +void rtems_filesystem_initialize(void); + +int init_fs_mount_table(void); + +int rtems_filesystem_is_separator(char ch); + +void rtems_filesystem_get_start_loc(const char *path, + int *index, + rtems_filesystem_location_info_t *loc); + +void rtems_filesystem_get_sym_start_loc(const char *path, + int *index, + rtems_filesystem_location_info_t *loc); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/rtems/malloc.h b/cpukit/libcsupport/include/rtems/malloc.h new file mode 100644 index 0000000000..af092982f7 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/malloc.h @@ -0,0 +1,186 @@ +/** + * @file rtems/malloc.h + */ + +/* + * RTEMS Malloc Extensions + * + * COPYRIGHT (c) 1989-2007. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_MALLOC_H +#define _RTEMS_MALLOC_H + +#include <rtems.h> +#include <rtems/bspIo.h> + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Malloc Statistics Structure + */ +typedef struct { + uint32_t space_available; /* current size of malloc area */ + uint32_t malloc_calls; /* # calls to malloc */ + uint32_t memalign_calls; /* # calls to memalign */ + uint32_t free_calls; + uint32_t realloc_calls; + uint32_t calloc_calls; + uint32_t max_depth; /* most ever malloc'd at 1 time */ + uintmax_t lifetime_allocated; + uintmax_t lifetime_freed; +} rtems_malloc_statistics_t; + +/* + * Malloc statistics plugin + */ +typedef struct { + void (*initialize)(void); + void (*at_malloc)(void *); + void (*at_free)(void *); +} rtems_malloc_statistics_functions_t; + +extern rtems_malloc_statistics_functions_t + rtems_malloc_statistics_helpers_table; +extern rtems_malloc_statistics_functions_t *rtems_malloc_statistics_helpers; + +/* + * Malloc Heap Extension (sbrk) plugin + */ +typedef struct { + void *(*initialize)(void *, size_t); + void *(*extend)(size_t); +} rtems_malloc_sbrk_functions_t; + +extern rtems_malloc_sbrk_functions_t rtems_malloc_sbrk_helpers_table; +extern rtems_malloc_sbrk_functions_t *rtems_malloc_sbrk_helpers; + +/* + * Malloc Plugin to Dirty Memory at Allocation Time + */ +typedef void (*rtems_malloc_dirtier_t)(void *, size_t); +extern rtems_malloc_dirtier_t rtems_malloc_dirty_helper; + +/** @brief Dirty memory function + * + * This method fills the specified area with a non-zero pattern + * to aid in debugging programs which do not initialize their + * memory allocated from the heap. + */ +void rtems_malloc_dirty_memory( + void *start, + size_t size +); + +/** @brief Print Malloc Statistic Usage Report + * + * This method fills in the called provided malloc statistics area. + * + * @return This method returns 0 if successful and -1 on error. + */ +int malloc_get_statistics( + rtems_malloc_statistics_t *stats +); + +/** @brief Print Malloc Statistic Usage Report + * + * This method prints a malloc statistics report. + * + * @note It uses printk to print the report. + */ +void malloc_report_statistics(void); + +/** @brief Print Malloc Statistic Usage Report + * + * This method prints a malloc statistics report. + * + * @param[in] context is the context to pass to the print handler + * @param[in] print is the print handler + * + * @note It uses the CALLER's routine to print the report. + */ +void malloc_report_statistics_with_plugin( + void *context, + rtems_printk_plugin_t print +); + +/** + * + * This method is a help memalign implementation which does all + * error checking done by posix_memalign() EXCEPT it does NOT + * place numeric restrictions on the alignment value. + * + * @param[in] pointer points to the user pointer + * @param[in] alignment is the desired alignment + * @param[in] size is the allocation request size in bytes + * + * @return This methods returns zero on success and a POSIX errno + * value to indicate the failure condition. On success + * *pointer will contain the address of the allocated memory. + */ +int rtems_memalign( + void **pointer, + size_t alignment, + size_t size +); + +/** + * @brief Allocates a memory area of size @a size bytes from the heap. + * + * If the alignment parameter @a alignment is not equal to zero, the allocated + * memory area will begin at an address aligned by this value. + * + * If the boundary parameter @a boundary is not equal to zero, the allocated + * memory area will fulfill a boundary constraint. The boundary value + * specifies the set of addresses which are aligned by the boundary value. The + * interior of the allocated memory area will not contain an element of this + * set. The begin or end address of the area may be a member of the set. + * + * A size value of zero will return a unique address which may be freed with + * free(). + * + * The memory allocated by this function can be released with a call to free(). + * + * @return A pointer to the begin of the allocated memory area, or @c NULL if + * no memory is available or the parameters are inconsistent. + */ +void *rtems_heap_allocate_aligned_with_boundary( + size_t size, + uintptr_t alignment, + uintptr_t boundary +); + +/** + * @brief Extends the memory available for the heap using the memory area + * starting at @a area_begin of size @a area_size bytes. + * + * There are no alignment requirements. The memory area must be big enough to + * contain some maintainance blocks. It must not overlap parts of the current + * heap areas. Disconnected subordinate heap areas will lead to used blocks + * which cover the gaps. Extending with an inappropriate memory area will + * corrupt the heap. + * + * @retval RTEMS_SUCCESSFUL Successful operation. + * @retval RTEMS_INVALID_ADDRESS Invalid memory area. + */ +rtems_status_code rtems_heap_extend( + void *area_begin, + uintptr_t area_size +); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h new file mode 100644 index 0000000000..ebba9ca9f7 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/termiostypes.h @@ -0,0 +1,210 @@ +/** + * @file rtems/termiostypes.h + */ + +/* + * RTEMS termios device support internal data structures + * + * COPYRIGHT (c) 1989-2008. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef __TERMIOSTYPES_H +#define __TERMIOSTYPES_H + +#include <rtems.h> +#include <rtems/libio.h> +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Wakeup callback data structure + */ +struct ttywakeup { + void (*sw_pfn)(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_minor_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; + uint32_t 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 rtems_termios_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 void *buf, + int len, + struct rtems_termios_tty *tty +); + +/* + * global hooks for line disciplines + */ +extern struct rtems_termios_linesw rtems_termios_linesw[]; +extern int rtems_termios_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 + +/* baudrate xxx integer type */ +typedef int32_t rtems_termios_baud_t; + +/* convert xxx integer to equivalent Bxxx constant */ +int rtems_termios_number_to_baud(rtems_termios_baud_t baud); + +/* convert Bxxx constant to xxx integer */ +rtems_termios_baud_t rtems_termios_baud_to_number(int termios_baud); + +/* convert Bxxx constant to index */ +int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud); + +/* + * This method is used by a driver to tell termios its + * initial baud rate. This is especially important when + * the device driver does not set the baud to the default + * of B9600. + */ +int rtems_termios_set_initial_baud( + struct rtems_termios_tty *ttyp, + rtems_termios_baud_t baud +); + +#ifdef __cplusplus +} +#endif + +#endif /* TERMIOSTYPES_H */ diff --git a/cpukit/libcsupport/include/rtems/watchdogdrv.h b/cpukit/libcsupport/include/rtems/watchdogdrv.h new file mode 100644 index 0000000000..309ebf7b81 --- /dev/null +++ b/cpukit/libcsupport/include/rtems/watchdogdrv.h @@ -0,0 +1,73 @@ +/** + * @file rtems/watchdogdrv.h + * + * This file describes the Watchdog Driver for all boards. + * A watchdog is a hardware device that will reset the board + * if not touched in a specific way at a regular interval. + * It is a simple, yet important, part of many embedded systems. + */ + +/* + * + * COPYRIGHT (c) 1989-2008. + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_WATCHDOGDRV_H +#define _RTEMS_WATCHDOGDRV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This macro defines the watchdog device driver entry points. + */ +#define WATCHDOG_DRIVER_TABLE_ENTRY \ + { Watchdog_initialize, NULL, NULL, NULL, NULL, Watchdog_control } + +/** + * @brief Watchdog Driver Initialization + * + * This method initializes the watchdog hardware device. The device + * should be initialized as DISABLED since BSP initialization may + * take longer than the timeout period for the watchdog. + * + * @param[in] major is the watchdog device major number + * @param[in] minor is the watchdog device minor number + * @param[in] arguments points to device driver arguments + */ +rtems_device_driver Watchdog_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arguments +); + +/** + * @brief Watchdog Driver IO Control + * + * This method implements the IO Control device driver entry + * point for the watchdog hardware device. + * + * @param[in] major is the watchdog device major number + * @param[in] minor is the watchdog device minor number + * @param[in] arguments points to device driver arguments + */ +rtems_device_driver Watchdog_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arguments +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/spurious.h b/cpukit/libcsupport/include/spurious.h new file mode 100644 index 0000000000..9aeffb53ce --- /dev/null +++ b/cpukit/libcsupport/include/spurious.h @@ -0,0 +1,45 @@ +/** + * @file rtems/spurious.h + */ + +/* 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_SPURIOUS_H +#define _RTEMS_SPURIOUS_H + +#include <rtems/rtems/types.h> /* rtems_id */ +#include <rtems/io.h> /* rtems_device_driver */ + +#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, + uint32_t * +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/sys/filio.h b/cpukit/libcsupport/include/sys/filio.h new file mode 100644 index 0000000000..5a8b7e4bbb --- /dev/null +++ b/cpukit/libcsupport/include/sys/filio.h @@ -0,0 +1,59 @@ +/*- + * 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_ */ diff --git a/cpukit/libcsupport/include/sys/ioccom.h b/cpukit/libcsupport/include/sys/ioccom.h new file mode 100644 index 0000000000..1a7fd27ef7 --- /dev/null +++ b/cpukit/libcsupport/include/sys/ioccom.h @@ -0,0 +1,104 @@ +/*- + * 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. + * 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 + * $FreeBSD: src/sys/sys/ioccom.h,v 1.15 2004/04/07 04:19:49 imp Exp $ + */ +/* + * $Id$ + */ + +#ifndef _SYS_IOCCOM_H_ +#define _SYS_IOCCOM_H_ + +#include <sys/types.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) \ + (u_int32_t) ((u_int32_t)inout | \ + (u_int32_t) ((u_int32_t)((u_int32_t)len & IOCPARM_MASK) << 16) | \ + (u_int32_t)((group) << 8) | \ + (u_int32_t)(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 <rtems/bsd/sys/cdefs.h> + +#ifndef __ioctl_command_defined +typedef u_int32_t ioctl_command_t; +#define __ioctl_command_defined +#endif + +__BEGIN_DECLS +int ioctl(int, ioctl_command_t, ...); +__END_DECLS + +#endif /* !KERNEL */ + +#endif /* !_SYS_IOCCOM_H_ */ diff --git a/cpukit/libcsupport/include/sys/ioctl.h b/cpukit/libcsupport/include/sys/ioctl.h new file mode 100644 index 0000000000..3957396ead --- /dev/null +++ b/cpukit/libcsupport/include/sys/ioctl.h @@ -0,0 +1,66 @@ +/*- + * 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. + * 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 + * $FreeBSD: src/sys/sys/ioctl.h,v 1.13 2004/06/11 11:16:26 phk Exp $ + */ + +/* + * $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_ */ diff --git a/cpukit/libcsupport/include/sys/sockio.h b/cpukit/libcsupport/include/sys/sockio.h new file mode 100644 index 0000000000..15ade24729 --- /dev/null +++ b/cpukit/libcsupport/include/sys/sockio.h @@ -0,0 +1,92 @@ +/*- + * 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. + * 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 + * $FreeBSD: src/sys/sys/sockio.h,v 1.31 2006/07/09 06:04:00 sam Exp $ + */ + +/* + * $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_ */ diff --git a/cpukit/libcsupport/include/sys/statvfs.h b/cpukit/libcsupport/include/sys/statvfs.h new file mode 100644 index 0000000000..1029eb3c6b --- /dev/null +++ b/cpukit/libcsupport/include/sys/statvfs.h @@ -0,0 +1,52 @@ +/* + * COPYRIGHT (c) 2009 Chris Johns <chrisj@rtems.org> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ +/* + * The statvfs as defined by the SUS: + * http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html + */ + +#ifndef _SYS_STATVFS_H_ +#define _SYS_STATVFS_H_ + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint64_t fsblkcnt_t; +typedef uint32_t fsfilcnt_t; + +struct statvfs +{ + unsigned long f_bsize; /**< File system block size. */ + unsigned long f_frsize; /**< Fundamental file system block size. */ + fsblkcnt_t f_blocks; /**< Total number of blocks on file system in units + * of f_frsize. */ + fsblkcnt_t f_bfree; /**< Total number of free blocks. */ + fsblkcnt_t f_bavail; /**< Number of free blocks available to + * non-privileged process. */ + fsfilcnt_t f_files; /**< Total number of file serial numbers. */ + fsfilcnt_t f_ffree; /**< Total number of free file serial numbers. */ + fsfilcnt_t f_favail; /**< Number of file serial numbers available to + * non-privileged process. */ + unsigned long f_fsid; /**< File system ID. */ + unsigned long f_flag; /**< Bit mask of f_flag values. */ + unsigned long f_namemax; /**< Maximum filename length. */ +}; + +extern int statvfs(const char *, struct statvfs *); +extern int fstatvfs(int, struct statvfs *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/libcsupport/include/sys/termios.h b/cpukit/libcsupport/include/sys/termios.h new file mode 100644 index 0000000000..f619c95709 --- /dev/null +++ b/cpukit/libcsupport/include/sys/termios.h @@ -0,0 +1,198 @@ +/* + * 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.rtems.com/license/LICENSE. + * + * $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 */ diff --git a/cpukit/libcsupport/include/sys/ttycom.h b/cpukit/libcsupport/include/sys/ttycom.h new file mode 100644 index 0000000000..f2e491bc50 --- /dev/null +++ b/cpukit/libcsupport/include/sys/ttycom.h @@ -0,0 +1,141 @@ +/*- + * 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_ */ diff --git a/cpukit/libcsupport/include/sys/utsname.h b/cpukit/libcsupport/include/sys/utsname.h new file mode 100644 index 0000000000..b1b2e6ef41 --- /dev/null +++ b/cpukit/libcsupport/include/sys/utsname.h @@ -0,0 +1,52 @@ +/* sys/utsname.h + * + * $Id$ + */ + +#ifndef __POSIX_SYS_UTSNAME_h +#define __POSIX_SYS_UTSNAME_h + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 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. + */ + +#ifdef _KERNEL +#define SYS_NMLN 32 /* uname(2) for the FreeBSD 1.1 ABI. */ +#endif + +#ifndef SYS_NMLN +#define SYS_NMLN 32 /* User can override. */ +#endif + +struct utsname { + char sysname[SYS_NMLN]; /* Name of this implementation of the operating system */ + char nodename[SYS_NMLN]; /* Name of this node within an implementation */ + /* specified communication network */ + char release[SYS_NMLN]; /* Current release level of this implementation */ + char version[SYS_NMLN]; /* Current version level of this release */ + char machine[SYS_NMLN]; /* 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 +); + +#ifdef __cplusplus +} +#endif +#endif +/* end of include file */ diff --git a/cpukit/libcsupport/include/timerdrv.h b/cpukit/libcsupport/include/timerdrv.h new file mode 100644 index 0000000000..872c6db217 --- /dev/null +++ b/cpukit/libcsupport/include/timerdrv.h @@ -0,0 +1,34 @@ +/** + * @file rtems/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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_TIMERDRV_H +#define _RTEMS_TIMERDRV_H + +#include <rtems/btimer.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Intentionally empty */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/libcsupport/include/vmeintr.h b/cpukit/libcsupport/include/vmeintr.h new file mode 100644 index 0000000000..990592c83a --- /dev/null +++ b/cpukit/libcsupport/include/vmeintr.h @@ -0,0 +1,59 @@ +/** + * @file rtems/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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_VMEINTR_H +#define _RTEMS_VMEINTR_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 uint8_t 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 */ diff --git a/cpukit/libcsupport/include/zilog/z8036.h b/cpukit/libcsupport/include/zilog/z8036.h new file mode 100644 index 0000000000..707b6dd567 --- /dev/null +++ b/cpukit/libcsupport/include/zilog/z8036.h @@ -0,0 +1,106 @@ +/** + * @file rtems/zilog/z8036.h + */ + +/* + * This include file defines information related to a Zilog Z8036 + * Counter/Timer/IO Chip. It is a memory mapped part. + * + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_ZILOG_Z8036_H +#define _RTEMS_ZILOG_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) */ + uint8_t MASTER_INTR; /* Master Interrupt Ctl Reg */ + uint8_t MASTER_CFG; /* Master Configuration Ctl Reg */ + uint8_t PORTA_VECTOR; /* Port A - Interrupt Vector */ + uint8_t PORTB_VECTOR; /* Port B - Interrupt Vector */ + uint8_t CNT_TMR_VECTOR; /* Counter/Timer Interrupt Vector */ + uint8_t PORTC_DATA_POLARITY; /* Port C - Data Path Polarity */ + uint8_t PORTC_DIRECTION; /* Port C - Data Direction */ + uint8_t PORTC_SPECIAL_IO_CTL; /* Port C - Special IO Control */ +/* MOST OFTEN ACCESSED REGISTERS (0x08 - 0x0f) */ + uint8_t PORTA_CMD_STATUS; /* Port A - Command Status Reg */ + uint8_t PORTB_CMD_STATUS; /* Port B - Command Status Reg */ + uint8_t CT1_CMD_STATUS; /* Ctr/Timer 1 - Command Status Reg */ + uint8_t CT2_CMD_STATUS; /* Ctr/Timer 2 - Command Status Reg */ + uint8_t CT3_CMD_STATUS; /* Ctr/Timer 3 - Command Status Reg */ + uint8_t PORTA_DATA; /* Port A - Data */ + uint8_t PORTB_DATA; /* Port B - Data */ + uint8_t PORTC_DATA; /* Port C - Data */ +/* COUNTER/TIMER RELATED REGISTERS (0x10-0x1f) */ + uint8_t CT1_CUR_CNT_MSB; /* Ctr/Timer 1 - Current Count (MSB) */ + uint8_t CT1_CUR_CNT_LSB; /* Ctr/Timer 1 - Current Count (LSB) */ + uint8_t CT2_CUR_CNT_MSB; /* Ctr/Timer 2 - Current Count (MSB) */ + uint8_t CT2_CUR_CNT_LSB; /* Ctr/Timer 2 - Current Count (LSB) */ + uint8_t CT3_CUR_CNT_MSB; /* Ctr/Timer 3 - Current Count (MSB) */ + uint8_t CT3_CUR_CNT_LSB; /* Ctr/Timer 3 - Current Count (LSB) */ + uint8_t CT1_TIME_CONST_MSB; /* Ctr/Timer 1 - Time Constant (MSB) */ + uint8_t CT1_TIME_CONST_LSB; /* Ctr/Timer 1 - Time Constant (LSB) */ + uint8_t CT2_TIME_CONST_MSB; /* Ctr/Timer 2 - Time Constant (MSB) */ + uint8_t CT2_TIME_CONST_LSB; /* Ctr/Timer 2 - Time Constant (LSB) */ + uint8_t CT3_TIME_CONST_MSB; /* Ctr/Timer 3 - Time Constant (MSB) */ + uint8_t CT3_TIME_CONST_LSB; /* Ctr/Timer 3 - Time Constant (LSB) */ + uint8_t CT1_MODE_SPEC; /* Ctr/Timer 1 - Mode Specification */ + uint8_t CT2_MODE_SPEC; /* Ctr/Timer 2 - Mode Specification */ + uint8_t CT3_MODE_SPEC; /* Ctr/Timer 3 - Mode Specification */ + uint8_t CURRENT_VECTOR; /* Current Vector */ +/* PORT A SPECIFICATION REGISTERS (0x20 -0x27) */ + uint8_t PORTA_MODE; /* Port A - Mode Specification */ + uint8_t PORTA_HANDSHAKE; /* Port A - Handshake Specification */ + uint8_t PORTA_DATA_POLARITY; /* Port A - Data Path Polarity */ + uint8_t PORTA_DIRECTION; /* Port A - Data Direction */ + uint8_t PORTA_SPECIAL_IO_CTL; /* Port A - Special IO Control */ + uint8_t PORTA_PATT_POLARITY; /* Port A - Pattern Polarity */ + uint8_t PORTA_PATT_TRANS; /* Port A - Pattern Transition */ + uint8_t PORTA_PATT_MASK; /* Port A - Pattern Mask */ +/* PORT B SPECIFICATION REGISTERS (0x28-0x2f) */ + uint8_t PORTB_MODE; /* Port B - Mode Specification */ + uint8_t PORTB_HANDSHAKE; /* Port B - Handshake Specification */ + uint8_t PORTB_DATA_POLARITY; /* Port B - Data Path Polarity */ + uint8_t PORTB_DIRECTION; /* Port B - Data Direction */ + uint8_t PORTB_SPECIAL_IO_CTL; /* Port B - Special IO Control */ + uint8_t PORTB_PATT_POLARITY; /* Port B - Pattern Polarity */ + uint8_t PORTB_PATT_TRANS; /* Port B - Pattern Transition */ + uint8_t PORTB_PATT_MASK; /* Port B - Pattern Mask */ +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cpukit/libcsupport/include/zilog/z8530.h b/cpukit/libcsupport/include/zilog/z8530.h new file mode 100644 index 0000000000..13c63536c4 --- /dev/null +++ b/cpukit/libcsupport/include/zilog/z8530.h @@ -0,0 +1,97 @@ +/** + * @file rtems/zilog/z8530.h + */ + +/* + * This include file defines information related to a Zilog Z8530 + * SCC Chip. It is a IO mapped part. + * + * 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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_ZILOG_Z8530_H +#define _RTEMS_ZILOG_Z8530_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* macros */ + +#define VOL8( ptr ) ((volatile uint8_t *)(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 diff --git a/cpukit/libcsupport/include/zilog/z8536.h b/cpukit/libcsupport/include/zilog/z8536.h new file mode 100644 index 0000000000..b67bd4cf9c --- /dev/null +++ b/cpukit/libcsupport/include/zilog/z8536.h @@ -0,0 +1,114 @@ +/** + * @file rtems/zilog/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.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_ZILOG_Z8536_H +#define _RTEMS_ZILOG_Z8536_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* macros */ + +#define VOL8( ptr ) ((volatile uint8_t *)(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 |