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
21f27357
Commit
21f27357
authored
Jul 16, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/gregkh/linux/pci-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
parents
f68f2fa3
8b27afca
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
165 additions
and
180 deletions
+165
-180
arch/i386/pci/legacy.c
arch/i386/pci/legacy.c
+1
-1
drivers/pci/Makefile
drivers/pci/Makefile
+1
-1
drivers/pci/hotplug.c
drivers/pci/hotplug.c
+1
-105
drivers/pci/hotplug/Kconfig
drivers/pci/hotplug/Kconfig
+3
-8
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/acpiphp_glue.c
+2
-2
drivers/pci/hotplug/acpiphp_pci.c
drivers/pci/hotplug/acpiphp_pci.c
+2
-2
drivers/pci/hotplug/cpci_hotplug.h
drivers/pci/hotplug/cpci_hotplug.h
+0
-1
drivers/pci/hotplug/cpci_hotplug_core.c
drivers/pci/hotplug/cpci_hotplug_core.c
+0
-29
drivers/pci/hotplug/cpci_hotplug_pci.c
drivers/pci/hotplug/cpci_hotplug_pci.c
+22
-10
drivers/pci/pci.c
drivers/pci/pci.c
+5
-5
drivers/pci/pool.c
drivers/pci/pool.c
+4
-4
drivers/pci/quirks.c
drivers/pci/quirks.c
+4
-4
drivers/pci/remove.c
drivers/pci/remove.c
+113
-0
drivers/pci/setup-bus.c
drivers/pci/setup-bus.c
+3
-3
drivers/pci/setup-res.c
drivers/pci/setup-res.c
+4
-4
include/linux/pci.h
include/linux/pci.h
+0
-1
No files found.
arch/i386/pci/legacy.c
View file @
21f27357
...
...
@@ -24,7 +24,7 @@ static void __devinit pcibios_fixup_peer_bridges(void)
for
(
devfn
=
0
;
devfn
<
256
;
devfn
+=
8
)
{
if
(
!
raw_pci_ops
->
read
(
0
,
n
,
devfn
,
PCI_VENDOR_ID
,
2
,
&
l
)
&&
l
!=
0x0000
&&
l
!=
0xffff
)
{
DBG
(
"Found device at %02x:%02x [%04x]
\n
"
,
n
,
dev
->
dev
fn
,
l
);
DBG
(
"Found device at %02x:%02x [%04x]
\n
"
,
n
,
devfn
,
l
);
printk
(
KERN_INFO
"PCI: Discovered peer bus %02x
\n
"
,
n
);
pci_scan_bus
(
n
,
&
pci_root_ops
,
NULL
);
break
;
...
...
drivers/pci/Makefile
View file @
21f27357
...
...
@@ -2,7 +2,7 @@
# Makefile for the PCI bus specific drivers.
#
obj-y
+=
access.o bus.o probe.o pci.o pool.o quirks.o
\
obj-y
+=
access.o bus.o probe.o
remove.o
pci.o pool.o quirks.o
\
names.o pci-driver.o search.o pci-sysfs.o
obj-$(CONFIG_PM)
+=
power.o
obj-$(CONFIG_PROC_FS)
+=
proc.o
...
...
drivers/pci/hotplug.c
View file @
21f27357
...
...
@@ -10,8 +10,6 @@
#define DBG(x...)
#endif
static
void
pci_free_resources
(
struct
pci_dev
*
dev
);
int
pci_hotplug
(
struct
device
*
dev
,
char
**
envp
,
int
num_envp
,
char
*
buffer
,
int
buffer_size
)
{
...
...
@@ -57,7 +55,7 @@ int pci_hotplug (struct device *dev, char **envp, int num_envp,
envp
[
i
++
]
=
scratch
;
length
+=
snprintf
(
scratch
,
buffer_size
-
length
,
"PCI_SLOT_NAME=%s"
,
p
dev
->
slot_name
);
p
ci_name
(
pdev
)
);
if
((
buffer_size
-
length
<=
0
)
||
(
i
>=
num_envp
))
return
-
ENOMEM
;
...
...
@@ -172,105 +170,3 @@ int pci_visit_dev (struct pci_visit *fn, struct pci_dev_wrapped *wrapped_dev,
}
EXPORT_SYMBOL
(
pci_visit_dev
);
static
void
pci_destroy_dev
(
struct
pci_dev
*
dev
)
{
pci_proc_detach_device
(
dev
);
device_unregister
(
&
dev
->
dev
);
/* Remove the device from the device lists, and prevent any further
* list accesses from this device */
spin_lock
(
&
pci_bus_lock
);
list_del
(
&
dev
->
bus_list
);
list_del
(
&
dev
->
global_list
);
dev
->
bus_list
.
next
=
dev
->
bus_list
.
prev
=
NULL
;
dev
->
global_list
.
next
=
dev
->
global_list
.
prev
=
NULL
;
spin_unlock
(
&
pci_bus_lock
);
pci_free_resources
(
dev
);
pci_dev_put
(
dev
);
}
/**
* pci_remove_device_safe - remove an unused hotplug device
* @dev: the device to remove
*
* Delete the device structure from the device lists and
* notify userspace (/sbin/hotplug), but only if the device
* in question is not being used by a driver.
* Returns 0 on success.
*/
int
pci_remove_device_safe
(
struct
pci_dev
*
dev
)
{
if
(
pci_dev_driver
(
dev
))
return
-
EBUSY
;
pci_destroy_dev
(
dev
);
return
0
;
}
EXPORT_SYMBOL
(
pci_remove_device_safe
);
static
void
pci_free_resources
(
struct
pci_dev
*
dev
)
{
int
i
;
for
(
i
=
0
;
i
<
PCI_NUM_RESOURCES
;
i
++
)
{
struct
resource
*
res
=
dev
->
resource
+
i
;
if
(
res
->
parent
)
release_resource
(
res
);
}
}
/**
* pci_remove_bus_device - remove a PCI device and any children
* @dev: the device to remove
*
* Remove a PCI device from the device lists, informing the drivers
* that the device has been removed. We also remove any subordinate
* buses and children in a depth-first manner.
*
* For each device we remove, delete the device structure from the
* device lists, remove the /proc entry, and notify userspace
* (/sbin/hotplug).
*/
void
pci_remove_bus_device
(
struct
pci_dev
*
dev
)
{
if
(
dev
->
subordinate
)
{
struct
pci_bus
*
b
=
dev
->
subordinate
;
pci_remove_behind_bridge
(
dev
);
pci_proc_detach_bus
(
b
);
spin_lock
(
&
pci_bus_lock
);
list_del
(
&
b
->
node
);
spin_unlock
(
&
pci_bus_lock
);
kfree
(
b
);
dev
->
subordinate
=
NULL
;
}
pci_destroy_dev
(
dev
);
}
/**
* pci_remove_behind_bridge - remove all devices behind a PCI bridge
* @dev: PCI bridge device
*
* Remove all devices on the bus, except for the parent bridge.
* This also removes any child buses, and any devices they may
* contain in a depth-first manner.
*/
void
pci_remove_behind_bridge
(
struct
pci_dev
*
dev
)
{
struct
list_head
*
l
,
*
n
;
if
(
dev
->
subordinate
)
{
list_for_each_safe
(
l
,
n
,
&
dev
->
subordinate
->
devices
)
{
struct
pci_dev
*
dev
=
pci_dev_b
(
l
);
pci_remove_bus_device
(
dev
);
}
}
}
EXPORT_SYMBOL
(
pci_remove_bus_device
);
EXPORT_SYMBOL
(
pci_remove_behind_bridge
);
drivers/pci/hotplug/Kconfig
View file @
21f27357
...
...
@@ -99,22 +99,17 @@ config HOTPLUG_PCI_ACPI
When in doubt, say N.
config HOTPLUG_PCI_CPCI
tristate
"CompactPCI Hotplug driver"
bool
"CompactPCI Hotplug driver"
depends on HOTPLUG_PCI
help
Say Y here if you have a CompactPCI system card with CompactPCI
hotswap support per the PICMG 2.1 specification.
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called cpci_hotplug. If you want to compile it
as a module, say M here and read <file:Documentation/modules.txt>.
When in doubt, say N.
config HOTPLUG_PCI_CPCI_ZT5550
tristate "Ziatech ZT5550 CompactPCI Hotplug driver"
depends on HOTPLUG_PCI_CPCI && X86
depends on HOTPLUG_PCI
&& HOTPLUG_PCI
_CPCI && X86
help
Say Y here if you have an Performance Technologies (formerly Intel,
formerly just Ziatech) Ziatech ZT5550 CompactPCI system card.
...
...
@@ -128,7 +123,7 @@ config HOTPLUG_PCI_CPCI_ZT5550
config HOTPLUG_PCI_CPCI_GENERIC
tristate "Generic port I/O CompactPCI Hotplug driver"
depends on HOTPLUG_PCI_CPCI && X86
depends on HOTPLUG_PCI
&& HOTPLUG_PCI
_CPCI && X86
help
Say Y here if you have a CompactPCI system card that exposes the #ENUM
hotswap signal as a bit in a system register that can be read through
...
...
drivers/pci/hotplug/acpiphp_glue.c
View file @
21f27357
...
...
@@ -607,7 +607,7 @@ find_p2p_bridge (acpi_handle handle, u32 lvl, void *context, void **rv)
/* check if this bridge has ejectable slots */
if
(
detect_ejectable_slots
(
handle
)
>
0
)
{
dbg
(
"found PCI-to-PCI bridge at PCI %s
\n
"
,
dev
->
slot_name
);
dbg
(
"found PCI-to-PCI bridge at PCI %s
\n
"
,
pci_name
(
dev
)
);
add_p2p_bridge
(
handle
,
seg
,
bus
,
device
,
function
);
}
...
...
@@ -693,7 +693,7 @@ static int power_on_slot (struct acpiphp_slot *slot)
if
(
func
->
flags
&
FUNC_HAS_PS0
)
{
dbg
(
"%s: executing _PS0 on %s
\n
"
,
__FUNCTION__
,
func
->
pci_dev
->
slot_name
);
pci_name
(
func
->
pci_dev
)
);
status
=
acpi_evaluate_object
(
func
->
handle
,
"_PS0"
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
{
warn
(
"%s: _PS0 failed
\n
"
,
__FUNCTION__
);
...
...
drivers/pci/hotplug/acpiphp_pci.c
View file @
21f27357
...
...
@@ -212,7 +212,7 @@ static int detect_used_resource (struct acpiphp_bridge *bridge, struct pci_dev *
int
count
;
struct
pci_resource
*
res
;
dbg
(
"Device %s
\n
"
,
dev
->
slot_name
);
dbg
(
"Device %s
\n
"
,
pci_name
(
dev
)
);
for
(
count
=
0
;
address
[
count
];
count
++
)
{
/* for 6 BARs */
pci_read_config_dword
(
dev
,
address
[
count
],
&
bar
);
...
...
@@ -337,7 +337,7 @@ int acpiphp_init_func_resource (struct acpiphp_func *func)
struct
pci_dev
*
dev
;
dev
=
func
->
pci_dev
;
dbg
(
"Hot-pluggable device %s
\n
"
,
dev
->
slot_name
);
dbg
(
"Hot-pluggable device %s
\n
"
,
pci_name
(
dev
)
);
for
(
count
=
0
;
address
[
count
];
count
++
)
{
/* for 6 BARs */
pci_read_config_dword
(
dev
,
address
[
count
],
&
bar
);
...
...
drivers/pci/hotplug/cpci_hotplug.h
View file @
21f27357
...
...
@@ -75,7 +75,6 @@ extern int cpci_hp_register_controller(struct cpci_hp_controller *controller);
extern
int
cpci_hp_unregister_controller
(
struct
cpci_hp_controller
*
controller
);
extern
int
cpci_hp_register_bus
(
struct
pci_bus
*
bus
,
u8
first
,
u8
last
);
extern
int
cpci_hp_unregister_bus
(
struct
pci_bus
*
bus
);
extern
struct
slot
*
cpci_find_slot
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
);
extern
int
cpci_hp_start
(
void
);
extern
int
cpci_hp_stop
(
void
);
...
...
drivers/pci/hotplug/cpci_hotplug_core.c
View file @
21f27357
...
...
@@ -427,34 +427,6 @@ cpci_hp_unregister_bus(struct pci_bus *bus)
return
0
;
}
struct
slot
*
cpci_find_slot
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
)
{
struct
slot
*
slot
;
struct
slot
*
found
;
struct
list_head
*
tmp
;
if
(
!
bus
)
{
return
NULL
;
}
spin_lock
(
&
list_lock
);
if
(
!
slots
)
{
spin_unlock
(
&
list_lock
);
return
NULL
;
}
found
=
NULL
;
list_for_each
(
tmp
,
&
slot_list
)
{
slot
=
list_entry
(
tmp
,
struct
slot
,
slot_list
);
if
(
slot
->
bus
==
bus
&&
slot
->
devfn
==
devfn
)
{
found
=
slot
;
break
;
}
}
spin_unlock
(
&
list_lock
);
return
found
;
}
/* This is the interrupt mode interrupt handler */
irqreturn_t
cpci_hp_intr
(
int
irq
,
void
*
data
,
struct
pt_regs
*
regs
)
...
...
@@ -924,6 +896,5 @@ EXPORT_SYMBOL_GPL(cpci_hp_register_controller);
EXPORT_SYMBOL_GPL
(
cpci_hp_unregister_controller
);
EXPORT_SYMBOL_GPL
(
cpci_hp_register_bus
);
EXPORT_SYMBOL_GPL
(
cpci_hp_unregister_bus
);
EXPORT_SYMBOL_GPL
(
cpci_find_slot
);
EXPORT_SYMBOL_GPL
(
cpci_hp_start
);
EXPORT_SYMBOL_GPL
(
cpci_hp_stop
);
drivers/pci/hotplug/cpci_hotplug_pci.c
View file @
21f27357
...
...
@@ -448,7 +448,7 @@ static int cpci_configure_bridge(struct pci_bus* bus, struct pci_dev* dev)
}
static
int
configure_visit_pci_dev
(
struct
pci_dev_wrapped
*
wrapped_dev
,
struct
pci_bus_wrapped
*
wrapped_bus
)
struct
pci_bus_wrapped
*
wrapped_bus
)
{
int
rc
;
struct
pci_dev
*
dev
=
wrapped_dev
->
dev
;
...
...
@@ -461,8 +461,8 @@ static int configure_visit_pci_dev(struct pci_dev_wrapped *wrapped_dev,
* We need to fix up the hotplug representation with the Linux
* representation.
*/
slot
=
cpci_find_slot
(
dev
->
bus
,
dev
->
devfn
);
if
(
slot
)
{
if
(
wrapped_dev
->
data
)
{
slot
=
(
struct
slot
*
)
wrapped_dev
->
data
;
slot
->
dev
=
dev
;
}
...
...
@@ -494,9 +494,7 @@ static int unconfigure_visit_pci_dev_phase2(struct pci_dev_wrapped *wrapped_dev,
return
-
ENODEV
;
/* Remove the Linux representation */
if
(
pci_remove_device_safe
(
dev
)
==
0
)
{
kfree
(
dev
);
}
else
{
if
(
pci_remove_device_safe
(
dev
))
{
err
(
"Could not remove device
\n
"
);
return
-
1
;
}
...
...
@@ -504,8 +502,8 @@ static int unconfigure_visit_pci_dev_phase2(struct pci_dev_wrapped *wrapped_dev,
/*
* Now remove the hotplug representation.
*/
slot
=
cpci_find_slot
(
dev
->
bus
,
dev
->
devfn
);
if
(
slot
)
{
if
(
wrapped_dev
->
data
)
{
slot
=
(
struct
slot
*
)
wrapped_dev
->
data
;
slot
->
dev
=
NULL
;
}
else
{
dbg
(
"No hotplug representation for %02x:%02x.%x"
,
...
...
@@ -574,13 +572,18 @@ int cpci_configure_slot(struct slot* slot)
/* Still NULL? Well then scan for it! */
if
(
slot
->
dev
==
NULL
)
{
int
n
;
dbg
(
"pci_dev still null"
);
/*
* This will generate pci_dev structures for all functions, but
* we will only call this case when lookup fails.
*/
slot
->
dev
=
pci_scan_slot
(
slot
->
bus
,
slot
->
devfn
);
n
=
pci_scan_slot
(
slot
->
bus
,
slot
->
devfn
);
dbg
(
"%s: pci_scan_slot returned %d"
,
__FUNCTION__
,
n
);
if
(
n
>
0
)
pci_bus_add_devices
(
slot
->
bus
);
slot
->
dev
=
pci_find_slot
(
slot
->
bus
->
number
,
slot
->
devfn
);
if
(
slot
->
dev
==
NULL
)
{
err
(
"Could not find PCI device for slot %02x"
,
slot
->
number
);
return
0
;
...
...
@@ -603,6 +606,10 @@ int cpci_configure_slot(struct slot* slot)
continue
;
wrapped_dev
.
dev
=
dev
;
wrapped_bus
.
bus
=
slot
->
dev
->
bus
;
if
(
i
)
wrapped_dev
.
data
=
NULL
;
else
wrapped_dev
.
data
=
(
void
*
)
slot
;
rc
=
pci_visit_dev
(
&
configure_functions
,
&
wrapped_dev
,
&
wrapped_bus
);
}
}
...
...
@@ -635,9 +642,14 @@ int cpci_unconfigure_slot(struct slot* slot)
if
(
dev
)
{
wrapped_dev
.
dev
=
dev
;
wrapped_bus
.
bus
=
dev
->
bus
;
if
(
i
)
wrapped_dev
.
data
=
NULL
;
else
wrapped_dev
.
data
=
(
void
*
)
slot
;
dbg
(
"%s - unconfigure phase 2"
,
__FUNCTION__
);
rc
=
pci_visit_dev
(
&
unconfigure_functions_phase2
,
&
wrapped_dev
,
&
wrapped_bus
);
&
wrapped_dev
,
&
wrapped_bus
);
if
(
rc
)
break
;
}
...
...
drivers/pci/pci.c
View file @
21f27357
...
...
@@ -506,7 +506,7 @@ int pci_request_region(struct pci_dev *pdev, int bar, char *res_name)
pci_resource_flags
(
pdev
,
bar
)
&
IORESOURCE_IO
?
"I/O"
:
"mem"
,
bar
+
1
,
/* PCI BAR # */
pci_resource_len
(
pdev
,
bar
),
pci_resource_start
(
pdev
,
bar
),
p
dev
->
slot_name
);
p
ci_name
(
pdev
)
);
return
-
EBUSY
;
}
...
...
@@ -555,7 +555,7 @@ int pci_request_regions(struct pci_dev *pdev, char *res_name)
pci_resource_flags
(
pdev
,
i
)
&
IORESOURCE_IO
?
"I/O"
:
"mem"
,
i
+
1
,
/* PCI BAR # */
pci_resource_len
(
pdev
,
i
),
pci_resource_start
(
pdev
,
i
),
p
dev
->
slot_name
);
p
ci_name
(
pdev
)
);
while
(
--
i
>=
0
)
pci_release_region
(
pdev
,
i
);
...
...
@@ -576,7 +576,7 @@ pci_set_master(struct pci_dev *dev)
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
if
(
!
(
cmd
&
PCI_COMMAND_MASTER
))
{
DBG
(
"PCI: Enabling bus mastering for device %s
\n
"
,
dev
->
slot_name
);
DBG
(
"PCI: Enabling bus mastering for device %s
\n
"
,
pci_name
(
dev
)
);
cmd
|=
PCI_COMMAND_MASTER
;
pci_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
}
...
...
@@ -620,7 +620,7 @@ pci_generic_prep_mwi(struct pci_dev *dev)
return
0
;
printk
(
KERN_WARNING
"PCI: cache line size of %d is not supported "
"by device %s
\n
"
,
pci_cache_line_size
<<
2
,
dev
->
slot_name
);
"by device %s
\n
"
,
pci_cache_line_size
<<
2
,
pci_name
(
dev
)
);
return
-
EINVAL
;
}
...
...
@@ -653,7 +653,7 @@ pci_set_mwi(struct pci_dev *dev)
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
if
(
!
(
cmd
&
PCI_COMMAND_INVALIDATE
))
{
DBG
(
"PCI: Enabling Mem-Wr-Inval for device %s
\n
"
,
dev
->
slot_name
);
DBG
(
"PCI: Enabling Mem-Wr-Inval for device %s
\n
"
,
pci_name
(
dev
)
);
cmd
|=
PCI_COMMAND_INVALIDATE
;
pci_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
}
...
...
drivers/pci/pool.c
View file @
21f27357
...
...
@@ -233,7 +233,7 @@ pci_pool_destroy (struct pci_pool *pool)
struct
pci_page
,
page_list
);
if
(
is_page_busy
(
pool
->
blocks_per_page
,
page
->
bitmap
))
{
printk
(
KERN_ERR
"pci_pool_destroy %s/%s, %p busy
\n
"
,
pool
->
dev
?
p
ool
->
dev
->
slot_name
:
NULL
,
pool
->
dev
?
p
ci_name
(
pool
->
dev
)
:
NULL
,
pool
->
name
,
page
->
vaddr
);
/* leak the still-in-use consistent memory */
list_del
(
&
page
->
page_list
);
...
...
@@ -359,7 +359,7 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
if
((
page
=
pool_find_page
(
pool
,
dma
))
==
0
)
{
printk
(
KERN_ERR
"pci_pool_free %s/%s, %p/%lx (bad dma)
\n
"
,
pool
->
dev
?
p
ool
->
dev
->
slot_name
:
NULL
,
pool
->
dev
?
p
ci_name
(
pool
->
dev
)
:
NULL
,
pool
->
name
,
vaddr
,
(
unsigned
long
)
dma
);
return
;
}
...
...
@@ -372,13 +372,13 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
#ifdef CONFIG_DEBUG_SLAB
if
(((
dma
-
page
->
dma
)
+
(
void
*
)
page
->
vaddr
)
!=
vaddr
)
{
printk
(
KERN_ERR
"pci_pool_free %s/%s, %p (bad vaddr)/%Lx
\n
"
,
pool
->
dev
?
p
ool
->
dev
->
slot_name
:
NULL
,
pool
->
dev
?
p
ci_name
(
pool
->
dev
)
:
NULL
,
pool
->
name
,
vaddr
,
(
unsigned
long
long
)
dma
);
return
;
}
if
(
page
->
bitmap
[
map
]
&
(
1UL
<<
block
))
{
printk
(
KERN_ERR
"pci_pool_free %s/%s, dma %Lx already free
\n
"
,
pool
->
dev
?
p
ool
->
dev
->
slot_name
:
NULL
,
pool
->
dev
?
p
ci_name
(
pool
->
dev
)
:
NULL
,
pool
->
name
,
(
unsigned
long
long
)
dma
);
return
;
}
...
...
drivers/pci/quirks.c
View file @
21f27357
...
...
@@ -33,7 +33,7 @@ static void __devinit quirk_passive_release(struct pci_dev *dev)
while
((
d
=
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82371SB_0
,
d
)))
{
pci_read_config_byte
(
d
,
0x82
,
&
dlc
);
if
(
!
(
dlc
&
1
<<
1
))
{
printk
(
KERN_ERR
"PCI: PIIX3: Enabling Passive Release on %s
\n
"
,
d
->
slot_name
);
printk
(
KERN_ERR
"PCI: PIIX3: Enabling Passive Release on %s
\n
"
,
pci_name
(
d
)
);
dlc
|=
1
<<
1
;
pci_write_config_byte
(
d
,
0x82
,
dlc
);
}
...
...
@@ -437,7 +437,7 @@ static void __devinit quirk_via_irqpic(struct pci_dev *dev)
if
(
new_irq
!=
irq
)
{
printk
(
KERN_INFO
"PCI: Via IRQ fixup for %s, from %d to %d
\n
"
,
dev
->
slot_name
,
irq
,
new_irq
);
pci_name
(
dev
)
,
irq
,
new_irq
);
udelay
(
15
);
pci_write_config_byte
(
dev
,
PCI_INTERRUPT_LINE
,
new_irq
);
...
...
@@ -598,7 +598,7 @@ static void __devinit quirk_ide_bases(struct pci_dev *dev)
return
;
printk
(
KERN_INFO
"PCI: Ignoring BAR%d-%d of IDE controller %s
\n
"
,
first_bar
,
last_bar
,
dev
->
slot_name
);
first_bar
,
last_bar
,
pci_name
(
dev
)
);
}
/*
...
...
@@ -856,7 +856,7 @@ static void pci_do_fixups(struct pci_dev *dev, int pass, struct pci_fixup *f)
(
f
->
vendor
==
dev
->
vendor
||
f
->
vendor
==
(
u16
)
PCI_ANY_ID
)
&&
(
f
->
device
==
dev
->
device
||
f
->
device
==
(
u16
)
PCI_ANY_ID
))
{
#ifdef DEBUG
printk
(
KERN_INFO
"PCI: Calling quirk %p for %s
\n
"
,
f
->
hook
,
dev
->
slot_name
);
printk
(
KERN_INFO
"PCI: Calling quirk %p for %s
\n
"
,
f
->
hook
,
pci_name
(
dev
)
);
#endif
f
->
hook
(
dev
);
}
...
...
drivers/pci/remove.c
0 → 100644
View file @
21f27357
#include <linux/pci.h>
#include <linux/module.h>
#include "pci.h"
#undef DEBUG
#ifdef DEBUG
#define DBG(x...) printk(x)
#else
#define DBG(x...)
#endif
static
void
pci_free_resources
(
struct
pci_dev
*
dev
)
{
int
i
;
for
(
i
=
0
;
i
<
PCI_NUM_RESOURCES
;
i
++
)
{
struct
resource
*
res
=
dev
->
resource
+
i
;
if
(
res
->
parent
)
release_resource
(
res
);
}
}
static
void
pci_destroy_dev
(
struct
pci_dev
*
dev
)
{
pci_proc_detach_device
(
dev
);
device_unregister
(
&
dev
->
dev
);
/* Remove the device from the device lists, and prevent any further
* list accesses from this device */
spin_lock
(
&
pci_bus_lock
);
list_del
(
&
dev
->
bus_list
);
list_del
(
&
dev
->
global_list
);
dev
->
bus_list
.
next
=
dev
->
bus_list
.
prev
=
NULL
;
dev
->
global_list
.
next
=
dev
->
global_list
.
prev
=
NULL
;
spin_unlock
(
&
pci_bus_lock
);
pci_free_resources
(
dev
);
pci_dev_put
(
dev
);
}
/**
* pci_remove_device_safe - remove an unused hotplug device
* @dev: the device to remove
*
* Delete the device structure from the device lists and
* notify userspace (/sbin/hotplug), but only if the device
* in question is not being used by a driver.
* Returns 0 on success.
*/
int
pci_remove_device_safe
(
struct
pci_dev
*
dev
)
{
if
(
pci_dev_driver
(
dev
))
return
-
EBUSY
;
pci_destroy_dev
(
dev
);
return
0
;
}
EXPORT_SYMBOL
(
pci_remove_device_safe
);
/**
* pci_remove_bus_device - remove a PCI device and any children
* @dev: the device to remove
*
* Remove a PCI device from the device lists, informing the drivers
* that the device has been removed. We also remove any subordinate
* buses and children in a depth-first manner.
*
* For each device we remove, delete the device structure from the
* device lists, remove the /proc entry, and notify userspace
* (/sbin/hotplug).
*/
void
pci_remove_bus_device
(
struct
pci_dev
*
dev
)
{
if
(
dev
->
subordinate
)
{
struct
pci_bus
*
b
=
dev
->
subordinate
;
pci_remove_behind_bridge
(
dev
);
pci_proc_detach_bus
(
b
);
spin_lock
(
&
pci_bus_lock
);
list_del
(
&
b
->
node
);
spin_unlock
(
&
pci_bus_lock
);
kfree
(
b
);
dev
->
subordinate
=
NULL
;
}
pci_destroy_dev
(
dev
);
}
/**
* pci_remove_behind_bridge - remove all devices behind a PCI bridge
* @dev: PCI bridge device
*
* Remove all devices on the bus, except for the parent bridge.
* This also removes any child buses, and any devices they may
* contain in a depth-first manner.
*/
void
pci_remove_behind_bridge
(
struct
pci_dev
*
dev
)
{
struct
list_head
*
l
,
*
n
;
if
(
dev
->
subordinate
)
{
list_for_each_safe
(
l
,
n
,
&
dev
->
subordinate
->
devices
)
{
struct
pci_dev
*
dev
=
pci_dev_b
(
l
);
pci_remove_bus_device
(
dev
);
}
}
}
EXPORT_SYMBOL
(
pci_remove_bus_device
);
EXPORT_SYMBOL
(
pci_remove_behind_bridge
);
drivers/pci/setup-bus.c
View file @
21f27357
...
...
@@ -81,7 +81,7 @@ pci_setup_cardbus(struct pci_bus *bus)
struct
pci_bus_region
region
;
printk
(
"PCI: Bus %d, cardbus bridge: %s
\n
"
,
bus
->
number
,
bridge
->
slot_name
);
bus
->
number
,
pci_name
(
bridge
)
);
pcibios_resource_to_bus
(
bridge
,
&
region
,
bus
->
resource
[
0
]);
if
(
bus
->
resource
[
0
]
->
flags
&
IORESOURCE_IO
)
{
...
...
@@ -344,7 +344,7 @@ pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
if
(
order
>
11
)
{
printk
(
KERN_WARNING
"PCI: region %s/%d "
"too large: %lx-%lx
\n
"
,
dev
->
slot_name
,
i
,
r
->
start
,
r
->
end
);
pci_name
(
dev
)
,
i
,
r
->
start
,
r
->
end
);
r
->
flags
=
0
;
continue
;
}
...
...
@@ -513,7 +513,7 @@ pci_bus_assign_resources(struct pci_bus *bus)
default:
printk
(
KERN_INFO
"PCI: not setting up bridge %s "
"for bus %d
\n
"
,
dev
->
slot_name
,
b
->
number
);
"for bus %d
\n
"
,
pci_name
(
dev
)
,
b
->
number
);
break
;
}
}
...
...
drivers/pci/setup-res.c
View file @
21f27357
...
...
@@ -68,7 +68,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
if
((
new
^
check
)
&
mask
)
{
printk
(
KERN_ERR
"PCI: Error while updating region "
"%s/%d (%08x != %08x)
\n
"
,
dev
->
slot_name
,
resno
,
"%s/%d (%08x != %08x)
\n
"
,
pci_name
(
dev
)
,
resno
,
new
,
check
);
}
...
...
@@ -80,7 +80,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
if
(
check
!=
new
)
{
printk
(
KERN_ERR
"PCI: Error updating region "
"%s/%d (high %08x != %08x)
\n
"
,
dev
->
slot_name
,
resno
,
new
,
check
);
pci_name
(
dev
)
,
resno
,
new
,
check
);
}
}
}
...
...
@@ -101,7 +101,7 @@ pci_claim_resource(struct pci_dev *dev, int resource)
printk
(
KERN_ERR
"PCI: %s region %d of %s %s [%lx:%lx]
\n
"
,
root
?
"Address space collision on"
:
"No parent found for"
,
resource
,
dtype
,
dev
->
slot_name
,
res
->
start
,
res
->
end
);
resource
,
dtype
,
pci_name
(
dev
)
,
res
->
start
,
res
->
end
);
}
return
err
;
...
...
@@ -139,7 +139,7 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
if
(
ret
)
{
printk
(
KERN_ERR
"PCI: Failed to allocate resource %d(%lx-%lx) for %s
\n
"
,
resno
,
res
->
start
,
res
->
end
,
dev
->
slot_name
);
resno
,
res
->
start
,
res
->
end
,
pci_name
(
dev
)
);
}
else
if
(
resno
<
PCI_BRIDGE_RESOURCES
)
{
pci_update_resource
(
dev
,
res
,
resno
);
}
...
...
include/linux/pci.h
View file @
21f27357
...
...
@@ -715,7 +715,6 @@ static inline int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) { return -
static
inline
int
pci_assign_resource
(
struct
pci_dev
*
dev
,
int
i
)
{
return
-
EBUSY
;}
static
inline
int
pci_register_driver
(
struct
pci_driver
*
drv
)
{
return
0
;}
static
inline
void
pci_unregister_driver
(
struct
pci_driver
*
drv
)
{
}
static
inline
int
scsi_to_pci_dma_dir
(
unsigned
char
scsi_dir
)
{
return
scsi_dir
;
}
static
inline
int
pci_find_capability
(
struct
pci_dev
*
dev
,
int
cap
)
{
return
0
;
}
static
inline
const
struct
pci_device_id
*
pci_match_device
(
const
struct
pci_device_id
*
ids
,
const
struct
pci_dev
*
dev
)
{
return
NULL
;
}
...
...
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