diff options
-rw-r--r-- | drivers/pnp/resource.c | 92 |
1 files changed, 54 insertions, 38 deletions
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 15995f9f8b7c..f89945ebd8b6 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
@@ -243,13 +243,15 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
243 | { | 243 | { |
244 | int i; | 244 | int i; |
245 | struct pnp_dev *tdev; | 245 | struct pnp_dev *tdev; |
246 | struct resource *res, *tres; | ||
246 | resource_size_t *port, *end, *tport, *tend; | 247 | resource_size_t *port, *end, *tport, *tend; |
247 | 248 | ||
248 | port = &dev->res.port_resource[idx].start; | 249 | res = &dev->res.port_resource[idx]; |
249 | end = &dev->res.port_resource[idx].end; | 250 | port = &res->start; |
251 | end = &res->end; | ||
250 | 252 | ||
251 | /* if the resource doesn't exist, don't complain about it */ | 253 | /* if the resource doesn't exist, don't complain about it */ |
252 | if (cannot_compare(dev->res.port_resource[idx].flags)) | 254 | if (cannot_compare(res->flags)) |
253 | return 1; | 255 | return 1; |
254 | 256 | ||
255 | /* check if the resource is already in use, skip if the | 257 | /* check if the resource is already in use, skip if the |
@@ -269,9 +271,10 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
269 | 271 | ||
270 | /* check for internal conflicts */ | 272 | /* check for internal conflicts */ |
271 | for (i = 0; i < PNP_MAX_PORT && i != idx; i++) { | 273 | for (i = 0; i < PNP_MAX_PORT && i != idx; i++) { |
272 | if (dev->res.port_resource[i].flags & IORESOURCE_IO) { | 274 | tres = &dev->res.port_resource[i]; |
273 | tport = &dev->res.port_resource[i].start; | 275 | if (tres->flags & IORESOURCE_IO) { |
274 | tend = &dev->res.port_resource[i].end; | 276 | tport = &tres->start; |
277 | tend = &tres->end; | ||
275 | if (ranged_conflict(port, end, tport, tend)) | 278 | if (ranged_conflict(port, end, tport, tend)) |
276 | return 0; | 279 | return 0; |
277 | } | 280 | } |
@@ -282,12 +285,12 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
282 | if (tdev == dev) | 285 | if (tdev == dev) |
283 | continue; | 286 | continue; |
284 | for (i = 0; i < PNP_MAX_PORT; i++) { | 287 | for (i = 0; i < PNP_MAX_PORT; i++) { |
285 | if (tdev->res.port_resource[i].flags & IORESOURCE_IO) { | 288 | tres = &tdev->res.port_resource[i]; |
286 | if (cannot_compare | 289 | if (tres->flags & IORESOURCE_IO) { |
287 | (tdev->res.port_resource[i].flags)) | 290 | if (cannot_compare(tres->flags)) |
288 | continue; | 291 | continue; |
289 | tport = &tdev->res.port_resource[i].start; | 292 | tport = &tres->start; |
290 | tend = &tdev->res.port_resource[i].end; | 293 | tend = &tres->end; |
291 | if (ranged_conflict(port, end, tport, tend)) | 294 | if (ranged_conflict(port, end, tport, tend)) |
292 | return 0; | 295 | return 0; |
293 | } | 296 | } |
@@ -301,13 +304,15 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
301 | { | 304 | { |
302 | int i; | 305 | int i; |
303 | struct pnp_dev *tdev; | 306 | struct pnp_dev *tdev; |
307 | struct resource *res, *tres; | ||
304 | resource_size_t *addr, *end, *taddr, *tend; | 308 | resource_size_t *addr, *end, *taddr, *tend; |
305 | 309 | ||
306 | addr = &dev->res.mem_resource[idx].start; | 310 | res = &dev->res.mem_resource[idx]; |
307 | end = &dev->res.mem_resource[idx].end; | 311 | addr = &res->start; |
312 | end = &res->end; | ||
308 | 313 | ||
309 | /* if the resource doesn't exist, don't complain about it */ | 314 | /* if the resource doesn't exist, don't complain about it */ |
310 | if (cannot_compare(dev->res.mem_resource[idx].flags)) | 315 | if (cannot_compare(res->flags)) |
311 | return 1; | 316 | return 1; |
312 | 317 | ||
313 | /* check if the resource is already in use, skip if the | 318 | /* check if the resource is already in use, skip if the |
@@ -327,9 +332,10 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
327 | 332 | ||
328 | /* check for internal conflicts */ | 333 | /* check for internal conflicts */ |
329 | for (i = 0; i < PNP_MAX_MEM && i != idx; i++) { | 334 | for (i = 0; i < PNP_MAX_MEM && i != idx; i++) { |
330 | if (dev->res.mem_resource[i].flags & IORESOURCE_MEM) { | 335 | tres = &dev->res.mem_resource[i]; |
331 | taddr = &dev->res.mem_resource[i].start; | 336 | if (tres->flags & IORESOURCE_MEM) { |
332 | tend = &dev->res.mem_resource[i].end; | 337 | taddr = &tres->start; |
338 | tend = &tres->end; | ||
333 | if (ranged_conflict(addr, end, taddr, tend)) | 339 | if (ranged_conflict(addr, end, taddr, tend)) |
334 | return 0; | 340 | return 0; |
335 | } | 341 | } |
@@ -340,12 +346,12 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
340 | if (tdev == dev) | 346 | if (tdev == dev) |
341 | continue; | 347 | continue; |
342 | for (i = 0; i < PNP_MAX_MEM; i++) { | 348 | for (i = 0; i < PNP_MAX_MEM; i++) { |
343 | if (tdev->res.mem_resource[i].flags & IORESOURCE_MEM) { | 349 | tres = &tdev->res.mem_resource[i]; |
344 | if (cannot_compare | 350 | if (tres->flags & IORESOURCE_MEM) { |
345 | (tdev->res.mem_resource[i].flags)) | 351 | if (cannot_compare(tres->flags)) |
346 | continue; | 352 | continue; |
347 | taddr = &tdev->res.mem_resource[i].start; | 353 | taddr = &tres->start; |
348 | tend = &tdev->res.mem_resource[i].end; | 354 | tend = &tres->end; |
349 | if (ranged_conflict(addr, end, taddr, tend)) | 355 | if (ranged_conflict(addr, end, taddr, tend)) |
350 | return 0; | 356 | return 0; |
351 | } | 357 | } |
@@ -364,10 +370,14 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
364 | { | 370 | { |
365 | int i; | 371 | int i; |
366 | struct pnp_dev *tdev; | 372 | struct pnp_dev *tdev; |
367 | resource_size_t *irq = &dev->res.irq_resource[idx].start; | 373 | struct resource *res, *tres; |
374 | resource_size_t *irq; | ||
375 | |||
376 | res = &dev->res.irq_resource[idx]; | ||
377 | irq = &res->start; | ||
368 | 378 | ||
369 | /* if the resource doesn't exist, don't complain about it */ | 379 | /* if the resource doesn't exist, don't complain about it */ |
370 | if (cannot_compare(dev->res.irq_resource[idx].flags)) | 380 | if (cannot_compare(res->flags)) |
371 | return 1; | 381 | return 1; |
372 | 382 | ||
373 | /* check if the resource is valid */ | 383 | /* check if the resource is valid */ |
@@ -382,8 +392,9 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
382 | 392 | ||
383 | /* check for internal conflicts */ | 393 | /* check for internal conflicts */ |
384 | for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) { | 394 | for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) { |
385 | if (dev->res.irq_resource[i].flags & IORESOURCE_IRQ) { | 395 | tres = &dev->res.irq_resource[i]; |
386 | if (dev->res.irq_resource[i].start == *irq) | 396 | if (tres->flags & IORESOURCE_IRQ) { |
397 | if (tres->start == *irq) | ||
387 | return 0; | 398 | return 0; |
388 | } | 399 | } |
389 | } | 400 | } |
@@ -415,11 +426,11 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
415 | if (tdev == dev) | 426 | if (tdev == dev) |
416 | continue; | 427 | continue; |
417 | for (i = 0; i < PNP_MAX_IRQ; i++) { | 428 | for (i = 0; i < PNP_MAX_IRQ; i++) { |
418 | if (tdev->res.irq_resource[i].flags & IORESOURCE_IRQ) { | 429 | tres = &tdev->res.irq_resource[i]; |
419 | if (cannot_compare | 430 | if (tres->flags & IORESOURCE_IRQ) { |
420 | (tdev->res.irq_resource[i].flags)) | 431 | if (cannot_compare(tres->flags)) |
421 | continue; | 432 | continue; |
422 | if ((tdev->res.irq_resource[i].start == *irq)) | 433 | if (tres->start == *irq) |
423 | return 0; | 434 | return 0; |
424 | } | 435 | } |
425 | } | 436 | } |
@@ -433,10 +444,14 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
433 | #ifndef CONFIG_IA64 | 444 | #ifndef CONFIG_IA64 |
434 | int i; | 445 | int i; |
435 | struct pnp_dev *tdev; | 446 | struct pnp_dev *tdev; |
436 | resource_size_t *dma = &dev->res.dma_resource[idx].start; | 447 | struct resource *res, *tres; |
448 | resource_size_t *dma; | ||
449 | |||
450 | res = &dev->res.dma_resource[idx]; | ||
451 | dma = &res->start; | ||
437 | 452 | ||
438 | /* if the resource doesn't exist, don't complain about it */ | 453 | /* if the resource doesn't exist, don't complain about it */ |
439 | if (cannot_compare(dev->res.dma_resource[idx].flags)) | 454 | if (cannot_compare(res->flags)) |
440 | return 1; | 455 | return 1; |
441 | 456 | ||
442 | /* check if the resource is valid */ | 457 | /* check if the resource is valid */ |
@@ -451,8 +466,9 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
451 | 466 | ||
452 | /* check for internal conflicts */ | 467 | /* check for internal conflicts */ |
453 | for (i = 0; i < PNP_MAX_DMA && i != idx; i++) { | 468 | for (i = 0; i < PNP_MAX_DMA && i != idx; i++) { |
454 | if (dev->res.dma_resource[i].flags & IORESOURCE_DMA) { | 469 | tres = &dev->res.dma_resource[i]; |
455 | if (dev->res.dma_resource[i].start == *dma) | 470 | if (tres->flags & IORESOURCE_DMA) { |
471 | if (tres->start == *dma) | ||
456 | return 0; | 472 | return 0; |
457 | } | 473 | } |
458 | } | 474 | } |
@@ -470,11 +486,11 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
470 | if (tdev == dev) | 486 | if (tdev == dev) |
471 | continue; | 487 | continue; |
472 | for (i = 0; i < PNP_MAX_DMA; i++) { | 488 | for (i = 0; i < PNP_MAX_DMA; i++) { |
473 | if (tdev->res.dma_resource[i].flags & IORESOURCE_DMA) { | 489 | tres = &tdev->res.dma_resource[i]; |
474 | if (cannot_compare | 490 | if (tres->flags & IORESOURCE_DMA) { |
475 | (tdev->res.dma_resource[i].flags)) | 491 | if (cannot_compare(tres->flags)) |
476 | continue; | 492 | continue; |
477 | if ((tdev->res.dma_resource[i].start == *dma)) | 493 | if (tres->start == *dma) |
478 | return 0; | 494 | return 0; |
479 | } | 495 | } |
480 | } | 496 | } |