diff options
author | kirjanov@gmail.com <kirjanov@gmail.com> | 2009-12-18 03:02:09 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-03 19:42:28 -0500 |
commit | a5c252411f16dce1f9586090ffa8210273a4c8fb (patch) | |
tree | 51eb803be118423bc1afc7996bb420ad0fe5b074 | |
parent | 30ae835f89cac13156fdef84412870f3179f3f22 (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.c | 23 |
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); |