hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2018 Intel Corporation */
 
#ifndef __IPU3_UTIL_H
#define __IPU3_UTIL_H
 
struct device;
struct imgu_device;
 
#define IPU3_CSS_POOL_SIZE        4
 
/**
 * imgu_css_map - store DMA mapping info for buffer
 *
 * @size:        size of the buffer in bytes.
 * @vaddr:        kernel virtual address.
 * @daddr:        iova dma address to access IPU3.
 */
struct imgu_css_map {
   size_t size;
   void *vaddr;
   dma_addr_t daddr;
   struct page **pages;
};
 
/**
 * imgu_css_pool - circular buffer pool definition
 *
 * @entry:        array with IPU3_CSS_POOL_SIZE elements.
 * @entry.param:    a &struct imgu_css_map for storing the mem mapping.
 * @entry.valid:    used to mark if the entry has valid data.
 * @last:        write pointer, initialized to IPU3_CSS_POOL_SIZE.
 */
struct imgu_css_pool {
   struct {
       struct imgu_css_map param;
       bool valid;
   } entry[IPU3_CSS_POOL_SIZE];
   u32 last;
};
 
int imgu_css_dma_buffer_resize(struct imgu_device *imgu,
                  struct imgu_css_map *map, size_t size);
void imgu_css_pool_cleanup(struct imgu_device *imgu,
              struct imgu_css_pool *pool);
int imgu_css_pool_init(struct imgu_device *imgu, struct imgu_css_pool *pool,
              size_t size);
void imgu_css_pool_get(struct imgu_css_pool *pool);
void imgu_css_pool_put(struct imgu_css_pool *pool);
const struct imgu_css_map *imgu_css_pool_last(struct imgu_css_pool *pool,
                         u32 last);
 
#endif