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
drivers
mtd
chips
map_absent.c
Go to the documentation of this file.
1
/*
2
* Common code to handle absent "placeholder" devices
3
* Copyright 2001 Resilience Corporation <
[email protected]
>
4
*
5
* This map driver is used to allocate "placeholder" MTD
6
* devices on systems that have socketed/removable media.
7
* Use of this driver as a fallback preserves the expected
8
* registration of MTD device nodes regardless of probe outcome.
9
* A usage example is as follows:
10
*
11
* my_dev[i] = do_map_probe("cfi", &my_map[i]);
12
* if(NULL == my_dev[i]) {
13
* my_dev[i] = do_map_probe("map_absent", &my_map[i]);
14
* }
15
*
16
* Any device 'probed' with this driver will return -ENODEV
17
* upon open.
18
*/
19
20
#include <linux/module.h>
21
#include <linux/types.h>
22
#include <linux/kernel.h>
23
#include <linux/errno.h>
24
#include <linux/slab.h>
25
#include <
linux/init.h
>
26
#include <
linux/mtd/mtd.h
>
27
#include <
linux/mtd/map.h
>
28
29
static
int
map_absent_read (
struct
mtd_info
*, loff_t,
size_t
,
size_t
*,
u_char
*);
30
static
int
map_absent_write (
struct
mtd_info
*, loff_t,
size_t
,
size_t
*,
const
u_char
*);
31
static
int
map_absent_erase (
struct
mtd_info
*,
struct
erase_info
*);
32
static
void
map_absent_sync (
struct
mtd_info
*);
33
static
struct
mtd_info
*map_absent_probe(
struct
map_info
*
map
);
34
static
void
map_absent_destroy (
struct
mtd_info
*);
35
36
37
static
struct
mtd_chip_driver
map_absent_chipdrv = {
38
.probe = map_absent_probe,
39
.destroy = map_absent_destroy,
40
.name =
"map_absent"
,
41
.module =
THIS_MODULE
42
};
43
44
static
struct
mtd_info
*map_absent_probe(
struct
map_info
*
map
)
45
{
46
struct
mtd_info
*mtd;
47
48
mtd = kzalloc(
sizeof
(*mtd),
GFP_KERNEL
);
49
if
(!mtd) {
50
return
NULL
;
51
}
52
53
map->
fldrv
= &map_absent_chipdrv;
54
mtd->
priv
=
map
;
55
mtd->
name
= map->
name
;
56
mtd->
type
=
MTD_ABSENT
;
57
mtd->
size
= map->
size
;
58
mtd->
_erase
= map_absent_erase;
59
mtd->
_read
= map_absent_read;
60
mtd->
_write
= map_absent_write;
61
mtd->
_sync
= map_absent_sync;
62
mtd->
flags
= 0;
63
mtd->
erasesize
=
PAGE_SIZE
;
64
mtd->
writesize
= 1;
65
66
__module_get(
THIS_MODULE
);
67
return
mtd;
68
}
69
70
71
static
int
map_absent_read(
struct
mtd_info
*mtd, loff_t
from
,
size_t
len,
size_t
*retlen,
u_char
*
buf
)
72
{
73
return
-
ENODEV
;
74
}
75
76
static
int
map_absent_write(
struct
mtd_info
*mtd, loff_t to,
size_t
len,
size_t
*retlen,
const
u_char
*
buf
)
77
{
78
return
-
ENODEV
;
79
}
80
81
static
int
map_absent_erase(
struct
mtd_info
*mtd,
struct
erase_info
*
instr
)
82
{
83
return
-
ENODEV
;
84
}
85
86
static
void
map_absent_sync(
struct
mtd_info
*mtd)
87
{
88
/* nop */
89
}
90
91
static
void
map_absent_destroy(
struct
mtd_info
*mtd)
92
{
93
/* nop */
94
}
95
96
static
int
__init
map_absent_init(
void
)
97
{
98
register_mtd_chip_driver
(&map_absent_chipdrv);
99
return
0;
100
}
101
102
static
void
__exit
map_absent_exit(
void
)
103
{
104
unregister_mtd_chip_driver
(&map_absent_chipdrv);
105
}
106
107
module_init
(map_absent_init);
108
module_exit
(map_absent_exit);
109
110
MODULE_LICENSE
(
"GPL"
);
111
MODULE_AUTHOR
(
"Resilience Corporation - Eric Brower <
[email protected]
>"
);
112
MODULE_DESCRIPTION
(
"Placeholder MTD chip driver for 'absent' chips"
);
Generated on Thu Jan 10 2013 13:56:14 for Linux Kernel by
1.8.2