Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
03b16b95
Commit
03b16b95
authored
Nov 14, 2004
by
Russell King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM] rapide: use MMIO for IDE registers.
parent
f0da1f2c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
72 additions
and
13 deletions
+72
-13
drivers/ide/arm/rapide.c
drivers/ide/arm/rapide.c
+72
-13
No files found.
drivers/ide/arm/rapide.c
View file @
03b16b95
...
...
@@ -13,32 +13,91 @@
#include <asm/ecard.h>
static
int
__devinit
rapide_probe
(
struct
expansion_card
*
ec
,
const
struct
ecard_id
*
id
)
/*
* Something like this really should be in generic code, but isn't.
*/
static
ide_hwif_t
*
rapide_locate_hwif
(
void
__iomem
*
base
,
void
*
ctrl
,
unsigned
int
sz
,
int
irq
)
{
unsigned
long
port
=
ecard_address
(
ec
,
ECARD_MEMC
,
0
);
hw_regs_t
hw
;
int
i
,
ret
;
unsigned
long
port
=
(
unsigned
long
)
base
;
ide_hwif_t
*
hwif
;
int
index
,
i
;
for
(
index
=
0
;
index
<
MAX_HWIFS
;
++
index
)
{
hwif
=
ide_hwifs
+
index
;
if
(
hwif
->
io_ports
[
IDE_DATA_OFFSET
]
==
port
)
goto
found
;
}
for
(
index
=
0
;
index
<
MAX_HWIFS
;
++
index
)
{
hwif
=
ide_hwifs
+
index
;
if
(
hwif
->
io_ports
[
IDE_DATA_OFFSET
]
==
0
)
goto
found
;
}
memset
(
&
hw
,
0
,
sizeof
(
hw
))
;
return
NULL
;
found:
for
(
i
=
IDE_DATA_OFFSET
;
i
<=
IDE_STATUS_OFFSET
;
i
++
)
{
hw
.
io_ports
[
i
]
=
port
;
port
+=
1
<<
4
;
hwif
->
hw
.
io_ports
[
i
]
=
port
;
hwif
->
io_ports
[
i
]
=
port
;
port
+=
sz
;
}
hw
.
io_ports
[
IDE_CONTROL_OFFSET
]
=
port
+
0x206
;
hw
.
irq
=
ec
->
irq
;
hwif
->
hw
.
io_ports
[
IDE_CONTROL_OFFSET
]
=
(
unsigned
long
)
ctrl
;
hwif
->
io_ports
[
IDE_CONTROL_OFFSET
]
=
(
unsigned
long
)
ctrl
;
hwif
->
hw
.
irq
=
hwif
->
irq
=
irq
;
hwif
->
mmio
=
2
;
default_hwif_mmiops
(
hwif
);
return
hwif
;
}
ret
=
ide_register_hw
(
&
hw
,
NULL
);
static
int
__devinit
rapide_probe
(
struct
expansion_card
*
ec
,
const
struct
ecard_id
*
id
)
{
ide_hwif_t
*
hwif
;
void
__iomem
*
base
;
int
ret
;
ret
=
ecard_request_resources
(
ec
);
if
(
ret
)
ecard_release
(
ec
);
goto
out
;
base
=
ioremap
(
ecard_resource_start
(
ec
,
ECARD_RES_MEMC
),
ecard_resource_len
(
ec
,
ECARD_RES_MEMC
));
if
(
!
base
)
{
ret
=
-
ENOMEM
;
goto
release
;
}
hwif
=
rapide_locate_hwif
(
base
,
base
+
0x818
,
1
<<
6
,
ec
->
irq
);
if
(
hwif
)
{
hwif
->
hwif_data
=
base
;
hwif
->
gendev
.
parent
=
&
ec
->
dev
;
hwif
->
noprobe
=
0
;
probe_hwif_init
(
hwif
);
create_proc_ide_interfaces
();
ecard_set_drvdata
(
ec
,
hwif
);
goto
out
;
}
iounmap
(
base
);
release:
ecard_release_resources
(
ec
);
out:
return
ret
;
}
static
void
__devexit
rapide_remove
(
struct
expansion_card
*
ec
)
{
/* need to do more */
ide_hwif_t
*
hwif
=
ecard_get_drvdata
(
ec
);
ecard_set_drvdata
(
ec
,
NULL
);
/* there must be a better way */
ide_unregister
(
hwif
-
ide_hwifs
);
iounmap
(
hwif
->
hwif_data
);
ecard_release_resources
(
ec
);
}
static
struct
ecard_id
rapide_ids
[]
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment