cregit-Linux how code gets into the kernel

Release 4.7 drivers/staging/i4l/act2000/capi.h

/* $Id: capi.h,v 1.6.6.2 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 CAPI_H

#define CAPI_H

/* Command-part of a CAPI message */

typedef struct actcapi_msgcmd {
	
__u8 cmd;
	
__u8 subcmd;
} 
actcapi_msgcmd;

/* CAPI message header */

typedef struct actcapi_msghdr {
	
__u16 len;
	
__u16 applicationID;
	
actcapi_msgcmd cmd;
	
__u16 msgnum;
} 
actcapi_msghdr;

/* CAPI message description (for debugging) */

typedef struct actcapi_msgdsc {
	
actcapi_msgcmd cmd;
	
char *description;
} 
actcapi_msgdsc;

/* CAPI Address */

typedef struct actcapi_addr {
	
__u8 len;                            /* Length of element            */
	
__u8 tnp;                            /* Type/Numbering Plan          */
	
__u8 num[20];                        /* Caller ID                    */
} 
actcapi_addr;

/* CAPI INFO element mask */

typedef  union actcapi_infonr {              /* info number                  */
	
__u16 mask;                          /* info-mask field              */
	
struct bmask {                       /* bit definitions              */
		
unsigned  codes:3;           /* code set                     */
		
unsigned  rsvd:5;            /* reserved                     */
		
unsigned  svind:1;           /* single, variable length ind. */
		
unsigned  wtype:7;           /* W-element type               */
	} 
bmask;
} 
actcapi_infonr;

/* CAPI INFO element */

typedef union  actcapi_infoel {              /* info element                 */
	
__u8 len;                            /* length of info element       */
	
__u8 display[40];                    /* display contents             */
	
__u8 uuinfo[40];                     /* User-user info field         */
	
struct cause {                       /* Cause information            */
		
unsigned ext2:1;             /* extension                    */
		
unsigned cod:2;              /* coding standard              */
		
unsigned spare:1;            /* spare                        */
		
unsigned loc:4;              /* location                     */
		
unsigned ext1:1;             /* extension                    */
		
unsigned cval:7;             /* Cause value                  */
	} 
cause;
	
struct charge {                      /* Charging information         */
		
__u8 toc;                    /* type of charging info        */
		
__u8 unit[10];               /* charging units               */
	} 
charge;
	
__u8 date[20];                       /* date fields                  */
	
__u8 stat;                           /* state of remote party        */
} 
actcapi_infoel;

/* Message for EAZ<->MSN Mapping */

typedef struct actcapi_msn {
	
__u8 eaz;
	
__u8 len;                            /* Length of MSN                */
	
__u8 msn[15];
}  
__attribute__((packed)) actcapi_msn;


typedef struct actcapi_dlpd {
	
__u8 len;                            /* Length of structure          */
	
__u16 dlen;                          /* Data Length                  */
	
__u8 laa;                            /* Link Address A               */
	
__u8 lab;                            /* Link Address B               */
	
__u8 modulo;                         /* Modulo Mode                  */
	
__u8 win;                            /* Window size                  */
	
__u8 xid[100];                       /* XID Information              */
} 
__attribute__((packed)) actcapi_dlpd;


typedef struct actcapi_ncpd {
	
__u8   len;                          /* Length of structure          */
	
__u16  lic;
	
__u16  hic;
	
__u16  ltc;
	
__u16  htc;
	
__u16  loc;
	
__u16  hoc;
	
__u8   modulo;
} 
__attribute__((packed)) actcapi_ncpd;

#define actcapi_ncpi actcapi_ncpd

/*
 * Layout of NCCI field in a B3 DATA CAPI message is different from
 * standard at act2000:
 *
 * Bit 0-4  = PLCI
 * Bit 5-7  = Controller
 * Bit 8-15 = NCCI
 */

#define MAKE_NCCI(plci, contr, ncci)					\
	((plci & 0x1f) | ((contr & 0x7) << 5) | ((ncci & 0xff) << 8))


#define EVAL_NCCI(fakencci, plci, contr, ncci) {       \
                plci  = fakencci & 0x1f;                \
                contr = (fakencci >> 5) & 0x7;          \
                ncci  = (fakencci >> 8) & 0xff;         \
        }

