drivers/char/ip2/ip2mkdev.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following functions.
  1. main
  2. ex_details

#include <sys/types.h>
#include <sys/stat.h>
#include <linux/major.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

#include "ip2.h"
#include "i2ellis.h"

char nm[256];
i2eBordStr Board[2];

static void ex_details(i2eBordStrPtr);

int main (int argc, char *argv[])
/* [<][>][^][v][top][bottom][index][help] */
{
        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 )
/* [<][>][^][v][top][bottom][index][help] */
{
        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 );
}



/* [<][>][^][v][top][bottom][index][help] */