Merge branch 'pci/misc' into next
* pci/misc: PCI: Remove unused PCI_MSIX_FLAGS_BIRMASK definition PCI: acpiphp_ibm: Convert to dynamic debug PCI: acpiphp: Convert to dynamic debug PCI: Remove Intel Haswell D3 delays PCI: Pass type, width, and prefetchability for window alignment PCI: Document reason for using pci_is_root_bus() PCI: Use pci_is_root_bus() to check for root bus PCI: Remove unused "is_pcie" from pci_dev structure PCI: Update pci_find_slot() description in pci.txt [SCSI] qla2xxx: Use standard PCIe Capability Link register field names PCI: Fix comment typo, remove unnecessary !! in pci_is_pcie() PCI: Drop "setting latency timer" messages
This commit is contained in:
commit
605d240052
@ -525,8 +525,9 @@ corresponding register block for you.
|
||||
6. Other interesting functions
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
pci_find_slot() Find pci_dev corresponding to given bus and
|
||||
slot numbers.
|
||||
pci_get_domain_bus_and_slot() Find pci_dev corresponding to given domain,
|
||||
bus and slot and number. If the device is
|
||||
found, its reference count is increased.
|
||||
pci_set_power_state() Set PCI Power Management state (0=D0 ... 3=D3)
|
||||
pci_find_capability() Find specified capability in device's capability
|
||||
list.
|
||||
@ -582,7 +583,8 @@ having sane locking.
|
||||
|
||||
pci_find_device() Superseded by pci_get_device()
|
||||
pci_find_subsys() Superseded by pci_get_subsys()
|
||||
pci_find_slot() Superseded by pci_get_slot()
|
||||
pci_find_slot() Superseded by pci_get_domain_bus_and_slot()
|
||||
pci_get_slot() Superseded by pci_get_domain_bus_and_slot()
|
||||
|
||||
|
||||
The alternative is the traditional PCI device driver that walks PCI
|
||||
|
@ -39,16 +39,6 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/pci_hotplug.h>
|
||||
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if (acpiphp_debug) \
|
||||
printk(KERN_DEBUG "%s: " format, \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format, MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg)
|
||||
#define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg)
|
||||
|
||||
struct acpiphp_context;
|
||||
struct acpiphp_bridge;
|
||||
struct acpiphp_slot;
|
||||
|
@ -31,6 +31,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "acpiphp: " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
@ -43,12 +45,9 @@
|
||||
#include <linux/smp.h>
|
||||
#include "acpiphp.h"
|
||||
|
||||
#define MY_NAME "acpiphp"
|
||||
|
||||
/* name size which is used for entries in pcihpfs */
|
||||
#define SLOT_NAME_SIZE 21 /* {_SUN} */
|
||||
|
||||
bool acpiphp_debug;
|
||||
bool acpiphp_disabled;
|
||||
|
||||
/* local variables */
|
||||
@ -61,9 +60,7 @@ static struct acpiphp_attention_info *attention_info;
|
||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_PARM_DESC(debug, "Debugging mode enabled or not");
|
||||
MODULE_PARM_DESC(disable, "disable acpiphp driver");
|
||||
module_param_named(debug, acpiphp_debug, bool, 0644);
|
||||
module_param_named(disable, acpiphp_disabled, bool, 0444);
|
||||
|
||||
/* export the attention callback registration methods */
|
||||
@ -139,7 +136,7 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
/* enable the specified slot */
|
||||
return acpiphp_enable_slot(slot->acpi_slot);
|
||||
@ -156,7 +153,7 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
/* disable the specified slot */
|
||||
return acpiphp_disable_and_eject_slot(slot->acpi_slot);
|
||||
@ -176,8 +173,9 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
int retval = -ENODEV;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, hotplug_slot_name(hotplug_slot));
|
||||
|
||||
pr_debug("%s - physical_slot = %s\n", __func__,
|
||||
hotplug_slot_name(hotplug_slot));
|
||||
|
||||
if (attention_info && try_module_get(attention_info->owner)) {
|
||||
retval = attention_info->set_attn(hotplug_slot, status);
|
||||
module_put(attention_info->owner);
|
||||
@ -199,7 +197,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
*value = acpiphp_get_power_status(slot->acpi_slot);
|
||||
|
||||
@ -221,7 +219,8 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value)
|
||||
{
|
||||
int retval = -EINVAL;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, hotplug_slot_name(hotplug_slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__,
|
||||
hotplug_slot_name(hotplug_slot));
|
||||
|
||||
if (attention_info && try_module_get(attention_info->owner)) {
|
||||
retval = attention_info->get_attn(hotplug_slot, value);
|
||||
@ -244,7 +243,7 @@ static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
*value = acpiphp_get_latch_status(slot->acpi_slot);
|
||||
|
||||
@ -264,7 +263,7 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
*value = acpiphp_get_adapter_status(slot->acpi_slot);
|
||||
|
||||
@ -279,7 +278,7 @@ static void release_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
pr_debug("%s - physical_slot = %s\n", __func__, slot_name(slot));
|
||||
|
||||
kfree(slot->hotplug_slot);
|
||||
kfree(slot);
|
||||
@ -322,11 +321,11 @@ int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot,
|
||||
if (retval == -EBUSY)
|
||||
goto error_hpslot;
|
||||
if (retval) {
|
||||
err("pci_hp_register failed with error %d\n", retval);
|
||||
pr_err("pci_hp_register failed with error %d\n", retval);
|
||||
goto error_hpslot;
|
||||
}
|
||||
|
||||
info("Slot [%s] registered\n", slot_name(slot));
|
||||
pr_info("Slot [%s] registered\n", slot_name(slot));
|
||||
|
||||
return 0;
|
||||
error_hpslot:
|
||||
@ -343,17 +342,17 @@ void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *acpiphp_slot)
|
||||
struct slot *slot = acpiphp_slot->slot;
|
||||
int retval = 0;
|
||||
|
||||
info("Slot [%s] unregistered\n", slot_name(slot));
|
||||
pr_info("Slot [%s] unregistered\n", slot_name(slot));
|
||||
|
||||
retval = pci_hp_deregister(slot->hotplug_slot);
|
||||
if (retval)
|
||||
err("pci_hp_deregister failed with error %d\n", retval);
|
||||
pr_err("pci_hp_deregister failed with error %d\n", retval);
|
||||
}
|
||||
|
||||
|
||||
void __init acpiphp_init(void)
|
||||
{
|
||||
info(DRIVER_DESC " version: " DRIVER_VERSION "%s\n",
|
||||
pr_info(DRIVER_DESC " version: " DRIVER_VERSION "%s\n",
|
||||
acpiphp_disabled ? ", disabled by user; please report a bug"
|
||||
: "");
|
||||
}
|
||||
|
@ -39,6 +39,8 @@
|
||||
* bus. It loses the refcount when the the driver unloads.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "acpiphp_glue: " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
@ -58,8 +60,6 @@ static LIST_HEAD(bridge_list);
|
||||
static DEFINE_MUTEX(bridge_mutex);
|
||||
static DEFINE_MUTEX(acpiphp_context_lock);
|
||||
|
||||
#define MY_NAME "acpiphp_glue"
|
||||
|
||||
static void handle_hotplug_event(acpi_handle handle, u32 type, void *data);
|
||||
static void acpiphp_sanitize_bus(struct pci_bus *bus);
|
||||
static void acpiphp_set_hpp_values(struct pci_bus *bus);
|
||||
@ -335,7 +335,7 @@ static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
|
||||
if (ACPI_FAILURE(status))
|
||||
sun = bridge->nr_slots;
|
||||
|
||||
dbg("found ACPI PCI Hotplug slot %llu at PCI %04x:%02x:%02x\n",
|
||||
pr_debug("found ACPI PCI Hotplug slot %llu at PCI %04x:%02x:%02x\n",
|
||||
sun, pci_domain_nr(pbus), pbus->number, device);
|
||||
|
||||
retval = acpiphp_register_hotplug_slot(slot, sun);
|
||||
@ -343,10 +343,10 @@ static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
|
||||
slot->slot = NULL;
|
||||
bridge->nr_slots--;
|
||||
if (retval == -EBUSY)
|
||||
warn("Slot %llu already registered by another "
|
||||
pr_warn("Slot %llu already registered by another "
|
||||
"hotplug driver\n", sun);
|
||||
else
|
||||
warn("acpiphp_register_hotplug_slot failed "
|
||||
pr_warn("acpiphp_register_hotplug_slot failed "
|
||||
"(err code = 0x%x)\n", retval);
|
||||
}
|
||||
/* Even if the slot registration fails, we can still use it. */
|
||||
@ -369,7 +369,7 @@ static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
|
||||
if (register_hotplug_dock_device(handle,
|
||||
&acpiphp_dock_ops, context,
|
||||
acpiphp_dock_init, acpiphp_dock_release))
|
||||
dbg("failed to register dock device\n");
|
||||
pr_debug("failed to register dock device\n");
|
||||
}
|
||||
|
||||
/* install notify handler */
|
||||
@ -427,7 +427,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
|
||||
ACPI_SYSTEM_NOTIFY,
|
||||
handle_hotplug_event);
|
||||
if (ACPI_FAILURE(status))
|
||||
err("failed to remove notify handler\n");
|
||||
pr_err("failed to remove notify handler\n");
|
||||
}
|
||||
}
|
||||
if (slot->slot)
|
||||
@ -830,8 +830,9 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
|
||||
switch (type) {
|
||||
case ACPI_NOTIFY_BUS_CHECK:
|
||||
/* bus re-enumerate */
|
||||
dbg("%s: Bus check notify on %s\n", __func__, objname);
|
||||
dbg("%s: re-enumerating slots under %s\n", __func__, objname);
|
||||
pr_debug("%s: Bus check notify on %s\n", __func__, objname);
|
||||
pr_debug("%s: re-enumerating slots under %s\n",
|
||||
__func__, objname);
|
||||
if (bridge) {
|
||||
acpiphp_check_bridge(bridge);
|
||||
} else {
|
||||
@ -845,7 +846,7 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
|
||||
|
||||
case ACPI_NOTIFY_DEVICE_CHECK:
|
||||
/* device check */
|
||||
dbg("%s: Device check notify on %s\n", __func__, objname);
|
||||
pr_debug("%s: Device check notify on %s\n", __func__, objname);
|
||||
if (bridge) {
|
||||
acpiphp_check_bridge(bridge);
|
||||
} else {
|
||||
@ -866,7 +867,7 @@ static void hotplug_event(acpi_handle handle, u32 type, void *data)
|
||||
|
||||
case ACPI_NOTIFY_EJECT_REQUEST:
|
||||
/* request device eject */
|
||||
dbg("%s: Device eject notify on %s\n", __func__, objname);
|
||||
pr_debug("%s: Device eject notify on %s\n", __func__, objname);
|
||||
acpiphp_disable_and_eject_slot(func->slot);
|
||||
break;
|
||||
}
|
||||
|
@ -25,6 +25,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "acpiphp_ibm: " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
@ -43,23 +45,11 @@
|
||||
#define DRIVER_AUTHOR "Irene Zubarev <zubarev@us.ibm.com>, Vernon Mauery <vernux@us.ibm.com>"
|
||||
#define DRIVER_DESC "ACPI Hot Plug PCI Controller Driver IBM extension"
|
||||
|
||||
static bool debug;
|
||||
|
||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(DRIVER_VERSION);
|
||||
module_param(debug, bool, 0644);
|
||||
MODULE_PARM_DESC(debug, " Debugging mode enabled or not");
|
||||
#define MY_NAME "acpiphp_ibm"
|
||||
|
||||
#undef dbg
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if (debug) \
|
||||
printk(KERN_DEBUG "%s: " format, \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
|
||||
#define FOUND_APCI 0x61504349
|
||||
/* these are the names for the IBM ACPI pseudo-device */
|
||||
@ -189,7 +179,7 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
||||
|
||||
ibm_slot = ibm_slot_from_id(hpslot_to_sun(slot));
|
||||
|
||||
dbg("%s: set slot %d (%d) attention status to %d\n", __func__,
|
||||
pr_debug("%s: set slot %d (%d) attention status to %d\n", __func__,
|
||||
ibm_slot->slot.slot_num, ibm_slot->slot.slot_id,
|
||||
(status ? 1 : 0));
|
||||
|
||||
@ -202,10 +192,10 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
||||
|
||||
stat = acpi_evaluate_integer(ibm_acpi_handle, "APLS", ¶ms, &rc);
|
||||
if (ACPI_FAILURE(stat)) {
|
||||
err("APLS evaluation failed: 0x%08x\n", stat);
|
||||
pr_err("APLS evaluation failed: 0x%08x\n", stat);
|
||||
return -ENODEV;
|
||||
} else if (!rc) {
|
||||
err("APLS method failed: 0x%08llx\n", rc);
|
||||
pr_err("APLS method failed: 0x%08llx\n", rc);
|
||||
return -ERANGE;
|
||||
}
|
||||
return 0;
|
||||
@ -234,7 +224,7 @@ static int ibm_get_attention_status(struct hotplug_slot *slot, u8 *status)
|
||||
else
|
||||
*status = 0;
|
||||
|
||||
dbg("%s: get slot %d (%d) attention status is %d\n", __func__,
|
||||
pr_debug("%s: get slot %d (%d) attention status is %d\n", __func__,
|
||||
ibm_slot->slot.slot_num, ibm_slot->slot.slot_id,
|
||||
*status);
|
||||
|
||||
@ -266,10 +256,10 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
|
||||
u8 subevent = event & 0xf0;
|
||||
struct notification *note = context;
|
||||
|
||||
dbg("%s: Received notification %02x\n", __func__, event);
|
||||
pr_debug("%s: Received notification %02x\n", __func__, event);
|
||||
|
||||
if (subevent == 0x80) {
|
||||
dbg("%s: generationg bus event\n", __func__);
|
||||
pr_debug("%s: generationg bus event\n", __func__);
|
||||
acpi_bus_generate_netlink_event(note->device->pnp.device_class,
|
||||
dev_name(¬e->device->dev),
|
||||
note->event, detail);
|
||||
@ -301,7 +291,7 @@ static int ibm_get_table_from_acpi(char **bufp)
|
||||
|
||||
status = acpi_evaluate_object(ibm_acpi_handle, "APCI", NULL, &buffer);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
err("%s: APCI evaluation failed\n", __func__);
|
||||
pr_err("%s: APCI evaluation failed\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -309,13 +299,13 @@ static int ibm_get_table_from_acpi(char **bufp)
|
||||
if (!(package) ||
|
||||
(package->type != ACPI_TYPE_PACKAGE) ||
|
||||
!(package->package.elements)) {
|
||||
err("%s: Invalid APCI object\n", __func__);
|
||||
pr_err("%s: Invalid APCI object\n", __func__);
|
||||
goto read_table_done;
|
||||
}
|
||||
|
||||
for(size = 0, i = 0; i < package->package.count; i++) {
|
||||
if (package->package.elements[i].type != ACPI_TYPE_BUFFER) {
|
||||
err("%s: Invalid APCI element %d\n", __func__, i);
|
||||
pr_err("%s: Invalid APCI element %d\n", __func__, i);
|
||||
goto read_table_done;
|
||||
}
|
||||
size += package->package.elements[i].buffer.length;
|
||||
@ -325,7 +315,7 @@ static int ibm_get_table_from_acpi(char **bufp)
|
||||
goto read_table_done;
|
||||
|
||||
lbuf = kzalloc(size, GFP_KERNEL);
|
||||
dbg("%s: element count: %i, ASL table size: %i, &table = 0x%p\n",
|
||||
pr_debug("%s: element count: %i, ASL table size: %i, &table = 0x%p\n",
|
||||
__func__, package->package.count, size, lbuf);
|
||||
|
||||
if (lbuf) {
|
||||
@ -370,8 +360,8 @@ static ssize_t ibm_read_apci_table(struct file *filp, struct kobject *kobj,
|
||||
{
|
||||
int bytes_read = -EINVAL;
|
||||
char *table = NULL;
|
||||
|
||||
dbg("%s: pos = %d, size = %zd\n", __func__, (int)pos, size);
|
||||
|
||||
pr_debug("%s: pos = %d, size = %zd\n", __func__, (int)pos, size);
|
||||
|
||||
if (pos == 0) {
|
||||
bytes_read = ibm_get_table_from_acpi(&table);
|
||||
@ -403,7 +393,7 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
||||
|
||||
status = acpi_get_object_info(handle, &info);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
err("%s: Failed to get device information status=0x%x\n",
|
||||
pr_err("%s: Failed to get device information status=0x%x\n",
|
||||
__func__, status);
|
||||
return retval;
|
||||
}
|
||||
@ -411,7 +401,7 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
||||
if (info->current_status && (info->valid & ACPI_VALID_HID) &&
|
||||
(!strcmp(info->hardware_id.string, IBM_HARDWARE_ID1) ||
|
||||
!strcmp(info->hardware_id.string, IBM_HARDWARE_ID2))) {
|
||||
dbg("found hardware: %s, handle: %p\n",
|
||||
pr_debug("found hardware: %s, handle: %p\n",
|
||||
info->hardware_id.string, handle);
|
||||
*phandle = handle;
|
||||
/* returning non-zero causes the search to stop
|
||||
@ -432,18 +422,18 @@ static int __init ibm_acpiphp_init(void)
|
||||
struct acpi_device *device;
|
||||
struct kobject *sysdir = &pci_slots_kset->kobj;
|
||||
|
||||
dbg("%s\n", __func__);
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
if (acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
|
||||
ACPI_UINT32_MAX, ibm_find_acpi_device, NULL,
|
||||
&ibm_acpi_handle, NULL) != FOUND_APCI) {
|
||||
err("%s: acpi_walk_namespace failed\n", __func__);
|
||||
pr_err("%s: acpi_walk_namespace failed\n", __func__);
|
||||
retval = -ENODEV;
|
||||
goto init_return;
|
||||
}
|
||||
dbg("%s: found IBM aPCI device\n", __func__);
|
||||
pr_debug("%s: found IBM aPCI device\n", __func__);
|
||||
if (acpi_bus_get_device(ibm_acpi_handle, &device)) {
|
||||
err("%s: acpi_bus_get_device failed\n", __func__);
|
||||
pr_err("%s: acpi_bus_get_device failed\n", __func__);
|
||||
retval = -ENODEV;
|
||||
goto init_return;
|
||||
}
|
||||
@ -457,7 +447,7 @@ static int __init ibm_acpiphp_init(void)
|
||||
ACPI_DEVICE_NOTIFY, ibm_handle_events,
|
||||
&ibm_note);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
err("%s: Failed to register notification handler\n",
|
||||
pr_err("%s: Failed to register notification handler\n",
|
||||
__func__);
|
||||
retval = -EBUSY;
|
||||
goto init_cleanup;
|
||||
@ -479,17 +469,17 @@ static void __exit ibm_acpiphp_exit(void)
|
||||
acpi_status status;
|
||||
struct kobject *sysdir = &pci_slots_kset->kobj;
|
||||
|
||||
dbg("%s\n", __func__);
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
if (acpiphp_unregister_attention(&ibm_attention_info))
|
||||
err("%s: attention info deregistration failed", __func__);
|
||||
pr_err("%s: attention info deregistration failed", __func__);
|
||||
|
||||
status = acpi_remove_notify_handler(
|
||||
ibm_acpi_handle,
|
||||
ACPI_DEVICE_NOTIFY,
|
||||
ibm_handle_events);
|
||||
if (ACPI_FAILURE(status))
|
||||
err("%s: Notification handler removal failed\n", __func__);
|
||||
pr_err("%s: Notification handler removal failed\n", __func__);
|
||||
/* remove the /sys entries */
|
||||
sysfs_remove_bin_file(sysdir, &ibm_apci_table_attr);
|
||||
}
|
||||
|
@ -2854,7 +2854,7 @@ void __weak pcibios_set_master(struct pci_dev *dev)
|
||||
lat = pcibios_max_latency;
|
||||
else
|
||||
return;
|
||||
dev_printk(KERN_DEBUG, &dev->dev, "setting latency timer to %d\n", lat);
|
||||
|
||||
pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
|
||||
}
|
||||
|
||||
|
@ -983,7 +983,6 @@ void set_pcie_port_type(struct pci_dev *pdev)
|
||||
pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
|
||||
if (!pos)
|
||||
return;
|
||||
pdev->is_pcie = 1;
|
||||
pdev->pcie_cap = pos;
|
||||
pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16);
|
||||
pdev->pcie_flags_reg = reg16;
|
||||
|
@ -2954,6 +2954,29 @@ static void disable_igfx_irq(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
|
||||
|
||||
/*
|
||||
* PCI devices which are on Intel chips can skip the 10ms delay
|
||||
* before entering D3 mode.
|
||||
*/
|
||||
static void quirk_remove_d3_delay(struct pci_dev *dev)
|
||||
{
|
||||
dev->d3_delay = 0;
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0c00, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0412, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0c0c, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c31, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c3a, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c3d, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c2d, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c20, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c18, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c1c, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c26, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c4e, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c02, quirk_remove_d3_delay);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x8c22, quirk_remove_d3_delay);
|
||||
|
||||
/*
|
||||
* Some devices may pass our check in pci_intx_mask_supported if
|
||||
* PCI_COMMAND_INTX_DISABLE works though they actually do not properly
|
||||
|
@ -982,7 +982,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
|
||||
}
|
||||
|
||||
min_align = calculate_mem_align(aligns, max_order);
|
||||
min_align = max(min_align, window_alignment(bus, b_res->flags & mask));
|
||||
min_align = max(min_align, window_alignment(bus, b_res->flags));
|
||||
size0 = calculate_memsize(size, min_size, 0, resource_size(b_res), min_align);
|
||||
if (children_add_size > add_size)
|
||||
add_size = children_add_size;
|
||||
@ -1136,7 +1136,7 @@ void __ref __pci_bus_size_bridges(struct pci_bus *bus,
|
||||
}
|
||||
|
||||
/* The root bus? */
|
||||
if (!bus->self)
|
||||
if (pci_is_root_bus(bus))
|
||||
return;
|
||||
|
||||
switch (bus->self->class >> 8) {
|
||||
|
@ -494,18 +494,14 @@ qla24xx_pci_info_str(struct scsi_qla_host *vha, char *str)
|
||||
static char *pci_bus_modes[] = { "33", "66", "100", "133", };
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
uint32_t pci_bus;
|
||||
int pcie_reg;
|
||||
|
||||
pcie_reg = pci_pcie_cap(ha->pdev);
|
||||
if (pcie_reg) {
|
||||
if (pci_is_pcie(ha->pdev)) {
|
||||
char lwstr[6];
|
||||
uint16_t pcie_lstat, lspeed, lwidth;
|
||||
uint32_t lstat, lspeed, lwidth;
|
||||
|
||||
pcie_reg += PCI_EXP_LNKCAP;
|
||||
pci_read_config_word(ha->pdev, pcie_reg, &pcie_lstat);
|
||||
lspeed = pcie_lstat & (BIT_0 | BIT_1 | BIT_2 | BIT_3);
|
||||
lwidth = (pcie_lstat &
|
||||
(BIT_4 | BIT_5 | BIT_6 | BIT_7 | BIT_8 | BIT_9)) >> 4;
|
||||
pcie_capability_read_dword(ha->pdev, PCI_EXP_LNKCAP, &lstat);
|
||||
lspeed = lstat & PCI_EXP_LNKCAP_SLS;
|
||||
lwidth = (lstat & PCI_EXP_LNKCAP_MLW) >> 4;
|
||||
|
||||
strcpy(str, "PCIe (");
|
||||
switch (lspeed) {
|
||||
|
@ -330,8 +330,6 @@ struct pci_dev {
|
||||
unsigned int msix_enabled:1;
|
||||
unsigned int ari_enabled:1; /* ARI forwarding */
|
||||
unsigned int is_managed:1;
|
||||
unsigned int is_pcie:1; /* Obsolete. Will be removed.
|
||||
Use pci_is_pcie() instead */
|
||||
unsigned int needs_freset:1; /* Dev requires fundamental reset */
|
||||
unsigned int state_saved:1;
|
||||
unsigned int is_physfn:1;
|
||||
@ -472,6 +470,10 @@ struct pci_bus {
|
||||
/*
|
||||
* Returns true if the pci bus is root (behind host-pci bridge),
|
||||
* false otherwise
|
||||
*
|
||||
* Some code assumes that "bus->self == NULL" means that bus is a root bus.
|
||||
* This is incorrect because "virtual" buses added for SR-IOV (via
|
||||
* virtfn_add_bus()) have "bus->self == NULL" but are not root buses.
|
||||
*/
|
||||
static inline bool pci_is_root_bus(struct pci_bus *pbus)
|
||||
{
|
||||
@ -1749,11 +1751,11 @@ static inline int pci_pcie_cap(struct pci_dev *dev)
|
||||
* pci_is_pcie - check if the PCI device is PCI Express capable
|
||||
* @dev: PCI device
|
||||
*
|
||||
* Retrun true if the PCI device is PCI Express capable, false otherwise.
|
||||
* Returns: true if the PCI device is PCI Express capable, false otherwise.
|
||||
*/
|
||||
static inline bool pci_is_pcie(struct pci_dev *dev)
|
||||
{
|
||||
return !!pci_pcie_cap(dev);
|
||||
return pci_pcie_cap(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -319,7 +319,6 @@
|
||||
#define PCI_MSIX_PBA 8 /* Pending Bit Array offset */
|
||||
#define PCI_MSIX_PBA_BIR 0x00000007 /* BAR index */
|
||||
#define PCI_MSIX_PBA_OFFSET 0xfffffff8 /* Offset into specified BAR */
|
||||
#define PCI_MSIX_FLAGS_BIRMASK (7 << 0) /* deprecated */
|
||||
#define PCI_CAP_MSIX_SIZEOF 12 /* size of MSIX registers */
|
||||
|
||||
/* MSI-X entry's format */
|
||||
|
Loading…
x
Reference in New Issue
Block a user