Thanks to Jacob Moody, I have fixed my 9front installed so has
compiled the file. The version present now here:

http://downloads.kergis.com/misc/9front/ether8169.c

has been cleared of the trivial typos. It compiles (not tested, and
not totally clean for the first step: extending support while
reorganizing for Rtl8125 and Rtl8126 support).
 
On Mon, Mar 17, 2025 at 10:48:19AM +0100, tlaro...@kergis.com wrote:
> This is still a WIP and I have tried to modify the way things are
> handled in order to clarify a bit.
> 
> For reference the file is there:
> 
> http://downloads.kergis.com/misc/9front/ether8169.c
> 
> but I haven't tried to compile it (because I have to fix my 9front
> installation after moving a disk and this will be for another thread).
> 
> What I have done:
> 
> To clarify, the 8169 is the "order"; in this order, there are
> 8 "families": 
> 
>         Rtl8101E
>         Rtl8111
>         Rtl8129
>         Rtl8139C
>         Rtl8168
>         Rtl8169
>         Rtl8125
>         Rtl8126
> 
> corresponding to 17 PCI devices (vid:did) devices
> 
> from 6 distinct vendors:
> 
>         Realtek
>         Ncube
>         D-LINK
>         Allied Telesis Inc
>         USRobotics
>         Linksys
> 
> and... 82! Mac species.
> 
> In order to know what is there and how to configure, we first match
> a PCI device to its family (and "gender" in the family by setting
> flags).
> 
> Then we get the hardware revision to identify the "specie", adding to
> flags, defining the MTU (some cards can have 4k, 6k, 7k or 9k jumbo
> frames), a cardinal defining the Macfg, and an initial magic value for
> the configuration (rxcfg_val).
> 
> For the moment (in the code: neither compiled nor tested), all the
> tentative devices, families, genders and species (I use these words
> for explanation; only "family" is used in the code) are recognized but
> the Rtl8125 and Rtl8216 are not handled yet (this will be added in
> collaboration with Aidan once we agree on the structures and way to
> handle the things).
> 
> I have kept, for now, the low level config done matching what I have
> called Mii version---the name is very probably incorrect---so that as
> a first step the driver should drive more devices belonging to the
> already handled families (not the Rtl8125 and Rtl8126) without
> breaking things.
> 
> What I need to clarify further:
> 
> - In the Realtek driver, there is a magic value sent first as the
> value for the rcr (receive configuration register). I'm unclear if
> this is all that has to be sent or if once sent, other configurations
> can follow (the present driver is sending custom configurations) or if
> the initial value must be ORed with custom ones;
> 
> - Some registers used in the driver are even not present in the
> Realtek driver (I have completed the enumeration from Aidan patch
> correlating with the Realtek driver);
> 
> - The speeds (additional ones being present in Aidan's patch) should
> probably be handled setting flags (as for PCIE and various
> capabilities);
> 
> - In other kernels, the MII is segregated from the "higher" level,
> while in our driver things are mixed; I need to untangle things
> too---an unknown MII should just lead to basic handling without
> giving up; but the problem is to identify it correctly.
> 
> IMHO, once the present driver will be cleaned to extend support for,
> if not all, at least this wider range of compatible with present handled
> families devices, the support for Rlt8125 and Rtl8126 will be added,
> placing the huge Rtl8125 idiosynchrasies (firmware) in a separated
> file in order to keep the logics of the driver understandable.
> 
> On Sun, Mar 09, 2025 at 09:22:50PM +0100, tlaro...@kergis.com wrote:
> > On Sun, Mar 09, 2025 at 12:46:55PM -0700, Aidan K. Wiggins via 9fans wrote:
> > > Hi Thierry,
> > > 
> > > > Realtek uses the two masks for the macver: 0xFCF00000 to do what is
> > > > done (limitedly) with the macver on the current driver, and to set the
> > > > MACFG (MAC firmware conFiG?) type. The second mask 0x7C800000 is used
> > > > to refine with subconfiguration. I think we should do the same: the
> > > > general matching first; and handling the special cases, apart, after
> > > > without looping again.
> > > 
> > > I think I understand what you're getting at here: instead of having an
> > > enum constant for every little card, we should be using the MACFG
> > > values as indicated by the result of ANDing with 0xFCF000000, as seen
> > > in re_check_mac_version() of Realtek's BSD source. I think there is
> > > merit in this approach, but it would require changing more of the code
> > > than I thought immediately necessary, which is partially why I just
> > > decided to follow suit in borrowing values from Linux (esp. with it's
> > > large userbase included). With looping in our vetmacv(), I was
> > > attempting to keep some level of guaranteed backwards compatibility,
> > > since I wasn't sure if a more specific (0xFCF) mask would tease out a
> > > new Macv value from an older card that was otherwise previously
> > > supported under the mask 0x7C800000.
> > > 
> > 
> > The 8125 will add so much code that I think we can depart for some
> > things from the current state. Since the first test is about the PCI
> > device ID, before verifying the macver, the problems should be unlikely.
> > 
> > But my mind is not set for now about the style. What I want to find is
> > something both small and clear enough for anyone having to work with
> > the driver to understand rapidly what is done. The Linux team seems to
> > be working to some extend with the hardware producers, so I will, too,
> > keep also the Linux driver as a guide---but I give a kind of priority
> > to the Realtek provided one because they are supposed to know what
> > they do produce ;-)
> > 
> > One could also define flags and have a struct with the hardware
> > version and a definition of the corresponding flags, with the
> > initialization simply done if the flag if set.
> > 
> > > > What I'm unclear about at the moment is the Wifi support. 
> > > 
> > > Can you expand on this?
> > > 
> > 
> > My card at least, has a RJ45 but provides wireless connection too. I have
> > to find if the distinction is the device ID, or the function (or a 
> > revision), and if the Realtek driver has some parts dedicated to wireless
> > configuration.
> > 
> > So the question: are the wireless features mixed with this and should
> > be done "here", or can be postpone being supposedly dealt with by
> > another driver?
> > 
> > > > More generally, wouldn't it be more clear to use PCI_VENDOR_ID, 
> > > > PCI_DEVICE_ID,
> > > > etc. from a header instead of the hardcoded values? (that may be hard
> > > > to grep to find if support is there or not---I missed at first that
> > > > there is a U.S. Robotics card with a Realtek chip in the list since
> > > > the vendor id is 0x16EC, to be compared with Realtek 0x10EC.)
> > > 
> > > I agree with Ori's approach here, the device IDs are so specific that
> > > they really only need inclusion in their respective drivers. We do,
> > > however, have some vendor IDs in pci.h, so you could have:
> > > 
> > >         #define PCIdev(vid, did)        ((vid)<<16|(did))
> > >         enum{
> > >         Rtl8169 = PCIdev(Vrealtek, 0x8169),
> > >         Rtl8169c= PCIdev(0x16ec, 0x0116)
> > >         ...
> > >         }
> > > 
> > >         switch(PCIdev(p->vid, p->did)){
> > >         ...
> > >         }
> > 
> > Yep, I like it more this way!
> > 
> > > 
> > > If it weren't for these non-realtek chips, I think we would just use
> > > switch(did){}.
> > > 
> > 
> > The problem is that there is two "alien" cards: the US ROBOTICS, set
> > in the enum, and one hard coded in the switch (to fall back to the
> > Rtl8169 case):
> > 
> > case (0xC107<<16)|0x1259:       /* Corega CG-LAPCIGT */
> > 
> > (These are the exceptions that we will have to verify we are not dropping
> > by inadvertence.)
> > 
> > --
> > Thierry Laronde <tlaronde +AT+ kergis +dot+ com>
> >              http://www.kergis.com/
> >             http://kertex.kergis.com/
> > Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C
> 
> --
> Thierry Laronde <tlaronde +AT+ kergis +dot+ com>
>              http://www.kergis.com/
>             http://kertex.kergis.com/
> Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C

-- 
        Thierry Laronde <tlaronde +AT+ kergis +dot+ com>
                     http://www.kergis.com/
                    http://kertex.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C

------------------------------------------
9fans: 9fans
Permalink: 
https://9fans.topicbox.com/groups/9fans/T832e366730c74bfa-M8d93e808f1b432362423e797
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription

Reply via email to