Commit 0d716f8c authored by Adam Belay's avatar Adam Belay

Preparations and Cleanups

Required for the remaining patches in this series.
parent 0dd22e54
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
pnp-card-$(CONFIG_PNP_CARD) = card.o pnp-card-$(CONFIG_PNP_CARD) = card.o
obj-y := core.o driver.o resource.o interface.o quirks.o names.o system.o $(pnp-card-y) obj-y := core.o driver.o resource.o manager.o support.o interface.o quirks.o names.o system.o $(pnp-card-y)
obj-$(CONFIG_PNPBIOS) += pnpbios/ obj-$(CONFIG_PNPBIOS) += pnpbios/
obj-$(CONFIG_ISAPNP) += isapnp/ obj-$(CONFIG_ISAPNP) += isapnp/
extern struct bus_type pnp_bus_type; extern struct bus_type pnp_bus_type;
extern spinlock_t pnp_lock; extern spinlock_t pnp_lock;
extern void *pnp_alloc(long size); void *pnp_alloc(long size);
extern int pnp_interface_attach_device(struct pnp_dev *dev); int pnp_interface_attach_device(struct pnp_dev *dev);
extern void pnp_name_device(struct pnp_dev *dev); void pnp_name_device(struct pnp_dev *dev);
extern void pnp_fixup_device(struct pnp_dev *dev); void pnp_fixup_device(struct pnp_dev *dev);
extern void pnp_free_resources(struct pnp_resources *resources); void pnp_free_resources(struct pnp_resources *resources);
extern int __pnp_add_device(struct pnp_dev *dev); int __pnp_add_device(struct pnp_dev *dev);
extern void __pnp_remove_device(struct pnp_dev *dev); void __pnp_remove_device(struct pnp_dev *dev);
/* resource conflict types */
#define CONFLICT_TYPE_NONE 0x0000 /* there are no conflicts, other than those in the link */
#define CONFLICT_TYPE_RESERVED 0x0001 /* the resource requested was reserved */
#define CONFLICT_TYPE_IN_USE 0x0002 /* there is a conflict because the resource is in use */
#define CONFLICT_TYPE_PCI 0x0004 /* there is a conflict with a pci device */
#define CONFLICT_TYPE_INVALID 0x0008 /* the resource requested is invalid */
#define CONFLICT_TYPE_INTERNAL 0x0010 /* resources within the device conflict with each ohter */
#define CONFLICT_TYPE_PNP_WARM 0x0020 /* there is a conflict with a pnp device that is active */
#define CONFLICT_TYPE_PNP_COLD 0x0040 /* there is a conflict with a pnp device that is disabled */
/* conflict search modes */
#define SEARCH_WARM 1 /* check for conflicts with active devices */
#define SEARCH_COLD 0 /* check for conflicts with disabled devices */
struct pnp_dev * pnp_check_port_conflicts(struct pnp_dev * dev, int idx, int mode);
int pnp_check_port(struct pnp_dev * dev, int idx);
struct pnp_dev * pnp_check_mem_conflicts(struct pnp_dev * dev, int idx, int mode);
int pnp_check_mem(struct pnp_dev * dev, int idx);
struct pnp_dev * pnp_check_irq_conflicts(struct pnp_dev * dev, int idx, int mode);
int pnp_check_irq(struct pnp_dev * dev, int idx);
struct pnp_dev * pnp_check_dma_conflicts(struct pnp_dev * dev, int idx, int mode);
int pnp_check_dma(struct pnp_dev * dev, int idx);
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
LIST_HEAD(pnp_cards); LIST_HEAD(pnp_cards);
static const struct pnp_card_device_id * match_card(struct pnpc_driver *drv, struct pnp_card *card) static const struct pnp_card_id * match_card(struct pnpc_driver *drv, struct pnp_card *card)
{ {
const struct pnp_card_device_id *drv_id = drv->id_table; const struct pnp_card_id *drv_id = drv->id_table;
while (*drv_id->id){ while (*drv_id->id){
if (compare_pnp_id(card->id,drv_id->id)) if (compare_pnp_id(card->id,drv_id->id))
return drv_id; return drv_id;
...@@ -106,7 +106,6 @@ int pnpc_add_card(struct pnp_card *card) ...@@ -106,7 +106,6 @@ int pnpc_add_card(struct pnp_card *card)
return -EINVAL; return -EINVAL;
sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number, card->number); sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number, card->number);
INIT_LIST_HEAD(&card->rdevs); INIT_LIST_HEAD(&card->rdevs);
strcpy(card->dev.name,card->name);
card->dev.parent = &card->protocol->dev; card->dev.parent = &card->protocol->dev;
card->dev.bus = &pnpc_bus_type; card->dev.bus = &pnpc_bus_type;
card->dev.release = &pnp_release_card; card->dev.release = &pnp_release_card;
...@@ -221,7 +220,7 @@ struct pnp_dev * pnp_request_card_device(struct pnp_card *card, const char *id, ...@@ -221,7 +220,7 @@ struct pnp_dev * pnp_request_card_device(struct pnp_card *card, const char *id,
cdrv = to_pnpc_driver(card->dev.driver); cdrv = to_pnpc_driver(card->dev.driver);
if (dev->active == 0) { if (dev->active == 0) {
if (!(cdrv->flags & PNPC_DRIVER_DO_NOT_ACTIVATE)) { if (!(cdrv->flags & PNPC_DRIVER_DO_NOT_ACTIVATE)) {
if(pnp_activate_dev(dev,NULL)<0) { if(pnp_activate_dev(dev)<0) {
pnp_device_detach(dev); pnp_device_detach(dev);
return NULL; return NULL;
} }
...@@ -286,7 +285,7 @@ static int pnpc_card_probe(struct device *dev) ...@@ -286,7 +285,7 @@ static int pnpc_card_probe(struct device *dev)
int error = 0; int error = 0;
struct pnpc_driver *drv = to_pnpc_driver(dev->driver); struct pnpc_driver *drv = to_pnpc_driver(dev->driver);
struct pnp_card *card = to_pnp_card(dev); struct pnp_card *card = to_pnp_card(dev);
const struct pnp_card_device_id *card_id = NULL; const struct pnp_card_id *card_id = NULL;
pnp_dbg("pnp: match found with the PnP card '%s' and the driver '%s'", dev->bus_id,drv->name); pnp_dbg("pnp: match found with the PnP card '%s' and the driver '%s'", dev->bus_id,drv->name);
......
...@@ -104,31 +104,29 @@ static void pnp_free_ids(struct pnp_dev *dev) ...@@ -104,31 +104,29 @@ static void pnp_free_ids(struct pnp_dev *dev)
static void pnp_release_device(struct device *dmdev) static void pnp_release_device(struct device *dmdev)
{ {
struct pnp_dev * dev = to_pnp_dev(dmdev); struct pnp_dev * dev = to_pnp_dev(dmdev);
if (dev->res) if (dev->possible)
pnp_free_resources(dev->res); pnp_free_resources(dev->possible);
pnp_free_ids(dev); pnp_free_ids(dev);
kfree(dev); kfree(dev);
} }
int __pnp_add_device(struct pnp_dev *dev) int __pnp_add_device(struct pnp_dev *dev)
{ {
int error = 0; int ret;
pnp_name_device(dev); pnp_name_device(dev);
pnp_fixup_device(dev); pnp_fixup_device(dev);
strncpy(dev->dev.name,dev->name,DEVICE_NAME_SIZE-1);
dev->dev.name[DEVICE_NAME_SIZE-1] = '\0';
dev->dev.bus = &pnp_bus_type; dev->dev.bus = &pnp_bus_type;
dev->dev.release = &pnp_release_device; dev->dev.release = &pnp_release_device;
dev->status = PNP_READY; dev->status = PNP_READY;
error = device_register(&dev->dev); spin_lock(&pnp_lock);
if (error == 0){ list_add_tail(&dev->global_list, &pnp_global);
spin_lock(&pnp_lock); list_add_tail(&dev->protocol_list, &dev->protocol->devices);
list_add_tail(&dev->global_list, &pnp_global); spin_unlock(&pnp_lock);
list_add_tail(&dev->protocol_list, &dev->protocol->devices); pnp_auto_config_dev(dev);
spin_unlock(&pnp_lock); ret = device_register(&dev->dev);
if (ret == 0)
pnp_interface_attach_device(dev); pnp_interface_attach_device(dev);
} return ret;
return error;
} }
/* /*
...@@ -172,7 +170,7 @@ void pnp_remove_device(struct pnp_dev *dev) ...@@ -172,7 +170,7 @@ void pnp_remove_device(struct pnp_dev *dev)
static int __init pnp_init(void) static int __init pnp_init(void)
{ {
printk(KERN_INFO "Linux Plug and Play Support v0.94 (c) Adam Belay\n"); printk(KERN_INFO "Linux Plug and Play Support v0.95 (c) Adam Belay\n");
return bus_register(&pnp_bus_type); return bus_register(&pnp_bus_type);
} }
......
...@@ -95,7 +95,7 @@ static int pnp_device_probe(struct device *dev) ...@@ -95,7 +95,7 @@ static int pnp_device_probe(struct device *dev)
pnp_dev = to_pnp_dev(dev); pnp_dev = to_pnp_dev(dev);
pnp_drv = to_pnp_driver(dev->driver); pnp_drv = to_pnp_driver(dev->driver);
pnp_dbg("pnp: match found with the PnP device '%s' and the driver '%s'", dev->bus_id,pnp_drv->name); pnp_dbg("match found with the PnP device '%s' and the driver '%s'", dev->bus_id,pnp_drv->name);
error = pnp_device_attach(pnp_dev); error = pnp_device_attach(pnp_dev);
if (error < 0) if (error < 0)
...@@ -103,7 +103,7 @@ static int pnp_device_probe(struct device *dev) ...@@ -103,7 +103,7 @@ static int pnp_device_probe(struct device *dev)
if (pnp_dev->active == 0) { if (pnp_dev->active == 0) {
if (!(pnp_drv->flags & PNP_DRIVER_DO_NOT_ACTIVATE)) { if (!(pnp_drv->flags & PNP_DRIVER_DO_NOT_ACTIVATE)) {
error = pnp_activate_dev(pnp_dev, NULL); error = pnp_activate_dev(pnp_dev);
if (error < 0) if (error < 0)
return error; return error;
} }
......
...@@ -30,7 +30,7 @@ void ...@@ -30,7 +30,7 @@ void
pnp_name_device(struct pnp_dev *dev) pnp_name_device(struct pnp_dev *dev)
{ {
int i; int i;
char *name = dev->name; char *name = dev->dev.name;
for(i=0; i<sizeof(pnp_id_eisaid)/sizeof(pnp_id_eisaid[0]); i++){ for(i=0; i<sizeof(pnp_id_eisaid)/sizeof(pnp_id_eisaid[0]); i++){
if (compare_pnp_id(dev->id,pnp_id_eisaid[i])){ if (compare_pnp_id(dev->id,pnp_id_eisaid[i])){
sprintf(name, "%s", pnp_id_names[i]); sprintf(name, "%s", pnp_id_names[i]);
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
static void quirk_awe32_resources(struct pnp_dev *dev) static void quirk_awe32_resources(struct pnp_dev *dev)
{ {
struct pnp_port *port, *port2, *port3; struct pnp_port *port, *port2, *port3;
struct pnp_resources *res = dev->res->dep; struct pnp_resources *res = dev->possible->dep;
/* /*
* Unfortunately the isapnp_add_port_resource is too tightly bound * Unfortunately the isapnp_add_port_resource is too tightly bound
...@@ -57,7 +57,7 @@ static void quirk_awe32_resources(struct pnp_dev *dev) ...@@ -57,7 +57,7 @@ static void quirk_awe32_resources(struct pnp_dev *dev)
static void quirk_cmi8330_resources(struct pnp_dev *dev) static void quirk_cmi8330_resources(struct pnp_dev *dev)
{ {
struct pnp_resources *res = dev->res->dep; struct pnp_resources *res = dev->possible->dep;
for ( ; res ; res = res->dep ) { for ( ; res ; res = res->dep ) {
...@@ -77,7 +77,7 @@ static void quirk_cmi8330_resources(struct pnp_dev *dev) ...@@ -77,7 +77,7 @@ static void quirk_cmi8330_resources(struct pnp_dev *dev)
static void quirk_sb16audio_resources(struct pnp_dev *dev) static void quirk_sb16audio_resources(struct pnp_dev *dev)
{ {
struct pnp_port *port; struct pnp_port *port;
struct pnp_resources *res = dev->res->dep; struct pnp_resources *res = dev->possible->dep;
int changed = 0; int changed = 0;
/* /*
...@@ -115,7 +115,7 @@ static void quirk_opl3sax_resources(struct pnp_dev *dev) ...@@ -115,7 +115,7 @@ static void quirk_opl3sax_resources(struct pnp_dev *dev)
*/ */
struct pnp_resources *res; struct pnp_resources *res;
int max; int max;
res = dev->res; res = dev->possible;
max = 0; max = 0;
for (res = res->dep; res; res = res->dep) { for (res = res->dep; res; res = res->dep) {
if (res->dma->map > max) if (res->dma->map > max)
......
This diff is collapsed.
...@@ -53,7 +53,7 @@ static void __init reserve_resources_of_dev( struct pnp_dev *dev ) ...@@ -53,7 +53,7 @@ static void __init reserve_resources_of_dev( struct pnp_dev *dev )
{ {
int i; int i;
for (i=0;i<DEVICE_COUNT_IO;i++) { for (i=0;i<PNP_MAX_PORT;i++) {
if (pnp_port_valid(dev, i)) if (pnp_port_valid(dev, i))
/* end of resources */ /* end of resources */
continue; continue;
......
...@@ -317,7 +317,7 @@ static inline void avoid_irq_share(struct pnp_dev *dev) ...@@ -317,7 +317,7 @@ static inline void avoid_irq_share(struct pnp_dev *dev)
{ {
unsigned int map = 0x1FF8; unsigned int map = 0x1FF8;
struct pnp_irq *irq; struct pnp_irq *irq;
struct pnp_resources *res = dev->res; struct pnp_resources *res = dev->possible;
serial8250_get_irq_map(&map); serial8250_get_irq_map(&map);
...@@ -357,10 +357,10 @@ static int __devinit check_name(char *name) ...@@ -357,10 +357,10 @@ static int __devinit check_name(char *name)
*/ */
static int serial_pnp_guess_board(struct pnp_dev *dev, int *flags) static int serial_pnp_guess_board(struct pnp_dev *dev, int *flags)
{ {
struct pnp_resources *res = dev->res; struct pnp_resources *res = dev->possible;
struct pnp_resources *resa; struct pnp_resources *resa;
if (!(check_name(dev->name) || (dev->card && check_name(dev->card->name)))) if (!(check_name(dev->dev.name) || (dev->card && check_name(dev->card->dev.name))))
return -ENODEV; return -ENODEV;
if (!res) if (!res)
......
...@@ -77,6 +77,7 @@ struct resource_list { ...@@ -77,6 +77,7 @@ struct resource_list {
#define IORESOURCE_MEM_8BIT (0<<3) #define IORESOURCE_MEM_8BIT (0<<3)
#define IORESOURCE_MEM_16BIT (1<<3) #define IORESOURCE_MEM_16BIT (1<<3)
#define IORESOURCE_MEM_8AND16BIT (2<<3) #define IORESOURCE_MEM_8AND16BIT (2<<3)
#define IORESOURCE_MEM_32BIT (3<<3)
#define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */ #define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */
#define IORESOURCE_MEM_EXPANSIONROM (1<<6) #define IORESOURCE_MEM_EXPANSIONROM (1<<6)
......
This diff is collapsed.
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