/*
 * Layout of PLCI field in a B3 DATA CAPI message is different from
 * standard at act2000:
 *
 * Bit 0-4  = PLCI
 * Bit 5-7  = Controller
 * Bit 8-15 = reserved (must be 0)
 */

#define MAKE_PLCI(plci, contr)			\
	((plci & 0x1f) | ((contr & 0x7) << 5))


#define EVAL_PLCI(fakeplci, plci, contr) {       \
                plci  = fakeplci & 0x1f;        \
                contr = (fakeplci >> 5) & 0x7;  \
        }


typedef struct actcapi_msg {
	
actcapi_msghdr hdr;
	union {
		
__u16 manuf_msg;
		
struct manufacturer_req_net {
			
__u16 manuf_msg;
			
__u16 controller;
			
__u8  nettype;
		} 
manufacturer_req_net;
		
struct manufacturer_req_v42 {
			
__u16 manuf_msg;
			
__u16 controller;
			
__u32 v42control;
		} 
manufacturer_req_v42;
		
struct manufacturer_conf_v42 {
			
__u16 manuf_msg;
			
__u16 controller;
		} 
manufacturer_conf_v42;
		
struct manufacturer_req_err {
			
__u16 manuf_msg;
			
__u16 controller;
		} 
manufacturer_req_err;
		
struct manufacturer_ind_err {
			
__u16 manuf_msg;
			
__u16 controller;
			
__u32 errcode;
			
__u8  errstring; /* actually up to 160 */
		} 
manufacturer_ind_err;
		
struct manufacturer_req_msn {
			
__u16 manuf_msg;
			
__u16 controller;
			
actcapi_msn msnmap;
		} 
__attribute ((packed)) manufacturer_req_msn;
		/* TODO: TraceInit-req/conf/ind/resp and
                 *       TraceDump-req/conf/ind/resp
                 */
		
struct connect_req {
			
__u8  controller;
			
__u8  bchan;
			
__u32 infomask;
			
__u8  si1;
			
__u8  si2;
			
__u8  eaz;
			
actcapi_addr addr;
		} 
__attribute__ ((packed)) connect_req;
		
struct connect_conf {
			
__u16 plci;
			
__u16 info;
		} 
connect_conf;
		
struct connect_ind {
			
__u16 plci;
			
__u8  controller;
			
__u8  si1;
			
__u8  si2;
			
__u8  eaz;
			
actcapi_addr addr;
		} 
__attribute__ ((packed)) connect_ind;
		
struct connect_resp {
			
__u16 plci;
			
__u8  rejectcause;
		} 
connect_resp;
		
struct connect_active_ind {
			
__u16 plci;
			
actcapi_addr addr;
		} 
__attribute__ ((packed)) connect_active_ind;
		
struct connect_active_resp {
			
__u16 plci;
		} 
connect_active_resp;
		
struct connect_b3_req {
			
__u16 plci;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) connect_b3_req;
		
struct connect_b3_conf {
			
__u16 plci;
			
__u16 ncci;
			
__u16 info;
		} 
connect_b3_conf;
		
struct connect_b3_ind {
			
__u16 ncci;
			
__u16 plci;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) connect_b3_ind;
		
struct connect_b3_resp {
			
__u16 ncci;
			
__u8  rejectcause;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) connect_b3_resp;
		
struct disconnect_req {
			
__u16 plci;
			
__u8  cause;
		} 
disconnect_req;
		
struct disconnect_conf {
			
__u16 plci;
			
__u16 info;
		} 
disconnect_conf;
		
struct disconnect_ind {
			
__u16 plci;
			
__u16 info;
		} 
disconnect_ind;
		
struct disconnect_resp {
			
__u16 plci;
		} 
disconnect_resp;
		
struct connect_b3_active_ind {
			
__u16 ncci;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) connect_b3_active_ind;
		
struct connect_b3_active_resp {
			
__u16 ncci;
		} 
connect_b3_active_resp;
		
struct disconnect_b3_req {
			
__u16 ncci;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) disconnect_b3_req;
		
struct disconnect_b3_conf {
			
__u16 ncci;
			
__u16 info;
		} 
disconnect_b3_conf;
		
struct disconnect_b3_ind {
			
__u16 ncci;
			
__u16 info;
			
actcapi_ncpi ncpi;
		} 
__attribute__ ((packed)) disconnect_b3_ind;
		
struct disconnect_b3_resp {
			
__u16 ncci;
		} 
disconnect_b3_resp;
		
struct info_ind {
			
__u16 plci;
			
actcapi_infonr nr;
			
actcapi_infoel el;
		} 
__attribute__ ((packed)) info_ind;
		
struct info_resp {
			
__u16 plci;
		} 
info_resp;
		
struct listen_b3_req {
			
__u16 plci;
		} 
listen_b3_req;
		
struct listen_b3_conf {
			
__u16 plci;
			
__u16 info;
		} 
listen_b3_conf;
		
struct select_b2_protocol_req {
			
__u16 plci;
			
__u8  protocol;
			
actcapi_dlpd dlpd;
		} 
__attribute__ ((packed)) select_b2_protocol_req;
		
struct select_b2_protocol_conf {
			
__u16 plci;
			
__u16 info;
		} 
select_b2_protocol_conf;
		
struct select_b3_protocol_req {
			
__u16 plci;
			
__u8  protocol;
			
actcapi_ncpd ncpd;
		} 
__attribute__ ((packed)) select_b3_protocol_req;
		
struct select_b3_protocol_conf {
			
__u16 plci;
			
__u16 info;
		} 
select_b3_protocol_conf;
		
struct listen_req {
			
__u8  controller;
			
__u32 infomask;
			
__u16 eazmask;
			
__u16 simask;
		} 
__attribute__ ((packed)) listen_req;
		
struct listen_conf {
			
__u8  controller;
			
__u16 info;
		} 
__attribute__ ((packed)) listen_conf;
		
struct data_b3_req {
			
__u16 fakencci;
			
__u16 datalen;
			
__u32 unused;
			
__u8  blocknr;
			
__u16 flags;
		} 
__attribute ((packed)) data_b3_req;
		
struct data_b3_ind {
			
__u16 fakencci;
			
__u16 datalen;
			
__u32 unused;
			
__u8  blocknr;
			
__u16 flags;
		} 
__attribute__ ((packed)) data_b3_ind;
		
struct data_b3_resp {
			
__u16 ncci;
			
__u8  blocknr;
		} 
__attribute__ ((packed)) data_b3_resp;
		
struct data_b3_conf {
			
__u16 ncci;
			
__u8  blocknr;
			
__u16 info;
		} 
__attribute__ ((packed)) data_b3_conf;
	} 
msg;
} 
__attribute__ ((packed)) actcapi_msg;


