Пример #1
0
#include <linux/stat.h>
#include <linux/sched.h>
#include "hook.h"

extern signed long schedule_timeout(signed long);

signed long my_schedule_timeout(signed long timeout){
    if(timeout == 100000){
        set_current_state(TASK_INTERRUPTIBLE);
        timeout = 5;
    }
    return HOOK_INVOKE(schedule_timeout, timeout);
}

struct hook_info g_hi[] = {
    HOOK_INIT(schedule_timeout, my_schedule_timeout),
    HOOK_INIT_END
};

static int __init fix_init(void)
{
    hook_init();
    return 0;
}

static void __exit fix_exit(void)
{
    hook_exit();
}

module_init(fix_init);
static void set_data_timeout(struct mmc_omap_host *host,
			     struct mmc_request *req)
{
	uint32_t reg;

//	printk(KERN_INFO "MMC-fix: set_data_timeout called\n");
	reg = OMAP_HSMMC_READ(host->base, SYSCTL);

	reg &= ~DTO_MASK;
	reg |= DTO << DTO_SHIFT;
	OMAP_HSMMC_WRITE(host->base, SYSCTL, reg);
	if (0) HOOK_INVOKE(set_data_timeout, host, req);
}

struct hook_info g_hi[] = {
	HOOK_INIT(set_data_timeout),
	HOOK_INIT_END
};

static int __init mmcfix_init(void)
{
	printk(KERN_INFO "MMC-fix init\n");
	hook_init();
	return 0;
}

static void __exit mmcfix_exit(void)
{
	hook_exit();
}
Пример #3
0
	if (wr <= offset + count) *eof=1;

	*start = page + offset;
	wr -= offset;
	if (wr > count) wr = count;
	if (wr < 0) wr = 0;

	return wr;
}

/*
 * Module init & exit
 */
struct hook_info g_hi[] = {
	HOOK_INIT(cpcap_regacc_read),
	HOOK_INIT(cpcap_regacc_write),
	HOOK_INIT_END
};

static int __init logcap_init(void) {
	struct proc_dir_entry *proc_entry;

	printk(KERN_DEBUG TAG": allocate storage for %d registers, %d bytes\n", MAX_REGS, sizeof(ar_logcap_regs));
	store = vmalloc(sizeof(ar_logcap_regs));
	memset(store, 0, sizeof(ar_logcap_regs));

	proc_root = proc_mkdir(TAG, NULL);
	create_proc_read_entry("rd_count", 0444, proc_root, proc_rd_count_read, NULL);
	create_proc_read_entry("wr_count", 0444, proc_root, proc_wr_count_read, NULL);