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) 
  309#define I3C_CCC_ENEC_EVT_ENCR           BIT(1) 
  310#define I3C_CCC_ENEC_EVT_ENHJ           BIT(3) 
  312#define I3C_CCC_ENEC_EVT_ALL            \ 
  313        (I3C_CCC_ENEC_EVT_ENINTR | I3C_CCC_ENEC_EVT_ENCR | I3C_CCC_ENEC_EVT_ENHJ) 
  316#define I3C_CCC_DISEC_EVT_DISINTR       BIT(0) 
  317#define I3C_CCC_DISEC_EVT_DISCR         BIT(1) 
  318#define I3C_CCC_DISEC_EVT_DISHJ         BIT(3) 
  320#define I3C_CCC_DISEC_EVT_ALL           \ 
  321        (I3C_CCC_DISEC_EVT_DISINTR | I3C_CCC_DISEC_EVT_DISCR | I3C_CCC_DISEC_EVT_DISHJ) 
  327#define I3C_CCC_EVT_INTR                BIT(0) 
  328#define I3C_CCC_EVT_CR                  BIT(1) 
  329#define I3C_CCC_EVT_HJ                  BIT(3) 
  331#define I3C_CCC_EVT_ALL                 \ 
  332        (I3C_CCC_EVT_INTR | I3C_CCC_EVT_CR | I3C_CCC_EVT_HJ) 
  549#define I3C_CCC_GETSTATUS_PROTOCOL_ERR                          BIT(5) 
  551#define I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT                   6 
  553#define I3C_CCC_GETSTATUS_ACTIVITY_MODE_MASK                    \ 
  554        (0x03U << I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT) 
  556#define I3C_CCC_GETSTATUS_ACTIVITY_MODE(status)                 \ 
  557        (((status) & I3C_CCC_GETSTATUS_ACTIVITY_MODE_MASK)      \ 
  558         >> I3C_CCC_GETSTATUS_ACTIVITY_MODE_SHIFT) 
  560#define I3C_CCC_GETSTATUS_NUM_INT_SHIFT                         0 
  562#define I3C_CCC_GETSTATUS_NUM_INT_MASK                          \ 
  563        (0x0FU << I3C_CCC_GETSTATUS_NUM_INT_SHIFT) 
  565#define I3C_CCC_GETSTATUS_NUM_INT(status)                       \ 
  566        (((status) & I3C_CCC_GETSTATUS_NUM_INT_MASK)            \ 
  567         >> I3C_CCC_GETSTATUS_NUM_INT_SHIFT) 
  569#define I3C_CCC_GETSTATUS_PRECR_DEEP_SLEEP_DETECTED             BIT(0) 
  571#define I3C_CCC_GETSTATUS_PRECR_HANDOFF_DELAY_NACK              BIT(1) 
  657#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_MAX                        0 
  658#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_8MHZ                       1 
  659#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_6MHZ                       2 
  660#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_4MHZ                       3 
  661#define I3C_CCC_GETMXDS_MAX_SDR_FSCL_2MHZ                       4 
  663#define I3C_CCC_GETMXDS_TSCO_8NS                                0 
  664#define I3C_CCC_GETMXDS_TSCO_9NS                                1 
  665#define I3C_CCC_GETMXDS_TSCO_10NS                               2 
  666#define I3C_CCC_GETMXDS_TSCO_11NS                               3 
  667#define I3C_CCC_GETMXDS_TSCO_12NS                               4 
  668#define I3C_CCC_GETMXDS_TSCO_GT_12NS                            7 
  670#define I3C_CCC_GETMXDS_MAXWR_DEFINING_BYTE_SUPPORT             BIT(3) 
  672#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_SHIFT                0 
  674#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_MASK                 \ 
  675        (0x07U << I3C_CCC_GET_MXDS_MAXWR_MAX_SDR_FSCL_SHIFT) 
  677#define I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL(maxwr)               \ 
  679          I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_MASK)              \ 
  680         >> I3C_CCC_GETMXDS_MAXWR_MAX_SDR_FSCL_SHIFT) 
  682#define I3C_CCC_GETMXDS_MAXRD_W2R_PERMITS_STOP_BETWEEN          BIT(6) 
  684#define I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT                        3 
  686#define I3C_CCC_GETMXDS_MAXRD_TSCO_MASK                         \ 
  687        (0x07U << I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT) 
  689#define I3C_CCC_GETMXDS_MAXRD_TSCO(maxrd)                       \ 
  690        (((maxrd) & I3C_CCC_GETMXDS_MAXRD_TSCO_MASK)            \ 
  691         >> I3C_CCC_GETMXDS_MAXRD_TSCO_SHIFT) 
  693#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_SHIFT                0 
  695#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_MASK                 \ 
  696        (0x07U << I3C_CCC_GET_MXDS_MAXRD_MAX_SDR_FSCL_SHIFT) 
  698#define I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL(maxrd)               \ 
  700          I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_MASK)              \ 
  701         >> I3C_CCC_GETMXDS_MAXRD_MAX_SDR_FSCL_SHIFT) 
  703#define I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE               BIT(2) 
  705#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE_SHIFT    0 
  707#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE_MASK     \ 
  708        (0x03U << I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_SHIFT) 
  710#define I3C_CCC_GETMXDS_CRDHLY1_CTRL_HANDOFF_ACT_STATE(crhdly1) \ 
  712          I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_MASK)       \ 
  713         >> I3C_CCC_GETMXDS_CRDHLY1_SET_BUS_ACT_STATE_SHIFT) 
  727#define I3C_CCC_GETCAPS1_HDR_DDR                                BIT(0) 
  728#define I3C_CCC_GETCAPS1_HDR_BT                                 BIT(3) 
  730#define I3C_CCC_GETCAPS1_HDR_MODE(x)                            BIT(x) 
  731#define I3C_CCC_GETCAPS1_HDR_MODE0                              BIT(0) 
  732#define I3C_CCC_GETCAPS1_HDR_MODE1                              BIT(1) 
  733#define I3C_CCC_GETCAPS1_HDR_MODE2                              BIT(2) 
  734#define I3C_CCC_GETCAPS1_HDR_MODE3                              BIT(3) 
  735#define I3C_CCC_GETCAPS1_HDR_MODE4                              BIT(4) 
  736#define I3C_CCC_GETCAPS1_HDR_MODE5                              BIT(5) 
  737#define I3C_CCC_GETCAPS1_HDR_MODE6                              BIT(6) 
  738#define I3C_CCC_GETCAPS1_HDR_MODE7                              BIT(7) 
  740#define I3C_CCC_GETCAPS2_HDRDDR_WRITE_ABORT                     BIT(6) 
  741#define I3C_CCC_GETCAPS2_HDRDDR_ABORT_CRC                       BIT(7) 
  743#define I3C_CCC_GETCAPS2_GRPADDR_CAP_SHIFT                      4 
  744#define I3C_CCC_GETCAPS2_GRPADDR_CAP_MASK                       \ 
  745        (0x03U << I3C_CCC_GETCAPS2_GRPADDR_CAP_SHIFT) 
  746#define I3C_CCC_GETCAPS2_GRPADDR_CAP(getcaps2)                  \ 
  748          I3C_CCC_GETCAPS2_GRPADDR_CAP_MASK)                    \ 
  749         >> I3C_CCC_GETCAPS_GRPADDR_CAP_SHIFT) 
  751#define I3C_CCC_GETCAPS2_SPEC_VER_SHIFT                         0 
  752#define I3C_CCC_GETCAPS2_SPEC_VER_MASK                          \ 
  753        (0x0FU << I3C_CCC_GETCAPS2_SPEC_VER_SHIFT) 
  754#define I3C_CCC_GETCAPS2_SPEC_VER(getcaps2)                     \ 
  756          I3C_CCC_GETCAPS2_SPEC_VER_MASK)                       \ 
  757         >> I3C_CCC_GETCAPS_SPEC_VER_SHIFT) 
  759#define I3C_CCC_GETCAPS3_MLAME_SUPPORT                          BIT(0) 
  760#define I3C_CCC_GETCAPS3_D2DXFER_SUPPORT                        BIT(1) 
  761#define I3C_CCC_GETCAPS3_D3DXFER_IBI_CAPABLE                    BIT(2) 
  762#define I3C_CCC_GETCAPS3_GETCAPS_DEFINING_BYTE_SUPPORT          BIT(3) 
  763#define I3C_CCC_GETCAPS3_GETSTATUS_DEFINING_BYTE_SUPPORT        BIT(4) 
  764#define I3C_CCC_GETCAPS3_HDRBT_CRC32_SUPPORT                    BIT(5) 
  765#define I3C_CCC_GETCAPS3_IBI_MDR_PENDING_READ_NOTIFICATION      BIT(6) 
