include/linux/mux/driver.h
Source file repositories/reference/linux-study-clean/include/linux/mux/driver.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/mux/driver.h- Extension
.h- Size
- 3192 bytes
- Lines
- 110
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
dt-bindings/mux/mux.hlinux/device.hlinux/ktime.hlinux/semaphore.h
Detected Declarations
struct mux_chipstruct mux_controlstruct mux_control_opsstruct mux_controlstruct mux_chipfunction mux_chip_privfunction mux_control_get_index
Annotated Snippet
struct mux_control_ops {
int (*set)(struct mux_control *mux, int state);
};
/**
* struct mux_control - Represents a mux controller.
* @lock: Protects the mux controller state.
* @chip: The mux chip that is handling this mux controller.
* @cached_state: The current mux controller state, or -1 if none.
* @states: The number of mux controller states.
* @idle_state: The mux controller state to use when inactive, or one
* of MUX_IDLE_AS_IS and MUX_IDLE_DISCONNECT.
* @last_change: Timestamp of last change
*
* Mux drivers may only change @states and @idle_state, and may only do so
* between allocation and registration of the mux controller. Specifically,
* @cached_state is internal to the mux core and should never be written by
* mux drivers.
*/
struct mux_control {
struct semaphore lock; /* protects the state of the mux */
struct mux_chip *chip;
int cached_state;
unsigned int states;
int idle_state;
ktime_t last_change;
};
/**
* struct mux_chip - Represents a chip holding mux controllers.
* @controllers: Number of mux controllers handled by the chip.
* @dev: Device structure.
* @id: Used to identify the device internally.
* @ops: Mux controller operations.
* @mux: Array of mux controllers that are handled.
*/
struct mux_chip {
unsigned int controllers;
struct device dev;
int id;
const struct mux_control_ops *ops;
struct mux_control mux[] __counted_by(controllers);
};
#define to_mux_chip(x) container_of((x), struct mux_chip, dev)
/**
* mux_chip_priv() - Get the extra memory reserved by mux_chip_alloc().
* @mux_chip: The mux-chip to get the private memory from.
*
* Return: Pointer to the private memory reserved by the allocator.
*/
static inline void *mux_chip_priv(struct mux_chip *mux_chip)
{
return &mux_chip->mux[mux_chip->controllers];
}
struct mux_chip *mux_chip_alloc(struct device *dev,
unsigned int controllers, size_t sizeof_priv);
int mux_chip_register(struct mux_chip *mux_chip);
void mux_chip_unregister(struct mux_chip *mux_chip);
void mux_chip_free(struct mux_chip *mux_chip);
struct mux_chip *devm_mux_chip_alloc(struct device *dev,
unsigned int controllers,
size_t sizeof_priv);
int devm_mux_chip_register(struct device *dev, struct mux_chip *mux_chip);
/**
* mux_control_get_index() - Get the index of the given mux controller
* @mux: The mux-control to get the index for.
*
* Return: The index of the mux controller within the mux chip the mux
* controller is a part of.
*/
static inline unsigned int mux_control_get_index(struct mux_control *mux)
{
return mux - mux->chip->mux;
}
#endif /* _LINUX_MUX_DRIVER_H */
Annotation
- Immediate include surface: `dt-bindings/mux/mux.h`, `linux/device.h`, `linux/ktime.h`, `linux/semaphore.h`.
- Detected declarations: `struct mux_chip`, `struct mux_control`, `struct mux_control_ops`, `struct mux_control`, `struct mux_chip`, `function mux_chip_priv`, `function mux_control_get_index`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.