Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup Console
0007  *
0008  * @brief Generic libchip console select
0009  */
0010 
0011 /*
0012  *  This file contains a routine to select the
0013  *  console based upon a number of criteria.
0014  *
0015  *  COPYRIGHT (c) 2011.
0016  *  On-Line Applications Research Corporation (OAR).
0017  *
0018  * Redistribution and use in source and binary forms, with or without
0019  * modification, are permitted provided that the following conditions
0020  * are met:
0021  * 1. Redistributions of source code must retain the above copyright
0022  *    notice, this list of conditions and the following disclaimer.
0023  * 2. Redistributions in binary form must reproduce the above copyright
0024  *    notice, this list of conditions and the following disclaimer in the
0025  *    documentation and/or other materials provided with the distribution.
0026  *
0027  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0028  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0029  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0030  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0031  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0032  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0033  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0035  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0036  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0037  * POSSIBILITY OF SUCH DAMAGE.
0038  */
0039 
0040 #include <bsp.h>
0041 #include <bsp/fatal.h>
0042 #include <rtems/libio.h>
0043 #include <stdlib.h>
0044 #include <assert.h>
0045 #include <termios.h>
0046 
0047 #include <rtems/termiostypes.h>
0048 #include <libchip/serial.h>
0049 #include "legacy-console.h"
0050 
0051 /*
0052  * Method to return true if the device associated with the
0053  * minor number probs available.
0054  */
0055 static bool bsp_Is_Available( rtems_device_minor_number minor )
0056 {
0057   console_tbl  *cptr = Console_Port_Tbl[minor];
0058 
0059   /*
0060    * First perform the configuration dependent probe, then the
0061    * device dependent probe
0062    */
0063   if ((!cptr->deviceProbe || cptr->deviceProbe(minor)) &&
0064        cptr->pDeviceFns->deviceProbe(minor)) {
0065     return true;
0066   }
0067   return false;
0068 }
0069 
0070 /*
0071  * Method to return the first available device.
0072  */
0073 static rtems_device_minor_number bsp_First_Available_Device( void )
0074 {
0075   rtems_device_minor_number minor;
0076 
0077   for (minor=0; minor < Console_Port_Count ; minor++) {
0078     console_tbl  *cptr = Console_Port_Tbl[minor];
0079 
0080     /*
0081      * First perform the configuration dependent probe, then the
0082      * device dependent probe
0083      */
0084 
0085     if ((!cptr->deviceProbe || cptr->deviceProbe(minor)) &&
0086          cptr->pDeviceFns->deviceProbe(minor)) {
0087       return minor;
0088     }
0089   }
0090 
0091   /*
0092    *  Error No devices were found.  We will want to bail here.
0093    */
0094   bsp_fatal(BSP_FATAL_CONSOLE_NO_DEV);
0095 }
0096 
0097 void bsp_console_select(void)
0098 {
0099 
0100   /*
0101    *  Reset Console_Port_Minor and
0102    *  BSPPrintkPort here if desired.
0103    *
0104    *  This default version allows the bsp to set these
0105    *  values at creation and will not touch them again
0106    *  unless the selected port number is not available.
0107    */
0108 
0109   /*
0110    * If the device that was selected isn't available then
0111    * let the user know and select the first available device.
0112    */
0113   if ( !bsp_Is_Available( Console_Port_Minor ) ) {
0114     Console_Port_Minor = bsp_First_Available_Device();
0115   }
0116 }