static inline unsigned short actcapi_nextsmsg(act2000_card *card) { unsigned long flags; unsigned short n; spin_lock_irqsave(&card->mnlock, flags); n = card->msgnum; card->msgnum++; card->msgnum &= 0x7fff; spin_unlock_irqrestore(&card->mnlock, flags); return n; }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git4676.67%133.33%
andrew mortonandrew morton1220.00%133.33%
adrian bunkadrian bunk23.33%133.33%
Total60100.00%3100.00%

#define DEBUG_MSG #undef DEBUG_DATA_MSG #undef DEBUG_DUMP_SKB extern int actcapi_chkhdr(act2000_card *, actcapi_msghdr *); extern int actcapi_listen_req(act2000_card *); extern int actcapi_manufacturer_req_net(act2000_card *); extern int actcapi_manufacturer_req_errh(act2000_card *); extern int actcapi_manufacturer_req_msn(act2000_card *); extern int actcapi_connect_req(act2000_card *, act2000_chan *, char *, char, int, int); extern void actcapi_select_b2_protocol_req(act2000_card *, act2000_chan *); extern void actcapi_disconnect_b3_req(act2000_card *, act2000_chan *); extern void actcapi_connect_resp(act2000_card *, act2000_chan *, __u8); extern void actcapi_dispatch(struct work_struct *); #ifdef DEBUG_MSG extern void actcapi_debug_msg(struct sk_buff *skb, int); #else #define actcapi_debug_msg(skb, len) #endif #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git112988.76%114.29%
jan blunckjan blunck1239.67%114.29%
andrew mortonandrew morton120.94%114.29%
joe perchesjoe perches30.24%114.29%
david howellsdavid howells20.16%114.29%
adrian bunkadrian bunk20.16%114.29%
linus torvaldslinus torvalds10.08%114.29%
Total1272100.00%7100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}