mmi.c

来自「linux下的MPEG1」· C语言 代码 · 共 113 行

C
113
字号
/* Memory manager interface */#include <stdio.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/mman.h> /* mlock */#include <errno.h>#include <unistd.h>#include <fcntl.h>#include "libdha.h"#include "kernelhelper/dhahelper.h"static int libdha_fd=-1;#define ALLOWED_VER 0x10int bm_open( void ){  int retv;  libdha_fd = open("/dev/dhahelper",O_RDWR);  retv = libdha_fd > 0 ? 0 : ENXIO;  if(!retv)  {    int ver;    ioctl(libdha_fd,DHAHELPER_GET_VERSION,&ver);    if(ver < ALLOWED_VER)    {	printf("libdha: You have wrong version (%i) of /dev/dhahelper\n"	       "libdha: Please upgrade your driver up to ver=%i\n",ver,ALLOWED_VER);	retv = EINVAL;	close(libdha_fd);    }  }  else printf("libdha: Can't open /dev/dhahelper\n");  return retv;}void bm_close( void ){  close(libdha_fd);}int bm_virt_to_phys( void * virt_addr, unsigned long length, unsigned long * parray ){    dhahelper_vmi_t vmi;    vmi.virtaddr = virt_addr;    vmi.length = length;    vmi.realaddr = parray;    if(libdha_fd > 0) return ioctl(libdha_fd,DHAHELPER_VIRT_TO_PHYS,&vmi);    return ENXIO;}int bm_virt_to_bus( void * virt_addr, unsigned long length, unsigned long * barray ){    dhahelper_vmi_t vmi;    vmi.virtaddr = virt_addr;    vmi.length = length;    vmi.realaddr = barray;    if(libdha_fd > 0) return ioctl(libdha_fd,DHAHELPER_VIRT_TO_BUS,&vmi);    return ENXIO;}void *	bm_alloc_pci_shmem(pciinfo_t *pi, unsigned mem_bitness, unsigned long length,int op ){    printf("libdha: Pure virtual function call - bm_alloc_pci_shmem()\n");#if 0    dhahelper_mem_t vmi;    vmi.length = length;    if(libdha_fd > 0)     {	if(ioctl(libdha_fd,DHAHELPER_ALLOC_PA,&vmi) == 0)		return vmi.addr;    }#endif    return NULL;}void	bm_free_pci_shmem(void * pci_shmem){    printf("libdha: Pure virtual function call - bm_free_pci_shmem()\n");#if 0    dhahelper_mem_t vmi;    vmi.addr = virt_addr;    vmi.length = length;    if(libdha_fd > 0)     {	ioctl(libdha_fd,DHAHELPER_FREE_PA,&vmi);    }#endif}int	bm_lock_mem( const void *addr, unsigned long length ){    dhahelper_mem_t vmi;    vmi.addr = (void *) addr;    vmi.length = length;    if(libdha_fd > 0)     {	return ioctl(libdha_fd,DHAHELPER_LOCK_MEM,&vmi);    }    return mlock(addr,length);}int	bm_unlock_mem( const void * addr, unsigned long length ){    dhahelper_mem_t vmi;    vmi.addr = (void *) addr;    vmi.length = length;    if(libdha_fd > 0)     {	return ioctl(libdha_fd,DHAHELPER_UNLOCK_MEM,&vmi);    }    return munlock(addr,length);}

⌨️ 快捷键说明

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