[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 (佐野 武俊)