Date: Mon, 15 Dec 1997 14:57:34 +0900 (JST) From: hosokawa@ntc.keio.ac.jp (HOSOKAWA Tatsumi) To: nate@mt.sri.com Cc: mobile@freebsd.org, hosokawa@ntc.keio.ac.jp Subject: Re: Multifunction PC-card support Message-ID: <199712150557.OAA02926@afs.ntc.mita.keio.ac.jp> In-Reply-To: Your message of "Sun, 14 Dec 1997 21:17:57 -0700". <199712150417.VAA03645@mt.sri.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <199712150417.VAA03645@mt.sri.com>
nate@mt.sri.com writes:
>> > I started the implementation of multifunction PC-card support on
>> > FreeBSD based on extended PC-card specification.
>>
>> I'd be very intersted in knowing how you are doing that, and how you
>> plan on changing things in /sys/pccard. I'm sure Mike is as well, since
>> this is functionality FreeBSD sorely needs.
I only started reading CIS tupples of Mariner card. But unfortunately
pccardc dumpcis says that this card has following CIS tupples.
--------------------------------------------------------------------------
Configuration data for card in slot 0
Tuple #1, code = 0x1 (Common memory descriptor), length = 2
000: 00 ff
Common memory device information:
Device number 1, type No device, WPS = OFF
Speed = No speed, Memory block size = reserved, 32 units
Tuple #2, code = 0x15 (Version 1 info), length = 56
000: 04 01 4d 6f 74 6f 72 6f 6c 61 2c 20 49 6e 63 2e
010: 00 4d 41 52 49 4e 45 52 20 4d 4f 44 45 4d 2f 46
020: 41 58 2f 4c 41 4e 00 56 65 72 2e 20 31 2e 32 2e
030: 30 34 30 38 39 36 00 ff
Version = 4.1, Manuf = [Motorola, Inc.],card vers = [MARINER MODEM/FAX/LAN]
Addit. info = [Ver. 1.2.040896],[]
Tuple #3, code = 0x20 (Manufacturer ID), length = 4
000: 09 01 01 05
PCMCIA ID = 0x109, OEM ID = 0x501
Tuple #4, code = 0x21 (Functional ID), length = 2
000: 02 00
Serial port/modem
Tuple #5, code = 0x22 (Functional EXT), length = 4
000: 00 02 0f 1c
Serial interface extension:
16550 UART, Parity - Space,Mark,Odd,Even,
Tuple #6, code = 0x22 (Functional EXT), length = 11
000: 01 1f 1e 00 04 00 00 00 04 00 00
Modem interface capabilities:
Tuple #7, code = 0x22 (Functional EXT), length = 14
000: 02 06 00 3f 1c 02 03 1f 06 00 00 b5 20 00
Data modem services available:
Tuple #8, code = 0x22 (Functional EXT), length = 9
000: 06 1f 1e 00 04 00 00 04 00
Modem interface capabilities:
Tuple #9, code = 0x22 (Functional EXT), length = 10
000: 13 06 00 0f 00 00 00 b5 20 00
Tuple #10, code = 0x22 (Functional EXT), length = 10
000: 23 06 00 0f 00 00 00 b5 20 00
Tuple #11, code = 0x1a (Configuration map), length = 5
000: 01 45 20 80 77
Reg len = 2, config register addr = 0x8020, last config = 0x45
Registers: XXX-XXX-
Tuple #12, code = 0x1b (Configuration entry), length = 18
000: c5 01 99 71 55 1e 4e 23 aa 60 f8 03 07 30 bc 9e
010: 28 00
Config index = 0x5(default)
Interface byte = 0x1 (I/O)
Vcc pwr:
Nominal operating supply voltage: 5 x 1V
Max current average over 1 second: 1.5 x 100mA
Max current average over 10 ms: 4.5 x 100mA
Power down supply current: 2 x 100uA
Card decodes 10 address lines, 8 Bit I/O only
I/O address # 1: block start = 0x3f8 block length = 0x8
IRQ modes: Level
IRQs: 2 3 4 5 7 9 10 11 12 15
Max twin cards = 0
Misc attr: (Audio-BVD2) (Power down supported)
Tuple #13, code = 0x1b (Configuration entry), length = 7
000: 25 08 aa 60 f8 02 07
Config index = 0x25
Card decodes 10 address lines, 8 Bit I/O only
I/O address # 1: block start = 0x2f8 block length = 0x8
Tuple #14, code = 0x1b (Configuration entry), length = 7
000: 35 08 aa 60 e8 03 07
Config index = 0x35
Card decodes 10 address lines, 8 Bit I/O only
I/O address # 1: block start = 0x3e8 block length = 0x8
Tuple #15, code = 0x1b (Configuration entry), length = 7
000: 45 08 aa 60 e8 02 07
Config index = 0x5(default)
Card decodes 10 address lines, 8 Bit I/O only
I/O address # 1: block start = 0x2e8 block length = 0x8
Tuple #16, code = 0xff (Terminator), length = 0
2 slots found
--------------------------------------------------------------------------
PC-card standard says that Multifunction CIS has CISTPL_LONGLINK_MFC
(0x06) tupple. According to this output, this card has no 0x06
longlink tupples in it. Morever, it says that this card is "Serial
port/modem" only (ID of multifunction card is 0). I think that this
card is NOT compatible with PC-card standard multifunction support.
Therefore, some sort of dirty hack is needed. According to tupple
#11, configuration register of a function (maybe it's serial function,
because this card is can be used as serial card without modification
of FreeBSD PC-card support) is placed at 0x8020.
Looked round attribute memory 0x8020 by pccardc rdattr, I found:
--------------------------------------------------------------------------
7fc0: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
7fd0: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
7fe0: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
7ff0: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
8000: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8020: 45 00 80 00 22 00 00 00 00 00 00 00 00 00 00 00
8030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
--------------------------------------------------------------------------
0x8020 seems to be configuration registers of PC-card, but 0x8000 also
seems to be configuration registers. So, I think that 0x8000 is
configuration registers of another function (maybe Ethernet).
Also looking round attribute memory of this CIS, I found another
garbage bytes follows normal CIS tupples.
--------------------------------------------------------------------------
0160: 02 00 07 00 1b 00 07 00 35 00 08 00 aa 00 60 00
0170: e8 00 03 00 07 00 1b 00 07 00 45 00 08 00 aa 00
0180: 60 00 e8 00 02 00 07 00 ff 00 ff 00 00 00 00 00
~~ end of CIS (0xff)
0190: 06 00 af 00 ba 00 47 00 0c 00 57 00 a4 00 58 00
01a0: 00 00 01 00 07 00 57 00 04 00 07 00 90 00 b3 00
01b0: 1f 00 7a 00 af 00 30 00 af 00 00 00 4b 00 8f 00
01c0: ef 00 11 00 c9 00 34 00 00 00 04 00 00 00 30 00
01d0: af 00 57 00 a5 00 ab 00 77 00 f6 00 2f 00 07 00
01e0: 04 00 00 00 00 00 af 00 b5 00 91 00 27 00 f6 00
01f0: 2f 00 04 00 04 00 af 00 c7 00 d6 00 27 00 b6 00
0200: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
0210: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
0220: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
0230: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
0240: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
--------------------------------------------------------------------------
I don't know how to decode this enigma, and perhaps it's really a
garbage :-<. If you can decode this, please tell me the truth :-).
Anyway, according to PC-card standard, multifunction IRQ shareing can
be identified by searching all function's Intr bit of configuration
option register. PC-card support of FreeBSD already has pcicintr()
first level interrupt handler. So I think it's not difficult to add
the code that identify which function's Intr bit, dispatch the
interrupt request to the appropriate second-level interrupt handler.
Moreover, according to PC-card standard bit 2-0 of config index of
multifunction card means,
bit 0: enable/disable this function
bit 1: number of I/O addresss used
bit 2: enables IREQ# routing
So, default config index 0x05 means that it enable this function and
enable IREQ# routing. All config index has 0x05 bits, so I 'feel'
this card partly compatible with PC-card standard.
I'll hack this card and try to write first level interrupt handler
this month.
--
HOSOKAWA, Tatsumi
Network Technology Center
Keio University
hosokawa@ntc.keio.ac.jp
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712150557.OAA02926>
