Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
742b0c90
Commit
742b0c90
authored
May 04, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge of
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/gregkh/pci-2.6.git/
parents
235bd614
9171078a
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
113 additions
and
103 deletions
+113
-103
Documentation/pci.txt
Documentation/pci.txt
+1
-0
Documentation/power/pci.txt
Documentation/power/pci.txt
+2
-33
arch/arm/mach-ixp4xx/common-pci.c
arch/arm/mach-ixp4xx/common-pci.c
+0
-10
drivers/pci/hotplug/ibmphp.h
drivers/pci/hotplug/ibmphp.h
+1
-1
drivers/pci/hotplug/ibmphp_hpc.c
drivers/pci/hotplug/ibmphp_hpc.c
+3
-3
drivers/pci/hotplug/ibmphp_pci.c
drivers/pci/hotplug/ibmphp_pci.c
+5
-2
drivers/pci/hotplug/pci_hotplug.h
drivers/pci/hotplug/pci_hotplug.h
+1
-1
drivers/pci/hotplug/pciehp_core.c
drivers/pci/hotplug/pciehp_core.c
+18
-5
drivers/pci/hotplug/pcihp_skeleton.c
drivers/pci/hotplug/pcihp_skeleton.c
+1
-1
drivers/pci/msi.c
drivers/pci/msi.c
+3
-3
drivers/pci/pci-acpi.c
drivers/pci/pci-acpi.c
+1
-1
drivers/pci/pci-driver.c
drivers/pci/pci-driver.c
+10
-1
drivers/pci/pci-sysfs.c
drivers/pci/pci-sysfs.c
+58
-24
drivers/pci/pci.c
drivers/pci/pci.c
+4
-16
drivers/pci/probe.c
drivers/pci/probe.c
+1
-0
drivers/pci/proc.c
drivers/pci/proc.c
+1
-0
drivers/pci/quirks.c
drivers/pci/quirks.c
+2
-0
include/linux/pci.h
include/linux/pci.h
+1
-2
No files found.
Documentation/pci.txt
View file @
742b0c90
...
@@ -279,6 +279,7 @@ pci_for_each_dev_reverse() Superseded by pci_find_device_reverse()
...
@@ -279,6 +279,7 @@ pci_for_each_dev_reverse() Superseded by pci_find_device_reverse()
pci_for_each_bus() Superseded by pci_find_next_bus()
pci_for_each_bus() Superseded by pci_find_next_bus()
pci_find_device() Superseded by pci_get_device()
pci_find_device() Superseded by pci_get_device()
pci_find_subsys() Superseded by pci_get_subsys()
pci_find_subsys() Superseded by pci_get_subsys()
pci_find_slot() Superseded by pci_get_slot()
pcibios_find_class() Superseded by pci_get_class()
pcibios_find_class() Superseded by pci_get_class()
pci_find_class() Superseded by pci_get_class()
pci_find_class() Superseded by pci_get_class()
pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*()
pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*()
Documentation/power/pci.txt
View file @
742b0c90
...
@@ -165,40 +165,9 @@ Description:
...
@@ -165,40 +165,9 @@ Description:
These functions are intended for use by individual drivers, and are defined in
These functions are intended for use by individual drivers, and are defined in
struct pci_driver:
struct pci_driver:
int (*save_state) (struct pci_dev *dev, u32 state);
int (*suspend) (struct pci_dev *dev, pm_message_t state);
int (*suspend) (struct pci_dev *dev, u32 state);
int (*resume) (struct pci_dev *dev);
int (*resume) (struct pci_dev *dev);
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);
save_state
----------
Usage:
if (dev->driver && dev->driver->save_state)
dev->driver->save_state(dev,state);
The driver should use this callback to save device state. It should take into
account the current state of the device and the requested state in order to
avoid any unnecessary operations.
For example, a video card that supports all 4 states (D0-D3), all controller
context is preserved when entering D1, but the screen is placed into a low power
state (blanked).
The driver can also interpret this function as a notification that it may be
entering a sleep state in the near future. If it knows that the device cannot
enter the requested state, either because of lack of support for it, or because
the device is middle of some critical operation, then it should fail.
This function should not be used to set any state in the device or the driver
because the device may not actually enter the sleep state (e.g. another driver
later causes causes a global state transition to fail).
Note that in intermediate low power states, a device's I/O and memory spaces may
be disabled and may not be available in subsequent transitions to lower power
states.
suspend
suspend
...
...
arch/arm/mach-ixp4xx/common-pci.c
View file @
742b0c90
...
@@ -501,15 +501,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
...
@@ -501,15 +501,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
return
-
EIO
;
return
-
EIO
;
}
}
int
pci_dac_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
if
(
mask
>=
SZ_64M
-
1
)
return
0
;
return
-
EIO
;
}
int
int
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
{
...
@@ -520,7 +511,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
...
@@ -520,7 +511,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
}
}
EXPORT_SYMBOL
(
pci_set_dma_mask
);
EXPORT_SYMBOL
(
pci_set_dma_mask
);
EXPORT_SYMBOL
(
pci_dac_set_dma_mask
);
EXPORT_SYMBOL
(
pci_set_consistent_dma_mask
);
EXPORT_SYMBOL
(
pci_set_consistent_dma_mask
);
EXPORT_SYMBOL
(
ixp4xx_pci_read
);
EXPORT_SYMBOL
(
ixp4xx_pci_read
);
EXPORT_SYMBOL
(
ixp4xx_pci_write
);
EXPORT_SYMBOL
(
ixp4xx_pci_write
);
...
...
drivers/pci/hotplug/ibmphp.h
View file @
742b0c90
...
@@ -196,7 +196,7 @@ struct ebda_hpc_bus {
...
@@ -196,7 +196,7 @@ struct ebda_hpc_bus {
/********************************************************************
/********************************************************************
* THREE TYPE OF HOT PLUG CONTROLER *
* THREE TYPE OF HOT PLUG CONTROL
L
ER *
********************************************************************/
********************************************************************/
struct
isa_ctlr_access
{
struct
isa_ctlr_access
{
...
...
drivers/pci/hotplug/ibmphp_hpc.c
View file @
742b0c90
...
@@ -64,7 +64,7 @@ static int to_debug = FALSE;
...
@@ -64,7 +64,7 @@ static int to_debug = FALSE;
#define WPG_I2C_OR 0x2000 // I2C OR operation
#define WPG_I2C_OR 0x2000 // I2C OR operation
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Command set for I2C Master Operation Setup Regis
et
r
// Command set for I2C Master Operation Setup Regis
te
r
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
#define WPG_READATADDR_MASK 0x00010000 // read,bytes,I2C shifted,index
#define WPG_READATADDR_MASK 0x00010000 // read,bytes,I2C shifted,index
#define WPG_WRITEATADDR_MASK 0x40010000 // write,bytes,I2C shifted,index
#define WPG_WRITEATADDR_MASK 0x40010000 // write,bytes,I2C shifted,index
...
@@ -835,7 +835,7 @@ static void poll_hpc (void)
...
@@ -835,7 +835,7 @@ static void poll_hpc (void)
if
(
ibmphp_shutdown
)
if
(
ibmphp_shutdown
)
break
;
break
;
/* try to get the lock to do some kind of harware access */
/* try to get the lock to do some kind of har
d
ware access */
down
(
&
semOperations
);
down
(
&
semOperations
);
switch
(
poll_state
)
{
switch
(
poll_state
)
{
...
@@ -906,7 +906,7 @@ static void poll_hpc (void)
...
@@ -906,7 +906,7 @@ static void poll_hpc (void)
poll_state
=
POLL_LATCH_REGISTER
;
poll_state
=
POLL_LATCH_REGISTER
;
break
;
break
;
}
}
/* give up the harware semaphore */
/* give up the har
d
ware semaphore */
up
(
&
semOperations
);
up
(
&
semOperations
);
/* sleep for a short time just for good measure */
/* sleep for a short time just for good measure */
msleep
(
100
);
msleep
(
100
);
...
...
drivers/pci/hotplug/ibmphp_pci.c
View file @
742b0c90
...
@@ -1308,10 +1308,10 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
...
@@ -1308,10 +1308,10 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
}
else
{
}
else
{
/* This is Memory */
/* This is Memory */
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
start_address
&
PCI_BASE_ADDRESS_MEM_PREFETCH
)
{
if
(
start_address
&
PCI_BASE_ADDRESS_MEM_PREFETCH
)
{
/* pfmem */
/* pfmem */
debug
(
"start address of pfmem is %x
\n
"
,
start_address
);
debug
(
"start address of pfmem is %x
\n
"
,
start_address
);
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
pfmem
,
PFMEM
)
<
0
)
{
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
pfmem
,
PFMEM
)
<
0
)
{
err
(
"cannot find corresponding PFMEM resource to remove
\n
"
);
err
(
"cannot find corresponding PFMEM resource to remove
\n
"
);
...
@@ -1325,6 +1325,8 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
...
@@ -1325,6 +1325,8 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
}
else
{
}
else
{
/* regular memory */
/* regular memory */
debug
(
"start address of mem is %x
\n
"
,
start_address
);
debug
(
"start address of mem is %x
\n
"
,
start_address
);
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
mem
,
MEM
)
<
0
)
{
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
mem
,
MEM
)
<
0
)
{
err
(
"cannot find corresponding MEM resource to remove
\n
"
);
err
(
"cannot find corresponding MEM resource to remove
\n
"
);
return
-
EIO
;
return
-
EIO
;
...
@@ -1422,9 +1424,9 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
...
@@ -1422,9 +1424,9 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
}
else
{
}
else
{
/* This is Memory */
/* This is Memory */
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
start_address
&
PCI_BASE_ADDRESS_MEM_PREFETCH
)
{
if
(
start_address
&
PCI_BASE_ADDRESS_MEM_PREFETCH
)
{
/* pfmem */
/* pfmem */
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
pfmem
,
PFMEM
)
<
0
)
{
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
pfmem
,
PFMEM
)
<
0
)
{
err
(
"cannot find corresponding PFMEM resource to remove
\n
"
);
err
(
"cannot find corresponding PFMEM resource to remove
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -1436,6 +1438,7 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
...
@@ -1436,6 +1438,7 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
}
}
}
else
{
}
else
{
/* regular memory */
/* regular memory */
start_address
&=
PCI_BASE_ADDRESS_MEM_MASK
;
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
mem
,
MEM
)
<
0
)
{
if
(
ibmphp_find_resource
(
bus
,
start_address
,
&
mem
,
MEM
)
<
0
)
{
err
(
"cannot find corresponding MEM resource to remove
\n
"
);
err
(
"cannot find corresponding MEM resource to remove
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
...
...
drivers/pci/hotplug/pci_hotplug.h
View file @
742b0c90
...
@@ -150,7 +150,7 @@ struct hotplug_slot_info {
...
@@ -150,7 +150,7 @@ struct hotplug_slot_info {
* @name: the name of the slot being registered. This string must
* @name: the name of the slot being registered. This string must
* be unique amoung slots registered on this system.
* be unique amoung slots registered on this system.
* @ops: pointer to the &struct hotplug_slot_ops to be used for this slot
* @ops: pointer to the &struct hotplug_slot_ops to be used for this slot
* @info: pointer to the &struct hotplug_slot_info for the inital values for
* @info: pointer to the &struct hotplug_slot_info for the init
i
al values for
* this slot.
* this slot.
* @release: called during pci_hp_deregister to free memory allocated in a
* @release: called during pci_hp_deregister to free memory allocated in a
* hotplug_slot structure.
* hotplug_slot structure.
...
...
drivers/pci/hotplug/pciehp_core.c
View file @
742b0c90
...
@@ -90,6 +90,22 @@ static struct hotplug_slot_ops pciehp_hotplug_slot_ops = {
...
@@ -90,6 +90,22 @@ static struct hotplug_slot_ops pciehp_hotplug_slot_ops = {
.
get_cur_bus_speed
=
get_cur_bus_speed
,
.
get_cur_bus_speed
=
get_cur_bus_speed
,
};
};
/**
* release_slot - free up the memory used by a slot
* @hotplug_slot: slot to free
*/
static
void
release_slot
(
struct
hotplug_slot
*
hotplug_slot
)
{
struct
slot
*
slot
=
hotplug_slot
->
private
;
dbg
(
"%s - physical_slot = %s
\n
"
,
__FUNCTION__
,
hotplug_slot
->
name
);
kfree
(
slot
->
hotplug_slot
->
info
);
kfree
(
slot
->
hotplug_slot
->
name
);
kfree
(
slot
->
hotplug_slot
);
kfree
(
slot
);
}
static
int
init_slots
(
struct
controller
*
ctrl
)
static
int
init_slots
(
struct
controller
*
ctrl
)
{
{
struct
slot
*
new_slot
;
struct
slot
*
new_slot
;
...
@@ -139,7 +155,8 @@ static int init_slots(struct controller *ctrl)
...
@@ -139,7 +155,8 @@ static int init_slots(struct controller *ctrl)
/* register this slot with the hotplug pci core */
/* register this slot with the hotplug pci core */
new_slot
->
hotplug_slot
->
private
=
new_slot
;
new_slot
->
hotplug_slot
->
private
=
new_slot
;
make_slot_name
(
new_slot
->
hotplug_slot
->
name
,
SLOT_NAME_SIZE
,
new_slot
);
new_slot
->
hotplug_slot
->
release
=
&
release_slot
;
make_slot_name
(
new_slot
->
hotplug_slot
->
name
,
SLOT_NAME_SIZE
,
new_slot
);
new_slot
->
hotplug_slot
->
ops
=
&
pciehp_hotplug_slot_ops
;
new_slot
->
hotplug_slot
->
ops
=
&
pciehp_hotplug_slot_ops
;
new_slot
->
hpc_ops
->
get_power_status
(
new_slot
,
&
(
new_slot
->
hotplug_slot
->
info
->
power_status
));
new_slot
->
hpc_ops
->
get_power_status
(
new_slot
,
&
(
new_slot
->
hotplug_slot
->
info
->
power_status
));
...
@@ -188,10 +205,6 @@ static int cleanup_slots (struct controller * ctrl)
...
@@ -188,10 +205,6 @@ static int cleanup_slots (struct controller * ctrl)
while
(
old_slot
)
{
while
(
old_slot
)
{
next_slot
=
old_slot
->
next
;
next_slot
=
old_slot
->
next
;
pci_hp_deregister
(
old_slot
->
hotplug_slot
);
pci_hp_deregister
(
old_slot
->
hotplug_slot
);
kfree
(
old_slot
->
hotplug_slot
->
info
);
kfree
(
old_slot
->
hotplug_slot
->
name
);
kfree
(
old_slot
->
hotplug_slot
);
kfree
(
old_slot
);
old_slot
=
next_slot
;
old_slot
=
next_slot
;
}
}
...
...
drivers/pci/hotplug/pcihp_skeleton.c
View file @
742b0c90
...
@@ -297,7 +297,7 @@ static int __init init_slots(void)
...
@@ -297,7 +297,7 @@ static int __init init_slots(void)
hotplug_slot
->
ops
=
&
skel_hotplug_slot_ops
;
hotplug_slot
->
ops
=
&
skel_hotplug_slot_ops
;
/*
/*
* Initilize the slot info structure with some known
* Initi
a
lize the slot info structure with some known
* good values.
* good values.
*/
*/
info
->
power_status
=
get_power_status
(
slot
);
info
->
power_status
=
get_power_status
(
slot
);
...
...
drivers/pci/msi.c
View file @
742b0c90
...
@@ -522,7 +522,7 @@ void pci_scan_msi_device(struct pci_dev *dev)
...
@@ -522,7 +522,7 @@ void pci_scan_msi_device(struct pci_dev *dev)
* msi_capability_init - configure device's MSI capability structure
* msi_capability_init - configure device's MSI capability structure
* @dev: pointer to the pci_dev data structure of MSI device function
* @dev: pointer to the pci_dev data structure of MSI device function
*
*
* Setup the MSI capability structure of device funtion with a single
* Setup the MSI capability structure of device fun
c
tion with a single
* MSI vector, regardless of device function is capable of handling
* MSI vector, regardless of device function is capable of handling
* multiple messages. A return of zero indicates the successful setup
* multiple messages. A return of zero indicates the successful setup
* of an entry zero with the new MSI vector or non-zero for otherwise.
* of an entry zero with the new MSI vector or non-zero for otherwise.
...
@@ -599,7 +599,7 @@ static int msi_capability_init(struct pci_dev *dev)
...
@@ -599,7 +599,7 @@ static int msi_capability_init(struct pci_dev *dev)
* msix_capability_init - configure device's MSI-X capability
* msix_capability_init - configure device's MSI-X capability
* @dev: pointer to the pci_dev data structure of MSI-X device function
* @dev: pointer to the pci_dev data structure of MSI-X device function
*
*
* Setup the MSI-X capability structure of device funtion with a
* Setup the MSI-X capability structure of device fun
c
tion with a
* single MSI-X vector. A return of zero indicates the successful setup of
* single MSI-X vector. A return of zero indicates the successful setup of
* requested MSI-X entries with allocated vectors or non-zero for otherwise.
* requested MSI-X entries with allocated vectors or non-zero for otherwise.
**/
**/
...
@@ -1074,7 +1074,7 @@ void pci_disable_msix(struct pci_dev* dev)
...
@@ -1074,7 +1074,7 @@ void pci_disable_msix(struct pci_dev* dev)
* msi_remove_pci_irq_vectors - reclaim MSI(X) vectors to unused state
* msi_remove_pci_irq_vectors - reclaim MSI(X) vectors to unused state
* @dev: pointer to the pci_dev data structure of MSI(X) device function
* @dev: pointer to the pci_dev data structure of MSI(X) device function
*
*
* Being called during hotplug remove, from which the device func
it
on
* Being called during hotplug remove, from which the device func
ti
on
* is hot-removed. All previous assigned MSI/MSI-X vectors, if
* is hot-removed. All previous assigned MSI/MSI-X vectors, if
* allocated for this device function, are reclaimed to unused state,
* allocated for this device function, are reclaimed to unused state,
* which may be used later on.
* which may be used later on.
...
...
drivers/pci/pci-acpi.c
View file @
742b0c90
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
static
u32
ctrlset_buf
[
3
]
=
{
0
,
0
,
0
};
static
u32
ctrlset_buf
[
3
]
=
{
0
,
0
,
0
};
static
u32
global_ctrlsets
=
0
;
static
u32
global_ctrlsets
=
0
;
u8
OSC_UUID
[
16
]
=
{
0x5B
,
0x4D
,
0xDB
,
0x33
,
0xF7
,
0x1F
,
0x1C
,
0x40
,
0x96
,
0x57
,
0x74
,
0x41
,
0xC0
,
0x3D
,
0xD7
,
0x66
};
static
u8
OSC_UUID
[
16
]
=
{
0x5B
,
0x4D
,
0xDB
,
0x33
,
0xF7
,
0x1F
,
0x1C
,
0x40
,
0x96
,
0x57
,
0x74
,
0x41
,
0xC0
,
0x3D
,
0xD7
,
0x66
};
static
acpi_status
static
acpi_status
acpi_query_osc
(
acpi_query_osc
(
...
...
drivers/pci/pci-driver.c
View file @
742b0c90
...
@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
...
@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
return
0
;
return
0
;
}
}
static
void
pci_device_shutdown
(
struct
device
*
dev
)
{
struct
pci_dev
*
pci_dev
=
to_pci_dev
(
dev
);
struct
pci_driver
*
drv
=
pci_dev
->
driver
;
if
(
drv
&&
drv
->
shutdown
)
drv
->
shutdown
(
pci_dev
);
}
#define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
#define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
#define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
#define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
...
@@ -373,7 +381,7 @@ pci_populate_driver_dir(struct pci_driver *drv)
...
@@ -373,7 +381,7 @@ pci_populate_driver_dir(struct pci_driver *drv)
*
*
* Adds the driver structure to the list of registered drivers.
* Adds the driver structure to the list of registered drivers.
* Returns a negative value on error, otherwise 0.
* Returns a negative value on error, otherwise 0.
* If no error occured, the driver remains registered even if
* If no error occur
r
ed, the driver remains registered even if
* no device was claimed during registration.
* no device was claimed during registration.
*/
*/
int
pci_register_driver
(
struct
pci_driver
*
drv
)
int
pci_register_driver
(
struct
pci_driver
*
drv
)
...
@@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
...
@@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
drv
->
driver
.
bus
=
&
pci_bus_type
;
drv
->
driver
.
bus
=
&
pci_bus_type
;
drv
->
driver
.
probe
=
pci_device_probe
;
drv
->
driver
.
probe
=
pci_device_probe
;
drv
->
driver
.
remove
=
pci_device_remove
;
drv
->
driver
.
remove
=
pci_device_remove
;
drv
->
driver
.
shutdown
=
pci_device_shutdown
,
drv
->
driver
.
owner
=
drv
->
owner
;
drv
->
driver
.
owner
=
drv
->
owner
;
drv
->
driver
.
kobj
.
ktype
=
&
pci_driver_kobj_type
;
drv
->
driver
.
kobj
.
ktype
=
&
pci_driver_kobj_type
;
pci_init_dynids
(
&
drv
->
dynids
);
pci_init_dynids
(
&
drv
->
dynids
);
...
...
drivers/pci/pci-sysfs.c
View file @
742b0c90
...
@@ -91,6 +91,7 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
...
@@ -91,6 +91,7 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
struct
pci_dev
*
dev
=
to_pci_dev
(
container_of
(
kobj
,
struct
device
,
kobj
));
struct
pci_dev
*
dev
=
to_pci_dev
(
container_of
(
kobj
,
struct
device
,
kobj
));
unsigned
int
size
=
64
;
unsigned
int
size
=
64
;
loff_t
init_off
=
off
;
loff_t
init_off
=
off
;
u8
*
data
=
(
u8
*
)
buf
;
/* Several chips lock up trying to read undefined config space */
/* Several chips lock up trying to read undefined config space */
if
(
capable
(
CAP_SYS_ADMIN
))
{
if
(
capable
(
CAP_SYS_ADMIN
))
{
...
@@ -108,30 +109,47 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
...
@@ -108,30 +109,47 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
size
=
count
;
size
=
count
;
}
}
while
(
off
&
3
)
{
if
((
off
&
1
)
&&
size
)
{
u
nsigned
char
val
;
u
8
val
;
pci_read_config_byte
(
dev
,
off
,
&
val
);
pci_read_config_byte
(
dev
,
off
,
&
val
);
buf
[
off
-
init_off
]
=
val
;
data
[
off
-
init_off
]
=
val
;
off
++
;
off
++
;
if
(
--
size
==
0
)
size
--
;
break
;
}
if
((
off
&
3
)
&&
size
>
2
)
{
u16
val
;
pci_read_config_word
(
dev
,
off
,
&
val
);
data
[
off
-
init_off
]
=
val
&
0xff
;
data
[
off
-
init_off
+
1
]
=
(
val
>>
8
)
&
0xff
;
off
+=
2
;
size
-=
2
;
}
}
while
(
size
>
3
)
{
while
(
size
>
3
)
{
u
nsigned
int
val
;
u
32
val
;
pci_read_config_dword
(
dev
,
off
,
&
val
);
pci_read_config_dword
(
dev
,
off
,
&
val
);
buf
[
off
-
init_off
]
=
val
&
0xff
;
data
[
off
-
init_off
]
=
val
&
0xff
;
buf
[
off
-
init_off
+
1
]
=
(
val
>>
8
)
&
0xff
;
data
[
off
-
init_off
+
1
]
=
(
val
>>
8
)
&
0xff
;
buf
[
off
-
init_off
+
2
]
=
(
val
>>
16
)
&
0xff
;
data
[
off
-
init_off
+
2
]
=
(
val
>>
16
)
&
0xff
;
buf
[
off
-
init_off
+
3
]
=
(
val
>>
24
)
&
0xff
;
data
[
off
-
init_off
+
3
]
=
(
val
>>
24
)
&
0xff
;
off
+=
4
;
off
+=
4
;
size
-=
4
;
size
-=
4
;
}
}
while
(
size
>
0
)
{
if
(
size
>=
2
)
{
unsigned
char
val
;
u16
val
;
pci_read_config_word
(
dev
,
off
,
&
val
);
data
[
off
-
init_off
]
=
val
&
0xff
;
data
[
off
-
init_off
+
1
]
=
(
val
>>
8
)
&
0xff
;
off
+=
2
;
size
-=
2
;
}
if
(
size
>
0
)
{
u8
val
;
pci_read_config_byte
(
dev
,
off
,
&
val
);
pci_read_config_byte
(
dev
,
off
,
&
val
);
buf
[
off
-
init_off
]
=
val
;
data
[
off
-
init_off
]
=
val
;
off
++
;
off
++
;
--
size
;
--
size
;
}
}
...
@@ -145,6 +163,7 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
...
@@ -145,6 +163,7 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
struct
pci_dev
*
dev
=
to_pci_dev
(
container_of
(
kobj
,
struct
device
,
kobj
));
struct
pci_dev
*
dev
=
to_pci_dev
(
container_of
(
kobj
,
struct
device
,
kobj
));
unsigned
int
size
=
count
;
unsigned
int
size
=
count
;
loff_t
init_off
=
off
;
loff_t
init_off
=
off
;
u8
*
data
=
(
u8
*
)
buf
;
if
(
off
>
dev
->
cfg_size
)
if
(
off
>
dev
->
cfg_size
)
return
0
;
return
0
;
...
@@ -152,26 +171,41 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
...
@@ -152,26 +171,41 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
size
=
dev
->
cfg_size
-
off
;
size
=
dev
->
cfg_size
-
off
;
count
=
size
;
count
=
size
;
}
}
while
(
off
&
3
)
{
if
((
off
&
1
)
&&
size
)
{
pci_write_config_byte
(
dev
,
off
,
buf
[
off
-
init_off
]);
pci_write_config_byte
(
dev
,
off
,
data
[
off
-
init_off
]);
off
++
;
off
++
;
if
(
--
size
==
0
)
size
--
;
break
;
}
}
if
((
off
&
3
)
&&
size
>
2
)
{
u16
val
=
data
[
off
-
init_off
];
val
|=
(
u16
)
data
[
off
-
init_off
+
1
]
<<
8
;
pci_write_config_word
(
dev
,
off
,
val
);
off
+=
2
;
size
-=
2
;
}
while
(
size
>
3
)
{
while
(
size
>
3
)
{
u
nsigned
int
val
=
buf
[
off
-
init_off
];
u
32
val
=
data
[
off
-
init_off
];
val
|=
(
u
nsigned
int
)
buf
[
off
-
init_off
+
1
]
<<
8
;
val
|=
(
u
32
)
data
[
off
-
init_off
+
1
]
<<
8
;
val
|=
(
u
nsigned
int
)
buf
[
off
-
init_off
+
2
]
<<
16
;
val
|=
(
u
32
)
data
[
off
-
init_off
+
2
]
<<
16
;
val
|=
(
u
nsigned
int
)
buf
[
off
-
init_off
+
3
]
<<
24
;
val
|=
(
u
32
)
data
[
off
-
init_off
+
3
]
<<
24
;
pci_write_config_dword
(
dev
,
off
,
val
);
pci_write_config_dword
(
dev
,
off
,
val
);
off
+=
4
;
off
+=
4
;
size
-=
4
;
size
-=
4
;
}
}
if
(
size
>=
2
)
{
u16
val
=
data
[
off
-
init_off
];
val
|=
(
u16
)
data
[
off
-
init_off
+
1
]
<<
8
;
pci_write_config_word
(
dev
,
off
,
val
);
off
+=
2
;
size
-=
2
;
}
while
(
size
>
0
)
{
if
(
size
)
{
pci_write_config_byte
(
dev
,
off
,
buf
[
off
-
init_off
]);
pci_write_config_byte
(
dev
,
off
,
data
[
off
-
init_off
]);
off
++
;
off
++
;
--
size
;
--
size
;
}
}
...
...
drivers/pci/pci.c
View file @
742b0c90
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#include <linux/module.h>
#include <linux/module.h>
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <asm/dma.h>
/* isa_dma_bridge_buggy */
#include <asm/dma.h>
/* isa_dma_bridge_buggy */
#include "pci.h"
/**
/**
...
@@ -398,10 +399,10 @@ pci_enable_device(struct pci_dev *dev)
...
@@ -398,10 +399,10 @@ pci_enable_device(struct pci_dev *dev)
{
{
int
err
;
int
err
;
dev
->
is_enabled
=
1
;
if
((
err
=
pci_enable_device_bars
(
dev
,
(
1
<<
PCI_NUM_RESOURCES
)
-
1
)))
if
((
err
=
pci_enable_device_bars
(
dev
,
(
1
<<
PCI_NUM_RESOURCES
)
-
1
)))
return
err
;
return
err
;
pci_fixup_device
(
pci_fixup_enable
,
dev
);
pci_fixup_device
(
pci_fixup_enable
,
dev
);
dev
->
is_enabled
=
1
;
return
0
;
return
0
;
}
}
...
@@ -427,16 +428,15 @@ pci_disable_device(struct pci_dev *dev)
...
@@ -427,16 +428,15 @@ pci_disable_device(struct pci_dev *dev)
{
{
u16
pci_command
;
u16
pci_command
;
dev
->
is_enabled
=
0
;
dev
->
is_busmaster
=
0
;
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
pci_command
);
pci_read_config_word
(
dev
,
PCI_COMMAND
,
&
pci_command
);
if
(
pci_command
&
PCI_COMMAND_MASTER
)
{
if
(
pci_command
&
PCI_COMMAND_MASTER
)
{
pci_command
&=
~
PCI_COMMAND_MASTER
;
pci_command
&=
~
PCI_COMMAND_MASTER
;
pci_write_config_word
(
dev
,
PCI_COMMAND
,
pci_command
);
pci_write_config_word
(
dev
,
PCI_COMMAND
,
pci_command
);
}
}
dev
->
is_busmaster
=
0
;
pcibios_disable_device
(
dev
);
pcibios_disable_device
(
dev
);
dev
->
is_enabled
=
0
;
}
}
/**
/**
...
@@ -748,17 +748,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
...
@@ -748,17 +748,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
return
0
;
return
0
;
}
}
int
pci_dac_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
if
(
!
pci_dac_dma_supported
(
dev
,
mask
))
return
-
EIO
;
dev
->
dma_mask
=
mask
;
return
0
;
}
int
int
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
{
...
@@ -821,7 +810,6 @@ EXPORT_SYMBOL(pci_set_master);
...
@@ -821,7 +810,6 @@ EXPORT_SYMBOL(pci_set_master);
EXPORT_SYMBOL
(
pci_set_mwi
);
EXPORT_SYMBOL
(
pci_set_mwi
);
EXPORT_SYMBOL
(
pci_clear_mwi
);
EXPORT_SYMBOL
(
pci_clear_mwi
);
EXPORT_SYMBOL
(
pci_set_dma_mask
);
EXPORT_SYMBOL
(
pci_set_dma_mask
);
EXPORT_SYMBOL
(
pci_dac_set_dma_mask
);
EXPORT_SYMBOL
(
pci_set_consistent_dma_mask
);
EXPORT_SYMBOL
(
pci_set_consistent_dma_mask
);
EXPORT_SYMBOL
(
pci_assign_resource
);
EXPORT_SYMBOL
(
pci_assign_resource
);
EXPORT_SYMBOL
(
pci_find_parent_resource
);
EXPORT_SYMBOL
(
pci_find_parent_resource
);
...
...
drivers/pci/probe.c
View file @
742b0c90
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/cpumask.h>
#include <linux/cpumask.h>
#include "pci.h"
#define CARDBUS_LATENCY_TIMER 176
/* secondary latency timer */
#define CARDBUS_LATENCY_TIMER 176
/* secondary latency timer */
#define CARDBUS_RESERVE_BUSNR 3
#define CARDBUS_RESERVE_BUSNR 3
...
...
drivers/pci/proc.c
View file @
742b0c90
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/byteorder.h>
#include <asm/byteorder.h>
#include "pci.h"
static
int
proc_initialized
;
/* = 0 */
static
int
proc_initialized
;
/* = 0 */
...
...
drivers/pci/quirks.c
View file @
742b0c90
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
#include <linux/pci.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include "pci.h"
/* Deal with broken BIOS'es that neglect to enable passive release,
/* Deal with broken BIOS'es that neglect to enable passive release,
which can cause problems in combination with the 82441FX/PPro MTRRs */
which can cause problems in combination with the 82441FX/PPro MTRRs */
...
@@ -328,6 +329,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
...
@@ -328,6 +329,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801DB_0
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801DB_0
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801DB_12
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801DB_12
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801EB_0
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801EB_0
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_ESB_1
,
quirk_ich4_lpc_acpi
);
/*
/*
* VIA ACPI: One IO region pointed to by longword at
* VIA ACPI: One IO region pointed to by longword at
...
...
include/linux/pci.h
View file @
742b0c90
...
@@ -671,6 +671,7 @@ struct pci_driver {
...
@@ -671,6 +671,7 @@ struct pci_driver {
int
(
*
suspend
)
(
struct
pci_dev
*
dev
,
pm_message_t
state
);
/* Device suspended */
int
(
*
suspend
)
(
struct
pci_dev
*
dev
,
pm_message_t
state
);
/* Device suspended */
int
(
*
resume
)
(
struct
pci_dev
*
dev
);
/* Device woken up */
int
(
*
resume
)
(
struct
pci_dev
*
dev
);
/* Device woken up */
int
(
*
enable_wake
)
(
struct
pci_dev
*
dev
,
pci_power_t
state
,
int
enable
);
/* Enable wake event */
int
(
*
enable_wake
)
(
struct
pci_dev
*
dev
,
pci_power_t
state
,
int
enable
);
/* Enable wake event */
void
(
*
shutdown
)
(
struct
pci_dev
*
dev
);
struct
device_driver
driver
;
struct
device_driver
driver
;
struct
pci_dynids
dynids
;
struct
pci_dynids
dynids
;
...
@@ -810,7 +811,6 @@ void pci_set_master(struct pci_dev *dev);
...
@@ -810,7 +811,6 @@ void pci_set_master(struct pci_dev *dev);
int
pci_set_mwi
(
struct
pci_dev
*
dev
);
int
pci_set_mwi
(
struct
pci_dev
*
dev
);
void
pci_clear_mwi
(
struct
pci_dev
*
dev
);
void
pci_clear_mwi
(
struct
pci_dev
*
dev
);
int
pci_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
);
int
pci_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
);
int
pci_dac_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
);
int
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
);
int
pci_set_consistent_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
);
int
pci_assign_resource
(
struct
pci_dev
*
dev
,
int
i
);
int
pci_assign_resource
(
struct
pci_dev
*
dev
,
int
i
);
...
@@ -941,7 +941,6 @@ static inline void pci_set_master(struct pci_dev *dev) { }
...
@@ -941,7 +941,6 @@ static inline void pci_set_master(struct pci_dev *dev) { }
static
inline
int
pci_enable_device
(
struct
pci_dev
*
dev
)
{
return
-
EIO
;
}
static
inline
int
pci_enable_device
(
struct
pci_dev
*
dev
)
{
return
-
EIO
;
}
static
inline
void
pci_disable_device
(
struct
pci_dev
*
dev
)
{
}
static
inline
void
pci_disable_device
(
struct
pci_dev
*
dev
)
{
}
static
inline
int
pci_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
return
-
EIO
;
}
static
inline
int
pci_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
return
-
EIO
;
}
static
inline
int
pci_dac_set_dma_mask
(
struct
pci_dev
*
dev
,
u64
mask
)
{
return
-
EIO
;
}
static
inline
int
pci_assign_resource
(
struct
pci_dev
*
dev
,
int
i
)
{
return
-
EBUSY
;}
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
int
pci_register_driver
(
struct
pci_driver
*
drv
)
{
return
0
;}
static
inline
void
pci_unregister_driver
(
struct
pci_driver
*
drv
)
{
}
static
inline
void
pci_unregister_driver
(
struct
pci_driver
*
drv
)
{
}
...
...
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