⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diva_dma.c

📁 linux-2.6.15.6
💻 C
字号:
/* *  Copyright (c) Eicon Networks, 2002. *  This source file is supplied for the use with  Eicon Networks range of DIVA Server Adapters. *  Eicon File Revision :    2.1 *  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2, or (at your option)  any later version. *  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. *  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include "platform.h"#include "diva_dma.h"/*  Every entry has length of PAGE_SIZE  and represents one single physical page  */struct _diva_dma_map_entry {  int   busy;  dword phys_bus_addr;  /* 32bit address as seen by the card */  void* local_ram_addr; /* local address as seen by the host */  void* addr_handle;    /* handle uset to free allocated memory */};/*  Create local mapping structure and init it to default state  */struct _diva_dma_map_entry* diva_alloc_dma_map (void* os_context, int nentries) {  diva_dma_map_entry_t* pmap = diva_os_malloc(0, sizeof(*pmap)*(nentries+1));  if (pmap)	  memset (pmap, 0, sizeof(*pmap)*(nentries+1));  return pmap;}/*  Free local map (context should be freed before) if any  */void diva_free_dma_mapping (struct _diva_dma_map_entry* pmap) {  if (pmap) {    diva_os_free (0, pmap);  }}/*  Set information saved on the map entry  */void diva_init_dma_map_entry (struct _diva_dma_map_entry* pmap,                              int nr, void* virt, dword phys,                              void* addr_handle) {  pmap[nr].phys_bus_addr  = phys;  pmap[nr].local_ram_addr = virt;  pmap[nr].addr_handle    = addr_handle;}/*  Allocate one single entry in the map  */int diva_alloc_dma_map_entry (struct _diva_dma_map_entry* pmap) {  int i;  for (i = 0; (pmap && pmap[i].local_ram_addr); i++) {    if (!pmap[i].busy) {      pmap[i].busy = 1;      return (i);    }  }  return (-1);}/*  Free one single entry in the map  */void diva_free_dma_map_entry (struct _diva_dma_map_entry* pmap, int nr) {  pmap[nr].busy = 0;}/*  Get information saved on the map entry  */void diva_get_dma_map_entry (struct _diva_dma_map_entry* pmap, int nr,                             void** pvirt, dword* pphys) {  *pphys = pmap[nr].phys_bus_addr;  *pvirt = pmap[nr].local_ram_addr;}void* diva_get_entry_handle (struct _diva_dma_map_entry* pmap, int nr) {  return (pmap[nr].addr_handle);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -