Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 1251
b: refs/heads/master
c: 82428b6
h: refs/heads/master
i:
  1249: 61cb130
  1247: f422a7e
v: v3
  • Loading branch information
David Brownell authored and Greg KH committed May 17, 2005
1 parent 9644359 commit 539a6b9
Show file tree
Hide file tree
Showing 19 changed files with 680 additions and 256 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 301216244b1e39c4346e56d38b079ca53d528580
refs/heads/master: 82428b62aa6294ea640c7e920a9224ecaf46db65
11 changes: 10 additions & 1 deletion trunk/drivers/base/power/resume.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,17 @@ extern int sysdev_resume(void);

int resume_device(struct device * dev)
{
if (dev->bus && dev->bus->resume)
if (dev->power.pm_parent
&& dev->power.pm_parent->power.power_state) {
dev_err(dev, "PM: resume from %d, parent %s still %d\n",
dev->power.power_state,
dev->power.pm_parent->bus_id,
dev->power.pm_parent->power.power_state);
}
if (dev->bus && dev->bus->resume) {
dev_dbg(dev,"resuming\n");
return dev->bus->resume(dev);
}
return 0;
}

Expand Down
13 changes: 7 additions & 6 deletions trunk/drivers/base/power/shutdown.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ int device_detach_shutdown(struct device * dev)
return 0;

if (dev->detach_state == DEVICE_PM_OFF) {
if (dev->driver && dev->driver->shutdown)
if (dev->driver && dev->driver->shutdown) {
dev_dbg(dev, "shutdown\n");
dev->driver->shutdown(dev);
}
return 0;
}
return dpm_runtime_suspend(dev, dev->detach_state);
Expand All @@ -52,13 +54,12 @@ void device_shutdown(void)
struct device * dev;

down_write(&devices_subsys.rwsem);
list_for_each_entry_reverse(dev, &devices_subsys.kset.list, kobj.entry) {
pr_debug("shutting down %s: ", dev->bus_id);
list_for_each_entry_reverse(dev, &devices_subsys.kset.list,
kobj.entry) {
if (dev->driver && dev->driver->shutdown) {
pr_debug("Ok\n");
dev_dbg(dev, "shutdown\n");
dev->driver->shutdown(dev);
} else
pr_debug("Ignored.\n");
}
}
up_write(&devices_subsys.rwsem);

Expand Down
17 changes: 15 additions & 2 deletions trunk/drivers/base/power/suspend.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,25 @@ int suspend_device(struct device * dev, pm_message_t state)
{
int error = 0;

dev_dbg(dev, "suspending\n");
if (dev->power.power_state) {
dev_dbg(dev, "PM: suspend %d-->%d\n",
dev->power.power_state, state);
}
if (dev->power.pm_parent
&& dev->power.pm_parent->power.power_state) {
dev_err(dev,
"PM: suspend %d->%d, parent %s already %d\n",
dev->power.power_state, state,
dev->power.pm_parent->bus_id,
dev->power.pm_parent->power.power_state);
}

dev->power.prev_state = dev->power.power_state;

if (dev->bus && dev->bus->suspend && !dev->power.power_state)
if (dev->bus && dev->bus->suspend && !dev->power.power_state) {
dev_dbg(dev, "suspending\n");
error = dev->bus->suspend(dev, state);
}

return error;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/char/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ raw_ioctl(struct inode *inode, struct file *filp,
{
struct block_device *bdev = filp->private_data;

return blkdev_ioctl(bdev->bd_inode, NULL, command, arg);
return blkdev_ioctl(bdev->bd_inode, filp, command, arg);
}

static void bind_device(struct raw_config_request *rq)
Expand Down
119 changes: 109 additions & 10 deletions trunk/drivers/pci/hotplug.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,116 @@ int pci_hotplug (struct device *dev, char **envp, int num_envp,
if ((buffer_size - length <= 0) || (i >= num_envp))
return -ENOMEM;

envp[i++] = scratch;
length += scnprintf (scratch, buffer_size - length,
"MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x\n",
pdev->vendor, pdev->device,
pdev->subsystem_vendor, pdev->subsystem_device,
(u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
(u8)(pdev->class));
if ((buffer_size - length <= 0) || (i >= num_envp))
return -ENOMEM;

envp[i] = NULL;

return 0;
}

static int pci_visit_bus (struct pci_visit * fn, struct pci_bus_wrapped *wrapped_bus, struct pci_dev_wrapped *wrapped_parent)
{
struct list_head *ln;
struct pci_dev *dev;
struct pci_dev_wrapped wrapped_dev;
int result = 0;

pr_debug("PCI: Scanning bus %04x:%02x\n", pci_domain_nr(wrapped_bus->bus),
wrapped_bus->bus->number);

if (fn->pre_visit_pci_bus) {
result = fn->pre_visit_pci_bus(wrapped_bus, wrapped_parent);
if (result)
return result;
}

ln = wrapped_bus->bus->devices.next;
while (ln != &wrapped_bus->bus->devices) {
dev = pci_dev_b(ln);
ln = ln->next;

memset(&wrapped_dev, 0, sizeof(struct pci_dev_wrapped));
wrapped_dev.dev = dev;

result = pci_visit_dev(fn, &wrapped_dev, wrapped_bus);
if (result)
return result;
}

if (fn->post_visit_pci_bus)
result = fn->post_visit_pci_bus(wrapped_bus, wrapped_parent);

return result;
}

static int pci_visit_bridge (struct pci_visit * fn,
struct pci_dev_wrapped *wrapped_dev,
struct pci_bus_wrapped *wrapped_parent)
{
struct pci_bus *bus;
struct pci_bus_wrapped wrapped_bus;
int result = 0;

pr_debug("PCI: Scanning bridge %s\n", pci_name(wrapped_dev->dev));

if (fn->visit_pci_dev) {
result = fn->visit_pci_dev(wrapped_dev, wrapped_parent);
if (result)
return result;
}

bus = wrapped_dev->dev->subordinate;
if (bus) {
memset(&wrapped_bus, 0, sizeof(struct pci_bus_wrapped));
wrapped_bus.bus = bus;

result = pci_visit_bus(fn, &wrapped_bus, wrapped_dev);
}
return result;
}

/**
* pci_visit_dev - scans the pci buses.
* @fn: callback functions that are called while visiting
* @wrapped_dev: the device to scan
* @wrapped_parent: the bus where @wrapped_dev is connected to
*
* Every bus and every function is presented to a custom
* function that can act upon it.
*/
int pci_visit_dev(struct pci_visit *fn, struct pci_dev_wrapped *wrapped_dev,
struct pci_bus_wrapped *wrapped_parent)
{
struct pci_dev* dev = wrapped_dev ? wrapped_dev->dev : NULL;
int result = 0;

if (!dev)
return 0;

if (fn->pre_visit_pci_dev) {
result = fn->pre_visit_pci_dev(wrapped_dev, wrapped_parent);
if (result)
return result;
}

switch (dev->class >> 8) {
case PCI_CLASS_BRIDGE_PCI:
result = pci_visit_bridge(fn, wrapped_dev,
wrapped_parent);
if (result)
return result;
break;
default:
pr_debug("PCI: Scanning device %s\n", pci_name(dev));
if (fn->visit_pci_dev) {
result = fn->visit_pci_dev (wrapped_dev,
wrapped_parent);
if (result)
return result;
}
}

if (fn->post_visit_pci_dev)
result = fn->post_visit_pci_dev(wrapped_dev, wrapped_parent);

return result;
}
EXPORT_SYMBOL(pci_visit_dev);
2 changes: 1 addition & 1 deletion trunk/drivers/pci/hotplug/cpci_hotplug.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#include <linux/types.h>
#include <linux/pci.h>

/* PICMG 2.1 R2.0 HS CSR bits: */
/* PICMG 2.12 R2.0 HS CSR bits: */
#define HS_CSR_INS 0x0080
#define HS_CSR_EXT 0x0040
#define HS_CSR_PI 0x0030
Expand Down
Loading

0 comments on commit 539a6b9

Please sign in to comment.