PageRenderTime 39ms CodeModel.GetById 13ms app.highlight 5ms RepoModel.GetById 0ms app.codeStats 0ms

/include/linux/ioc3.h

https://bitbucket.org/thekraven/iscream_thunderc-2.6.35
C++ Header | 93 lines | 51 code | 10 blank | 32 comment | 0 complexity | dc493d0a3893c23fcc770d0b4344074d MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
 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 */
25struct 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 */
56struct 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 */
79extern int ioc3_register_submodule(struct ioc3_submodule *);
80/* unregisters a submodule */
81extern void ioc3_unregister_submodule(struct ioc3_submodule *);
82/* enables IRQs indicated by irq_mask for a specified IOC3 chip */
83extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
84/* ackowledges specified IRQs */
85extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
86/* disables IRQs indicated by irq_mask for a specified IOC3 chip */
87extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
88/* atomically sets GPCR bits */
89extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int);
90/* general ireg writer */
91extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg);
92
93#endif