Merge branch 'release-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-acpi-merge-2.6
* 'release-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-acpi-merge-2.6: (87 commits) Fix FADT parsing Add the ability to reset the machine using the RESET_REG in ACPI's FADT table. ACPI: use dev_printk when possible PNPACPI: add support for HP vendor-specific CCSR descriptors PNP: avoid legacy IDE IRQs PNP: convert resource options to single linked list ISAPNP: handle independent options following dependent ones PNP: remove extra 0x100 bit from option priority PNP: support optional IRQ resources PNP: rename pnp_register_*_resource() local variables PNPACPI: ignore _PRS interrupt numbers larger than PNP_IRQ_NR PNP: centralize resource option allocations PNP: remove redundant pnp_can_configure() check PNP: make resource assignment functions return 0 (success) or -EBUSY (failure) PNP: in debug resource dump, make empty list obvious PNP: improve resource assignment debug PNP: increase I/O port & memory option address sizes PNP: introduce pnp_irq_mask_t typedef PNP: make resource option structures private to PNP subsystem PNP: define PNP-specific IORESOURCE_IO_* flags alongside IRQ, DMA, MEM ...
This commit is contained in:
@@ -127,6 +127,15 @@ static inline void set_freezable(void)
|
||||
current->flags &= ~PF_NOFREEZE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tell the freezer that the current task should be frozen by it and that it
|
||||
* should send a fake signal to the task to freeze it.
|
||||
*/
|
||||
static inline void set_freezable_with_signal(void)
|
||||
{
|
||||
current->flags &= ~(PF_NOFREEZE | PF_FREEZER_NOSIG);
|
||||
}
|
||||
|
||||
/*
|
||||
* Freezer-friendly wrappers around wait_event_interruptible() and
|
||||
* wait_event_interruptible_timeout(), originally defined in <linux/wait.h>
|
||||
@@ -174,6 +183,7 @@ static inline void freezer_do_not_count(void) {}
|
||||
static inline void freezer_count(void) {}
|
||||
static inline int freezer_should_skip(struct task_struct *p) { return 0; }
|
||||
static inline void set_freezable(void) {}
|
||||
static inline void set_freezable_with_signal(void) {}
|
||||
|
||||
#define wait_event_freezable(wq, condition) \
|
||||
wait_event_interruptible(wq, condition)
|
||||
|
||||
@@ -59,6 +59,7 @@ struct resource_list {
|
||||
#define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
|
||||
#define IORESOURCE_IRQ_LOWLEVEL (1<<3)
|
||||
#define IORESOURCE_IRQ_SHAREABLE (1<<4)
|
||||
#define IORESOURCE_IRQ_OPTIONAL (1<<5)
|
||||
|
||||
/* PnP DMA specific bits (IORESOURCE_BITS) */
|
||||
#define IORESOURCE_DMA_TYPE_MASK (3<<0)
|
||||
@@ -88,6 +89,10 @@ struct resource_list {
|
||||
#define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */
|
||||
#define IORESOURCE_MEM_EXPANSIONROM (1<<6)
|
||||
|
||||
/* PnP I/O specific bits (IORESOURCE_BITS) */
|
||||
#define IORESOURCE_IO_16BIT_ADDR (1<<0)
|
||||
#define IORESOURCE_IO_FIXED (1<<1)
|
||||
|
||||
/* PCI ROM control bits (IORESOURCE_BITS) */
|
||||
#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
|
||||
#define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */
|
||||
|
||||
+78
-68
@@ -1,6 +1,8 @@
|
||||
/*
|
||||
* Linux Plug and Play Support
|
||||
* Copyright by Adam Belay <ambx1@neo.rr.com>
|
||||
* Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
|
||||
* Bjorn Helgaas <bjorn.helgaas@hp.com>
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_PNP_H
|
||||
@@ -15,7 +17,6 @@
|
||||
|
||||
struct pnp_protocol;
|
||||
struct pnp_dev;
|
||||
struct pnp_resource_table;
|
||||
|
||||
/*
|
||||
* Resource Management
|
||||
@@ -24,7 +25,14 @@ struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
|
||||
|
||||
static inline int pnp_resource_valid(struct resource *res)
|
||||
{
|
||||
if (res && !(res->flags & IORESOURCE_UNSET))
|
||||
if (res)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pnp_resource_enabled(struct resource *res)
|
||||
{
|
||||
if (res && !(res->flags & IORESOURCE_DISABLED))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -40,19 +48,31 @@ static inline resource_size_t pnp_resource_len(struct resource *res)
|
||||
static inline resource_size_t pnp_port_start(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_IO, bar)->start;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->start;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline resource_size_t pnp_port_end(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_IO, bar)->end;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->end;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned long pnp_port_flags(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_IO, bar)->flags;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->flags;
|
||||
return IORESOURCE_IO | IORESOURCE_AUTO;
|
||||
}
|
||||
|
||||
static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
@@ -63,25 +83,41 @@ static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
static inline resource_size_t pnp_port_len(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_IO, bar));
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IO, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return pnp_resource_len(res);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static inline resource_size_t pnp_mem_start(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_MEM, bar)->start;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->start;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline resource_size_t pnp_mem_end(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_MEM, bar)->end;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->end;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned long pnp_mem_flags(struct pnp_dev *dev, unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_MEM, bar)->flags;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->flags;
|
||||
return IORESOURCE_MEM | IORESOURCE_AUTO;
|
||||
}
|
||||
|
||||
static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
@@ -92,18 +128,30 @@ static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
static inline resource_size_t pnp_mem_len(struct pnp_dev *dev,
|
||||
unsigned int bar)
|
||||
{
|
||||
return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_MEM, bar));
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_MEM, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return pnp_resource_len(res);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static inline resource_size_t pnp_irq(struct pnp_dev *dev, unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->start;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IRQ, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->start;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline unsigned long pnp_irq_flags(struct pnp_dev *dev, unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->flags;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_IRQ, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->flags;
|
||||
return IORESOURCE_IRQ | IORESOURCE_AUTO;
|
||||
}
|
||||
|
||||
static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
@@ -114,12 +162,20 @@ static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
|
||||
static inline resource_size_t pnp_dma(struct pnp_dev *dev, unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_DMA, bar)->start;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_DMA, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->start;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline unsigned long pnp_dma_flags(struct pnp_dev *dev, unsigned int bar)
|
||||
{
|
||||
return pnp_get_resource(dev, IORESOURCE_DMA, bar)->flags;
|
||||
struct resource *res = pnp_get_resource(dev, IORESOURCE_DMA, bar);
|
||||
|
||||
if (pnp_resource_valid(res))
|
||||
return res->flags;
|
||||
return IORESOURCE_DMA | IORESOURCE_AUTO;
|
||||
}
|
||||
|
||||
static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
@@ -128,57 +184,6 @@ static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar)
|
||||
}
|
||||
|
||||
|
||||
#define PNP_PORT_FLAG_16BITADDR (1<<0)
|
||||
#define PNP_PORT_FLAG_FIXED (1<<1)
|
||||
|
||||
struct pnp_port {
|
||||
unsigned short min; /* min base number */
|
||||
unsigned short max; /* max base number */
|
||||
unsigned char align; /* align boundary */
|
||||
unsigned char size; /* size of range */
|
||||
unsigned char flags; /* port flags */
|
||||
unsigned char pad; /* pad */
|
||||
struct pnp_port *next; /* next port */
|
||||
};
|
||||
|
||||
#define PNP_IRQ_NR 256
|
||||
struct pnp_irq {
|
||||
DECLARE_BITMAP(map, PNP_IRQ_NR); /* bitmask for IRQ lines */
|
||||
unsigned char flags; /* IRQ flags */
|
||||
unsigned char pad; /* pad */
|
||||
struct pnp_irq *next; /* next IRQ */
|
||||
};
|
||||
|
||||
struct pnp_dma {
|
||||
unsigned char map; /* bitmask for DMA channels */
|
||||
unsigned char flags; /* DMA flags */
|
||||
struct pnp_dma *next; /* next port */
|
||||
};
|
||||
|
||||
struct pnp_mem {
|
||||
unsigned int min; /* min base number */
|
||||
unsigned int max; /* max base number */
|
||||
unsigned int align; /* align boundary */
|
||||
unsigned int size; /* size of range */
|
||||
unsigned char flags; /* memory flags */
|
||||
unsigned char pad; /* pad */
|
||||
struct pnp_mem *next; /* next memory resource */
|
||||
};
|
||||
|
||||
#define PNP_RES_PRIORITY_PREFERRED 0
|
||||
#define PNP_RES_PRIORITY_ACCEPTABLE 1
|
||||
#define PNP_RES_PRIORITY_FUNCTIONAL 2
|
||||
#define PNP_RES_PRIORITY_INVALID 65535
|
||||
|
||||
struct pnp_option {
|
||||
unsigned short priority; /* priority */
|
||||
struct pnp_port *port; /* first port */
|
||||
struct pnp_irq *irq; /* first IRQ */
|
||||
struct pnp_dma *dma; /* first DMA */
|
||||
struct pnp_mem *mem; /* first memory resource */
|
||||
struct pnp_option *next; /* used to chain dependent resources */
|
||||
};
|
||||
|
||||
/*
|
||||
* Device Management
|
||||
*/
|
||||
@@ -246,9 +251,9 @@ struct pnp_dev {
|
||||
|
||||
int active;
|
||||
int capabilities;
|
||||
struct pnp_option *independent;
|
||||
struct pnp_option *dependent;
|
||||
struct pnp_resource_table *res;
|
||||
unsigned int num_dependent_sets;
|
||||
struct list_head resources;
|
||||
struct list_head options;
|
||||
|
||||
char name[PNP_NAME_LEN]; /* contains a human-readable name */
|
||||
int flags; /* used by protocols */
|
||||
@@ -425,6 +430,8 @@ void pnp_unregister_card_driver(struct pnp_card_driver *drv);
|
||||
extern struct list_head pnp_cards;
|
||||
|
||||
/* resource management */
|
||||
int pnp_possible_config(struct pnp_dev *dev, int type, resource_size_t base,
|
||||
resource_size_t size);
|
||||
int pnp_auto_config_dev(struct pnp_dev *dev);
|
||||
int pnp_start_dev(struct pnp_dev *dev);
|
||||
int pnp_stop_dev(struct pnp_dev *dev);
|
||||
@@ -452,6 +459,9 @@ static inline int pnp_register_card_driver(struct pnp_card_driver *drv) { return
|
||||
static inline void pnp_unregister_card_driver(struct pnp_card_driver *drv) { }
|
||||
|
||||
/* resource management */
|
||||
static inline int pnp_possible_config(struct pnp_dev *dev, int type,
|
||||
resource_size_t base,
|
||||
resource_size_t size) { return 0; }
|
||||
static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
|
||||
@@ -1494,6 +1494,7 @@ static inline void put_task_struct(struct task_struct *t)
|
||||
#define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */
|
||||
#define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */
|
||||
#define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */
|
||||
#define PF_FREEZER_NOSIG 0x80000000 /* Freezer won't send signals to it */
|
||||
|
||||
/*
|
||||
* Only the _current_ task can read/write to tsk->flags, but other
|
||||
|
||||
Reference in New Issue
Block a user