diff options
Diffstat (limited to 'drivers/scsi/aic7xxx/aic7xxx_osm.h')
-rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm.h | 137 |
1 files changed, 11 insertions, 126 deletions
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h index b48dab447bde..9d6e0660ddbc 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.h +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h | |||
@@ -375,82 +375,16 @@ struct ahc_platform_data { | |||
375 | #define malloc(size, type, flags) kmalloc(size, flags) | 375 | #define malloc(size, type, flags) kmalloc(size, flags) |
376 | #define free(ptr, type) kfree(ptr) | 376 | #define free(ptr, type) kfree(ptr) |
377 | 377 | ||
378 | static __inline void ahc_delay(long); | 378 | void ahc_delay(long); |
379 | static __inline void | ||
380 | ahc_delay(long usec) | ||
381 | { | ||
382 | /* | ||
383 | * udelay on Linux can have problems for | ||
384 | * multi-millisecond waits. Wait at most | ||
385 | * 1024us per call. | ||
386 | */ | ||
387 | while (usec > 0) { | ||
388 | udelay(usec % 1024); | ||
389 | usec -= 1024; | ||
390 | } | ||
391 | } | ||
392 | 379 | ||
393 | 380 | ||
394 | /***************************** Low Level I/O **********************************/ | 381 | /***************************** Low Level I/O **********************************/ |
395 | static __inline uint8_t ahc_inb(struct ahc_softc * ahc, long port); | 382 | uint8_t ahc_inb(struct ahc_softc * ahc, long port); |
396 | static __inline void ahc_outb(struct ahc_softc * ahc, long port, uint8_t val); | 383 | void ahc_outb(struct ahc_softc * ahc, long port, uint8_t val); |
397 | static __inline void ahc_outsb(struct ahc_softc * ahc, long port, | 384 | void ahc_outsb(struct ahc_softc * ahc, long port, |
398 | uint8_t *, int count); | 385 | uint8_t *, int count); |
399 | static __inline void ahc_insb(struct ahc_softc * ahc, long port, | 386 | void ahc_insb(struct ahc_softc * ahc, long port, |
400 | uint8_t *, int count); | 387 | uint8_t *, int count); |
401 | |||
402 | static __inline uint8_t | ||
403 | ahc_inb(struct ahc_softc * ahc, long port) | ||
404 | { | ||
405 | uint8_t x; | ||
406 | |||
407 | if (ahc->tag == BUS_SPACE_MEMIO) { | ||
408 | x = readb(ahc->bsh.maddr + port); | ||
409 | } else { | ||
410 | x = inb(ahc->bsh.ioport + port); | ||
411 | } | ||
412 | mb(); | ||
413 | return (x); | ||
414 | } | ||
415 | |||
416 | static __inline void | ||
417 | ahc_outb(struct ahc_softc * ahc, long port, uint8_t val) | ||
418 | { | ||
419 | if (ahc->tag == BUS_SPACE_MEMIO) { | ||
420 | writeb(val, ahc->bsh.maddr + port); | ||
421 | } else { | ||
422 | outb(val, ahc->bsh.ioport + port); | ||
423 | } | ||
424 | mb(); | ||
425 | } | ||
426 | |||
427 | static __inline void | ||
428 | ahc_outsb(struct ahc_softc * ahc, long port, uint8_t *array, int count) | ||
429 | { | ||
430 | int i; | ||
431 | |||
432 | /* | ||
433 | * There is probably a more efficient way to do this on Linux | ||
434 | * but we don't use this for anything speed critical and this | ||
435 | * should work. | ||
436 | */ | ||
437 | for (i = 0; i < count; i++) | ||
438 | ahc_outb(ahc, port, *array++); | ||
439 | } | ||
440 | |||
441 | static __inline void | ||
442 | ahc_insb(struct ahc_softc * ahc, long port, uint8_t *array, int count) | ||
443 | { | ||
444 | int i; | ||
445 | |||
446 | /* | ||
447 | * There is probably a more efficient way to do this on Linux | ||
448 | * but we don't use this for anything speed critical and this | ||
449 | * should work. | ||
450 | */ | ||
451 | for (i = 0; i < count; i++) | ||
452 | *array++ = ahc_inb(ahc, port); | ||
453 | } | ||
454 | 388 | ||
455 | /**************************** Initialization **********************************/ | 389 | /**************************** Initialization **********************************/ |
456 | int ahc_linux_register_host(struct ahc_softc *, | 390 | int ahc_linux_register_host(struct ahc_softc *, |
@@ -555,61 +489,12 @@ void ahc_linux_pci_exit(void); | |||
555 | int ahc_pci_map_registers(struct ahc_softc *ahc); | 489 | int ahc_pci_map_registers(struct ahc_softc *ahc); |
556 | int ahc_pci_map_int(struct ahc_softc *ahc); | 490 | int ahc_pci_map_int(struct ahc_softc *ahc); |
557 | 491 | ||
558 | static __inline uint32_t ahc_pci_read_config(ahc_dev_softc_t pci, | 492 | uint32_t ahc_pci_read_config(ahc_dev_softc_t pci, |
559 | int reg, int width); | 493 | int reg, int width); |
560 | 494 | ||
561 | static __inline uint32_t | 495 | void ahc_pci_write_config(ahc_dev_softc_t pci, |
562 | ahc_pci_read_config(ahc_dev_softc_t pci, int reg, int width) | 496 | int reg, uint32_t value, |
563 | { | 497 | int width); |
564 | switch (width) { | ||
565 | case 1: | ||
566 | { | ||
567 | uint8_t retval; | ||
568 | |||
569 | pci_read_config_byte(pci, reg, &retval); | ||
570 | return (retval); | ||
571 | } | ||
572 | case 2: | ||
573 | { | ||
574 | uint16_t retval; | ||
575 | pci_read_config_word(pci, reg, &retval); | ||
576 | return (retval); | ||
577 | } | ||
578 | case 4: | ||
579 | { | ||
580 | uint32_t retval; | ||
581 | pci_read_config_dword(pci, reg, &retval); | ||
582 | return (retval); | ||
583 | } | ||
584 | default: | ||
585 | panic("ahc_pci_read_config: Read size too big"); | ||
586 | /* NOTREACHED */ | ||
587 | return (0); | ||
588 | } | ||
589 | } | ||
590 | |||
591 | static __inline void ahc_pci_write_config(ahc_dev_softc_t pci, | ||
592 | int reg, uint32_t value, | ||
593 | int width); | ||
594 | |||
595 | static __inline void | ||
596 | ahc_pci_write_config(ahc_dev_softc_t pci, int reg, uint32_t value, int width) | ||
597 | { | ||
598 | switch (width) { | ||
599 | case 1: | ||
600 | pci_write_config_byte(pci, reg, value); | ||
601 | break; | ||
602 | case 2: | ||
603 | pci_write_config_word(pci, reg, value); | ||
604 | break; | ||
605 | case 4: | ||
606 | pci_write_config_dword(pci, reg, value); | ||
607 | break; | ||
608 | default: | ||
609 | panic("ahc_pci_write_config: Write size too big"); | ||
610 | /* NOTREACHED */ | ||
611 | } | ||
612 | } | ||
613 | 498 | ||
614 | static __inline int ahc_get_pci_function(ahc_dev_softc_t); | 499 | static __inline int ahc_get_pci_function(ahc_dev_softc_t); |
615 | static __inline int | 500 | static __inline int |