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

📄 serial.c

📁 优龙2410linux2.6.8内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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#if defined(CONFIG_ETRAX_RS485_ON_PORT_G)static int rs485_port_g_bit = CONFIG_ETRAX_RS485_ON_PORT_G_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	CONTROL_PINS_PORT_NOT_USED(3)#endif			}};#else  /* CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED *//* All pins are on either PA or PB for each serial port */#define CONTROL_PINS_PORT_NOT_USED(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 *port;	unsigned char          *shadow;	unsigned char dtr_mask;	unsigned char ri_mask;	unsigned char dsr_mask;	unsigned char cd_mask;};#define dtr_port port#define dtr_shadow shadow#define ri_port port#define ri_shadow shadow#define dsr_port port#define dsr_shadow shadow#define cd_port port#define cd_shadow shadowstatic 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_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_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 */

⌨️ 快捷键说明

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