cregit-Linux how code gets into the kernel

Release 4.8 drivers/staging/i4l/act2000/act2000.h

/* $Id: act2000.h,v 1.8.6.3 2001/09/23 22:24:32 kai Exp $
 *
 * ISDN lowlevel-module for the IBM ISDN-S0 Active 2000.
 *
 * Author       Fritz Elfert
 * Copyright    by Fritz Elfert      <fritz@isdn4linux.de>
 *
 * This software may be used and distributed according to the terms
 * of the GNU General Public License, incorporated herein by reference.
 *
 * Thanks to Friedemann Baitinger and IBM Germany
 *
 */

#ifndef act2000_h

#define act2000_h

#include <linux/compiler.h>


#define ACT2000_IOCTL_SETPORT    1

#define ACT2000_IOCTL_GETPORT    2

#define ACT2000_IOCTL_SETIRQ     3

#define ACT2000_IOCTL_GETIRQ     4

#define ACT2000_IOCTL_SETBUS     5

#define ACT2000_IOCTL_GETBUS     6

#define ACT2000_IOCTL_SETPROTO   7

#define ACT2000_IOCTL_GETPROTO   8

#define ACT2000_IOCTL_SETMSN     9

#define ACT2000_IOCTL_GETMSN    10

#define ACT2000_IOCTL_LOADBOOT  11

#define ACT2000_IOCTL_ADDCARD   12


#define ACT2000_IOCTL_TEST      98

#define ACT2000_IOCTL_DEBUGVAR  99


#define ACT2000_BUS_ISA          1

#define ACT2000_BUS_MCA          2

#define ACT2000_BUS_PCMCIA       3

/* Struct for adding new cards */

typedef struct act2000_cdef {
	
int bus;
	
int port;
	
int irq;
	
char id[10];
} 
act2000_cdef;

/* Struct for downloading firmware */

typedef struct act2000_ddef {
	
int length;             /* Length of code */
	
char __user *buffer;    /* Ptr. to code   */
} 
act2000_ddef;


typedef struct act2000_fwid {
	
char isdn[4];
	
char revlen[2];
	
char revision[504];
} 
act2000_fwid;

#if defined(__KERNEL__) || defined(__DEBUGVAR__)

#ifdef __KERNEL__
/* Kernel includes */

#include <linux/sched.h>
#include <linux/string.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/major.h>
#include <asm/io.h>
#include <linux/kernel.h>
#include <linux/signal.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/mman.h>
#include <linux/ioport.h>
#include <linux/timer.h>
#include <linux/wait.h>
#include <linux/delay.h>
#include <linux/ctype.h>
#include <linux/isdnif.h>

#endif                           /* __KERNEL__ */


#define ACT2000_PORTLEN        8


#define ACT2000_FLAGS_RUNNING  1 
/* Cards driver activated */

#define ACT2000_FLAGS_PVALID   2 
/* Cards port is valid    */

#define ACT2000_FLAGS_IVALID   4 
/* Cards irq is valid     */

#define ACT2000_FLAGS_LOADED   8 
/* Firmware loaded        */


#define ACT2000_BCH            2 
/* # of channels per card */

/* D-Channel states */

#define ACT2000_STATE_NULL     0

#define ACT2000_STATE_ICALL    1

#define ACT2000_STATE_OCALL    2

#define ACT2000_STATE_IWAIT    3

#define ACT2000_STATE_OWAIT    4

#define ACT2000_STATE_IBWAIT   5

#define ACT2000_STATE_OBWAIT   6

#define ACT2000_STATE_BWAIT    7

#define ACT2000_STATE_BHWAIT   8

#define ACT2000_STATE_BHWAIT2  9

#define ACT2000_STATE_DHWAIT  10

#define ACT2000_STATE_DHWAIT2 11

#define ACT2000_STATE_BSETUP  12

#define ACT2000_STATE_ACTIVE  13


#define ACT2000_MAX_QUEUED  8000 
/* 2 * maxbuff */


#define ACT2000_LOCK_TX 0

#define ACT2000_LOCK_RX 1


