other third party bridge products.
In order to use this, you'll need the bridge configuration tools
- available via FTP (user: anonymous) from
- ftp://shadow.cabi.net/pub/Linux. Please read the Bridge mini-HOWTO
- for more information. Note that if your box acts as a bridge, it
- probably contains several Ethernet devices, but the kernel is not
- able to recognize more than one at boot time without help; for
- details read the Ethernet-HOWTO, available via FTP (user: anonymous)
+ available from http://lrp.plain.co.nz/tarballs/bridgex-0.30.tar.gz
+ Note that if your box acts as a bridge, it probably contains several
+ Ethernet devices, but the kernel is not able to recognize more than
+ one ISA ethernet card at boot time without help; for details read
+ the Ethernet-HOWTO, available via FTP (user: anonymous)
in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The Bridging code is
still in test. If unsure, say N.
cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
c->x86_model_id[48] = 0;
+
/* Set MTRR capability flag if appropriate */
- if(boot_cpu_data.x86 !=5)
- return 1;
- if((boot_cpu_data.x86_model == 9) ||
- ((boot_cpu_data.x86_model == 8) &&
- (boot_cpu_data.x86_mask >= 8)))
- c->x86_capability |= X86_FEATURE_MTRR;
+ if(boot_cpu_data.x86 == 5) {
+ if((boot_cpu_data.x86_model == 9) ||
+ ((boot_cpu_data.x86_model == 8) &&
+ (boot_cpu_data.x86_mask >= 8)))
+ c->x86_capability |= X86_FEATURE_MTRR;
+ }
if (n >= 0x80000005){
cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
data_len = skb->len;
- skb_push(skb, 10);
+ if(skb_headroom(skb) < 10)
+ {
+ printk(KERN_CRIT "No headspace (%u) on headroom %p for capi header\n", skb_headroom(skb), skb);
+ }
+ else
+ {
+ skb_push(skb, 10);
+ }
*((u16 *) (skb->data)) = chan->callref;
skb->data[2] = chan->layer2link;
dev->send_seq = 0;
dev->unack_seq = 0;
- dev->hl_hdrlen = 10;
+ dev->hl_hdrlen = 16;
dev_if = kmalloc(sizeof(isdn_if), GFP_KERNEL);
ISDN_FEATURE_L2_HDLC | ISDN_FEATURE_L2_TRANS );
dev_if->writebuf_skb = pcbit_xmit;
- dev_if->hl_hdrlen = 10;
+ dev_if->hl_hdrlen = 16;
dev_if->maxbufsize = MAXBUFSIZE;
dev_if->command = pcbit_command;
struct callb_data cbdata;
int complete, err;
isdn_ctrl ictl;
-#ifdef DEBUG
- struct msg_fmt * fmsg;
-#endif
switch(msg) {
default:
printk(KERN_DEBUG "pcbit_l3_receive: unknown message %08lx\n",
msg);
- fmsg = (struct msg_fmt *) &msg;
- printk(KERN_DEBUG "cmd=%02x sub=%02x\n",
- fmsg->cmd, fmsg->scmd);
break;
#endif
}
* the GNU Public License, incorporated herein by reference.
*/
+/*
+ * 19991203 - Fernando Carvalho - takion@superbofh.org
+ * Hacked to compile with egcs and run with current version of isdn modules
+*/
+
/*
* PCBIT-D low-layer interface
*/
/* Type 0 frame */
- struct msg_fmt *msg;
+ ulong msg;
if (frame->skb)
totlen = FRAME_HDR_LEN + PREHDR_LEN + frame->skb->len;
flen = MIN(totlen, free);
- msg = (struct msg_fmt *) &(frame->msg);
+ msg = frame->msg;
/*
* Board level 2 header
pcbit_writew(dev, flen - FRAME_HDR_LEN);
- pcbit_writeb(dev, msg->cpu);
+ pcbit_writeb(dev, GET_MSG_CPU(msg));
- pcbit_writeb(dev, msg->proc);
+ pcbit_writeb(dev, GET_MSG_PROC(msg));
/* TH */
pcbit_writew(dev, frame->hdr_len + PREHDR_LEN);
pcbit_writew(dev, 0);
/* C + S */
- pcbit_writeb(dev, msg->cmd);
- pcbit_writeb(dev, msg->scmd);
+ pcbit_writeb(dev, GET_MSG_CMD(msg));
+ pcbit_writeb(dev, GET_MSG_SCMD(msg));
/* NUM */
pcbit_writew(dev, frame->refnum);
pcbit_deliver(void *data)
{
struct frame_buf *frame;
- unsigned long flags;
- struct msg_fmt msg;
+ unsigned long flags, msg;
struct pcbit_dev *dev = (struct pcbit_dev *) data;
save_flags(flags);
dev->read_queue = frame->next;
restore_flags(flags);
- msg.cpu = 0;
- msg.proc = 0;
- msg.cmd = frame->skb->data[2];
- msg.scmd = frame->skb->data[3];
+ SET_MSG_CPU(msg, 0);
+ SET_MSG_PROC(msg, 0);
+ SET_MSG_CMD(msg, frame->skb->data[2]);
+ SET_MSG_SCMD(msg, frame->skb->data[3]);
frame->refnum = *((ushort *) frame->skb->data + 4);
frame->msg = *((ulong *) & msg);
* the GNU Public License, incorporated herein by reference.
*/
+/*
+ * 19991203 - Fernando Carvalho - takion@superbofh.org
+ * Hacked to compile with egcs and run with current version of isdn modules
+*/
+
/*
* PCBIT-D low-layer interface definitions
*/
Intel 1 2 3 4
*/
-struct msg_fmt {
-#ifdef __LITTLE_ENDIAN /* Little Endian */
- u_char scmd;
- u_char cmd;
- u_char proc;
- u_char cpu;
+#ifdef __LITTLE_ENDIAN
+#define SET_MSG_SCMD(msg, ch) (msg = (msg & 0xffffff00) | (((ch) & 0xff)))
+#define SET_MSG_CMD(msg, ch) (msg = (msg & 0xffff00ff) | (((ch) & 0xff) << 8))
+#define SET_MSG_PROC(msg, ch) (msg = (msg & 0xff00ffff) | (((ch) & 0xff) << 16))
+#define SET_MSG_CPU(msg, ch) (msg = (msg & 0x00ffffff) | (((ch) & 0xff) << 24))
+
+#define GET_MSG_SCMD(msg) ((msg) & 0xFF)
+#define GET_MSG_CMD(msg) ((msg) >> 8 & 0xFF)
+#define GET_MSG_PROC(msg) ((msg) >> 16 & 0xFF)
+#define GET_MSG_CPU(msg) ((msg) >> 24)
+
#else
#error "Non-Intel CPU"
- u_char cpu;
- u_char proc;
- u_char cmd;
- u_char scmd;
#endif
-};
-
#define MAX_QUEUED 7
#define SET_RUN_TIMEOUT 2*HZ /* 2 seconds */
-
struct frame_buf {
ulong msg;
- unsigned short refnum;
- unsigned short dt_len;
- unsigned short hdr_len;
+ unsigned int refnum;
+ unsigned int dt_len;
+ unsigned int hdr_len;
struct sk_buff *skb;
- unsigned short copied;
+ unsigned int copied;
struct frame_buf * next;
};
num_boards = 0;
- printk(KERN_INFO
- "PCBIT-D device driver v 0.5 - "
+ printk(KERN_NOTICE
+ "PCBIT-D device driver v 0.5-fjpc0 19991204 - "
"Copyright (C) 1996 Universidade de Lisboa\n");
if (mem[0] || irq[0])
for (board = 0; board < num_boards; board++)
pcbit_terminate(board);
- printk(KERN_INFO
+ printk(KERN_NOTICE
"PCBIT-D module unloaded\n");
}
*
* Author: Alan Cox, <alan@redhat.com>
*
- * Fixes:
+ * Fixes: Mar 01 2000 Thomas Sparr, <thomas.l.sparr@telia.com>
+ * phone_register_device now works with unit!=PHONE_UNIT_ANY
*/
#include <linux/config.h>
if (unit != PHONE_UNIT_ANY) {
base = unit;
- end = unit;
+ end = unit + 1; /* enter the loop at least one time */
}
for (i = base; i < end; i++) {
if (phone_device[i] == NULL) {
}
}
- if ((dmi=dmi1)==NULL)
+ if ((dmi=dmi1)==NULL) {
+ end_bh_atomic();
return -ENOMEM;
+ }
memcpy(dmi->dmi_addr, addr, alen);
dmi->dmi_addrlen=alen;
dmi->next=dev->mc_list;
* IP_MASQ_USER user space control module
*
*
- * $Id: ip_masq_user.c,v 1.1.2.3 1999/11/16 06:33:51 davem Exp $
+ * $Id: ip_masq_user.c,v 1.1.2.4 2000/02/29 23:50:24 davem Exp $
*/
#include <linux/config.h>
ums->saddr, ums->sport,
ums->daddr, ums->dport);
end_bh_atomic();
- } else
+ } else {
+ end_bh_atomic();
return EINVAL;
+ }
if (ms == NULL) {
return ESRCH;
ums->saddr, ums->sport,
ums->daddr, ums->dport);
end_bh_atomic();
- } else
+ } else {
+ end_bh_atomic();
*err = EINVAL;
+ }
if (ms == NULL) *err = ESRCH;
return ms;
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Sat Oct 9 09:22:27 1999
- * Modified at: Sun Jan 23 09:16:36 2000
+ * Modified at: Wed Mar 1 11:00:34 2000
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1999-2000 Dag Brattli, All Rights Reserved.
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <asm/dma.h>
+#include <asm/io.h>
#include <net/pkt_sched.h>
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Mon Jun 7 10:25:11 1999
- * Modified at: Sun Jan 30 14:08:39 2000
+ * Modified at: Wed Mar 1 10:58:05 2000
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1999-2000 Dag Brattli, All Rights Reserved.
for (p = fmt; *p != '\0'; p++) {
switch (*p) {
case 'b': /* 8 bits unsigned byte */
- buf[n++] = va_arg(args, __u8);
+ buf[n++] = (__u8)va_arg(args, int);
break;
case 's': /* 16 bits unsigned short */
- arg.s = va_arg(args, __u16);
+ arg.s = (__u16)va_arg(args, int);
put_unaligned(arg.s, (__u16 *)(buf+n)); n+=2;
break;
case 'i': /* 32 bits unsigned integer */
arg.i = va_arg(args, __u32);
put_unaligned(arg.i, (__u32 *)(buf+n)); n+=4;
break;
+#if 0
case 'c': /* \0 terminated string */
arg.c = va_arg(args, char *);
strcpy(buf+n, arg.c);
n += strlen(arg.c) + 1;
break;
+#endif
default:
va_end(args);
return -1;