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
arch
arm
mach-msm
last_radio_log.c
Go to the documentation of this file.
1
/* arch/arm/mach-msm/last_radio_log.c
2
*
3
* Extract the log from a modem crash though SMEM
4
*
5
* Copyright (C) 2007 Google, Inc.
6
*
7
* This software is licensed under the terms of the GNU General Public
8
* License version 2, as published by the Free Software Foundation, and
9
* may be copied, distributed, and modified under those terms.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
*/
17
18
#include <linux/kernel.h>
19
#include <linux/module.h>
20
#include <linux/fs.h>
21
#include <
linux/proc_fs.h
>
22
#include <
linux/uaccess.h
>
23
24
#include "
smd_private.h
"
25
26
static
void
*radio_log_base;
27
static
size_t
radio_log_size;
28
29
extern
void
*
smem_item
(
unsigned
id
,
unsigned
*
size
);
30
31
static
ssize_t
last_radio_log_read(
struct
file
*
file
,
char
__user *
buf
,
32
size_t
len, loff_t *
offset
)
33
{
34
loff_t
pos
= *
offset
;
35
ssize_t
count
;
36
37
if
(pos >= radio_log_size)
38
return
0;
39
40
count =
min
(len, (
size_t
)(radio_log_size - pos));
41
if
(
copy_to_user
(buf, radio_log_base + pos, count)) {
42
pr_err
(
"%s: copy to user failed\n"
, __func__);
43
return
-
EFAULT
;
44
}
45
46
*offset +=
count
;
47
return
count
;
48
}
49
50
static
struct
file_operations
last_radio_log_fops = {
51
.read = last_radio_log_read,
52
.llseek =
default_llseek
,
53
};
54
55
void
msm_init_last_radio_log
(
struct
module
*
owner
)
56
{
57
struct
proc_dir_entry
*
entry
;
58
59
if
(last_radio_log_fops.
owner
) {
60
pr_err
(
"%s: already claimed\n"
, __func__);
61
return
;
62
}
63
64
radio_log_base =
smem_item
(
SMEM_CLKREGIM_BSP
, &radio_log_size);
65
if
(!radio_log_base) {
66
pr_err
(
"%s: could not retrieve SMEM_CLKREGIM_BSP\n"
, __func__);
67
return
;
68
}
69
70
entry =
create_proc_entry
(
"last_radio_log"
,
S_IFREG
|
S_IRUGO
,
NULL
);
71
if
(!entry) {
72
pr_err
(
"%s: could not create proc entry for radio log\n"
,
73
__func__);
74
return
;
75
}
76
77
pr_err
(
"%s: last radio log is %d bytes long\n"
, __func__,
78
radio_log_size);
79
last_radio_log_fops.
owner
=
owner
;
80
entry->
proc_fops
= &last_radio_log_fops;
81
entry->
size
= radio_log_size;
82
}
83
EXPORT_SYMBOL
(
msm_init_last_radio_log
);
Generated on Thu Jan 10 2013 12:59:52 for Linux Kernel by
1.8.2