diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/cciss.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index bb22a80d448f..9c9c79c0aa98 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -4009,6 +4009,23 @@ static inline bool cciss_board_disabled(ctlr_info_t *h) | |||
4009 | return ((command & PCI_COMMAND_MEMORY) == 0); | 4009 | return ((command & PCI_COMMAND_MEMORY) == 0); |
4010 | } | 4010 | } |
4011 | 4011 | ||
4012 | static int __devinit cciss_pci_find_memory_BAR(struct pci_dev *pdev, | ||
4013 | unsigned long *memory_bar) | ||
4014 | { | ||
4015 | int i; | ||
4016 | |||
4017 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) | ||
4018 | if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) { | ||
4019 | /* addressing mode bits already removed */ | ||
4020 | *memory_bar = pci_resource_start(pdev, i); | ||
4021 | dev_dbg(&pdev->dev, "memory BAR = %lx\n", | ||
4022 | *memory_bar); | ||
4023 | return 0; | ||
4024 | } | ||
4025 | dev_warn(&pdev->dev, "no memory BAR found\n"); | ||
4026 | return -ENODEV; | ||
4027 | } | ||
4028 | |||
4012 | static int __devinit cciss_pci_init(ctlr_info_t *c) | 4029 | static int __devinit cciss_pci_init(ctlr_info_t *c) |
4013 | { | 4030 | { |
4014 | __u32 scratchpad = 0; | 4031 | __u32 scratchpad = 0; |
@@ -4052,25 +4069,9 @@ static int __devinit cciss_pci_init(ctlr_info_t *c) | |||
4052 | * else we use the IO-APIC interrupt assigned to us by system ROM. | 4069 | * else we use the IO-APIC interrupt assigned to us by system ROM. |
4053 | */ | 4070 | */ |
4054 | cciss_interrupt_mode(c); | 4071 | cciss_interrupt_mode(c); |
4055 | 4072 | err = cciss_pci_find_memory_BAR(c->pdev, &c->paddr); | |
4056 | /* find the memory BAR */ | 4073 | if (err) |
4057 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | ||
4058 | if (pci_resource_flags(c->pdev, i) & IORESOURCE_MEM) | ||
4059 | break; | ||
4060 | } | ||
4061 | if (i == DEVICE_COUNT_RESOURCE) { | ||
4062 | printk(KERN_WARNING "cciss: No memory BAR found\n"); | ||
4063 | err = -ENODEV; | ||
4064 | goto err_out_free_res; | 4074 | goto err_out_free_res; |
4065 | } | ||
4066 | |||
4067 | c->paddr = pci_resource_start(c->pdev, i); /* addressing mode bits | ||
4068 | * already removed | ||
4069 | */ | ||
4070 | |||
4071 | #ifdef CCISS_DEBUG | ||
4072 | printk("address 0 = %lx\n", c->paddr); | ||
4073 | #endif /* CCISS_DEBUG */ | ||
4074 | c->vaddr = remap_pci_mem(c->paddr, 0x250); | 4075 | c->vaddr = remap_pci_mem(c->paddr, 0x250); |
4075 | 4076 | ||
4076 | /* Wait for the board to become ready. (PCI hotplug needs this.) | 4077 | /* Wait for the board to become ready. (PCI hotplug needs this.) |