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
Kirill Smelkov
linux
Commits
df5dbe8e
Commit
df5dbe8e
authored
Aug 30, 2002
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] PCI: x86-64 pci_ops changes
x86-64 pci changes
parent
91373042
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
132 deletions
+33
-132
arch/x86_64/pci/direct.c
arch/x86_64/pci/direct.c
+33
-132
No files found.
arch/x86_64/pci/direct.c
View file @
df5dbe8e
...
...
@@ -13,7 +13,7 @@
#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \
(0x80000000 | (bus << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
static
int
pci_conf1_read
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
*
value
)
static
int
__
pci_conf1_read
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
*
value
)
{
unsigned
long
flags
;
...
...
@@ -41,7 +41,7 @@ static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len,
return
0
;
}
static
int
pci_conf1_write
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
value
)
static
int
__
pci_conf1_write
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
value
)
{
unsigned
long
flags
;
...
...
@@ -69,75 +69,23 @@ static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len,
return
0
;
}
#undef PCI_CONF1_ADDRESS
static
int
pci_conf1_read
_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
static
int
pci_conf1_read
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
int
result
;
u32
data
;
if
(
!
value
)
return
-
EINVAL
;
result
=
pci_conf1_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
1
,
&
data
);
*
value
=
(
u8
)
data
;
return
result
;
return
__pci_conf1_read
(
0
,
bus
->
number
,
PCI_SLOT
(
devfn
),
PCI_FUNC
(
devfn
),
where
,
size
,
value
);
}
static
int
pci_conf1_
read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
static
int
pci_conf1_
write
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
int
result
;
u32
data
;
if
(
!
value
)
return
-
EINVAL
;
result
=
pci_conf1_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
2
,
&
data
);
*
value
=
(
u16
)
data
;
return
result
;
}
static
int
pci_conf1_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
if
(
!
value
)
return
-
EINVAL
;
return
pci_conf1_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
4
,
value
);
}
static
int
pci_conf1_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
{
return
pci_conf1_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
1
,
value
);
}
static
int
pci_conf1_write_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
{
return
pci_conf1_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
2
,
value
);
}
static
int
pci_conf1_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
pci_conf1_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
4
,
value
);
return
__pci_conf1_write
(
0
,
bus
->
number
,
PCI_SLOT
(
devfn
),
PCI_FUNC
(
devfn
),
where
,
size
,
value
);
}
static
struct
pci_ops
pci_direct_conf1
=
{
pci_conf1_read_config_byte
,
pci_conf1_read_config_word
,
pci_conf1_read_config_dword
,
pci_conf1_write_config_byte
,
pci_conf1_write_config_word
,
pci_conf1_write_config_dword
.
read
=
pci_conf1_read
,
.
write
=
pci_conf1_write
,
};
...
...
@@ -147,7 +95,7 @@ static struct pci_ops pci_direct_conf1 = {
#define PCI_CONF2_ADDRESS(dev, reg) (u16)(0xC000 | (dev << 8) | reg)
static
int
pci_conf2_read
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
*
value
)
static
int
__
pci_conf2_read
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
*
value
)
{
unsigned
long
flags
;
...
...
@@ -181,7 +129,7 @@ static int pci_conf2_read (int seg, int bus, int dev, int fn, int reg, int len,
return
0
;
}
static
int
pci_conf2_write
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
value
)
static
int
__
pci_conf2_write
(
int
seg
,
int
bus
,
int
dev
,
int
fn
,
int
reg
,
int
len
,
u32
value
)
{
unsigned
long
flags
;
...
...
@@ -217,57 +165,21 @@ static int pci_conf2_write (int seg, int bus, int dev, int fn, int reg, int len,
#undef PCI_CONF2_ADDRESS
static
int
pci_conf2_read_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
*
value
)
{
int
result
;
u32
data
;
result
=
pci_conf2_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
1
,
&
data
);
*
value
=
(
u8
)
data
;
return
result
;
}
static
int
pci_conf2_read_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
*
value
)
{
int
result
;
u32
data
;
result
=
pci_conf2_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
2
,
&
data
);
*
value
=
(
u16
)
data
;
return
result
;
}
static
int
pci_conf2_read_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
*
value
)
{
return
pci_conf2_read
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
4
,
value
);
}
static
int
pci_conf2_write_config_byte
(
struct
pci_dev
*
dev
,
int
where
,
u8
value
)
static
int
pci_conf2_read
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
value
)
{
return
pci_conf2_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
1
,
value
);
return
__pci_conf2_read
(
0
,
bus
->
number
,
PCI_SLOT
(
devfn
),
PCI_FUNC
(
dev
fn
),
where
,
size
,
value
);
}
static
int
pci_conf2_write
_config_word
(
struct
pci_dev
*
dev
,
int
where
,
u16
value
)
static
int
pci_conf2_write
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
{
return
pci_conf2_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
2
,
value
);
}
static
int
pci_conf2_write_config_dword
(
struct
pci_dev
*
dev
,
int
where
,
u32
value
)
{
return
pci_conf2_write
(
0
,
dev
->
bus
->
number
,
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
),
where
,
4
,
value
);
return
__pci_conf2_write
(
0
,
bus
->
number
,
PCI_SLOT
(
devfn
),
PCI_FUNC
(
devfn
),
where
,
size
,
value
);
}
static
struct
pci_ops
pci_direct_conf2
=
{
pci_conf2_read_config_byte
,
pci_conf2_read_config_word
,
pci_conf2_read_config_dword
,
pci_conf2_write_config_byte
,
pci_conf2_write_config_word
,
pci_conf2_write_config_dword
.
read
=
pci_conf2_read
,
.
write
=
pci_conf2_write
,
};
...
...
@@ -283,7 +195,7 @@ static struct pci_ops pci_direct_conf2 = {
*/
static
int
__devinit
pci_sanity_check
(
struct
pci_ops
*
o
)
{
u
16
x
;
u
32
x
=
0
;
struct
pci_bus
bus
;
/* Fake bus and device */
struct
pci_dev
dev
;
...
...
@@ -292,16 +204,16 @@ static int __devinit pci_sanity_check(struct pci_ops *o)
bus
.
number
=
0
;
dev
.
bus
=
&
bus
;
for
(
dev
.
devfn
=
0
;
dev
.
devfn
<
0x100
;
dev
.
devfn
++
)
if
((
!
o
->
read
_word
(
&
dev
,
PCI_CLASS_DEVICE
,
&
x
)
&&
if
((
!
o
->
read
(
&
bus
,
dev
.
devfn
,
PCI_CLASS_DEVICE
,
2
,
&
x
)
&&
(
x
==
PCI_CLASS_BRIDGE_HOST
||
x
==
PCI_CLASS_DISPLAY_VGA
))
||
(
!
o
->
read
_word
(
&
dev
,
PCI_VENDOR_ID
,
&
x
)
&&
(
!
o
->
read
(
&
bus
,
dev
.
devfn
,
PCI_VENDOR_ID
,
2
,
&
x
)
&&
(
x
==
PCI_VENDOR_ID_INTEL
||
x
==
PCI_VENDOR_ID_COMPAQ
)))
return
1
;
DBG
(
"PCI: Sanity check failed
\n
"
);
return
0
;
}
static
struct
pci_ops
*
__devinit
pci_check_direc
t
(
void
)
static
int
__init
pci_direct_ini
t
(
void
)
{
unsigned
int
tmp
;
unsigned
long
flags
;
...
...
@@ -321,8 +233,10 @@ static struct pci_ops * __devinit pci_check_direct(void)
local_irq_restore
(
flags
);
printk
(
KERN_INFO
"PCI: Using configuration type 1
\n
"
);
if
(
!
request_region
(
0xCF8
,
8
,
"PCI conf1"
))
return
NULL
;
return
&
pci_direct_conf1
;
pci_root_ops
=
NULL
;
else
pci_root_ops
=
&
pci_direct_conf1
;
return
0
;
}
outl
(
tmp
,
0xCF8
);
}
...
...
@@ -339,28 +253,15 @@ static struct pci_ops * __devinit pci_check_direct(void)
local_irq_restore
(
flags
);
printk
(
KERN_INFO
"PCI: Using configuration type 2
\n
"
);
if
(
!
request_region
(
0xCF8
,
4
,
"PCI conf2"
))
return
NULL
;
return
&
pci_direct_conf2
;
pci_root_ops
=
NULL
;
else
pci_root_ops
=
&
pci_direct_conf2
;
return
0
;
}
}
local_irq_restore
(
flags
);
return
NULL
;
}
static
int
__init
pci_direct_init
(
void
)
{
if
((
pci_probe
&
(
PCI_PROBE_CONF1
|
PCI_PROBE_CONF2
))
&&
(
pci_root_ops
=
pci_check_direct
()))
{
if
(
pci_root_ops
==
&
pci_direct_conf1
)
{
pci_config_read
=
pci_conf1_read
;
pci_config_write
=
pci_conf1_write
;
}
else
{
pci_config_read
=
pci_conf2_read
;
pci_config_write
=
pci_conf2_write
;
}
}
pci_root_ops
=
NULL
;
return
0
;
}
...
...
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