diff options
author | mogorman <mogorman@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-11-06 21:03:05 +0000 |
---|---|---|
committer | mogorman <mogorman@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-11-06 21:03:05 +0000 |
commit | fe41c6d7c14ae4742c1b75d9db994e3cddab780f (patch) | |
tree | 71e2bfbc5e90b93fc71cb645d4ee98287a88e384 | |
parent | 380f72cfaa434030b21dcd14850ad6ec85904240 (diff) |
Reduces dma memory requirement and fixes multi card support
-John Sloan
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1560 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r-- | ztcodec_dte.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/ztcodec_dte.c b/ztcodec_dte.c index b24c368..8db9a74 100644 --- a/ztcodec_dte.c +++ b/ztcodec_dte.c @@ -87,7 +87,7 @@ #define MAX_COMMAND_LEN BOOT_CMD_LEN /* Must be the larger of BOOT_CMD_LEN or OTHER_CMD_LEN */ -#define ERING_SIZE (NUM_CHANNELS * 2) /* Maximum ring size */ +#define ERING_SIZE (NUM_CHANNELS / 2) /* Maximum ring size */ #define SFRAME_SIZE MAX_COMMAND_LEN @@ -264,6 +264,9 @@ struct wcdte { volatile unsigned int *writechunk; /* Double-word aligned write memory */ volatile unsigned int *readchunk; /* Double-word aligned read memory */ volatile unsigned int *descripchunk; /* Descriptors */ + + struct zt_transcoder *uencode; + struct zt_transcoder *udecode; }; struct wcdte_desc { @@ -661,7 +664,7 @@ static inline void wcdte_receiveprep(struct wcdte *wc, int dbl) if ((rcodec == 0x00) || (rcodec == 0x08)) /* ulaw or alaw (decoders) */ { - ztc = &(udecode->channels[ztc_ndx]); + ztc = &(wc->udecode->channels[ztc_ndx]); zth = ztc->tch; st = ztc->pvt; @@ -679,7 +682,7 @@ static inline void wcdte_receiveprep(struct wcdte *wc, int dbl) if ((rcodec == 0x04) || (rcodec == 0x12)) /* g.723 or g.729 (encoders) */ { - ztc = &(uencode->channels[ztc_ndx]); + ztc = &(wc->uencode->channels[ztc_ndx]); zth = ztc->tch; st = ztc->pvt; @@ -1052,8 +1055,8 @@ static int wcdte_boot_processor(struct wcdte *wc) /* Set reset */ wcdte_setctl(wc, 0x00A0, 0x04000000); - /* Wait 300msec to ensure processor reset */ - mdelay(300); + /* Wait 1000msec to ensure processor reset */ + mdelay(1000); /* Clear reset */ wcdte_setctl(wc, 0x00A0, 0x04080000); @@ -1303,6 +1306,9 @@ static int __devinit wcdte_init_one(struct pci_dev *pdev, const struct pci_devic uencode->channels[x].pvt = encoders + x; udecode->channels[x].pvt = decoders + x; } + + wc->uencode = uencode; + wc->udecode = udecode; zt_transcoder_register(uencode); zt_transcoder_register(udecode); @@ -1402,6 +1408,14 @@ static void __devexit wcdte_remove_one(struct pci_dev *pdev) struct wcdte *wc = pci_get_drvdata(pdev); if (wc) { + + zt_transcoder_unregister(wc->udecode); + zt_transcoder_unregister(wc->uencode); + zt_transcoder_free(wc->uencode); + zt_transcoder_free(wc->udecode); + vfree(wc->uencode->channels[0].pvt); + vfree(wc->udecode->channels[0].pvt); + /* Stop any DMA */ wcdte_stop_dma(wc); @@ -1456,8 +1470,9 @@ int ztdte_init(void) void ztdte_cleanup(void) { - int i; +// int i; +#if 0 if (debug) { for(i = 0; i < NUM_CHANNELS; i++) @@ -1466,15 +1481,10 @@ void ztdte_cleanup(void) printk("decoder[%d] packets_sent = %d, packets_received = %d [%d]\n", i, decoders[i].packets_sent, decoders[i].packets_received, decoders[i].packets_sent - decoders[i].packets_received); } } +#endif pci_unregister_driver(&wcdte_driver); - zt_transcoder_unregister(udecode); - zt_transcoder_unregister(uencode); - zt_transcoder_free(uencode); - zt_transcoder_free(udecode); - vfree(encoders); - vfree(decoders); printk("Zaptel DTE (G.729/G.723) Transcoder support unloaded.\n"); } |