[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:19516] Re: Strange behavior of PCMCIA Modem Card
佐野@浜松です。
In article <19991209163130W.1000@xxxxxxxxxxxxxxxxxxxxxxx>,
at Thu, 9 Dec 1999 22:02:30 +0900,
on Re: Strange behavior of PCMCIA Modem Card,
TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxxxxxxxxxxxxxxx> さん writes:
> > ちょっとエラーメッセージが違いますが "tty02 at 0x13f8" の "0x13f8" という
> > ポート番号のほうが一致しているので、以下の対処を試してみてください。
>
> この対処では、ちょっと不十分なようです。当方で同様の対処を試みたところ、
>
> tty02 at 0x0af8 (irq = 5) is a 16550A
>
> となり、依然として ttyS02 として妥当な I/O port を使用してくれません。
> なお、/proc/ioports を確認しましたが、0x03e8 は使用されていません。
では
# Extra port range for IBM Token Ring
#
# include port 0xa00-0xaff
ここを上記のようにコメントアウトしてみてください。
たぶん、ここで include されているので 0x0af8 が利用可能だと
判断されてしまうのだと思います。
> というわけで、使用する I/O port を明示的に指定する方法があれば、
> 丸く収まるのではないかと思うのですが…。
一応調べてはみたのですが、「明示的に指定する方法」はよくわかりませんでした。
誰か知っている人がいたら教えてもらいたいです。
> ただし、内蔵のモデムとシリアルを両方ともに BIOS で使用不可に設定すると、
> 以下のように使用できるようにはなりました。
>
> tty00 at 0x03f8 (irq = 3) is a 16550A
おそらく client/serial_cs.c の
static int simple_config(dev_link_t *link)
(snip)
/* 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;
/* First pass: look for a config entry that looks normal. */
tuple.TupleData = (cisdata_t *)buf;
tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
tuple.Attributes = 0;
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
i = first_tuple(handle, &tuple, &parse);
while (i != CS_NO_MORE_ITEMS) {
if (i != CS_SUCCESS) goto next_entry;
if (cf->vpp1.present & (1<<CISTPL_POWER_VNOM))
link->conf.Vpp1 = link->conf.Vpp2 =
cf->vpp1.param[CISTPL_POWER_VNOM]/10000;
if ((cf->io.nwin > 0) && ((cf->io.win[0].base & 0xf) == 8)) {
link->conf.ConfigIndex = cf->index;
link->io.BasePort1 = cf->io.win[0].base;
link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
i = CardServices(RequestIO, link->handle, &link->io);
if (i == CS_SUCCESS) goto found_port;
}
next_entry:
i = next_tuple(handle, &tuple, &parse);
}
/* Second pass: try to find an entry that isn't picky about
its base address, then try to grab any standard serial port
address, and finally try to get any free port. */
i = first_tuple(handle, &tuple, &parse);
while (i != CS_NO_MORE_ITEMS) {
if ((i == CS_SUCCESS) && (cf->io.nwin > 0) &&
((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
link->conf.ConfigIndex = cf->index;
for (j = 0; j < 5; j++) {
link->io.BasePort1 = base[j];
i = CardServices(RequestIO, link->handle,
&link->io);
if (i == CS_SUCCESS) goto found_port;
}
}
i = next_tuple(handle, &tuple, &parse);
}
found_port:
のあたりで何か変更されているのではないかと思うのですが、、、
もし pcmcia-cs 3.1.3 が手元にあれば、この部分を比較してみると
何かわかるかもしれません。
# 外していたらごめんなさい。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)