Ключевые слова:patch, bsd, port, async, kernel, tty, (найти похожие документы)
Date: Mon, 25 Mar 2002 07:44:09 +0000 (UTC)
From: Valentin Davydov <[email protected]>
Newsgroups: fido7.ru.unix.bsd
Subject: [FreeBSD] Патч для преодаления ограничения в 32 порта в sio
>У меня уже стоит четыре восьмипортовки в тачке (Zelax MAK-82) (FreeBSD 3.5).
>Хотел вставить еще одну, но напоролся на ограничение: 32 порта в sio.
>Можно как-нибудь побороть это ограничение?
Попробуй пропатчить три файла (результат не гарантирую!!!):
*** /usr/src/sys/isa/sio.c Thu Dec 6 16:32:33 2001
--- sio.c Fri Mar 22 16:14:26 2002
***************
*** 106,115 ****
#define LOTS_OF_EVENTS 64 /* helps separate urgent events from input */
! #define CALLOUT_MASK 0x80
! #define CONTROL_MASK 0x60
! #define CONTROL_INIT_STATE 0x20
! #define CONTROL_LOCK_STATE 0x40
#define DEV_TO_UNIT(dev) (MINOR_TO_UNIT(minor(dev)))
#define MINOR_MAGIC_MASK (CALLOUT_MASK | CONTROL_MASK)
#define MINOR_TO_UNIT(mynor) ((mynor) & ~MINOR_MAGIC_MASK)
--- 106,115 ----
#define LOTS_OF_EVENTS 64 /* helps separate urgent events from input */
! #define CALLOUT_MASK (0x80*2)
! #define CONTROL_MASK (0x60*2)
! #define CONTROL_INIT_STATE (0x20*2)
! #define CONTROL_LOCK_STATE (0x40*2)
#define DEV_TO_UNIT(dev) (MINOR_TO_UNIT(minor(dev)))
#define MINOR_MAGIC_MASK (CALLOUT_MASK | CONTROL_MASK)
#define MINOR_TO_UNIT(mynor) ((mynor) & ~MINOR_MAGIC_MASK)
***************
*** 119,125 ****
* for a given card
*/
#define COM_ISMULTIPORT(flags) ((flags) & 0x01)
! #define COM_MPMASTER(flags) (((flags) >> 8) & 0x0ff)
#define COM_NOTAST4(flags) ((flags) & 0x04)
#endif /* COM_MULTIPORT */
--- 119,125 ----
* for a given card
*/
#define COM_ISMULTIPORT(flags) ((flags) & 0x01)
! #define COM_MPMASTER(flags) (((flags) >> 8) & (0x0ff|0x100))
#define COM_NOTAST4(flags) ((flags) & 0x04)
#endif /* COM_MULTIPORT */
*** /usr/src/share/man/man4/sio.4 Wed Mar 1 17:50:19 2000
--- sio.4 Fri Mar 22 17:04:39 2002
***************
*** 86,92 ****
device is reserved for low-level IO (e. g. for remote kernel debugging)
.It 0x00080
use this port for remote kernel debugging
! .It 0x0 Ns Em ?? Ns 00
minor number of master port
.It 0x20000
device is assumed to use a 16650A-type (extended FIFO) chip
--- 86,92 ----
device is reserved for low-level IO (e. g. for remote kernel debugging)
.It 0x00080
use this port for remote kernel debugging
! .It 0x Ns Em ??? Ns 00
minor number of master port
.It 0x20000
device is assumed to use a 16650A-type (extended FIFO) chip
***************
*** 94,100 ****
.Pp
Minor numbering:
.br
! 0b\fIOLIMMMMM\fR
.br
call\fBO\fRut
.br
--- 94,100 ----
.Pp
Minor numbering:
.br
! 0b\fIOLIMMMMMM\fR
.br
call\fBO\fRut
.br
***************
*** 191,197 ****
.Nm sio
driver can be used for both `callin' and `callout'.
For each port there is a callin device and a callout device.
! The minor number of the callout device is 128 higher
than that of the corresponding callin port.
The callin device is general purpose.
Processes opening it normally wait for carrier
--- 191,197 ----
.Nm sio
driver can be used for both `callin' and `callout'.
For each port there is a callin device and a callout device.
! The minor number of the callout device is 256 higher
than that of the corresponding callin port.
The callin device is general purpose.
Processes opening it normally wait for carrier
***************
*** 209,217 ****
.Nm sio
driver also supports an initial-state and a lock-state control
device for each of the callin and the callout "data" devices.
! The minor number of the initial-state device is 32 higher
than that of the corresponding data device.
! The minor number of the lock-state device is 64 higher
than that of the corresponding data device.
The termios settings of a data device are copied
from those of the corresponding initial-state device
--- 209,217 ----
.Nm sio
driver also supports an initial-state and a lock-state control
device for each of the callin and the callout "data" devices.
! The minor number of the initial-state device is 64 higher
than that of the corresponding data device.
! The minor number of the lock-state device is 128 higher
than that of the corresponding data device.
The termios settings of a data device are copied
from those of the corresponding initial-state device
***************
*** 266,272 ****
examples of setting the initial-state and lock-state devices
.El
.Pp
! The devices numbers are made from the set [0-9a-v] so that more than
10 ports can be supported.
.Sh DIAGNOSTICS
.Bl -diag
--- 266,272 ----
examples of setting the initial-state and lock-state devices
.El
.Pp
! The devices numbers are made from the set [0-9a-zA-Z@_] so that more than
10 ports can be supported.
.Sh DIAGNOSTICS
.Bl -diag
*** /usr/src/etc/MAKEDEV Thu Dec 6 16:16:40 2001
--- MAKEDEV Fri Mar 22 16:47:43 2002
***************
*** 206,212 ****
a) m=10;; b) m=11;; c) m=12;; d) m=13;; e) m=14;; f) m=15;; g) m=16;;
h) m=17;; i) m=18;; j) m=19;; k) m=20;; l) m=21;; m) m=22;; n) m=23;;
o) m=24;; p) m=25;; q) m=26;; r) m=27;; s) m=28;; t) m=29;; u) m=30;;
! v) m=31;;
*) m="?";;
esac
echo $m
--- 206,216 ----
a) m=10;; b) m=11;; c) m=12;; d) m=13;; e) m=14;; f) m=15;; g) m=16;;
h) m=17;; i) m=18;; j) m=19;; k) m=20;; l) m=21;; m) m=22;; n) m=23;;
o) m=24;; p) m=25;; q) m=26;; r) m=27;; s) m=28;; t) m=29;; u) m=30;;
! v) m=31;; w) m=32;; x) m=33;; y) m=34;; z) m=35;; A) m=36;; B) m=37;;
! C) m=38;; D) m=39;; E) m=40;; F) m=41;; G) m=42;; H) m=43;; I) m=44;;
! J) m=45;; K) m=46;; L) m=47;; M) m=48;; N) m=49;; O) m=50;; P) m=51;;
! Q) m=52;; R) m=53;; S) m=54;; T) m=55;; U) m=56;; V) m=57;; W) m=58;;
! X) m=59;; Y) m=60;; Z) m=61;; @) m=62;; _) m=63;;
*) m="?";;
esac
echo $m
***************
*** 991,999 ****
umask 7
unit=`expr $i : 'cua.*\(.\)$'`
m=`ttyminor $unit`
! mknod cuaa$unit c 28 `expr $m + 128` uucp:dialer
! mknod cuaia$unit c 28 `expr $m + 32 + 128` uucp:dialer
! mknod cuala$unit c 28 `expr $m + 64 + 128` uucp:dialer
umask 77
;;
--- 995,1003 ----
umask 7
unit=`expr $i : 'cua.*\(.\)$'`
m=`ttyminor $unit`
! mknod cuaa$unit c 28 `expr $m + 2 \* 128 ` uucp:dialer
! mknod cuaia$unit c 28 `expr $m + 2 \* \( 32 + 128 \)` uucp:dialer
! mknod cuala$unit c 28 `expr $m + 2 \* \( 64 + 128 \)` uucp:dialer
umask 77
;;
***************
*** 1001,1008 ****
unit=`expr $i : 'tty.*\(.\)$'`
m=`ttyminor $unit`
mknod ttyd$unit c 28 $m
! mknod ttyid$unit c 28 `expr $m + 32`
! mknod ttyld$unit c 28 `expr $m + 64`
;;
cuac?)
--- 1005,1012 ----
unit=`expr $i : 'tty.*\(.\)$'`
m=`ttyminor $unit`
mknod ttyd$unit c 28 $m
! mknod ttyid$unit c 28 `expr $m + 2 \* 32`
! mknod ttyld$unit c 28 `expr $m + 2 \* 64`
;;
cuac?)
Вал. Дав.