7#ifndef ZEPHYR_INCLUDE_DRIVERS_I3C_CCC_H_
8#define ZEPHYR_INCLUDE_DRIVERS_I3C_CCC_H_
27#define I3C_CCC_BROADCAST_MAX_ID 0x7FU
34#define I3C_CCC_ENEC(broadcast) ((broadcast) ? 0x00U : 0x80U)
41#define I3C_CCC_DISEC(broadcast) ((broadcast) ? 0x01U : 0x81U)
49#define I3C_CCC_ENTAS(as, broadcast) (((broadcast) ? 0x02U : 0x82U) + (as))
56#define I3C_CCC_ENTAS0(broadcast) I3C_CCC_ENTAS(0, broadcast)
63#define I3C_CCC_ENTAS1(broadcast) I3C_CCC_ENTAS(1, broadcast)
70#define I3C_CCC_ENTAS2(broadcast) I3C_CCC_ENTAS(2, broadcast)
77#define I3C_CCC_ENTAS3(broadcast) I3C_CCC_ENTAS(3, broadcast)
80#define I3C_CCC_RSTDAA 0x06U
83#define I3C_CCC_ENTDAA 0x07U
86#define I3C_CCC_DEFTGTS 0x08U
93#define I3C_CCC_SETMWL(broadcast) ((broadcast) ? 0x09U : 0x89U)
100#define I3C_CCC_SETMRL(broadcast) ((broadcast) ? 0x0AU : 0x8AU)
103#define I3C_CCC_ENTTM 0x0BU
106#define I3C_CCC_SETBUSCON 0x0CU
113#define I3C_CCC_ENDXFER(broadcast) ((broadcast) ? 0x12U : 0x92U)
116#define I3C_CCC_ENTHDR(x) (0x20U + (x))
119#define I3C_CCC_ENTHDR0 0x20U
122#define I3C_CCC_ENTHDR1 0x21U
125#define I3C_CCC_ENTHDR2 0x22U
128#define I3C_CCC_ENTHDR3 0x23U
131#define I3C_CCC_ENTHDR4 0x24U
134#define I3C_CCC_ENTHDR5 0x25U
137#define I3C_CCC_ENTHDR6 0x26U
140#define I3C_CCC_ENTHDR7 0x27U
147#define I3C_CCC_SETXTIME(broadcast) ((broadcast) ? 0x28U : 0x98U)
150#define I3C_CCC_SETAASA 0x29U
157#define I3C_CCC_RSTACT(broadcast) ((broadcast) ? 0x2AU : 0x9AU)
160#define I3C_CCC_DEFGRPA 0x2BU
167#define I3C_CCC_RSTGRPA(broadcast) ((broadcast) ? 0x2CU : 0x9CU)
170#define I3C_CCC_MLANE(broadcast) ((broadcast) ? 0x2DU : 0x9DU)
178#define I3C_CCC_VENDOR(broadcast, id) ((id) + ((broadcast) ? 0x61U : 0xE0U))
181#define I3C_CCC_SETDASA 0x87U
184#define I3C_CCC_SETNEWDA 0x88U
187#define I3C_CCC_GETMWL 0x8BU
190#define I3C_CCC_GETMRL 0x8CU
193#define I3C_CCC_GETPID 0x8DU
196#define I3C_CCC_GETBCR 0x8EU
199#define I3C_CCC_GETDCR 0x8FU
202#define I3C_CCC_GETSTATUS 0x90U
205#define I3C_CCC_GETACCCR 0x91U
208#define I3C_CCC_SETBRGTGT 0x93U
211#define I3C_CCC_GETMXDS 0x94U
214#define I3C_CCC_GETCAPS 0x95U
217#define I3C_CCC_SETROUTE 0x96U
220#define I3C_CCC_D2DXFER 0x97U
223#define I3C_CCC_GETXTIME 0x99U
226#define I3C_CCC_SETGRPA 0x9BU
308#define I3C_CCC_ENEC_EVT_ENINTR BIT(0)
311#define I3C_CCC_ENEC_EVT_ENCR BIT(1)
314#define I3C_CCC_ENEC_EVT_ENHJ BIT(3)
316#define I3C_CCC_ENEC_EVT_ALL \
317 (I3C_CCC_ENEC_EVT_ENINTR | I3C_CCC_ENEC_EVT_ENCR | I3C_CCC_ENEC_EVT_ENHJ)
320#define I3C_CCC_DISEC_EVT_DISINTR BIT(0)
323#define I3C_CCC_DISEC_EVT_DISCR BIT(1)
326#define I3C_CCC_DISEC_EVT_DISHJ BIT(3)
328#define I3C_CCC_DISEC_EVT_ALL \
329 (I3C_CCC_DISEC_EVT_DISINTR | I3C_CCC_DISEC_EVT_DISCR | I3C_CCC_DISEC_EVT_DISHJ)
337#define I3C_CCC_EVT_INTR BIT(0)
340#define I3C_CCC_EVT_CR BIT(1)
343#define I3C_CCC_EVT_HJ BIT(3)
346#define I3C_CCC_EVT_ALL \
347 (I3C_CCC_EVT_INTR | I3C_CCC_EVT_CR | I3C_CCC_EVT_HJ)
575#define I3C_CCC_GETSTATUS_PROTOCOL_ERR BIT(5)
578#define I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT 6
581#define I3C_CCC_GETSTATUS_ACTIVITY_MODE_MASK \
582 (0x03U << I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT)
592#define I3C_CCC_GETSTATUS_ACTIVITY_MODE(status) \
593 (((status) & I3C_CCC_GETSTATUS_ACTIVITY_MODE_MASK) \
594 >> I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT)
597#define I3C_CCC_GETSTATUS_NUM_INT_SHIFT 0
600#define I3C_CCC_GETSTATUS_NUM_INT_MASK \
601 (0x0FU << I3C_CCC_GETSTATUS_NUM_INT_SHIFT)
611#define I3C_CCC_GETSTATUS_NUM_INT(status) \
612 (((status) & I3C_CCC_GETSTATUS_NUM_INT_MASK) \
613 >> I3C_CCC_GETSTATUS_NUM_INT_SHIFT)
616#define I3C_CCC_GETSTATUS_PRECR_DEEP_SLEEP_DETECTED BIT(0)
619#define I3C_CCC_GETSTATUS_PRECR_HANDOFF_DELAY_NACK BIT(1)
706#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_MAX 0
709#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_8MHZ 1
712#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_6MHZ 2
715#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_4MHZ 3
718#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_2MHZ 4
721#define I3C_CCC_GETMXDS_TSCO_8NS 0
724#define I3C_CCC_GETMXDS_TSCO_9NS 1
727#define I3C_CCC_GETMXDS_TSCO_10NS 2
730#define I3C_CCC_GETMXDS_TSCO_11NS 3
733#define I3C_CCC_GETMXDS_TSCO_12NS 4
736#define I3C_CCC_GETMXDS_TSCO_GT_12NS 7
739#define I3C_CCC_GETMXDS_MAXWR_DEFINING_BYTE_SUPPORT BIT(3)
742#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_SHIFT 0
745#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_MASK \
746 (0x07U << I3C_CCC_GET_MXDS_MAXWR_MAX_SDR_FSCL_SHIFT)
756#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL(maxwr) \
758 I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_MASK) \
759 >> I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_SHIFT)
762#define I3C_CCC_GETMXDS_MAXRD_W2R_PERMITS_STOP_BETWEEN BIT(6)
765#define I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT 3
768#define I3C_CCC_GETMXDS_MAXRD_TSCO_MASK \
769 (0x07U << I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT)
779#define I3C_CCC_GETMXDS_MAXRD_TSCO(maxrd) \
780 (((maxrd) & I3C_CCC_GETMXDS_MAXRD_TSCO_MASK) \
781 >> I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT)
784#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_SHIFT 0
787#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_MASK \
788 (0x07U << I3C_CCC_GET_MXDS_MAXRD_MAX_SDR_FSCL_SHIFT)
798#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL(maxrd) \
800 I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_MASK) \
801 >> I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_SHIFT)
804#define I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE BIT(2)
807#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE_SHIFT 0
810#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE_MASK \
811 (0x03U << I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_SHIFT)
821#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE(crhdly1) \
823 I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_MASK) \
824 >> I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_SHIFT)
839#define I3C_CCC_GETCAPS1_HDR_DDR BIT(0)
842#define I3C_CCC_GETCAPS1_HDR_BT BIT(3)
851#define I3C_CCC_GETCAPS1_HDR_MODE(x) BIT(x)
854#define I3C_CCC_GETCAPS1_HDR_MODE0 BIT(0)
857#define I3C_CCC_GETCAPS1_HDR_MODE1 BIT(1)
860#define I3C_CCC_GETCAPS1_HDR_MODE2 BIT(2)
863#define I3C_CCC_GETCAPS1_HDR_MODE3 BIT(3)
866#define I3C_CCC_GETCAPS1_HDR_MODE4 BIT(4)
869#define I3C_CCC_GETCAPS1_HDR_MODE5 BIT(5)
872#define I3C_CCC_GETCAPS1_HDR_MODE6 BIT(6)
875#define I3C_CCC_GETCAPS1_HDR_MODE7 BIT(7)
878#define I3C_CCC_GETCAPS2_HDRDDR_WRITE_ABORT BIT(6)
881#define I3C_CCC_GETCAPS2_HDRDDR_ABORT_CRC BIT(7)
887#define I3C_CCC_GETCAPS2_GRPADDR_CAP_SHIFT 4
893#define I3C_CCC_GETCAPS2_GRPADDR_CAP_MASK \
894 (0x03U << I3C_CCC_GETCAPS2_GRPADDR_CAP_SHIFT)
904#define I3C_CCC_GETCAPS2_GRPADDR_CAP(getcaps2) \
906 I3C_CCC_GETCAPS2_GRPADDR_CAP_MASK) \
907 >> I3C_CCC_GETCAPS_GRPADDR_CAP_SHIFT)
913#define I3C_CCC_GETCAPS2_SPEC_VER_SHIFT 0
919#define I3C_CCC_GETCAPS2_SPEC_VER_MASK \
920 (0x0FU << I3C_CCC_GETCAPS2_SPEC_VER_SHIFT)
931#define I3C_CCC_GETCAPS2_SPEC_VER(getcaps2) \
933 I3C_CCC_GETCAPS2_SPEC_VER_MASK) \
934 >> I3C_CCC_GETCAPS_SPEC_VER_SHIFT)
940#define I3C_CCC_GETCAPS3_MLANE_SUPPORT BIT(0)
946#define I3C_CCC_GETCAPS3_D2DXFER_SUPPORT BIT(1)
952#define I3C_CCC_GETCAPS3_D2DXFER_IBI_CAPABLE BIT(2)
958#define I3C_CCC_GETCAPS3_GETCAPS_DEFINING_BYTE_SUPPORT BIT(3)
964#define I3C_CCC_GETCAPS3_GETSTATUS_DEFINING_BYTE_SUPPORT BIT(4)
970#define I3C_CCC_GETCAPS3_HDRBT_CRC32_SUPPORT BIT(5)
976#define I3C_CCC_GETCAPS3_IBI_MDR_PENDING_READ_NOTIFICATION BIT(6)
i3c_ccc_getstatus_defbyte
Defining byte values for GETSTATUS Format 2.
Definition: ccc.h:516
static int i3c_ccc_do_getstatus_fmt1(const struct i3c_device_desc *target, union i3c_ccc_getstatus *status)
Single target GETSTATUS to Get Target Status (Format 1).
Definition: ccc.h:1266
int i3c_ccc_do_setmrl_all(const struct device *controller, const struct i3c_ccc_mrl *mrl, bool has_ibi_size)
Broadcast SETMRL to Set Maximum Read Length.
int i3c_ccc_do_rstact_all(const struct device *controller, enum i3c_ccc_rstact_defining_byte action)
Broadcast RSTACT to reset I3C Peripheral.
static int i3c_ccc_do_getstatus_fmt2(const struct i3c_device_desc *target, union i3c_ccc_getstatus *status, enum i3c_ccc_getstatus_defbyte defbyte)
Single target GETSTATUS to Get Target Status (Format 2).
Definition: ccc.h:1286
int i3c_ccc_do_getstatus(const struct i3c_device_desc *target, union i3c_ccc_getstatus *status, enum i3c_ccc_getstatus_fmt fmt, enum i3c_ccc_getstatus_defbyte defbyte)
Single target GETSTATUS to Get Target Status.
i3c_ccc_rstact_defining_byte
Enum for I3C Reset Action (RSTACT) Defining Byte Values.
Definition: ccc.h:981
int i3c_ccc_do_setmwl_all(const struct device *controller, const struct i3c_ccc_mwl *mwl)
Broadcast SETMWL to Set Maximum Write Length.
int i3c_ccc_do_setnewda(const struct i3c_device_desc *target, struct i3c_ccc_address new_da)
Set New Dynamic Address for a target.
int i3c_ccc_do_setmrl(const struct i3c_device_desc *target, const struct i3c_ccc_mrl *mrl)
Single target SETMRL to Set Maximum Read Length.
i3c_ccc_getstatus_fmt
Indicate which format of GETSTATUS to use.
Definition: ccc.h:505
int i3c_ccc_do_getbcr(struct i3c_device_desc *target, struct i3c_ccc_getbcr *bcr)
Get BCR from a target.
int i3c_ccc_do_getdcr(struct i3c_device_desc *target, struct i3c_ccc_getdcr *dcr)
Get DCR from a target.
int i3c_ccc_do_getpid(struct i3c_device_desc *target, struct i3c_ccc_getpid *pid)
Get PID from a target.
static bool i3c_ccc_is_payload_broadcast(const struct i3c_ccc_payload *payload)
Test if I3C CCC payload is for broadcast.
Definition: ccc.h:1008
int i3c_ccc_do_rstdaa_all(const struct device *controller)
Broadcast RSTDAA to reset dynamic addresses for all targets.
int i3c_ccc_do_setmwl(const struct i3c_device_desc *target, const struct i3c_ccc_mwl *mwl)
Single target SETMWL to Set Maximum Write Length.
int i3c_ccc_do_getmrl(const struct i3c_device_desc *target, struct i3c_ccc_mrl *mrl)
Single target GETMRL to Get Maximum Read Length.
int i3c_ccc_do_setdasa(const struct i3c_device_desc *target)
Set Dynamic Address from Static Address for a target.
int i3c_ccc_do_getmwl(const struct i3c_device_desc *target, struct i3c_ccc_mwl *mwl)
Single target GETMWL to Get Maximum Write Length.
int i3c_ccc_do_events_all_set(const struct device *controller, bool enable, struct i3c_ccc_events *events)
Broadcast ENEC/DISEC to enable/disable target events.
int i3c_ccc_do_events_set(struct i3c_device_desc *target, bool enable, struct i3c_ccc_events *events)
Direct CCC ENEC/DISEC to enable/disable target events.
#define I3C_CCC_BROADCAST_MAX_ID
Maximum CCC ID for broadcast.
Definition: ccc.h:27
@ GETSTATUS_FORMAT_2_PRECR
PRECR - Alternate status format describing Controller-capable device.
Definition: ccc.h:521
@ GETSTATUS_FORMAT_2_INVALID
Invalid defining byte.
Definition: ccc.h:524
@ GETSTATUS_FORMAT_2_TGTSTAT
Target status.
Definition: ccc.h:518
@ I3C_CCC_RSTACT_PERIPHERAL_ONLY
Reset the I3C Peripheral Only.
Definition: ccc.h:986
@ I3C_CCC_RSTACT_DEBUG_NETWORK_ADAPTER
Debug Network Adapter Reset.
Definition: ccc.h:992
@ I3C_CCC_RSTACT_NO_RESET
No Reset on Target Reset Pattern.
Definition: ccc.h:983
@ I3C_CCC_RSTACT_VIRTUAL_TARGET_DETECT
Virtual Target Detect.
Definition: ccc.h:995
@ I3C_CCC_RSTACT_RESET_WHOLE_TARGET
Reset the Whole Target.
Definition: ccc.h:989
@ GETSTATUS_FORMAT_2
GETSTATUS Format 2.
Definition: ccc.h:510
@ GETSTATUS_FORMAT_1
GETSTATUS Format 1.
Definition: ccc.h:507
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
Payload for a single device address.
Definition: ccc.h:455
uint8_t addr
Definition: ccc.h:470
The active controller part of payload for DEFTGTS CCC.
Definition: ccc.h:384
uint8_t addr
Dynamic Address of Active Controller.
Definition: ccc.h:386
uint8_t dcr
Device Characteristic Register of Active Controller.
Definition: ccc.h:389
uint8_t static_addr
Static Address of Active Controller.
Definition: ccc.h:395
uint8_t bcr
Bus Characteristic Register of Active Controller.
Definition: ccc.h:392
The target device part of payload for DEFTGTS CCC.
Definition: ccc.h:404
uint8_t dcr
Device Characteristic Register of a I3C target device or a group.
Definition: ccc.h:413
uint8_t addr
Dynamic Address of a target device, or a group address.
Definition: ccc.h:406
uint8_t static_addr
Static Address of a target device or a group.
Definition: ccc.h:423
uint8_t bcr
Bus Characteristic Register of a target device or a group.
Definition: ccc.h:420
uint8_t lvr
Legacy Virtual Register for legacy I2C device.
Definition: ccc.h:416
Payload for DEFTGTS CCC (Define List of Targets).
Definition: ccc.h:434
struct i3c_ccc_deftgts_active_controller active_controller
Data describing the active controller.
Definition: ccc.h:436
struct i3c_ccc_deftgts_target targets[]
Data describing the target(s) on the bus.
Definition: ccc.h:439
Payload for ENEC/DISEC CCC (Target Events Command).
Definition: ccc.h:294
uint8_t events
Event byte:
Definition: ccc.h:304
Payload for GETBCR CCC (Get Bus Characteristics Register).
Definition: ccc.h:488
uint8_t bcr
Bus Characteristics Register.
Definition: ccc.h:490
Payload for GETCAPS CCC (Get Optional Feature Capabilities).
Definition: ccc.h:831
uint8_t getcaps[4]
GETCAP[1-4] bytes.
Definition: ccc.h:835
Payload for GETDCR CCC (Get Device Characteristics Register).
Definition: ccc.h:496
uint8_t dcr
Device Characteristics Register.
Definition: ccc.h:498
Payload for GETPID CCC (Get Provisioned ID).
Definition: ccc.h:476
uint8_t pid[6]
48-bit Provisioned ID.
Definition: ccc.h:482
Payload for SETMRL/GETMRL CCC (Set/Get Maximum Read Length).
Definition: ccc.h:370
uint16_t len
Maximum Read Length.
Definition: ccc.h:372
uint8_t ibi_len
Optional IBI Payload Size.
Definition: ccc.h:375
Payload for SETMWL/GETMWL CCC (Set/Get Maximum Write Length).
Definition: ccc.h:357
uint16_t len
Maximum Write Length.
Definition: ccc.h:359
Payload structure for one CCC transaction.
Definition: ccc.h:256
struct i3c_ccc_target_payload * payloads
Array of struct i3c_ccc_target_payload.
Definition: ccc.h:284
uint8_t * data
Pointer to byte array of data for this CCC.
Definition: ccc.h:269
struct i3c_ccc_payload::@162 targets
struct i3c_ccc_payload::@161 ccc
uint8_t id
The CCC ID (I3C_CCC_*).
Definition: ccc.h:261
size_t num_targets
Number of targets.
Definition: ccc.h:287
size_t data_len
Length in bytes for optional data array.
Definition: ccc.h:272
One Bridged Target for SETBRGTGT payload.
Definition: ccc.h:624
uint16_t id
16-bit ID for the bridged target.
Definition: ccc.h:641
uint8_t addr
Dynamic address of the bridged target.
Definition: ccc.h:631
Payload for SETBRGTGT CCC (Set Bridge Targets).
Definition: ccc.h:651
uint8_t count
Number of bridged targets.
Definition: ccc.h:653
struct i3c_ccc_setbrgtgt_tgt targets[]
Array of bridged targets.
Definition: ccc.h:656
Payload structure for Direct CCC to one target.
Definition: ccc.h:233
uint8_t addr
Target address.
Definition: ccc.h:235
size_t data_len
Length in bytes for data.
Definition: ccc.h:250
uint8_t rnw
0 for Write, 1 for Read
Definition: ccc.h:238
uint8_t * data
Definition: ccc.h:247
Structure describing a I3C target device.
Definition: i3c.h:894
Payload for GETMXDS CCC (Get Max Data Speed).
Definition: ccc.h:664
uint8_t wrrdturn
Defining Byte 0x00: WRRDTURN.
Definition: ccc.h:694
uint8_t maxrdturn[3]
Maximum Read Turnaround Time in microsecond.
Definition: ccc.h:685
uint8_t maxrd
maxRd
Definition: ccc.h:670
uint8_t maxwr
maxWr
Definition: ccc.h:667
struct i3c_ccc_getmxds::@168 fmt2
struct i3c_ccc_getmxds::@169 fmt3
uint8_t crhdly1
Defining Byte 0x91: CRHDLY.
Definition: ccc.h:701
struct i3c_ccc_getmxds::@167 fmt1
Payload for GETSTATUS CCC (Get Device Status).
Definition: ccc.h:530
uint16_t precr
Defining Byte 0x91: PRECR.
Definition: ccc.h:568
uint16_t tgtstat
Defining Byte 0x00: TGTSTAT.
Definition: ccc.h:554
uint16_t status
Device Status.
Definition: ccc.h:545
struct i3c_ccc_getstatus::@165 fmt1
union i3c_ccc_getstatus::@166 fmt2
uint16_t raw_u16
Definition: ccc.h:570