Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:22:49

0001 /*
0002  *  Console driver for for KIT637_V6 (CSB637)
0003  *
0004  *  This driver uses the shared console driver in
0005  *  ...../libbsp/shared/console.c
0006  *
0007  *  Copyright (c) 2003 by Cogent Computer Systems
0008  *  Written by Jay Monkman <jtm@lopingdog.com>
0009  *
0010  * Modified by Fernando Nicodemos <fgnicodemos@terra.com.br>
0011  * from NCB - Sistemas Embarcados Ltda. (Brazil)
0012  *
0013  *  The license and distribution terms for this file may be
0014  *  found in the file LICENSE in this distribution or at
0015  *  http://www.rtems.org/license/LICENSE.
0016  *
0017  *  Modified and FrameBuffer Console Device Support added by
0018  *  Joel Sherrill, 2009.
0019  */
0020 
0021 #include <bsp.h>
0022 #include <rtems/libio.h>
0023 #include <termios.h>
0024 #include <rtems/bspIo.h>
0025 
0026 #include <at91rm9200.h>
0027 #include <at91rm9200_dbgu.h>
0028 #include <libchip/serial.h>
0029 #include <libchip/sersupp.h>
0030 #include <bspopts.h>
0031 
0032 extern const console_fns dbgu_fns;
0033 
0034 #if ENABLE_LCD
0035   extern const console_fns fbcons_fns;
0036   #define LCD_DEV 1
0037 #else
0038   #define LCD_DEV 0
0039 #endif
0040 
0041 #if (ENABLE_UMON && ENABLE_UMON_CONSOLE)
0042   extern const console_fns umoncons_fns;
0043   #define UMON_CONS_DEV 1
0044 #else
0045   #define UMON_CONS_DEV 0
0046 #endif
0047 
0048 #if ENABLE_USART0 || ENABLE_USART1 || ENABLE_USART2 || ENABLE_USART3
0049   extern const console_fns usart_polling_fns;
0050 #endif
0051 
0052 #if ENABLE_USART0
0053   #define USART0_DEV 1
0054 #else
0055   #define USART0_DEV 0
0056 #endif
0057 
0058 #if ENABLE_USART1
0059   #define USART1_DEV 1
0060 #else
0061   #define USART1_DEV 0
0062 #endif
0063 
0064 #if ENABLE_USART2
0065   #define USART2_DEV 1
0066 #else
0067   #define USART2_DEV 0
0068 #endif
0069 
0070 #if ENABLE_USART3
0071   #define USART3_DEV 1
0072 #else
0073   #define USART3_DEV 0
0074 #endif
0075 
0076 #define NUM_DEVS \
0077   (1 + LCD_DEV + UMON_CONS_DEV + \
0078   USART0_DEV + USART1_DEV + USART2_DEV + USART3_DEV)
0079 
0080 /* These are used by code in console.c */
0081 unsigned long Console_Configuration_Count = NUM_DEVS;
0082 
0083 /*
0084  * There's one item in array for each UART.
0085  *
0086  * Some of these fields are marked "NOT USED". They are not used
0087  * by console.c, but may be used by drivers in libchip
0088  *
0089  * when we add other types of UARTS we will need to move this
0090  * structure to a generic uart.c file with only this in it
0091  */
0092 console_tbl Console_Configuration_Ports[] = {
0093   {
0094     "/dev/com0",       /* sDeviceName */
0095     SERIAL_CUSTOM,     /* deviceType */
0096     &dbgu_fns,         /* pDeviceFns */
0097     NULL,              /* deviceProbe */
0098     NULL,              /* pDeviceFlow */
0099     0,                 /* ulMargin - NOT USED */
0100     0,                 /* ulHysteresis - NOT USED */
0101     NULL,              /* pDeviceParams */
0102     DBGU_BASE,         /* ulCtrlPort1  - Pointer to DBGU regs */
0103     0,                 /* ulCtrlPort2  - NOT USED */
0104     0,                 /* ulDataPort  - NOT USED */
0105     NULL,              /* getRegister - NOT USED */
0106     NULL,              /* setRegister - NOT USED */
0107     NULL,              /* getData - NOT USED */
0108     NULL,              /* setData - NOT USED */
0109     0,                 /* ulClock - NOT USED */
0110     0                  /* ulIntVector - NOT USED */
0111   },
0112 #if ENABLE_LCD
0113   {
0114     "/dev/fbcons",     /* sDeviceName */
0115     SERIAL_CUSTOM,     /* deviceType */
0116     &fbcons_fns,       /* pDeviceFns */
0117     NULL,              /* deviceProbe */
0118     NULL,              /* pDeviceFlow */
0119     0,                 /* ulMargin - NOT USED */
0120     0,                 /* ulHysteresis - NOT USED */
0121     NULL,              /* pDeviceParams */
0122     0,                 /* ulCtrlPort1  - Pointer to DBGU regs */
0123     0,                 /* ulCtrlPort2  - NOT USED */
0124     0,                 /* ulDataPort  - NOT USED */
0125     NULL,              /* getRegister - NOT USED */
0126     NULL,              /* setRegister - NOT USED */
0127     NULL,              /* getData - NOT USED */
0128     NULL,              /* setData - NOT USED */
0129     0,                 /* ulClock - NOT USED */
0130     0                  /* ulIntVector - NOT USED */
0131   },
0132 #endif
0133 #if (ENABLE_UMON && ENABLE_UMON_CONSOLE)
0134   {
0135     "/dev/umon",       /* sDeviceName */
0136     SERIAL_CUSTOM,     /* deviceType */
0137     &umoncons_fns,     /* pDeviceFns */
0138     NULL,              /* deviceProbe */
0139     NULL,              /* pDeviceFlow */
0140     0,                 /* ulMargin - NOT USED */
0141     0,                 /* ulHysteresis - NOT USED */
0142     NULL,              /* pDeviceParams */
0143     0,                 /* ulCtrlPort1  - Pointer to UMON regs */
0144     0,                 /* ulCtrlPort2  - NOT USED */
0145     0,                 /* ulDataPort  - NOT USED */
0146     NULL,              /* getRegister - NOT USED */
0147     NULL,              /* setRegister - NOT USED */
0148     NULL,              /* getData - NOT USED */
0149     NULL,              /* setData - NOT USED */
0150     0,                 /* ulClock - NOT USED */
0151     0                  /* ulIntVector - NOT USED */
0152   },
0153 #endif
0154 #if ENABLE_USART0
0155   {
0156     "/dev/com1",       /* sDeviceName */
0157     SERIAL_CUSTOM,     /* deviceType */
0158     &usart_polling_fns,/* pDeviceFns */
0159     NULL,              /* deviceProbe */
0160     NULL,              /* pDeviceFlow */
0161     0,                 /* ulMargin - NOT USED */
0162     0,                 /* ulHysteresis - NOT USED */
0163     NULL,              /* pDeviceParams */
0164     USART0_BASE,       /* ulCtrlPort1  - Pointer to USART 0 regs */
0165     0,                 /* ulCtrlPort2  - NOT USED */
0166     0,                 /* ulDataPort  - NOT USED */
0167     NULL,              /* getRegister - NOT USED */
0168     NULL,              /* setRegister - NOT USED */
0169     NULL,              /* getData - NOT USED */
0170     NULL,              /* setData - NOT USED */
0171     0,                 /* ulClock - NOT USED */
0172     0                  /* ulIntVector - NOT USED */
0173   },
0174 #endif
0175 #if ENABLE_USART1
0176   {
0177     "/dev/com2",       /* sDeviceName */
0178     SERIAL_CUSTOM,     /* deviceType */
0179     &usart_polling_fns,/* pDeviceFns */
0180     NULL,              /* deviceProbe */
0181     NULL,              /* pDeviceFlow */
0182     0,                 /* ulMargin - NOT USED */
0183     0,                 /* ulHysteresis - NOT USED */
0184     NULL,              /* pDeviceParams */
0185     USART1_BASE,       /* ulCtrlPort1  - Pointer to USART 1 regs */
0186     0,                 /* ulCtrlPort2  - NOT USED */
0187     0,                 /* ulDataPort  - NOT USED */
0188     NULL,              /* getRegister - NOT USED */
0189     NULL,              /* setRegister - NOT USED */
0190     NULL,              /* getData - NOT USED */
0191     NULL,              /* setData - NOT USED */
0192     0,                 /* ulClock - NOT USED */
0193     0                  /* ulIntVector - NOT USED */
0194   },
0195 #endif
0196 #if ENABLE_USART2
0197   {
0198     "/dev/com3",       /* sDeviceName */
0199     SERIAL_CUSTOM,     /* deviceType */
0200     &usart_polling_fns,/* pDeviceFns */
0201     NULL,              /* deviceProbe */
0202     NULL,              /* pDeviceFlow */
0203     0,                 /* ulMargin - NOT USED */
0204     0,                 /* ulHysteresis - NOT USED */
0205     NULL,              /* pDeviceParams */
0206     USART2_BASE,       /* ulCtrlPort1  - Pointer to USART 2 regs */
0207     0,                 /* ulCtrlPort2  - NOT USED */
0208     0,                 /* ulDataPort  - NOT USED */
0209     NULL,              /* getRegister - NOT USED */
0210     NULL,              /* setRegister - NOT USED */
0211     NULL,              /* getData - NOT USED */
0212     NULL,              /* setData - NOT USED */
0213     0,                 /* ulClock - NOT USED */
0214     0                  /* ulIntVector - NOT USED */
0215   },
0216 #endif
0217 #if ENABLE_USART3
0218   {
0219     "/dev/com4",       /* sDeviceName */
0220     SERIAL_CUSTOM,     /* deviceType */
0221     &usart_polling_fns,/* pDeviceFns */
0222     NULL,              /* deviceProbe */
0223     NULL,              /* pDeviceFlow */
0224     0,                 /* ulMargin - NOT USED */
0225     0,                 /* ulHysteresis - NOT USED */
0226     NULL,              /* pDeviceParams */
0227     USART3_BASE,       /* ulCtrlPort1  - Pointer to USART 3 regs */
0228     0,                 /* ulCtrlPort2  - NOT USED */
0229     0,                 /* ulDataPort  - NOT USED */
0230     NULL,              /* getRegister - NOT USED */
0231     NULL,              /* setRegister - NOT USED */
0232     NULL,              /* getData - NOT USED */
0233     NULL,              /* setData - NOT USED */
0234     0,                 /* ulClock - NOT USED */
0235     0                  /* ulIntVector - NOT USED */
0236   }
0237 #endif
0238 };
0239 
0240 console_tbl *BSP_get_uart_from_minor(int minor)
0241 {
0242     return Console_Port_Tbl[minor];
0243 }