in qcom-ngd-ctrl.c [1019:1060]
static int qcom_slim_ngd_get_laddr(struct slim_controller *ctrl,
struct slim_eaddr *ea, u8 *laddr)
{
struct slim_val_inf msg = {0};
u8 failed_ea[6] = {0, 0, 0, 0, 0, 0};
struct slim_msg_txn txn;
u8 wbuf[10] = {0};
u8 rbuf[10] = {0};
int ret;
txn.mt = SLIM_MSG_MT_DEST_REFERRED_USER;
txn.dt = SLIM_MSG_DEST_LOGICALADDR;
txn.la = SLIM_LA_MGR;
txn.ec = 0;
txn.mc = SLIM_USR_MC_ADDR_QUERY;
txn.rl = 11;
txn.msg = &msg;
txn.msg->num_bytes = 7;
txn.msg->wbuf = wbuf;
txn.msg->rbuf = rbuf;
ret = slim_alloc_txn_tid(ctrl, &txn);
if (ret < 0)
return ret;
wbuf[0] = (u8)txn.tid;
memcpy(&wbuf[1], ea, sizeof(*ea));
ret = qcom_slim_ngd_xfer_msg_sync(ctrl, &txn);
if (ret) {
slim_free_txn_tid(ctrl, &txn);
return ret;
}
if (!memcmp(rbuf, failed_ea, 6))
return -ENXIO;
*laddr = rbuf[6];
return ret;
}