Commit ba738340352a108768f7ff2b81251093d0432205
1 parent
90a8691f
Simplify references to paired serial port.
Showing
1 changed file
with
24 additions
and
48 deletions
module/tty0tty.c
| ... | ... | @@ -52,6 +52,12 @@ MODULE_LICENSE("GPL"); |
| 52 | 52 | #define TINY_TTY_MAJOR 240 /* experimental range */ |
| 53 | 53 | #define TINY_TTY_MINORS 8 /* device number, always even*/ |
| 54 | 54 | |
| 55 | +/* Serial ports are paired by adjacent index numbers -- 0 and 1, 2 and 3, 4 and 5. | |
| 56 | + * I.e. same upper bits of index number; only different least-significant-bit. | |
| 57 | + * XOR least-significant-bit to find index of paired serial port. | |
| 58 | + */ | |
| 59 | +#define PAIRED_INDEX(INDEX) ((INDEX) ^ 1) | |
| 60 | + | |
| 55 | 61 | /* fake UART values */ |
| 56 | 62 | //out |
| 57 | 63 | #define MCR_DTR 0x01 |
| ... | ... | @@ -85,6 +91,7 @@ static int tty0tty_open(struct tty_struct *tty, struct file *file) |
| 85 | 91 | { |
| 86 | 92 | struct tty0tty_serial *tty0tty; |
| 87 | 93 | int index; |
| 94 | + int paired_index; | |
| 88 | 95 | int msr=0; |
| 89 | 96 | int mcr=0; |
| 90 | 97 | |
| ... | ... | @@ -96,6 +103,7 @@ static int tty0tty_open(struct tty_struct *tty, struct file *file) |
| 96 | 103 | |
| 97 | 104 | /* get the serial object associated with this tty pointer */ |
| 98 | 105 | index = tty->index; |
| 106 | + paired_index = PAIRED_INDEX(index); | |
| 99 | 107 | tty0tty = tty0tty_table[index]; |
| 100 | 108 | if (tty0tty == NULL) { |
| 101 | 109 | /* first time accessing this device, let's create it */ |
| ... | ... | @@ -114,18 +122,9 @@ static int tty0tty_open(struct tty_struct *tty, struct file *file) |
| 114 | 122 | |
| 115 | 123 | } |
| 116 | 124 | |
| 117 | - if( (index % 2) == 0) | |
| 118 | - { | |
| 119 | - if(tty0tty_table[index+1] != NULL) | |
| 120 | - if (tty0tty_table[index+1]->open_count > 0) | |
| 121 | - mcr=tty0tty_table[index+1]->mcr; | |
| 122 | - } | |
| 123 | - else | |
| 124 | - { | |
| 125 | - if(tty0tty_table[index-1] != NULL) | |
| 126 | - if (tty0tty_table[index-1]->open_count > 0) | |
| 127 | - mcr=tty0tty_table[index-1]->mcr; | |
| 128 | - } | |
| 125 | + if (tty0tty_table[paired_index] != NULL && | |
| 126 | + tty0tty_table[paired_index]->open_count > 0) | |
| 127 | + mcr = tty0tty_table[paired_index]->mcr; | |
| 129 | 128 | |
| 130 | 129 | //null modem connection |
| 131 | 130 | |
| ... | ... | @@ -188,6 +187,7 @@ static int tty0tty_write(struct tty_struct *tty, const unsigned char *buffer, in |
| 188 | 187 | struct tty0tty_serial *tty0tty = tty->driver_data; |
| 189 | 188 | int retval = -EINVAL; |
| 190 | 189 | struct tty_struct *ttyx = NULL; |
| 190 | + int paired_index; | |
| 191 | 191 | |
| 192 | 192 | if (!tty0tty) |
| 193 | 193 | return -ENODEV; |
| ... | ... | @@ -198,18 +198,10 @@ static int tty0tty_write(struct tty_struct *tty, const unsigned char *buffer, in |
| 198 | 198 | /* port was not opened */ |
| 199 | 199 | goto exit; |
| 200 | 200 | |
| 201 | - if( (tty0tty->tty->index % 2) == 0) | |
| 202 | - { | |
| 203 | - if(tty0tty_table[tty0tty->tty->index+1] != NULL) | |
| 204 | - if (tty0tty_table[tty0tty->tty->index+1]->open_count > 0) | |
| 205 | - ttyx=tty0tty_table[tty0tty->tty->index+1]->tty; | |
| 206 | - } | |
| 207 | - else | |
| 208 | - { | |
| 209 | - if(tty0tty_table[tty0tty->tty->index-1] != NULL) | |
| 210 | - if (tty0tty_table[tty0tty->tty->index-1]->open_count > 0) | |
| 211 | - ttyx=tty0tty_table[tty0tty->tty->index-1]->tty; | |
| 212 | - } | |
| 201 | + paired_index = PAIRED_INDEX(tty0tty->tty->index); | |
| 202 | + if (tty0tty_table[paired_index] != NULL && | |
| 203 | + tty0tty_table[paired_index]->open_count > 0) | |
| 204 | + ttyx = tty0tty_table[paired_index]->tty; | |
| 213 | 205 | |
| 214 | 206 | // tty->low_latency=1; |
| 215 | 207 | |
| ... | ... | @@ -364,23 +356,16 @@ static int tty0tty_tiocmset(struct tty_struct *tty, struct file *file, |
| 364 | 356 | struct tty0tty_serial *tty0tty = tty->driver_data; |
| 365 | 357 | unsigned int mcr = tty0tty->mcr; |
| 366 | 358 | unsigned int msr=0; |
| 359 | + int paired_index; | |
| 367 | 360 | |
| 368 | 361 | #ifdef SCULL_DEBUG |
| 369 | 362 | printk(KERN_DEBUG "%s - \n", __FUNCTION__); |
| 370 | 363 | #endif |
| 371 | 364 | |
| 372 | - if( (tty0tty->tty->index % 2) == 0) | |
| 373 | - { | |
| 374 | - if(tty0tty_table[tty0tty->tty->index+1] != NULL) | |
| 375 | - if (tty0tty_table[tty0tty->tty->index+1]->open_count > 0) | |
| 376 | - msr=tty0tty_table[tty0tty->tty->index+1]->msr; | |
| 377 | - } | |
| 378 | - else | |
| 379 | - { | |
| 380 | - if(tty0tty_table[tty0tty->tty->index-1] != NULL) | |
| 381 | - if (tty0tty_table[tty0tty->tty->index-1]->open_count > 0) | |
| 382 | - msr=tty0tty_table[tty0tty->tty->index-1]->msr; | |
| 383 | - } | |
| 365 | + paired_index = PAIRED_INDEX(tty0tty->tty->index); | |
| 366 | + if (tty0tty_table[paired_index] != NULL && | |
| 367 | + tty0tty_table[paired_index]->open_count > 0) | |
| 368 | + msr = tty0tty_table[paired_index]->msr; | |
| 384 | 369 | |
| 385 | 370 | //null modem connection |
| 386 | 371 | |
| ... | ... | @@ -414,18 +399,9 @@ static int tty0tty_tiocmset(struct tty_struct *tty, struct file *file, |
| 414 | 399 | /* set the new MCR value in the device */ |
| 415 | 400 | tty0tty->mcr = mcr; |
| 416 | 401 | |
| 417 | - if( (tty0tty->tty->index % 2) == 0) | |
| 418 | - { | |
| 419 | - if(tty0tty_table[tty0tty->tty->index+1] != NULL) | |
| 420 | - if (tty0tty_table[tty0tty->tty->index+1]->open_count > 0) | |
| 421 | - tty0tty_table[tty0tty->tty->index+1]->msr=msr; | |
| 422 | - } | |
| 423 | - else | |
| 424 | - { | |
| 425 | - if(tty0tty_table[tty0tty->tty->index-1] != NULL) | |
| 426 | - if (tty0tty_table[tty0tty->tty->index-1]->open_count > 0) | |
| 427 | - tty0tty_table[tty0tty->tty->index-1]->msr=msr; | |
| 428 | - } | |
| 402 | + if (tty0tty_table[paired_index] != NULL && | |
| 403 | + tty0tty_table[paired_index]->open_count > 0) | |
| 404 | + tty0tty_table[paired_index]->msr = msr; | |
| 429 | 405 | return 0; |
| 430 | 406 | } |
| 431 | 407 | ... | ... |