⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	  .iclrintradr = R_DMA_CH5_CLR_INTR,	  .ifirstadr   = R_DMA_CH5_FIRST,	  .icmdadr     = R_DMA_CH5_CMD,	  .idescradr   = R_DMA_CH5_DESCR,	  .flags       = STD_FLAGS,	  .rx_ctrl     = DEF_RX,	  .tx_ctrl     = DEF_TX,	  .iseteop     = 1,#ifdef CONFIG_ETRAX_SERIAL_PORT3          .enabled  = 1,#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT	  .dma_out_enabled = 1,#else	  .dma_out_enabled = 0,#endif#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN	  .dma_in_enabled = 1,#else	  .dma_in_enabled = 0#endif#else          .enabled  = 0,	  .dma_out_enabled = 0,	  .dma_in_enabled = 0  #endif }   /* ttyS3 */#endif};#define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial))  static struct tty_struct *serial_table[NR_PORTS]; static struct termios *serial_termios[NR_PORTS];static struct termios *serial_termios_locked[NR_PORTS];#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMERstatic struct fast_timer fast_timers[NR_PORTS];#endif#ifdef CONFIG_ETRAX_SERIAL_PROC_ENTRY#define PROCSTAT(x) xstruct ser_statistics_type {	int overrun_cnt;	int early_errors_cnt;	int ser_ints_ok_cnt;	int errors_cnt;	unsigned long int processing_flip;	unsigned long processing_flip_still_room;	unsigned long int timeout_flush_cnt;	int rx_dma_ints;	int tx_dma_ints;	int rx_tot;	int tx_tot;};static struct ser_statistics_type ser_stat[NR_PORTS];#else#define PROCSTAT(x)#endif /* CONFIG_ETRAX_SERIAL_PROC_ENTRY *//* RS-485 */#if defined(CONFIG_ETRAX_RS485)#ifdef CONFIG_ETRAX_FAST_TIMERstatic struct fast_timer fast_timers_rs485[NR_PORTS];#endif#if defined(CONFIG_ETRAX_RS485_ON_PA)static int rs485_pa_bit = CONFIG_ETRAX_RS485_ON_PA_BIT;#endif#endif/* Info and macros needed for each ports extra control/status signals. */#define E100_STRUCT_PORT(line, pinname) \ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \		(R_PORT_PA_DATA): ( \ (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \		(R_PORT_PB_DATA):&dummy_ser[line]))#define E100_STRUCT_SHADOW(line, pinname) \ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \		(&port_pa_data_shadow): ( \ (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \		(&port_pb_data_shadow):&dummy_ser[line]))#define E100_STRUCT_MASK(line, pinname) \ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \		(1<<CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT): ( \ (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \		(1<<CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT):DUMMY_##pinname##_MASK))#define DUMMY_DTR_MASK 1#define DUMMY_RI_MASK  2#define DUMMY_DSR_MASK 4#define DUMMY_CD_MASK  8static unsigned char dummy_ser[NR_PORTS] = {0xFF, 0xFF, 0xFF,0xFF};/* If not all status pins are used or disabled, use mixed mode */#ifdef CONFIG_ETRAX_SERIAL_PORT0#define SER0_PA_BITSUM (CONFIG_ETRAX_SER0_DTR_ON_PA_BIT+CONFIG_ETRAX_SER0_RI_ON_PA_BIT+CONFIG_ETRAX_SER0_DSR_ON_PA_BIT+CONFIG_ETRAX_SER0_CD_ON_PA_BIT)#if SER0_PA_BITSUM != -4#  if CONFIG_ETRAX_SER0_DTR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER0_RI_ON_PA_BIT == -1#   ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER0_DSR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER0_CD_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#define SER0_PB_BITSUM (CONFIG_ETRAX_SER0_DTR_ON_PB_BIT+CONFIG_ETRAX_SER0_RI_ON_PB_BIT+CONFIG_ETRAX_SER0_DSR_ON_PB_BIT+CONFIG_ETRAX_SER0_CD_ON_PB_BIT)#if SER0_PB_BITSUM != -4#  if CONFIG_ETRAX_SER0_DTR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER0_RI_ON_PB_BIT == -1#   ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER0_DSR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER0_CD_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#endif /* PORT0 */#ifdef CONFIG_ETRAX_SERIAL_PORT1#define SER1_PA_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PA_BIT+CONFIG_ETRAX_SER1_RI_ON_PA_BIT+CONFIG_ETRAX_SER1_DSR_ON_PA_BIT+CONFIG_ETRAX_SER1_CD_ON_PA_BIT)#if SER1_PA_BITSUM != -4#  if CONFIG_ETRAX_SER1_DTR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER1_RI_ON_PA_BIT == -1#   ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER1_DSR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER1_CD_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#define SER1_PB_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PB_BIT+CONFIG_ETRAX_SER1_RI_ON_PB_BIT+CONFIG_ETRAX_SER1_DSR_ON_PB_BIT+CONFIG_ETRAX_SER1_CD_ON_PB_BIT)#if SER1_PB_BITSUM != -4#  if CONFIG_ETRAX_SER1_DTR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER1_RI_ON_PB_BIT == -1#   ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER1_DSR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER1_CD_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#endif /* PORT1 */#ifdef CONFIG_ETRAX_SERIAL_PORT2#define SER2_PA_BITSUM (CONFIG_ETRAX_SER2_DTR_ON_PA_BIT+CONFIG_ETRAX_SER2_RI_ON_PA_BIT+CONFIG_ETRAX_SER2_DSR_ON_PA_BIT+CONFIG_ETRAX_SER2_CD_ON_PA_BIT)#if SER2_PA_BITSUM != -4#  if CONFIG_ETRAX_SER2_DTR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER2_RI_ON_PA_BIT == -1#   ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER2_DSR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER2_CD_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#define SER2_PB_BITSUM (CONFIG_ETRAX_SER2_DTR_ON_PB_BIT+CONFIG_ETRAX_SER2_RI_ON_PB_BIT+CONFIG_ETRAX_SER2_DSR_ON_PB_BIT+CONFIG_ETRAX_SER2_CD_ON_PB_BIT)#if SER2_PB_BITSUM != -4#  if CONFIG_ETRAX_SER2_DTR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER2_RI_ON_PB_BIT == -1#   ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER2_DSR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER2_CD_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#endif /* PORT2 */#ifdef CONFIG_ETRAX_SERIAL_PORT3#define SER3_PA_BITSUM (CONFIG_ETRAX_SER3_DTR_ON_PA_BIT+CONFIG_ETRAX_SER3_RI_ON_PA_BIT+CONFIG_ETRAX_SER3_DSR_ON_PA_BIT+CONFIG_ETRAX_SER3_CD_ON_PA_BIT)#if SER3_PA_BITSUM != -4#  if CONFIG_ETRAX_SER3_DTR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER3_RI_ON_PA_BIT == -1#   ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER3_DSR_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER3_CD_ON_PA_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#define SER3_PB_BITSUM (CONFIG_ETRAX_SER3_DTR_ON_PB_BIT+CONFIG_ETRAX_SER3_RI_ON_PB_BIT+CONFIG_ETRAX_SER3_DSR_ON_PB_BIT+CONFIG_ETRAX_SER3_CD_ON_PB_BIT)#if SER3_PB_BITSUM != -4#  if CONFIG_ETRAX_SER3_DTR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#   endif# if CONFIG_ETRAX_SER3_RI_ON_PB_BIT == -1#   ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#     define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#   endif#  endif#  if CONFIG_ETRAX_SER3_DSR_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#  if CONFIG_ETRAX_SER3_CD_ON_PB_BIT == -1#    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED#      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1#    endif#  endif#endif#endif /* PORT3 */#if defined(CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED) || \    defined(CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED) || \    defined(CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED) || \    defined(CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED)#define CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED#endif#ifdef CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED/* The pins can be mixed on PA and PB */#define CONTROL_PINS_PORT_NOT_USED(line) \  &dummy_ser[line], &dummy_ser[line], \  &dummy_ser[line], &dummy_ser[line], \  &dummy_ser[line], &dummy_ser[line], \  &dummy_ser[line], &dummy_ser[line], \  DUMMY_DTR_MASK, DUMMY_RI_MASK, DUMMY_DSR_MASK, DUMMY_CD_MASK    struct control_pins{	volatile unsigned char *dtr_port;	unsigned char          *dtr_shadow;	volatile unsigned char *ri_port;	unsigned char          *ri_shadow;	volatile unsigned char *dsr_port;	unsigned char          *dsr_shadow;	volatile unsigned char *cd_port;	unsigned char          *cd_shadow;	unsigned char dtr_mask;	unsigned char ri_mask;	unsigned char dsr_mask;	unsigned char cd_mask;};static const struct control_pins e100_modem_pins[NR_PORTS] = {	/* Ser 0 */	{#ifdef CONFIG_ETRAX_SERIAL_PORT0	E100_STRUCT_PORT(0,DTR), E100_STRUCT_SHADOW(0,DTR),	E100_STRUCT_PORT(0,RI),  E100_STRUCT_SHADOW(0,RI),	E100_STRUCT_PORT(0,DSR), E100_STRUCT_SHADOW(0,DSR),	E100_STRUCT_PORT(0,CD),  E100_STRUCT_SHADOW(0,CD),	E100_STRUCT_MASK(0,DTR),	E100_STRUCT_MASK(0,RI),	E100_STRUCT_MASK(0,DSR),	E100_STRUCT_MASK(0,CD)#else	CONTROL_PINS_PORT_NOT_USED(0)#endif		},	/* Ser 1 */	{#ifdef CONFIG_ETRAX_SERIAL_PORT1	  	E100_STRUCT_PORT(1,DTR), E100_STRUCT_SHADOW(1,DTR),	E100_STRUCT_PORT(1,RI),  E100_STRUCT_SHADOW(1,RI),	E100_STRUCT_PORT(1,DSR), E100_STRUCT_SHADOW(1,DSR),	E100_STRUCT_PORT(1,CD),  E100_STRUCT_SHADOW(1,CD),	E100_STRUCT_MASK(1,DTR),	E100_STRUCT_MASK(1,RI),	E100_STRUCT_MASK(1,DSR),	E100_STRUCT_MASK(1,CD)#else	CONTROL_PINS_PORT_NOT_USED(1)#endif			},	/* Ser 2 */	{#ifdef CONFIG_ETRAX_SERIAL_PORT2	  	E100_STRUCT_PORT(2,DTR), E100_STRUCT_SHADOW(2,DTR),	E100_STRUCT_PORT(2,RI),  E100_STRUCT_SHADOW(2,RI),	E100_STRUCT_PORT(2,DSR), E100_STRUCT_SHADOW(2,DSR),	E100_STRUCT_PORT(2,CD),  E100_STRUCT_SHADOW(2,CD),	E100_STRUCT_MASK(2,DTR),	E100_STRUCT_MASK(2,RI),	E100_STRUCT_MASK(2,DSR),	E100_STRUCT_MASK(2,CD)#else	CONTROL_PINS_PORT_NOT_USED(2)#endif			},	/* Ser 3 */	{#ifdef CONFIG_ETRAX_SERIAL_PORT3	  	E100_STRUCT_PORT(3,DTR), E100_STRUCT_SHADOW(3,DTR),	E100_STRUCT_PORT(3,RI),  E100_STRUCT_SHADOW(3,RI),	E100_STRUCT_PORT(3,DSR), E100_STRUCT_SHADOW(3,DSR),	E100_STRUCT_PORT(3,CD),  E100_STRUCT_SHADOW(3,CD),	E100_STRUCT_MASK(3,DTR),	E100_STRUCT_MASK(3,RI),	E100_STRUCT_MASK(3,DSR),	E100_STRUCT_MASK(3,CD)#else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -