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
ide
rapide.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1996-2002 Russell King.
3
*/
4
5
#include <linux/module.h>
6
#include <
linux/blkdev.h
>
7
#include <linux/errno.h>
8
#include <
linux/ide.h
>
9
#include <
linux/init.h
>
10
11
#include <
asm/ecard.h
>
12
13
static
const
struct
ide_port_info
rapide_port_info = {
14
.host_flags =
IDE_HFLAG_MMIO
|
IDE_HFLAG_NO_DMA
,
15
.chipset =
ide_generic
,
16
};
17
18
static
void
rapide_setup_ports(
struct
ide_hw
*
hw
,
void
__iomem
*base,
19
void
__iomem
*
ctrl
,
unsigned
int
sz,
int
irq)
20
{
21
unsigned
long
port
= (
unsigned
long
)base;
22
int
i
;
23
24
for
(i = 0; i <= 7; i++) {
25
hw->
io_ports_array
[
i
] =
port
;
26
port += sz;
27
}
28
hw->
io_ports
.ctl_addr = (
unsigned
long
)ctrl;
29
hw->
irq
= irq;
30
}
31
32
static
int
__devinit
33
rapide_probe(
struct
expansion_card
*ec,
const
struct
ecard_id
*
id
)
34
{
35
void
__iomem
*base;
36
struct
ide_host
*
host
;
37
int
ret
;
38
struct
ide_hw
hw, *hws[] = { &hw };
39
40
ret =
ecard_request_resources
(ec);
41
if
(ret)
42
goto
out
;
43
44
base =
ecardm_iomap
(ec,
ECARD_RES_MEMC
, 0, 0);
45
if
(!base) {
46
ret = -
ENOMEM
;
47
goto
release
;
48
}
49
50
memset
(&hw, 0,
sizeof
(hw));
51
rapide_setup_ports(&hw, base, base + 0x818, 1 << 6, ec->
irq
);
52
hw.
dev
= &ec->
dev
;
53
54
ret =
ide_host_add
(&rapide_port_info, hws, 1, &host);
55
if
(ret)
56
goto
release
;
57
58
ecard_set_drvdata
(ec, host);
59
goto
out
;
60
61
release
:
62
ecard_release_resources
(ec);
63
out
:
64
return
ret
;
65
}
66
67
static
void
__devexit
rapide_remove(
struct
expansion_card
*ec)
68
{
69
struct
ide_host
*host =
ecard_get_drvdata
(ec);
70
71
ecard_set_drvdata
(ec,
NULL
);
72
73
ide_host_remove
(host);
74
75
ecard_release_resources
(ec);
76
}
77
78
static
struct
ecard_id
rapide_ids[] = {
79
{
MANU_YELLOWSTONE
,
PROD_YELLOWSTONE_RAPIDE32
},
80
{ 0xffff, 0xffff }
81
};
82
83
static
struct
ecard_driver
rapide_driver = {
84
.probe = rapide_probe,
85
.remove =
__devexit_p
(rapide_remove),
86
.id_table = rapide_ids,
87
.drv = {
88
.name =
"rapide"
,
89
},
90
};
91
92
static
int
__init
rapide_init(
void
)
93
{
94
return
ecard_register_driver
(&rapide_driver);
95
}
96
97
static
void
__exit
rapide_exit(
void
)
98
{
99
ecard_remove_driver
(&rapide_driver);
100
}
101
102
MODULE_LICENSE
(
"GPL"
);
103
MODULE_DESCRIPTION
(
"Yellowstone RAPIDE driver"
);
104
105
module_init
(rapide_init);
106
module_exit
(rapide_exit);
Generated on Thu Jan 10 2013 13:36:26 for Linux Kernel by
1.8.2