Loading drivers/char/ip2/ip2main.c +34 −40 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ #include <linux/seq_file.h> static const struct file_operations ip2mem_proc_fops; static int ip2_read_proc(char *, char **, off_t, int, int *, void * ); static const struct file_operations ip2_proc_fops; /********************/ /* Type Definitions */ Loading Loading @@ -446,9 +446,9 @@ static const struct tty_operations ip2_ops = { .stop = ip2_stop, .start = ip2_start, .hangup = ip2_hangup, .read_proc = ip2_read_proc, .tiocmget = ip2_tiocmget, .tiocmset = ip2_tiocmset, .proc_fops = &ip2_proc_fops, }; /******************************************************************************/ Loading Loading @@ -3029,19 +3029,17 @@ static const struct file_operations ip2mem_proc_fops = { * different sources including ip2mkdev.c and a couple of other drivers. * The bugs are all mine. :-) =mhw= */ static int ip2_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) static int ip2_proc_show(struct seq_file *m, void *v) { int i, j, box; int len = 0; int boxes = 0; int ports = 0; int tports = 0; off_t begin = 0; i2eBordStrPtr pB; char *sep; len += sprintf(page, "ip2info: 1.0 driver: %s\n", pcVersion ); len += sprintf(page+len, "Driver: SMajor=%d CMajor=%d IMajor=%d MaxBoards=%d MaxBoxes=%d MaxPorts=%d\n", seq_printf(m, "ip2info: 1.0 driver: %s\n", pcVersion); seq_printf(m, "Driver: SMajor=%d CMajor=%d IMajor=%d MaxBoards=%d MaxBoxes=%d MaxPorts=%d\n", IP2_TTY_MAJOR, IP2_CALLOUT_MAJOR, IP2_IPL_MAJOR, IP2_MAX_BOARDS, ABS_MAX_BOXES, ABS_BIGGEST_BOX); Loading @@ -3053,7 +3051,8 @@ static int ip2_read_proc(char *page, char **start, off_t off, switch( pB->i2ePom.e.porID & ~POR_ID_RESERVED ) { case POR_ID_FIIEX: len += sprintf( page+len, "Board %d: EX ports=", i ); seq_printf(m, "Board %d: EX ports=", i); sep = ""; for( box = 0; box < ABS_MAX_BOXES; ++box ) { ports = 0; Loading @@ -3065,80 +3064,75 @@ static int ip2_read_proc(char *page, char **start, off_t off, ++ports; } } len += sprintf( page+len, "%d,", ports ); seq_printf(m, "%s%d", sep, ports); sep = ","; tports += ports; } --len; /* Backup over that last comma */ len += sprintf( page+len, " boxes=%d width=%d", boxes, pB->i2eDataWidth16 ? 16 : 8 ); seq_printf(m, " boxes=%d width=%d", boxes, pB->i2eDataWidth16 ? 16 : 8); break; case POR_ID_II_4: len += sprintf(page+len, "Board %d: ISA-4 ports=4 boxes=1", i ); seq_printf(m, "Board %d: ISA-4 ports=4 boxes=1", i); tports = ports = 4; break; case POR_ID_II_8: len += sprintf(page+len, "Board %d: ISA-8-std ports=8 boxes=1", i ); seq_printf(m, "Board %d: ISA-8-std ports=8 boxes=1", i); tports = ports = 8; break; case POR_ID_II_8R: len += sprintf(page+len, "Board %d: ISA-8-RJ11 ports=8 boxes=1", i ); seq_printf(m, "Board %d: ISA-8-RJ11 ports=8 boxes=1", i); tports = ports = 8; break; default: len += sprintf(page+len, "Board %d: unknown", i ); seq_printf(m, "Board %d: unknown", i); /* Don't try and probe for minor numbers */ tports = ports = 0; } } else { /* Don't try and probe for minor numbers */ len += sprintf(page+len, "Board %d: vacant", i ); seq_printf(m, "Board %d: vacant", i); tports = ports = 0; } if( tports ) { len += sprintf(page+len, " minors=" ); seq_puts(m, " minors="); sep = ""; for ( box = 0; box < ABS_MAX_BOXES; ++box ) { for ( j = 0; j < ABS_BIGGEST_BOX; ++j ) { if ( pB->i2eChannelMap[box] & (1 << j) ) { len += sprintf (page+len,"%d,", seq_printf(m, "%s%d", sep, j + ABS_BIGGEST_BOX * (box+i*ABS_MAX_BOXES)); sep = ","; } } } page[ len - 1 ] = '\n'; /* Overwrite that last comma */ } else { len += sprintf (page+len,"\n" ); } if (len+begin > off+count) break; if (len+begin < off) { begin += len; len = 0; seq_putc(m, '\n'); } } if (i >= IP2_MAX_BOARDS) *eof = 1; if (off >= len+begin) return 0; } *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); static int ip2_proc_open(struct inode *inode, struct file *file) { return single_open(file, ip2_proc_show, NULL); } static const struct file_operations ip2_proc_fops = { .owner = THIS_MODULE, .open = ip2_proc_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; /******************************************************************************/ /* Function: ip2trace() */ /* Parameters: Value to add to trace buffer */ Loading Loading
drivers/char/ip2/ip2main.c +34 −40 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ #include <linux/seq_file.h> static const struct file_operations ip2mem_proc_fops; static int ip2_read_proc(char *, char **, off_t, int, int *, void * ); static const struct file_operations ip2_proc_fops; /********************/ /* Type Definitions */ Loading Loading @@ -446,9 +446,9 @@ static const struct tty_operations ip2_ops = { .stop = ip2_stop, .start = ip2_start, .hangup = ip2_hangup, .read_proc = ip2_read_proc, .tiocmget = ip2_tiocmget, .tiocmset = ip2_tiocmset, .proc_fops = &ip2_proc_fops, }; /******************************************************************************/ Loading Loading @@ -3029,19 +3029,17 @@ static const struct file_operations ip2mem_proc_fops = { * different sources including ip2mkdev.c and a couple of other drivers. * The bugs are all mine. :-) =mhw= */ static int ip2_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) static int ip2_proc_show(struct seq_file *m, void *v) { int i, j, box; int len = 0; int boxes = 0; int ports = 0; int tports = 0; off_t begin = 0; i2eBordStrPtr pB; char *sep; len += sprintf(page, "ip2info: 1.0 driver: %s\n", pcVersion ); len += sprintf(page+len, "Driver: SMajor=%d CMajor=%d IMajor=%d MaxBoards=%d MaxBoxes=%d MaxPorts=%d\n", seq_printf(m, "ip2info: 1.0 driver: %s\n", pcVersion); seq_printf(m, "Driver: SMajor=%d CMajor=%d IMajor=%d MaxBoards=%d MaxBoxes=%d MaxPorts=%d\n", IP2_TTY_MAJOR, IP2_CALLOUT_MAJOR, IP2_IPL_MAJOR, IP2_MAX_BOARDS, ABS_MAX_BOXES, ABS_BIGGEST_BOX); Loading @@ -3053,7 +3051,8 @@ static int ip2_read_proc(char *page, char **start, off_t off, switch( pB->i2ePom.e.porID & ~POR_ID_RESERVED ) { case POR_ID_FIIEX: len += sprintf( page+len, "Board %d: EX ports=", i ); seq_printf(m, "Board %d: EX ports=", i); sep = ""; for( box = 0; box < ABS_MAX_BOXES; ++box ) { ports = 0; Loading @@ -3065,80 +3064,75 @@ static int ip2_read_proc(char *page, char **start, off_t off, ++ports; } } len += sprintf( page+len, "%d,", ports ); seq_printf(m, "%s%d", sep, ports); sep = ","; tports += ports; } --len; /* Backup over that last comma */ len += sprintf( page+len, " boxes=%d width=%d", boxes, pB->i2eDataWidth16 ? 16 : 8 ); seq_printf(m, " boxes=%d width=%d", boxes, pB->i2eDataWidth16 ? 16 : 8); break; case POR_ID_II_4: len += sprintf(page+len, "Board %d: ISA-4 ports=4 boxes=1", i ); seq_printf(m, "Board %d: ISA-4 ports=4 boxes=1", i); tports = ports = 4; break; case POR_ID_II_8: len += sprintf(page+len, "Board %d: ISA-8-std ports=8 boxes=1", i ); seq_printf(m, "Board %d: ISA-8-std ports=8 boxes=1", i); tports = ports = 8; break; case POR_ID_II_8R: len += sprintf(page+len, "Board %d: ISA-8-RJ11 ports=8 boxes=1", i ); seq_printf(m, "Board %d: ISA-8-RJ11 ports=8 boxes=1", i); tports = ports = 8; break; default: len += sprintf(page+len, "Board %d: unknown", i ); seq_printf(m, "Board %d: unknown", i); /* Don't try and probe for minor numbers */ tports = ports = 0; } } else { /* Don't try and probe for minor numbers */ len += sprintf(page+len, "Board %d: vacant", i ); seq_printf(m, "Board %d: vacant", i); tports = ports = 0; } if( tports ) { len += sprintf(page+len, " minors=" ); seq_puts(m, " minors="); sep = ""; for ( box = 0; box < ABS_MAX_BOXES; ++box ) { for ( j = 0; j < ABS_BIGGEST_BOX; ++j ) { if ( pB->i2eChannelMap[box] & (1 << j) ) { len += sprintf (page+len,"%d,", seq_printf(m, "%s%d", sep, j + ABS_BIGGEST_BOX * (box+i*ABS_MAX_BOXES)); sep = ","; } } } page[ len - 1 ] = '\n'; /* Overwrite that last comma */ } else { len += sprintf (page+len,"\n" ); } if (len+begin > off+count) break; if (len+begin < off) { begin += len; len = 0; seq_putc(m, '\n'); } } if (i >= IP2_MAX_BOARDS) *eof = 1; if (off >= len+begin) return 0; } *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); static int ip2_proc_open(struct inode *inode, struct file *file) { return single_open(file, ip2_proc_show, NULL); } static const struct file_operations ip2_proc_fops = { .owner = THIS_MODULE, .open = ip2_proc_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; /******************************************************************************/ /* Function: ip2trace() */ /* Parameters: Value to add to trace buffer */ Loading