i3c_ccc_getstatus_defbyte
Definition: ccc.h:495
 
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:1027
 
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:1047
 
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
Definition: ccc.h:767
 
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_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:490
 
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:785
 
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
Definition: ccc.h:27
 
@ GETSTATUS_FORMAT_2_PRECR
Definition: ccc.h:497
 
@ GETSTATUS_FORMAT_2_INVALID
Definition: ccc.h:499
 
@ GETSTATUS_FORMAT_2_TGTSTAT
Definition: ccc.h:496
 
@ I3C_CCC_RSTACT_PERIPHERAL_ONLY
Definition: ccc.h:769
 
@ I3C_CCC_RSTACT_DEBUG_NETWORK_ADAPTER
Definition: ccc.h:771
 
@ I3C_CCC_RSTACT_NO_RESET
Definition: ccc.h:768
 
@ I3C_CCC_RSTACT_VIRTUAL_TARGET_DETECT
Definition: ccc.h:772
 
@ I3C_CCC_RSTACT_RESET_WHOLE_TARGET
Definition: ccc.h:770
 
@ GETSTATUS_FORMAT_2
Definition: ccc.h:492
 
@ GETSTATUS_FORMAT_1
Definition: ccc.h:491
 
int target
Definition: main.c:68
 
__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:378
 
