| Summary: | [dc] 21143 with dc driver will not select 10baseT/UTP media | ||
|---|---|---|---|
| Product: | Base System | Reporter: | Nick Sayer <nsayer> |
| Component: | kern | Assignee: | Martin Blapp <mbr> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | 4.4-RELEASE | ||
| Hardware: | Any | ||
| OS: | Any | ||
|
Description
Nick Sayer
2001-11-19 23:10:00 UTC
It turns out we are not reading the SROM correctly in if_dc. If I manually interpret the SROM and put a hack in dc_apply_fixup() with the values I manually picked out, then 10baseT/UTP half duplex works correctly. The problem is twofold: 1. We are not checking the type of leaf node is present. There are multiple formats with different lengths and data and stuff. The Znyx card uses a format we are not expecting. 2. We are not using all of the data present in the SROM. For example, in the SIA leaf node, we only look at the ctl field, whereas we should first poke the ctl value, then the dat value into the upper 16 bits of DC_WATCHDOG. In that format of leaf node, we should also be overriding the contents of CSR13, 14 and 15 (DC_10BTSTAT, DC_10BTCTL and DC_WATCHDOG) with the values specified in the SROM (however, on my Znyx card, the format is a different one that only has the CTL and DAT values, so the present code is picking garbage data to poke in DC_WATCHDOG in any event). Andrew Gallatin sent me this sample code: http://www.tru64unix.compaq.com/docs/dev_doc/DOCUMENTATION/HTML/DDK_R2/usr/opt/OSCB505/src/usr/examples/ddk/src/pci/ Responsible Changed From-To: freebsd-bugs->mbr I'll look at this. State Changed From-To: open->analyzed A fix for this problem has been committed. Can you confirm it ? State Changed From-To: analyzed->closed Feedback timeout (> 1 year). |