mei: hw: add dma ring control block
The DMA ring control block contains write and read indices for host and device circular buffers. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c55bf542e9
commit
2513eb0dd7
|
@ -97,3 +97,23 @@ bool mei_dma_ring_is_allocated(struct mei_device *dev)
|
|||
{
|
||||
return !!dev->dr_dscr[DMA_DSCR_HOST].vaddr;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct hbm_dma_ring_ctrl *mei_dma_ring_ctrl(struct mei_device *dev)
|
||||
{
|
||||
return (struct hbm_dma_ring_ctrl *)dev->dr_dscr[DMA_DSCR_CTRL].vaddr;
|
||||
}
|
||||
|
||||
/**
|
||||
* mei_dma_ring_reset() - reset the dma control block
|
||||
* @dev: mei device
|
||||
*/
|
||||
void mei_dma_ring_reset(struct mei_device *dev)
|
||||
{
|
||||
struct hbm_dma_ring_ctrl *ctrl = mei_dma_ring_ctrl(dev);
|
||||
|
||||
if (!ctrl)
|
||||
return;
|
||||
|
||||
memset(ctrl, 0, sizeof(*ctrl));
|
||||
}
|
||||
|
|
|
@ -323,6 +323,8 @@ static int mei_hbm_dma_setup_req(struct mei_device *dev)
|
|||
req.dma_dscr[i].size = dev->dr_dscr[i].size;
|
||||
}
|
||||
|
||||
mei_dma_ring_reset(dev);
|
||||
|
||||
ret = mei_hbm_write_message(dev, &mei_hdr, &req);
|
||||
if (ret) {
|
||||
dev_err(dev->dev, "dma setup request write failed: ret = %d.\n",
|
||||
|
|
|
@ -512,4 +512,27 @@ struct hbm_dma_setup_response {
|
|||
u8 reserved[2];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct mei_dma_ring_ctrl - dma ring control block
|
||||
*
|
||||
* @hbuf_wr_idx: host circular buffer write index in slots
|
||||
* @reserved1: reserved for alignment
|
||||
* @hbuf_rd_idx: host circular buffer read index in slots
|
||||
* @reserved2: reserved for alignment
|
||||
* @dbuf_wr_idx: device circular buffer write index in slots
|
||||
* @reserved3: reserved for alignment
|
||||
* @dbuf_rd_idx: device circular buffer read index in slots
|
||||
* @reserved4: reserved for alignment
|
||||
*/
|
||||
struct hbm_dma_ring_ctrl {
|
||||
u32 hbuf_wr_idx;
|
||||
u32 reserved1;
|
||||
u32 hbuf_rd_idx;
|
||||
u32 reserved2;
|
||||
u32 dbuf_wr_idx;
|
||||
u32 reserved3;
|
||||
u32 dbuf_rd_idx;
|
||||
u32 reserved4;
|
||||
} __packed;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -597,6 +597,7 @@ void mei_cancel_work(struct mei_device *dev);
|
|||
int mei_dmam_ring_alloc(struct mei_device *dev);
|
||||
void mei_dmam_ring_free(struct mei_device *dev);
|
||||
bool mei_dma_ring_is_allocated(struct mei_device *dev);
|
||||
void mei_dma_ring_reset(struct mei_device *dev);
|
||||
|
||||
/*
|
||||
* MEI interrupt functions prototype
|
||||
|
|
Loading…
Reference in New Issue