cregit-Linux how code gets into the kernel

Release 4.14 include/linux/ioc3.h

Directory: include/linux
/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org>
 */

#ifndef _LINUX_IOC3_H

#define _LINUX_IOC3_H

#include <asm/sn/ioc3.h>


#define IOC3_MAX_SUBMODULES	32


#define IOC3_CLASS_NONE		0

#define IOC3_CLASS_BASE_IP27	1

#define IOC3_CLASS_BASE_IP30	2

#define IOC3_CLASS_MENET_123	3

#define IOC3_CLASS_MENET_4	4

#define IOC3_CLASS_CADDUO	5

#define IOC3_CLASS_SERIAL	6

/* One of these per IOC3 */

struct ioc3_driver_data {
	
struct list_head list;
	
int id;				/* IOC3 sequence number */
	/* PCI mapping */
	
unsigned long pma;		/* physical address */
	
struct ioc3 __iomem *vma;	/* pointer to registers */
	
struct pci_dev *pdev;		/* PCI device */
	/* IRQ stuff */
	
int dual_irq;			/* set if separate IRQs are used */
	

int irq_io, irq_eth;		/* IRQ numbers */
	/* GPIO magic */
	
spinlock_t gpio_lock;
	
unsigned int gpdr_shadow;
	/* NIC identifiers */
	
char nic_part[32];
	
char nic_serial[16];
	
char nic_mac[6];
	/* submodule set */
	
int class;
	
void *data[IOC3_MAX_SUBMODULES];	/* for submodule use */
	
int active[IOC3_MAX_SUBMODULES];	/* set if probe succeeds */
	/* is_ir_lock must be held while
         * modifying sio_ie values, so
         * we can be sure that sio_ie is
         * not changing when we read it
         * along with sio_ir.
         */
	
spinlock_t ir_lock;	/* SIO_IE[SC] mod lock */
};

/* One per submodule */

struct ioc3_submodule {
	
char *name;		/* descriptive submodule name */
	
struct module *owner;	/* owning kernel module */
	
int ethernet;		/* set for ethernet drivers */
	
int (*probe) (struct ioc3_submodule *, struct ioc3_driver_data *);
	
int (*remove) (struct ioc3_submodule *, struct ioc3_driver_data *);
	
int id;			/* assigned by IOC3, index for the "data" array */
	/* IRQ stuff */
	
unsigned int irq_mask;	/* IOC3 IRQ mask, leave clear for Ethernet */
	
int reset_mask;		/* non-zero if you want the ioc3.c module to reset interrupts */
	
int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
	/* private submodule data */
	
void *data;		/* assigned by submodule */
};

/**********************************
 * Functions needed by submodules *
 **********************************/


#define IOC3_W_IES		0

#define IOC3_W_IEC		1

/* registers a submodule for all existing and future IOC3 chips */
extern int ioc3_register_submodule(struct ioc3_submodule *);
/* unregisters a submodule */
extern void ioc3_unregister_submodule(struct ioc3_submodule *);
/* enables IRQs indicated by irq_mask for a specified IOC3 chip */
extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
/* ackowledges specified IRQs */
extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
/* disables IRQs indicated by irq_mask for a specified IOC3 chip */
extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int);
/* atomically sets GPCR bits */
extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int);
/* general ireg writer */
extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg);

#endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Patrick Gefre33799.70%150.00%
Al Viro10.30%150.00%
Total338100.00%2100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.