Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:12

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSImplApplConfig
0007  *
0008  * @brief This header file evaluates configuration options related to the I/O
0009  *   driver configuration.
0010  */
0011 
0012 /*
0013  * Copyright (C) 2020 embedded brains GmbH & Co. KG
0014  *
0015  * Redistribution and use in source and binary forms, with or without
0016  * modification, are permitted provided that the following conditions
0017  * are met:
0018  * 1. Redistributions of source code must retain the above copyright
0019  *    notice, this list of conditions and the following disclaimer.
0020  * 2. Redistributions in binary form must reproduce the above copyright
0021  *    notice, this list of conditions and the following disclaimer in the
0022  *    documentation and/or other materials provided with the distribution.
0023  *
0024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0034  * POSSIBILITY OF SUCH DAMAGE.
0035  */
0036 
0037 #ifndef _RTEMS_CONFDEFS_IODRIVERS_H
0038 #define _RTEMS_CONFDEFS_IODRIVERS_H
0039 
0040 #ifndef __CONFIGURATION_TEMPLATE_h
0041 #error "Do not include this file directly, use <rtems/confdefs.h> instead"
0042 #endif
0043 
0044 #ifdef CONFIGURE_INIT
0045 
0046 #include <rtems/confdefs/bsp.h>
0047 
0048 #if !defined(CONFIGURE_DISABLE_BSP_SETTINGS) && \
0049   defined(CONFIGURE_BSP_PREREQUISITE_DRIVERS)
0050 #define _CONFIGURE_BSP_PREREQUISITE_DRIVERS CONFIGURE_BSP_PREREQUISITE_DRIVERS
0051 #endif
0052 
0053 #if defined(_CONFIGURE_BSP_PREREQUISITE_DRIVERS) || \
0054   defined(CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS) || \
0055   defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) || \
0056   defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) || \
0057   defined(CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER) || \
0058   defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) || \
0059   defined(CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER) || \
0060   defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) || \
0061   defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) || \
0062   defined(CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER) || \
0063   defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
0064 #define _CONFIGURE_HAS_IO_DRIVERS
0065 #endif
0066 
0067 #if defined(_CONFIGURE_HAS_IO_DRIVERS) || \
0068   defined(CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER) || \
0069   CONFIGURE_MAXIMUM_DRIVERS > 0
0070 
0071 #include <rtems/ioimpl.h>
0072 #include <rtems/sysinit.h>
0073 
0074 #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
0075   #if defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER) \
0076     || defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER)
0077     #error "CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER, CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER are mutually exclusive"
0078   #endif
0079 
0080   #include <rtems/console.h>
0081 #endif
0082 
0083 #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
0084   #include <rtems/rtc.h>
0085 #endif
0086 
0087 #ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
0088   #include <rtems/watchdogdrv.h>
0089 #endif
0090 
0091 #ifdef CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
0092   #include <rtems/framebuffer.h>
0093 #endif
0094 
0095 #ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
0096   #include <rtems/devnull.h>
0097 #endif
0098 
0099 #ifdef CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
0100   #include <rtems/devzero.h>
0101 #endif
0102 
0103 #ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
0104   #ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
0105     #define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
0106   #endif
0107 
0108   #include <libchip/ide_ctrl.h>
0109 #endif
0110 
0111 #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
0112   #include <libchip/ata.h>
0113 #endif
0114 
0115 #ifndef CONFIGURE_MAXIMUM_DRIVERS
0116   #define CONFIGURE_MAXIMUM_DRIVERS
0117 #endif
0118 
0119 #define NULL_DRIVER_TABLE_ENTRY { NULL, NULL, NULL, NULL, NULL, NULL }
0120 
0121 #ifdef __cplusplus
0122 extern "C" {
0123 #endif
0124 
0125 rtems_driver_address_table
0126 _IO_Driver_address_table[ CONFIGURE_MAXIMUM_DRIVERS ] = {
0127   #ifdef _CONFIGURE_BSP_PREREQUISITE_DRIVERS
0128     _CONFIGURE_BSP_PREREQUISITE_DRIVERS,
0129   #endif
0130   #ifdef CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
0131     CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS,
0132   #endif
0133   #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
0134     CONSOLE_DRIVER_TABLE_ENTRY,
0135   #endif
0136   #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
0137     RTC_DRIVER_TABLE_ENTRY,
0138   #endif
0139   #ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
0140     WATCHDOG_DRIVER_TABLE_ENTRY,
0141   #endif
0142   #ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
0143     DEVNULL_DRIVER_TABLE_ENTRY,
0144   #endif
0145   #ifdef CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
0146     DEVZERO_DRIVER_TABLE_ENTRY,
0147   #endif
0148   #ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
0149     IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
0150   #endif
0151   #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
0152     ATA_DRIVER_TABLE_ENTRY,
0153   #endif
0154   #ifdef CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
0155     FRAME_BUFFER_DRIVER_TABLE_ENTRY,
0156   #endif
0157   #ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
0158     CONFIGURE_APPLICATION_EXTRA_DRIVERS,
0159   #endif
0160   #if defined(CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER) || \
0161     !defined(_CONFIGURE_HAS_IO_DRIVERS)
0162     NULL_DRIVER_TABLE_ENTRY
0163   #endif
0164 };
0165 
0166 const size_t _IO_Number_of_drivers =
0167   RTEMS_ARRAY_SIZE( _IO_Driver_address_table );
0168 
0169 RTEMS_SYSINIT_ITEM(
0170   _IO_Initialize_all_drivers,
0171   RTEMS_SYSINIT_DEVICE_DRIVERS,
0172   RTEMS_SYSINIT_ORDER_MIDDLE
0173 );
0174 
0175 #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
0176   #ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
0177     #define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
0178   #endif
0179 
0180   rtems_task_priority rtems_ata_driver_task_priority
0181     = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
0182 #endif
0183 
0184 #ifdef __cplusplus
0185 }
0186 #endif
0187 
0188 #endif /* _CONFIGURE_HAS_IO_DRIVERS) ||
0189   CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER ||
0190   CONFIGURE_MAXIMUM_DRIVERS */
0191 
0192 
0193 /*
0194  * If any flavor of console driver is configured, then configure the post
0195  * driver hook which opens /dev/console as stdin, stdout, and stderr.
0196  *
0197  * NOTE: This also results in an atexit() handler being registered to close
0198  *       /dev/console.
0199  */
0200 #if defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) || \
0201     defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER) || \
0202     defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER)
0203 
0204   #include <rtems/libio.h>
0205 
0206   RTEMS_SYSINIT_ITEM(
0207     rtems_libio_post_driver,
0208     RTEMS_SYSINIT_STD_FILE_DESCRIPTORS,
0209     RTEMS_SYSINIT_ORDER_MIDDLE
0210   );
0211 #endif
0212 
0213 #endif /* CONFIGURE_INIT */
0214 
0215 #endif /* _RTEMS_CONFDEFS_IODRIVERS_H */