From nobody  Mon Feb 16 10:35:14 1998
Received: (from nobody@localhost)
          by hub.freebsd.org (8.8.8/8.8.8) id KAA13528;
          Mon, 16 Feb 1998 10:35:14 -0800 (PST)
          (envelope-from nobody)
Message-Id: <199802161835.KAA13528@hub.freebsd.org>
Date: Mon, 16 Feb 1998 10:35:14 -0800 (PST)
From: steveg@comtrol.com
To: freebsd-gnats-submit@freebsd.org
Subject: Our RocketPort port only suports 32 ports on FreeBSD 3.0 current
X-Send-Pr-Version: www-1.0

>Number:         5765
>Category:       i386
>Synopsis:       Our RocketPort port only suports 32 ports on FreeBSD 3.0 current
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 16 10:40:04 PST 1998
>Closed-Date:    Tue Feb 17 07:37:05 PST 1998
>Last-Modified:  Tue Feb 17 07:37:44 PST 1998
>Originator:     Steve Gericke
>Release:        3,0 current
>Organization:
Comtrol
>Environment:
FreeBSD steveg1.comtrol.com 3.0-971006-SNAP .....

>Description:
Our RocketPort driver currently supports only 32 ports.

>How-To-Repeat:
Try to use more than 32 ports
>Fix:
Change MAKEDEV to use higher minor numbers.
changed rp.c to use the new minor numbers.

