#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(); }
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);