aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkirjanov@gmail.com <kirjanov@gmail.com>2009-12-18 03:02:09 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-03 19:42:28 -0500
commita5c252411f16dce1f9586090ffa8210273a4c8fb (patch)
tree51eb803be118423bc1afc7996bb420ad0fe5b074
parent30ae835f89cac13156fdef84412870f3179f3f22 (diff)
staging: slicoss Use pci_set_consistent_dma_mask.
Use pci_set_consistent_dma_mask() in the case of 64-bit consistent allocations. Signed-off-by: Denis Kirjanov <kirjanov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/staging/slicoss/slicoss.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c
index aefe3fef772..09a9d759c61 100644
--- a/drivers/staging/slicoss/slicoss.c
+++ b/drivers/staging/slicoss/slicoss.c
@@ -366,6 +366,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
366 ulong mmio_start = 0; 366 ulong mmio_start = 0;
367 ulong mmio_len = 0; 367 ulong mmio_len = 0;
368 struct sliccard *card = NULL; 368 struct sliccard *card = NULL;
369 int pci_using_dac = 0;
369 370
370 slic_global.dynamic_intagg = dynamic_intagg; 371 slic_global.dynamic_intagg = dynamic_intagg;
371 372
@@ -379,16 +380,26 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
379 printk(KERN_DEBUG "%s\n", slic_proc_version); 380 printk(KERN_DEBUG "%s\n", slic_proc_version);
380 } 381 }
381 382
382 err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64)); 383 if (!pci_set_dma_mask(pcidev, DMA_BIT_MASK(64))) {
383 if (err) { 384 pci_using_dac = 1;
384 err = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32)); 385 if (pci_set_consistent_dma_mask(pcidev, DMA_BIT_MASK(64))) {
385 if (err) 386 dev_err(&pcidev->dev, "unable to obtain 64-bit DMA for "
387 "consistent allocations\n");
386 goto err_out_disable_pci; 388 goto err_out_disable_pci;
389 }
390 } else if (pci_set_dma_mask(pcidev, DMA_BIT_MASK(32))) {
391 pci_using_dac = 0;
392 pci_set_consistent_dma_mask(pcidev, DMA_BIT_MASK(32));
393 } else {
394 dev_err(&pcidev->dev, "no usable DMA configuration\n");
395 goto err_out_disable_pci;
387 } 396 }
388 397
389 err = pci_request_regions(pcidev, DRV_NAME); 398 err = pci_request_regions(pcidev, DRV_NAME);
390 if (err) 399 if (err) {
400 dev_err(&pcidev->dev, "can't obtain PCI resources\n");
391 goto err_out_disable_pci; 401 goto err_out_disable_pci;
402 }
392 403
393 pci_set_master(pcidev); 404 pci_set_master(pcidev);
394 405
@@ -404,6 +415,8 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
404 adapter = netdev_priv(netdev); 415 adapter = netdev_priv(netdev);
405 adapter->netdev = netdev; 416 adapter->netdev = netdev;
406 adapter->pcidev = pcidev; 417 adapter->pcidev = pcidev;
418 if (pci_using_dac)
419 netdev->features |= NETIF_F_HIGHDMA;
407 420
408 mmio_start = pci_resource_start(pcidev, 0); 421 mmio_start = pci_resource_start(pcidev, 0);
409 mmio_len = pci_resource_len(pcidev, 0); 422 mmio_len = pci_resource_len(pcidev, 0);