rs232dbg/aip_comP.h
branchkernel2.6
changeset 26 60435f959e5c
parent 25 7d124bfba3ce
child 27 d75ef6b46e33
equal deleted inserted replaced
25:7d124bfba3ce 26:60435f959e5c
     1 /**
       
     2  * rt_com
       
     3  * ======
       
     4  *
       
     5  * RT-Linux kernel module for communication across serial lines.
       
     6  *
       
     7  * Copyright (C) 1997 Jens Michaelsen
       
     8  * Copyright (C) 1997-2000 Jochen Kupper
       
     9  * Copyright (C) 1999 Hua Mao <hmao@nmt.edu>
       
    10  *
       
    11  * This program is free software; you can redistribute it and/or
       
    12  * modify it under the terms of the GNU General Public License as
       
    13  * published by the Free Software Foundation; either version 2 of the
       
    14  * License, or (at your option) any later version.
       
    15  *
       
    16  * This program is distributed in the hope that it will be useful, but
       
    17  * WITHOUT ANY WARRANTY; without even the implied warranty of
       
    18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
       
    19  * General Public License for more details.
       
    20  *
       
    21  * You should have received a copy of the GNU General Public License
       
    22  * along with this program; see the file License. if not, write to the
       
    23  * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
       
    24  * MA 02111-1307, USA.
       
    25  */
       
    26 
       
    27 
       
    28 
       
    29 #ifndef AIP_COM_P_H
       
    30 #define AIP_COM_P_H
       
    31 
       
    32 
       
    33 #define RT_COM_NAME "rt_com(aip)"  //Hm, IgH
       
    34 
       
    35 /* input/ouput buffer (FIFO) sizes */
       
    36 #define RT_COM_BUF_SIZ        2048 //256	// MUST BE ONLY POWER OF 2 !!
       
    37 /* amount of free space on input buffer for RTS reset */
       
    38 #define RT_COM_BUF_LOW        (RT_COM_BUF_SIZ / 3)
       
    39 /* amount of free space on input buffer for RTS set */
       
    40 #define RT_COM_BUF_HI         (RT_COM_BUF_SIZ * 2 / 3)
       
    41 /* limit of free space on input buffer for buffer full error */
       
    42 #define RT_COM_BUF_FULL       20
       
    43 
       
    44 
       
    45 /* usage flags */
       
    46 #define RT_COM_PORT_FREE      0x00
       
    47 #define RT_COM_PORT_INUSE     0x01
       
    48 #define RT_COM_PORT_SETUP     0x02
       
    49 
       
    50 
       
    51 /* Some hardware description */
       
    52 #define RT_COM_BASE_BAUD      115200
       
    53 
       
    54 /** Interrupt Service Routines
       
    55  * These are private functions */
       
    56 static void rt_com0_isr( void );
       
    57 static void rt_com1_isr( void );
       
    58 
       
    59 
       
    60 
       
    61 
       
    62 /** Interrupt handling
       
    63  *
       
    64  * Define internal convinience macros for interrupt handling, so we
       
    65  * get rid of the system dependencies.
       
    66  */
       
    67 //#define rt_com_irq_off( state )         do{}while(0) //rt_global_save_flags( &state ); rt_global_cli() schreiben und lesen sowieso in IRQ Hm
       
    68 //#define rt_com_irq_on(state)            do{}while(0) //rt_global_restore_flags( state ) 
       
    69 #define rt_com_irq_off( state )         rt_global_save_flags( &state ); rt_global_cli() 
       
    70 #define rt_com_irq_on(state)            rt_global_restore_flags( state ) 
       
    71 #define rt_com_request_irq( irq, isr )  rt_request_global_irq( irq, isr ); rt_enable_irq( irq );
       
    72 #define rt_com_free_irq( irq )          rt_free_global_irq( irq )
       
    73 
       
    74 
       
    75 /* port register offsets */
       
    76 #define RT_COM_RXB  0x00
       
    77 #define RT_COM_TXB  0x00
       
    78 #define RT_COM_IER  0x01
       
    79 #define RT_COM_IIR  0x02
       
    80 #define RT_COM_FCR  0x02
       
    81 #define RT_COM_LCR  0x03
       
    82 #define RT_COM_MCR  0x04
       
    83 #define RT_COM_LSR  0x05
       
    84 #define RT_COM_MSR  0x06
       
    85 #define RT_COM_DLL  0x00
       
    86 #define RT_COM_DLM  0x01
       
    87 
       
    88 /** MCR Modem Control Register masks */
       
    89 #define MCR_DTR               0x01 // Data Terminal Ready
       
    90 #define MCR_RTS               0x02 // Request To Send 
       
    91 #define MCR_OUT1              0x04
       
    92 #define MCR_OUT2              0x08
       
    93 #define MCR_LOOP              0x10
       
    94 #define MCR_AFE               0x20 // AutoFlow Enable
       
    95 
       
    96 /** IER Interrupt Enable Register masks */
       
    97 #define IER_ERBI              0x01  // Enable Received Data Available Interrupt
       
    98 #define IER_ETBEI             0x02  // Enable Transmitter Holding Register
       
    99                                     // Empty Interrupt
       
   100 #define IER_ELSI              0x04  // Enable Receiver Line Status Interrupt
       
   101 #define IER_EDSSI             0x08  // Enable Modem Status Interrupt
       
   102 
       
   103 /** MSR Modem Status Register masks */
       
   104 #define MSR_DELTA_CTS         0x01
       
   105 #define MSR_DELTA_DSR         0x02
       
   106 #define MSR_TERI              0x04
       
   107 #define MSR_DELTA_DCD         0x08
       
   108 #define MSR_CTS               0x10
       
   109 #define MSR_DSR               0x20
       
   110 #define MSR_RI                0x40
       
   111 #define MSR_DCD               0x80
       
   112 
       
   113 /** LSR Line Status Register masks */
       
   114 #define LSR_DATA_READY        0x01
       
   115 #define LSR_OVERRUN_ERR       0x02
       
   116 #define LSR_PARITY_ERR        0x04
       
   117 #define LSR_FRAMING_ERR       0x08
       
   118 #define LSR_BREAK             0x10
       
   119 #define LSR_THRE              0x20	// Transmitter Holding Register
       
   120 #define LSR_TEMT              0x40	// Transmitter Empty
       
   121 
       
   122 /** FCR FIFO Control Register masks */
       
   123 #define FCR_FIFO_ENABLE       0x01
       
   124 #define FCR_INPUT_FIFO_RESET  0x02
       
   125 #define FCR_OUTPUT_FIFO_RESET 0x04
       
   126 
       
   127 /** data buffer
       
   128  *
       
   129  * Used for buffering of input and output data. Two buffers per port
       
   130  * (one for input, one for output). Organized as a FIFO */
       
   131 struct rt_buf_struct{
       
   132     unsigned int  head;
       
   133     unsigned int  tail;
       
   134     char buf[ RT_COM_BUF_SIZ ];
       
   135 };
       
   136 
       
   137 
       
   138 
       
   139 /** Port data
       
   140  *
       
   141  * Internal information structure containing all data for a port. One
       
   142  * structure for every port.
       
   143  *
       
   144  * Contains all current setup parameters and all data currently
       
   145  * buffered by rt_com.
       
   146  *
       
   147  * mode (functioning mode)
       
   148  *   possible values:
       
   149  *   - RT_COM_DSR_ON_TX     - for standard functioning mode (DSR needed on TX)
       
   150  *   - RT_COM_NO_HAND_SHAKE - for comunication without hand shake signals
       
   151  *                            (only RXD-TXD-GND)
       
   152  *   - RT_COM_HW_FLOW       - for hardware flow control (RTS-CTS)
       
   153  *   Of course RT_COM_DSR_ON_TX and RT_COM_NO_HAND_SHAKE cannot be
       
   154  *   sppecified at the same time.
       
   155  *
       
   156  *   NOTE: When you select a mode that uses hand shake signals pay
       
   157  *   attention that no input signals (CTS,DSR,RI,DCD) must be
       
   158  *   floating.
       
   159  *
       
   160  * used (usage flag)
       
   161  *   possible values:
       
   162  *   - RT_COM_PORT_INUSE - port region requested by init_module
       
   163  *   - RT_COM_PORT_FREE  - port region requested by rt_com_set_param
       
   164  *   - RT_COM_PORT_SETUP - port parameters are setup,
       
   165  *                         don't specify at compile time !
       
   166  *
       
   167  * error
       
   168  *   last error detected
       
   169  *
       
   170  * ier (interrupt enable register)
       
   171  *   copy of IER chip register, last value set by rt_com.
       
   172  *
       
   173  * mcr (modem control register)
       
   174  *   copy of the MCR internal register
       
   175  */
       
   176 struct rt_com_struct{
       
   177     int baud_base;
       
   178     int port;
       
   179     int irq;
       
   180     void (*isr)(void);
       
   181 	int baud;
       
   182 	unsigned int wordlength;
       
   183 	unsigned int parity;
       
   184 	unsigned int stopbits;
       
   185     int mode;
       
   186 	int fifotrig;
       
   187     int used;
       
   188 	int error;
       
   189     int type;
       
   190     int ier;
       
   191     int mcr;
       
   192     struct rt_buf_struct ibuf;
       
   193     struct rt_buf_struct obuf;
       
   194 };
       
   195 
       
   196 
       
   197 #endif /* RT_COM_P_H */
       
   198 
       
   199 
       
   200 
       
   201 /**
       
   202  * Local Variables:
       
   203  * mode: C
       
   204  * c-file-style: "Stroustrup"
       
   205  * End:
       
   206  */