freebsd-skq/sys/modules
ian 316e68ee6e Add support for i2c bus mux hardware.
An i2c bus can be divided into segments which can be selectively connected
and disconnected from the main bus. This is usually done to enable using
multiple slave devices having the same address, by isolating the devices
onto separate bus segments, only one of which is connected to the main bus
at once.

There are several types of i2c bus muxes, which break down into two general
categories...

 - Muxes which are themselves i2c slaves. These devices respond to i2c
   commands on their upstream bus, and based on those commands, connect
   various downstream buses to the upstream. In newbus terms, they are both
   a child of an iicbus and the parent of one or more iicbus instances.
 - Muxes which are not i2c devices themselves. Such devices are part of the
   i2c bus electrically, but in newbus terms their parent is some other
   bus. The association with the upstream bus must be established by
   separate metadata (such as FDT data).

In both cases, the mux driver has one or more iicbus child instances
representing the downstream buses. The mux driver implements the iicbus_if
interface, as if it were an iichb host bridge/i2c controller driver. It
services the IO requests sent to it by forwarding them to the iicbus
instance representing the upstream bus, after electrically connecting the
upstream bus to the downstream bus that hosts the i2c slave device which
made the IO request.

The net effect is automatic mux switching which is transparent to slaves on
the downstream buses. They just do i2c IO they way they normally do, and the
bus is electrically connected for the duration of the IO and then idled when
it is complete.

The existing iicbus_if callback() method is enhanced so that the parameter
passed to it can be a struct which contains a device_t for the requesting
bus and slave devices. This change is done by adding a flag that indicates
the extra values are present, and making the flags field the first field of
a new args struct. If the flag is set, the iichb or mux driver can recast
the pointer-to-flags into a pointer-to-struct and access the extra
fields. Thus abi compatibility with older drivers is retained (but a mux
cannot exist on the bus with the older iicbus driver in use.)

A new set of core support routines exists in iicbus.c. This code will help
implement mux drivers for any type of mux hardware by supplying all the
boilerplate code that forwards IO requests upstream. It also has code for
parsing metadata and instantiating the child iicbus instances based on it.

Two new hardware mux drivers are added. The ltc430x driver supports the
LTC4305/4306 mux chips which are controlled via i2c commands. The
iic_gpiomux driver supports any mux hardware which is controlled by
manipulating the state of one or more gpio pins.  Test Plan

