STRUCT I3C_DEVICE_IBI_INFO(9)
π struct i3c_device_ibi_info(9) β the kernel API manual, but make it make sense
okay so bestie, welcome to the struct i3c_device_ibi_info(9) page β this is the kernel API manual, and we're about to get into it π
β¨ NAME β¨
struct i3c_device_ibi_info β literally the IBI information attached to a specific device, no cap π
π¦ SYNOPSIS π¦
struct i3c_device_ibi_info {
struct completion all_ibis_handled;
atomic_t pending_ibis;
unsigned int max_payload_len;
unsigned int num_slots;
unsigned int enabled;
struct workqueue_struct *wq;
void (*handler)(struct i3c_device *dev, const struct i3c_ibi_payload *payload);
};
π Members π
all_ibis_handledβ this one is used to be informed when no more IBIs are waiting to be processed. It's used byi3c_device_disable_ibito wait for all IBIs to be dequeued π«Άpending_ibisβ counts the number of pending IBIs. Each pending IBI has its work element queued to the controller workqueue βmax_payload_lenβ the maximum payload length for an IBI coming from this device. This value is specified when callingi3c_device_request_ibiand, like, should not change at run time β fr fr, don't touch it. All messages IBIs exceeding this limit should be rejected by the master πnum_slotsβ the number of IBI slots reserved for this device πΈenabledβ reflects the IBI status β¨wqβ the workqueue used to execute IBI handlers π₯handlerβ the IBI handler specified ati3c_device_request_ibicall time. This handler will be called from the controller workqueue, and as such is allowed to sleep β though it is recommended to process the IBI as fast as possible so you don't stall processing of other IBIs queued on the same workqueue π. New I3C messages can be sent from the IBI handler π
π Description π
The struct_i3c_device_ibi_info object is allocated when i3c_device_request_ibi is called and attached to a specific device. This object is here to manage IBIs coming from a specific I3C device β that's its whole job, its main character energy π§
Note that this structure is the generic view of the IBI management infrastructure. I3C master drivers may have their own internal representation which they can associate to the device using controller-private data π
lowkey important: it's the generic view, so your master driver might be doing its own thing underneath π
β SEE ALSO β
Kernel file ./include/linux/i3c/master.h β plus, like, the whole friend group:
struct i3c_i2c_dev_desc(9)struct i2c_dev_boardinfo(9)struct i2c_dev_desc(9)struct i3c_ibi_slot(9)struct i3c_dev_boardinfo(9)struct i3c_dev_desc(9)struct i3c_device(9)enum i3c_bus_mode(9)enum i3c_open_drain_speed(9)enum i3c_addr_slot_status(9)struct i3c_bus(9)struct i3c_master_controller_ops(9)struct i3c_master_controller(9)i3c_bus_for_each_i2cdev(9)i3c_bus_for_each_i3cdev(9)struct i3c_dma(9)i3c_dev_get_master_data(9)i3c_dev_set_master_data(9)i2c_dev_get_master_data(9)i2c_dev_set_master_data(9)i3c_dev_get_master(9)i2c_dev_get_master(9)i3c_master_get_bus(9)
and that's the whole page, bestie π«Ά this came out of ./include/linux/i3c and it's dated October 2026, signed off with all the love as struct i3c_device_ibi_info(9) π slay, go read the source, mwah π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms