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
|
/* linux/arch/arm/plat-s5p/bootmem.c
*
* Copyright (c) 2009 Samsung Electronics Co., Ltd.
* http://www.samsung.com/
*
* Bootmem helper functions
*
* 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.
*/
#include <linux/mm.h>
#include <linux/bootmem.h>
#include <linux/swap.h>
#include <asm/setup.h>
#include <linux/io.h>
#include <mach/memory.h>
#include <plat/media.h>
#include <mach/media.h>
static struct s5p_media_device *s5p_get_media_device(int dev_id, int bank)
{
struct s5p_media_device *mdev = NULL;
int i = 0, found = 0, nr_devs;
nr_devs = nr_media_devs;
if (dev_id < 0)
return NULL;
while (!found && (i < nr_devs)) {
mdev = &media_devs[i];
if (mdev->id == dev_id && mdev->bank == bank)
found = 1;
else
i++;
}
if (!found)
mdev = NULL;
return mdev;
}
dma_addr_t s5p_get_media_memory_bank(int dev_id, int bank)
{
struct s5p_media_device *mdev;
mdev = s5p_get_media_device(dev_id, bank);
if (!mdev) {
printk(KERN_ERR "invalid media device\n");
return 0;
}
if (!mdev->paddr) {
printk(KERN_ERR "no memory for %s\n", mdev->name);
return 0;
}
return mdev->paddr;
}
EXPORT_SYMBOL(s5p_get_media_memory_bank);
size_t s5p_get_media_memsize_bank(int dev_id, int bank)
{
struct s5p_media_device *mdev;
mdev = s5p_get_media_device(dev_id, bank);
if (!mdev) {
printk(KERN_ERR "invalid media device\n");
return 0;
}
return mdev->memsize;
}
EXPORT_SYMBOL(s5p_get_media_memsize_bank);
void s5p_reserve_bootmem(void)
{
struct s5p_media_device *mdev;
int i, nr_devs;
nr_devs = nr_media_devs;
for (i = 0; i < nr_devs; i++) {
mdev = &media_devs[i];
if (mdev->memsize <= 0)
continue;
if (mdev->paddr)
mdev->paddr = virt_to_phys(__alloc_bootmem(
mdev->memsize,
PAGE_SIZE,
mdev->paddr));
else
mdev->paddr = virt_to_phys(__alloc_bootmem(
mdev->memsize,
PAGE_SIZE,
meminfo.bank[mdev->bank].start));
printk(KERN_INFO "s5pv210: %lu bytes system memory reserved "
"for %s at 0x%08x\n", (unsigned long) mdev->memsize,
mdev->name, mdev->paddr);
}
}
/* FIXME: temporary implementation to avoid compile error */
int dma_needs_bounce(struct device *dev, dma_addr_t addr, size_t size)
{
return 0;
}
|