OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [ioc3.h] - Blame information for rev 82

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.