Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
sound
sound_firmware.c
Go to the documentation of this file.
1
#include <
linux/vmalloc.h
>
2
#include <linux/module.h>
3
#include <linux/fs.h>
4
#include <
linux/mm.h
>
5
#include <linux/sched.h>
6
#include <asm/uaccess.h>
7
#include "
oss/sound_firmware.h
"
8
9
static
int
do_mod_firmware_load(
const
char
*
fn
,
char
**
fp
)
10
{
11
struct
file
* filp;
12
long
l
;
13
char
*
dp
;
14
loff_t
pos
;
15
16
filp =
filp_open
(fn, 0, 0);
17
if
(IS_ERR(filp))
18
{
19
printk
(
KERN_INFO
"Unable to load '%s'.\n"
, fn);
20
return
0;
21
}
22
l = i_size_read(filp->
f_path
.dentry->d_inode);
23
if
(l <= 0 || l > 131072)
24
{
25
printk
(
KERN_INFO
"Invalid firmware '%s'\n"
, fn);
26
filp_close
(filp,
NULL
);
27
return
0;
28
}
29
dp =
vmalloc
(l);
30
if
(dp ==
NULL
)
31
{
32
printk
(
KERN_INFO
"Out of memory loading '%s'.\n"
, fn);
33
filp_close
(filp,
NULL
);
34
return
0;
35
}
36
pos = 0;
37
if
(
vfs_read
(filp, dp, l, &pos) != l)
38
{
39
printk
(
KERN_INFO
"Failed to read '%s'.\n"
, fn);
40
vfree
(dp);
41
filp_close
(filp,
NULL
);
42
return
0;
43
}
44
filp_close
(filp,
NULL
);
45
*fp =
dp
;
46
return
(
int
)
l
;
47
}
48
66
int
mod_firmware_load
(
const
char
*fn,
char
**fp)
67
{
68
int
r
;
69
mm_segment_t
fs
=
get_fs
();
70
71
set_fs
(
get_ds
());
72
r = do_mod_firmware_load(fn, fp);
73
set_fs
(fs);
74
return
r
;
75
}
76
EXPORT_SYMBOL
(
mod_firmware_load
);
77
78
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 15:08:44 for Linux Kernel by
1.8.2