Date: Mon, 16 Feb 1998 10:35:14 -0800 (PST) From: steveg@comtrol.com To: freebsd-gnats-submit@FreeBSD.ORG Subject: i386/5765: Our RocketPort port only suports 32 ports on FreeBSD 3.0 current Message-ID: <199802161835.KAA13528@hub.freebsd.org>
index | next in thread | raw e-mail
>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: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 16 10:40:04 PST 1998
>Last-Modified:
>Originator: Steve Gericke
>Organization:
Comtrol
>Release: 3,0 current
>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
;;
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802161835.KAA13528>
