remove /dev/mISDN ringbuffers; use queues instead
This commit is contained in:
parent
918caa4018
commit
62c911e0cd
|
@ -104,30 +104,30 @@ mISDNd(void *data)
|
|||
test_and_set_bit(mISDN_TFLAGS_ACTIV, &hkt->Flags);
|
||||
err = -EINVAL;
|
||||
hhe=mISDN_HEADEXT_P(skb);
|
||||
switch (hhe->what) {
|
||||
switch (hhe->addr) {
|
||||
case MGR_FUNCTION:
|
||||
err=hhe->func.ctrl(hhe->data[0], hhe->prim, skb->data);
|
||||
if (err) {
|
||||
printk(KERN_WARNING "mISDNd: what(%x) prim(%x) failed err(%x)\n",
|
||||
hhe->what, hhe->prim, err);
|
||||
printk(KERN_WARNING "mISDNd: addr(%x) prim(%x) failed err(%x)\n",
|
||||
hhe->addr, hhe->prim, err);
|
||||
} else {
|
||||
if (debug)
|
||||
printk(KERN_DEBUG "mISDNd: what(%x) prim(%x) success\n",
|
||||
hhe->what, hhe->prim);
|
||||
printk(KERN_DEBUG "mISDNd: addr(%x) prim(%x) success\n",
|
||||
hhe->addr, hhe->prim);
|
||||
err--; /* to free skb */
|
||||
}
|
||||
break;
|
||||
case MGR_QUEUEIF:
|
||||
err = hhe->func.iff(hhe->data[0], skb);
|
||||
if (err) {
|
||||
printk(KERN_WARNING "mISDNd: what(%x) prim(%x) failed err(%x)\n",
|
||||
hhe->what, hhe->prim, err);
|
||||
printk(KERN_WARNING "mISDNd: addr(%x) prim(%x) failed err(%x)\n",
|
||||
hhe->addr, hhe->prim, err);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
int_error();
|
||||
printk(KERN_WARNING "mISDNd: what(%x) prim(%x) unknown\n",
|
||||
hhe->what, hhe->prim);
|
||||
printk(KERN_WARNING "mISDNd: addr(%x) prim(%x) unknown\n",
|
||||
hhe->addr, hhe->prim);
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ mgr_queue(void *data, u_int prim, struct sk_buff *skb)
|
|||
{
|
||||
mISDN_headext_t *hhe = mISDN_HEADEXT_P(skb);
|
||||
|
||||
hhe->what = prim;
|
||||
hhe->addr = prim;
|
||||
skb_queue_tail(&mISDN_thread.workq, skb);
|
||||
wake_up_interruptible(&mISDN_thread.waitq);
|
||||
return(0);
|
||||
|
@ -426,7 +426,7 @@ set_stack_req(mISDNstack_t *st, mISDN_pid_t *pid)
|
|||
skb = alloc_skb(sizeof(mISDN_pid_t) + pid->maxplen, GFP_ATOMIC);
|
||||
hhe = mISDN_HEADEXT_P(skb);
|
||||
hhe->prim = MGR_SETSTACK_NW | REQUEST;
|
||||
hhe->what = MGR_FUNCTION;
|
||||
hhe->addr = MGR_FUNCTION;
|
||||
hhe->data[0] = st;
|
||||
npid = (mISDN_pid_t *)skb_put(skb, sizeof(mISDN_pid_t));
|
||||
if (pid->pbuf)
|
||||
|
|
|
@ -17,8 +17,6 @@
|
|||
#define mISDN_MINOR_RAW_MIN 128
|
||||
#define mISDN_MINOR_RAW_MAX 255
|
||||
|
||||
#define mISDN_DEVBUF_SIZE 8192
|
||||
|
||||
/* debugging */
|
||||
#define DEBUG_CORE_FUNC 0x0001
|
||||
#define DEBUG_DUMMY_FUNC 0x0002
|
||||
|
@ -40,7 +38,7 @@ extern int free_device(mISDNdevice_t *dev);
|
|||
extern struct list_head mISDN_stacklist;
|
||||
extern struct list_head mISDN_instlist;
|
||||
|
||||
extern void get_stack_info(iframe_t *);
|
||||
extern void get_stack_info(struct sk_buff *);
|
||||
extern int get_stack_cnt(void);
|
||||
extern mISDNstack_t *get_stack4id(u_int);
|
||||
extern mISDNstack_t *new_stack(mISDNstack_t *, mISDNinstance_t *);
|
||||
|
|
|
@ -12,7 +12,8 @@ LIST_HEAD(mISDN_stacklist);
|
|||
LIST_HEAD(mISDN_instlist);
|
||||
|
||||
int
|
||||
get_stack_cnt(void) {
|
||||
get_stack_cnt(void)
|
||||
{
|
||||
int cnt = 0;
|
||||
mISDNstack_t *st;
|
||||
|
||||
|
@ -22,16 +23,19 @@ get_stack_cnt(void) {
|
|||
}
|
||||
|
||||
void
|
||||
get_stack_info(iframe_t *frm) {
|
||||
mISDNstack_t *cst, *st;
|
||||
stack_info_t *si;
|
||||
mISDNlayer_t *lay;
|
||||
get_stack_info(struct sk_buff *skb)
|
||||
{
|
||||
mISDN_head_t *hp;
|
||||
mISDNstack_t *cst, *st;
|
||||
stack_info_t *si;
|
||||
mISDNlayer_t *lay;
|
||||
|
||||
st = get_stack4id(frm->addr);
|
||||
hp = mISDN_HEAD_P(skb);
|
||||
st = get_stack4id(hp->addr);
|
||||
if (!st)
|
||||
frm->len = 0;
|
||||
hp->len = 0;
|
||||
else {
|
||||
si = (stack_info_t *)frm->data.p;
|
||||
si = (stack_info_t *)skb->data;
|
||||
memset(si, 0, sizeof(stack_info_t));
|
||||
si->id = st->id;
|
||||
si->extentions = st->extentions;
|
||||
|
@ -53,10 +57,11 @@ get_stack_info(iframe_t *frm) {
|
|||
si->child[si->childcnt] = cst->id;
|
||||
si->childcnt++;
|
||||
}
|
||||
frm->len = sizeof(stack_info_t);
|
||||
hp->len = sizeof(stack_info_t);
|
||||
if (si->childcnt>2)
|
||||
frm->len += (si->childcnt-2)*sizeof(int);
|
||||
hp->len += (si->childcnt-2)*sizeof(int);
|
||||
}
|
||||
skb_put(skb, hp->len);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -18,6 +18,23 @@
|
|||
* <8 bit subcommand>
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* ABI Version 32 bit
|
||||
*
|
||||
* <16 bit> Major version
|
||||
* - changed if any interface become backwards incompatible
|
||||
*
|
||||
* <16 bit> Minor version
|
||||
* - changed if any interface is extended but backwards compatible
|
||||
*
|
||||
*/
|
||||
#define MISDN_MAJOR_VERSION 1
|
||||
#define MISDN_MINOR_VERSION 0
|
||||
#define MISDN_VERSION ((MISDN_MAJOR_VERSION<<16) | MISDN_MINOR_VERSION)
|
||||
|
||||
#define MISDN_REVISION "$Revision$"
|
||||
#define MISDN_DATE "$Date$"
|
||||
|
||||
/* SUBCOMMANDS */
|
||||
#define REQUEST 0x80
|
||||
|
@ -74,6 +91,7 @@
|
|||
#define MGR_LOADFIRM 0x0ff000
|
||||
#define MGR_LOGDATA 0x0ff100
|
||||
#define MGR_DEBUGDATA 0x0ff200
|
||||
#define MGR_VERSION 0x0fff00
|
||||
|
||||
/* layer 1 <-> hardware */
|
||||
#define PH_SIGNAL 0x000100
|
||||
|
@ -460,22 +478,12 @@
|
|||
#define MAX_DATA_MEM 2080
|
||||
#define MAX_HEADER_LEN 4
|
||||
#define IFRAME_HEAD_SIZE 16
|
||||
#define DEFAULT_PORT_QUEUELEN 256
|
||||
#define PORT_SKB_RESERVE L3_EXTRA_SIZE
|
||||
#define PORT_SKB_MINIMUM 128
|
||||
|
||||
/* structure for information exchange between layer/entity boundaries */
|
||||
|
||||
typedef struct _iframe {
|
||||
u_int addr;
|
||||
u_int prim;
|
||||
int dinfo;
|
||||
int len;
|
||||
union {
|
||||
u_char b[4];
|
||||
void *p;
|
||||
int i;
|
||||
} data;
|
||||
} iframe_t;
|
||||
|
||||
|
||||
#define STATUS_INFO_L1 1
|
||||
#define STATUS_INFO_L2 2
|
||||
|
||||
|
@ -520,7 +528,7 @@ typedef struct _stack_info {
|
|||
int instcnt;
|
||||
int inst[MAX_LAYER_NR +1];
|
||||
int childcnt;
|
||||
u_int child[30];
|
||||
u_int child[2]; /* this is correct handled for PRI see get_stack_info() */
|
||||
} stack_info_t;
|
||||
|
||||
typedef struct _layer_info {
|
||||
|
@ -612,8 +620,10 @@ typedef int (lock_func_t)(void *, int);
|
|||
typedef void (unlock_func_t)(void *);
|
||||
|
||||
typedef struct _mISDN_head {
|
||||
u_int addr;
|
||||
u_int prim;
|
||||
int dinfo;
|
||||
int len;
|
||||
} mISDN_head_t;
|
||||
|
||||
#define mISDN_HEAD_P(s) ((mISDN_head_t *)&s->cb[0])
|
||||
|
@ -621,10 +631,10 @@ typedef struct _mISDN_head {
|
|||
#define mISDN_HEAD_DINFO(s) ((mISDN_head_t *)&s->cb[0])->dinfo
|
||||
|
||||
typedef struct _mISDN_headext {
|
||||
u_int addr;
|
||||
u_int prim;
|
||||
int dinfo;
|
||||
u_int what;
|
||||
void *data[4];
|
||||
void *data[3];
|
||||
union {
|
||||
ctrl_func_t *ctrl;
|
||||
if_func_t *iff;
|
||||
|
@ -634,6 +644,15 @@ typedef struct _mISDN_headext {
|
|||
|
||||
#define mISDN_HEADEXT_P(s) ((mISDN_headext_t *)&s->cb[0])
|
||||
|
||||
typedef struct _mISDN_headifrm {
|
||||
u_int prim;
|
||||
int dinfo;
|
||||
int len;
|
||||
u_int addr;
|
||||
} mISDN_headifrm_t;
|
||||
|
||||
#define mISDN_HEADEXT_P(s) ((mISDN_headext_t *)&s->cb[0])
|
||||
|
||||
/* Basic struct of a mISDN component */
|
||||
struct _mISDNobject {
|
||||
struct list_head list;
|
||||
|
@ -704,11 +723,8 @@ struct _mISDNport {
|
|||
spinlock_t lock;
|
||||
mISDNif_t pif;
|
||||
u_long Flag;
|
||||
int size;
|
||||
int cnt;
|
||||
u_char *buf;
|
||||
u_char *ip;
|
||||
u_char *op;
|
||||
struct sk_buff_head queue;
|
||||
u_int maxqlen;
|
||||
};
|
||||
|
||||
/* the user interface to handle /dev/mISDN */
|
||||
|
|
Loading…
Reference in New Issue