summaryrefslogtreecommitdiffstats
path: root/klaptopdaemon/linux/k_compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'klaptopdaemon/linux/k_compat.h')
-rw-r--r--klaptopdaemon/linux/k_compat.h450
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 */