diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-07-02 19:52:14 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-07-02 19:52:14 +0000 |
commit | 6375c4229b297e145aafd915152df8e72a069566 (patch) | |
tree | 0fbbdeb0650c8dd7b8f4d7291b0b0be8823c0b4f /drivers/dahdi/wcb4xxp | |
parent | b43248679cdcb3b32db1d69917bfe068e9a2632c (diff) |
wcb4xxp: support for other HFC-xS cards (info, not code)
This commit includes skeleton for the support of other HFC-[248]S-based
cards. It still does not include all the different cases for different
cards.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@6815 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/wcb4xxp')
-rw-r--r-- | drivers/dahdi/wcb4xxp/base.c | 35 | ||||
-rw-r--r-- | drivers/dahdi/wcb4xxp/wcb4xxp.h | 16 |
2 files changed, 44 insertions, 7 deletions
diff --git a/drivers/dahdi/wcb4xxp/base.c b/drivers/dahdi/wcb4xxp/base.c index e95a573..f6e82b4 100644 --- a/drivers/dahdi/wcb4xxp/base.c +++ b/drivers/dahdi/wcb4xxp/base.c @@ -123,9 +123,22 @@ static struct proc_dir_entry *myproc; struct devtype { char *desc; unsigned int flags; + int ports; /* Number of ports the card has */ + enum cards_ids card_type; /* Card type - Digium B410P, ... */ }; -static struct devtype wcb4xxp = { "Wildcard B410P", 0 }; +static struct devtype wcb4xxp = {"Wildcard B410P", .ports = 4, .card_type = B410P }; +static struct devtype hfc2s = {"HFC-2S Junghanns.NET duoBRI PCI", .ports = 2, .card_type = DUOBRI }; +static struct devtype hfc4s = {"HFC-4S Junghanns.NET quadBRI PCI", .ports = 4, .card_type = QUADBRI }; +static struct devtype hfc8s = {"HFC-4S Junghanns.NET octoBRI PCI", .ports = 8, .card_type = OCTOBRI }; +static struct devtype hfc2s_OV = {"OpenVox B200P", .ports = 2, .card_type = B200P_OV }; +static struct devtype hfc4s_OV = {"OpenVox B400P", .ports = 4, .card_type = B400P_OV }; +static struct devtype hfc8s_OV = {"OpenVox B800P", .ports = 8, .card_type = B800P_OV }; +static struct devtype hfc2s_BN = {"BeroNet BN2S0", .ports = 2, .card_type = BN2S0 }; +static struct devtype hfc4s_BN = {"BeroNet BN4S0", .ports = 4, .card_type = BN4S0 }; +static struct devtype hfc8s_BN = {"BeroNet BN8S0", .ports = 8, .card_type = BN8S0 }; + +#define CARD_HAS_EC(card) ((card)->card_type == B410P) static int echocan_create(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp, struct dahdi_echocanparam *p, struct dahdi_echocan_state **ec); @@ -2528,7 +2541,7 @@ static int __devinit b4xx_probe(struct pci_dev *pdev, const struct pci_device_id /* card found, enabled and main struct allocated. Fill it out. */ b4->magic = WCB4XXP_MAGIC; b4->variety = dt->desc; - + b4->card_type = dt->card_type; b4->pdev = pdev; b4->dev = &pdev->dev; pci_set_drvdata(pdev, b4); @@ -2542,7 +2555,7 @@ static int __devinit b4xx_probe(struct pci_dev *pdev, const struct pci_device_id spin_lock_init(&b4->fifolock); x = b4xxp_getreg8(b4, R_CHIP_ID); - if (x != 0xc0) { /* wrong chip? */ + if ((x != 0xc0) && (x != 0x80)) { /* wrong chip? */ dev_err(&pdev->dev, "Unknown/unsupported controller detected (R_CHIP_ID = 0x%02x)\n", x); goto err_out_free_mem; } @@ -2557,7 +2570,7 @@ static int __devinit b4xx_probe(struct pci_dev *pdev, const struct pci_device_id */ /* TODO: determine whether this is a 2, 4 or 8 port card */ - b4->numspans = 4; + b4->numspans = dt->ports; b4->syncspan = -1; /* sync span is unknown */ if (b4->numspans > MAX_SPANS_PER_CARD) { dev_err(b4->dev, "Driver does not know how to handle a %d span card!\n", b4->numspans); @@ -2710,7 +2723,17 @@ static void __devexit b4xxp_remove(struct pci_dev *pdev) static struct pci_device_id b4xx_ids[] __devinitdata = { { 0xd161, 0xb410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (unsigned long)&wcb4xxp }, - { 0, } + { 0x1397, 0x16b8, 0x1397, 0xe552, 0, 0, (unsigned long)&hfc8s }, + { 0x1397, 0x08b4, 0x1397, 0xb520, 0, 0, (unsigned long)&hfc4s }, + { 0x1397, 0x08b4, 0x1397, 0xb556, 0, 0, (unsigned long)&hfc2s }, + { 0x1397, 0x08b4, 0x1397, 0xe884, 0, 0, (unsigned long)&hfc2s_OV }, + { 0x1397, 0x08b4, 0x1397, 0xe888, 0, 0, (unsigned long)&hfc4s_OV }, + { 0x1397, 0x16b8, 0x1397, 0xe998, 0, 0, (unsigned long)&hfc8s_OV }, + { 0x1397, 0x08b4, 0x1397, 0xb566, 0, 0, (unsigned long)&hfc2s_BN }, + { 0x1397, 0x08b4, 0x1397, 0xb560, 0, 0, (unsigned long)&hfc4s_BN }, + { 0x1397, 0x16b8, 0x1397, 0xb562, 0, 0, (unsigned long)&hfc8s_BN }, + {0, } + }; static struct pci_driver b4xx_driver = { @@ -2770,7 +2793,7 @@ MODULE_PARM_DESC(timer_1_ms, "NT: msec to wait for link activation, TE: unused." MODULE_PARM_DESC(timer_3_ms, "TE: msec to wait for link activation, NT: unused."); MODULE_AUTHOR("Digium Incorporated <support@digium.com>"); -MODULE_DESCRIPTION("B410P quad-port BRI module driver."); +MODULE_DESCRIPTION("B410P & Similars multi-port BRI module driver."); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, b4xx_ids); diff --git a/drivers/dahdi/wcb4xxp/wcb4xxp.h b/drivers/dahdi/wcb4xxp/wcb4xxp.h index 4542a2d..2807349 100644 --- a/drivers/dahdi/wcb4xxp/wcb4xxp.h +++ b/drivers/dahdi/wcb4xxp/wcb4xxp.h @@ -378,7 +378,7 @@ #define HFC_T3 2 #define WCB4XXP_MAGIC 0xb410c0de -#define MAX_SPANS_PER_CARD 4 +#define MAX_SPANS_PER_CARD 8 #define WCB4XXP_CHANNELS_PER_SPAN 3 /* 2 B-channels and 1 D-Channel for each BRI span */ #define WCB4XXP_HDLC_BUF_LEN 32 /* arbitrary, just the max # of byts we will send to DAHDI per call */ @@ -415,6 +415,19 @@ struct b4xxp_span { struct dahdi_chan _chans[WCB4XXP_CHANNELS_PER_SPAN]; /* Backing memory */ }; +enum cards_ids { /* Cards ==> Brand & Model */ + B410P = 0, /* Digium B410P */ + B200P_OV, /* OpenVox B200P */ + B400P_OV, /* OpenVox B400P */ + B800P_OV, /* OpenVox B800P */ + DUOBRI, /* HFC-2S Junghanns.NET duoBRI PCI */ + QUADBRI, /* HFC-4S Junghanns.NET quadBRI PCI */ + OCTOBRI, /* HFC-8S Junghanns.NET octoBRI PCI */ + BN2S0, /* BeroNet BN2S0 */ + BN4S0, /* Beronet BN4S0 */ + BN8S0 /* BeroNet BN8S0 */ + }; + /* This structure exists one per card */ struct b4xxp { unsigned magic; /* magic value to make sure we're looking at our struct */ @@ -453,6 +466,7 @@ struct b4xxp { struct b4xxp_span spans[MAX_SPANS_PER_CARD]; /* Individual spans */ int order; /* Order */ int flags; /* Device flags */ + enum cards_ids card_type; /* For LED handling mostly */ int master; /* Are we master */ int ledreg; /* copy of the LED Register */ unsigned int gpio; |