Lines Matching defs:qid

242 static u32 prestera_fw_evtq_len(struct prestera_fw *fw, u8 qid)
244 return fw->evt_queue[qid].len;
247 static u32 prestera_fw_evtq_avail(struct prestera_fw *fw, u8 qid)
249 u32 wr_idx = prestera_fw_read(fw, PRESTERA_EVTQ_WR_IDX_REG(qid));
250 u32 rd_idx = prestera_fw_read(fw, PRESTERA_EVTQ_RD_IDX_REG(qid));
252 return CIRC_CNT(wr_idx, rd_idx, prestera_fw_evtq_len(fw, qid));
256 u8 qid, u32 idx)
258 u32 rd_idx = idx & (prestera_fw_evtq_len(fw, qid) - 1);
260 prestera_fw_write(fw, PRESTERA_EVTQ_RD_IDX_REG(qid), rd_idx);
263 static u8 __iomem *prestera_fw_evtq_buf(struct prestera_fw *fw, u8 qid)
265 return fw->evt_queue[qid].addr;
268 static u32 prestera_fw_evtq_read32(struct prestera_fw *fw, u8 qid)
270 u32 rd_idx = prestera_fw_read(fw, PRESTERA_EVTQ_RD_IDX_REG(qid));
273 val = readl(prestera_fw_evtq_buf(fw, qid) + rd_idx);
274 prestera_fw_evtq_rd_set(fw, qid, rd_idx + 4);
279 u8 qid, void *buf, size_t len)
281 u32 idx = prestera_fw_read(fw, PRESTERA_EVTQ_RD_IDX_REG(qid));
282 u8 __iomem *evtq_addr = prestera_fw_evtq_buf(fw, qid);
288 idx = (idx + 4) & (prestera_fw_evtq_len(fw, qid) - 1);
291 prestera_fw_evtq_rd_set(fw, qid, idx);
298 int qid;
300 for (qid = 0; qid < fw->evt_qnum; qid++) {
301 if (prestera_fw_evtq_avail(fw, qid) >= 4)
302 return qid;
321 u8 qid;
328 while ((qid = prestera_fw_evtq_pick(fw)) < PRESTERA_EVT_QNUM_MAX) {
332 len = prestera_fw_evtq_read32(fw, qid);
333 idx = prestera_fw_read(fw, PRESTERA_EVTQ_RD_IDX_REG(qid));
335 WARN_ON(prestera_fw_evtq_avail(fw, qid) < len);
338 prestera_fw_evtq_rd_set(fw, qid, idx + len);
342 prestera_fw_evtq_read_buf(fw, qid, msg, len);
361 static void prestera_fw_cmdq_lock(struct prestera_fw *fw, u8 qid)
363 mutex_lock(&fw->cmd_queue[qid].cmd_mtx);
366 static void prestera_fw_cmdq_unlock(struct prestera_fw *fw, u8 qid)
368 mutex_unlock(&fw->cmd_queue[qid].cmd_mtx);
371 static u32 prestera_fw_cmdq_len(struct prestera_fw *fw, u8 qid)
373 return fw->cmd_queue[qid].len;
376 static u8 __iomem *prestera_fw_cmdq_buf(struct prestera_fw *fw, u8 qid)
378 return fw->cmd_queue[qid].addr;
381 static int prestera_fw_cmd_send(struct prestera_fw *fw, int qid,
392 if (ALIGN(in_size, 4) > prestera_fw_cmdq_len(fw, qid))
396 err = prestera_fw_wait_reg32(fw, PRESTERA_CMDQ_RCV_CTL_REG(qid), 0, 30);
402 prestera_fw_write(fw, PRESTERA_CMDQ_REQ_LEN_REG(qid), in_size);
404 memcpy_toio(prestera_fw_cmdq_buf(fw, qid), in_msg, in_size);
406 prestera_fw_write(fw, PRESTERA_CMDQ_REQ_CTL_REG(qid),
410 err = prestera_fw_wait_reg32(fw, PRESTERA_CMDQ_RCV_CTL_REG(qid),
417 ret_size = prestera_fw_read(fw, PRESTERA_CMDQ_RCV_LEN_REG(qid));
426 prestera_fw_cmdq_buf(fw, qid) + in_size, ret_size);
429 prestera_fw_write(fw, PRESTERA_CMDQ_REQ_CTL_REG(qid),
434 static int prestera_fw_send_req(struct prestera_device *dev, int qid,
443 prestera_fw_cmdq_lock(fw, qid);
444 ret = prestera_fw_cmd_send(fw, qid, in_msg, in_size, out_msg, out_size,
446 prestera_fw_cmdq_unlock(fw, qid);
455 u8 qid;
478 for (qid = 0; qid < fw->cmd_qnum; qid++) {
479 u32 offs = prestera_fw_read(fw, PRESTERA_CMDQ_OFFS_REG(qid));
480 struct prestera_fw_cmdq *cmdq = &fw->cmd_queue[qid];
482 cmdq->len = prestera_fw_read(fw, PRESTERA_CMDQ_LEN_REG(qid));
493 for (qid = 0; qid < fw->evt_qnum; qid++) {
494 u32 offs = prestera_fw_read(fw, PRESTERA_EVTQ_OFFS_REG(qid));
495 struct prestera_fw_evtq *evtq = &fw->evt_queue[qid];
497 evtq->len = prestera_fw_read(fw, PRESTERA_EVTQ_LEN_REG(qid));