Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 May 2023 11:30:20 -0600
From:      John Nielsen <lists@jnielsen.net>
To:        "wireless@freebsd.org" <wireless@FreeBSD.org>
Subject:   Help me grok the ath(4) device attach code
Message-ID:  <49AEA1CB-FA85-432F-89D7-8C49B5F3A344@jnielsen.net>

next in thread | raw e-mail | index | archive | help
I=E2=80=99m trying to wrap my head around the code in =
sys/dev/ath/ath_hal , partly for my own edification but mostly due to =
wanting to fix this bug:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D255337

The card in question is an AR9462, branded (I think) as a Dell Wireless =
1901 with this ID:
vendor=3D0x168c device=3D0x0034 subvendor=3D0x1028 subdevice=3D0x020d

The card is identified and appears to initialize correctly but it has a =
default/bogus MAC address of 00:02:03:04:05:06 and is never able to scan =
any networks. It does work fine under Linux, so I=E2=80=99m attempting =
to compare the two codebases. But since I=E2=80=99m not a device =
developer and haven=E2=80=99t done much C since my undergraduate work, =
I=E2=80=99m having a bit of trouble.

I=E2=80=99m open to any pointers but I=E2=80=99d specifically like to =
work out the following (unless I=E2=80=99m way off base, in which case =
I=E2=80=99d like to know that too):

1) Where does the default MAC address come from? In the Linux driver it =
looks like it=E2=80=99s here:
=
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/tree/drivers=
/net/wireless/ath/ath9k/ar9003_eeprom.c#n49
I don=E2=80=99t see any such definition in the FreeBSD code.

2) When ath_hal_attach() calls chip->attach(), which code is actually =
called (and how/where is that determined)?

3) Is there any equivalent in the FreeBSD code for this Linux process of =
trying to read the EEPROM from multiple different addresses? (Is it =
necessary?)
=
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/tree/drivers=
/net/wireless/ath/ath9k/ar9003_eeprom.c#n3299
See also:
=
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/drive=
rs/net/wireless/ath/ath9k?id=3D528782ecf59f7bab2f1368628a479f49be59b512
and the definitions here:
=
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/tree/drivers=
/net/wireless/ath/ath9k/ar9003_eeprom.h#n78

(I don=E2=80=99t see any of those BASE_ADDR values referenced or defined =
anywhere in FreeBSD)

4) In general, what code should I be looking at to see how the EEPROM is =
read and interpreted for a specific card?

Any help appreciated!

Thanks,

JN




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49AEA1CB-FA85-432F-89D7-8C49B5F3A344>