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
00ed5b65
Commit
00ed5b65
authored
Aug 30, 2002
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] PCI: alpha pci_ops changes
pci_ops update for most of the alpha ports.
parent
df5dbe8e
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
184 additions
and
380 deletions
+184
-380
arch/alpha/kernel/core_apecs.c
arch/alpha/kernel/core_apecs.c
+40
-62
arch/alpha/kernel/core_cia.c
arch/alpha/kernel/core_cia.c
+41
-60
arch/alpha/kernel/core_irongate.c
arch/alpha/kernel/core_irongate.c
+11
-70
arch/alpha/kernel/core_lca.c
arch/alpha/kernel/core_lca.c
+41
-59
arch/alpha/kernel/core_polaris.c
arch/alpha/kernel/core_polaris.c
+11
-68
arch/alpha/kernel/core_t2.c
arch/alpha/kernel/core_t2.c
+40
-61
No files found.
arch/alpha/kernel/core_apecs.c
View file @
00ed5b65
...
...
@@ -90,12 +90,11 @@
*/
static
int
mk_conf_addr
(
struct
pci_
dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
mk_conf_addr
(
struct
pci_
bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
{
unsigned
long
addr
;
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
DBGC
((
"mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x,"
" pci_addr=0x%p, type1=0x%p)
\n
"
,
...
...
@@ -273,87 +272,66 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
}
static
int
apecs_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
apecs_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u8
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
long
mask
;
int
shift
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x00
+
APECS_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
apecs_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x08
+
APECS_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
apecs_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x18
+
APECS_CONF
;
*
value
=
conf_read
(
addr
,
type1
);
switch
(
size
)
{
case
1
:
mask
=
0x00
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
2
:
mask
=
0x08
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
4
:
mask
=
0x18
;
shift
=
0
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
APECS_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
(
shift
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
apecs_write_config
(
struct
pci_
dev
*
dev
,
int
where
,
u32
value
,
long
mask
)
apecs_write_config
(
struct
pci_
bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
long
mask
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
mask
=
0x00
;
break
;
case
2
:
mask
=
0x08
;
break
;
case
4
:
mask
=
0x18
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
APECS_CONF
;
conf_write
(
addr
,
value
<<
((
where
&
3
)
*
8
),
type1
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
apecs_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
return
apecs_write_config
(
dev
,
where
,
value
,
0x00
);
}
static
int
apecs_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
return
apecs_write_config
(
dev
,
where
,
value
,
0x08
);
}
static
int
apecs_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
apecs_write_config
(
dev
,
where
,
value
,
0x18
);
}
struct
pci_ops
apecs_pci_ops
=
{
read_byte:
apecs_read_config_byte
,
read_word:
apecs_read_config_word
,
read_dword:
apecs_read_config_dword
,
write_byte:
apecs_write_config_byte
,
write_word:
apecs_write_config_word
,
write_dword:
apecs_write_config_dword
.
read
=
apecs_read_config
,
.
write
=
apecs_write_config
,
};
void
...
...
arch/alpha/kernel/core_cia.c
View file @
00ed5b65
...
...
@@ -89,11 +89,10 @@
*/
static
int
mk_conf_addr
(
struct
pci_
dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
mk_conf_addr
(
struct
pci_
bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
{
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
*
type1
=
(
bus
!=
0
);
*
pci_addr
=
(
bus
<<
16
)
|
(
device_fn
<<
8
)
|
where
;
...
...
@@ -209,87 +208,69 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
}
static
int
cia_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
cia_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
long
mask
;
unsigned
char
type1
;
int
shift
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x00
+
CIA_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
cia_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x08
+
CIA_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
cia_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
mask
=
0x00
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
2
:
mask
=
0x08
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
4
:
mase
=
0x18
;
shift
=
0
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
0x18
+
CIA_CONF
;
*
value
=
conf_read
(
addr
,
type1
);
*
value
=
conf_read
(
addr
,
type1
)
>>
(
shift
)
;
return
PCIBIOS_SUCCESSFUL
;
}
static
int
cia_write_config
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
,
long
mask
)
cia_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
addr
,
pci_addr
;
long
mask
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
mask
=
0x00
;
break
;
case
2
:
mask
=
0x08
;
break
;
case
4
:
mase
=
0x18
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
CIA_CONF
;
conf_write
(
addr
,
value
<<
((
where
&
3
)
*
8
),
type1
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
cia_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
return
cia_write_config
(
dev
,
where
,
value
,
0x00
);
}
static
int
cia_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
return
cia_write_config
(
dev
,
where
,
value
,
0x08
);
}
static
int
cia_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
cia_write_config
(
dev
,
where
,
value
,
0x18
);
}
struct
pci_ops
cia_pci_ops
=
{
read_byte:
cia_read_config_byte
,
read_word:
cia_read_config_word
,
read_dword:
cia_read_config_dword
,
write_byte:
cia_write_config_byte
,
write_word:
cia_write_config_word
,
write_dword:
cia_write_config_dword
.
read
=
cia_read_config
,
.
write
=
cia_write_config
,
};
/*
...
...
arch/alpha/kernel/core_irongate.c
View file @
00ed5b65
...
...
@@ -83,12 +83,11 @@
*/
static
int
mk_conf_addr
(
struct
pci_
dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
mk_conf_addr
(
struct
pci_
bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
{
unsigned
long
addr
;
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
DBG_CFG
((
"mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x, "
"pci_addr=0x%p, type1=0x%p)
\n
"
,
...
...
@@ -105,12 +104,13 @@ mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr,
}
static
int
irongate_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
irongate_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
__kernel_ldbu
(
*
(
vucp
)
addr
);
...
...
@@ -118,38 +118,13 @@ irongate_read_config_byte(struct pci_dev *dev, int where, u8 *value)
}
static
int
irongate_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
irongate_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
__kernel_ldwu
(
*
(
vusp
)
addr
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
irongate_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
*
(
vuip
)
addr
;
return
PCIBIOS_SUCCESSFUL
;
}
static
int
irongate_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
__kernel_stb
(
value
,
*
(
vucp
)
addr
);
...
...
@@ -158,45 +133,11 @@ irongate_write_config_byte(struct pci_dev *dev, int where, u8 value)
return
PCIBIOS_SUCCESSFUL
;
}
static
int
irongate_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
__kernel_stw
(
value
,
*
(
vusp
)
addr
);
mb
();
__kernel_ldwu
(
*
(
vusp
)
addr
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
irongate_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
unsigned
long
addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
(
vuip
)
addr
=
value
;
mb
();
*
(
vuip
)
addr
;
return
PCIBIOS_SUCCESSFUL
;
}
struct
pci_ops
irongate_pci_ops
=
{
read_byte:
irongate_read_config_byte
,
read_word:
irongate_read_config_word
,
read_dword:
irongate_read_config_dword
,
write_byte:
irongate_write_config_byte
,
write_word:
irongate_write_config_word
,
write_dword:
irongate_write_config_dword
.
read
=
irongate_read_config
,
.
write
=
irongate_write_config
,
};
#ifdef DEBUG_IRONGATE
...
...
arch/alpha/kernel/core_lca.c
View file @
00ed5b65
...
...
@@ -99,11 +99,11 @@
*/
static
int
mk_conf_addr
(
struct
pci_dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
)
mk_conf_addr
(
struct
pci_bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
)
{
unsigned
long
addr
;
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
if
(
bus
==
0
)
{
int
device
=
device_fn
>>
3
;
...
...
@@ -199,83 +199,65 @@ conf_write(unsigned long addr, unsigned int value)
}
static
int
lca_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
lca_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
long
mask
;
int
shift
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
))
if
(
mk_conf_addr
(
bus
,
devfn
,
dev
,
where
,
&
pci_addr
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x00
+
LCA_CONF
;
*
value
=
conf_read
(
addr
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
lca_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
unsigned
long
addr
,
pci_addr
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x08
+
LCA_CONF
;
*
value
=
conf_read
(
addr
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
lca_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x18
+
LCA_CONF
;
*
value
=
conf_read
(
addr
);
switch
(
size
)
{
case
1
:
shift
=
(
where
&
3
)
*
8
;
mask
=
0x00
;
break
;
case
2
:
shift
=
(
where
&
3
)
*
8
;
mask
=
0x08
break
;
case
4
:
shift
=
0
;
mask
=
0x18
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
LCA_CONF
;
*
value
=
conf_read
(
addr
)
>>
(
shift
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
lca_write_config
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
,
long
mask
)
lca_write_config
(
struct
pci_bus
*
dev
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
addr
,
pci_addr
;
long
mask
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
mask
=
0x00
;
break
;
case
2
:
mask
=
0x08
break
;
case
4
:
mask
=
0x18
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
LCA_CONF
;
conf_write
(
addr
,
value
<<
((
where
&
3
)
*
8
));
return
PCIBIOS_SUCCESSFUL
;
}
static
int
lca_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
return
lca_write_config
(
dev
,
where
,
value
,
0x00
);
}
static
int
lca_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
return
lca_write_config
(
dev
,
where
,
value
,
0x08
);
}
static
int
lca_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
lca_write_config
(
dev
,
where
,
value
,
0x18
);
}
struct
pci_ops
lca_pci_ops
=
{
read_byte:
lca_read_config_byte
,
read_word:
lca_read_config_word
,
read_dword:
lca_read_config_dword
,
write_byte:
lca_write_config_byte
,
write_word:
lca_write_config_word
,
write_dword:
lca_write_config_dword
.
read
=
lca_read_config
,
.
write
=
lca_write_config
,
};
void
...
...
arch/alpha/kernel/core_polaris.c
View file @
00ed5b65
...
...
@@ -65,10 +65,10 @@
*/
static
int
mk_conf_addr
(
struct
pci_dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
,
u8
*
type1
)
mk_conf_addr
(
struct
pci_bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
,
u8
*
type1
)
{
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
*
type1
=
(
bus
==
0
)
?
0
:
1
;
*
pci_addr
=
(
bus
<<
16
)
|
(
device_fn
<<
8
)
|
(
where
)
|
...
...
@@ -82,51 +82,28 @@ mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr, u8 *type1)
}
static
int
polaris_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
polaris_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
__kernel_ldbu
(
*
(
vucp
)
pci_addr
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
polaris_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
__kernel_ldwu
(
*
(
vusp
)
pci_addr
);
return
PCIBIOS_SUCCESSFUL
;
}
int
polaris_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
value
=
*
(
vuip
)
pci_addr
;
return
PCIBIOS_SUCCESSFUL
;
}
static
int
polaris_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
polaris_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
__kernel_stb
(
value
,
*
(
vucp
)
pci_addr
);
...
...
@@ -135,44 +112,10 @@ polaris_write_config_byte(struct pci_dev *dev, int where, u8 value)
return
PCIBIOS_SUCCESSFUL
;
}
static
int
polaris_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
__kernel_stw
(
value
,
*
(
vusp
)
pci_addr
);
mb
();
__kernel_ldwu
(
*
(
vusp
)
pci_addr
);
return
PCIBIOS_SUCCESSFUL
;
}
int
polaris_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
unsigned
long
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
*
(
vuip
)
pci_addr
=
value
;
mb
();
*
(
vuip
)
pci_addr
;
return
PCIBIOS_SUCCESSFUL
;
}
struct
pci_ops
polaris_pci_ops
=
{
read_byte:
polaris_read_config_byte
,
read_word:
polaris_read_config_word
,
read_dword:
polaris_read_config_dword
,
write_byte:
polaris_write_config_byte
,
write_word:
polaris_write_config_word
,
write_dword:
polaris_write_config_dword
.
read
=
polaris_read_config
,
.
write
=
polaris_write_config
,
};
void
__init
...
...
arch/alpha/kernel/core_t2.c
View file @
00ed5b65
...
...
@@ -89,12 +89,11 @@
*/
static
int
mk_conf_addr
(
struct
pci_
dev
*
dev
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
mk_conf_addr
(
struct
pci_
bus
*
bus_dev
,
unsigned
int
device_fn
,
int
where
,
unsigned
long
*
pci_addr
,
unsigned
char
*
type1
)
{
unsigned
long
addr
;
u8
bus
=
dev
->
bus
->
number
;
u8
device_fn
=
dev
->
devfn
;
u8
bus
=
bus_dev
->
number
;
DBG
((
"mk_conf_addr(bus=%d, dfn=0x%x, where=0x%x,"
" addr=0x%lx, type1=0x%x)
\n
"
,
...
...
@@ -238,87 +237,67 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1)
}
static
int
t2_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
t2_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
int
shift
;
long
mask
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x00
+
T2_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
t2_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x08
+
T2_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
((
where
&
3
)
*
8
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
t2_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
if
(
mk_conf_addr
(
bus
,
devfn
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
addr
=
(
pci_addr
<<
5
)
+
0x18
+
T2_CONF
;
*
value
=
conf_read
(
addr
,
type1
);
switch
(
size
)
{
case
1
:
mask
=
0x00
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
2
:
mask
=
0x08
;
shift
=
(
where
&
3
)
*
8
;
break
;
case
4
:
mask
=
0x18
;
shift
=
0
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
T2_CONF
;
*
value
=
conf_read
(
addr
,
type1
)
>>
(
shift
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
t2_write_config
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
,
long
mask
)
t2_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
unsigned
long
addr
,
pci_addr
;
unsigned
char
type1
;
long
mask
;
if
(
mk_conf_addr
(
dev
,
where
,
&
pci_addr
,
&
type1
))
return
PCIBIOS_DEVICE_NOT_FOUND
;
switch
(
size
)
{
case
1
:
mask
=
0x00
;
break
;
case
2
:
mask
=
0x08
;
break
;
case
4
:
mask
=
0x18
;
break
;
}
addr
=
(
pci_addr
<<
5
)
+
mask
+
T2_CONF
;
conf_write
(
addr
,
value
<<
((
where
&
3
)
*
8
),
type1
);
return
PCIBIOS_SUCCESSFUL
;
}
static
int
t2_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
return
t2_write_config
(
dev
,
where
,
value
,
0x00
);
}
static
int
t2_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
return
t2_write_config
(
dev
,
where
,
value
,
0x08
);
}
static
int
t2_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
t2_write_config
(
dev
,
where
,
value
,
0x18
);
}
struct
pci_ops
t2_pci_ops
=
{
read_byte:
t2_read_config_byte
,
read_word:
t2_read_config_word
,
read_dword:
t2_read_config_dword
,
write_byte:
t2_write_config_byte
,
write_word:
t2_write_config_word
,
write_dword:
t2_write_config_dword
.
read
=
t2_read_config
,
.
write
=
t2_write_config
,
};
void
__init
...
...
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