root/include/linux/ioc3.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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

/* [<][>][^][v][top][bottom][index][help] */