Pull pnp into release branch
This commit is contained in:
commit
a6729753a7
@ -25,13 +25,13 @@ static const struct pnp_card_device_id *match_card(struct pnp_card_driver *drv,
|
|||||||
int found;
|
int found;
|
||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
|
|
||||||
if (i == PNP_MAX_DEVICES
|
if (i == PNP_MAX_DEVICES ||
|
||||||
|| !*drv_id->devs[i].id)
|
!*drv_id->devs[i].id)
|
||||||
return drv_id;
|
return drv_id;
|
||||||
found = 0;
|
found = 0;
|
||||||
card_for_each_dev(card, dev) {
|
card_for_each_dev(card, dev) {
|
||||||
if (compare_pnp_id
|
if (compare_pnp_id(dev->id,
|
||||||
(dev->id, drv_id->devs[i].id)) {
|
drv_id->devs[i].id)) {
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ static int pnp_interface_attach_card(struct pnp_card *card)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_name:
|
err_name:
|
||||||
device_remove_file(&card->dev, &dev_attr_name);
|
device_remove_file(&card->dev, &dev_attr_name);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -321,10 +321,10 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
|
|||||||
pos = pos->next;
|
pos = pos->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
dev->card_link = clink;
|
dev->card_link = clink;
|
||||||
dev->dev.driver = &drv->link.driver;
|
dev->dev.driver = &drv->link.driver;
|
||||||
if (pnp_bus_type.probe(&dev->dev))
|
if (pnp_bus_type.probe(&dev->dev))
|
||||||
@ -334,7 +334,7 @@ struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
|
|||||||
|
|
||||||
return dev;
|
return dev;
|
||||||
|
|
||||||
err_out:
|
err_out:
|
||||||
dev->dev.driver = NULL;
|
dev->dev.driver = NULL;
|
||||||
dev->card_link = NULL;
|
dev->card_link = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -52,9 +52,6 @@ int pnp_register_protocol(struct pnp_protocol *protocol)
|
|||||||
int nodenum;
|
int nodenum;
|
||||||
struct list_head *pos;
|
struct list_head *pos;
|
||||||
|
|
||||||
if (!protocol)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&protocol->devices);
|
INIT_LIST_HEAD(&protocol->devices);
|
||||||
INIT_LIST_HEAD(&protocol->cards);
|
INIT_LIST_HEAD(&protocol->cards);
|
||||||
nodenum = 0;
|
nodenum = 0;
|
||||||
@ -94,8 +91,6 @@ static void pnp_free_ids(struct pnp_dev *dev)
|
|||||||
struct pnp_id *id;
|
struct pnp_id *id;
|
||||||
struct pnp_id *next;
|
struct pnp_id *next;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return;
|
|
||||||
id = dev->id;
|
id = dev->id;
|
||||||
while (id) {
|
while (id) {
|
||||||
next = id->next;
|
next = id->next;
|
||||||
@ -143,7 +138,7 @@ int __pnp_add_device(struct pnp_dev *dev)
|
|||||||
*/
|
*/
|
||||||
int pnp_add_device(struct pnp_dev *dev)
|
int pnp_add_device(struct pnp_dev *dev)
|
||||||
{
|
{
|
||||||
if (!dev || !dev->protocol || dev->card)
|
if (dev->card)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
dev->dev.parent = &dev->protocol->dev;
|
dev->dev.parent = &dev->protocol->dev;
|
||||||
sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
|
sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
|
||||||
|
@ -118,7 +118,7 @@ static int pnp_device_probe(struct device *dev)
|
|||||||
goto fail;
|
goto fail;
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pnp_device_detach(pnp_dev);
|
pnp_device_detach(pnp_dev);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@ -232,10 +232,6 @@ int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
struct pnp_id *ptr;
|
struct pnp_id *ptr;
|
||||||
|
|
||||||
if (!id)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
id->next = NULL;
|
id->next = NULL;
|
||||||
ptr = dev->id;
|
ptr = dev->id;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
|
@ -459,7 +459,8 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
|
|||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
done:
|
|
||||||
|
done:
|
||||||
if (retval < 0)
|
if (retval < 0)
|
||||||
return retval;
|
return retval;
|
||||||
return count;
|
return count;
|
||||||
@ -499,10 +500,10 @@ int pnp_interface_attach_device(struct pnp_dev *dev)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_res:
|
err_res:
|
||||||
device_remove_file(&dev->dev, &dev_attr_resources);
|
device_remove_file(&dev->dev, &dev_attr_resources);
|
||||||
err_opt:
|
err_opt:
|
||||||
device_remove_file(&dev->dev, &dev_attr_options);
|
device_remove_file(&dev->dev, &dev_attr_options);
|
||||||
err:
|
err:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,6 @@
|
|||||||
#if 0
|
#if 0
|
||||||
#define ISAPNP_REGION_OK
|
#define ISAPNP_REGION_OK
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
|
||||||
#define ISAPNP_DEBUG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int isapnp_disable; /* Disable ISA PnP */
|
int isapnp_disable; /* Disable ISA PnP */
|
||||||
static int isapnp_rdp; /* Read Data Port */
|
static int isapnp_rdp; /* Read Data Port */
|
||||||
@ -93,7 +90,6 @@ MODULE_LICENSE("GPL");
|
|||||||
|
|
||||||
static unsigned char isapnp_checksum_value;
|
static unsigned char isapnp_checksum_value;
|
||||||
static DEFINE_MUTEX(isapnp_cfg_mutex);
|
static DEFINE_MUTEX(isapnp_cfg_mutex);
|
||||||
static int isapnp_detected;
|
|
||||||
static int isapnp_csn_count;
|
static int isapnp_csn_count;
|
||||||
|
|
||||||
/* some prototypes */
|
/* some prototypes */
|
||||||
@ -335,7 +331,7 @@ static int __init isapnp_isolate(void)
|
|||||||
} else if (iteration > 1) {
|
} else if (iteration > 1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
__next:
|
__next:
|
||||||
if (csn == 255)
|
if (csn == 255)
|
||||||
break;
|
break;
|
||||||
checksum = 0x6a;
|
checksum = 0x6a;
|
||||||
@ -733,7 +729,7 @@ static int __init isapnp_create_device(struct pnp_card *card,
|
|||||||
"isapnp: unexpected or unknown tag type 0x%x for logical device %i (device %i), ignored\n",
|
"isapnp: unexpected or unknown tag type 0x%x for logical device %i (device %i), ignored\n",
|
||||||
type, dev->number, card->number);
|
type, dev->number, card->number);
|
||||||
}
|
}
|
||||||
__skip:
|
__skip:
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
isapnp_skip_bytes(size);
|
isapnp_skip_bytes(size);
|
||||||
}
|
}
|
||||||
@ -788,7 +784,7 @@ static void __init isapnp_parse_resource_map(struct pnp_card *card)
|
|||||||
"isapnp: unexpected or unknown tag type 0x%x for device %i, ignored\n",
|
"isapnp: unexpected or unknown tag type 0x%x for device %i, ignored\n",
|
||||||
type, card->number);
|
type, card->number);
|
||||||
}
|
}
|
||||||
__skip:
|
__skip:
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
isapnp_skip_bytes(size);
|
isapnp_skip_bytes(size);
|
||||||
}
|
}
|
||||||
@ -940,9 +936,6 @@ EXPORT_SYMBOL(isapnp_protocol);
|
|||||||
EXPORT_SYMBOL(isapnp_present);
|
EXPORT_SYMBOL(isapnp_present);
|
||||||
EXPORT_SYMBOL(isapnp_cfg_begin);
|
EXPORT_SYMBOL(isapnp_cfg_begin);
|
||||||
EXPORT_SYMBOL(isapnp_cfg_end);
|
EXPORT_SYMBOL(isapnp_cfg_end);
|
||||||
#if 0
|
|
||||||
EXPORT_SYMBOL(isapnp_read_byte);
|
|
||||||
#endif
|
|
||||||
EXPORT_SYMBOL(isapnp_write_byte);
|
EXPORT_SYMBOL(isapnp_write_byte);
|
||||||
|
|
||||||
static int isapnp_read_resources(struct pnp_dev *dev,
|
static int isapnp_read_resources(struct pnp_dev *dev,
|
||||||
@ -993,6 +986,7 @@ static int isapnp_get_resources(struct pnp_dev *dev,
|
|||||||
struct pnp_resource_table *res)
|
struct pnp_resource_table *res)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pnp_init_resource_table(res);
|
pnp_init_resource_table(res);
|
||||||
isapnp_cfg_begin(dev->card->number, dev->number);
|
isapnp_cfg_begin(dev->card->number, dev->number);
|
||||||
ret = isapnp_read_resources(dev, res);
|
ret = isapnp_read_resources(dev, res);
|
||||||
@ -1046,7 +1040,7 @@ static int isapnp_set_resources(struct pnp_dev *dev,
|
|||||||
|
|
||||||
static int isapnp_disable_resources(struct pnp_dev *dev)
|
static int isapnp_disable_resources(struct pnp_dev *dev)
|
||||||
{
|
{
|
||||||
if (!dev || !dev->active)
|
if (!dev->active)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
isapnp_cfg_begin(dev->card->number, dev->number);
|
isapnp_cfg_begin(dev->card->number, dev->number);
|
||||||
isapnp_deactivate(dev->number);
|
isapnp_deactivate(dev->number);
|
||||||
@ -1069,7 +1063,6 @@ static int __init isapnp_init(void)
|
|||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
|
|
||||||
if (isapnp_disable) {
|
if (isapnp_disable) {
|
||||||
isapnp_detected = 0;
|
|
||||||
printk(KERN_INFO "isapnp: ISA Plug & Play support disabled\n");
|
printk(KERN_INFO "isapnp: ISA Plug & Play support disabled\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1117,7 +1110,6 @@ static int __init isapnp_init(void)
|
|||||||
}
|
}
|
||||||
isapnp_set_rdp();
|
isapnp_set_rdp();
|
||||||
}
|
}
|
||||||
isapnp_detected = 1;
|
|
||||||
if (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff) {
|
if (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff) {
|
||||||
cards = isapnp_isolate();
|
cards = isapnp_isolate();
|
||||||
if (cards < 0 || (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff)) {
|
if (cards < 0 || (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff)) {
|
||||||
@ -1125,7 +1117,6 @@ static int __init isapnp_init(void)
|
|||||||
release_region(_PIDXR, 1);
|
release_region(_PIDXR, 1);
|
||||||
#endif
|
#endif
|
||||||
release_region(_PNPWRP, 1);
|
release_region(_PNPWRP, 1);
|
||||||
isapnp_detected = 0;
|
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"isapnp: No Plug & Play device found\n");
|
"isapnp: No Plug & Play device found\n");
|
||||||
return 0;
|
return 0;
|
||||||
@ -1148,13 +1139,12 @@ static int __init isapnp_init(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cards) {
|
if (cards)
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"isapnp: %i Plug & Play card%s detected total\n", cards,
|
"isapnp: %i Plug & Play card%s detected total\n", cards,
|
||||||
cards > 1 ? "s" : "");
|
cards > 1 ? "s" : "");
|
||||||
} else {
|
else
|
||||||
printk(KERN_INFO "isapnp: No Plug & Play card found\n");
|
printk(KERN_INFO "isapnp: No Plug & Play card found\n");
|
||||||
}
|
|
||||||
|
|
||||||
isapnp_proc_init();
|
isapnp_proc_init();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -112,33 +112,6 @@ static int isapnp_proc_attach_device(struct pnp_dev *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
static int __exit isapnp_proc_detach_device(struct pnp_dev *dev)
|
|
||||||
{
|
|
||||||
struct pnp_card *bus = dev->card;
|
|
||||||
struct proc_dir_entry *de;
|
|
||||||
char name[16];
|
|
||||||
|
|
||||||
if (!(de = bus->procdir))
|
|
||||||
return -EINVAL;
|
|
||||||
sprintf(name, "%02x", dev->number);
|
|
||||||
remove_proc_entry(name, de);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __exit isapnp_proc_detach_bus(struct pnp_card *bus)
|
|
||||||
{
|
|
||||||
struct proc_dir_entry *de;
|
|
||||||
char name[16];
|
|
||||||
|
|
||||||
if (!(de = bus->procdir))
|
|
||||||
return -EINVAL;
|
|
||||||
sprintf(name, "%02x", bus->number);
|
|
||||||
remove_proc_entry(name, isapnp_proc_bus_dir);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* MODULE */
|
|
||||||
|
|
||||||
int __init isapnp_proc_init(void)
|
int __init isapnp_proc_init(void)
|
||||||
{
|
{
|
||||||
struct pnp_dev *dev;
|
struct pnp_dev *dev;
|
||||||
@ -149,21 +122,3 @@ int __init isapnp_proc_init(void)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
int __exit isapnp_proc_done(void)
|
|
||||||
{
|
|
||||||
struct pnp_dev *dev;
|
|
||||||
struct pnp_bus *card;
|
|
||||||
|
|
||||||
isapnp_for_each_dev(dev) {
|
|
||||||
isapnp_proc_detach_device(dev);
|
|
||||||
}
|
|
||||||
isapnp_for_each_card(card) {
|
|
||||||
isapnp_proc_detach_bus(card);
|
|
||||||
}
|
|
||||||
if (isapnp_proc_bus_dir)
|
|
||||||
remove_proc_entry("isapnp", proc_bus);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* MODULE */
|
|
||||||
|
@ -21,9 +21,6 @@ static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx)
|
|||||||
resource_size_t *start, *end;
|
resource_size_t *start, *end;
|
||||||
unsigned long *flags;
|
unsigned long *flags;
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_PORT) {
|
if (idx >= PNP_MAX_PORT) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 4 ports is incompatible with pnp specifications.");
|
("More than 4 ports is incompatible with pnp specifications.");
|
||||||
@ -66,9 +63,6 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx)
|
|||||||
resource_size_t *start, *end;
|
resource_size_t *start, *end;
|
||||||
unsigned long *flags;
|
unsigned long *flags;
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_MEM) {
|
if (idx >= PNP_MAX_MEM) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 8 mems is incompatible with pnp specifications.");
|
("More than 8 mems is incompatible with pnp specifications.");
|
||||||
@ -127,9 +121,6 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx)
|
|||||||
5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2
|
5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_IRQ) {
|
if (idx >= PNP_MAX_IRQ) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 2 irqs is incompatible with pnp specifications.");
|
("More than 2 irqs is incompatible with pnp specifications.");
|
||||||
@ -181,9 +172,6 @@ static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
|
|||||||
1, 3, 5, 6, 7, 0, 2, 4
|
1, 3, 5, 6, 7, 0, 2, 4
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!dev || !rule)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (idx >= PNP_MAX_DMA) {
|
if (idx >= PNP_MAX_DMA) {
|
||||||
pnp_err
|
pnp_err
|
||||||
("More than 2 dmas is incompatible with pnp specifications.");
|
("More than 2 dmas is incompatible with pnp specifications.");
|
||||||
@ -390,7 +378,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum)
|
|||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pnp_clean_resource_table(&dev->res);
|
pnp_clean_resource_table(&dev->res);
|
||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
@ -410,8 +398,6 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
|
|||||||
int i;
|
int i;
|
||||||
struct pnp_resource_table *bak;
|
struct pnp_resource_table *bak;
|
||||||
|
|
||||||
if (!dev || !res)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!pnp_can_configure(dev))
|
if (!pnp_can_configure(dev))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
bak = pnp_alloc(sizeof(struct pnp_resource_table));
|
bak = pnp_alloc(sizeof(struct pnp_resource_table));
|
||||||
@ -444,7 +430,7 @@ int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
|
|||||||
kfree(bak);
|
kfree(bak);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
dev->res = *bak;
|
dev->res = *bak;
|
||||||
up(&pnp_res_mutex);
|
up(&pnp_res_mutex);
|
||||||
kfree(bak);
|
kfree(bak);
|
||||||
@ -460,9 +446,6 @@ int pnp_auto_config_dev(struct pnp_dev *dev)
|
|||||||
struct pnp_option *dep;
|
struct pnp_option *dep;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (!pnp_can_configure(dev)) {
|
if (!pnp_can_configure(dev)) {
|
||||||
pnp_dbg("Device %s does not support resource configuration.",
|
pnp_dbg("Device %s does not support resource configuration.",
|
||||||
dev->dev.bus_id);
|
dev->dev.bus_id);
|
||||||
@ -541,8 +524,6 @@ int pnp_activate_dev(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
if (dev->active)
|
if (dev->active)
|
||||||
return 0; /* the device is already active */
|
return 0; /* the device is already active */
|
||||||
|
|
||||||
@ -568,8 +549,6 @@ int pnp_disable_dev(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!dev->active)
|
if (!dev->active)
|
||||||
return 0; /* the device is already disabled */
|
return 0; /* the device is already disabled */
|
||||||
|
|
||||||
@ -596,8 +575,6 @@ int pnp_disable_dev(struct pnp_dev *dev)
|
|||||||
void pnp_resource_change(struct resource *resource, resource_size_t start,
|
void pnp_resource_change(struct resource *resource, resource_size_t start,
|
||||||
resource_size_t size)
|
resource_size_t size)
|
||||||
{
|
{
|
||||||
if (resource == NULL)
|
|
||||||
return;
|
|
||||||
resource->flags &= ~(IORESOURCE_AUTO | IORESOURCE_UNSET);
|
resource->flags &= ~(IORESOURCE_AUTO | IORESOURCE_UNSET);
|
||||||
resource->start = start;
|
resource->start = start;
|
||||||
resource->end = start + size - 1;
|
resource->end = start + size - 1;
|
||||||
|
@ -248,9 +248,9 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
|
|||||||
num++;
|
num++;
|
||||||
|
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
err1:
|
err1:
|
||||||
kfree(dev_id);
|
kfree(dev_id);
|
||||||
err:
|
err:
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -34,19 +34,17 @@
|
|||||||
*/
|
*/
|
||||||
static int irq_flags(int triggering, int polarity)
|
static int irq_flags(int triggering, int polarity)
|
||||||
{
|
{
|
||||||
int flag;
|
|
||||||
if (triggering == ACPI_LEVEL_SENSITIVE) {
|
if (triggering == ACPI_LEVEL_SENSITIVE) {
|
||||||
if (polarity == ACPI_ACTIVE_LOW)
|
if (polarity == ACPI_ACTIVE_LOW)
|
||||||
flag = IORESOURCE_IRQ_LOWLEVEL;
|
return IORESOURCE_IRQ_LOWLEVEL;
|
||||||
else
|
else
|
||||||
flag = IORESOURCE_IRQ_HIGHLEVEL;
|
return IORESOURCE_IRQ_HIGHLEVEL;
|
||||||
} else {
|
} else {
|
||||||
if (polarity == ACPI_ACTIVE_LOW)
|
if (polarity == ACPI_ACTIVE_LOW)
|
||||||
flag = IORESOURCE_IRQ_LOWEDGE;
|
return IORESOURCE_IRQ_LOWEDGE;
|
||||||
else
|
else
|
||||||
flag = IORESOURCE_IRQ_HIGHEDGE;
|
return IORESOURCE_IRQ_HIGHEDGE;
|
||||||
}
|
}
|
||||||
return flag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
static void decode_irq_flags(int flag, int *triggering, int *polarity)
|
||||||
@ -242,8 +240,7 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_resource_table *res
|
|||||||
static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
|
static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct pnp_resource_table *res_table =
|
struct pnp_resource_table *res_table = data;
|
||||||
(struct pnp_resource_table *)data;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (res->type) {
|
switch (res->type) {
|
||||||
@ -566,8 +563,7 @@ static acpi_status pnpacpi_option_resource(struct acpi_resource *res,
|
|||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
int priority = 0;
|
int priority = 0;
|
||||||
struct acpipnp_parse_option_s *parse_data =
|
struct acpipnp_parse_option_s *parse_data = data;
|
||||||
(struct acpipnp_parse_option_s *)data;
|
|
||||||
struct pnp_dev *dev = parse_data->dev;
|
struct pnp_dev *dev = parse_data->dev;
|
||||||
struct pnp_option *option = parse_data->option;
|
struct pnp_option *option = parse_data->option;
|
||||||
|
|
||||||
@ -705,7 +701,7 @@ static int pnpacpi_supported_resource(struct acpi_resource *res)
|
|||||||
static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
int *res_cnt = (int *)data;
|
int *res_cnt = data;
|
||||||
|
|
||||||
if (pnpacpi_supported_resource(res))
|
if (pnpacpi_supported_resource(res))
|
||||||
(*res_cnt)++;
|
(*res_cnt)++;
|
||||||
@ -714,7 +710,7 @@ static acpi_status pnpacpi_count_resources(struct acpi_resource *res,
|
|||||||
|
|
||||||
static acpi_status pnpacpi_type_resources(struct acpi_resource *res, void *data)
|
static acpi_status pnpacpi_type_resources(struct acpi_resource *res, void *data)
|
||||||
{
|
{
|
||||||
struct acpi_resource **resource = (struct acpi_resource **)data;
|
struct acpi_resource **resource = data;
|
||||||
|
|
||||||
if (pnpacpi_supported_resource(res)) {
|
if (pnpacpi_supported_resource(res)) {
|
||||||
(*resource)->type = res->type;
|
(*resource)->type = res->type;
|
||||||
@ -886,8 +882,7 @@ int pnpacpi_encode_resources(struct pnp_resource_table *res_table,
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
/* pnpacpi_build_resource_template allocates extra mem */
|
/* pnpacpi_build_resource_template allocates extra mem */
|
||||||
int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
|
int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
|
||||||
struct acpi_resource *resource =
|
struct acpi_resource *resource = buffer->pointer;
|
||||||
(struct acpi_resource *)buffer->pointer;
|
|
||||||
int port = 0, irq = 0, dma = 0, mem = 0;
|
int port = 0, irq = 0, dma = 0, mem = 0;
|
||||||
|
|
||||||
pnp_dbg("res cnt %d", res_cnt);
|
pnp_dbg("res cnt %d", res_cnt);
|
||||||
|
@ -419,7 +419,6 @@ static void __init build_devlist(void)
|
|||||||
static int pnpbios_disabled;
|
static int pnpbios_disabled;
|
||||||
int pnpbios_dont_use_current_config;
|
int pnpbios_dont_use_current_config;
|
||||||
|
|
||||||
#ifndef MODULE
|
|
||||||
static int __init pnpbios_setup(char *str)
|
static int __init pnpbios_setup(char *str)
|
||||||
{
|
{
|
||||||
int invert;
|
int invert;
|
||||||
@ -443,7 +442,6 @@ static int __init pnpbios_setup(char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
__setup("pnpbios=", pnpbios_setup);
|
__setup("pnpbios=", pnpbios_setup);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* PnP BIOS signature: "$PnP" */
|
/* PnP BIOS signature: "$PnP" */
|
||||||
#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24))
|
#define PNP_SIGNATURE (('$' << 0) + ('P' << 8) + ('n' << 16) + ('P' << 24))
|
||||||
@ -591,6 +589,7 @@ subsys_initcall(pnpbios_init);
|
|||||||
static int __init pnpbios_thread_init(void)
|
static int __init pnpbios_thread_init(void)
|
||||||
{
|
{
|
||||||
struct task_struct *task;
|
struct task_struct *task;
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_MERGE)
|
#if defined(CONFIG_PPC_MERGE)
|
||||||
if (check_legacy_ioport(PNPBIOS_BASE))
|
if (check_legacy_ioport(PNPBIOS_BASE))
|
||||||
return 0;
|
return 0;
|
||||||
@ -606,48 +605,7 @@ static int __init pnpbios_thread_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MODULE
|
|
||||||
|
|
||||||
/* init/main.c calls pnpbios_init early */
|
|
||||||
|
|
||||||
/* Start the kernel thread later: */
|
/* Start the kernel thread later: */
|
||||||
module_init(pnpbios_thread_init);
|
module_init(pnpbios_thread_init);
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/*
|
|
||||||
* N.B.: Building pnpbios as a module hasn't been fully implemented
|
|
||||||
*/
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
static int __init pnpbios_init_all(void)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = pnpbios_init();
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
r = pnpbios_thread_init();
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit pnpbios_exit(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_HOTPLUG
|
|
||||||
unloading = 1;
|
|
||||||
wait_for_completion(&unload_sem);
|
|
||||||
#endif
|
|
||||||
pnpbios_proc_exit();
|
|
||||||
/* We ought to free resources here */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(pnpbios_init_all);
|
|
||||||
module_exit(pnpbios_exit);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(pnpbios_protocol);
|
EXPORT_SYMBOL(pnpbios_protocol);
|
||||||
|
@ -212,7 +212,7 @@ static int proc_write_node(struct file *file, const char __user * buf,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = count;
|
ret = count;
|
||||||
out:
|
out:
|
||||||
kfree(node);
|
kfree(node);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ static unsigned char *pnpbios_parse_allocated_resource_data(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -298,6 +298,7 @@ static void pnpbios_parse_fixed_mem32_option(unsigned char *p, int size,
|
|||||||
struct pnp_option *option)
|
struct pnp_option *option)
|
||||||
{
|
{
|
||||||
struct pnp_mem *mem;
|
struct pnp_mem *mem;
|
||||||
|
|
||||||
mem = kzalloc(sizeof(struct pnp_mem), GFP_KERNEL);
|
mem = kzalloc(sizeof(struct pnp_mem), GFP_KERNEL);
|
||||||
if (!mem)
|
if (!mem)
|
||||||
return;
|
return;
|
||||||
@ -468,7 +469,7 @@ static unsigned char *pnpbios_parse_resource_option_data(unsigned char *p,
|
|||||||
return p + 2;
|
return p + 2;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -562,7 +563,7 @@ static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
@ -756,7 +757,7 @@ static unsigned char *pnpbios_encode_allocated_resource_data(unsigned char *p,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* an unkown tag */
|
default: /* an unkown tag */
|
||||||
len_err:
|
len_err:
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
"PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
|
||||||
tag, len);
|
tag, len);
|
||||||
|
@ -47,9 +47,6 @@ struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev)
|
|||||||
{
|
{
|
||||||
struct pnp_option *option;
|
struct pnp_option *option;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
option = pnp_build_option(PNP_RES_PRIORITY_PREFERRED);
|
option = pnp_build_option(PNP_RES_PRIORITY_PREFERRED);
|
||||||
|
|
||||||
/* this should never happen but if it does we'll try to continue */
|
/* this should never happen but if it does we'll try to continue */
|
||||||
@ -64,9 +61,6 @@ struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev,
|
|||||||
{
|
{
|
||||||
struct pnp_option *option;
|
struct pnp_option *option;
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
option = pnp_build_option(priority);
|
option = pnp_build_option(priority);
|
||||||
|
|
||||||
if (dev->dependent) {
|
if (dev->dependent) {
|
||||||
@ -83,11 +77,6 @@ int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data)
|
|||||||
{
|
{
|
||||||
struct pnp_irq *ptr;
|
struct pnp_irq *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->irq;
|
ptr = option->irq;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -112,11 +101,6 @@ int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data)
|
|||||||
{
|
{
|
||||||
struct pnp_dma *ptr;
|
struct pnp_dma *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->dma;
|
ptr = option->dma;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -132,11 +116,6 @@ int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data)
|
|||||||
{
|
{
|
||||||
struct pnp_port *ptr;
|
struct pnp_port *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->port;
|
ptr = option->port;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
@ -152,11 +131,6 @@ int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data)
|
|||||||
{
|
{
|
||||||
struct pnp_mem *ptr;
|
struct pnp_mem *ptr;
|
||||||
|
|
||||||
if (!option)
|
|
||||||
return -EINVAL;
|
|
||||||
if (!data)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ptr = option->mem;
|
ptr = option->mem;
|
||||||
while (ptr && ptr->next)
|
while (ptr && ptr->next)
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
|
Loading…
Reference in New Issue
Block a user