brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 6fe60d1 Raw
73 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/******************************************************************************3 4    AudioScience HPI driver5    Copyright (C) 1997-2012  AudioScience Inc. <support@audioscience.com>6 7 8HPI Operating System function implementation for Linux9 10(C) Copyright AudioScience Inc. 1997-200311******************************************************************************/12#define SOURCEFILE_NAME "hpios.c"13#include "hpi_internal.h"14#include "hpidebug.h"15#include <linux/delay.h>16#include <linux/sched.h>17 18void hpios_delay_micro_seconds(u32 num_micro_sec)19{20	if ((usecs_to_jiffies(num_micro_sec) > 1) && !in_interrupt()) {21		/* MUST NOT SCHEDULE IN INTERRUPT CONTEXT! */22		schedule_timeout_uninterruptible(usecs_to_jiffies23			(num_micro_sec));24	} else if (num_micro_sec <= 2000)25		udelay(num_micro_sec);26	else27		mdelay(num_micro_sec / 1000);28 29}30 31/** Allocate an area of locked memory for bus master DMA operations.32 33If allocation fails, return 1, and *pMemArea.size = 034*/35u16 hpios_locked_mem_alloc(struct consistent_dma_area *p_mem_area, u32 size,36	struct pci_dev *pdev)37{38	/*?? any benefit in using managed dmam_alloc_coherent? */39	p_mem_area->vaddr =40		dma_alloc_coherent(&pdev->dev, size, &p_mem_area->dma_handle,41		GFP_KERNEL);42 43	if (p_mem_area->vaddr) {44		HPI_DEBUG_LOG(DEBUG, "allocated %d bytes, dma 0x%x vma %p\n",45			size, (unsigned int)p_mem_area->dma_handle,46			p_mem_area->vaddr);47		p_mem_area->pdev = &pdev->dev;48		p_mem_area->size = size;49		return 0;50	} else {51		HPI_DEBUG_LOG(WARNING,52			"failed to allocate %d bytes locked memory\n", size);53		p_mem_area->size = 0;54		return 1;55	}56}57 58u16 hpios_locked_mem_free(struct consistent_dma_area *p_mem_area)59{60	if (p_mem_area->size) {61		dma_free_coherent(p_mem_area->pdev, p_mem_area->size,62			p_mem_area->vaddr, p_mem_area->dma_handle);63		HPI_DEBUG_LOG(DEBUG, "freed %lu bytes, dma 0x%x vma %p\n",64			(unsigned long)p_mem_area->size,65			(unsigned int)p_mem_area->dma_handle,66			p_mem_area->vaddr);67		p_mem_area->size = 0;68		return 0;69	} else {70		return 1;71	}72}73