From b9ba7aeb165cffecdffb60aec8c3fa8d590d9ca9 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Fri, 28 Apr 2000 01:09:25 +0000 Subject: Merge with 2.3.99-pre6. --- drivers/char/ip2/ip2mkdev.c | 123 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 drivers/char/ip2/ip2mkdev.c (limited to 'drivers/char/ip2/ip2mkdev.c') diff --git a/drivers/char/ip2/ip2mkdev.c b/drivers/char/ip2/ip2mkdev.c new file mode 100644 index 000000000..851e4a66b --- /dev/null +++ b/drivers/char/ip2/ip2mkdev.c @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include +#include + +#include "ip2.h" +#include "i2ellis.h" + +char nm[256]; +i2eBordStr Board[2]; + +static void ex_details(i2eBordStrPtr); + +int main (int argc, char *argv[]) +{ + int board, box, port; + int fd; + int dev; + i2eBordStrPtr pB = Board; + + // Remove all IP2 devices + + for ( board = 0; board < 4; ++board ) + { + sprintf ( nm, "/dev/ip2ipl%d", board ); + unlink ( nm ); + sprintf ( nm, "/dev/ip2stat%d", board ); + unlink ( nm ); + } + + for ( port = 0; port < 256; ++port ) + { + sprintf ( nm, "/dev/ttyF%d", port ); + unlink ( nm ); + sprintf ( nm, "/dev/cuf%d", port ); + unlink ( nm ); + } + + // Now create management devices, and use the status device to determine how + // port devices need to exist, and then create them. + + for ( board = 0; board < 4; ++board ) + { + printf("Board %d: ", board ); + + sprintf ( nm, "/dev/ip2ipl%d", board ); + mknod ( nm, S_IFCHR|0666, (IP2_IPL_MAJOR << 8) | board * 4 ); + sprintf ( nm, "/dev/ip2stat%d", board ); + mknod ( nm, S_IFCHR|0666, (IP2_IPL_MAJOR << 8) | board * 4 + 1 ); + + fd = open ( nm, O_RDONLY ); + if ( !fd ) + { + printf ( "Unable to open status device %s\n", nm ); + exit ( 1 ); + } + if ( ioctl ( fd, 65, Board ) < 0 ) + { + printf ( "not present\n" ); + close ( fd ); + unlink ( nm ); + sprintf ( nm, "/dev/ip2ipl%d", board ); + unlink ( nm ); + } + else + { + switch( pB->i2ePom.e.porID & ~POR_ID_RESERVED ) + { + case POR_ID_FIIEX: ex_details ( pB ); break; + case POR_ID_II_4: printf ( "ISA-4" ); break; + case POR_ID_II_8: printf ( "ISA-8 std" ); break; + case POR_ID_II_8R: printf ( "ISA-8 RJ11" ); break; + + default: + printf ( "Unknown board type, ID = %x", pB->i2ePom.e.porID ); + } + + for ( box = 0; box < ABS_MAX_BOXES; ++box ) + { + for ( port = 0; port < ABS_BIGGEST_BOX; ++port ) + { + if ( pB->i2eChannelMap[box] & ( 1 << port ) ) + { + dev = port + + box * ABS_BIGGEST_BOX + + board * ABS_BIGGEST_BOX * ABS_MAX_BOXES; + + sprintf ( nm, "/dev/ttyF%d", dev ); + mknod ( nm, S_IFCHR|0666, (IP2_TTY_MAJOR << 8) | dev ); + sprintf ( nm, "/dev/cuf%d", dev ); + mknod ( nm, S_IFCHR|0666, (IP2_CALLOUT_MAJOR << 8) | dev ); + + printf("."); + } + } + } + printf("\n"); + } + } +} + +static void ex_details ( i2eBordStrPtr pB ) +{ + int box; + int i; + int ports = 0; + int boxes = 0; + + for( box = 0; box < ABS_MAX_BOXES; ++box ) + { + if( pB->i2eChannelMap[box] != 0 ) ++boxes; + for( i = 0; i < ABS_BIGGEST_BOX; ++i ) + { + if( pB->i2eChannelMap[box] & 1<< i ) ++ports; + } + } + + printf("EX bx=%d pt=%d %d bit", boxes, ports, pB->i2eDataWidth16 ? 16 : 8 ); +} + + -- cgit v1.2.3