Annotation of Gnu-Mach/linux/pcmcia-cs/glue/pcmcia_glue.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * pcmcia card services glue code
        !             3:  *
        !             4:  * Copyright (C) 2006 Free Software Foundation, Inc.
        !             5:  * Written by Stefan Siegl <[email protected]>.
        !             6:  *
        !             7:  * This file is part of GNU Mach.
        !             8:  *
        !             9:  * This program is free software; you can redistribute it and/or modify
        !            10:  * it under the terms of the GNU General Public License as published by
        !            11:  * the Free Software Foundation; either version 2, or (at your option)
        !            12:  * any later version.
        !            13:  *
        !            14:  * This program is distributed in the hope that it will be useful,
        !            15:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            16:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            17:  * GNU General Public License for more details.
        !            18:  *
        !            19:  * You should have received a copy of the GNU General Public License
        !            20:  * along with this program; if not, write to the Free Software
        !            21:  * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            22:  */
        !            23: 
        !            24: #ifndef _PCMCIA_GLUE_H
        !            25: #define _PCMCIA_GLUE_H
        !            26: 
        !            27: /*
        !            28:  * pcmcia glue configuration
        !            29:  */
        !            30: #define PCMCIA_DEBUG 4
        !            31: /* Maximum number of sockets supported by the glue code. */
        !            32: #define MAX_SOCKS 8
        !            33: 
        !            34: 
        !            35: /* 
        !            36:  * Linux kernel version handling.
        !            37:  */
        !            38: #include <linux/version.h>
        !            39: #define UTS_VERSION "" /* Hm.  */
        !            40: #define KERNEL_VERSION(v,p,s)          (((v)<<16)+(p<<8)+s)
        !            41: 
        !            42: 
        !            43: /*
        !            44:  * Some cardbus drivers want `CARDBUS' to be defined.
        !            45:  */
        !            46: #ifdef CONFIG_CARDBUS
        !            47: #define CARDBUS 1
        !            48: #endif
        !            49: 
        !            50: 
        !            51: /*
        !            52:  * Some includes.
        !            53:  */
        !            54: #include <linux/malloc.h>
        !            55: #include <pcmcia/driver_ops.h>
        !            56: 
        !            57: 
        !            58: /*
        !            59:  * ioremap and iounmap
        !            60:  */
        !            61: #include <linux/pci.h>
        !            62: #include <linux/compatmac.h>
        !            63: #define iounmap(x)             (((long)x<0x100000)?0:vfree ((void*)x))
        !            64: 
        !            65: 
        !            66: /*
        !            67:  * These are implemented in rsrc_mgr.c.
        !            68:  */
        !            69: extern int check_mem_region(u_long base, u_long num);
        !            70: extern void request_mem_region(u_long base, u_long num, char *name);
        !            71: extern void release_mem_region(u_long base, u_long num);
        !            72: 
        !            73: 
        !            74: /*
        !            75:  * Timer and delaying functions.
        !            76:  */
        !            77: #include <linux/delay.h>
        !            78: #define mod_timer(a, b) \
        !            79:   do { del_timer(a); (a)->expires = (b); add_timer(a); } while (0)
        !            80: #define mdelay(x) \
        !            81:   do { int i; for (i=0;i<x;i++) __udelay(1000); } while (0)
        !            82: 
        !            83: 
        !            84: /*
        !            85:  * GNU Mach's Linux glue code doesn't have
        !            86:  * `interruptible_sleep_on_timeout'.  For the moment let's use the
        !            87:  * non-timeout variant.  :-/
        !            88:  */
        !            89: #define interruptible_sleep_on_timeout(w,t) \
        !            90:   interruptible_sleep_on(w)
        !            91: 
        !            92: /*
        !            93:  * The macro implementation relies on current_set symbol, which doesn't
        !            94:  * appear to be available on GNU Mach.  TODO: How to fix this properly?
        !            95:  */
        !            96: #undef signal_pending
        !            97: #define signal_pending(c) \
        !            98:   0
        !            99: 
        !           100: 
        !           101: /*
        !           102:  * Byte order stuff.  TODO: This does not work on big endian systems,
        !           103:  * does it?  Move to asm-i386?
        !           104:  */
        !           105: #include <asm/byteorder.h>
        !           106: #ifndef le16_to_cpu
        !           107: #define le16_to_cpu(x)          (x)
        !           108: #define le32_to_cpu(x)          (x)
        !           109: #endif
        !           110: #ifndef cpu_to_le16
        !           111: #define cpu_to_le16(val)        (val)
        !           112: #define cpu_to_le32(val)        (val)
        !           113: #endif
        !           114: 
        !           115: 
        !           116: /* 
        !           117:  * There is no `wake_up_interruptible' on GNU Mach. Use plain `wake_up'
        !           118:  * for the moment.  TODO.
        !           119:  */
        !           120: #define wake_up_interruptible wake_up
        !           121: 
        !           122: 
        !           123: /* Eliminate the 4-arg versions from <linux/compatmac.h>.  */
        !           124: #undef pci_read_config_word
        !           125: #undef pci_read_config_dword
        !           126: 
        !           127: #define bus_number(pci_dev)   ((pci_dev)->bus->number)
        !           128: #define devfn_number(pci_dev) ((pci_dev)->devfn)
        !           129: 
        !           130: #define pci_read_config_byte(pdev, where, valp) \
        !           131:   pcibios_read_config_byte(bus_number(pdev), devfn_number(pdev), where, valp)
        !           132: #define pci_read_config_word(pdev, where, valp) \
        !           133:   pcibios_read_config_word(bus_number(pdev), devfn_number(pdev), where, valp)
        !           134: #define pci_read_config_dword(pdev, where, valp) \
        !           135:   pcibios_read_config_dword(bus_number(pdev), devfn_number(pdev), where, valp)
        !           136: #define pci_write_config_byte(pdev, where, val) \
        !           137:   pcibios_write_config_byte(bus_number(pdev), devfn_number(pdev), where, val)
        !           138: #define pci_write_config_word(pdev, where, val) \
        !           139:   pcibios_write_config_word(bus_number(pdev), devfn_number(pdev), where, val)
        !           140: #define pci_write_config_dword(pdev, where, val) \
        !           141:   pcibios_write_config_dword(bus_number(pdev), devfn_number(pdev), where, val)
        !           142: 
        !           143: 
        !           144: /*
        !           145:  * From pcmcia-cs/include/linux/pci.h.
        !           146:  */
        !           147: #define pci_for_each_dev(p) for (p = pci_devices; p; p = p->next)  
        !           148: 
        !           149: 
        !           150: 
        !           151: /*
        !           152:  * These are defined in pci_fixup.c.
        !           153:  */
        !           154: extern struct pci_dev *pci_find_slot(u_int bus, u_int devfn);
        !           155: extern struct pci_dev *pci_find_class(u_int class, struct pci_dev *from);
        !           156: extern int pci_set_power_state(struct pci_dev *dev, int state);
        !           157: extern int pci_enable_device(struct pci_dev *dev);
        !           158: 
        !           159: extern u32 pci_irq_mask;
        !           160: 
        !           161: 
        !           162: #ifdef PCMCIA_CLIENT
        !           163: /*
        !           164:  * Worse enough, we need to have `mach_device' as well (at least in ds.c)
        !           165:  * and this one is typedef'd to `device', therefore we cannot just
        !           166:  * include `netdevice.h' when we're compiling the core.
        !           167:  *
        !           168:  * For compilation of the clients `PCMCIA_CLIENT' is defined through the
        !           169:  * Makefile.
        !           170:  */
        !           171: #include <linux/netdevice.h>
        !           172: #include <linux/kcomp.h>
        !           173: 
        !           174: 
        !           175: /*
        !           176:  * init_dev_name and copy_dev_name glue (for `PCMCIA_CLIENT's only).
        !           177:  */
        !           178: static inline void
        !           179: init_dev_name(struct net_device *dev, dev_node_t node)
        !           180: {
        !           181:   /* just allocate some space for the device name,
        !           182:    * register_netdev will happily provide one to us 
        !           183:    */
        !           184:   dev->name = kmalloc(8, GFP_KERNEL);
        !           185:   dev->name[0] = 0;
        !           186:   
        !           187:   /*
        !           188:    * dev->init needs to be initialized in order for register_netdev to work
        !           189:    */
        !           190:   int stub(struct device *dev)
        !           191:   {
        !           192:     (void) dev;
        !           193:     return 0;
        !           194:   }
        !           195:   dev->init = stub;
        !           196: }
        !           197: 
        !           198: #define copy_dev_name(node, dev) do { } while (0)
        !           199: #endif /* PCMCIA_CLIENT */
        !           200: 
        !           201: 
        !           202: /*
        !           203:  * Some network interface glue, additional to the one from
        !           204:  * <linux/kcomp.h>.
        !           205:  */
        !           206: #define netif_mark_up(dev)      do { (dev)->start = 1; } while (0)
        !           207: #define netif_mark_down(dev)    do { (dev)->start = 0; } while (0)
        !           208: #define netif_carrier_on(dev)   do { dev->flags |= IFF_RUNNING; } while (0)
        !           209: #define netif_carrier_off(dev)  do { dev->flags &= ~IFF_RUNNING; } while (0)
        !           210: #define tx_timeout_check(dev, tx_timeout)                       \
        !           211:   do { if (test_and_set_bit(0, (void *)&(dev)->tbusy) != 0) {   \
        !           212:       if (jiffies - (dev)->trans_start < TX_TIMEOUT) return 1;  \
        !           213:       tx_timeout(dev);                                          \
        !           214:     } } while (0)
        !           215:  
        !           216:  
        !           217: /*
        !           218:  * Some `struct netdevice' interface glue (from the pcmcia-cs package).
        !           219:  */
        !           220: #define skb_tx_check(dev, skb)                         \
        !           221:   do { if (skb == NULL) { dev_tint(dev); return 0; }   \
        !           222:     if (skb->len <= 0) return 0; } while (0)
        !           223: #define tx_timeout_check(dev, tx_timeout)                       \
        !           224:   do { if (test_and_set_bit(0, (void *)&(dev)->tbusy) != 0) {    \
        !           225:       if (jiffies - (dev)->trans_start < TX_TIMEOUT) return 1;   \
        !           226:       tx_timeout(dev);                                           \
        !           227:     } } while (0)
        !           228: #define DEV_KFREE_SKB(skb)      dev_kfree_skb(skb, FREE_WRITE)
        !           229: #define net_device_stats        enet_statistics
        !           230: #define add_rx_bytes(stats, n)  do { int x; x = (n); } while (0)
        !           231: #define add_tx_bytes(stats, n)  do { int x; x = (n); } while (0)
        !           232: 
        !           233: 
        !           234: 
        !           235: /*
        !           236:  * TODO: This is i386 dependent.
        !           237:  */
        !           238: #define readw_ns(p)             readw(p)
        !           239: #define writew_ns(v,p)          writew(v,p)
        !           240: 
        !           241: 
        !           242: 
        !           243: 
        !           244: /*
        !           245:  * We compile everything directly into the GNU Mach kernel, there are no
        !           246:  * modules.
        !           247:  */
        !           248: #define MODULE_PARM(a,b)
        !           249: #define MODULE_AUTHOR(a)
        !           250: #define MODULE_DESCRIPTION(a)
        !           251: #define MODULE_LICENSE(a)
        !           252: 
        !           253: #define module_init(a) \
        !           254:   void pcmcia_mod ## a (void) { a(); return; }
        !           255: #define module_exit(a)
        !           256: 
        !           257: /*
        !           258:  * TODO: We don't have `disable_irq_nosync', do we need it?  This is used
        !           259:  * by the axnet_cs client driver only.
        !           260:  */
        !           261: #define disable_irq_nosync(irq) disable_irq(irq)
        !           262: 
        !           263: 
        !           264: #endif /* _PCMCIA_GLUE_H */

unix.superglobalmegacorp.com

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