Annotation of Gnu-Mach/linux/src/drivers/net/kern_compat.h, revision 1.1.1.1

1.1       root        1: #ifndef _KERN_COMPAT_H
                      2: #define _KERN_COMPAT_H
                      3: /* kern_compat.h: Linux PCI network adapter backward compatibility code. */
                      4: /*
                      5:        $Revision: 1.1.2.2 $ $Date: 2007/08/04 21:02:21 $
                      6: 
                      7:        Kernel compatibility defines.
                      8:        This file provides macros to mask the difference between kernel versions.
                      9:        It is designed primarily to allow device drivers to be written so that
                     10:        they work with a range of kernel versions.
                     11: 
                     12:        Written 1999-2003 Donald Becker, Scyld Computing Corporation
                     13:        This software may be used and distributed according to the terms
                     14:        of the GNU General Public License (GPL), incorporated herein by
                     15:        reference.  Drivers interacting with these functions are derivative
                     16:        works and thus are covered the GPL.  They must include an explicit
                     17:        GPL notice.
                     18: 
                     19:        This code also provides inline scan and activate functions for PCI network
                     20:        interfaces.  It has an interface identical to pci-scan.c, but is
                     21:        intended as an include file to simplify using updated drivers with older
                     22:        kernel versions.
                     23:        This code version matches pci-scan.c:v0.05 9/16/99
                     24: 
                     25:        The author may be reached as [email protected], or
                     26:        Donald Becker
                     27:        Penguin Computing Corporation
                     28:        914 Bay Ridge Road, Suite 220
                     29:        Annapolis MD 21403
                     30: 
                     31:        Other contributers:
                     32:        <none>
                     33: */
                     34: 
                     35: /* We try to use defined values to decide when an interface has changed or
                     36:    added features, but we must have the kernel version number for a few. */
                     37: #if ! defined(LINUX_VERSION_CODE)  ||  (LINUX_VERSION_CODE < 0x10000)
                     38: #include <linux/version.h>
                     39: #endif
                     40: /* Older kernel versions didn't include modversions automatically. */
                     41: #if LINUX_VERSION_CODE < 0x20300  &&  defined(MODVERSIONS)
                     42: #include <linux/modversions.h>
                     43: #endif
                     44: 
                     45: /* There was no support for PCI address space mapping in 2.0, but the
                     46:    Alpha needed it.  See the 2.2 documentation. */
                     47: #if LINUX_VERSION_CODE < 0x20100  &&  ! defined(__alpha__)
                     48: #define ioremap(a,b)\
                     49:     (((unsigned long)(a) >= 0x100000) ? vremap(a,b) : (void*)(a))
                     50: #define iounmap(v)\
                     51:     do { if ((unsigned long)(v) >= 0x100000) vfree(v);} while (0)
                     52: #endif
                     53: 
                     54: /* Support for adding info about the purpose of and parameters for kernel
                     55:    modules was added in 2.1. */
                     56: #if LINUX_VERSION_CODE < 0x20115
                     57: #define MODULE_AUTHOR(name)  extern int nonesuch
                     58: #define MODULE_DESCRIPTION(string)  extern int nonesuch
                     59: #define MODULE_PARM(varname, typestring)  extern int nonesuch
                     60: #define MODULE_PARM_DESC(var,desc) extern int nonesuch
                     61: #endif
                     62: #if !defined(MODULE_LICENSE)
                     63: #define MODULE_LICENSE(license)        \
                     64: static const char __module_license[] __attribute__((section(".modinfo"))) =   \
                     65: "license=" license
                     66: #endif
                     67: #if !defined(MODULE_PARM_DESC)
                     68: #define MODULE_PARM_DESC(var,desc)             \
                     69: const char __module_parm_desc_##var[]          \
                     70: __attribute__((section(".modinfo"))) =         \
                     71: "parm_desc_" __MODULE_STRING(var) "=" desc
                     72: #endif
                     73: 
                     74: /* SMP and better multiarchitecture support were added.
                     75:    Using an older kernel means we assume a little-endian uniprocessor.
                     76: */
                     77: #if LINUX_VERSION_CODE < 0x20123
                     78: #define hard_smp_processor_id() smp_processor_id()
                     79: //#define test_and_set_bit(val, addr) set_bit(val, addr)
                     80: #define cpu_to_le16(val) (val)
                     81: #define cpu_to_le32(val) (val)
                     82: #define le16_to_cpu(val) (val)
                     83: #define le16_to_cpus(val)              /* In-place conversion. */
                     84: #define le32_to_cpu(val) (val)
                     85: #define cpu_to_be16(val) ((((val) & 0xff) << 8) +  (((val) >> 8) & 0xff))
                     86: #define cpu_to_be32(val) ((cpu_to_be16(val) << 16) + cpu_to_be16((val) >> 16))
                     87: typedef long spinlock_t;
                     88: #define SPIN_LOCK_UNLOCKED 0
                     89: #define spin_lock(lock)
                     90: #define spin_unlock(lock)
                     91: #define spin_lock_irqsave(lock, flags) do {save_flags(flags); cli();} while(0)
                     92: #define spin_unlock_irqrestore(lock, flags) restore_flags(flags)
                     93: #endif
                     94: 
                     95: #if LINUX_VERSION_CODE <= 0x20139
                     96: #define        net_device_stats enet_statistics
                     97: #else
                     98: #define NETSTATS_VER2
                     99: #endif
                    100: 
                    101: /* These are used by the netdrivers to report values from the
                    102:    MII (Media Indpendent Interface) management registers.
                    103: */
                    104: #ifndef SIOCGMIIPHY
                    105: #define SIOCGMIIPHY (SIOCDEVPRIVATE)           /* Get the PHY in use. */
                    106: #define SIOCGMIIREG (SIOCDEVPRIVATE+1)                 /* Read a PHY register. */
                    107: #define SIOCSMIIREG (SIOCDEVPRIVATE+2)                 /* Write a PHY register. */
                    108: #endif
                    109: #ifndef SIOCGPARAMS
                    110: #define SIOCGPARAMS (SIOCDEVPRIVATE+3)                 /* Read operational parameters. */
                    111: #define SIOCSPARAMS (SIOCDEVPRIVATE+4)                 /* Set operational parameters. */
                    112: #endif
                    113: 
                    114: #if !defined(HAVE_NETIF_MSG)
                    115: enum {
                    116:        NETIF_MSG_DRV           = 0x0001,
                    117:        NETIF_MSG_PROBE         = 0x0002,
                    118:        NETIF_MSG_LINK          = 0x0004,
                    119:        NETIF_MSG_TIMER         = 0x0008,
                    120:        NETIF_MSG_IFDOWN        = 0x0010,
                    121:        NETIF_MSG_IFUP          = 0x0020,
                    122:        NETIF_MSG_RX_ERR        = 0x0040,
                    123:        NETIF_MSG_TX_ERR        = 0x0080,
                    124:        NETIF_MSG_TX_QUEUED     = 0x0100,
                    125:        NETIF_MSG_INTR          = 0x0200,
                    126:        NETIF_MSG_TX_DONE       = 0x0400,
                    127:        NETIF_MSG_RX_STATUS     = 0x0800,
                    128:        NETIF_MSG_PKTDATA       = 0x1000,
                    129:        /* 2000 is reserved. */
                    130:        NETIF_MSG_WOL           = 0x4000,
                    131:        NETIF_MSG_MISC          = 0x8000,
                    132:        NETIF_MSG_RXFILTER      = 0x10000,
                    133: };
                    134: #define NETIF_MSG_MAX 0x10000
                    135: #endif
                    136: 
                    137: #if !defined(NETIF_MSG_MAX) || NETIF_MSG_MAX < 0x8000
                    138: #define NETIF_MSG_MISC 0x8000
                    139: #endif
                    140: #if !defined(NETIF_MSG_MAX) || NETIF_MSG_MAX < 0x10000
                    141: #define NETIF_MSG_RXFILTER 0x10000
                    142: #endif
                    143: 
                    144: #if LINUX_VERSION_CODE < 0x20155
                    145: #include <linux/bios32.h>
                    146: #define PCI_SUPPORT_VER1
                    147: /* A minimal version of the 2.2.* PCI support that handles configuration
                    148:    space access.
                    149:    Drivers that actually use pci_dev fields must do explicit compatibility.
                    150:    Note that the struct pci_dev * "pointer" is actually a byte mapped integer!
                    151: */
                    152: #if LINUX_VERSION_CODE < 0x20014
                    153: struct pci_dev { int not_used; };
                    154: #endif
                    155: 
                    156: #define pci_find_slot(bus, devfn) (struct pci_dev*)((bus<<8) | devfn | 0xf0000)
                    157: #define bus_number(pci_dev) ((((int)(pci_dev))>>8) & 0xff)
                    158: #define devfn_number(pci_dev) (((int)(pci_dev)) & 0xff)
                    159: #define pci_bus_number(pci_dev) ((((int)(pci_dev))>>8) & 0xff)
                    160: #define pci_devfn(pci_dev) (((int)(pci_dev)) & 0xff)
                    161: 
                    162: #ifndef CONFIG_PCI
                    163: extern inline int pci_present(void) { return 0; }
                    164: #else
                    165: #define pci_present pcibios_present
                    166: #endif
                    167: 
                    168: #define pci_read_config_byte(pdev, where, valp)\
                    169:        pcibios_read_config_byte(bus_number(pdev), devfn_number(pdev), where, valp)
                    170: #define pci_read_config_word(pdev, where, valp)\
                    171:        pcibios_read_config_word(bus_number(pdev), devfn_number(pdev), where, valp)
                    172: #define pci_read_config_dword(pdev, where, valp)\
                    173:        pcibios_read_config_dword(bus_number(pdev), devfn_number(pdev), where, valp)
                    174: #define pci_write_config_byte(pdev, where, val)\
                    175:        pcibios_write_config_byte(bus_number(pdev), devfn_number(pdev), where, val)
                    176: #define pci_write_config_word(pdev, where, val)\
                    177:        pcibios_write_config_word(bus_number(pdev), devfn_number(pdev), where, val)
                    178: #define pci_write_config_dword(pdev, where, val)\
                    179:        pcibios_write_config_dword(bus_number(pdev), devfn_number(pdev), where, val)
                    180: #else
                    181: #define PCI_SUPPORT_VER2
                    182: #define pci_bus_number(pci_dev) ((pci_dev)->bus->number)
                    183: #define pci_devfn(pci_dev) ((pci_dev)->devfn)
                    184: #endif
                    185: 
                    186: /* The arg count changed, but function name did not.
                    187:    We cover that bad choice by defining a new name.
                    188: */
                    189: #if LINUX_VERSION_CODE < 0x20159
                    190: #define dev_free_skb(skb) dev_kfree_skb(skb, FREE_WRITE)
                    191: #define dev_free_skb_irq(skb) dev_kfree_skb(skb, FREE_WRITE)
                    192: #elif LINUX_VERSION_CODE < 0x20400
                    193: #define dev_free_skb(skb) dev_kfree_skb(skb)
                    194: #define dev_free_skb_irq(skb) dev_kfree_skb(skb)
                    195: #else
                    196: #define dev_free_skb(skb) dev_kfree_skb(skb)
                    197: #define dev_free_skb_irq(skb) dev_kfree_skb_irq(skb)
                    198: #endif
                    199: 
                    200: /* Added at the suggestion of Jes Sorensen. */
                    201: #if LINUX_VERSION_CODE > 0x20153
                    202: #include <linux/init.h>
                    203: #else
                    204: #define __init
                    205: #define __initdata
                    206: #define __initfunc(__arginit) __arginit
                    207: #endif
                    208: 
                    209: /* The old 'struct device' used a too-generic name. */
                    210: #if LINUX_VERSION_CODE < 0x2030d
                    211: #define net_device device
                    212: #endif
                    213: 
                    214: /* More changes for the 2.4 kernel, some in the zillion 2.3.99 releases. */
                    215: #if LINUX_VERSION_CODE < 0x20363
                    216: #define DECLARE_MUTEX(name) struct semaphore (name) = MUTEX;
                    217: #define down_write(semaphore_p) down(semaphore_p)
                    218: #define down_read(semaphore_p) down(semaphore_p)
                    219: #define up_write(semaphore_p) up(semaphore_p)
                    220: #define up_read(semaphore_p) up(semaphore_p)
                    221: /* Note that the kernel version has a broken time_before()! */
                    222: #define time_after(a,b) ((long)(b) - (long)(a) < 0)
                    223: #define time_before(a,b) ((long)(a) - (long)(b) < 0)
                    224: #else
                    225: #define get_free_page get_zeroed_page
                    226: #endif
                    227: 
                    228: /* The 2.2 kernels added the start of capability-based security for operations
                    229:    that formerally could only be done by root.
                    230: */
                    231: #if ! defined(CAP_NET_ADMIN)
                    232: #define capable(CAP_XXX) (suser())
                    233: #endif
                    234: 
                    235: #if ! defined(HAVE_NETIF_QUEUE)
                    236: #define netif_wake_queue(dev)   do { clear_bit( 0, (void*)&(dev)->tbusy); mark_bh(NET_BH); } while (0)
                    237: #define netif_start_tx_queue(dev) do { (dev)->tbusy = 0; dev->start = 1; } while (0)
                    238: #define netif_stop_tx_queue(dev) do { (dev)->tbusy = 1; dev->start = 0; } while (0)
                    239: #define netif_queue_paused(dev) ((dev)->tbusy != 0)
                    240: /* Splitting these lines exposes a bug in some preprocessors. */
                    241: #define netif_pause_tx_queue(dev) (test_and_set_bit( 0, (void*)&(dev)->tbusy))
                    242: #define netif_unpause_tx_queue(dev) do { clear_bit( 0, (void*)&(dev)->tbusy); } while (0)
                    243: #define netif_resume_tx_queue(dev) do { clear_bit( 0, (void*)&(dev)->tbusy); mark_bh(NET_BH); } while (0)
                    244: 
                    245: #define netif_running(dev) ((dev)->start != 0)
                    246: #define netif_device_attach(dev) do {; } while (0)
                    247: #define netif_device_detach(dev) do {; } while (0)
                    248: #define netif_device_present(dev) (1)
                    249: #define netif_set_tx_timeout(dev, func, deltajiffs)   do {; } while (0)
                    250: #define netif_link_down(dev)  (dev)->flags &= ~IFF_RUNNING
                    251: #define netif_link_up(dev)  (dev)->flags |= IFF_RUNNING
                    252: 
                    253: #else
                    254: 
                    255: #define netif_start_tx_queue(dev) netif_start_queue(dev)
                    256: #define netif_stop_tx_queue(dev) netif_stop_queue(dev)
                    257: #define netif_queue_paused(dev) netif_queue_stopped(dev)
                    258: #define netif_resume_tx_queue(dev) netif_wake_queue(dev)
                    259: /* Only used in transmit path.  No function in 2.4. */
                    260: #define netif_pause_tx_queue(dev)  0
                    261: #define netif_unpause_tx_queue(dev) do {; } while (0)
                    262: 
                    263: #ifdef __LINK_STATE_NOCARRIER
                    264: #define netif_link_down(dev)  netif_carrier_off(dev)
                    265: #define netif_link_up(dev)  netif_carrier_on(dev)
                    266: #else
                    267: #define netif_link_down(dev)  (dev)->flags &= ~IFF_RUNNING
                    268: #define netif_link_up(dev)  (dev)->flags |= IFF_RUNNING
                    269: #endif
                    270: 
                    271: #endif
                    272: #ifndef PCI_DMA_BUS_IS_PHYS
                    273: #define pci_dma_sync_single(pci_dev, base_addr, extent, tofrom) do {; } while (0)
                    274: #define pci_map_single(pci_dev, base_addr, extent, dir) virt_to_bus(base_addr)
                    275: #define pci_unmap_single(pci_dev, base_addr, extent, dir) do {; } while (0)
                    276: #endif
                    277: 
                    278: #endif
                    279: /*
                    280:  * Local variables:
                    281:  *  c-indent-level: 4
                    282:  *  c-basic-offset: 4
                    283:  *  tab-width: 4
                    284:  * End:
                    285:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.