Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * This file is subject to the terms and conditions of the GNU General Public
  3  * License.  See the file "COPYING" in the main directory of this archive
  4  * for more details.
  5  *
  6  * Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org>
  7  */
  8 
  9 #ifndef _LINUX_IOC3_H
 10 #define _LINUX_IOC3_H
 11 
 12 #include <asm/sn/ioc3.h>
 13 
 14 #define IOC3_MAX_SUBMODULES     32
 15 
 16 #define IOC3_CLASS_NONE         0
 17 #define IOC3_CLASS_BASE_IP27    1
 18 #define IOC3_CLASS_BASE_IP30    2
 19 #define IOC3_CLASS_MENET_123    3
 20 #define IOC3_CLASS_MENET_4      4
 21 #define IOC3_CLASS_CADDUO       5
 22 #define IOC3_CLASS_SERIAL       6
 23 
 24 /* One of these per IOC3 */
 25 struct ioc3_driver_data {
 26         struct list_head list;
 27         int id;                         /* IOC3 sequence number */
 28         /* PCI mapping */
 29         unsigned long pma;              /* physical address */
 30         struct ioc3 __iomem *vma;       /* pointer to registers */
 31         struct pci_dev *pdev;           /* PCI device */
 32         /* IRQ stuff */
 33         int dual_irq;                   /* set if separate IRQs are used */
 34         int irq_io, irq_eth;            /* IRQ numbers */
 35         /* GPIO magic */
 36         spinlock_t gpio_lock;
 37         unsigned int gpdr_shadow;
 38         /* NIC identifiers */
 39         char nic_part[32];
 40         char nic_serial[16];
 41         char nic_mac[6];
 42         /* submodule set */
 43         int class;
 44         void *data[IOC3_MAX_SUBMODULES];        /* for submodule use */
 45         int active[IOC3_MAX_SUBMODULES];        /* set if probe succeeds */
 46         /* is_ir_lock must be held while
 47          * modifying sio_ie values, so
 48          * we can be sure that sio_ie is
 49          * not changing when we read it
 50          * along with sio_ir.
 51          */
 52         spinlock_t ir_lock;     /* SIO_IE[SC] mod lock */
 53 };
 54 
 55 /* One per submodule */
 56 struct ioc3_submodule {
 57         char *name;             /* descriptive submodule name */
 58         struct module *owner;   /* owning kernel module */
 59         int ethernet;           /* set for ethernet drivers */
 60         int (*probe) (struct ioc3_submodule *, struct ioc3_driver_data *);
 61         int (*remove) (struct ioc3_submodule *, struct ioc3_driver_data *);
 62         int id;                 /* assigned by IOC3, index for the "data" array */
 63         /* IRQ stuff */
 64         unsigned int irq_mask;  /* IOC3 IRQ mask, leave clear for Ethernet */
 65         int reset_mask;         /* non-zero if you want the ioc3.c module to reset interrupts */
 66         int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
 67         /* private submodule data */
 68         void *data;             /* assigned by submodule */
 69 };
 70 
 71 /**********************************
 72  * Functions needed by submodules *
 73  **********************************/
 74 
 75 #define IOC3_W_IES              0
 76 #define IOC3_W_IEC              1
 77 
 78 /* registers a submodule for all existing and future IOC3 chips */
 79 extern int ioc3_register_submodule(struct ioc3_submodule *);
 80 /* unregisters a submodule */
 81 extern void ioc3_unregister_submodule(struct ioc3_submodule *);
 82 /* enables IRQs indicated by irq_mask for a specified IOC3 chip */
 83 extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
 84 /* ackowledges specified IRQs */
 85 extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
 86 /* disables IRQs indicated by irq_mask for a specified IOC3 chip */
 87 extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
 88 /* atomically sets GPCR bits */
 89 extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int);
 90 /* general ireg writer */
 91 extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg);
 92 
 93 #endif
 94 
  This page was automatically generated by the LXR engine.