[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:19303] Re: [Q] PCMCIA Card modem problem
佐野@浜松です。
In article <199911150751.QAA02124@xxxxxxxxxxxxxxxxxxxx>
Masayuki Hatta <masayuki-h@xxxxxxxxxxxxxxx> さん writes:
> jr5pdx> > /var/log/syslog によれば、問題のカードを挿入すると
> jr5pdx> > Nov 15 14:05:53 paraiso kernel: tty01 at 0x13f8 (irq = 3) is a 16550A
> jr5pdx> > で、面白いのは 3COM Megahertz 10/100 LAN+56K Modem 3CCFEM556B では
> jr5pdx> > Nov 15 14:23:34 paraiso kernel: tty01 at 0x02f8 (irq = 3) is a 16550A
> jr5pdx> I/O port が違いますが、/etc/pcmcia/serial.opts に何か仕掛けて
> jr5pdx> いませんか? 普通の PC/AT は ttyS0 は io=0x3f8 irq=4 で ttyS1
> jr5pdx> は io=0x2f8 irq=3 ですね。
>
> むむ、port が違うのには全然気がつきませんでした ^^;;
> /var/log/syslog をさらってみたところ、以前ちゃんと動いていたころは
> 0x02f8 でした。こいつが元凶かしら。
この問題、もう解決されてますか ? (> 八田(真)さん)
今まで potato では ppp 接続をあまりやってなかったのですが、
pcmcia-cs 3.1.4 で Panasonic の KXL-810AN が使えるらしいと
いう情報を Nifty FLINUX と linux-users とで目にしたので、
忙しいはずなのに pcmcia-cs の upgrade をやってみました。
# ついでに alsa-modules も入れ換えた。kernel は 2.2.12 のまま。
> # しかしどうすればいいんだろう…
> # ラップトップで PCMCIA がイカれるのはかなり痛いので、3.1.4 に
> # アップグレードするのは当面控えた方がいいかもしれません > all
そうしたら、3.1.3-1k では
Nov 19 13:47:12 yadon kernel: tty02 at 0x03e8 (irq = 9) is a 16550A
だったのが 3.1.4-1 では
Dec 1 20:22:21 yadon kernel: tty02 at 0x13f8 (irq = 9) is a 16550A
となって、やはり kermit -l /dev/modem でオープンできなくなりました。
# 実は cat /proc/ioports して気がついた。ログを見たのは後から。
で、とりあえず 0x13f8 を禁止してしまえばよかろう、と
/etc/pcmcia/config.opt を
# System resources available for PCMCIA devices
#
# include port 0x100-0x4ff, port 0x1000-0x17ff
include port 0x100-0x4ff
include memory 0xc0000-0xfffff
#include memory 0xa0000000-0xa0ffffff, memory 0x60000000-0x60ffffff
#
にしてしまいました。これでとりあえずは
Dec 1 20:42:04 yadon kernel: cs: IO port probe 0x0100-0x04ff: excluding 0x1d0-0
x1df 0x1e8-0x1f7 0x388-0x38f 0x3b8-0x3e7 0x408-0x40f 0x480-0x48f 0x4d0-0x4d7
Dec 1 20:42:06 yadon kernel: tty02 at 0x03e8 (irq = 9) is a 16550A
となって使えるようになりました。
本来は pcmcia-cs/clients/serial_cs.c をいじるべきかもしれません。
/* If the card is already configured, look up the port and irq */
i = CardServices(GetConfigurationInfo, handle, &config);
if ((i == CS_SUCCESS) &&
(config.Attributes & CONF_VALID_CLIENT)) {
ioaddr_t port = 0;
if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) {
port = config.BasePort2;
info->slave = 1;
} else if ((info->manfid == MANFID_OSITECH) &&
(config.NumPorts1 == 0x40)) {
port = config.BasePort1 + 0x28;
info->slave = 1;
}
if (info->slave)
return setup_serial(info, port, config.AssignedIRQ);
}
link->conf.Vcc = config.Vcc;
なんとなくこのあたりが怪しいような気がします。
i = CardServices(GetConfigurationInfo, handle, &config);
これの結果として得られる config.BasePort2 を見てるみたいなので
pcmcia-cs/modules/cs.c の中の
int CardServices(int func, void *a1, void *a2, void *a3)
static int get_configuration_info(client_handle_t handle,
config_info_t *config)
あたりを調べてみたほうが良いかも。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)