Difference of rp.c from 3.0 current dated 2/19/98 (55391 bytes)
1110,1112c1110
< 	count = 0;
< 	for(i=0;i<unit;i++)
< 		count += rp_num_ports[i];
---
> 	count = unit * 32;      /* board times max ports per card SG */
1226,1228c1224
< 	count = 0;
< 	for(i=0;i<unit;i++)
< 		count += rp_num_ports[i];
---
> 	count = unit * 32;    /* board # times max ports per card  SG */
1309c1305
< 	int	unit, i, port, mynor, flags;
---
> 	int	unit, i, port, mynor, umynor, flags;  /* SG */
1314c1310,1313
< 	mynor = MINOR_MAGIC(dev);
---
> 
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
1318,1320d1316
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1458c1454
< 	int	oldspl, unit, mynor, port, status, i;
---
> 	int	oldspl, unit, mynor, umynor, port, status, i; /* SG */
1463,1466c1459,1463
< 	mynor = MINOR_MAGIC(dev);
< 	unit = 0;
< 	unit = minor_to_unit[mynor];
< 	port = mynor;
---
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
>    unit = minor_to_unit[mynor];                /* SG */
> 
1469,1470d1465
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1534c1529,1534
< 	int	unit, i, mynor, port, error = 0;
---
> 	int	unit, i, mynor, umynor, port, error = 0; /* SG */
> 
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
>    unit = minor_to_unit[mynor];                /* SG */
1536d1535
< 	mynor = MINOR_MAGIC(dev);
1539,1543d1537
< 	unit = 0;
< 	unit = minor_to_unit[mynor];
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1559c1553,1558
< 	int	unit, i, mynor, port, error = 0;
---
> 	int	unit, i, mynor, port, umynor, error = 0; /* SG */
> 
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
>    unit = minor_to_unit[mynor];                /* SG */
1561d1559
< 	mynor = MINOR_MAGIC(dev);
1564,1568d1561
< 	unit = 0;
< 	unit = minor_to_unit[mynor];
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1604c1597
< 	int	unit, mynor, port;
---
> 	int	unit, mynor, port, umynor;            /* SG */
1612c1605,1607
< 	mynor = MINOR_MAGIC(dev);
---
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
1614,1616d1608
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1816c1808
< 	int	unit, i, mynor, port;
---
> 	int	unit, i, mynor, port, umynor;               /* SG */
1820c1812,1816
< 	mynor = MINOR_MAGIC(tp->t_dev);
---
> 
>    umynor = (((minor(tp->t_dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(tp->t_dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                          /* SG */
> 
1822,1824d1817
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
1953c1946
< 	int	unit, i, mynor, port;
---
> 	int	unit, i, mynor, port, umynor;               /* SG */
1958c1951,1954
< 	mynor = MINOR_MAGIC(tp->t_dev);
---
> 
>    umynor = (((minor(tp->t_dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(tp->t_dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                          /* SG */
1960,1962d1955
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
2014c2007
< 	int	unit, mynor, port;
---
> 	int	unit, mynor, port, umynor;                  /* SG */
2019c2012,2014
< 	mynor = MINOR_MAGIC(tp->t_dev);
---
>    umynor = (((minor(tp->t_dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(tp->t_dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                          /* SG */
2021,2023d2015
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];
2056c2048,2053
< 	int	unit, i, port, mynor;
---
> 	int	unit, i, port, mynor, umynor;         /* SG */
> 
>    umynor = (((minor(dev) >> 16) -1) * 32);    /* SG */
> 	port  = (minor(dev) & 0x1f);                /* SG */
> 	mynor = (port + umynor);                    /* SG */
>    unit = minor_to_unit[mynor];                /* SG */
2058d2054
< 	mynor = MINOR_MAGIC(dev);
2061,2064d2056
< 	unit = minor_to_unit[mynor];
< 	port = mynor;
< 	for(i=0;i<unit;i++)
< 		port -= rp_num_ports[i];

MAKEDEV changes for ttyR? and cauR?  -- replacement ---
#
# Rocketport multiport serial card.
# Creates devices for all cards at one time.
#
ttyR?)
	major=81
	BOARD=1; MINOR=65536; Rnum=0
	MINOR=`expr $BOARD \* 65536`
	dmesg | grep ^RocketPort[0-4] > /tmp/rp_list
	controllers=`awk '{print $1}' < /tmp/rp_list`
	rm -f /dev/ttyR*; rm -f /dev/ttyiR*; rm -f /dev/ttylR*
	for i in $controllers;do
 	   ndevices=`grep ^$i /tmp/rp_list | sed -e 's/.* \([0-9]*\) ports/\1/'`
	   echo -n "Creating $ndevices devices for $i: "
	   for dev in `jot $ndevices 0`;do
		   mknod /dev/ttyR$Rnum c $major $MINOR 
		   mknod /dev/ttylR$Rnum c $major `expr $MINOR + 32`
		   mknod /dev/ttyiR$Rnum c $major `expr $MINOR + 64` 
		   Rnum=`expr $Rnum + 1`
		   MINOR=`expr $MINOR + 1`
	   done
		BOARD=`expr $BOARD + 1`
		MINOR=`expr $BOARD \* 65536`
	   echo " "
	done
	chown root.wheel /dev/ttyR*
   ls /dev/ttyR*
	;;

cuaR?)
	major=81
	BOARD=1; MINOR=65536; Rnum=0
	MINOR=`expr $BOARD \* 65536`
	dmesg | grep ^RocketPort[0-4] > /tmp/rp_list
	controllers=`awk '{print $1}' < /tmp/rp_list`
	rm -f /dev/cuaR*; rm -f /dev/cuaiR*; rm -f /dev/cualR*
	for i in $controllers;do
 	   ndevices=`grep ^$i /tmp/rp_list | sed -e 's/.* \([0-9]*\) ports/\1/'`
	   echo -n "Creating $ndevices devices for $i: "
	   for dev in `jot $ndevices 0`;do
		   mknod /dev/cuaR$Rnum c  $major `expr $MINOR + 128`
		   mknod /dev/cualR$Rnum c $major `expr $MINOR + 128 + 32`
		   mknod /dev/cuaiR$Rnum c $major `expr $MINOR + 128 + 64` 
		   Rnum=`expr $Rnum + 1`
		   MINOR=`expr $MINOR + 1`
	   done
		BOARD=`expr $BOARD + 1`
		MINOR=`expr $BOARD \* 65536`
	   echo " "
	done
	chown uucp.dialer /dev/cuaR*
   ls /dev/cuaR*
	umask 77
	;;
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: jkh 
State-Changed-When: Tue Feb 17 07:37:05 PST 1998 
State-Changed-Why:  
Fixes applied, thanks.  Diffs sent for MAKEDEV under separate cover 
did not apply, so were hand-edited again.  Please sync with latest 
-current sources following this change, thanks! 
>Unformatted:
