1 #ifndef __VIDEO_SH_MOBILE_MERAM_H__
2 #define __VIDEO_SH_MOBILE_MERAM_H__
3 
4 /* For sh_mobile_meram_info.addr_mode */
5 enum {
6 	SH_MOBILE_MERAM_MODE0 = 0,
7 	SH_MOBILE_MERAM_MODE1
8 };
9 
10 enum {
11 	SH_MOBILE_MERAM_PF_NV = 0,
12 	SH_MOBILE_MERAM_PF_RGB,
13 	SH_MOBILE_MERAM_PF_NV24
14 };
15 
16 
17 struct sh_mobile_meram_priv;
18 struct sh_mobile_meram_ops;
19 
20 struct sh_mobile_meram_info {
21 	int				addr_mode;
22 	struct sh_mobile_meram_ops	*ops;
23 	struct sh_mobile_meram_priv	*priv;
24 	struct platform_device		*pdev;
25 };
26 
27 /* icb config */
28 struct sh_mobile_meram_icb {
29 	int marker_icb;		/* ICB # for Marker ICB */
30 	int cache_icb;		/* ICB # for Cache ICB */
31 	int meram_offset;	/* MERAM Buffer Offset to use */
32 	int meram_size;		/* MERAM Buffer Size to use */
33 
34 	int cache_unit;		/* bytes to cache per ICB */
35 };
36 
37 struct sh_mobile_meram_cfg {
38 	struct sh_mobile_meram_icb	icb[2];
39 	int				pixelformat;
40 	int				current_reg;
41 };
42 
43 struct module;
44 struct sh_mobile_meram_ops {
45 	struct module	*module;
46 	/* register usage of meram */
47 	int (*meram_register)(struct sh_mobile_meram_info *meram_dev,
48 			      struct sh_mobile_meram_cfg *cfg,
49 			      int xres, int yres, int pixelformat,
50 			      unsigned long base_addr_y,
51 			      unsigned long base_addr_c,
52 			      unsigned long *icb_addr_y,
53 			      unsigned long *icb_addr_c, int *pitch);
54 
55 	/* unregister usage of meram */
56 	int (*meram_unregister)(struct sh_mobile_meram_info *meram_dev,
57 				struct sh_mobile_meram_cfg *cfg);
58 
59 	/* update meram settings */
60 	int (*meram_update)(struct sh_mobile_meram_info *meram_dev,
61 			    struct sh_mobile_meram_cfg *cfg,
62 			    unsigned long base_addr_y,
63 			    unsigned long base_addr_c,
64 			    unsigned long *icb_addr_y,
65 			    unsigned long *icb_addr_c);
66 };
67 
68 #endif /* __VIDEO_SH_MOBILE_MERAM_H__  */
69