Commit 82248a5e authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/ISDN-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/ISDN-2.6:
  Add DIP switch readout for HFC-4S IOB4ST
  Fix remaining big endian issue of hfcmulti
  mISDN cleanup user interface
  mISDN fix main ISDN Makefile
parents c2d5ceda 31981db0
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
obj-$(CONFIG_ISDN_I4L) += i4l/ obj-$(CONFIG_ISDN_I4L) += i4l/
obj-$(CONFIG_ISDN_CAPI) += capi/ obj-$(CONFIG_ISDN_CAPI) += capi/
obj-$(CONFIG_MISDN) += mISDN/ obj-$(CONFIG_MISDN) += mISDN/
obj-$(CONFIG_ISDN_CAPI) += hardware/ obj-$(CONFIG_ISDN) += hardware/
obj-$(CONFIG_ISDN_DIVERSION) += divert/ obj-$(CONFIG_ISDN_DIVERSION) += divert/
obj-$(CONFIG_ISDN_DRV_HISAX) += hisax/ obj-$(CONFIG_ISDN_DRV_HISAX) += hisax/
obj-$(CONFIG_ISDN_DRV_ICN) += icn/ obj-$(CONFIG_ISDN_DRV_ICN) += icn/
......
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
* #define HFC_REGISTER_DEBUG * #define HFC_REGISTER_DEBUG
*/ */
static const char *hfcmulti_revision = "2.00"; static const char *hfcmulti_revision = "2.02";
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
...@@ -427,12 +427,12 @@ write_fifo_regio(struct hfc_multi *hc, u_char *data, int len) ...@@ -427,12 +427,12 @@ write_fifo_regio(struct hfc_multi *hc, u_char *data, int len)
{ {
outb(A_FIFO_DATA0, (hc->pci_iobase)+4); outb(A_FIFO_DATA0, (hc->pci_iobase)+4);
while (len>>2) { while (len>>2) {
outl(*(u32 *)data, hc->pci_iobase); outl(cpu_to_le32(*(u32 *)data), hc->pci_iobase);
data += 4; data += 4;
len -= 4; len -= 4;
} }
while (len>>1) { while (len>>1) {
outw(*(u16 *)data, hc->pci_iobase); outw(cpu_to_le16(*(u16 *)data), hc->pci_iobase);
data += 2; data += 2;
len -= 2; len -= 2;
} }
...@@ -447,17 +447,19 @@ void ...@@ -447,17 +447,19 @@ void
write_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len) write_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len)
{ {
while (len>>2) { while (len>>2) {
writel(*(u32 *)data, (hc->pci_membase)+A_FIFO_DATA0); writel(cpu_to_le32(*(u32 *)data),
hc->pci_membase + A_FIFO_DATA0);
data += 4; data += 4;
len -= 4; len -= 4;
} }
while (len>>1) { while (len>>1) {
writew(*(u16 *)data, (hc->pci_membase)+A_FIFO_DATA0); writew(cpu_to_le16(*(u16 *)data),
hc->pci_membase + A_FIFO_DATA0);
data += 2; data += 2;
len -= 2; len -= 2;
} }
while (len) { while (len) {
writeb(*data, (hc->pci_membase)+A_FIFO_DATA0); writeb(*data, hc->pci_membase + A_FIFO_DATA0);
data++; data++;
len--; len--;
} }
...@@ -468,12 +470,12 @@ read_fifo_regio(struct hfc_multi *hc, u_char *data, int len) ...@@ -468,12 +470,12 @@ read_fifo_regio(struct hfc_multi *hc, u_char *data, int len)
{ {
outb(A_FIFO_DATA0, (hc->pci_iobase)+4); outb(A_FIFO_DATA0, (hc->pci_iobase)+4);
while (len>>2) { while (len>>2) {
*(u32 *)data = inl(hc->pci_iobase); *(u32 *)data = le32_to_cpu(inl(hc->pci_iobase));
data += 4; data += 4;
len -= 4; len -= 4;
} }
while (len>>1) { while (len>>1) {
*(u16 *)data = inw(hc->pci_iobase); *(u16 *)data = le16_to_cpu(inw(hc->pci_iobase));
data += 2; data += 2;
len -= 2; len -= 2;
} }
...@@ -490,18 +492,18 @@ read_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len) ...@@ -490,18 +492,18 @@ read_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len)
{ {
while (len>>2) { while (len>>2) {
*(u32 *)data = *(u32 *)data =
readl((hc->pci_membase)+A_FIFO_DATA0); le32_to_cpu(readl(hc->pci_membase + A_FIFO_DATA0));
data += 4; data += 4;
len -= 4; len -= 4;
} }
while (len>>1) { while (len>>1) {
*(u16 *)data = *(u16 *)data =
readw((hc->pci_membase)+A_FIFO_DATA0); le16_to_cpu(readw(hc->pci_membase + A_FIFO_DATA0));
data += 2; data += 2;
len -= 2; len -= 2;
} }
while (len) { while (len) {
*data = readb((hc->pci_membase)+A_FIFO_DATA0); *data = readb(hc->pci_membase + A_FIFO_DATA0);
data++; data++;
len--; len--;
} }
...@@ -3971,7 +3973,7 @@ open_bchannel(struct hfc_multi *hc, struct dchannel *dch, ...@@ -3971,7 +3973,7 @@ open_bchannel(struct hfc_multi *hc, struct dchannel *dch,
struct bchannel *bch; struct bchannel *bch;
int ch; int ch;
if (!test_bit(rq->adr.channel, &dch->dev.channelmap[0])) if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
return -EINVAL; return -EINVAL;
if (rq->protocol == ISDN_P_NONE) if (rq->protocol == ISDN_P_NONE)
return -EINVAL; return -EINVAL;
...@@ -4587,7 +4589,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m) ...@@ -4587,7 +4589,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m)
list_add(&bch->ch.list, &dch->dev.bchannels); list_add(&bch->ch.list, &dch->dev.bchannels);
hc->chan[ch].bch = bch; hc->chan[ch].bch = bch;
hc->chan[ch].port = 0; hc->chan[ch].port = 0;
test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); set_channelmap(bch->nr, dch->dev.channelmap);
} }
/* set optical line type */ /* set optical line type */
if (port[Port_cnt] & 0x001) { if (port[Port_cnt] & 0x001) {
...@@ -4755,7 +4757,7 @@ init_multi_port(struct hfc_multi *hc, int pt) ...@@ -4755,7 +4757,7 @@ init_multi_port(struct hfc_multi *hc, int pt)
list_add(&bch->ch.list, &dch->dev.bchannels); list_add(&bch->ch.list, &dch->dev.bchannels);
hc->chan[i + ch].bch = bch; hc->chan[i + ch].bch = bch;
hc->chan[i + ch].port = pt; hc->chan[i + ch].port = pt;
test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); set_channelmap(bch->nr, dch->dev.channelmap);
} }
/* set master clock */ /* set master clock */
if (port[Port_cnt] & 0x001) { if (port[Port_cnt] & 0x001) {
...@@ -5050,12 +5052,12 @@ static void __devexit hfc_remove_pci(struct pci_dev *pdev) ...@@ -5050,12 +5052,12 @@ static void __devexit hfc_remove_pci(struct pci_dev *pdev)
static const struct hm_map hfcm_map[] = { static const struct hm_map hfcm_map[] = {
/*0*/ {VENDOR_BN, "HFC-1S Card (mini PCI)", 4, 1, 1, 3, 0, DIP_4S, 0}, /*0*/ {VENDOR_BN, "HFC-1S Card (mini PCI)", 4, 1, 1, 3, 0, DIP_4S, 0},
/*1*/ {VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S}, /*1*/ {VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S, 0},
/*2*/ {VENDOR_BN, "HFC-2S Card (mini PCI)", 4, 2, 1, 3, 0, DIP_4S, 0}, /*2*/ {VENDOR_BN, "HFC-2S Card (mini PCI)", 4, 2, 1, 3, 0, DIP_4S, 0},
/*3*/ {VENDOR_BN, "HFC-4S Card", 4, 4, 1, 2, 0, DIP_4S, 0}, /*3*/ {VENDOR_BN, "HFC-4S Card", 4, 4, 1, 2, 0, DIP_4S, 0},
/*4*/ {VENDOR_BN, "HFC-4S Card (mini PCI)", 4, 4, 1, 2, 0, 0, 0}, /*4*/ {VENDOR_BN, "HFC-4S Card (mini PCI)", 4, 4, 1, 2, 0, 0, 0},
/*5*/ {VENDOR_CCD, "HFC-4S Eval (old)", 4, 4, 0, 0, 0, 0, 0}, /*5*/ {VENDOR_CCD, "HFC-4S Eval (old)", 4, 4, 0, 0, 0, 0, 0},
/*6*/ {VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, 0, 0}, /*6*/ {VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, DIP_4S, 0},
/*7*/ {VENDOR_CCD, "HFC-4S", 4, 4, 1, 2, 0, 0, 0}, /*7*/ {VENDOR_CCD, "HFC-4S", 4, 4, 1, 2, 0, 0, 0},
/*8*/ {VENDOR_DIG, "HFC-4S Card", 4, 4, 0, 2, 0, 0, HFC_IO_MODE_REGIO}, /*8*/ {VENDOR_DIG, "HFC-4S Card", 4, 4, 0, 2, 0, 0, HFC_IO_MODE_REGIO},
/*9*/ {VENDOR_CCD, "HFC-4S Swyx 4xS0 SX2 QuadBri", 4, 4, 1, 2, 0, 0, 0}, /*9*/ {VENDOR_CCD, "HFC-4S Swyx 4xS0 SX2 QuadBri", 4, 4, 1, 2, 0, 0, 0},
...@@ -5251,9 +5253,6 @@ HFCmulti_init(void) ...@@ -5251,9 +5253,6 @@ HFCmulti_init(void)
if (debug & DEBUG_HFCMULTI_INIT) if (debug & DEBUG_HFCMULTI_INIT)
printk(KERN_DEBUG "%s: init entered\n", __func__); printk(KERN_DEBUG "%s: init entered\n", __func__);
#ifdef __BIG_ENDIAN
#error "not running on big endian machines now"
#endif
hfc_interrupt = symbol_get(ztdummy_extern_interrupt); hfc_interrupt = symbol_get(ztdummy_extern_interrupt);
register_interrupt = symbol_get(ztdummy_register_interrupt); register_interrupt = symbol_get(ztdummy_register_interrupt);
unregister_interrupt = symbol_get(ztdummy_unregister_interrupt); unregister_interrupt = symbol_get(ztdummy_unregister_interrupt);
......
...@@ -2056,7 +2056,7 @@ setup_card(struct hfc_pci *card) ...@@ -2056,7 +2056,7 @@ setup_card(struct hfc_pci *card)
card->dch.dev.nrbchan = 2; card->dch.dev.nrbchan = 2;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
card->bch[i].nr = i + 1; card->bch[i].nr = i + 1;
test_and_set_bit(i + 1, &card->dch.dev.channelmap[0]); set_channelmap(i + 1, card->dch.dev.channelmap);
card->bch[i].debug = debug; card->bch[i].debug = debug;
mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM); mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM);
card->bch[i].hw = card; card->bch[i].hw = card;
......
...@@ -1006,8 +1006,7 @@ open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq) ...@@ -1006,8 +1006,7 @@ open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
struct bchannel *bch; struct bchannel *bch;
int ch; int ch;
if (!test_bit(rq->adr.channel & 0x1f, if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
&dch->dev.channelmap[rq->adr.channel >> 5]))
return -EINVAL; return -EINVAL;
if (rq->protocol == ISDN_P_NONE) if (rq->protocol == ISDN_P_NONE)
return -EINVAL; return -EINVAL;
...@@ -1412,8 +1411,7 @@ init_card(struct l1oip *hc, int pri, int bundle) ...@@ -1412,8 +1411,7 @@ init_card(struct l1oip *hc, int pri, int bundle)
bch->ch.nr = i + ch; bch->ch.nr = i + ch;
list_add(&bch->ch.list, &dch->dev.bchannels); list_add(&bch->ch.list, &dch->dev.bchannels);
hc->chan[i + ch].bch = bch; hc->chan[i + ch].bch = bch;
test_and_set_bit(bch->nr & 0x1f, set_channelmap(bch->nr, dch->dev.channelmap);
&dch->dev.channelmap[bch->nr >> 5]);
} }
ret = mISDN_register_device(&dch->dev, hc->name); ret = mISDN_register_device(&dch->dev, hc->name);
if (ret) if (ret)
......
...@@ -379,7 +379,7 @@ data_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ...@@ -379,7 +379,7 @@ data_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); di.Bprotocols = dev->Bprotocols | get_all_Bprotocols();
di.protocol = dev->D.protocol; di.protocol = dev->D.protocol;
memcpy(di.channelmap, dev->channelmap, memcpy(di.channelmap, dev->channelmap,
MISDN_CHMAP_SIZE * 4); sizeof(di.channelmap));
di.nrbchan = dev->nrbchan; di.nrbchan = dev->nrbchan;
strcpy(di.name, dev->name); strcpy(di.name, dev->name);
if (copy_to_user((void __user *)arg, &di, sizeof(di))) if (copy_to_user((void __user *)arg, &di, sizeof(di)))
...@@ -637,7 +637,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ...@@ -637,7 +637,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); di.Bprotocols = dev->Bprotocols | get_all_Bprotocols();
di.protocol = dev->D.protocol; di.protocol = dev->D.protocol;
memcpy(di.channelmap, dev->channelmap, memcpy(di.channelmap, dev->channelmap,
MISDN_CHMAP_SIZE * 4); sizeof(di.channelmap));
di.nrbchan = dev->nrbchan; di.nrbchan = dev->nrbchan;
strcpy(di.name, dev->name); strcpy(di.name, dev->name);
if (copy_to_user((void __user *)arg, &di, sizeof(di))) if (copy_to_user((void __user *)arg, &di, sizeof(di)))
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
*/ */
#define MISDN_MAJOR_VERSION 1 #define MISDN_MAJOR_VERSION 1
#define MISDN_MINOR_VERSION 0 #define MISDN_MINOR_VERSION 0
#define MISDN_RELEASE 18 #define MISDN_RELEASE 19
/* primitives for information exchange /* primitives for information exchange
* generell format * generell format
...@@ -242,7 +242,8 @@ struct mISDNhead { ...@@ -242,7 +242,8 @@ struct mISDNhead {
#define TEI_SAPI 63 #define TEI_SAPI 63
#define CTRL_SAPI 0 #define CTRL_SAPI 0
#define MISDN_CHMAP_SIZE 4 #define MISDN_MAX_CHANNEL 127
#define MISDN_CHMAP_SIZE ((MISDN_MAX_CHANNEL + 1) >> 3)
#define SOL_MISDN 0 #define SOL_MISDN 0
...@@ -275,11 +276,32 @@ struct mISDN_devinfo { ...@@ -275,11 +276,32 @@ struct mISDN_devinfo {
u_int Dprotocols; u_int Dprotocols;
u_int Bprotocols; u_int Bprotocols;
u_int protocol; u_int protocol;
u_long channelmap[MISDN_CHMAP_SIZE]; u_char channelmap[MISDN_CHMAP_SIZE];
u_int nrbchan; u_int nrbchan;
char name[MISDN_MAX_IDLEN]; char name[MISDN_MAX_IDLEN];
}; };
static inline int
test_channelmap(u_int nr, u_char *map)
{
if (nr <= MISDN_MAX_CHANNEL)
return map[nr >> 3] & (1 << (nr & 7));
else
return 0;
}
static inline void
set_channelmap(u_int nr, u_char *map)
{
map[nr >> 3] |= (1 << (nr & 7));
}
static inline void
clear_channelmap(u_int nr, u_char *map)
{
map[nr >> 3] &= ~(1 << (nr & 7));
}
/* CONTROL_CHANNEL parameters */ /* CONTROL_CHANNEL parameters */
#define MISDN_CTRL_GETOP 0x0000 #define MISDN_CTRL_GETOP 0x0000
#define MISDN_CTRL_LOOP 0x0001 #define MISDN_CTRL_LOOP 0x0001
...@@ -405,7 +427,7 @@ struct mISDNdevice { ...@@ -405,7 +427,7 @@ struct mISDNdevice {
u_int Dprotocols; u_int Dprotocols;
u_int Bprotocols; u_int Bprotocols;
u_int nrbchan; u_int nrbchan;
u_long channelmap[MISDN_CHMAP_SIZE]; u_char channelmap[MISDN_CHMAP_SIZE];
struct list_head bchannels; struct list_head bchannels;
struct mISDNchannel *teimgr; struct mISDNchannel *teimgr;
struct device dev; struct device dev;
...@@ -430,7 +452,7 @@ struct mISDNstack { ...@@ -430,7 +452,7 @@ struct mISDNstack {
#endif #endif
}; };
/* global alloc/queue dunctions */ /* global alloc/queue functions */
static inline struct sk_buff * static inline struct sk_buff *
mI_alloc_skb(unsigned int len, gfp_t gfp_mask) mI_alloc_skb(unsigned int len, gfp_t gfp_mask)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment