Commit 2f30a379 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/gregkh/linux/pci-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 0137957a 31aa0ea5
...@@ -156,11 +156,9 @@ Searching by both vendor/device and subsystem vendor/device ID: ...@@ -156,11 +156,9 @@ Searching by both vendor/device and subsystem vendor/device ID:
VENDOR_ID or DEVICE_ID. This allows searching for any device from a VENDOR_ID or DEVICE_ID. This allows searching for any device from a
specific vendor, for example. specific vendor, for example.
Note that these functions are not hotplug-safe. Their hotplug-safe These functions are hotplug-safe. They increment the reference count on
replacements are pci_get_device(), pci_get_class() and pci_get_subsys(). the pci_dev that they return. You must eventually (possibly at module unload)
They increment the reference count on the pci_dev that they return. decrement the reference count on these devices by calling pci_dev_put().
You must eventually (possibly at module unload) decrement the reference
count on these devices by calling pci_dev_put().
3. Enabling and disabling devices 3. Enabling and disabling devices
......
...@@ -51,7 +51,6 @@ rpadlpar_io-objs := rpadlpar_core.o \ ...@@ -51,7 +51,6 @@ rpadlpar_io-objs := rpadlpar_core.o \
pciehp-objs := pciehp_core.o \ pciehp-objs := pciehp_core.o \
pciehp_ctrl.o \ pciehp_ctrl.o \
pciehp_pci.o \ pciehp_pci.o \
pciehp_sysfs.o \
pciehp_hpc.o pciehp_hpc.o
ifdef CONFIG_ACPI_BUS ifdef CONFIG_ACPI_BUS
pciehp-objs += pciehprm_acpi.o pciehp-objs += pciehprm_acpi.o
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
/* local variables */ /* local variables */
static int debug; static int debug;
static char bridge[256]; static char *bridge;
static u8 bridge_busnr; static u8 bridge_busnr;
static u8 bridge_slot; static u8 bridge_slot;
static struct pci_bus *bus; static struct pci_bus *bus;
......
...@@ -207,9 +207,6 @@ struct resource_lists { ...@@ -207,9 +207,6 @@ struct resource_lists {
#define msg_button_cancel "PCI slot #%d - action canceled due to button press.\n" #define msg_button_cancel "PCI slot #%d - action canceled due to button press.\n"
#define msg_button_ignore "PCI slot #%d - button press ignored. (action in progress...)\n" #define msg_button_ignore "PCI slot #%d - button press ignored. (action in progress...)\n"
/* sysfs function for the hotplug controller info */
extern void pciehp_create_ctrl_files (struct controller *ctrl);
/* controller functions */ /* controller functions */
extern int pciehprm_find_available_resources (struct controller *ctrl); extern int pciehprm_find_available_resources (struct controller *ctrl);
extern int pciehp_event_start_thread (void); extern int pciehp_event_start_thread (void);
......
/*
* PCI Express Hot Plug Controller Driver
*
* Copyright (C) 1995,2001 Compaq Computer Corporation
* Copyright (C) 2001,2003 Greg Kroah-Hartman (greg@kroah.com)
* Copyright (C) 2001 IBM Corp.
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
* NON INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Send feedback to <greg@kroah.com>
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/workqueue.h>
#include <linux/pci.h>
#include "pciehp.h"
/* A few routines that create sysfs entries for the hot plug controller */
static ssize_t show_ctrl (struct device *dev, char *buf)
{
struct pci_dev *pci_dev;
struct controller *ctrl;
char * out = buf;
int index;
struct pci_resource *res;
pci_dev = container_of (dev, struct pci_dev, dev);
ctrl = pci_get_drvdata(pci_dev);
out += sprintf(buf, "Free resources: memory\n");
index = 11;
res = ctrl->mem_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "Free resources: prefetchable memory\n");
index = 11;
res = ctrl->p_mem_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "Free resources: IO\n");
index = 11;
res = ctrl->io_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "Free resources: bus numbers\n");
index = 11;
res = ctrl->bus_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
return out - buf;
}
static DEVICE_ATTR (ctrl, S_IRUGO, show_ctrl, NULL);
static ssize_t show_dev (struct device *dev, char *buf)
{
struct pci_dev *pci_dev;
struct controller *ctrl;
char * out = buf;
int index;
struct pci_resource *res;
struct pci_func *new_slot;
struct slot *slot;
pci_dev = container_of (dev, struct pci_dev, dev);
ctrl = pci_get_drvdata(pci_dev);
slot=ctrl->slot;
while (slot) {
new_slot = pciehp_slot_find(slot->bus, slot->device, 0);
if (!new_slot)
break;
out += sprintf(out, "assigned resources: memory\n");
index = 11;
res = new_slot->mem_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "assigned resources: prefetchable memory\n");
index = 11;
res = new_slot->p_mem_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "assigned resources: IO\n");
index = 11;
res = new_slot->io_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
out += sprintf(out, "assigned resources: bus numbers\n");
index = 11;
res = new_slot->bus_head;
while (res && index--) {
out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length);
res = res->next;
}
slot=slot->next;
}
return out - buf;
}
static DEVICE_ATTR (dev, S_IRUGO, show_dev, NULL);
void pciehp_create_ctrl_files (struct controller *ctrl)
{
device_create_file (&ctrl->pci_dev->dev, &dev_attr_ctrl);
device_create_file (&ctrl->pci_dev->dev, &dev_attr_dev);
}
...@@ -31,18 +31,17 @@ ...@@ -31,18 +31,17 @@
struct pci_dev *rpaphp_find_pci_dev(struct device_node *dn) struct pci_dev *rpaphp_find_pci_dev(struct device_node *dn)
{ {
struct pci_dev *retval_dev = NULL, *dev = NULL; struct pci_dev *dev = NULL;
char bus_id[BUS_ID_SIZE]; char bus_id[BUS_ID_SIZE];
sprintf(bus_id, "%04x:%02x:%02x.%d",dn->phb->global_number, sprintf(bus_id, "%04x:%02x:%02x.%d", dn->phb->global_number,
dn->busno, PCI_SLOT(dn->devfn), PCI_FUNC(dn->devfn)); dn->busno, PCI_SLOT(dn->devfn), PCI_FUNC(dn->devfn));
while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { for_each_pci_dev(dev) {
if (!strcmp(pci_name(dev), bus_id)) { if (!strcmp(pci_name(dev), bus_id)) {
retval_dev = dev;
break; break;
} }
} }
return retval_dev; return dev;
} }
EXPORT_SYMBOL_GPL(rpaphp_find_pci_dev); EXPORT_SYMBOL_GPL(rpaphp_find_pci_dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment