drivers/char/ipmi/ipmi_si_sm.h
Source file repositories/reference/linux-study-clean/drivers/char/ipmi/ipmi_si_sm.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/char/ipmi/ipmi_si_sm.h- Extension
.h- Size
- 3120 bytes
- Lines
- 105
- Domain
- Driver Families
- Bucket
- drivers/char
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
ipmi_si.h
Detected Declarations
struct si_sm_datastruct si_sm_handlersenum si_sm_result
Annotated Snippet
struct si_sm_handlers {
/*
* Put the version number of the state machine here so the
* upper layer can print it.
*/
char *version;
/*
* Initialize the data and return the amount of I/O space to
* reserve for the space.
*/
unsigned int (*init_data)(struct si_sm_data *smi,
struct si_sm_io *io);
/*
* Start a new transaction in the state machine. This will
* return -2 if the state machine is not idle, -1 if the size
* is invalid (to large or too small), or 0 if the transaction
* is successfully completed.
*/
int (*start_transaction)(struct si_sm_data *smi,
unsigned char *data, unsigned int size);
/*
* Return the results after the transaction. This will return
* -1 if the buffer is too small, zero if no transaction is
* present, or the actual length of the result data.
*/
int (*get_result)(struct si_sm_data *smi,
unsigned char *data, unsigned int length);
/*
* Call this periodically (for a polled interface) or upon
* receiving an interrupt (for a interrupt-driven interface).
* If interrupt driven, you should probably poll this
* periodically when not in idle state. This should be called
* with the time that passed since the last call, if it is
* significant. Time is in microseconds.
*/
enum si_sm_result (*event)(struct si_sm_data *smi, long time);
/*
* Attempt to detect an SMI. Returns 0 on success or nonzero
* on failure.
*/
int (*detect)(struct si_sm_data *smi);
/* The interface is shutting down, so clean it up. */
void (*cleanup)(struct si_sm_data *smi);
/* Return the size of the SMI structure in bytes. */
int (*size)(void);
};
/* Current state machines that we can use. */
extern const struct si_sm_handlers kcs_smi_handlers;
extern const struct si_sm_handlers smic_smi_handlers;
extern const struct si_sm_handlers bt_smi_handlers;
#endif /* __IPMI_SI_SM_H__ */
Annotation
- Immediate include surface: `ipmi_si.h`.
- Detected declarations: `struct si_sm_data`, `struct si_sm_handlers`, `enum si_sm_result`.
- Atlas domain: Driver Families / drivers/char.
- 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.