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
mips
dec
tc.c
Go to the documentation of this file.
1
/*
2
* TURBOchannel architecture calls.
3
*
4
* Copyright (c) Harald Koerfgen, 1998
5
* Copyright (c) 2001, 2003, 2005, 2006 Maciej W. Rozycki
6
* Copyright (c) 2005 James Simmons
7
*
8
* This file is subject to the terms and conditions of the GNU
9
* General Public License. See the file "COPYING" in the main
10
* directory of this archive for more details.
11
*/
12
#include <linux/compiler.h>
13
#include <linux/errno.h>
14
#include <
linux/init.h
>
15
#include <linux/string.h>
16
#include <
linux/tc.h
>
17
#include <linux/types.h>
18
19
#include <asm/addrspace.h>
20
#include <asm/bootinfo.h>
21
#include <
asm/paccess.h
>
22
23
#include <
asm/dec/interrupts.h
>
24
#include <
asm/dec/prom.h
>
25
#include <
asm/dec/system.h
>
26
27
/*
28
* Protected read byte from TURBOchannel slot space.
29
*/
30
int
tc_preadb
(
u8
*valp,
void
__iomem
*
addr
)
31
{
32
return
get_dbe
(*valp, (
u8
*)addr);
33
}
34
35
/*
36
* Get TURBOchannel bus information as specified by the spec, plus
37
* the slot space base address and the number of slots.
38
*/
39
int
__init
tc_bus_get_info
(
struct
tc_bus
*tbus)
40
{
41
if
(!
dec_tc_bus
)
42
return
-
ENXIO
;
43
44
memcpy
(&tbus->
info
,
rex_gettcinfo
(),
sizeof
(tbus->
info
));
45
tbus->
slot_base
=
CPHYSADDR
((
long
)
rex_slot_address
(0));
46
47
switch
(
mips_machtype
) {
48
case
MACH_DS5000_200
:
49
tbus->
num_tcslots
= 7;
50
break
;
51
case
MACH_DS5000_2X0
:
52
case
MACH_DS5900
:
53
tbus->
ext_slot_base
= 0x20000000;
54
tbus->
ext_slot_size
= 0x20000000;
55
/* fall through */
56
case
MACH_DS5000_1XX
:
57
tbus->
num_tcslots
= 3;
58
break
;
59
case
MACH_DS5000_XX
:
60
tbus->
num_tcslots
= 2;
61
default
:
62
break
;
63
}
64
return
0;
65
}
66
67
/*
68
* Get the IRQ for the specified slot.
69
*/
70
void
__init
tc_device_get_irq
(
struct
tc_dev
*tdev)
71
{
72
switch
(tdev->
slot
) {
73
case
0:
74
tdev->
interrupt
=
dec_interrupt
[
DEC_IRQ_TC0
];
75
break
;
76
case
1:
77
tdev->
interrupt
=
dec_interrupt
[
DEC_IRQ_TC1
];
78
break
;
79
case
2:
80
tdev->
interrupt
=
dec_interrupt
[
DEC_IRQ_TC2
];
81
break
;
82
/*
83
* Yuck! DS5000/200 onboard devices
84
*/
85
case
5:
86
tdev->
interrupt
=
dec_interrupt
[
DEC_IRQ_TC5
];
87
break
;
88
case
6:
89
tdev->
interrupt
=
dec_interrupt
[
DEC_IRQ_TC6
];
90
break
;
91
default
:
92
tdev->
interrupt
= -1;
93
break
;
94
}
95
}
Generated on Thu Jan 10 2013 13:09:15 for Linux Kernel by
1.8.2