Compare commits

..

2 Commits

Author SHA1 Message Date
Shaun Ruffell
b9a8000bbd dahdi: Fix failure to read / write on kernel 3.16+
Kernel version 3.16+, since upstream commit (7f7f25e82d54870d "replace checking
for ->read/->aio_read presence with check in ->f_mode" )[1], does not like it
when dahdi changes the set of allowed file operations on a file descriptor
outside of the context of an open() system call.

DAHDI changes the available file operations when a channel is opened by first
opening /dev/dahdi/channel and then calling the DAHDI_SPECIFY ioctl to bind it
to a particular DAHDI channel. Until DAHDI_SPECIFY is called there weren't any
read()/write() callbacks implemented and therefore after the initial open, the
kernel was setting not setting FMODE_CAN_{WRITE,READ} on the file descriptor
indicating that those operations were not allowed.

Now define empty shell functions on the general dahdi_fops so the vfs layer will
not mark a file descriptor as unwritteable or unreadable on open.

[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7f7f25e82d54870df24d415a7007fbd327da027b

Internal-Issue-ID: DAHLIN-340
Reported-and-tested-by: Thomas B. Clark
Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
2014-09-17 16:29:16 -05:00
Michael Walton
eedb4bf944 dynamic: Prevent oops due to inverted compile flag
The logic on ENABLE_TASKELETS compiler flag was inverted causing an oops on
normal dahdi_cfg of a dynamic span.

Issue-id: https://issues.asterisk.org/jira/browse/DAHLIN-328

Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>
2014-08-15 14:58:47 -05:00
28 changed files with 15922 additions and 15860 deletions

View File

@@ -196,8 +196,7 @@ test:
docs: $(GENERATED_DOCS)
README.html: README
date=`stat -c "%y" $<`
$(ASCIIDOC_CMD) -a revdate="$$date" -o $@ $<
$(ASCIIDOC_CMD) -o $@ $<
dahdi-api.html: drivers/dahdi/dahdi-base.c
build_tools/kernel-doc --kernel $(KSRC) $^ >$@

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
set -e

View File

@@ -98,11 +98,7 @@
#define chan_to_netdev(h) ((h)->hdlcnetdev->netdev)
/* macro-oni for determining a unit (channel) number */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
#define UNIT(file) MINOR(file->f_dentry->d_inode->i_rdev)
#else
#define UNIT(file) MINOR(file->f_path.dentry->d_inode->i_rdev)
#endif
EXPORT_SYMBOL(dahdi_transcode_fops);
EXPORT_SYMBOL(dahdi_init_tone_state);

View File

@@ -266,7 +266,6 @@ static void ztdeth_destroy(struct dahdi_dynamic *dyn)
struct ztdeth *z = dyn->pvt;
unsigned long flags;
struct ztdeth *prev=NULL, *cur;
spin_lock_irqsave(&zlock, flags);
cur = zdevs;
while(cur) {
@@ -280,14 +279,12 @@ static void ztdeth_destroy(struct dahdi_dynamic *dyn)
prev = cur;
cur = cur->next;
}
spin_unlock_irqrestore(&zlock, flags);
if (cur == z) { /* Successfully removed */
dyn->pvt = NULL;
dev_put(z->dev);
printk(KERN_INFO "TDMoE: Removed interface for %s\n", z->span->name);
kfree(z);
}
spin_unlock_irqrestore(&zlock, flags);
}
static int ztdeth_create(struct dahdi_dynamic *dyn, const char *addr)

View File

@@ -31,14 +31,14 @@ VPMADT032_VERSION:=1.25.0
HX8_VERSION:=2.06
VPMOCT032_VERSION:=1.12.0
WCT820_VERSION:=1.76
TE133_VERSION:=7a001e
TE133_VERSION:=780019
TE134_VERSION:=780017
TE435_VERSION:=13001e
TE435_VERSION:=e0019
TE436_VERSION:=10017
A8A_VERSION:=1d0017
A8B_VERSION:=1f001e
A8B_VERSION:=1d0019
A4A_VERSION:=a0017
A4B_VERSION:=d001e
A4B_VERSION:=b0019
FIRMWARE_URL:=http://downloads.digium.com/pub/telephony/firmware/releases

View File

@@ -1784,8 +1784,7 @@ static int __devinit pciradio_init_one(struct pci_dev *pdev, const struct pci_de
}
if (request_irq(pdev->irq, pciradio_interrupt,
IRQF_SHARED, "pciradio", rad)) {
if (request_irq(pdev->irq, pciradio_interrupt, DAHDI_IRQ_SHARED, "pciradio", rad)) {
printk(KERN_NOTICE "pciradio: Unable to request IRQ %d\n", pdev->irq);
if (rad->freeregion)
release_region(rad->ioaddr, 0xff);

View File

@@ -543,7 +543,7 @@ static int __devinit tor2_probe(struct pci_dev *pdev, const struct pci_device_id
for (x = 0; x < 256; x++)
writel(0x7f7f7f7f, &tor->mem32[x]);
if (request_irq(tor->irq, tor2_intr, IRQF_SHARED, "tor2", tor)) {
if (request_irq(tor->irq, tor2_intr, DAHDI_IRQ_SHARED_DISABLED, "tor2", tor)) {
printk(KERN_ERR "Unable to request tormenta IRQ %d\n", tor->irq);
goto err_out_release_all;
}
@@ -1200,7 +1200,6 @@ DAHDI_IRQ_HANDLER(tor2_intr)
unsigned char c, rxc;
unsigned char abits, bbits;
struct tor2 *tor = (struct tor2 *) dev_id;
unsigned long flags;
/* make sure its a real interrupt for us */
if (!(readb(&tor->mem8[STATREG]) & INTACTIVE)) /* if not, just return */
@@ -1208,8 +1207,6 @@ DAHDI_IRQ_HANDLER(tor2_intr)
return IRQ_NONE;
}
local_irq_save(flags);
if (tor->cardtype == TYPE_E1) {
/* set outbit, interrupt enable, and ack interrupt */
writeb(OUTBIT | INTENA | INTACK | E1DIV | tor->master,
@@ -1507,8 +1504,6 @@ DAHDI_IRQ_HANDLER(tor2_intr)
else
/* clear OUTBIT and enable interrupts */
writeb(INTENA | tor->master, &tor->mem8[CTLREG]);
local_irq_restore(flags);
return IRQ_RETVAL(1);
}

View File

@@ -1885,7 +1885,7 @@ __voicebus_init(struct voicebus *vb, const char *board_name,
goto cleanup;
#if !defined(CONFIG_VOICEBUS_TIMER)
retval = request_irq(vb->pdev->irq, vb_isr, IRQF_SHARED,
retval = request_irq(vb->pdev->irq, vb_isr, DAHDI_IRQ_SHARED,
board_name, vb);
if (retval) {
dev_warn(&vb->pdev->dev, "Failed to request interrupt line.\n");

View File

@@ -3823,7 +3823,7 @@ static void wcaxx_back_out_gracefully(struct wcaxx *wc)
unsigned long flags;
clear_bit(INITIALIZED, &wc->bit_flags);
smp_mb__after_atomic();
smp_mb__after_clear_bit();
/* Make sure we're not on the card list anymore. */
mutex_lock(&card_list_lock);
@@ -3886,9 +3886,9 @@ static int wcaxx_check_firmware(struct wcaxx *wc)
u32 firmware_version;
const bool force_firmware = false;
const unsigned int A4A_VERSION = 0x0a0017;
const unsigned int A4B_VERSION = 0x0d001e;
const unsigned int A4B_VERSION = 0x0b0019;
const unsigned int A8A_VERSION = 0x1d0017;
const unsigned int A8B_VERSION = 0x1f001e;
const unsigned int A8B_VERSION = 0x1d0019;
if (wc->desc == &device_a8a) {
firmware_version = A8A_VERSION;

View File

@@ -2572,7 +2572,6 @@ DAHDI_IRQ_HANDLER(b4xxp_interrupt)
{
struct b4xxp *b4 = dev_id;
unsigned char status;
unsigned long flags;
int i;
/* Make sure it's really for us */
@@ -2586,8 +2585,6 @@ DAHDI_IRQ_HANDLER(b4xxp_interrupt)
* That way if we get behind, we don't lose anything.
* We don't actually do any processing here, we simply flag the bottom-half to do the heavy lifting.
*/
local_irq_save(flags);
if (status & V_FR_IRQSTA) {
b4->fifo_irqstatus[0] |= __pci_in8(b4, R_IRQ_FIFO_BL0);
b4->fifo_irqstatus[1] |= __pci_in8(b4, R_IRQ_FIFO_BL1);
@@ -2623,8 +2620,6 @@ DAHDI_IRQ_HANDLER(b4xxp_interrupt)
/* tasklet_hi_schedule(&b4->b4xxp_tlet); */
b4xxp_bottom_half((unsigned long)b4);
local_irq_restore(flags);
return IRQ_RETVAL(1);
}
@@ -2956,7 +2951,7 @@ static int __devinit b4xx_probe(struct pci_dev *pdev, const struct pci_device_id
create_sysfs_files(b4);
if (request_irq(pdev->irq, b4xxp_interrupt, IRQF_SHARED, "b4xxp", b4)) {
if (request_irq(pdev->irq, b4xxp_interrupt, DAHDI_IRQ_SHARED_DISABLED, "b4xxp", b4)) {
dev_err(&b4->pdev->dev, "Unable to request IRQ %d\n",
pdev->irq);
ret = -EIO;

View File

@@ -972,7 +972,7 @@ static int __devinit wcfxo_init_one(struct pci_dev *pdev, const struct pci_devic
/* Keep track of which device we are */
pci_set_drvdata(pdev, wc);
if (request_irq(pdev->irq, wcfxo_interrupt, IRQF_SHARED, "wcfxo", wc)) {
if (request_irq(pdev->irq, wcfxo_interrupt, DAHDI_IRQ_SHARED, "wcfxo", wc)) {
printk(KERN_NOTICE "wcfxo: Unable to request IRQ %d\n", pdev->irq);
if (wc->freeregion)
release_region(wc->ioaddr, 0xff);

View File

@@ -1174,8 +1174,6 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
if (!ints)
return IRQ_NONE;
local_irq_save(flags);
outb(ints, wc->ioaddr + WC_INTSTAT);
if (!wc->intcount) {
@@ -1190,13 +1188,13 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
t1xxp_receiveprep(wc, ints);
t1xxp_transmitprep(wc, ints);
}
spin_lock(&wc->lock);
spin_lock_irqsave(&wc->lock, flags);
#if 1
__handle_leds(wc);
#endif
spin_unlock(&wc->lock);
spin_unlock_irqrestore(&wc->lock, flags);
/* Count down timers */
t1xxp_do_counters(wc);
@@ -1222,8 +1220,6 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
if (ints & 0x20)
printk(KERN_INFO "PCI Target abort\n");
local_irq_restore(flags);
return IRQ_RETVAL(1);
}
@@ -1337,7 +1333,7 @@ static int __devinit t1xxp_init_one(struct pci_dev *pdev, const struct pci_devic
/* Keep track of which device we are */
pci_set_drvdata(pdev, wc);
if (request_irq(pdev->irq, t1xxp_interrupt, IRQF_SHARED, "t1xxp", wc)) {
if (request_irq(pdev->irq, t1xxp_interrupt, DAHDI_IRQ_SHARED_DISABLED, "t1xxp", wc)) {
printk(KERN_NOTICE "t1xxp: Unable to request IRQ %d\n", pdev->irq);
kfree(wc);
return -EIO;

View File

@@ -5334,7 +5334,7 @@ t4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
#ifdef SUPPORT_GEN1
if (request_irq(pdev->irq, (wc->devtype->flags & FLAG_2NDGEN) ?
t4_interrupt_gen2 : t4_interrupt,
IRQF_SHARED,
DAHDI_IRQ_SHARED,
(wc->numspans == 8) ? "wct8xxp" :
(wc->numspans == 2) ? "wct2xxp" :
"wct4xxp",
@@ -5348,7 +5348,7 @@ t4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
}
if (request_irq(pdev->irq, t4_interrupt_gen2,
IRQF_SHARED, "t4xxp", wc)) {
DAHDI_IRQ_SHARED, "t4xxp", wc)) {
#endif
dev_notice(&wc->dev->dev, "Unable to request IRQ %d\n",
pdev->irq);

View File

@@ -375,7 +375,6 @@ struct wcdte {
#endif
struct timer_list watchdog;
u16 open_channels;
unsigned long reported_packet_errors;
};
struct wcdte_netdev_priv {
@@ -2020,16 +2019,14 @@ wctc4xxp_disable_polling(struct wcdte *wc)
static void wctc4xxp_check_for_rx_errors(struct wcdte *wc)
{
/* get_packet_errors() returns the accumulated total errors */
static unsigned long last_errors = 0;
unsigned long errors = wctc4xxp_get_packet_errors(wc->rxd);
/* Print warning when the number of errors changes */
if (wc->reported_packet_errors != errors) {
if (last_errors != errors) {
if (printk_ratelimit()) {
dev_err(&wc->pdev->dev,
"%lu errored receive packets.\n",
errors - wc->reported_packet_errors);
wc->reported_packet_errors = errors;
errors - last_errors);
last_errors = errors;
}
}
}
@@ -3870,7 +3867,6 @@ static int wctc4xxp_reset_driver_state(struct wcdte *wc)
release_firmware(firmware);
spin_lock_irqsave(&wc->rxd->lock, flags);
wc->rxd->packet_errors = 0;
wc->reported_packet_errors = 0;
spin_unlock_irqrestore(&wc->rxd->lock, flags);
return res;
}
@@ -4109,7 +4105,7 @@ wctc4xxp_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_master(pdev);
pci_set_drvdata(pdev, wc);
res = request_irq(pdev->irq, wctc4xxp_interrupt,
IRQF_SHARED, wc->board_name, wc);
DAHDI_IRQ_SHARED, wc->board_name, wc);
if (res) {
dev_err(&wc->pdev->dev,
"Unable to request IRQ %d\n", pdev->irq);

View File

@@ -2684,8 +2684,7 @@ static int __devinit wctdm_init_one(struct pci_dev *pdev, const struct pci_devic
/* Keep track of which device we are */
pci_set_drvdata(pdev, wc);
if (request_irq(pdev->irq, wctdm_interrupt,
IRQF_SHARED, "wctdm", wc)) {
if (request_irq(pdev->irq, wctdm_interrupt, DAHDI_IRQ_SHARED, "wctdm", wc)) {
printk(KERN_NOTICE "wctdm: Unable to request IRQ %d\n", pdev->irq);
if (wc->freeregion)
release_region(wc->ioaddr, 0xff);

View File

@@ -1351,8 +1351,6 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
if (!ints)
return IRQ_NONE;
local_irq_save(flags);
outb(ints, wc->ioaddr + WC_INTSTAT);
if (!wc->intcount) {
@@ -1367,13 +1365,13 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
t1xxp_receiveprep(wc, ints);
t1xxp_transmitprep(wc, ints);
}
spin_lock(&wc->lock);
spin_lock_irqsave(&wc->lock, flags);
#if 1
__handle_leds(wc);
#endif
spin_unlock(&wc->lock);
spin_unlock_irqrestore(&wc->lock, flags);
/* Count down timers */
t1_do_counters(wc);
@@ -1400,7 +1398,6 @@ DAHDI_IRQ_HANDLER(t1xxp_interrupt)
if (ints & 0x20)
printk(KERN_NOTICE "PCI Target abort\n");
local_irq_restore(flags);
return IRQ_RETVAL(1);
}
@@ -1537,8 +1534,7 @@ static int __devinit t1xxp_init_one(struct pci_dev *pdev, const struct pci_devic
/* Keep track of which device we are */
pci_set_drvdata(pdev, wc);
if (request_irq(pdev->irq, t1xxp_interrupt,
IRQF_SHARED, "wcte11xp", wc)) {
if (request_irq(pdev->irq, t1xxp_interrupt, DAHDI_IRQ_SHARED_DISABLED, "wcte11xp", wc)) {
printk(KERN_NOTICE "wcte11xp: Unable to request IRQ %d\n", pdev->irq);
kfree(wc);
return -EIO;

View File

@@ -2110,7 +2110,7 @@ static int t1xxp_set_linemode(struct dahdi_span *span, enum spantypes linemode)
* them. */
clear_bit(INITIALIZED, &wc->bit_flags);
synchronize_irq(wc->vb.pdev->irq);
smp_mb__after_atomic();
smp_mb__after_clear_bit();
del_timer_sync(&wc->timer);
flush_workqueue(wc->wq);
@@ -3076,7 +3076,7 @@ static void __devexit te12xp_remove_one(struct pci_dev *pdev)
remove_sysfs_files(wc);
clear_bit(INITIALIZED, &wc->bit_flags);
smp_mb__after_atomic();
smp_mb__after_clear_bit();
del_timer_sync(&wc->timer);
flush_workqueue(wc->wq);

View File

@@ -45,7 +45,7 @@
static const char *TE133_FW_FILENAME = "dahdi-fw-te133.bin";
static const char *TE134_FW_FILENAME = "dahdi-fw-te134.bin";
static const u32 TE133_FW_VERSION = 0x7a001e;
static const u32 TE133_FW_VERSION = 0x780019;
static const u32 TE134_FW_VERSION = 0x780017;
#define WC_MAX_IFACES 8
@@ -1849,7 +1849,7 @@ static int t13x_set_linemode(struct dahdi_span *span, enum spantypes linemode)
clear_bit(INITIALIZED, &wc->bit_flags);
disable_irq(wc->xb.pdev->irq);
smp_mb__after_atomic();
smp_mb__after_clear_bit();
del_timer_sync(&wc->timer);
flush_workqueue(wc->wq);
@@ -2725,7 +2725,7 @@ static void __devexit te13xp_remove_one(struct pci_dev *pdev)
return;
clear_bit(INITIALIZED, &wc->bit_flags);
smp_mb__after_atomic();
smp_mb__after_clear_bit();
/* Quiesce DMA engine interrupts */
wcxb_stop(&wc->xb);

View File

@@ -66,7 +66,7 @@ static inline int delayed_work_pending(struct work_struct *work)
static const char *TE435_FW_FILENAME = "dahdi-fw-te435.bin";
static const char *TE436_FW_FILENAME = "dahdi-fw-te436.bin";
static const u32 TE435_VERSION = 0x13001e;
static const u32 TE435_VERSION = 0xe0019;
static const u32 TE436_VERSION = 0x10017;
/* #define RPC_RCLK */
@@ -3581,7 +3581,7 @@ static void __devexit t43x_remove_one(struct pci_dev *pdev)
return;
wc->not_ready = 1;
smp_mb__after_atomic();
smp_mb__after_clear_bit();
/* Stop everything */
wcxb_stop(&wc->xb);

View File

@@ -66,6 +66,7 @@
#define DRING_SIZE_MASK (DRING_SIZE-1)
#define DESC_EOR (1 << 0)
#define DESC_INT (1 << 1)
#define DESC_IO_ERROR (1 << 30)
#define DESC_OWN (1 << 31)
#define DESC_DEFAULT_STATUS 0xdeadbe00
#define DMA_CHAN_SIZE 128
@@ -357,25 +358,45 @@ static void _wcxb_reset_dring(struct wcxb *xb)
hdesc->control |= cpu_to_be32(DESC_EOR);
#ifdef DEBUG
xb->last_retry_count = 0;
xb->max_retry_count = 0;
xb->last_dma_time = 0;
xb->max_dma_time = 0;
#endif
iowrite32be(xb->hw_dring_phys, xb->membase + TDM_DRING_ADDR);
}
static void wcxb_handle_dma(struct wcxb *xb)
{
#ifdef DEBUG
bool did_retry_dma = false;
u8 retry;
#endif
struct wcxb_meta_desc *mdesc;
struct wcxb_hw_desc *tail = &(xb->hw_dring[xb->dma_tail]);
while (!(tail->control & cpu_to_be32(DESC_OWN))) {
u_char *frame;
if (tail->control & cpu_to_be32(DESC_IO_ERROR)) {
u32 ier;
unsigned long flags;
/* The firmware detected an error condition on the bus.
* Force an underrun by disabling the descriptor
* complete interrupt. When the driver processes the
* underrun it will reset the TDM engine. */
xb->flags.io_error = 1;
spin_lock_irqsave(&xb->lock, flags);
ier = ioread32be(xb->membase + IER);
iowrite32be(ier & ~DESC_COMPLETE, xb->membase + IER);
spin_unlock_irqrestore(&xb->lock, flags);
return;
}
#ifdef DEBUG
xb->last_retry_count =
((be32_to_cpu(tail->control) & 0x0000ff00) >> 8);
xb->last_dma_time = (be32_to_cpu(tail->status));
retry = be32_to_cpu(tail->status) & 0xff;
if (xb->last_retry_count != retry) {
xb->last_retry_count = retry;
did_retry_dma = true;
}
#endif
mdesc = &xb->meta_dring[xb->dma_tail];
@@ -399,17 +420,9 @@ static void wcxb_handle_dma(struct wcxb *xb)
}
#ifdef DEBUG
if (xb->last_retry_count > xb->max_retry_count) {
xb->max_retry_count = xb->last_retry_count;
if (did_retry_dma) {
dev_info(&xb->pdev->dev,
"New DMA max retries detected: %d\n",
xb->max_retry_count);
}
if (xb->last_dma_time > xb->max_dma_time) {
xb->max_dma_time = xb->last_dma_time;
dev_info(&xb->pdev->dev,
"New DMA max transfer time detected: %d\n",
xb->max_dma_time);
"DMA retries detected: %d\n", xb->last_retry_count);
}
#endif
}
@@ -438,7 +451,14 @@ static irqreturn_t _wcxb_isr(int irq, void *dev_id)
spin_lock(&xb->lock);
if (!xb->flags.latency_locked) {
if (xb->flags.io_error) {
/* Since an IO error is not necessarily because
* the host could not keep up, we do not want to
* bump the latency. */
xb->flags.io_error = 0;
dev_warn(&xb->pdev->dev,
"IO error reported by firmware.\n");
} else if (!xb->flags.latency_locked) {
/* bump latency */
xb->latency = min(xb->latency + 1,
@@ -685,7 +705,7 @@ int wcxb_init(struct wcxb *xb, const char *board_name, u32 int_mode)
xb->flags.have_msi = (int_mode) ? 0 : (0 == pci_enable_msi(pdev));
if (request_irq(pdev->irq, wcxb_isr,
(xb->flags.have_msi) ? 0 : IRQF_SHARED,
(xb->flags.have_msi) ? 0 : DAHDI_IRQ_SHARED,
board_name, xb)) {
dev_notice(&xb->pdev->dev, "Unable to request IRQ %d\n",
pdev->irq);

View File

@@ -24,7 +24,7 @@
#define __WCXB_H__
#define WCXB_DEFAULT_LATENCY 3U
#define WCXB_DEFAULT_MAXLATENCY 12U
#define WCXB_DEFAULT_MAXLATENCY 20U
#define WCXB_DMA_CHAN_SIZE 128
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
@@ -66,7 +66,7 @@ struct wcxb {
#ifdef WCXB_PCI_DEV_DOES_NOT_HAVE_IS_PCIE
u32 is_pcie:1;
#endif
u32 dma_ins:1;
u32 io_error:1;
} flags;
void __iomem *membase;
struct wcxb_meta_desc *meta_dring;
@@ -78,9 +78,6 @@ struct wcxb {
unsigned long framecount;
#ifdef DEBUG
u8 last_retry_count;
u8 max_retry_count;
u32 last_dma_time;
u32 max_dma_time;
#endif
};

View File

@@ -2399,11 +2399,11 @@ static DEVICE_ATTR_WRITER(pri_protocol_store, dev, buf, count)
buf, i);
return -EINVAL;
}
if (strncasecmp(buf, "E1", 2) == 0)
if (strnicmp(buf, "E1", 2) == 0)
new_protocol = PRI_PROTO_E1;
else if (strncasecmp(buf, "T1", 2) == 0)
else if (strnicmp(buf, "T1", 2) == 0)
new_protocol = PRI_PROTO_T1;
else if (strncasecmp(buf, "J1", 2) == 0)
else if (strnicmp(buf, "J1", 2) == 0)
new_protocol = PRI_PROTO_J1;
else {
XPD_NOTICE(xpd,

File diff suppressed because it is too large Load Diff

View File

@@ -20,12 +20,7 @@ install:
mkdir -p $(TARGET)
install $(SCRIPTS) $(TARGET)/
install -m 644 ../XppConfig.pm $(FIRMWARES) $(TARGET)/
for id in 202 203; do \
if [ ! -r $(TARGET)/USB_FW.$$id.hex ]; then \
ln -s USB_FW.201.hex $(TARGET)/USB_FW.$$id.hex;\
fi; \
done
if [ ! -r $(TARGET)/FPGA_1161.203.hex ]; then \
ln -s FPGA_1161.201.hex $(TARGET)/FPGA_1161.203.hex;\
if [ ! -r $(TARGET)/USB_FW.202.hex ]; then \
ln -s USB_FW.201.hex $(TARGET)/USB_FW.202.hex;\
fi

View File

@@ -1,5 +1,5 @@
#
# $Id: USB_FW.201.hex 11453 2015-03-29 18:27:25Z dima $
# $Id: USB_FW.201.hex 10402 2012-02-15 15:34:50Z dima $
#
:03004300021F0099
:03005300021F0089
@@ -27,7 +27,7 @@
:050FF6000300000000F3
:100F3C0041E0370041E0B60042E0B1000041E0384A
:100F4C0000021BE0850218E07943E0B30000004D7D
:0F0F5C00E03931313435314D2020202020200064
:0F0F5C00E03931303339354D202020202020005E
:101D71008B538A548955E5581558AE57700215573B
:101D81004E6014AB530555E555AA54700205541421
:081D9100F9ED12077780DF2253
@@ -164,7 +164,7 @@
:100B7E00AB45AA46A9477401120777E4F550E55034
:100B8E00C454F0AB45AA46A94790000112078985C7
:100B9E004858854959854A5A755B08121A95AB48CB
:100BAE00AA49A94A90000212074AFE5407FFEE54C2
:100BAE00AA49A94A90000212074AFE5403FFEE54C6
:100BBE0070F55124E0602924F0604B24F0605D2430
:100BCE00F0606F24406003020C5675410185184297
:100BDE00851943EF24FE600624FE703B801C801FA7

View File

@@ -1,5 +1,5 @@
#
# $Id: USB_FW.hex 11452 2015-03-29 18:21:13Z dima $
# $Id: USB_FW.hex 10401 2012-02-15 15:30:24Z dima $
#
:03004300021F0099
:03005300021F0089
@@ -27,7 +27,7 @@
:051EF1000300000000E9
:1011F50041E0370041E0B70042E0B2000041E0388D
:1012050000021BE0860218E07A43E0B40000004EBD
:10121500E03931313435314D502020202020200057
:10121500E03931303339354D502020202020200051
:101D9A008B518A528953E5561556AE557002155520
:101DAA004E6014AB510553E553AA52700205521402
:081DBA00F9ED12077180DF2230
@@ -165,7 +165,7 @@
:100B7800AB43AA44A9457401120771E4F54EE54E4A
:100B8800C454F0AB43AA44A94590000112078385D9
:100B98004656854757854858755908121A94AB46E2
:100BA800AA47A948900002120744FE5407FFEE54D2
:100BA800AA47A948900002120744FE5403FFEE54D6
:100BB80070F54F24E0602924F0604B24F0605D2438
:100BC800F0606F24406003020C50753F01851840A7
:100BD800851941EF24FE600624FE703B801C801FAF

View File

@@ -80,8 +80,7 @@ static const xproto_table_t *xproto_table(xpd_type_t cardtype)
return xprotocol_tables[cardtype];
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) || \
LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
#define MODULE_REFCOUNT_FORMAT "%s refcount was %d\n"
#else
#define MODULE_REFCOUNT_FORMAT "%s refcount was %lu\n"

View File

@@ -76,6 +76,10 @@
#define HAVE_NET_DEVICE_OPS
#endif
#define DAHDI_IRQ_SHARED IRQF_SHARED
#define DAHDI_IRQ_DISABLED IRQF_DISABLED
#define DAHDI_IRQ_SHARED_DISABLED IRQF_SHARED | IRQF_DISABLED
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
# ifdef RHEL_RELEASE_VERSION
# if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5, 6)
@@ -1404,17 +1408,6 @@ static inline short dahdi_txtone_nextsample(struct dahdi_chan *ss)
/*! Maximum audio mask */
#define DAHDI_FORMAT_AUDIO_MASK ((1 << 16) - 1)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 16, 0)
/* DAHDI only was using the xxx_clear_bit variants. */
#ifndef smp_mb__before_atomic
#define smp_mb__before_atomic smp_mb__before_clear_bit
#endif
#ifndef smp_mb__after_atomic
#define smp_mb__after_atomic smp_mb__after_clear_bit
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
#ifdef RHEL_RELEASE_VERSION
#if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(6, 5)
@@ -1498,8 +1491,6 @@ void dahdi_pci_disable_link_state(struct pci_dev *pdev, int state);
#define list_first_entry(ptr, type, member) \
list_entry((ptr)->next, type, member)
#define strncasecmp strnicmp
#ifndef __packed
#define __packed __attribute__((packed))
#endif
@@ -1532,7 +1523,6 @@ static inline int strcasecmp(const char *s1, const char *s2)
#endif /* 2.6.27 */
#endif /* 2.6.31 */
#endif /* 3.10.0 */
#endif /* 3.16.0 */
#ifndef DEFINE_SPINLOCK
#define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED
@@ -1663,11 +1653,9 @@ struct mutex {
chan_printk(DEBUG, "-" #bits, chan, \
"%s: " fmt, __func__, ## __VA_ARGS__)))
#define dahdi_dev_dbg(bits, dev, fmt, ...) \
do { if (debug & (DAHDI_DBG_ ## bits)) { \
((void)((debug & (DAHDI_DBG_ ## bits)) && \
dev_printk(KERN_DEBUG, dev, \
"DBG-%s(%s): " fmt, #bits, __func__, ## __VA_ARGS__); \
} } while (0)
"DBG-%s(%s): " fmt, #bits, __func__, ## __VA_ARGS__)))
#endif /* DAHDI_PRINK_MACROS_USE_debug */
#endif /* _DAHDI_KERNEL_H */