📄 linux_wrapper.h
字号:
#define DECLARE_COMPLETION(x) struct completion x
/* driver */
#define driver_unregister(a) do {} while(0)
#define put_device(a) do {} while(0)
/* PCI */
#define MAX_POOL_PAGES 2
#define BITS_PER_LONG 32
struct pci_page
{
PHYSICAL_ADDRESS dmaAddress;
PVOID virtualAddress;
unsigned long bitmap[128]; // 128 == 32bits*4096 blocks
};
struct pci_pool
{
char name[32];
size_t size;
size_t allocation;
size_t blocks_per_page;
struct pci_dev *pdev;
// internal stuff
int pages_allocated;
int blocks_allocated;
struct pci_page pages[MAX_POOL_PAGES];
};
#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
#define pci_pool_create(a,b,c,d,e) my_pci_pool_create(a,b,c,d,e)
struct pci_pool *my_pci_pool_create(const char * name, struct pci_dev * pdev, size_t size, size_t align, size_t allocation);
#define pci_pool_alloc(a,b,c) my_pci_pool_alloc(a,b,c)
void *my_pci_pool_alloc(struct pci_pool * pool, int mem_flags, dma_addr_t *dma_handle);
#define pci_pool_free(a,b,c) my_pci_pool_free(a,b,c)
void my_pci_pool_free(struct pci_pool * pool, void * vaddr, dma_addr_t dma);
#define pci_alloc_consistent(a,b,c) my_pci_alloc_consistent(a,b,c)
void *my_pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle);
#define pci_free_consistent(a,b,c,d) kfree(c)
#define pci_pool_destroy(a) my_pci_pool_destroy(a)
void my_pci_pool_destroy (struct pci_pool * pool);
#define pci_module_init(x) my_pci_module_init(x)
int my_pci_module_init(struct pci_driver *x);
#define pci_unregister_driver(a) do {} while(0)
#define pci_write_config_word(a,b,c) my_pci_write_config_word(a,b,c)
#define bus_register(a) do {} while(0)
#define bus_unregister(a) do {} while(0)
/* DMA */
//#define dma_pool_alloc(a,b,c) my_dma_pool_alloc((a),(b),(c))
#define dma_pool_alloc(a,b,c) pci_pool_alloc(a,b,c)
#define dma_pool_create(a,b,c,d,e) pci_pool_create(a,b,c,d,e)
#define dma_pool_free(a,b,c) pci_pool_free(a,b,c)
#define dma_pool_destroy(a) pci_pool_destroy(a)
//#define dma_alloc_coherent(a,b,c,d) NULL
//#define dma_free_coherent(a,b,c,d) do {} while(0)
#define dma_map_single(a,b,c,d) my_dma_map_single(a,b,c,d)
dma_addr_t my_dma_map_single(struct device *hwdev, void *ptr, size_t size, enum dma_data_direction direction);
#define dma_unmap_single(a,b,c,d) my_dma_unmap_single(a,b,c,d)
void my_dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction);
#define pci_unmap_single(a,b,c,d) my_pci_unmap_single(a,b,c,d)
void my_pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction);
#define dma_sync_single(a,b,c,d) my_dma_sync_single(a,b,c,d)
void my_dma_sync_single(struct device *hwdev, dma_addr_t dma_handle, size_t size, int direction);
#define dma_sync_sg(a,b,c,d) my_dma_sync_sg(a,b,c,d)
void my_dma_sync_sg(struct device *hwdev, struct scatterlist *sg, int nelems, int direction);
#define dma_map_sg(a,b,c,d) my_dma_map_sg(a,b,c,d)
int my_dma_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, enum dma_data_direction direction);
#define dma_unmap_sg(a,b,c,d) my_dma_unmap_sg(a,b,c,d)
void my_dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents, enum dma_data_direction direction);
#define usb_create_driverfs_dev_files(a) do {} while(0)
#define usb_create_driverfs_intf_files(a) do {} while(0)
#define sg_dma_address(x) ((u32)((x)->page*4096 + (x)->offset))
#define sg_dma_len(x) ((x)->length)
#define page_address(x) ((void*)(x/4096))
#define PCI_ROM_RESOURCE 1
#define IORESOURCE_IO CM_RESOURCE_PORT_IO
#define DECLARE_WAITQUEUE(a,b) KEVENT a=0
#define init_waitqueue_head(a) my_init_waitqueue_head(a)
#define add_wait_queue(a,b) do {} while(0)
#define remove_wait_queue(a,b) do {} while(0)
void my_init_waitqueue_head(PKEVENT a);
VOID KeMemoryBarrier(VOID);
#define mb() KeMemoryBarrier()
#define wmb() do {} while (0)
#define rmb() do {} while (0)
/*#define wmb() __asm__ __volatile__ ("": : :"memory")
#define rmb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")*/
#define in_interrupt() 0
#define init_completion(x) my_init_completion(x)
void my_init_completion(struct completion *);
#define wait_for_completion(x) my_wait_for_completion(x)
void my_wait_for_completion(struct completion*);
#define IRQ_NONE 0
#define IRQ_HANDLED 1
#define INIT_WORK(a,b,c) (a)->func=b
#define set_current_state(a) do {} while(0)
#define might_sleep() do {} while(0)
#define daemonize(a) do {} while(0)
#define allow_signal(a) do {} while(0)
#define wait_event_interruptible(x,y) do {} while(0)
#define interruptible_sleep_on(a) my_interruptible_sleep_on(a)
void my_interruptible_sleep_on(PKEVENT evnt);
#define flush_scheduled_work() do {} while(0)
#define refrigerator(x) do {} while(0)
#define signal_pending(x) 0 // Don't fall through threads! ReactOS implements this correctly
#define complete_and_exit(a,b) return 0
//#define kill_proc(a,b,c) 0
#define kill_proc(a,b,c) my_kill_proc(a, b, c);
int my_kill_proc(int pid, int signal, int unk);
#define yield() do {} while(0)
#define cpu_relax() do {} while(0)
#define WARN_ON(a) do {} while(0)
/*------------------------------------------------------------------------*/
/* Lookaside lists funcs */
/*------------------------------------------------------------------------*/
#define kmem_cache_create(a,b,c,d,e,f) my_kmem_cache_create((a),(b),(c),(d),(e),(f))
#define kmem_cache_destroy(a) my_kmem_cache_destroy((a))
#define kmem_cache_alloc(co, flags) my_kmem_cache_alloc((co), (flags))
#define kmem_cache_free(co, ptr) my_kmem_cache_free((co), (ptr))
kmem_cache_t *my_kmem_cache_create(const char *tag, size_t alloc_size,
size_t offset, unsigned long flags,
void *ctor,
void *dtor);
BOOLEAN my_kmem_cache_destroy(kmem_cache_t *co);
void *my_kmem_cache_alloc(kmem_cache_t *co, int flags);
void my_kmem_cache_free(kmem_cache_t *co, void *ptr);
/*------------------------------------------------------------------------*/
/* Kernel macros */
/*------------------------------------------------------------------------*/
#define LINUX_VERSION_CODE 0x020572
#define UTS_SYSNAME "XBOX"
#define UTS_RELEASE "----"
/* from linux/kernel.h */
#define max_t(type,x,y) \
({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
#define min_t(type,x,y) \
({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
/* from linux/stddef.h */
#undef offsetof
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
/*------------------------------------------------------------------------*/
/* Conversion macros */
/*------------------------------------------------------------------------*/
#define __constant_cpu_to_le32(x) (x)
#define cpu_to_le16(x) (x)
#define le16_to_cpu(x) (x)
#define cpu_to_le32(x) (x)
#define cpu_to_le32p(x) (*(__u32*)(x))
#define le32_to_cpup(x) (*(__u32*)(x))
#define le32_to_cpu(x) ((u32)x)
#define le16_to_cpus(x) do {} while (0)
#define le16_to_cpup(x) (*(__u16*)(x))
#define cpu_to_le16p(x) (*(__u16*)(x))
/*------------------------------------------------------------------------*/
/* Debug output */
/*------------------------------------------------------------------------*/
#ifdef DEBUG_MODE
#define dev_printk(lvl,x,f,arg...) printk(f, ## arg)
#define dev_dbg(x,f,arg...) printk(f, ## arg)
#define dev_info(x,f,arg...) printk(f,## arg)
#define dev_warn(x,f,arg...) printk(f,## arg)
#define dev_err(x,f,arg...) printk(f,## arg)
#define pr_debug(x,f,arg...) printk(f,## arg)
#define usbprintk printk
#endif
#ifndef DEBUG_MODE
#define dev_printk(lvl,x,f,arg...) do {} while (0)
#define dev_dbg(x,f,arg...) do {} while (0) //printk(f, ## arg)
#define dev_info(x,f,arg...) do {} while (0)
#define dev_warn(x,f,arg...) do {} while (0)
#define dev_err(x,f,arg...) do {} while (0)
#define pr_debug(x,f,arg...) do {} while (0)
#define usbprintk(arg...) dev_printk(0,0,0,## arg)
#endif
#define PCI_DEVFN(a,b) 0
#define PCI_SLOT(a) 0
/**
* PCI_DEVICE_CLASS - macro used to describe a specific pci device class
* @dev_class: the class, subclass, prog-if triple for this device
* @dev_class_mask: the class mask for this device
*
* This macro is used to create a struct pci_device_id that matches a
* specific PCI class. The vendor, device, subvendor, and subdevice
* fields will be set to PCI_ANY_ID.
*/
#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
.class = (dev_class), .class_mask = (dev_class_mask), \
.vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
/*------------------------------------------------------------------------*/
/* Stuff from kernel */
/*------------------------------------------------------------------------*/
#include "errno.h"
#include "bitops.h"
//#include "linux/pci_ids.h"
/*------------------------------------------------------------------------*/
/* global variables */
/*------------------------------------------------------------------------*/
#define jiffies my_jiffies
extern int my_jiffies;
#define current my_current
extern struct dummy_process *my_current;
extern struct list_head interrupt_list;
/*------------------------------------------------------------------------*/
/* Function prototypes */
/*------------------------------------------------------------------------*/
void STDCALL usb_hcd_pci_remove (struct pci_dev *dev);
#define my_wait_ms(x) wait_ms(x) // milliseconds
#define udelay(x) my_udelay(x) // microseconds
#define my_mdelay(x) wait_ms(1+x/1000);
#define mdelay(x) my_mdelay(x); // milliseconds = udelay(1000*x)
#define pci_find_slot(a,b) my_pci_find_slot(a,b)
struct pci_dev *my_pci_find_slot(int a,int b);
/*------------------------------------------------------------------------*/
/* Timer management */
/*------------------------------------------------------------------------*/
#define MAX_TIMERS 20
extern struct timer_list *main_timer_list[MAX_TIMERS];
static void __inline__ init_timer(struct timer_list* t)
{
INIT_LIST_HEAD(&t->timer_list);
t->function=NULL;
t->expires=0;
}
static void __inline__ add_timer(struct timer_list* t)
{
int n;
for(n=0;n<MAX_TIMERS;n++)
if (main_timer_list[n]==0)
{
main_timer_list[n]=t;
break;
}
}
static void __inline__ del_timer(struct timer_list* t)
{
int n;
for(n=0;n<MAX_TIMERS;n++)
if (main_timer_list[n]==t)
{
main_timer_list[n]=0;
break;
}
}
static void __inline__ del_timer_sync(struct timer_list* t)
{
int n;
for(n=0;n<MAX_TIMERS;n++)
if (main_timer_list[n]==t)
{
main_timer_list[n]=0;
break;
}
}
static void __inline__ mod_timer(struct timer_list* t, int ex)
{
del_timer(t);
t->expires=ex;
add_timer(t);
}
#define time_after_eq(a,b) \
(((long)(a) - (long)(b) >= 0))
/*------------------------------------------------------------------------*/
/* Device driver and process related stuff */
/*------------------------------------------------------------------------*/
static int __inline__ usb_major_init(void){return 0;}
static void __inline__ usb_major_cleanup(void){}
static void __inline__ schedule_work(void* p){}
#define device_initialize(x) my_device_initialize(x)
void my_device_initialize(struct device *dev);
#define get_device(x) my_get_device(x)
struct device *my_get_device(struct device *dev);
#define device_add(x) my_device_add(x)
int my_device_add(struct device *dev);
#define driver_register(x) my_driver_register(x)
int my_driver_register(struct device_driver *driver);
#define device_unregister(a) my_device_unregister(a)
int my_device_unregister(struct device *dev);
#define DEVICE_ATTR(a,b,c,d) int xxx_##a
#define device_create_file(a,b) do {} while(0)
#define device_remove_file(a,b) do {} while(0)
#define schedule_timeout(x) my_schedule_timeout(x)
int my_schedule_timeout(int x);
#define wake_up(x) my_wake_up(x)
void my_wake_up(PKEVENT);
// cannot be mapped via macro due to collision with urb->complete
static void __inline__ complete(struct completion *p)
{
printk("completing event 0x%08x\n", (ULONG)p);
/* Wake up x->wait */
p->done++;
wake_up((PKEVENT)&p->wait);
}
#define kernel_thread(a,b,c) my_kernel_thread(a,b,c)
int my_kernel_thread(int STDCALL (*handler)(void*), void* parm, int flags);
/*------------------------------------------------------------------------*/
/* PCI, simple and inlined... */
/*------------------------------------------------------------------------*/
#include "pci_hal.c"
/*------------------------------------------------------------------------*/
/* IRQ handling */
/*------------------------------------------------------------------------*/
#define request_irq(a,b,c,d,e) my_request_irq(a,b,c,d,e)
int my_request_irq(unsigned int irq,
int (*handler)(int, void *, struct pt_regs *),
unsigned long mode, const char *desc, void *data);
#define free_irq(a,b) my_free_irq(a,b)
int free_irq(int irq, void* p);
struct my_irqs {
int (*handler)(int, void *, struct pt_regs *);
int irq;
void* data;
};
#define MAX_IRQS 8
// Exported to top level
void handle_irqs(int irq);
void inc_jiffies(int);
void init_wrapper(struct pci_dev *pci_dev);
void do_all_timers(void);
int my_pci_write_config_word(struct pci_dev *, int, u16);
void UsbKeyBoardInit(void);
void UsbKeyBoardRemove(void);
void UsbMouseInit(void);
void UsbMouseRemove(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -