summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormogorman <mogorman@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-11-06 21:03:05 +0000
committermogorman <mogorman@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-11-06 21:03:05 +0000
commitfe41c6d7c14ae4742c1b75d9db994e3cddab780f (patch)
tree71e2bfbc5e90b93fc71cb645d4ee98287a88e384
parent380f72cfaa434030b21dcd14850ad6ec85904240 (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.c34
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");
}