|
@@ -1370,6 +1370,46 @@ enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev)
|
|
return DEV_DMA_NON_COHERENT;
|
|
return DEV_DMA_NON_COHERENT;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * acpi_dma_configure - Set-up DMA configuration for the device.
|
|
|
|
+ * @dev: The pointer to the device
|
|
|
|
+ * @attr: device dma attributes
|
|
|
|
+ */
|
|
|
|
+void acpi_dma_configure(struct device *dev, enum dev_dma_attr attr)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * Set default coherent_dma_mask to 32 bit. Drivers are expected to
|
|
|
|
+ * setup the correct supported mask.
|
|
|
|
+ */
|
|
|
|
+ if (!dev->coherent_dma_mask)
|
|
|
|
+ dev->coherent_dma_mask = DMA_BIT_MASK(32);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Set it to coherent_dma_mask by default if the architecture
|
|
|
|
+ * code has not set it.
|
|
|
|
+ */
|
|
|
|
+ if (!dev->dma_mask)
|
|
|
|
+ dev->dma_mask = &dev->coherent_dma_mask;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Assume dma valid range starts at 0 and covers the whole
|
|
|
|
+ * coherent_dma_mask.
|
|
|
|
+ */
|
|
|
|
+ arch_setup_dma_ops(dev, 0, dev->coherent_dma_mask + 1, NULL,
|
|
|
|
+ attr == DEV_DMA_COHERENT);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(acpi_dma_configure);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * acpi_dma_deconfigure - Tear-down DMA configuration for the device.
|
|
|
|
+ * @dev: The pointer to the device
|
|
|
|
+ */
|
|
|
|
+void acpi_dma_deconfigure(struct device *dev)
|
|
|
|
+{
|
|
|
|
+ arch_teardown_dma_ops(dev);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(acpi_dma_deconfigure);
|
|
|
|
+
|
|
static void acpi_init_coherency(struct acpi_device *adev)
|
|
static void acpi_init_coherency(struct acpi_device *adev)
|
|
{
|
|
{
|
|
unsigned long long cca = 0;
|
|
unsigned long long cca = 0;
|