Payload for a single device address.
Definition: ccc.h:440
 
uint8_t addr
Definition: ccc.h:455
 
The active controller part of payload for DEFTGTS CCC.
Definition: ccc.h:369
 
uint8_t addr
Definition: ccc.h:371
 
uint8_t dcr
Definition: ccc.h:374
 
uint8_t static_addr
Definition: ccc.h:380
 
uint8_t bcr
Definition: ccc.h:377
 
The target device part of payload for DEFTGTS CCC.
Definition: ccc.h:389
 
uint8_t dcr
Definition: ccc.h:398
 
uint8_t addr
Definition: ccc.h:391
 
uint8_t static_addr
Definition: ccc.h:408
 
uint8_t bcr
Definition: ccc.h:405
 
uint8_t lvr
Definition: ccc.h:401
 
Payload for DEFTGTS CCC (Define List of Targets).
Definition: ccc.h:419
 
struct i3c_ccc_deftgts_active_controller active_controller
Definition: ccc.h:421
 
struct i3c_ccc_deftgts_target targets[]
Definition: ccc.h:424
 
Payload for ENEC/DISEC CCC (Target Events Command).
Definition: ccc.h:294
 
uint8_t events
Definition: ccc.h:304
 
Payload for GETBCR CCC (Get Bus Characteristics Register).
Definition: ccc.h:473
 
uint8_t bcr
Definition: ccc.h:475
 
Payload for GETCAPS CCC (Get Optional Feature Capabilities).
Definition: ccc.h:720
 
uint8_t getcaps[4]
Definition: ccc.h:724
 
Payload for GETDCR CCC (Get Device Characteristics Register).
Definition: ccc.h:481
 
uint8_t dcr
Definition: ccc.h:483
 
Payload for GETPID CCC (Get Provisioned ID).
Definition: ccc.h:461
 
uint8_t pid[6]
Definition: ccc.h:467
 
Payload for SETMRL/GETMRL CCC (Set/Get Maximum Read Length).
Definition: ccc.h:355
 
uint16_t len
Definition: ccc.h:357
 
uint8_t ibi_len
Definition: ccc.h:360
 
Payload for SETMWL/GETMWL CCC (Set/Get Maximum Write Length).
Definition: ccc.h:342
 
uint16_t len
Definition: ccc.h:344
 
Payload structure for one CCC transaction.
Definition: ccc.h:256
 
struct i3c_ccc_target_payload * payloads
Definition: ccc.h:284
 
struct i3c_ccc_payload::@127 targets
 
struct i3c_ccc_payload::@126 ccc
 
uint8_t * data
Definition: ccc.h:269
 
uint8_t id
Definition: ccc.h:261
 
size_t num_targets
Definition: ccc.h:287
 
size_t data_len
Definition: ccc.h:272
 
One Bridged Target for SETBRGTGT payload.
Definition: ccc.h:576
 
uint16_t id
Definition: ccc.h:593
 
uint8_t addr
Definition: ccc.h:583
 
Payload for SETBRGTGT CCC (Set Bridge Targets).
Definition: ccc.h:603
 
uint8_t count
Definition: ccc.h:605
 
struct i3c_ccc_setbrgtgt_tgt targets[]
Definition: ccc.h:608
 
Payload structure for Direct CCC to one target.
Definition: ccc.h:233
 
uint8_t addr
Definition: ccc.h:235
 
size_t data_len
Definition: ccc.h:250
 
uint8_t rnw
Definition: ccc.h:238
 
uint8_t * data
Definition: ccc.h:247
 
Structure describing a I3C target device.
Definition: i3c.h:693
 
Payload for GETMXDS CCC (Get Max Data Speed).
Definition: ccc.h:616
 
uint8_t wrrdturn
Definition: ccc.h:646
 
uint8_t maxrdturn[3]
Definition: ccc.h:637
 
struct i3c_ccc_getmxds::@132 fmt1
 
uint8_t maxrd
Definition: ccc.h:622
 
uint8_t maxwr
Definition: ccc.h:619
 
struct i3c_ccc_getmxds::@134 fmt3
 
struct i3c_ccc_getmxds::@133 fmt2
 
uint8_t crhdly1
Definition: ccc.h:653
 
Payload for GETSTATUS CCC (Get Device Status).
Definition: ccc.h:505
 
uint16_t precr
Definition: ccc.h:543
 
uint16_t tgtstat
Definition: ccc.h:529
 
union i3c_ccc_getstatus::@131 fmt2
 
uint16_t status
Definition: ccc.h:520
 
uint16_t raw_u16
Definition: ccc.h:545
 
struct i3c_ccc_getstatus::@130 fmt1