Subject: MII OUI confusion
To: None <tech-net@netbsd.org>
From: Matthias Drochner <drochner@zel459.zel.kfa-juelich.de>
List: tech-net
Date: 04/16/1999 22:06:33
I'm working on some support code for the AMD 79c973 LANCE chip
which uses MII to talk to its PHY (internal or external).
So I had to notice that there is already an entry for an AMD
OUI in dev/mii/miidevs which looks wrong and that there is generally
a giant mess in the interpretation of the OUIs.
It seems that the vendors do not agree in the way the 22 bits available
in the MII ID registers are mapped to the 3 bytes of their IEEE OUI.
Four out of our table (AMD, Intel, NatSemi, QualSemi) ise the bits
"as we would read them". Four other (ICS, Seeq, SIS, TI) have the
bits within a byte the other way - as they flow on the ethernet wire.
Level1 and Davicom are more different - Level1 has also the bytes
reversed, and Davicom is mysterious for me.
Probably the MII standard is not very clear about this - is there
someone who has a copy at hand?
This mess has caused some conflicts: On the '973, AMD uses its
real OUI (00-00-1a), but the table already contains an
00-60-6e for it (which is used on the '873 PHY chip). This in turn
matches the real OUI of Davicom.
(Well, "real" is under the assumption that the AMD/Intel/...
interpretation is correct.) Davicom uses another ID, according
to our table, which can't be explained that easily...
I'd say we should primarily list the real, IEEE registered
OUI in dev/mii/miidevs. The different ways to put them into
the MII ID registers should be dealt with in vendor specific
quirks.
The sad fact is that it is hard to identify MII chips -without
a special driver- in generic code, as eg PCI does.
So what I'd like to do is to change "miidevs" to list the
approved OUIs; ie:
oui AMD 0x00001a Advanced Micro Devices
oui DAVICOM 0x00606e Davicom Semiconductor
oui ICS 0x00a0be Integrated Circuit Systems
oui INTEL 0x00aa00 Intel
oui LEVEL1 0x00207b Level 1
oui NATSEMI 0x080017 National Semiconductor
oui QUALSEMI 0x006051 Quality Semiconductor
oui SEEQ 0x00a07d Seeq
oui SIS 0x00e006 Silicon Integrated Systems
oui TI 0x080028 Texas Instruments
and to add special cases for chips which are diffent from the
"right" way. To find what's "right" some information from the
standard would be appreciated, but in doubt I'd stick with the
current MII_OUI() macro which reflects the AMD/Intel/... way.
The special cases could look more or less like:
/* in the 79c873, AMD uses another OUI which matches Davicom */
oui xxAMD 0x00606e Advanced Micro Devices
/* some vendors have the register bits ordered as on the wire */
oui xxICS 0x00057d Integrated Circuit Systems
/* Advanced Micro Devices PHYs */
model xxAMD 79C873 0x0000 Am79C873 10/100 media interface
model AMD 79c973phy 0x0036 Am79c973 internal PHY
model xxICS 1890 0x0002 ICS1890 10/100 media interface
Any comments / objections / clues?
best regards
Matthias