cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i2c-mux.h (1667B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *
      4 * i2c-mux.h - functions for the i2c-bus mux support
      5 *
      6 * Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
      7 * Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
      8 * Michael Lawnick <michael.lawnick.ext@nsn.com>
      9 */
     10
     11#ifndef _LINUX_I2C_MUX_H
     12#define _LINUX_I2C_MUX_H
     13
     14#ifdef __KERNEL__
     15
     16#include <linux/bitops.h>
     17
     18struct i2c_mux_core {
     19	struct i2c_adapter *parent;
     20	struct device *dev;
     21	unsigned int mux_locked:1;
     22	unsigned int arbitrator:1;
     23	unsigned int gate:1;
     24
     25	void *priv;
     26
     27	int (*select)(struct i2c_mux_core *, u32 chan_id);
     28	int (*deselect)(struct i2c_mux_core *, u32 chan_id);
     29
     30	int num_adapters;
     31	int max_adapters;
     32	struct i2c_adapter *adapter[];
     33};
     34
     35struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent,
     36				   struct device *dev, int max_adapters,
     37				   int sizeof_priv, u32 flags,
     38				   int (*select)(struct i2c_mux_core *, u32),
     39				   int (*deselect)(struct i2c_mux_core *, u32));
     40
     41/* flags for i2c_mux_alloc */
     42#define I2C_MUX_LOCKED     BIT(0)
     43#define I2C_MUX_ARBITRATOR BIT(1)
     44#define I2C_MUX_GATE       BIT(2)
     45
     46static inline void *i2c_mux_priv(struct i2c_mux_core *muxc)
     47{
     48	return muxc->priv;
     49}
     50
     51struct i2c_adapter *i2c_root_adapter(struct device *dev);
     52
     53/*
     54 * Called to create an i2c bus on a multiplexed bus segment.
     55 * The chan_id parameter is passed to the select and deselect
     56 * callback functions to perform hardware-specific mux control.
     57 */
     58int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
     59			u32 force_nr, u32 chan_id,
     60			unsigned int class);
     61
     62void i2c_mux_del_adapters(struct i2c_mux_core *muxc);
     63
     64#endif /* __KERNEL__ */
     65
     66#endif /* _LINUX_I2C_MUX_H */