File indexing completed on 2025-05-11 08:23:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifdef CD2401_RECORD_DEBUG_INFO
0012
0013
0014 #define CD2401_RECORD_WRITE
0015 #define CD2401_RECORD_TX_ISR
0016 #define CD2401_RECORD_RX_ISR
0017 #define CD2401_RECORD_RE_ISR
0018 #define CD2401_RECORD_MODEM_ISR
0019 #define CD2401_RECORD_SET_ATTRIBUTE
0020 #define CD2401_RECORD_FIRST_OPEN
0021 #define CD2401_RECORD_LAST_CLOSE
0022 #define CD2401_RECORD_START_REMOTE_TX
0023 #define CD2401_RECORD_STOP_REMOTE_TX
0024 #define CD2401_RECORD_DRAIN_OUTPUT
0025 #define CD2401_RECORD_DELAY
0026
0027
0028 #ifdef CD2401_RECORD_WRITE
0029 #define CD2401_RECORD_WRITE_INFO( args ) cd2401_record_write_info args
0030 #else
0031 #define CD2401_RECORD_WRITE_INFO( args )
0032 #endif
0033
0034 #ifdef CD2401_RECORD_TX_ISR
0035 #define CD2401_RECORD_TX_ISR_INFO( args ) cd2401_record_tx_isr_info args
0036 #define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args ) cd2401_record_tx_isr_spurious_info args
0037 #define CD2401_RECORD_TX_ISR_BUSERR_INFO( args ) cd2401_record_tx_isr_buserr_info args
0038 #else
0039 #define CD2401_RECORD_TX_ISR_INFO( args )
0040 #define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args )
0041 #define CD2401_RECORD_TX_ISR_BUSERR_INFO( args )
0042 #endif
0043
0044 #ifdef CD2401_RECORD_RX_ISR
0045 #define CD2401_RECORD_RX_ISR_INFO( args ) cd2401_record_rx_isr_info args
0046 #define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args ) cd2401_record_rx_isr_spurious_info args
0047 #else
0048 #define CD2401_RECORD_RX_ISR_INFO( args )
0049 #define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args )
0050 #endif
0051
0052 #ifdef CD2401_RECORD_RE_ISR
0053 #define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args ) cd2401_record_re_isr_spurious_info args
0054 #else
0055 #define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args )
0056 #endif
0057
0058 #ifdef CD2401_RECORD_MODEM_ISR
0059 #define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args ) cd2401_record_modem_isr_spurious_info args
0060 #else
0061 #define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args )
0062 #endif
0063
0064 #ifdef CD2401_RECORD_SET_ATTRIBUTES
0065 #define CD2401_RECORD_SET_ATTRIBUTES_INFO( args ) cd2401_record_set_attributes_info args
0066 #else
0067 #define CD2401_RECORD_SET_ATTRIBUTES_INFO( args )
0068 #endif
0069
0070 #ifdef CD2401_RECORD_FIRST_OPEN
0071 #define CD2401_RECORD_FIRST_OPEN_INFO( args ) cd2401_record_first_open_info args
0072 #else
0073 #define CD2401_RECORD_FIRST_OPEN_INFO( args )
0074 #endif
0075
0076 #ifdef CD2401_RECORD_LAST_CLOSE
0077 #define CD2401_RECORD_LAST_CLOSE_INFO( args ) cd2401_record_last_close_info args
0078 #else
0079 #define CD2401_RECORD_LAST_CLOSE_INFO( args )
0080 #endif
0081
0082 #ifdef CD2401_RECORD_START_REMOTE_TX
0083 #define CD2401_RECORD_START_REMOTE_TX_INFO( args ) cd2401_record_start_remote_tx_info args
0084 #else
0085 #define CD2401_RECORD_START_REMOTE_TX_INFO( args )
0086 #endif
0087
0088 #ifdef CD2401_RECORD_STOP_REMOTE_TX
0089 #define CD2401_RECORD_STOP_REMOTE_TX_INFO( args ) cd2401_record_stop_remote_tx_info args
0090 #else
0091 #define CD2401_RECORD_STOP_REMOTE_TX_INFO( args )
0092 #endif
0093
0094 #ifdef CD2401_RECORD_DRAIN_OUTPUT
0095 #define CD2401_RECORD_DRAIN_OUTPUT_INFO( args ) cd2401_record_drain_output_info args
0096 #else
0097 #define CD2401_RECORD_DRAIN_OUTPUT_INFO( args )
0098 #endif
0099
0100 #ifdef CD2401_RECORD_DELAY
0101 #define CD2401_RECORD_DELAY_INFO( args ) cd2401_record_delay_info args
0102 #else
0103 #define CD2401_RECORD_DELAY_INFO( args )
0104 #endif
0105
0106
0107 #define CD2401_DEBUG_BUFFER_SIZE 256
0108 #define CD2401_DEBUG_CHAR_BUFSIZE 64
0109 #define CD2401_WRITE_INFO 1
0110 #define CD2401_TX_ISR_INFO 2
0111 #define CD2401_TX_ISR_SPURIOUS_INFO 3
0112 #define CD2401_TX_ISR_BUSERR_INFO 4
0113 #define CD2401_RX_ISR_INFO 5
0114 #define CD2401_RX_ISR_SPURIOUS_INFO 6
0115 #define CD2401_RE_ISR_SPURIOUS_INFO 7
0116 #define CD2401_MODEM_ISR_SPURIOUS_INFO 8
0117 #define CD2401_FIRST_OPEN_INFO 9
0118 #define CD2401_LAST_CLOSE_INFO 10
0119 #define CD2401_START_REMOTE_TX_INFO 11
0120 #define CD2401_STOP_REMOTE_TX_INFO 12
0121 #define CD2401_SET_ATTRIBUTE_INFO 13
0122 #define CD2401_DRAIN_OUTPUT_INFO 14
0123 #define CD2401_DELAY_INFO 15
0124
0125 struct cd2401_debug_info {
0126 short discriminant;
0127 short record_size;
0128 union {
0129 struct cd2401_write_info {
0130 int length;
0131 char buffer[CD2401_DEBUG_CHAR_BUFSIZE];
0132 char dmabuf;
0133 } write_info;
0134 struct cd2401_tx_isr_info {
0135 unsigned char channel;
0136 unsigned char status;
0137 unsigned char initial_ier;
0138 unsigned char final_ier;
0139 uint8_t txEmpty;
0140 } tx_isr_info;
0141 struct cd2401_tx_isr_spurious_info {
0142 unsigned char channel;
0143 unsigned char status;
0144 unsigned char initial_ier;
0145 unsigned char final_ier;
0146 unsigned long spurdev;
0147 unsigned long spurcount;
0148 } tx_isr_spurious_info;
0149 struct cd2401_tx_isr_buserr_info {
0150 unsigned char channel;
0151 unsigned char status;
0152 unsigned char initial_ier;
0153 unsigned char buserr;
0154 unsigned long type;
0155 unsigned long addr;
0156 } tx_isr_buserr_info;
0157 struct cd2401_rx_isr_info {
0158 unsigned char channel;
0159 int length;
0160 char buffer[CD2401_DEBUG_CHAR_BUFSIZE];
0161 } rx_isr_info;
0162 struct cd2401_rx_isr_spurious_info {
0163 unsigned char channel;
0164 unsigned char status;
0165 unsigned long spurdev;
0166 unsigned long spurcount;
0167 } rx_isr_spurious_info;
0168 struct cd2401_re_isr_spurious_info {
0169 unsigned char channel;
0170 unsigned long spurdev;
0171 unsigned long spurcount;
0172 } re_isr_spurious_info;
0173 struct cd2401_modem_isr_spurious_info {
0174 unsigned char channel;
0175 unsigned long spurdev;
0176 unsigned long spurcount;
0177 } modem_isr_spurious_info;
0178 struct cd2401_first_open_info {
0179 unsigned char channel;
0180 uint8_t init_count;
0181 } first_open_info;
0182 struct cd2401_last_close_info {
0183 unsigned char channel;
0184 uint8_t init_count;
0185 } last_close_info;
0186 struct cd2401_start_remote_tx_info {
0187 unsigned char channel;
0188 } start_remote_tx_info;
0189 struct cd2401_stop_remote_tx_info {
0190 unsigned char channel;
0191 } stop_remote_tx_info;
0192 struct cd2401_set_attribute_info {
0193 int minor;
0194 uint8_t need_reinit;
0195 uint8_t txEmpty;
0196 uint8_t csize;
0197 uint8_t cstopb;
0198 uint8_t parodd;
0199 uint8_t parenb;
0200 uint8_t ignpar;
0201 uint8_t inpck;
0202 uint8_t hw_flow_ctl;
0203 uint8_t sw_flow_ctl;
0204 uint8_t extra_flow_ctl;
0205 uint8_t icrnl;
0206 uint8_t igncr;
0207 uint8_t inlcr;
0208 uint8_t brkint;
0209 uint8_t ignbrk;
0210 uint8_t parmrk;
0211 uint8_t istrip;
0212 uint16_t tx_period;
0213 uint16_t rx_period;
0214 uint32_t out_baud;
0215 uint32_t in_baud;
0216 } set_attribute_info;
0217 struct cd2401_drain_output_info {
0218 uint8_t txEmpty;
0219 uint8_t own_buf_A;
0220 uint8_t own_buf_B;
0221 } drain_output_info;
0222 struct cd2401_delay_info {
0223 rtems_interval start;
0224 rtems_interval end;
0225 rtems_interval current;
0226 unsigned long loop_count;
0227 } delay_info;
0228 } u;
0229 };
0230
0231 struct cd2401_debug_info cd2401_debug_buffer[CD2401_DEBUG_BUFFER_SIZE];
0232 int cd2401_debug_index = 0;
0233
0234 #include <string.h>
0235
0236 int cd2401_get_record_size(
0237 int size
0238 )
0239 {
0240
0241 return size + 4;
0242 }
0243
0244 void cd2401_record_write_info(
0245 int len,
0246 const char * buf,
0247 char dmabuf
0248 )
0249 {
0250 int max_length;
0251
0252 max_length = (len < CD2401_DEBUG_CHAR_BUFSIZE ) ? len : CD2401_DEBUG_CHAR_BUFSIZE;
0253
0254 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0255 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_WRITE_INFO;
0256 cd2401_debug_buffer[cd2401_debug_index].record_size =
0257 cd2401_get_record_size( sizeof( struct cd2401_write_info ) );
0258 cd2401_debug_buffer[cd2401_debug_index].u.write_info.length = len;
0259 memcpy ( &(cd2401_debug_buffer[cd2401_debug_index].u.write_info.buffer), buf, max_length );
0260 cd2401_debug_buffer[cd2401_debug_index].u.write_info.dmabuf = dmabuf;
0261
0262 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0263 }
0264
0265 void cd2401_record_tx_isr_info(
0266 unsigned char ch,
0267 unsigned char status,
0268 unsigned char initial_ier,
0269 unsigned char final_ier,
0270 uint8_t txEmpty
0271 )
0272 {
0273 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0274 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_TX_ISR_INFO;
0275 cd2401_debug_buffer[cd2401_debug_index].record_size =
0276 cd2401_get_record_size( sizeof( struct cd2401_tx_isr_info ) );
0277 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.channel = ch;
0278 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.status = status;
0279 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.initial_ier = initial_ier;
0280 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.final_ier = final_ier;
0281 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.txEmpty = txEmpty;
0282
0283 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0284 }
0285
0286 void cd2401_record_tx_isr_spurious_info(
0287 unsigned char ch,
0288 unsigned char status,
0289 unsigned char initial_ier,
0290 unsigned char final_ier,
0291 unsigned char spur_dev,
0292 unsigned char spur_cnt
0293 )
0294 {
0295 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0296 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_TX_ISR_SPURIOUS_INFO;
0297 cd2401_debug_buffer[cd2401_debug_index].record_size =
0298 cd2401_get_record_size( sizeof( struct cd2401_tx_isr_spurious_info ) );
0299 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.channel = ch;
0300 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.status = status;
0301 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.initial_ier = initial_ier;
0302 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.final_ier = final_ier;
0303 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.spurdev = spur_dev;
0304 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_spurious_info.spurcount = spur_cnt;
0305
0306 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0307 }
0308
0309 void cd2401_record_tx_isr_buserr_info(
0310 unsigned char ch,
0311 unsigned char status,
0312 unsigned char initial_ier,
0313 unsigned char buserr,
0314 unsigned long buserr_type,
0315 unsigned long buserr_addr
0316 )
0317 {
0318 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0319 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_TX_ISR_BUSERR_INFO;
0320 cd2401_debug_buffer[cd2401_debug_index].record_size =
0321 cd2401_get_record_size( sizeof( struct cd2401_tx_isr_buserr_info ) );
0322 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.channel = ch;
0323 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.status = status;
0324 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.initial_ier = initial_ier;
0325 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.buserr = buserr;
0326 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.type = buserr_type;
0327 cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_buserr_info.addr = buserr_addr;
0328
0329 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0330 }
0331
0332 void cd2401_record_rx_isr_info(
0333 unsigned char ch,
0334 unsigned char total,
0335 char * buffer
0336 )
0337 {
0338 int max_length;
0339
0340 max_length = (total < CD2401_DEBUG_CHAR_BUFSIZE ) ? total : CD2401_DEBUG_CHAR_BUFSIZE;
0341
0342 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0343 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_RX_ISR_INFO;
0344 cd2401_debug_buffer[cd2401_debug_index].record_size =
0345 cd2401_get_record_size( sizeof( struct cd2401_rx_isr_info ) );
0346 cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_info.length = max_length;
0347 memcpy ( &(cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_info.buffer), buffer, max_length );
0348
0349 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0350 }
0351
0352 void cd2401_record_rx_isr_spurious_info(
0353 unsigned char ch,
0354 unsigned char status,
0355 uint32_t spur_dev,
0356 uint32_t spur_cnt
0357 )
0358 {
0359 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0360 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_RX_ISR_SPURIOUS_INFO;
0361 cd2401_debug_buffer[cd2401_debug_index].record_size =
0362 cd2401_get_record_size( sizeof( struct cd2401_rx_isr_spurious_info ) );
0363 cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_spurious_info.channel = ch;
0364 cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_spurious_info.status = status;
0365 cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_spurious_info.spurdev = spur_dev;
0366 cd2401_debug_buffer[cd2401_debug_index].u.rx_isr_spurious_info.spurcount = spur_cnt;
0367
0368 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0369 }
0370
0371 void cd2401_record_re_isr_spurious_info(
0372 unsigned char ch,
0373 uint32_t spur_dev,
0374 uint32_t spur_cnt
0375 )
0376 {
0377 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0378 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_RE_ISR_SPURIOUS_INFO;
0379 cd2401_debug_buffer[cd2401_debug_index].record_size =
0380 cd2401_get_record_size( sizeof( struct cd2401_re_isr_spurious_info ) );
0381 cd2401_debug_buffer[cd2401_debug_index].u.re_isr_spurious_info.channel = ch;
0382 cd2401_debug_buffer[cd2401_debug_index].u.re_isr_spurious_info.spurdev = spur_dev;
0383 cd2401_debug_buffer[cd2401_debug_index].u.re_isr_spurious_info.spurcount = spur_cnt;
0384
0385 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0386 }
0387
0388 void cd2401_record_modem_isr_spurious_info(
0389 unsigned char ch,
0390 uint32_t spur_dev,
0391 uint32_t spur_cnt
0392 )
0393 {
0394 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0395 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_MODEM_ISR_SPURIOUS_INFO;
0396 cd2401_debug_buffer[cd2401_debug_index].record_size =
0397 cd2401_get_record_size( sizeof( struct cd2401_modem_isr_spurious_info ) );
0398 cd2401_debug_buffer[cd2401_debug_index].u.modem_isr_spurious_info.channel = ch;
0399 cd2401_debug_buffer[cd2401_debug_index].u.modem_isr_spurious_info.spurdev = spur_dev;
0400 cd2401_debug_buffer[cd2401_debug_index].u.modem_isr_spurious_info.spurcount = spur_cnt;
0401
0402 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0403 }
0404
0405 void cd2401_record_first_open_info(
0406 unsigned char ch,
0407 uint8_t init_count
0408 )
0409 {
0410 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0411 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_FIRST_OPEN_INFO;
0412 cd2401_debug_buffer[cd2401_debug_index].record_size =
0413 cd2401_get_record_size( sizeof( struct cd2401_first_open_info ) );
0414 cd2401_debug_buffer[cd2401_debug_index].u.first_open_info.channel = ch;
0415 cd2401_debug_buffer[cd2401_debug_index].u.first_open_info.init_count = init_count;
0416
0417 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0418 }
0419
0420 void cd2401_record_last_close_info(
0421 unsigned char ch,
0422 uint8_t init_count
0423 )
0424 {
0425 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0426 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_LAST_CLOSE_INFO;
0427 cd2401_debug_buffer[cd2401_debug_index].record_size =
0428 cd2401_get_record_size( sizeof( struct cd2401_last_close_info ) );
0429 cd2401_debug_buffer[cd2401_debug_index].u.last_close_info.channel = ch;
0430 cd2401_debug_buffer[cd2401_debug_index].u.last_close_info.init_count = init_count;
0431
0432 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0433 }
0434
0435 void cd2401_record_start_remote_tx_info(
0436 unsigned char ch
0437 )
0438 {
0439 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0440 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_START_REMOTE_TX_INFO;
0441 cd2401_debug_buffer[cd2401_debug_index].record_size =
0442 cd2401_get_record_size( sizeof( struct cd2401_start_remote_tx_info ) );
0443 cd2401_debug_buffer[cd2401_debug_index].u.start_remote_tx_info.channel = ch;
0444
0445 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0446 }
0447
0448 void cd2401_record_stop_remote_tx_info(
0449 unsigned char ch
0450 )
0451 {
0452 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0453 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_STOP_REMOTE_TX_INFO;
0454 cd2401_debug_buffer[cd2401_debug_index].record_size =
0455 cd2401_get_record_size( sizeof( struct cd2401_stop_remote_tx_info ) );
0456 cd2401_debug_buffer[cd2401_debug_index].u.stop_remote_tx_info.channel = ch;
0457
0458 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0459 }
0460
0461 void cd2401_record_set_attributes_info(
0462 int minor,
0463 uint8_t need_reinit,
0464 uint8_t csize,
0465 uint8_t cstopb,
0466 uint8_t parodd,
0467 uint8_t parenb,
0468 uint8_t ignpar,
0469 uint8_t inpck,
0470 uint8_t hw_flow_ctl,
0471 uint8_t sw_flow_ctl,
0472 uint8_t extra_flow_ctl,
0473 uint8_t icrnl,
0474 uint8_t igncr,
0475 uint8_t inlcr,
0476 uint8_t brkint,
0477 uint8_t ignbrk,
0478 uint8_t parmrk,
0479 uint8_t istrip,
0480 uint16_t tx_period,
0481 uint16_t rx_period,
0482 uint32_t out_baud,
0483 uint32_t in_baud
0484 )
0485 {
0486 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0487 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_SET_ATTRIBUTE_INFO;
0488 cd2401_debug_buffer[cd2401_debug_index].record_size =
0489 cd2401_get_record_size( sizeof( struct cd2401_set_attribute_info ) );
0490 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.minor = minor;
0491 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.need_reinit = need_reinit;
0492 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.txEmpty = CD2401_Channel_Info[minor].txEmpty;
0493 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.csize = csize;
0494 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.cstopb = cstopb;
0495 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.parodd = parodd;
0496 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.parenb = parenb;
0497 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.ignpar = ignpar;
0498 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.inpck = inpck;
0499 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.hw_flow_ctl = hw_flow_ctl;
0500 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.sw_flow_ctl = sw_flow_ctl;
0501 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.extra_flow_ctl = extra_flow_ctl;
0502 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.icrnl = icrnl;
0503 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.igncr = igncr;
0504 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.inlcr = inlcr;
0505 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.brkint = brkint;
0506 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.ignbrk = ignbrk;
0507 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.parmrk = parmrk;
0508 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.istrip = istrip;
0509 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.tx_period = tx_period;
0510 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.rx_period = rx_period;
0511 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.out_baud = out_baud;
0512 cd2401_debug_buffer[cd2401_debug_index].u.set_attribute_info.in_baud = in_baud;
0513
0514 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0515 }
0516
0517 void cd2401_record_drain_output_info(
0518 uint8_t txEmpty,
0519 uint8_t own_buf_A,
0520 uint8_t own_buf_B
0521 )
0522 {
0523 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0524 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_DRAIN_OUTPUT_INFO;
0525 cd2401_debug_buffer[cd2401_debug_index].record_size =
0526 cd2401_get_record_size( sizeof( struct cd2401_drain_output_info ) );
0527 cd2401_debug_buffer[cd2401_debug_index].u.drain_output_info.txEmpty = txEmpty;
0528 cd2401_debug_buffer[cd2401_debug_index].u.drain_output_info.own_buf_A = own_buf_A;
0529 cd2401_debug_buffer[cd2401_debug_index].u.drain_output_info.own_buf_B = own_buf_B;
0530
0531 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0532 }
0533
0534 void cd2401_record_delay_info(
0535 rtems_interval start,
0536 rtems_interval end,
0537 rtems_interval current,
0538 unsigned long loop_count
0539 )
0540 {
0541 memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) );
0542 cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_DELAY_INFO;
0543 cd2401_debug_buffer[cd2401_debug_index].record_size =
0544 cd2401_get_record_size( sizeof( struct cd2401_delay_info ) );
0545 cd2401_debug_buffer[cd2401_debug_index].u.delay_info.start = start;
0546 cd2401_debug_buffer[cd2401_debug_index].u.delay_info.end = end;
0547 cd2401_debug_buffer[cd2401_debug_index].u.delay_info.current = current;
0548 cd2401_debug_buffer[cd2401_debug_index].u.delay_info.loop_count = loop_count;
0549
0550 cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;
0551 }
0552
0553 #else
0554
0555
0556 #define CD2401_RECORD_WRITE_INFO( args )
0557 #define CD2401_RECORD_TX_ISR_INFO( args )
0558 #define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args )
0559 #define CD2401_RECORD_TX_ISR_BUSERR_INFO( args )
0560 #define CD2401_RECORD_RX_ISR_INFO( args )
0561 #define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args )
0562 #define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args )
0563 #define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args )
0564 #define CD2401_RECORD_FIRST_OPEN_INFO( args )
0565 #define CD2401_RECORD_LAST_CLOSE_INFO( args )
0566 #define CD2401_RECORD_START_REMOTE_TX_INFO( args )
0567 #define CD2401_RECORD_STOP_REMOTE_TX_INFO( args )
0568 #define CD2401_RECORD_SET_ATTRIBUTES_INFO( args )
0569 #define CD2401_RECORD_DRAIN_OUTPUT_INFO( args )
0570 #define CD2401_RECORD_DELAY_INFO( args )
0571
0572 #endif