pvr_cccb
bool pvr_cccb_cmdseq_fits(struct pvr_cccb *pvr_cccb, size_t size)
struct rogue_fwif_cccb_ctl *ctrl = pvr_cccb->ctrl;
remaining = pvr_cccb->size - pvr_cccb->write_offset;
if (get_ccb_space(pvr_cccb->write_offset, read_offset, pvr_cccb->size) >= size)
pvr_cccb_write_command_with_header(struct pvr_cccb *pvr_cccb, u32 cmd_type, u32 cmd_size,
struct rogue_fwif_cccb_ctl *ctrl = pvr_cccb->ctrl;
u32 remaining = pvr_cccb->size - pvr_cccb->write_offset;
cccb_space = get_ccb_space(pvr_cccb->write_offset, read_offset, pvr_cccb->size);
memcpy(&pvr_cccb->cccb[pvr_cccb->write_offset], &pad_cmd, sizeof(pad_cmd));
pvr_cccb->write_offset = 0;
memcpy(&pvr_cccb->cccb[pvr_cccb->write_offset], &cmd_header, sizeof(cmd_header));
memcpy(&pvr_cccb->cccb[pvr_cccb->write_offset + sizeof(cmd_header)], cmd_data, cmd_size);
pvr_cccb->write_offset += sz_with_hdr;
static void fill_cmd_kick_data(struct pvr_cccb *cccb, u32 ctx_fw_addr,
struct pvr_cccb *pvr_cccb, u32 cctx_fw_addr,
fill_cmd_kick_data(pvr_cccb, cctx_fw_addr, hwrt, &cmd_kick.cmd_data.cmd_kick_data);
struct pvr_cccb *geom_cccb,
struct pvr_cccb *frag_cccb,
struct pvr_cccb *pvr_cccb = priv;
WRITE_ONCE(ctrl->wrap_mask, pvr_cccb->wrap_mask);
pvr_cccb_init(struct pvr_device *pvr_dev, struct pvr_cccb *pvr_cccb,
pvr_cccb->size = size;
pvr_cccb->write_offset = 0;
pvr_cccb->wrap_mask = size - 1;
pvr_cccb->ctrl = pvr_fw_object_create_and_map(pvr_dev, sizeof(*pvr_cccb->ctrl),
cccb_ctrl_init, pvr_cccb,
&pvr_cccb->ctrl_obj);
if (IS_ERR(pvr_cccb->ctrl))
return PTR_ERR(pvr_cccb->ctrl);
pvr_cccb->cccb = pvr_fw_object_create_and_map(pvr_dev, size,
NULL, NULL, &pvr_cccb->cccb_obj);
if (IS_ERR(pvr_cccb->cccb)) {
err = PTR_ERR(pvr_cccb->cccb);
pvr_fw_object_get_fw_addr(pvr_cccb->ctrl_obj, &pvr_cccb->ctrl_fw_addr);
pvr_fw_object_get_fw_addr(pvr_cccb->cccb_obj, &pvr_cccb->cccb_fw_addr);
pvr_fw_object_unmap_and_destroy(pvr_cccb->ctrl_obj);
pvr_cccb_fini(struct pvr_cccb *pvr_cccb)
pvr_fw_object_unmap_and_destroy(pvr_cccb->cccb_obj);
pvr_fw_object_unmap_and_destroy(pvr_cccb->ctrl_obj);
return size + PADDING_COMMAND_SIZE <= pvr_cccb->size / 2;
int pvr_cccb_init(struct pvr_device *pvr_dev, struct pvr_cccb *cccb,
void pvr_cccb_fini(struct pvr_cccb *cccb);
void pvr_cccb_write_command_with_header(struct pvr_cccb *pvr_cccb,
struct pvr_cccb *pvr_cccb, u32 cctx_fw_addr,
struct pvr_cccb *geom_cccb,
struct pvr_cccb *frag_cccb,
bool pvr_cccb_cmdseq_fits(struct pvr_cccb *pvr_cccb, size_t size);
pvr_cccb_cmdseq_can_fit(struct pvr_cccb *pvr_cccb, size_t size)
struct pvr_cccb *cccb = &queue->cccb;
struct pvr_cccb *cccb = &queue->cccb;
struct pvr_cccb cccb;