typedef struct act2000_chan {
	
unsigned short callref;          /* Call Reference              */
	
unsigned short fsm_state;        /* Current D-Channel state     */
	
unsigned short eazmask;          /* EAZ-Mask for this Channel   */
	
short queued;                    /* User-Data Bytes in TX queue */
	
unsigned short plci;
	
unsigned short ncci;
	
unsigned char  l2prot;           /* Layer 2 protocol            */
	
unsigned char  l3prot;           /* Layer 3 protocol            */
} 
act2000_chan;


typedef struct msn_entry {
	
char eaz;
	
char msn[16];
	
struct msn_entry *next;
} 
msn_entry;


typedef struct irq_data_isa {
	
__u8           *rcvptr;
	
__u16           rcvidx;
	
__u16           rcvlen;
	
struct sk_buff *rcvskb;
	
__u8            rcvignore;
	
__u8            rcvhdr[8];
} 
irq_data_isa;


typedef union act2000_irq_data {
	
irq_data_isa isa;
} 
act2000_irq_data;

/*
 * Per card driver data
 */

typedef struct act2000_card {
	
unsigned short port;		/* Base-port-address                */
	
unsigned short irq;		/* Interrupt                        */
	
u_char ptype;			/* Protocol type (1TR6 or Euro)     */
	
u_char bus;			/* Cardtype (ISA, MCA, PCMCIA)      */
	
struct act2000_card *next;	/* Pointer to next device struct    */
	
spinlock_t lock;		/* protect critical operations      */
	
int myid;			/* Driver-Nr. assigned by linklevel */
	
unsigned long flags;		/* Statusflags                      */
	
unsigned long ilock;		/* Semaphores for IRQ-Routines      */
	
struct sk_buff_head rcvq;	/* Receive-Message queue            */
	
struct sk_buff_head sndq;	/* Send-Message queue               */
	
struct sk_buff_head ackq;	/* Data-Ack-Message queue           */
	
u_char *ack_msg;		/* Ptr to User Data in User skb     */
	
__u16 need_b3ack;		/* Flag: Need ACK for current skb   */
	
struct sk_buff *sbuf;		/* skb which is currently sent      */
	
struct timer_list ptimer;	/* Poll timer                       */
	
struct work_struct snd_tq;	/* Task struct for xmit bh          */
	
struct work_struct rcv_tq;	/* Task struct for rcv bh           */
	
struct work_struct poll_tq;	/* Task struct for polled rcv bh    */
	
msn_entry *msn_list;
	
unsigned short msgnum;		/* Message number for sending       */
	
spinlock_t mnlock;		/* lock for msgnum                  */
	
act2000_chan bch[ACT2000_BCH];	/* B-Channel status/control         */
	
char   status_buf[256];		/* Buffer for status messages       */
	
char   *status_buf_read;
	
char   *status_buf_write;
	
char   *status_buf_end;
	
act2000_irq_data idat;		/* Data used for IRQ handler        */
	
isdn_if interface;		/* Interface to upper layer         */
	
char regname[35];		/* Name used for request_region     */
} 
act2000_card;


static inline void act2000_schedule_tx(act2000_card *card) { schedule_work(&card->snd_tq); }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git1684.21%133.33%
adrian bunkadrian bunk210.53%133.33%
ingo molnaringo molnar15.26%133.33%
Total19100.00%3100.00%


static inline void act2000_schedule_rx(act2000_card *card) { schedule_work(&card->rcv_tq); }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git1684.21%133.33%
adrian bunkadrian bunk210.53%133.33%
ingo molnaringo molnar15.26%133.33%
Total19100.00%3100.00%


static inline void act2000_schedule_poll(act2000_card *card) { schedule_work(&card->poll_tq); }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git1684.21%133.33%
adrian bunkadrian bunk210.53%133.33%
ingo molnaringo molnar15.26%133.33%
Total19100.00%3100.00%

extern char *act2000_find_eaz(act2000_card *, char); #endif /* defined(__KERNEL__) || defined(__DEBUGVAR__) */ #endif /* act2000_h */

Overall Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git62495.27%112.50%
andrew mortonandrew morton91.37%112.50%
ingo molnaringo molnar71.07%112.50%
adrian bunkadrian bunk60.92%112.50%
al viroal viro40.61%112.50%
thomas gleixnerthomas gleixner30.46%112.50%
linus torvaldslinus torvalds10.15%112.50%
joe perchesjoe perches10.15%112.50%
Total655100.00%8100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.