Tested locally using a variety of mux'd bus configurations involving both
ltc4305 and a homebrew gpio-controlled mux. Tested configurations included
cascaded muxes (unlikely in the real world, but useful to prove that 'it all
just works' in terms of the automatic switching and upstream forwarding of
IO requests).
2020-01-02 17:51:49 +00:00
..
3dfx
3dfx_linux
aac Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
aacraid Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
accf_data
accf_dns
accf_http
acl_nfs4
acl_posix1e
acpi
adlink Convert the PCI ID selection from a simple if into a table. 2018-03-23 15:35:19 +00:00
ae
aesni Move all sources from the llvm project into contrib/llvm-project. 2019-12-20 19:53:05 +00:00
age
agp
ahci
aic7xxx META_MODE: Fix wanting a meta file in source tree. 2018-07-04 00:18:40 +00:00
alc
ale
allwinner The pwm interface was replaced with pwmbus, include the right header file. 2019-06-16 00:27:11 +00:00
alq
am335x_dmtpps
amd_ecc_inject
amdgpio Add amdgpio, driver for GPIO controller on AMD-based x86_64 platforms 2018-10-21 04:52:37 +00:00
amdsbwd Add missing generated header file. 2018-07-09 14:18:03 +00:00
amdsmb Update AMDSMB to use PCI_MATCH 2018-07-07 15:55:52 +00:00
amdsmn
amdtemp
amr
an
aout
apm
ar71xx
arcmsr
arm_ti Add module makefiles for Texas Instruments ARM SoCs. 2019-06-16 01:22:44 +00:00
armv8crypto Create an empty stdint.h for arm_neon.h to include. 2018-07-16 15:39:33 +00:00
asmc Yank crufty INTR_FILTER option 2018-05-24 17:06:00 +00:00
ata
ath
ath_ahb
ath_dfs
ath_hal
ath_hal_ar5210
ath_hal_ar5211
ath_hal_ar5212
ath_hal_ar5416 Garbage collect AH_SUPPORT_AR5416 config option. 2019-01-25 13:48:40 +00:00
ath_hal_ar9300
ath_main
ath_pci
ath_rate
autofs
auxio
bce
bcm283x_clkman
bcm283x_pwm
bfe
bge
bhnd
bios Retire CLANG_NO_IAS34 2018-11-01 23:11:47 +00:00
bktr
blake2 Move all sources from the llvm project into contrib/llvm-project. 2019-12-20 19:53:05 +00:00
bnxt
bridgestp
bwi
bwn
bxe disable set but not used on code that can't be changed 2018-05-19 04:46:34 +00:00
bytgpio
cam Add nvme_util.c to cam.ko. 2018-04-07 19:29:19 +00:00
cardbus
carp
cas
cbb We'll never have multiple slots a cardbus bridge. So, replace exca 2019-12-16 21:34:51 +00:00
cc
ccp
cd9660
cd9660_iconv
ce
cfi Remove kernel support for armeb 2018-07-17 23:23:45 +00:00
cfiscsi
chromebook_platform
chvgpio
ciss
cloudabi
cloudabi32
cloudabi64
cmx
coretemp
cp
cpsw
cpuctl
cpufreq
crypto Expose zlib's utility functions in Z_SOLO library when building kernel. 2019-08-07 01:41:17 +00:00
cryptodev Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
ctau
ctl
cuse Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
cx
cxgb
cxgbe cxgbe(4): Update T4/5/6 firmwares to 1.24.11.0. 2019-12-10 07:45:10 +00:00
dc
dcons
dcons_crom
dpms
dtb arm64: rockchip: dts: Build the Khadas board DTS 2019-10-26 17:51:43 +00:00
dtrace Disconnect fasttrap from the 32-bit powerpc build. 2019-02-21 22:49:21 +00:00
dummynet
efirt Add missing DPSRCS entry for assym.inc. 2019-06-11 23:35:49 +00:00
em Use symlinks for kernel modules rather than hardlinks 2019-04-20 12:51:05 +00:00
ena Introduce NETMAP support in ENA 2019-10-31 15:51:18 +00:00
epic
epoch_test Add simple preempt safe epoch API 2018-05-10 17:55:24 +00:00
esp
et
evdev
exca
ext2fs
fdc
fdescfs
fdt Add another required header file. 2019-03-01 04:17:43 +00:00
ffec
filemon Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
firewire
firmware
fusefs Remove the fuse.ko -> fusefs.ko symlink 2019-08-07 20:28:27 +00:00
fxp Remove a use of a negative array index from fxp(4). 2018-12-19 04:54:32 +00:00
gem
geom Remove GEOM_SCHED class and gsched tool. 2019-12-29 21:16:03 +00:00
glxiic
glxsb
gpio Add module build stuff for gpioths(4), a driver for DHT11/DHT22 sensors. 2019-12-07 17:54:40 +00:00
hifn
hme
hpt27xx
hptiop
hptmv Harmonize the hptmv blob's build rule with that of other hpt* drivers. 2019-10-02 16:18:50 +00:00
hptnr
hptrr
hwpmc Don't attempt to include hwpmc support for armv6, we're missing some of the 2019-06-12 16:05:20 +00:00
hwpmc_mips24k Add dependent header files 2019-03-28 08:30:45 +00:00
hwpmc_mips74k Add dependent header files 2019-03-28 08:30:45 +00:00
hyperv Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
i2c Add support for i2c bus mux hardware. 2020-01-02 17:51:49 +00:00
iavf Use symlinks for kernel modules rather than hardlinks 2019-04-20 12:51:05 +00:00
ibcore
ichwd
ida
if_bridge
if_disc
if_edsc
if_enc
if_epair
if_gif
if_gre Add GRE-in-UDP encapsulation support as defined in RFC8086. 2019-04-24 09:05:45 +00:00
if_lagg
if_me
if_ndis
if_stf
if_tuntap if_tuntap: remove if_{tun,tap}.ko -> if_tuntap.ko links 2019-10-21 20:28:38 +00:00
if_vlan
if_vxlan
iflib Fix make in sys/modules 2019-03-28 08:59:11 +00:00
iir
imgact_binmisc
imx Make the imx6_snvs driver usable as a module, add pnp info. Add a manpage. 2018-07-08 19:35:41 +00:00
intelspi
io
ioat
ip6_mroute_mod
ip_mroute_mod
ipdivert
ipfilter Whitespace adjustment. 2019-06-06 03:02:25 +00:00
ipfw
ipfw_nat
ipfw_nat64 Follow RFC 4443 p2.2 and always use own addresses for reflected ICMPv6 2019-12-12 13:28:46 +00:00
ipfw_nptv6
ipfw_pmod
ipmi Fix a module Makefile error on amd64 so the IPMI HW interfaces are built. 2018-08-16 15:59:02 +00:00
ipoib
ips
ipsec Revert r347402. After r347429 symlink is no longer needed. 2019-05-13 08:34:13 +00:00
ipw
ipwfw
isci
iscsi
iscsi_initiator
iser Use kern.opts.mk instead of bsd.own.mk (which includes src.opts.mk) 2018-03-17 17:18:46 +00:00
isp Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
ispfw
itwd itwd(4): driver for watchdog function in ITE Super I/O chips 2019-10-16 14:57:38 +00:00
iwi
iwifw
iwm iwm: Add device configuration definitions for 9000-series chips. 2019-11-07 23:35:54 +00:00
iwmfw Downgrade the firmware images imported in r354201. 2019-11-03 03:23:27 +00:00
iwn
iwnfw Stop using .OODATE for extracting firmware. 2019-06-12 00:03:00 +00:00
ix
ixl ixl/iavf(4): Change ixlv to iavf and update it to use iflib(9) 2018-10-12 22:40:54 +00:00
ixv
jme
kbdmux Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
kgssapi
kgssapi_krb5
khelp
krpc
ksyms
ktls_ocf Add kernel-side support for in-kernel TLS. 2019-08-27 00:01:56 +00:00
le
lge
libalias
libiconv
libmchain
lindebugfs LinuxKPI: Finalize move of lindebugfs from ports to base. 2019-05-19 15:44:21 +00:00
linprocfs Add warning to the Linuxulator makefiles that building it outside of a 2019-05-13 18:28:40 +00:00
linsysfs Add warning to the Linuxulator makefiles that building it outside of a 2019-05-13 18:28:40 +00:00
linux Replace -Werror with ${WERROR} in module builds 2019-08-25 22:06:17 +00:00
linux64 Replace -Werror with ${WERROR} in module builds 2019-08-25 22:06:17 +00:00
linux_common Add warning to the Linuxulator makefiles that building it outside of a 2019-05-13 18:28:40 +00:00
linuxkpi LinuxKPI: Finalize import of seq_file. 2019-05-16 21:17:18 +00:00
lio
lpt
mac_biba
mac_bsdextended
mac_ifoff
mac_lomac
mac_mls
mac_none
mac_ntpd Make it possible to run ntpd as a non-root user, add ntpd uid and gid. 2018-07-19 23:55:29 +00:00
mac_partition
mac_portacl
mac_seeotheruids
mac_stub
mac_test
mac_veriexec MAC/veriexec implements a verified execution environment using the MAC 2018-06-20 00:41:30 +00:00
mac_veriexec_sha1 MAC/veriexec implements a verified execution environment using the MAC 2018-06-20 00:41:30 +00:00
mac_veriexec_sha256 MAC/veriexec implements a verified execution environment using the MAC 2018-06-20 00:41:30 +00:00
mac_veriexec_sha384 MAC/veriexec implements a verified execution environment using the MAC 2018-06-20 00:41:30 +00:00
mac_veriexec_sha512 MAC/veriexec implements a verified execution environment using the MAC 2018-06-20 00:41:30 +00:00
malo
md
mdio
mem
mfi Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
mgb Introduce if_mgb driver for Microchip LAN743x PCIe NIC 2019-11-06 19:51:40 +00:00
mii
mlx
mlx4
mlx4en
mlx4ib
mlx5 Add basic support for TCP/IP based hardware TLS offload to mlx5core. 2019-12-05 15:16:19 +00:00
mlx5en Implement hardware TLS via send tags for mlx5en(4), which is supported by 2019-12-06 15:36:32 +00:00
mlx5fpga_tools mlx5fpga_tools initial code import. 2018-12-05 14:17:22 +00:00
mlx5ib mlx5fpga: Initial code import. 2018-12-05 14:11:20 +00:00
mlxfw Initial version of Mellanox in-kernel firmware upgrade support. 2019-05-08 10:49:05 +00:00
mly
mmc
mmcnull
mmcsd
mpr Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
mps Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
mpt
mqueue Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
mrsas
msdosfs
msdosfs_iconv
msk
mthca
mvs
mwl
mwlfw Stop using .OODATE for extracting firmware. 2019-06-12 00:03:00 +00:00
mxge Expose zlib's utility functions in Z_SOLO library when building kernel. 2019-08-07 01:41:17 +00:00
my
nctgpio
ndis
netfpga10g
netgraph ng_ubt(4): do not attach Intel Wireless 8260/8265 in bootloader mode. 2019-08-18 22:11:42 +00:00
netmap netmap: align codebase to the current upstream (760279cfb2730a585) 2018-12-05 11:57:16 +00:00
nfe
nfscl
nfscommon Fix build in sys/modules/nfscommon 2019-04-10 16:48:45 +00:00
nfsd Add support for INET6 addresses to the kernel code that dumps open/lock state. 2019-04-13 22:00:09 +00:00
nfslock
nfslockd
nfssvc
nge
nmdm
ntb Forgotten part of r351137. 2019-08-16 20:30:31 +00:00
nullfs
nvd
nvdimm nvdimm(4): Fix Clang build after r353110 2019-10-04 21:47:09 +00:00
nvme Create a AHCI attachment for nvme. 2019-08-21 22:18:01 +00:00
nvram
oce
ocs_fc Don't delete .depend files outside of cleandepend. 2019-06-12 23:09:10 +00:00
opal_nvram powerpc64/powernv: Add opal NVRAM driver for PowerNV systems 2019-09-14 03:30:34 +00:00
opensolaris Export cpu_core from opensolaris.ko. 2019-04-20 11:34:53 +00:00
otus
otusfw
ow
padlock
padlock_rng
pccard
pcfclock
pf Add a missing include of opt_sctp.h. 2019-10-12 23:01:16 +00:00
pflog pflog/pfsync: Fix module build with VIMAGE=yes 2018-07-01 18:09:16 +00:00
pfsync pflog/pfsync: Fix module build with VIMAGE=yes 2018-07-01 18:09:16 +00:00
plip
pms
powermac_nvram
ppbus
ppc
ppi
pps
procfs Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
proto
pseudofs
pst
pty
puc Add PNP info to the PCI attahement of the puc driver. 2018-04-17 16:46:08 +00:00
pwm Add ofw_pwmbus to enumerate pwmbus devices on systems configured with fdt 2019-06-17 03:32:05 +00:00
qlnx qlnxr(4), qlnxe(4): Unbreak gcc build 2019-02-01 23:04:45 +00:00
qlxgb
qlxgbe
qlxge
ral
ralfw Stop using .OODATE for extracting firmware. 2019-06-12 00:03:00 +00:00
random_fortuna
random_other
rc
rc4
rccgpio
rdma
rdrand_rng
re
rl
rndtest
rockchip arm64: rockchip: Add a module for rk_spi 2020-01-02 17:44:41 +00:00
rp Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
rpi_ft5406
rtwn
rtwn_pci rtwn_pci(4): add support for RTL8188EE chipset. 2019-01-02 06:48:53 +00:00
rtwn_usb rtwn_pci(4): add support for event-based Tx reports. 2019-01-02 05:21:06 +00:00
rtwnfw Stop using .OODATE for extracting firmware. 2019-06-12 00:03:00 +00:00
s3
safe
sbni
scc
sdhci
sdhci_acpi
sdhci_pci
sdio Add opt_cam.h so we can build this outside of a kernel build. 2019-06-13 22:03:53 +00:00
sem Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
send
sfxge sfxge(4): add generated description of sensors 2018-11-30 05:54:30 +00:00
sge
sgx Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
sgx_linux
siftr
siis
sis
sk
smartpqi smartpqi(4): Use conventional path to driver sources 2018-04-28 17:43:51 +00:00
smbfs
snp
sound Revert r338423, reapplying r338422, which did get approval but 2018-09-01 15:07:38 +00:00
speaker
spi Add opt_platform.h for several modules that have #ifdef FDT in the source. 2018-04-01 18:22:24 +00:00
spigen Fix make in sys/modules/spigen 2018-07-20 17:46:55 +00:00
splash
sppp
ste
stge
superio add superio driver 2019-07-01 17:05:41 +00:00
sym
syscons
sysvipc Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
tcp This commit adds BBR (Bottleneck Bandwidth and RTT) congestion control. This 2019-09-24 18:18:11 +00:00
tests
ti Add module makefiles for Texas Instruments ARM SoCs. 2019-06-16 01:22:44 +00:00
tmpfs Make TMPFS_PAGES_MINRESERVED a kernel option 2019-03-25 07:46:20 +00:00
toecore
tpm Fix make in sys/modules 2019-03-28 08:59:11 +00:00
tsec
twa
twe
tws
uart Compile uart_cpu_acpi.c, added in r348195, into uart.ko. 2019-12-22 22:10:20 +00:00
ubsec
ubser
uchcom Set .PATH to dev/usb/serial so that these modules compile again. 2018-07-06 22:07:26 +00:00
ucycom Set .PATH to dev/usb/serial so that these modules compile again. 2018-07-06 22:07:26 +00:00
udf
udf_iconv
ufs
uinput
unionfs
usb Add cdceem(4) driver, for virtual ethernet devices compliant 2019-08-07 18:14:45 +00:00
veriexec Device for user space to interface with MAC/veriexec. 2018-06-20 00:48:46 +00:00
vesa
vge
viawd
videomode
virtio
vkbd Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
vmd This driver attaches to the Intel VMD drive and connects a new PCI domain 2019-10-10 03:12:17 +00:00
vmm All genassym.sh usage need offset.inc 2018-07-03 21:02:25 +00:00
vmware Add the pvscsi driver to the tree. 2019-11-14 23:31:20 +00:00
vnic
vpo
vr
vte
wbwd
wi
wlan
wlan_acl
wlan_amrr
wlan_ccmp
wlan_rssadapt
wlan_tkip
wlan_wep
wlan_xauth
wpi
wpifw
wtap
x86bios
xl
xz Modularize xz. 2019-02-26 19:55:03 +00:00
zfs Remove duplicate lz4 implementations 2019-11-02 12:28:04 +00:00
zlib Remove zlib 1.0.4 from kernel. 2019-08-25 17:13:00 +00:00
Makefile Remove the trm(4) driver 2019-11-28 02:32:17 +00:00
Makefile.inc