summaryrefslogtreecommitdiffstats
path: root/cpukit/include/dev/serial
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-12-23 18:18:56 +1100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-01-25 08:45:26 +0100
commit2afb22b7e1ebcbe40373ff7e0efae7d207c655a9 (patch)
tree44759efe9374f13200a97e96d91bd9a2b7e5ce2a /cpukit/include/dev/serial
parentMAINTAINERS: Add myself to Write After Approval. (diff)
downloadrtems-2afb22b7e1ebcbe40373ff7e0efae7d207c655a9.tar.bz2
Remove make preinstall
A speciality of the RTEMS build system was the make preinstall step. It copied header files from arbitrary locations into the build tree. The header files were included via the -Bsome/build/tree/path GCC command line option. This has at least seven problems: * The make preinstall step itself needs time and disk space. * Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error. * There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult. * The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit. * An introduction of a new build system is difficult. * Include paths specified by the -B option are system headers. This may suppress warnings. * The parallel build had sporadic failures on some hosts. This patch removes the make preinstall step. All installed header files are moved to dedicated include directories in the source tree. Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc, etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g. erc32, imx, qoriq, etc. The new cpukit include directories are: * cpukit/include * cpukit/score/cpu/@RTEMS_CPU@/include * cpukit/libnetworking The new BSP include directories are: * bsps/include * bsps/@RTEMS_CPU@/include * bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include There are build tree include directories for generated files. The include directory order favours the most general header file, e.g. it is not possible to override general header files via the include path order. The "bootstrap -p" option was removed. The new "bootstrap -H" option should be used to regenerate the "headers.am" files. Update #3254.
Diffstat (limited to 'cpukit/include/dev/serial')
-rw-r--r--cpukit/include/dev/serial/sc16is752.h262
1 files changed, 262 insertions, 0 deletions
diff --git a/cpukit/include/dev/serial/sc16is752.h b/cpukit/include/dev/serial/sc16is752.h
new file mode 100644
index 0000000000..7e5b47aaa2
--- /dev/null
+++ b/cpukit/include/dev/serial/sc16is752.h
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _DEV_SERIAL_SC16IS752_H
+#define _DEV_SERIAL_SC16IS752_H
+
+#include <sys/ioccom.h>
+
+#include <rtems/termiostypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup SC16IS752 SC16IS752 Serial Device Driver
+ *
+ * @ingroup TermiostypesSupport
+ */
+
+typedef enum {
+ SC16IS752_MODE_RS232,
+ SC16IS752_MODE_RS485
+} sc16is752_mode;
+
+typedef struct sc16is752_context sc16is752_context;
+
+/**
+ * @brief SC16IS752 device context.
+ */
+struct sc16is752_context {
+ rtems_termios_device_context base;
+
+ /**
+ * @brief Writes a register.
+ *
+ * Internal handler.
+ */
+ int (*write_reg)(
+ sc16is752_context *ctx,
+ uint8_t addr,
+ const uint8_t *data,
+ size_t len
+ );
+
+ /**
+ * @brief Reads a register.
+ *
+ * Internal handler.
+ */
+ int (*read_reg)(
+ sc16is752_context *ctx,
+ uint8_t addr,
+ uint8_t *data,
+ size_t len
+ );
+
+ /**
+ * @brief Reads two registers.
+ *
+ * Internal handler.
+ */
+ int (*read_2_reg)(
+ sc16is752_context *ctx,
+ uint8_t addr_0,
+ uint8_t addr_1,
+ uint8_t data[2]
+ );
+
+ /**
+ * @brief First open.
+ *
+ * Internal handler.
+ */
+ bool (*first_open)(sc16is752_context *ctx);
+
+ /**
+ * @brief Last close.
+ *
+ * Internal handler.
+ */
+ void (*last_close)(sc16is752_context *ctx);
+
+ /**
+ * @brief Shall install the interrupt handler.
+ *
+ * Must be initialized by the user before the device creation.
+ */
+ bool (*install_irq)(sc16is752_context *ctx);
+
+ /**
+ * @brief Shall remove the interrupt handler.
+ *
+ * Must be initialized by the user before the device creation.
+ */
+ void (*remove_irq)(sc16is752_context *ctx);
+
+ /**
+ * @brief Device mode.
+ *
+ * Must be initialized by the user before the device creation.
+ */
+ sc16is752_mode mode;
+
+ /**
+ * @brief Input frequency in Hertz (dependent on crystal, see XTAL1 and XTAL2
+ * pins).
+ *
+ * Must be initialized by the user before the device creation.
+ */
+ uint32_t input_frequency;
+
+ /**
+ * @brief Corresponding Termios structure.
+ *
+ * Internal variable.
+ */
+ rtems_termios_tty *tty;
+
+ /**
+ * @brief Shadow Interrupt Enable Register (IER).
+ *
+ * Internal variable.
+ */
+ uint8_t ier;
+
+ /**
+ * @brief Characters placed into transmit FIFO.
+ *
+ * Internal variable.
+ */
+ uint8_t tx_in_progress;
+
+ /**
+ * @brief Count of free characters in the transmit FIFO.
+ *
+ * Internal variable.
+ */
+ uint8_t tx_fifo_free;
+
+ /**
+ * @brief Shadow Line Control Register (LCR).
+ *
+ * Internal variable.
+ */
+ uint8_t lcr;
+
+ /**
+ * @brief Shadow Extra Features Control Register (EFCR).
+ *
+ * Internal variable.
+ */
+ uint8_t efcr;
+};
+
+/**
+ * @brief SC16IS752 SPI context.
+ */
+typedef struct {
+ sc16is752_context base;
+
+ /**
+ * @brief The SPI bus device file descriptor.
+ *
+ * Internal variable.
+ */
+ int fd;
+
+ /**
+ * @brief The SPI device chip select.
+ *
+ * Must be initialized by the user before the call to sc16is752_spi_create().
+ */
+ uint8_t cs;
+
+ /**
+ * @brief The SPI bus speed in Hertz.
+ *
+ * Must be initialized by the user before the call to sc16is752_spi_create().
+ */
+ uint32_t speed_hz;
+
+ /**
+ * @brief The SPI bus device path.
+ *
+ * Must be initialized by the user before the call to sc16is752_spi_create().
+ */
+ const char *spi_path;
+} sc16is752_spi_context;
+
+/**
+ * @brief SC16IS752 I2C context.
+ */
+typedef struct {
+ sc16is752_context base;
+
+ /**
+ * @brief The I2C bus device file descriptor.
+ *
+ * Internal variable.
+ */
+ int fd;
+
+ /**
+ * @brief The I2C bus device path.
+ *
+ * Must be initialized before the call to sc16is752_i2c_create().
+ */
+ const char *bus_path;
+} sc16is752_i2c_context;
+
+const rtems_termios_device_handler sc16is752_termios_handler;
+
+/**
+ * @brief The interrupt handler for receive and transmit operations.
+ *
+ * @param[in] arg The device context.
+ */
+void sc16is752_interrupt_handler(void *arg);
+
+/**
+ * @brief Creates an SPI connected SC16IS752 device.
+ *
+ * @param[in] ctx The SPI SC16IS752 device context.
+ * @param[in] device_path The device file path for the new device.
+ *
+ * @retval RTEMS_SUCCESSFUL Successful operation.
+ * @retval other See rtems_termios_device_install().
+ */
+rtems_status_code sc16is752_spi_create(
+ sc16is752_spi_context *ctx,
+ const char *device_path
+);
+
+/**
+ * @brief Enables the sleep mode if non-zero, otherwise disables it.
+ *
+ * The sleep mode is disabled by default.
+ */
+#define SC16IS752_SET_SLEEP_MODE _IOW('d', 0, int)
+
+/**
+ * @brief Returns non-zero in case the sleep mode is enabled, otherwise zero.
+ */
+#define SC16IS752_GET_SLEEP_MODE _IOR('d', 0, int)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _DEV_SERIAL_SC16IS752_H */