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