version 1.3, 2001/01/22 05:01:52
|
version 1.4, 2001/01/31 14:19:02
|
Line 504 int DecoderWriteBlock(struct cvdv_cards
|
Line 504 int DecoderWriteBlock(struct cvdv_cards
|
if (size > 0) { |
if (size > 0) { |
|
|
if (!card->use_ring) |
if (!card->use_ring) |
MargiSetBuffers(card, 16*65536); |
MargiSetBuffers(card, NBBUF* |
|
CHANNELBUFFERSIZE); |
|
|
if (card->startingDVDV || card->startingDVDA) |
if (card->startingDVDV || card->startingDVDA) |
setSCR = 1; |
setSCR = 1; |
Line 920 static int PSrelease(struct inode *inode
|
Line 921 static int PSrelease(struct inode *inode
|
struct cvdv_cards *card = minorlist[MINOR(inode->i_rdev) % MAXDEV]; // minor number modulo 16 |
struct cvdv_cards *card = minorlist[MINOR(inode->i_rdev) % MAXDEV]; // minor number modulo 16 |
int channel = MINOR(inode->i_rdev) / MAXDEV; // minor number div. 16 |
int channel = MINOR(inode->i_rdev) / MAXDEV; // minor number div. 16 |
int i, closed; |
int i, closed; |
|
int count; |
|
count = ring_read_rest(&(card->rbuf)); |
|
if (count > 0 ) card->DMAABusy = 1; |
if (card != NULL) { |
if (card != NULL) { |
printk(KERN_DEBUG LOGNAME ": -- PSrelease\n"); |
printk(KERN_DEBUG LOGNAME ": -- PSrelease\n"); |
if (!card->open[channel]) |
if (!card->open[channel]) |
printk(KERN_DEBUG LOGNAME |
printk(KERN_DEBUG LOGNAME |
": PSrelease - not open: channel %d\n", |
": PSrelease - not open: channel %d\n", |
channel); |
channel); |
card->open[channel]--; |
card->open[channel]--; |
|
|
//MOD_DEC_USE_COUNT; |
//MOD_DEC_USE_COUNT; |
if (!card->open[channel]) { |
if (!card->open[channel]) { |
closed = 1; |
closed = 1; |
Line 938 static int PSrelease(struct inode *inode
|
Line 942 static int PSrelease(struct inode *inode
|
printk(KERN_DEBUG LOGNAME |
printk(KERN_DEBUG LOGNAME |
": PSrelease - last close\n"); |
": PSrelease - last close\n"); |
// flush remaining data |
// flush remaining data |
MargiFlush(card); |
|
|
|
card->channelApos = 0; |
card->channelApos = 0; |
card->channelBpos = 0; |
card->channelBpos = 0; |
|
|
if ((card->DMAABusy || card->DMABBusy) && (card->intdecodestatus)) { // ongoing DMA? |
if ((card->DMAABusy || card->DMABBusy |
|
|| count >1000 ) && |
|
(card->intdecodestatus)) { |
|
// ongoing DMA? |
printk(KERN_DEBUG LOGNAME |
printk(KERN_DEBUG LOGNAME |
": Delayed closing: A=%d B=%d\n", |
": Delayed closing: A=%d B=%d\n", |
card->DMAABusy, |
card->DMAABusy, |
Line 951 static int PSrelease(struct inode *inode
|
Line 957 static int PSrelease(struct inode *inode
|
card->closing = 1; // then delay closing until DMA finished, |
card->closing = 1; // then delay closing until DMA finished, |
} else { // otherwise |
} else { // otherwise |
CloseCard(card); // close immediately |
CloseCard(card); // close immediately |
L64021Init(card); |
printk(KERN_DEBUG LOGNAME |
|
": closing now\n"); |
} |
} |
} |
} |
} |
} |