aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/s3c_mem.h
blob: 63971a7010f2fa260c627e183952d00e567ed7a7 (plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* drivers/char/s3c_mem.h
 *
 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com/
 *
 * Header file for s3c mem
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

#define DEBUG_S3C_MEM
#undef	DEBUG_S3C_MEM

#ifdef DEBUG_S3C_MEM
#define DEBUG(fmt, args...) 	printk(fmt, ##args)
#else
#define DEBUG(fmt, args...) 	do {} while (0)
#endif

#ifdef CONFIG_S3C_DMA_MEM
#include "s3c_dma_mem.h"
#endif

#define MEM_IOCTL_MAGIC			'M'

#define S3C_MEM_ALLOC			_IOWR(MEM_IOCTL_MAGIC, 310, struct s3c_mem_alloc)
#define S3C_MEM_FREE			_IOWR(MEM_IOCTL_MAGIC, 311, struct s3c_mem_alloc)

#define S3C_MEM_SHARE_ALLOC		_IOWR(MEM_IOCTL_MAGIC, 314, struct s3c_mem_alloc)
#define S3C_MEM_SHARE_FREE		_IOWR(MEM_IOCTL_MAGIC, 315, struct s3c_mem_alloc)

#define S3C_MEM_CACHEABLE_ALLOC		_IOWR(MEM_IOCTL_MAGIC, 316, struct s3c_mem_alloc)
#define S3C_MEM_CACHEABLE_SHARE_ALLOC	_IOWR(MEM_IOCTL_MAGIC, 317, struct s3c_mem_alloc)

#ifdef CONFIG_S3C_DMA_MEM
#define S3C_MEM_DMA_COPY		_IOWR(MEM_IOCTL_MAGIC, 318, struct s3c_mem_dma_param)
#endif

#define S3C_MEM_GET_PADDR		_IOWR(MEM_IOCTL_MAGIC, 320, struct s3c_mem_alloc)

#ifdef CONFIG_S3C_MEM_CMA_ALLOC
#define S3C_MEM_CMA_ALLOC		\
			_IOWR(MEM_IOCTL_MAGIC, 321, struct s3c_mem_alloc)
#define S3C_MEM_CMA_FREE		\
			_IOWR(MEM_IOCTL_MAGIC, 322, struct s3c_mem_alloc)
#endif

#define MEM_ALLOC			1
#define MEM_ALLOC_SHARE			2
#define MEM_ALLOC_CACHEABLE		3
#define MEM_ALLOC_CACHEABLE_SHARE	4

#ifdef CONFIG_S3C_MEM_CMA_ALLOC
#define MEM_CMA_ALLOC	5
#endif

#define S3C_MEM_MINOR  			13
#undef USE_DMA_ALLOC

static DEFINE_MUTEX(mem_alloc_lock);
static DEFINE_MUTEX(mem_free_lock);

static DEFINE_MUTEX(mem_share_alloc_lock);
static DEFINE_MUTEX(mem_share_free_lock);

static DEFINE_MUTEX(mem_cacheable_alloc_lock);
static DEFINE_MUTEX(mem_cacheable_share_alloc_lock);

#ifdef CONFIG_S3C_MEM_CMA_ALLOC
static DEFINE_MUTEX(mem_open_lock);
static DEFINE_MUTEX(mem_release_lock);
#endif

struct s3c_mem_alloc {
	int size;
	unsigned int vir_addr;
	unsigned int phy_addr;

#ifdef USE_DMA_ALLOC
	unsigned int kvir_addr;
#endif
};

#ifdef CONFIG_S3C_DMA_MEM
#define s3c_dma_init() s3c_dma_mem_init()
#else
#define s3c_dma_init() do { } while (0)
#endif

#ifdef CONFIG_S3C_MEM_CMA_ALLOC
#ifdef CONFIG_VIDEO_SAMSUNG_SLOTSIZE_S3C_MEM_CMA
#define SLOT_SIZE CONFIG_VIDEO_SAMSUNG_SLOTSIZE_S3C_MEM_CMA
#else
#define SLOT_SIZE 1024
#endif

extern int s3c_mem_open(struct inode *inode, struct file *filp);
extern int s3c_mem_release(struct inode *inode, struct file *filp);

#ifdef CONFIG_VIDEO_SAMSUNG_USE_DMA_MEM
extern struct device *s3c_mem_cma_dev;

struct s3c_dev_info {
	struct s3c_mem_alloc s_cur_mem_info;
	struct device *s3c_mem_cma_dev;
};

#else

struct s3c_cur_mem_info {
	unsigned int vaddr;
	unsigned int paddr;
	int mapped_size;
	int req_memblock;
};
struct s3c_slot_info {
	unsigned int s_start_addr;
	unsigned int s_end_addr;
	int s_size;
	bool s_mapped;
};

struct s3c_dev_info {
	struct s3c_cur_mem_info s_cur_mem_info;
	struct s3c_slot_info *s_slot_info;
	int dev_max_slot_num;
	int dev_slot_size;

};

extern struct s3c_slot_info *s3c_slot_info;
extern int s3c_cma_max_block_num;
extern int s3c_cma_block_size;
#endif



#endif