Finish cleanup
This commit is contained in:
parent
110ecf658b
commit
579a8d374c
141
amifldrv.c
141
amifldrv.c
|
@ -11,16 +11,40 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
|
||||||
#include "amifldrv.h"
|
#define LINUX_PRE_2_6 (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
|
||||||
#include "linux_iface.h"
|
#define LINUX_POST_2_6 (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
|
||||||
|
|
||||||
|
#if LINUX_PRE_2_6
|
||||||
|
# include <linux/wrapper.h>
|
||||||
|
#else
|
||||||
|
# define mem_map_reserve(p) set_bit (PG_reserved, &((p)->flags))
|
||||||
|
# define mem_map_unreserve(p) clear_bit(PG_reserved, &((p)->flags))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int const CMD_ALLOC = 0x4160;
|
||||||
|
static int const CMD_FREE = 0x4161;
|
||||||
|
static int const CMD_LOCK_KB = 0x4162;
|
||||||
|
static int const CMD_UNLOCK_KB = 0x4163;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ioctl data packet used to communicate instructions to the driver
|
||||||
|
*/
|
||||||
|
typedef struct _struct_AMIFL_alloc_params {
|
||||||
|
long size;
|
||||||
|
unsigned long kvirtlen;
|
||||||
|
void* kmallocptr;
|
||||||
|
void* kvirtadd;
|
||||||
|
void* kphysadd;
|
||||||
|
} AMIFL_alloc_params;
|
||||||
|
|
||||||
static int *kmalloc_area = NULL;
|
static int *kmalloc_area = NULL;
|
||||||
static int *kmalloc_ptr = NULL;
|
static int *kmalloc_ptr = NULL;
|
||||||
static unsigned long kmalloc_len = 0L;
|
static unsigned long kmalloc_len = 0L;
|
||||||
static int kcount = 0;
|
static int kcount = 0;
|
||||||
static int major;
|
static int major;
|
||||||
static AMIFLDRV_ALLOC kmalloc_drv[128];
|
static AMIFL_alloc_params kmalloc_drv[128];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Section: Character Device Implementation
|
* Section: Character Device Implementation
|
||||||
|
@ -77,9 +101,8 @@ AMI_chrdrv_ioctl(struct inode* _unused_inode, unsigned int cmd, unsigned long ar
|
||||||
{
|
{
|
||||||
case CMD_ALLOC:
|
case CMD_ALLOC:
|
||||||
{
|
{
|
||||||
int i;
|
unsigned long virt_addr;
|
||||||
unsigned long virt_addr;
|
AMIFL_alloc_params arg_kernel_space;
|
||||||
AMIFLDRV_ALLOC arg_kernel_space;
|
|
||||||
|
|
||||||
if (kcount >= 128)
|
if (kcount >= 128)
|
||||||
{
|
{
|
||||||
|
@ -93,44 +116,52 @@ AMI_chrdrv_ioctl(struct inode* _unused_inode, unsigned int cmd, unsigned long ar
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_from_user((void*) &arg_kernel_space, (void*) arg, sizeof(AMIFLDRV_ALLOC));
|
copy_from_user((void*) &arg_kernel_space, (void*) arg, sizeof(AMIFL_alloc_params));
|
||||||
|
|
||||||
if (arg_kernel_space.size > 128*1024)
|
if (arg_kernel_space.size > 128 * 1024)
|
||||||
{
|
{
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
kmalloc_len = ((arg_kernel_space.size + PAGE_SIZE -1) & PAGE_MASK);
|
kmalloc_len = ((arg_kernel_space.size + PAGE_SIZE - 1) & PAGE_MASK);
|
||||||
kmalloc_ptr = kmalloc((kmalloc_len + 2 * PAGE_SIZE), GFP_DMA | GFP_KERNEL);
|
kmalloc_ptr = kmalloc((kmalloc_len + 2 * PAGE_SIZE), GFP_DMA | GFP_KERNEL);
|
||||||
kmalloc_area=(int *)(((unsigned long)kmalloc_ptr + PAGE_SIZE -1) & PAGE_MASK);
|
kmalloc_area = (int *)(((unsigned long)kmalloc_ptr + PAGE_SIZE - 1) & PAGE_MASK);
|
||||||
|
|
||||||
for (virt_addr=(unsigned long)kmalloc_area; virt_addr<(unsigned long)kmalloc_area+kmalloc_len; virt_addr+=PAGE_SIZE)
|
for (virt_addr = (unsigned long) kmalloc_area;
|
||||||
|
virt_addr < (unsigned long) kmalloc_area + kmalloc_len;
|
||||||
|
virt_addr += PAGE_SIZE)
|
||||||
{
|
{
|
||||||
mem_map_reserve(virt_to_page(virt_addr));
|
mem_map_reserve(virt_to_page(virt_addr));
|
||||||
}
|
}
|
||||||
for (i=0; i<(kmalloc_len/sizeof(int)); i++) {
|
|
||||||
kmalloc_area[i]=(0xafd0<<16) +i;
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (kmalloc_len / sizeof(int)); ++i) {
|
||||||
|
kmalloc_area[i] = 0xAFD00000 + i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
kmalloc_drv[kcount].size = arg_kernel_space.size;
|
|
||||||
|
kmalloc_drv[kcount].size = arg_kernel_space.size;
|
||||||
kmalloc_drv[kcount].kmallocptr = kmalloc_ptr;
|
kmalloc_drv[kcount].kmallocptr = kmalloc_ptr;
|
||||||
kmalloc_drv[kcount].kvirtlen = kmalloc_len;
|
kmalloc_drv[kcount].kvirtlen = kmalloc_len;
|
||||||
kmalloc_drv[kcount].kvirtadd = kmalloc_area;
|
kmalloc_drv[kcount].kvirtadd = kmalloc_area;
|
||||||
kmalloc_drv[kcount].kphysadd = (void *)((unsigned long)virt_to_phys(kmalloc_area));
|
kmalloc_drv[kcount].kphysadd = (void *)((unsigned long)virt_to_phys(kmalloc_area));
|
||||||
kcount++;
|
++kcount;
|
||||||
|
|
||||||
arg_kernel_space.kvirtadd = kmalloc_area;
|
arg_kernel_space.kvirtadd = kmalloc_area;
|
||||||
arg_kernel_space.kphysadd = (void *)((unsigned long)virt_to_phys(kmalloc_area));
|
arg_kernel_space.kphysadd = (void *)((unsigned long)virt_to_phys(kmalloc_area));
|
||||||
|
|
||||||
copy_to_user((void*) arg, (void*) &arg_kernel_space, sizeof(AMIFLDRV_ALLOC));
|
copy_to_user((void*) arg, (void*) &arg_kernel_space, sizeof(AMIFL_alloc_params));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case CMD_FREE:
|
case CMD_FREE:
|
||||||
{
|
{
|
||||||
unsigned long virt_addr;
|
unsigned long virt_addr;
|
||||||
AMIFLDRV_ALLOC arg_kernel_space;
|
AMIFL_alloc_params arg_kernel_space;
|
||||||
int isearch = 0;
|
int isearch = 0;
|
||||||
|
|
||||||
copy_from_user((void*) &arg_kernel_space, (void*) arg, sizeof(AMIFLDRV_ALLOC));
|
copy_from_user((void*) &arg_kernel_space, (void*) arg, sizeof(AMIFL_alloc_params));
|
||||||
|
|
||||||
if (kcount > 0) {
|
if (kcount > 0) {
|
||||||
for (isearch=0; isearch<kcount; isearch++) {
|
for (isearch=0; isearch<kcount; isearch++) {
|
||||||
|
@ -143,29 +174,35 @@ AMI_chrdrv_ioctl(struct inode* _unused_inode, unsigned int cmd, unsigned long ar
|
||||||
} else
|
} else
|
||||||
return 0;
|
return 0;
|
||||||
if (kmalloc_ptr) {
|
if (kmalloc_ptr) {
|
||||||
for(virt_addr=(unsigned long)kmalloc_area; virt_addr<(unsigned long)kmalloc_area+kmalloc_len; virt_addr+=PAGE_SIZE)
|
for(virt_addr = (unsigned long) kmalloc_area;
|
||||||
|
virt_addr < (unsigned long) kmalloc_area + kmalloc_len;
|
||||||
|
virt_addr += PAGE_SIZE)
|
||||||
{
|
{
|
||||||
mem_map_unreserve(virt_to_page(virt_addr));
|
mem_map_unreserve(virt_to_page(virt_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kmalloc_ptr) {
|
if (kmalloc_ptr) {
|
||||||
kfree(kmalloc_ptr);
|
kfree(kmalloc_ptr);
|
||||||
}
|
}
|
||||||
kmalloc_len = 0L;
|
|
||||||
kmalloc_ptr = NULL;
|
kmalloc_len = 0L;
|
||||||
|
kmalloc_ptr = NULL;
|
||||||
kmalloc_area = NULL;
|
kmalloc_area = NULL;
|
||||||
kcount--;
|
kcount--;
|
||||||
|
|
||||||
if (isearch != kcount) {
|
if (isearch != kcount) {
|
||||||
kmalloc_drv[isearch].size = kmalloc_drv[kcount].size;
|
kmalloc_drv[isearch].size = kmalloc_drv[kcount].size;
|
||||||
kmalloc_drv[isearch].kmallocptr = kmalloc_drv[kcount].kmallocptr;
|
kmalloc_drv[isearch].kmallocptr = kmalloc_drv[kcount].kmallocptr;
|
||||||
kmalloc_drv[isearch].kvirtlen = kmalloc_drv[kcount].kvirtlen;
|
kmalloc_drv[isearch].kvirtlen = kmalloc_drv[kcount].kvirtlen;
|
||||||
kmalloc_drv[isearch].kvirtadd = kmalloc_drv[kcount].kvirtadd;
|
kmalloc_drv[isearch].kvirtadd = kmalloc_drv[kcount].kvirtadd;
|
||||||
kmalloc_drv[isearch].kphysadd = kmalloc_drv[kcount].kphysadd;
|
kmalloc_drv[isearch].kphysadd = kmalloc_drv[kcount].kphysadd;
|
||||||
}
|
}
|
||||||
kmalloc_drv[kcount].size = 0;
|
|
||||||
|
kmalloc_drv[kcount].size = 0;
|
||||||
kmalloc_drv[kcount].kmallocptr = NULL;
|
kmalloc_drv[kcount].kmallocptr = NULL;
|
||||||
kmalloc_drv[kcount].kvirtlen = 0;
|
kmalloc_drv[kcount].kvirtlen = 0;
|
||||||
kmalloc_drv[kcount].kvirtadd = NULL;
|
kmalloc_drv[kcount].kvirtadd = NULL;
|
||||||
kmalloc_drv[kcount].kphysadd = NULL;
|
kmalloc_drv[kcount].kphysadd = NULL;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -182,8 +219,8 @@ AMI_chrdrv_ioctl(struct inode* _unused_inode, unsigned int cmd, unsigned long ar
|
||||||
int
|
int
|
||||||
AMI_chrdrv_mmap(struct file* file, struct vm_area_struct* vma)
|
AMI_chrdrv_mmap(struct file* file, struct vm_area_struct* vma)
|
||||||
{
|
{
|
||||||
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
|
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
|
||||||
unsigned long size = vma->vm_end - vma->vm_start;
|
unsigned long size = vma->vm_end - vma->vm_start;
|
||||||
|
|
||||||
if (offset & ~PAGE_MASK) {
|
if (offset & ~PAGE_MASK) {
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
@ -268,7 +305,7 @@ amifldrv_init_module(void)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(kmalloc_drv, 0, sizeof(AMIFLDRV_ALLOC) * 128);
|
memset(kmalloc_drv, 0, sizeof(AMIFL_alloc_params) * 128);
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
@ -277,26 +314,28 @@ static void /* module_exit */
|
||||||
amifldrv_cleanup_module(void)
|
amifldrv_cleanup_module(void)
|
||||||
{
|
{
|
||||||
unsigned long virt_addr;
|
unsigned long virt_addr;
|
||||||
int iloop = 0;
|
|
||||||
if (kcount > 0)
|
if (kcount > 0)
|
||||||
{
|
{
|
||||||
for (iloop=0; iloop < kcount; iloop++)
|
|
||||||
{
|
{
|
||||||
kmalloc_ptr = kmalloc_drv[iloop].kmallocptr;
|
int iloop;
|
||||||
kmalloc_area = kmalloc_drv[iloop].kvirtadd;
|
for (iloop = 0; iloop < kcount; ++iloop)
|
||||||
kmalloc_len = kmalloc_drv[iloop].kvirtlen;
|
|
||||||
if (kmalloc_ptr)
|
|
||||||
{
|
{
|
||||||
for(virt_addr = (unsigned long)kmalloc_area;
|
kmalloc_ptr = kmalloc_drv[iloop].kmallocptr;
|
||||||
virt_addr < (unsigned long)kmalloc_area + kmalloc_len;
|
kmalloc_area = kmalloc_drv[iloop].kvirtadd;
|
||||||
virt_addr += PAGE_SIZE)
|
kmalloc_len = kmalloc_drv[iloop].kvirtlen;
|
||||||
{
|
|
||||||
mem_map_unreserve(virt_to_page(virt_addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (kmalloc_ptr)
|
if (kmalloc_ptr)
|
||||||
{
|
{
|
||||||
kfree(kmalloc_ptr);
|
for(virt_addr = (unsigned long)kmalloc_area;
|
||||||
|
virt_addr < (unsigned long)kmalloc_area + kmalloc_len;
|
||||||
|
virt_addr += PAGE_SIZE)
|
||||||
|
{
|
||||||
|
mem_map_unreserve(virt_to_page(virt_addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kmalloc_ptr)
|
||||||
|
{
|
||||||
|
kfree(kmalloc_ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
13
amifldrv.h
13
amifldrv.h
|
@ -1,13 +0,0 @@
|
||||||
extern struct file_operations amifldrv_fops;
|
|
||||||
#define CMD_ALLOC 0x4160
|
|
||||||
#define CMD_FREE 0x4161
|
|
||||||
#define CMD_LOCK_KB 0x4162
|
|
||||||
#define CMD_UNLOCK_KB 0x4163
|
|
||||||
typedef struct tagAMIFLDRV_ALLOC
|
|
||||||
{
|
|
||||||
long size;
|
|
||||||
unsigned long kvirtlen;
|
|
||||||
void * kmallocptr;
|
|
||||||
void * kvirtadd;
|
|
||||||
void * kphysadd;
|
|
||||||
} AMIFLDRV_ALLOC;
|
|
191
amiwrap.c
191
amiwrap.c
|
@ -1,191 +0,0 @@
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
// AMI Firmware Update Utility(APTIO) v5.05.04
|
|
||||||
// Copyright (C)2011 American Megatrends Inc. All Rights Reserved.
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
#include <linux/version.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <linux/vmalloc.h>
|
|
||||||
#include <linux/mman.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/uaccess.h>
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
|
||||||
#include <linux/wrapper.h>
|
|
||||||
#endif
|
|
||||||
#include "amiwrap.h"
|
|
||||||
|
|
||||||
extern int amifldrv_ioctl(void);
|
|
||||||
extern int amifldrv_mmap(void);
|
|
||||||
unsigned long ulArg0;
|
|
||||||
unsigned long ulArg1;
|
|
||||||
unsigned long ulArg2;
|
|
||||||
pgprot_t pgArg0;
|
|
||||||
void *pvArg0;
|
|
||||||
void *pvArg1;
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC static int wrap_open(struct inode *inode, struct file *file);
|
|
||||||
AFU_ATTRIBUTE_FUNC static int wrap_release(struct inode *inode, struct file *file);
|
|
||||||
#if defined(HAVE_UNLOCKED_IOCTL)
|
|
||||||
AFU_ATTRIBUTE_FUNC static long wrap_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
|
|
||||||
#else
|
|
||||||
AFU_ATTRIBUTE_FUNC static int wrap_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);
|
|
||||||
#endif
|
|
||||||
AFU_ATTRIBUTE_FUNC static int wrap_mmap(struct file *file, struct vm_area_struct *vma);
|
|
||||||
|
|
||||||
struct file_operations amifldrv_fops =
|
|
||||||
{
|
|
||||||
owner:
|
|
||||||
THIS_MODULE,
|
|
||||||
open:
|
|
||||||
wrap_open,
|
|
||||||
release:
|
|
||||||
wrap_release,
|
|
||||||
#if defined(HAVE_UNLOCKED_IOCTL)
|
|
||||||
unlocked_ioctl:
|
|
||||||
wrap_unlocked_ioctl,
|
|
||||||
#else
|
|
||||||
ioctl:
|
|
||||||
wrap_ioctl,
|
|
||||||
#endif
|
|
||||||
mmap:
|
|
||||||
wrap_mmap,
|
|
||||||
};
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
|
||||||
#define mem_map_reserve(p) set_bit(PG_reserved, &((p)->flags))
|
|
||||||
#define mem_map_unreserve(p) clear_bit(PG_reserved, &((p)->flags))
|
|
||||||
MODULE_AUTHOR("American Megatrends Inc.");
|
|
||||||
MODULE_DESCRIPTION("AMI Flash Update utility driver");
|
|
||||||
MODULE_LICENSE("Proprietary");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
|
||||||
static int device_open_count = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
int wrap_open(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
|
||||||
MOD_INC_USE_COUNT;
|
|
||||||
#else
|
|
||||||
if (device_open_count)
|
|
||||||
return -EBUSY;
|
|
||||||
device_open_count++;
|
|
||||||
try_module_get(THIS_MODULE);
|
|
||||||
#endif
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
int wrap_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
|
|
||||||
MOD_DEC_USE_COUNT;
|
|
||||||
#else
|
|
||||||
device_open_count--;
|
|
||||||
module_put(THIS_MODULE);
|
|
||||||
#endif
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
#if defined(HAVE_UNLOCKED_IOCTL)
|
|
||||||
long wrap_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
||||||
#else
|
|
||||||
int wrap_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
#ifndef HAVE_UNLOCKED_IOCTL
|
|
||||||
pvArg0 = inode;
|
|
||||||
#endif
|
|
||||||
pvArg1 = filp;
|
|
||||||
ulArg0 = cmd;
|
|
||||||
ulArg1 = arg;
|
|
||||||
#if defined(HAVE_UNLOCKED_IOCTL)
|
|
||||||
return (long)amifldrv_ioctl();
|
|
||||||
#else
|
|
||||||
return amifldrv_ioctl();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
int wrap_mmap(struct file *file, struct vm_area_struct *vma)
|
|
||||||
{
|
|
||||||
pvArg0 = file;
|
|
||||||
pvArg1 = vma;
|
|
||||||
return amifldrv_mmap();
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
int wrap_register_chrdev()
|
|
||||||
{
|
|
||||||
return register_chrdev((unsigned int)ulArg0, "amifldrv", (struct file_operations *)pvArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
void wrap_unregister_chrdev()
|
|
||||||
{
|
|
||||||
unregister_chrdev((unsigned int)ulArg0, "amifldrv");
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
void wrap_mem_map_reserve()
|
|
||||||
{
|
|
||||||
mem_map_reserve((struct page*)pvArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
void wrap_mem_map_unreserve()
|
|
||||||
{
|
|
||||||
mem_map_unreserve((struct page*)pvArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
struct page *wrap_virt_to_page()
|
|
||||||
{
|
|
||||||
return virt_to_page(ulArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
int wrap_remap_page_range()
|
|
||||||
{
|
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
|
|
||||||
ulArg1 = ulArg1>>PAGE_SHIFT;
|
|
||||||
return remap_pfn_range((struct vm_area_struct *)pvArg0, ulArg0, ulArg1, ulArg2, pgArg0);
|
|
||||||
#else
|
|
||||||
return remap_page_range((struct vm_area_struct *)pvArg0, ulArg0, ulArg1, ulArg2, pgArg0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
void *wrap_kmalloc()
|
|
||||||
{
|
|
||||||
return kmalloc((size_t)ulArg0, (int)ulArg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
void wrap_kfree()
|
|
||||||
{
|
|
||||||
kfree(pvArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
unsigned long wrap_copy_from_user()
|
|
||||||
{
|
|
||||||
return copy_from_user(pvArg0, pvArg1, ulArg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
AFU_ATTRIBUTE_FUNC
|
|
||||||
unsigned long wrap_copy_to_user()
|
|
||||||
{
|
|
||||||
return copy_to_user(pvArg0, pvArg1, ulArg0);
|
|
||||||
}
|
|
||||||
|
|
21
amiwrap.h
21
amiwrap.h
|
@ -1,21 +0,0 @@
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
// AMI Firmware Update Utility(APTIO) v5.05.04
|
|
||||||
// Copyright (C)2011 American Megatrends Inc. All Rights Reserved.
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
|
||||||
#define AFU_ATTRIBUTE_FUNC
|
|
||||||
AFU_ATTRIBUTE_FUNC int wrap_register_chrdev(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC void wrap_unregister_chrdev(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC void wrap_mem_map_reserve(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC void wrap_mem_map_unreserve(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC int wrap_remap_page_range(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC struct page *wrap_virt_to_page(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC void *wrap_kmalloc(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC void wrap_kfree(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC unsigned long wrap_copy_from_user(void);
|
|
||||||
AFU_ATTRIBUTE_FUNC unsigned long wrap_copy_to_user(void);
|
|
||||||
extern unsigned long ulArg0;
|
|
||||||
extern unsigned long ulArg1;
|
|
||||||
extern unsigned long ulArg2;
|
|
||||||
extern pgprot_t pgArg0;
|
|
||||||
extern void *pvArg0;
|
|
||||||
extern void *pvArg1;
|
|
|
@ -1,11 +0,0 @@
|
||||||
#include <linux/version.h>
|
|
||||||
|
|
||||||
#define LINUX_PRE_2_6 (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
|
|
||||||
#define LINUX_POST_2_6 (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
|
|
||||||
|
|
||||||
#if LINUX_PRE_2_6
|
|
||||||
# include <linux/wrapper.h>
|
|
||||||
#else
|
|
||||||
# define mem_map_reserve(p) set_bit(PG_reserved, &((p)->flags))
|
|
||||||
# define mem_map_unreserve(p) clear_bit(PG_reserved, &((p)->flags))
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue