Home | History | Annotate | Download | only in pci
History log of /src/sys/dev/pci/nfsmb.c
RevisionDateAuthorComments
 1.29  15-Sep-2025  thorpej Encapsulate what's needed to attach an I2C bus into a iicbus_attach()
inline.
 1.28  03-Sep-2021  andvar fix typos in comments, mainly s/extention/extension/ and s/sufficent/sufficient/
 1.27  07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.26  24-Apr-2021  thorpej branches: 1.26.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.25  22-Dec-2019  thorpej branches: 1.25.10;
Cleanup i2c bus acquire / release, centralizing all of the logic into
iic_acquire_bus() / iic_release_bus(). "acquire" and "release" hooks
no longer need to be provided by back-end controller drivers (only if
they need special handling, e.g. powering on the i2c controller).
This results in the removal of a bunch of rendundant code from each
back-end controller driver.

Assert that we are not in hard interrupt context in iic_acquire_bus(),
iic_exec(), and iic_release_bus().
 1.24  14-Feb-2016  chs branches: 1.24.18;
zero the i2c_attach_args structure before filling it in.
fixes occasional crashes in iic_attach().
 1.23  14-Feb-2012  pgoyette branches: 1.23.6; 1.23.24;
Replace the xxx_acquire()/xxx_release() rwlocks with mutexes. There are
only RW_WRITERs for these, and no RW_READERs, so no need to incur the
extra overhead of allowing for both. As discussed on tech-kern.

For piixpm and ichsmb, the acquire/release protocol needs to be used,
even if the request is I2C_F_POLL'd (or if the device supports only
polled mode). Otherwise multiple requests can be running at the same
time, and they stomp on each other and create anomolous results.

Part 2 addresses my PR kern/45889

3 ACKs from releng
 1.22  30-Jan-2012  drochner Use pci_aprint_devinfo(9) instead of pci_devinfo+aprint_{normal,naive}
where it looks straightforward, and pci_aprint_devinfo_fancy in a few
others where drivers want to supply their own device names instead
of the pcidevs generated one. More complicated cases, where names
are composed at runtime, are left alone for now. It certainly makes
sense to simplify the drivers here rather than inventing a catch-all API.
This should serve as as example for new drivers, and also ensure
consistent output in the AB_QUIET ("boot -q") case. Also, it avoids
excessive stack usage where drivers attach child devices because the
buffer for the device name is not kept on the local stack anymore.
 1.21  08-May-2010  pgoyette branches: 1.21.8; 1.21.12;
Recognize additional SMBus controllers. From FreeBSD.
 1.20  09-May-2009  pgoyette branches: 1.20.2; 1.20.4;
For multi-byte transfers, the bytes need to be written to or read from
consecutive data registers. Discovered while debugging sdtemp(4) driver
which does _only_ 16-bit transfers!
 1.19  09-May-2009  pgoyette You can't use a BYTE protocol to read 16-bits worth of data from the
i2c bus. Discovered while debugging my sdtemp(4) driver.
 1.18  06-May-2009  cegger struct device * -> device_t, no functional changes intended.
 1.17  06-May-2009  cegger struct cfdata * -> cfdata_t, no functional changes intended.
 1.16  03-Feb-2009  pgoyette branches: 1.16.2;
Update the i2c_exec() functions to handle quick_read/quick_write protocol.

Although interface routines i2c_smbus_*() exist, nothing in NetBSD actually
uses them yet.
 1.15  15-Oct-2008  pgoyette branches: 1.15.2;
If we're doing a 2-byte read, return the entire 16-bit result.
 1.14  25-May-2008  cegger branches: 1.14.4;
add comment why NULL handlers are sufficient.
requested and ok'd by jmcneill
 1.13  25-May-2008  cegger add power management support
 1.12  27-Mar-2008  kiyohara branches: 1.12.2; 1.12.4; 1.12.6;
Split device_t/softc.
 1.11  14-Jan-2008  xtraeme branches: 1.11.6;
Fix the BARs on nForce 430, which failed to attach. Reported by
atsushi fukumoto in PR kern/37756.
 1.10  04-Dec-2007  xtraeme branches: 1.10.4;
Newer nForce MCP SMBus devices use different PCI BARs than the old ones
(nForce 2/3/4).

nfsmb(4) is now properly working on newer MCPs, tested by wiz@ on MCP55:

nfsmbc0 at pci0 dev 1 function 1: NVIDIA nForce MCP55 SMBus Controller (rev. 0xa2)
nfsmb0 at nfsmbc0 SMBus 1
iic0 at nfsmb0: I2C bus
spdmem0 at iic0 addr 0x51
spdmem0: DDR2 SDRAM memory, data ECC, 1024MB, 667MHz, PC2-5300
spdmem0: 14 rows, 10 cols, 2 ranks, 4 banks/chip, 3.00ns cycle time
spdmem0: voltage SSTL 1.8V, refresh time 7.8us (self-refreshing)
nfsmb1 at nfsmbc0 SMBus 2
iic1 at nfsmb1: I2C bus
 1.9  14-Nov-2007  xtraeme branches: 1.9.2;
Attach to NVIDIA MCP73 now that we have the PCI id.
 1.8  14-Nov-2007  xtraeme Attach to more NVIDIA SMBus controllers.
 1.7  19-Oct-2007  ad branches: 1.7.2;
machine/{bus,cpu,intr}.h -> sys/{bus,cpu,intr}.h
 1.6  01-Sep-2007  riz branches: 1.6.2; 1.6.6;
For SMBus, add the ability to enumerate devices on the bus.
This does NOT identify the devices, merely indicates the
presence of devices at certain addresses. Tested on ichsmb
and nfsmb - other SMBus devices will need to ensure the
proper bus type is set. (I2C_TYPE_SMBUS)

From Nicolas Joly, via Paul Goyette, in PR#36744.
 1.5  27-Aug-2007  xtraeme branches: 1.5.2;
Use rwlock(9) rather than lockmgr(9).
 1.4  14-Aug-2007  kiyohara Remove and insert null-line.
No parentheses are needed around the return value.
 1.3  28-Jul-2007  kiyohara branches: 1.3.4; 1.3.6;
s/uint32_t reg/pcireg_t reg/.
Check condition `!= 0'.
 1.2  21-Jul-2007  kiyohara We wait for the clearness of the NFORCE_SMB_PROTOCOL as transfer completion.
And, the maximum is assumed to be 10msec. I think that the thing for which
it waits any further is dangerous for the system.
 1.1  11-Jul-2007  kiyohara branches: 1.1.2; 1.1.4; 1.1.6;
Add support for NVIDIA nForce 2/3/4 SMBus controller and SMBus driver.
 1.1.6.2  03-Sep-2007  skrll Sync with HEAD.
 1.1.6.1  15-Aug-2007  skrll Sync with HEAD.
 1.1.4.5  23-Oct-2007  ad Sync with head.
 1.1.4.4  09-Oct-2007  ad Sync with head.
 1.1.4.3  20-Aug-2007  ad Sync with HEAD.
 1.1.4.2  15-Jul-2007  ad Sync with head.
 1.1.4.1  11-Jul-2007  ad file nfsmb.c was added on branch vmlocking on 2007-07-15 13:21:37 +0000
 1.1.2.2  11-Jul-2007  mjf Sync with head.
 1.1.2.1  11-Jul-2007  mjf file nfsmb.c was added on branch mjf-ufs-trans on 2007-07-11 20:07:53 +0000
 1.3.6.2  28-Jul-2007  kiyohara s/uint32_t reg/pcireg_t reg/.
Check condition `!= 0'.
 1.3.6.1  28-Jul-2007  kiyohara file nfsmb.c was added on branch matt-mips64 on 2007-07-28 12:31:51 +0000
 1.3.4.5  09-Dec-2007  jmcneill Sync with HEAD.
 1.3.4.4  14-Nov-2007  joerg Sync with HEAD.
 1.3.4.3  26-Oct-2007  joerg Sync with HEAD.

Follow the merge of pmap.c on i386 and amd64 and move
pmap_init_tmp_pgtbl into arch/x86/x86/pmap.c. Modify the ACPI wakeup
code to restore CR4 before jumping back into kernel space as the large
page option might cover that.
 1.3.4.2  03-Sep-2007  jmcneill Sync with HEAD.
 1.3.4.1  16-Aug-2007  jmcneill Sync with HEAD.
 1.5.2.3  23-Mar-2008  matt sync with HEAD
 1.5.2.2  09-Jan-2008  matt sync with HEAD
 1.5.2.1  06-Nov-2007  matt sync with HEAD
 1.6.6.2  18-Nov-2007  bouyer Sync with HEAD
 1.6.6.1  25-Oct-2007  bouyer Sync with HEAD.
 1.6.2.6  21-Jan-2008  yamt sync with head
 1.6.2.5  07-Dec-2007  yamt sync with head
 1.6.2.4  15-Nov-2007  yamt sync with head.
 1.6.2.3  27-Oct-2007  yamt sync with head.
 1.6.2.2  03-Sep-2007  yamt sync with head.
 1.6.2.1  01-Sep-2007  yamt file nfsmb.c was added on branch yamt-lazymbuf on 2007-09-03 14:37:13 +0000
 1.7.2.3  18-Feb-2008  mjf Sync with HEAD.
 1.7.2.2  08-Dec-2007  mjf Sync with HEAD.
 1.7.2.1  19-Nov-2007  mjf Sync with HEAD.
 1.9.2.1  08-Dec-2007  ad Sync with head.
 1.10.4.1  19-Jan-2008  bouyer Sync with HEAD
 1.11.6.3  17-Jan-2009  mjf Sync with HEAD.
 1.11.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.11.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.12.6.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.12.4.3  11-Aug-2010  yamt sync with head.
 1.12.4.2  16-May-2009  yamt sync with head
 1.12.4.1  04-May-2009  yamt sync with head.
 1.12.2.1  04-Jun-2008  yamt sync with head
 1.14.4.1  19-Oct-2008  haad Sync with HEAD.
 1.15.2.1  03-Mar-2009  skrll Sync with HEAD.
 1.16.2.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.20.4.1  30-May-2010  rmind sync with head
 1.20.2.1  17-Aug-2010  uebayasi Sync with HEAD.
 1.21.12.1  18-Feb-2012  mrg merge to -current.
 1.21.8.1  17-Apr-2012  yamt sync with head
 1.23.24.1  19-Mar-2016  skrll Sync with HEAD
 1.23.6.1  03-Dec-2017  jdolecek update from HEAD
 1.24.18.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.25.10.2  23-Mar-2021  thorpej Convert config_found_ia() call sites where the device only carries
a single interface attribute to bare config_found() calls.
 1.25.10.1  21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.26.8.1  04-Aug-2021  thorpej Adapt to CFARGS().

RSS XML Feed