aboutsummaryrefslogtreecommitdiff
path: root/misc/dahdi-kmod/files/patch-zaphfc
diff options
context:
space:
mode:
Diffstat (limited to 'misc/dahdi-kmod/files/patch-zaphfc')
-rw-r--r--misc/dahdi-kmod/files/patch-zaphfc883
1 files changed, 0 insertions, 883 deletions
diff --git a/misc/dahdi-kmod/files/patch-zaphfc b/misc/dahdi-kmod/files/patch-zaphfc
deleted file mode 100644
index fd8b72d1bca2..000000000000
--- a/misc/dahdi-kmod/files/patch-zaphfc
+++ /dev/null
@@ -1,883 +0,0 @@
-diff -ruN freebsd/drivers/dahdi/zaphfc.orig/base.c freebsd/drivers/dahdi/zaphfc/base.c
---- freebsd/drivers/dahdi/zaphfc.orig/base.c 2010-09-01 00:55:30.000000000 +0700
-+++ freebsd/drivers/dahdi/zaphfc/base.c 2010-09-02 19:19:45.000000000 +0700
-@@ -23,6 +23,50 @@
- * Please read the README file for important infos.
- */
-
-+#if defined(__FreeBSD__)
-+#include <sys/types.h>
-+#include <sys/bus.h>
-+#include <sys/module.h>
-+#include <dev/pci/pcireg.h>
-+#include <dev/pci/pcivar.h>
-+
-+#define PCI_VENDOR_ID_CCD 0x1397
-+
-+#define PCI_DEVICE_ID_CCD_2BD0 0x2bd0
-+#define PCI_DEVICE_ID_CCD_B000 0xb000
-+#define PCI_DEVICE_ID_CCD_B006 0xb006
-+#define PCI_DEVICE_ID_CCD_B007 0xb007
-+#define PCI_DEVICE_ID_CCD_B008 0xb008
-+#define PCI_DEVICE_ID_CCD_B009 0xb009
-+#define PCI_DEVICE_ID_CCD_B00A 0xb00a
-+#define PCI_DEVICE_ID_CCD_B00B 0xb00b
-+#define PCI_DEVICE_ID_CCD_B00C 0xb00c
-+#define PCI_DEVICE_ID_CCD_B100 0xb100
-+
-+#define PCI_VENDOR_ID_ABOCOM 0x13D1
-+#define PCI_DEVICE_ID_ABOCOM_2BD1 0x2BD1
-+
-+#define PCI_VENDOR_ID_ANIGMA 0x1051
-+#define PCI_DEVICE_ID_ANIGMA_MC145575 0x0100
-+
-+#define PCI_VENDOR_ID_ASUSTEK 0x1043
-+#define PCI_DEVICE_ID_ASUSTEK_0675 0x0675
-+
-+#define PCI_VENDOR_ID_BERKOM 0x0871
-+#define PCI_DEVICE_ID_BERKOM_A1T 0xffa1
-+#define PCI_DEVICE_ID_BERKOM_T_CONCEPT 0xffa2
-+
-+#define PCI_VENDOR_ID_DIGI 0x114f
-+#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_E 0x0070
-+#define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071
-+#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072
-+#define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073
-+
-+#define PCI_VENDOR_ID_ZOLTRIX 0x15b0
-+#define PCI_DEVICE_ID_ZOLTRIX_2BD0 0x2bd0
-+
-+#define set_current_state(x)
-+#else /* !__FreeBSD__ */
- #include <linux/spinlock.h>
- #include <linux/init.h>
- #include <linux/pci.h>
-@@ -34,14 +78,13 @@
- #include <linux/delay.h>
- #include <linux/proc_fs.h>
- #include <linux/if_arp.h>
-+#endif /* !__FreeBSD__ */
-
- #include <dahdi/kernel.h>
-
- #include "zaphfc.h"
- #include "fifo.h"
-
--#if CONFIG_PCI
--
- #define DAHDI_B1 0
- #define DAHDI_B2 1
- #define DAHDI_D 2
-@@ -57,7 +100,9 @@
- static int nt_modes[hfc_MAX_BOARDS];
- static int nt_modes_count;
- static int force_l1_up;
-+#if !defined(__FreeBSD__)
- static struct proc_dir_entry *hfc_proc_zaphfc_dir;
-+#endif
-
- #ifdef DEBUG
- int debug_level;
-@@ -122,6 +167,31 @@
- {0,}
- };
-
-+#if defined(__FreeBSD__)
-+static void
-+hfc_release_resources(struct hfc_card *card)
-+{
-+ /* disconnect the interrupt handler */
-+ if (card->irq_handle != NULL) {
-+ bus_teardown_intr(card->pcidev->dev, card->irq_res, card->irq_handle);
-+ card->irq_handle = NULL;
-+ }
-+
-+ if (card->irq_res != NULL) {
-+ bus_release_resource(card->pcidev->dev, SYS_RES_IRQ, card->irq_rid, card->irq_res);
-+ card->irq_res = NULL;
-+ }
-+
-+ /* release DMA resources */
-+ dahdi_dma_free(&card->dma_tag, &card->dma_map, (void **) &card->fifos, &card->dma_addr);
-+
-+ /* release I/O range */
-+ if (card->mem_res != NULL) {
-+ bus_release_resource(card->pcidev->dev, SYS_RES_MEMORY, card->mem_rid, card->mem_res);
-+ card->mem_res = NULL;
-+ }
-+}
-+#else
- MODULE_DEVICE_TABLE(pci, hfc_pci_ids);
-
- static int __devinit hfc_probe(struct pci_dev *dev
-@@ -134,6 +204,7 @@
- .probe = hfc_probe,
- .remove = hfc_remove,
- };
-+#endif /* !__FreeBSD__ */
-
- /******************************************
- * HW routines
-@@ -418,7 +489,7 @@
-
- switch (chan->number) {
- case D:
-- if (chan->status != free &&
-+ if (chan->status != chan_free &&
- chan->status != open_framed) {
- spin_unlock(&chan->lock);
- return -EBUSY;
-@@ -428,7 +499,7 @@
-
- case B1:
- case B2:
-- if (chan->status != free) {
-+ if (chan->status != chan_free) {
- spin_unlock(&chan->lock);
- return -EBUSY;
- }
-@@ -437,7 +508,6 @@
- }
-
- chan->open_by_zaptel = TRUE;
-- try_module_get(THIS_MODULE);
- spin_unlock(&chan->lock);
-
- switch (chan->number) {
-@@ -484,7 +554,13 @@
- hfc_outb(card, hfc_SCTRL, card->regs.sctrl);
- hfc_outb(card, hfc_SCTRL_R, card->regs.sctrl_r);
-
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_update_fifo_state(card);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
-
- printk(KERN_INFO hfc_DRIVER_PREFIX
- "card %d: "
-@@ -509,12 +585,12 @@
-
- spin_lock(&chan->lock);
-
-- if (chan->status == free) {
-+ if (chan->status == chan_free) {
- spin_unlock(&chan->lock);
- return -EINVAL;
- }
-
-- chan->status = free;
-+ chan->status = chan_free;
- chan->open_by_zaptel = FALSE;
-
- spin_unlock(&chan->lock);
-@@ -538,8 +614,8 @@
- break;
- }
-
-- if (card->chans[B1].status == free &&
-- card->chans[B2].status == free)
-+ if (card->chans[B1].status == chan_free &&
-+ card->chans[B2].status == chan_free)
- card->regs.m2 &= ~hfc_M2_PROC_TRANS;
-
- hfc_outb(card, hfc_INT_M2, card->regs.m2);
-@@ -548,9 +624,13 @@
- hfc_outb(card, hfc_SCTRL, card->regs.sctrl);
- hfc_outb(card, hfc_SCTRL_R, card->regs.sctrl_r);
-
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_update_fifo_state(card);
--
-- module_put(THIS_MODULE);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
-
- printk(KERN_INFO hfc_DRIVER_PREFIX
- "card %d: "
-@@ -591,7 +671,7 @@
-
- static int hfc_zap_startup(struct dahdi_span *span)
- {
-- struct dahdi_hfc *zthfc = span->pvt;
-+ struct dahdi_hfc *zthfc = container_of(span, struct dahdi_hfc, span);
- struct hfc_card *hfctmp = zthfc->card;
- int alreadyrunning;
-
-@@ -642,6 +722,20 @@
- return 0;
- }
-
-+static const struct dahdi_span_ops hfc_zap_span_ops = {
-+ .owner = THIS_MODULE,
-+ .startup = hfc_zap_startup,
-+ .shutdown = hfc_zap_shutdown,
-+ .rbsbits = hfc_zap_rbsbits,
-+ .maint = hfc_zap_maint,
-+ .open = hfc_zap_open,
-+ .close = hfc_zap_close,
-+ .spanconfig = hfc_zap_spanconfig,
-+ .chanconfig = hfc_zap_chanconfig,
-+ .ioctl = hfc_zap_ioctl,
-+ .hdlc_hard_xmit = hfc_hdlc_hard_xmit,
-+};
-+
- static int hfc_zap_initialize(struct dahdi_hfc *hfccard)
- {
- struct hfc_card *hfctmp = hfccard->card;
-@@ -655,23 +749,14 @@
- hfctmp->nt_mode ? "NT" : "TE");
- hfccard->span.spantype = hfctmp->nt_mode ? "NT" : "TE";
- hfccard->span.manufacturer = "Cologne Chips";
-- hfccard->span.spanconfig = hfc_zap_spanconfig;
-- hfccard->span.chanconfig = hfc_zap_chanconfig;
-- hfccard->span.startup = hfc_zap_startup;
-- hfccard->span.shutdown = hfc_zap_shutdown;
-- hfccard->span.maint = hfc_zap_maint;
-- hfccard->span.rbsbits = hfc_zap_rbsbits;
-- hfccard->span.open = hfc_zap_open;
-- hfccard->span.close = hfc_zap_close;
-- hfccard->span.ioctl = hfc_zap_ioctl;
-- hfccard->span.hdlc_hard_xmit = hfc_hdlc_hard_xmit;
-+ hfccard->span.ops = &hfc_zap_span_ops;
- hfccard->span.flags = 0;
-- hfccard->span.irq = hfctmp->pcidev->irq;
-+ hfccard->span.irq = dahdi_pci_get_irq(hfctmp->pcidev);
- dahdi_copy_string(hfccard->span.devicetype, "HFC-S PCI-A ISDN",
- sizeof(hfccard->span.devicetype));
- sprintf(hfccard->span.location, "PCI Bus %02d Slot %02d",
-- hfctmp->pcidev->bus->number,
-- PCI_SLOT(hfctmp->pcidev->devfn) + 1);
-+ dahdi_pci_get_bus(hfctmp->pcidev),
-+ dahdi_pci_get_slot(hfctmp->pcidev));
- hfccard->span.chans = hfccard->_chans;
- hfccard->span.channels = 3;
- for (i = 0; i < hfccard->span.channels; i++)
-@@ -680,7 +765,6 @@
- hfccard->span.linecompat = DAHDI_CONFIG_AMI | DAHDI_CONFIG_CCS;
- hfccard->span.offset = 0;
- init_waitqueue_head(&hfccard->span.maintq);
-- hfccard->span.pvt = hfccard;
-
- for (i = 0; i < hfccard->span.channels; i++) {
- memset(&hfccard->chans[i], 0x0, sizeof(struct dahdi_chan));
-@@ -760,22 +844,20 @@
- static void hfc_frame_arrived(struct hfc_chan_duplex *chan);
- static void hfc_handle_voice(struct hfc_card *card);
-
--#if (KERNEL_VERSION(2, 6, 24) < LINUX_VERSION_CODE)
--static irqreturn_t hfc_interrupt(int irq, void *dev_id)
--#else
--static irqreturn_t hfc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
--#endif
-+DAHDI_IRQ_HANDLER(hfc_interrupt)
- {
- struct hfc_card *card = dev_id;
- unsigned long flags;
- u8 status, s1, s2;
-
-+#if !defined(__FreeBSD__)
- if (!card) {
- printk(KERN_CRIT hfc_DRIVER_PREFIX
- "spurious interrupt (IRQ %d)\n",
- irq);
- return IRQ_NONE;
- }
-+#endif /* !__FreeBSD__ */
-
- spin_lock_irqsave(&card->lock, flags);
- status = hfc_inb(card, hfc_STATUS);
-@@ -832,21 +914,40 @@
- /*
- * D chan RX (bit 5)
- */
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_frame_arrived(&card->chans[D]);
-+
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
-
- if (s1 & hfc_INTS_B1REC) {
- /*
- * B1 chan RX (bit 3)
- */
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_frame_arrived(&card->chans[B1]);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
-
- if (s1 & hfc_INTS_B2REC) {
- /*
- * B2 chan RX (bit 4)
- */
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_frame_arrived(&card->chans[B2]);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
-
- if (s1 & hfc_INTS_DTRANS) {
-@@ -940,7 +1041,13 @@
- card->regs.ctmt &= ~hfc_CTMT_TIMER_MASK;
- hfc_outb(card, hfc_CTMT, card->regs.ctmt);
-
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_resume_fifo(card);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
- }
-
-@@ -971,11 +1078,17 @@
- hfc_outb(card, hfc_STATES, hfc_STATES_LOAD_STATE | 3);
- }
-
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- if (new_state == 3 && card->l1_state != 3)
- hfc_resume_fifo(card);
-
- if (new_state != 3 && card->l1_state == 3)
- hfc_suspend_fifo(card);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
-
- } else {
- if (new_state == 3) {
-@@ -1015,7 +1128,13 @@
- /*
- * TE has become inactive, disable FIFO
- */
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- hfc_suspend_fifo(card);
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
- }
-
-@@ -1040,6 +1159,9 @@
- available_bytes >= DAHDI_CHUNKSIZE + hfc_RX_FIFO_PRELOAD) {
- card->ticks = 0;
-
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_POSTREAD);
-+#endif
- if (available_bytes > DAHDI_CHUNKSIZE*2 + hfc_RX_FIFO_PRELOAD) {
- card->late_irqs++;
- /*
-@@ -1064,6 +1186,9 @@
- } else {
- hfc_handle_voice(card);
- }
-+#if defined(__FreeBSD__)
-+ bus_dmamap_sync(card->dma_tag, card->dma_map, BUS_DMASYNC_PREWRITE);
-+#endif
- }
-
- card->ticks++;
-@@ -1179,7 +1304,9 @@
- {
- struct hfc_card *card = chan->card;
- int antiloop = 16;
-+#if !defined(__FreeBSD__)
- struct sk_buff *skb;
-+#endif
-
- while (hfc_fifo_has_frames(&chan->rx) && --antiloop) {
- int frame_size = hfc_fifo_get_frame_size(&chan->rx);
-@@ -1229,6 +1356,7 @@
- break;
- }
-
-+#if !defined(__FreeBSD__)
- skb = dev_alloc_skb(frame_size - 3);
-
- if (!skb) {
-@@ -1254,6 +1382,7 @@
- #else
- skb->ip_summed = CHECKSUM_HW;
- #endif
-+#endif /* !__FreeBSD__ */
-
- if (chan->open_by_zaptel) {
- card->chans[D].rx.ugly_framebuf_size = frame_size - 1;
-@@ -1261,20 +1390,26 @@
- if (hfc_fifo_get_frame(&card->chans[D].rx,
- card->chans[D].rx.ugly_framebuf,
- frame_size - 1) == -1) {
-+#if !defined(__FreeBSD__)
- dev_kfree_skb(skb);
-+#endif
- continue;
- }
-
-+#if !defined(__FreeBSD__)
- memcpy(skb_put(skb, frame_size - 3),
- card->chans[D].rx.ugly_framebuf,
- frame_size - 3);
-+#endif
- } else {
-+#if !defined(__FreeBSD__)
- if (hfc_fifo_get_frame(&chan->rx,
- skb_put(skb, frame_size - 3),
- frame_size - 3) == -1) {
- dev_kfree_skb(skb);
- continue;
- }
-+#endif
- }
- }
-
-@@ -1289,8 +1424,12 @@
- * Module initialization and cleanup
- ******************************************/
-
-+#if defined(__FreeBSD__)
-+static int hfc_probe(device_t dev)
-+#else
- static int __devinit hfc_probe(struct pci_dev *pci_dev,
- const struct pci_device_id *ent)
-+#endif
- {
- static int cardnum;
- int err;
-@@ -1298,6 +1437,12 @@
-
- struct hfc_card *card = NULL;
- struct dahdi_hfc *zthfc = NULL;
-+
-+#if defined(__FreeBSD__)
-+ card = device_get_softc(dev);
-+ card->pcidev = &card->_dev;
-+ card->pcidev->dev = dev;
-+#else
- card = kmalloc(sizeof(struct hfc_card), GFP_KERNEL);
- if (!card) {
- printk(KERN_CRIT hfc_DRIVER_PREFIX
-@@ -1307,10 +1452,48 @@
- }
-
- memset(card, 0x00, sizeof(struct hfc_card));
-- card->cardnum = cardnum;
- card->pcidev = pci_dev;
-+#endif /* !__FreeBSD__ */
-+ card->cardnum = cardnum;
- spin_lock_init(&card->lock);
-
-+#if defined(__FreeBSD__)
-+ /* allocate IO resource */
-+ card->mem_rid = PCIR_BAR(1);
-+ card->mem_res = bus_alloc_resource_any(card->pcidev->dev, SYS_RES_MEMORY, &card->mem_rid, RF_ACTIVE);
-+ if (card->mem_res == NULL) {
-+ device_printf(dev, "Can't allocate memory resource\n");
-+ err = -ENXIO;
-+ goto err_pci_request_regions;
-+ }
-+
-+ /* enable bus mastering */
-+ pci_enable_busmaster(dev);
-+
-+ /* allocate DMA memory */
-+ err = dahdi_dma_allocate(card->pcidev->dev, hfc_FIFO_SIZE, &card->dma_tag, &card->dma_map,
-+ (void **) &card->fifos, &card->dma_addr);
-+ if (err)
-+ goto err_alloc_fifo;
-+
-+ /* setup interrupt */
-+ card->irq_res = bus_alloc_resource_any(
-+ card->pcidev->dev, SYS_RES_IRQ, &card->irq_rid, RF_SHAREABLE | RF_ACTIVE);
-+ if (card->irq_res == NULL) {
-+ device_printf(card->pcidev->dev, "Can't allocate irq resource\n");
-+ err = -ENXIO;
-+ goto err_request_irq;
-+ }
-+
-+ err = bus_setup_intr(
-+ card->pcidev->dev, card->irq_res, INTR_TYPE_CLK | INTR_MPSAFE,
-+ hfc_interrupt, NULL, card, &card->irq_handle);
-+ if (err) {
-+ device_printf(card->pcidev->dev, "Can't setup interrupt handler (error %d)\n", err);
-+ err = -ENXIO;
-+ goto err_request_irq;
-+ }
-+#else
- pci_set_drvdata(pci_dev, card);
-
- err = pci_enable_device(pci_dev);
-@@ -1403,6 +1586,7 @@
- card->cardnum);
- goto err_request_irq;
- }
-+#endif /* !__FreeBSD__ */
-
- card->nt_mode = FALSE;
-
-@@ -1419,7 +1603,7 @@
- */
- card->chans[D].card = card;
- card->chans[D].name = "D";
-- card->chans[D].status = free;
-+ card->chans[D].status = chan_free;
- card->chans[D].number = D;
- spin_lock_init(&card->chans[D].lock);
-
-@@ -1460,7 +1644,7 @@
- */
- card->chans[B1].card = card;
- card->chans[B1].name = "B1";
-- card->chans[B1].status = free;
-+ card->chans[B1].status = chan_free;
- card->chans[B1].number = B1;
- card->chans[B1].protocol = 0;
- spin_lock_init(&card->chans[B1].lock);
-@@ -1502,7 +1686,7 @@
- */
- card->chans[B2].card = card;
- card->chans[B2].name = "B2";
-- card->chans[B2].status = free;
-+ card->chans[B2].status = chan_free;
- card->chans[B2].number = B2;
- card->chans[B2].protocol = 0;
- spin_lock_init(&card->chans[B2].lock);
-@@ -1555,14 +1739,17 @@
- hfc_zap_initialize(zthfc);
- card->ztdev = zthfc;
-
-+#if !defined(__FreeBSD__)
- snprintf(card->proc_dir_name,
- sizeof(card->proc_dir_name),
- "%d", card->cardnum);
- card->proc_dir = proc_mkdir(card->proc_dir_name, hfc_proc_zaphfc_dir);
- SET_PROC_DIRENTRY_OWNER(card->proc_dir);
-+#endif /* !__FreeBSD__ */
-
- hfc_resetCard(card);
-
-+#if !defined(__FreeBSD__)
- printk(KERN_INFO hfc_DRIVER_PREFIX
- "card %d configured for %s mode at mem %#lx (0x%p) IRQ %u\n",
- card->cardnum,
-@@ -1570,28 +1757,106 @@
- card->io_bus_mem,
- card->io_mem,
- card->pcidev->irq);
-+#endif /* !__FreeBSD__ */
-
- cardnum++;
-
- return 0;
-
- err_request_irq:
-+#if !defined(__FreeBSD__)
- pci_free_consistent(pci_dev, hfc_FIFO_SIZE,
- card->fifo_mem, card->fifo_bus_mem);
-+#endif
- err_alloc_fifo:
-+#if !defined(__FreeBSD__)
- iounmap(card->io_mem);
- err_ioremap:
- err_noiobase:
- err_noirq:
- pci_release_regions(pci_dev);
-+#endif
- err_pci_request_regions:
-+#if defined(__FreeBSD__)
-+ hfc_release_resources(card);
-+#else
- err_pci_set_dma_mask:
- err_pci_enable_device:
- kfree(card);
- err_alloc_hfccard:
-+#endif
- return err;
- }
-
-+#if defined(__FreeBSD__)
-+SYSCTL_NODE(_dahdi, OID_AUTO, wcb1xxp, CTLFLAG_RW, 0, "DAHDI wcb1xxp");
-+#define MODULE_PARAM_PREFIX "dahdi.wcb1xxp"
-+#define MODULE_PARAM_PARENT _dahdi_wcb1xxp
-+
-+static int
-+wcb1xxp_device_probe(device_t dev)
-+{
-+ struct pci_device_id *id;
-+
-+ id = dahdi_pci_device_id_lookup(dev, hfc_pci_ids);
-+ if (id == NULL)
-+ return (ENXIO);
-+
-+ /* found device */
-+ device_printf(dev, "vendor=%x device=%x subvendor=%x\n",
-+ id->vendor, id->device, id->subvendor);
-+ device_set_desc(dev, "CCD HFC-S");
-+ return (0);
-+}
-+
-+static int
-+wcb1xxp_device_attach(device_t dev)
-+{
-+ int res;
-+ struct pci_device_id *id;
-+
-+ id = dahdi_pci_device_id_lookup(dev, hfc_pci_ids);
-+ if (id == NULL)
-+ return (ENXIO);
-+
-+ res = hfc_probe(dev);
-+ return (-res);
-+}
-+
-+static int
-+wcb1xxp_device_detach(device_t dev)
-+{
-+ struct hfc_card *card = device_get_softc(dev);
-+
-+ if (dahdi_module_usecount(THIS_MODULE) > 0)
-+ return (EBUSY);
-+
-+ hfc_softreset(card);
-+ dahdi_unregister(&card->ztdev->span);
-+ hfc_release_resources(card);
-+
-+ return (0);
-+}
-+
-+static device_method_t wcb1xxp_methods[] = {
-+ DEVMETHOD(device_probe, wcb1xxp_device_probe),
-+ DEVMETHOD(device_attach, wcb1xxp_device_attach),
-+ DEVMETHOD(device_detach, wcb1xxp_device_detach),
-+ { 0, 0 }
-+};
-+
-+static driver_t wcb1xxp_pci_driver = {
-+ "wcb1xxp",
-+ wcb1xxp_methods,
-+ sizeof(struct hfc_card)
-+};
-+
-+static devclass_t wcb1xxp_devclass;
-+
-+DAHDI_DRIVER_MODULE(wcb1xxp, pci, wcb1xxp_pci_driver, wcb1xxp_devclass);
-+MODULE_DEPEND(wcb1xxp, pci, 1, 1, 1);
-+MODULE_DEPEND(wcb1xxp, dahdi, 1, 1, 1);
-+#else
- static void __devexit hfc_remove(struct pci_dev *pci_dev)
- {
- struct hfc_card *card = pci_get_drvdata(pci_dev);
-@@ -1671,8 +1936,6 @@
-
- module_exit(hfc_module_exit);
-
--#endif
--
- MODULE_DESCRIPTION(hfc_DRIVER_DESCR);
- MODULE_AUTHOR("Jens Wilke <jw_vzaphfc@headissue.com>, "
- "Daniele (Vihai) Orlandi <daniele@orlandi.com>, "
-@@ -1681,15 +1944,18 @@
- #ifdef MODULE_LICENSE
- MODULE_LICENSE("GPL");
- #endif
-+#endif /* !__FreeBSD__ */
-
-
- module_param(modes, int, 0444);
-
-+#if !defined(__FreeBSD__)
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10)
- module_param_array(nt_modes, int, &nt_modes_count, 0444);
- #else
- module_param_array(nt_modes, int, nt_modes_count, 0444);
- #endif
-+#endif /* !__FreeBSD__ */
-
- module_param(force_l1_up, int, 0444);
- #ifdef DEBUG
-diff -ruN freebsd/drivers/dahdi/zaphfc.orig/fifo.c freebsd/drivers/dahdi/zaphfc/fifo.c
---- freebsd/drivers/dahdi/zaphfc.orig/fifo.c 2010-09-01 00:55:30.000000000 +0700
-+++ freebsd/drivers/dahdi/zaphfc/fifo.c 2010-09-01 01:09:07.000000000 +0700
-@@ -13,7 +13,9 @@
- *
- */
-
-+#if !defined(__FreeBSD__)
- #include <linux/kernel.h>
-+#endif
-
- #include <dahdi/kernel.h>
-
-@@ -36,7 +38,7 @@
- chan->z_base + z_start,
- bytes_to_boundary);
-
-- memcpy(data + bytes_to_boundary,
-+ memcpy((char *) data + bytes_to_boundary,
- chan->fifo_base,
- size - bytes_to_boundary);
- }
-@@ -60,7 +62,7 @@
- bytes_to_boundary);
-
- memcpy(chan->fifo_base,
-- data + bytes_to_boundary,
-+ (char *) data + bytes_to_boundary,
- size - bytes_to_boundary);
- }
- }
-diff -ruN freebsd/drivers/dahdi/zaphfc.orig/fifo.h freebsd/drivers/dahdi/zaphfc/fifo.h
---- freebsd/drivers/dahdi/zaphfc.orig/fifo.h 2010-09-01 00:55:30.000000000 +0700
-+++ freebsd/drivers/dahdi/zaphfc/fifo.h 2010-07-07 04:24:55.000000000 +0700
-@@ -21,22 +21,22 @@
-
- static inline u16 *Z1_F1(struct hfc_chan_simplex *chan)
- {
-- return chan->z1_base + (*chan->f1 * 4);
-+ return (u16 *) (chan->z1_base + (*chan->f1 * 4));
- }
-
- static inline u16 *Z2_F1(struct hfc_chan_simplex *chan)
- {
-- return chan->z2_base + (*chan->f1 * 4);
-+ return (u16 *) (chan->z2_base + (*chan->f1 * 4));
- }
-
- static inline u16 *Z1_F2(struct hfc_chan_simplex *chan)
- {
-- return chan->z1_base + (*chan->f2 * 4);
-+ return (u16 *) (chan->z1_base + (*chan->f2 * 4));
- }
-
- static inline u16 *Z2_F2(struct hfc_chan_simplex *chan)
- {
-- return chan->z2_base + (*chan->f2 * 4);
-+ return (u16 *) (chan->z2_base + (*chan->f2 * 4));
- }
-
- static inline u16 Z_inc(struct hfc_chan_simplex *chan, u16 z, u16 inc)
-diff -ruN freebsd/drivers/dahdi/zaphfc.orig/zaphfc.h freebsd/drivers/dahdi/zaphfc/zaphfc.h
---- freebsd/drivers/dahdi/zaphfc.orig/zaphfc.h 2010-09-01 00:55:30.000000000 +0700
-+++ freebsd/drivers/dahdi/zaphfc/zaphfc.h 2010-08-31 23:57:30.000000000 +0700
-@@ -24,7 +24,12 @@
- #ifndef _HFC_ZAPHFC_H
- #define _HFC_ZAPHFC_H
-
-+#if defined(__FreeBSD__)
-+#include <sys/rman.h>
-+#include <machine/bus.h>
-+#else
- #include <asm/io.h>
-+#endif
-
- #define hfc_DRIVER_NAME "vzaphfc"
- #define hfc_DRIVER_PREFIX hfc_DRIVER_NAME ": "
-@@ -273,9 +278,9 @@
- int ugly_framebuf_size;
- u16 ugly_framebuf_off;
-
-- void *z1_base, *z2_base;
-+ char *z1_base, *z2_base;
- void *fifo_base;
-- void *z_base;
-+ char *z_base;
- u16 z_min;
- u16 z_max;
- u16 fifo_size;
-@@ -293,7 +298,7 @@
- };
-
- enum hfc_chan_status {
-- free,
-+ chan_free,
- open_framed,
- open_voice,
- sniff_aux,
-@@ -330,12 +335,27 @@
- struct proc_dir_entry *proc_fifos;
- struct proc_dir_entry *proc_bufs;
-
-+#if defined(__FreeBSD__)
-+ struct pci_dev _dev;
-+
-+ struct resource *mem_res; /* resource for I/O range */
-+ int mem_rid;
-+
-+ struct resource *irq_res; /* resource for irq */
-+ int irq_rid;
-+ void *irq_handle;
-+
-+ uint32_t dma_addr;
-+ bus_dma_tag_t dma_tag;
-+ bus_dmamap_t dma_map;
-+#else
- unsigned long io_bus_mem;
- void __iomem *io_mem;
-
- dma_addr_t fifo_bus_mem;
-+#endif /* !__FreeBSD__ */
- void *fifo_mem;
-- void *fifos;
-+ char *fifos;
-
- int nt_mode;
- int sync_loss_reported;
-@@ -403,12 +423,24 @@
-
- static inline u8 hfc_inb(struct hfc_card *card, int offset)
- {
-+#if defined(__FreeBSD__)
-+ return bus_space_read_1(
-+ rman_get_bustag(card->mem_res), rman_get_bushandle(card->mem_res),
-+ offset);
-+#else
- return readb(card->io_mem + offset);
-+#endif
- }
-
- static inline void hfc_outb(struct hfc_card *card, int offset, u8 value)
- {
-+#if defined(__FreeBSD__)
-+ bus_space_write_1(
-+ rman_get_bustag(card->mem_res), rman_get_bushandle(card->mem_res),
-+ offset, value);
-+#else
- writeb(value, card->io_mem + offset);
-+#endif
- }
-
- #endif
-diff -ruN freebsd/freebsd/wcb1xxp.orig/Makefile freebsd/freebsd/wcb1xxp/Makefile
---- freebsd/freebsd/wcb1xxp.orig/Makefile 1970-01-01 07:00:00.000000000 +0700
-+++ freebsd/freebsd/wcb1xxp/Makefile 2010-09-01 01:00:49.000000000 +0700
-@@ -0,0 +1,9 @@
-+# $Id: Makefile 7432 2009-10-28 21:34:15Z fjoe $
-+
-+.PATH: ${.CURDIR}/../../drivers/dahdi/zaphfc
-+
-+KMOD= wcb1xxp
-+SRCS= base.c fifo.c
-+SRCS+= device_if.h bus_if.h pci_if.h
-+
-+.include <bsd.kmod.mk>