diff options
Diffstat (limited to 'klaptopdaemon/linux/k_compat.h')
-rw-r--r-- | klaptopdaemon/linux/k_compat.h | 450 |
1 files changed, 213 insertions, 237 deletions
diff --git a/klaptopdaemon/linux/k_compat.h b/klaptopdaemon/linux/k_compat.h index e6d581b..5a68e55 100644 --- a/klaptopdaemon/linux/k_compat.h +++ b/klaptopdaemon/linux/k_compat.h @@ -1,246 +1,222 @@ -/* - * k_compat.h 1.74 1999/01/07 03:46:29 - * - * The contents of this file are subject to the Mozilla Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License - * at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and - * limitations under the License. - * - * The initial developer of the original code is David A. Hinds - * <dhinds@hyper.stanford.edu>. Portions created by David A. Hinds - * are Copyright (C) 1998 David A. Hinds. All Rights Reserved. - */ +/*====================================================================== + + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The initial developer of the original code is David A. Hinds + <dahinds@users.sourceforge.net>. Portions created by David A. Hinds + are Copyright (C) 1999 David A. Hinds. All Rights Reserved. + + Contributor: Apple Computer, Inc. Portions � 2000 Apple Computer, + Inc. All rights reserved. + + Alternatively, the contents of this file may be used under the + terms of the GNU Public License version 2 (the "GPL"), in which + case the provisions of the GPL are applicable instead of the + above. If you wish to allow the use of your version of this file + only under the terms of the GPL and not to allow others to use + your version of this file under the MPL, indicate your decision + by deleting the provisions above and replace them with the notice + and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this + file under either the MPL or the GPL. + +======================================================================*/ #ifndef _LINUX_K_COMPAT_H #define _LINUX_K_COMPAT_H -#define __LINUX__ -#define VERSION(v,p,s) (((v)<<16)+(p<<8)+s) - -#define RUN_AT(x) (jiffies+(x)) -#define CONST const -#define ALLOC_SKB(len) dev_alloc_skb(len+2) -#define DEVICE(req) ((req)->rq_dev) -#define GET_PACKET(dev, skb, count) \ - skb_reserve((skb), 2); \ - BLOCK_INPUT(skb_put((skb), (count)), (count)); \ - (skb)->protocol = eth_type_trans((skb), (dev)) - -#define BLK_DEV_HDR "linux/blk.h" -#define NEW_MULTICAST - -#define FREE_IRQ(i,d) free_irq(i, d) -#define REQUEST_IRQ(i,h,f,n,d) request_irq(i,h,f,n,d) -#define IRQ(a,b,c) (a,b,c) -#define DEV_ID dev_id - -#if (LINUX_VERSION_CODE < VERSION(2,0,16)) -#define init_waitqueue(p) (*(p) = NULL) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,4)) && !defined(__alpha__) -#define FS_SIZE_T int -#define U_FS_SIZE_T int -#else -#if (LINUX_VERSION_CODE < VERSION(2,1,60)) -#define FS_SIZE_T long -#define U_FS_SIZE_T unsigned long -#else -#define FS_SIZE_T ssize_t -#define U_FS_SIZE_T size_t -#endif -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,25)) -#define net_device_stats enet_statistics -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,31)) -#define FS_RELEASE_T void -#else -#define FS_RELEASE_T int -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,38)) -#define test_and_set_bit set_bit -#endif - -#if (LINUX_VERSION_CODE > VERSION(2,1,16)) -#define AUTOCONF_INCLUDED -#define EXPORT_SYMTAB -#endif -#ifdef CONFIG_MODVERSIONS -#define MODVERSIONS 1 -#include <linux/modversions.h> -#endif -#include <linux/module.h> - -#if (LINUX_VERSION_CODE < VERSION(2,1,18)) -#define MODULE_PARM(a,b) extern int __bogus_decl -#undef GET_USE_COUNT -#define GET_USE_COUNT(m) mod_use_count_ -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,0)) -#define copy_from_user memcpy_fromfs -#define copy_to_user memcpy_tofs - -#if (!defined(__alpha__) || (LINUX_VERSION_CODE < VERSION(2,0,34))) -#define ioremap(a,b) \ - (((a) < 0x100000) ? (void *)((u_long)(a)) : vremap(a,b)) -#define iounmap(v) \ - do { if ((u_long)(v) > 0x100000) vfree(v); } while (0) -#endif -/* This is evil... throw away the built-in get_user in 2.0 */ -#include <asm/segment.h> -#undef get_user - -#ifdef __alpha__ -#define get_user(x, ptr) ((x) = __get_user((ptr), sizeof(*(ptr)))) -#undef get_fs_long -#undef put_fs_long -#define get_fs_long(ptr) __get_user((ptr), sizeof(int)) -#define put_fs_long(x, ptr) __put_user((x), (ptr), sizeof(int)) -#else -#define get_user(x, ptr) \ - ((sizeof(*ptr) == 4) ? (x = get_fs_long(ptr)) : \ - (sizeof(*ptr) == 2) ? (x = get_fs_word(ptr)) : \ - (x = get_fs_byte(ptr))) -#endif - -#else /* 2.1.X */ -#include <asm/uaccess.h> -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,45)) -#define F_INODE(file) ((file)->f_inode) -#else -#define F_INODE(file) ((file)->f_dentry->d_inode) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,51)) -#define INVALIDATE_INODES(r) invalidate_inodes(r) -#else -#define INVALIDATE_INODES(r) \ - do { struct super_block *sb = get_super(r); \ - if (sb) invalidate_inodes(sb); } while (0) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,60)) -#define IRTQ_MAP(irq, dev) irq2dev_map[irq] = dev -#define FOPS(i,f,b,c,p) (i,f,b,c) -#define FPOS (file->f_pos) -#else -#define IRTQ_MAP(irq, dev) while (0) -#define FOPS(i,f,b,c,p) (f,b,c,p) -#define FPOS (*ppos) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,68)) -#define signal_pending(cur) ((cur)->signal & ~(cur)->blocked) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,86)) -#define DEV_KFREE_SKB(skb) dev_kfree_skb(skb, FREE_WRITE) -#else -#define DEV_KFREE_SKB(skb) dev_kfree_skb(skb) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,89)) -#define POLL_WAIT(f, q, w) poll_wait(q, w) -#else -#define POLL_WAIT(f, q, w) poll_wait(f, q, w) -#endif - -#include <asm/byteorder.h> -#ifndef le16_to_cpu -#define le16_to_cpu(x) (x) -#define le32_to_cpu(x) (x) -#define cpu_to_le16(x) (x) -#define cpu_to_le32(x) (x) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,90)) -#define spin_lock(l) do { } while (0) -#define spin_unlock(l) do { } while (0) -#define spin_lock_irqsave(l,f) do { save_flags(f); cli(); } while (0) -#define spin_unlock_irqrestore(l,f) do { restore_flags(f); } while (0) -#else -#include <asm/spinlock.h> -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,104)) -#define mdelay(x) { int i; for (i=0;i<x;i++) udelay(1000); } -#endif +#include <IOKit/assert.h> +#include <IOKit/IOLib.h> +#include <libkern/OSByteOrder.h> +#include <sys/errno.h> + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; + +#define printk IOLog +#define KERN_INFO "IOPCCard info: " +#define KERN_NOTICE "IOPCCard notice: " +#define KERN_DEBUG "IOPCCard debug: " + +#define MODULE_PARM(a,b) +#define MODULE_AUTHOR(a) +#define MODULE_DESCRIPTION(a) + +#define MOD_DEC_USE_COUNT +#define MOD_INC_USE_COUNT + +#define __init +#define __exit + +// we don't need these if we are always inside the workloop +#define ACQUIRE_RESOURCE_LOCK +#define RELEASE_RESOURCE_LOCK + +#define NR_IRQS 256 +#define PCI_INTERRUPT_LINE 0x3c + +#define PCI_CACHE_LINE_SIZE 0xc +#define PCI_LATENCY_TIMER 0xd +#define PCI_BASE_ADDRESS_0 0x10 +#define PCI_COMMAND 0x4 +#define PCI_COMMAND_IO 0x1 +#define PCI_COMMAND_MEMORY 0x2 +#define PCI_COMMAND_MASTER 0x4 +#define PCI_COMMAND_WAIT 0x80 + +#define PCI_HEADER_TYPE 0xe +#define PCI_CLASS_REVISION 0x8 +#define PCI_VENDOR_ID 0x0 +#define PCI_DEVICE_ID 0x2 +#define PCI_STATUS 0x6 + +#define PCI_CLASS_BRIDGE_CARDBUS 0x0607 +#define PCI_CLASS_BRIDGE_PCMCIA 0x0605 + +#define PCI_BASE_ADDRESS_SPACE_IO 0x1 +#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x0 +#define PCI_BASE_ADDRESS_MEM_PREFETCH 0x8 +#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL) +#define PCI_BASE_ADDRESS_SPACE 0x1 +#define PCI_BASE_ADDRESS_IO_MASK (~0x03UL) +#define PCI_INTERRUPT_PIN 0x3d + +struct pt_regs {}; + +#define HZ 100 + +extern void delay_for_interval(natural_t interval, natural_t scale_factor); + +#define mdelay(i) delay_for_interval((i), kMillisecondScale) +#define udelay(i) delay_for_interval((i), kMicrosecondScale) + +struct timer_list { + unsigned long expires; + void (*function)(unsigned long); + unsigned long data; +}; + +extern void IOPCCardAddTimer(struct timer_list * timer); +extern int IOPCCardDeleteTimer(struct timer_list * timer); + +#define jiffies (0) // just cheat on the whole jiffies thing :-) + +#define add_timer(t) IOPCCardAddTimer(t) +#define del_timer(t) IOPCCardDeleteTimer(t) +#define mod_timer(a, b) do { del_timer(a); (a)->expires = (b); add_timer(a); } while (0) + +extern void *kern_os_malloc(size_t size); +extern void *kern_os_realloc(void * addr, size_t size); +extern void kern_os_free(void * addr); + +#define kmalloc(s, x) kern_os_malloc(s) +#define krealloc(a, s, x) kern_os_realloc(a, s) +#define kfree(a) kern_os_free(a) + +#define le16_to_cpu(x) OSSwapLittleToHostInt16(x) +#define le32_to_cpu(x) OSSwapLittleToHostInt32(x) + +//MACOSXXX - all this needs to be cleaned up +typedef struct wait_queue *wait_queue_head_t; +#define init_waitqueue_head(p) DEBUG(0, "init_waitqueue_head stubbed out!\n"); #define wacquire(w) do { } while (0) #define wrelease(w) do { } while (0) -#define wsleep(w) interruptible_sleep_on(w) -#define wakeup(w) wake_up_interruptible(w) -#define wsleeptimeout(w,t) interruptible_sleep_on_timeout(w,t) -#if (LINUX_VERSION_CODE < VERSION(2,1,127)) -#define interruptible_sleep_on_timeout(w,t) \ - ({(current->timeout=jiffies+(t));wsleep(w);current->timeout;}) -#define schedule_timeout(t) \ - do { current->timeout = jiffies+(t); schedule(); } while (0) -#endif - -#include <asm/io.h> -#ifndef readw_ns -#ifdef __powerpc__ -#define readw_ns(p) ld_be16((volatile unsigned short *)(p)) -#define readl_ns(p) ld_be32((volatile unsigned *)(p)) -#define writew_ns(v,p) st_le16((volatile unsigned short *)(p),(v)) -#define writel_ns(v,p) st_le32((volatile unsigned *)(p),(v)) -#define inw_ns(p) in_be16((unsigned short *)((p)+_IO_BASE)) -#define inl_ns(p) in_be32((unsigned *)((p)+_IO_BASE)) -#define outw_ns(v,p) out_be16((unsigned short *)((p)+_IO_BASE),(v)) -#define outl_ns(v,p) out_be32((unsigned *)((p)+_IO_BASE),(v)) -#else -#define readw_ns(p) readw(p) -#define readl_ns(p) readl(p) -#define writew_ns(v,p) writew(v,p) -#define writel_ns(v,p) writel(v,p) -#define inw_ns(p) inw(p) -#define inl_ns(p) inl(p) -#define outw_ns(v,p) outw(v,p) -#define outl_ns(v,p) outl(v,p) -#endif -#endif -#ifndef insw_ns -#define insw_ns(p,b,l) insw(p,b,l) -#define insl_ns(p,b,l) insl(p,b,l) -#define outsw_ns(p,b,l) outsw(p,b,l) -#define outsl_ns(p,b,l) outsl(p,b,l) -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,93)) -#include <linux/bios32.h> -#endif -#include <linux/pci.h> -#ifndef PCI_FUNC -#define PCI_FUNC(devfn) ((devfn)&7) -#define PCI_SLOT(devfn) ((devfn)>>3) -#define PCI_DEVFN(dev,fn) (((dev)<<3)|((fn)&7)) -#endif - -#if (LINUX_VERSION_CODE > VERSION(2,1,117)) -#define NULL_FLUSH NULL, -#else -#define NULL_FLUSH -#endif - -#if (LINUX_VERSION_CODE < VERSION(2,1,126)) -#define SCSI_DISK0_MAJOR SCSI_DISK_MAJOR -#endif - -typedef unsigned long k_time_t; -#define ACTQUIRE_RESOURCE_LOCK do {} while (0) -#define RELEASE_RESOURCE_LOCK do {} while (0) +#define wsleep(w) DEBUG(0, "wsleep stubbed out!\n"); +#define wsleeptimeout(w,t) DEBUG(0, "wsleeptimeout stubbed out!\n"); +#define wakeup(w) DEBUG(0, "wakeup stubbed out!\n"); + +extern u_char IOPCCardReadByte(void *virt); +extern u_long IOPCCardReadLong(void *virt); +extern void IOPCCardWriteByte(void *virt, u_char value); +extern void IOPCCardWriteLong(void *virt, u_int value); + +#define readb(a) IOPCCardReadByte(a) +#define readl(a) IOPCCardReadLong(a) +#define writeb(v, a) IOPCCardWriteByte(a, v) +#define writel(v, a) IOPCCardWriteLong(a, v) + +extern void *IOPCCardIORemap(u_long paddr, u_long size); +extern void IOPCCardIOUnmap(void *vaddr); + +#define ioremap(p, s) IOPCCardIORemap(p, s) +#define iounmap(v) IOPCCardIOUnmap(v) + +#ifdef IOPCCARD_IN_IOKIT_CODE + +class IOPCIDevice; +class IOPCCardBridge; +class IOCardBusDevice; +class IOPCCard16Device; + +extern int init_i82365(IOPCCardBridge *bus, IOPCIDevice *bridge, IOVirtualAddress device_regs); +extern int init_pcmcia_cs(void); + +#else /* !IOPCCARD_IN_IOKIT_CODE */ + +typedef struct IOPCIDevice IOPCIDevice; +typedef struct IOPCCardBridge IOPCCardBridge; +#define IOCardBusDevice IOPCIDevice // subclassing C style +typedef struct IOPCCard16Device IOPCCard16Device; + +extern IOCardBusDevice *IOPCCardCreateCardBusNub(IOPCCardBridge *bus, unsigned int socket, unsigned int function); +extern void IOPCCardRetainNub(void *nub); +extern void IOPCCardReleaseNub(void *nub); + +extern int IOPCCardAddCSCInterruptHandlers(IOPCCardBridge *bus, unsigned int socket, unsigned int irq, + u_int (*top_handler)(u_int), u_int (*bottom_handler)(u_int), + u_int (*enable_functional)(u_int), u_int (*disable_functional)(u_int), + const char* name); +extern int IOPCCardRemoveCSCInterruptHandlers(IOPCCardBridge *bus, unsigned int socket); + +// MACOSXXX - i82365.c and cardbus.c currently use these differently :-) +// the #defines are in those files for now +extern int IOPCCardReadConfigByte(IOPCIDevice *bus, int r, u_char *v); +extern int IOPCCardWriteConfigByte(IOPCIDevice *bus, int r, u_char v); +extern int IOPCCardReadConfigWord(IOPCIDevice *bus, int r, u_short *v); +extern int IOPCCardWriteConfigWord(IOPCIDevice *bus, int r, u_short v); +extern int IOPCCardReadConfigLong(IOPCIDevice *bus, int r, u_int *v); +extern int IOPCCardWriteConfigLong(IOPCIDevice *bus, int r, u_int v); + +// MACOSXXX these need to use IOPCCardBridge *bus, if we have multiple controllers +// on different pci bridges, the current code breaks down, this is currently +// not really an issue on laptops :-) + +extern int check_mem_region(u_long base, u_long num); +extern void request_mem_region(u_long base, u_long num, char *name); +extern void release_mem_region(u_long base, u_long num); + +extern int check_io_region(u_long base, u_long num); +extern void request_io_region(u_long base, u_long num, char *name); +extern void release_io_region(u_long base, u_long num); + +#define check_region(a, l) check_io_region(a, l) +#define request_region(a, l, n) request_io_region(a, l, n) +#define release_region(a, l) release_io_region(a, l) + +extern int configure_i82365(IOPCCardBridge *pccard_nub, IOPCIDevice *bridge_nub, void * device_regs); + +#endif /* IOPCCARD_IN_IOKIT_CODE */ + +/* Flags for device state, from ds.h */ +#define DEV_PRESENT 0x01 +#define DEV_CONFIG 0x02 +#define DEV_STALE_CONFIG 0x04 /* release on close */ +#define DEV_STALE_LINK 0x08 /* detach on release */ +#define DEV_CONFIG_PENDING 0x10 +#define DEV_RELEASE_PENDING 0x20 +#define DEV_SUSPEND 0x40 +#define DEV_BUSY 0x80 + +#define DEV_OK(state) (((state) & ~DEV_BUSY) == (DEV_CONFIG|DEV_PRESENT)) #endif /* _LINUX_K_COMPAT_H */ |