Re: PATCH 2.5.4 i810_audio, bttv, working at all.

Martin Dalecki
2002-02-13T12:41:43Z

Jeff Garzik wrote:

>Martin Dalecki wrote:
>sg->busaddr=virt_to_bus(dmabuf->rawbuf+dmabuf->fragsize*i);
>
>>+ sg->busaddr=virt_to_phys(dmabuf->rawbuf+dmabuf->fragsize*i);
>> // the card will always be doing 16bit stereo
>> sg->control=dmabuf->fragsamples;
>> if(state->card->pci_id == PCI_DEVICE_ID_SI_7012)
>>@@ -954,7 +954,7 @@
>> }
>> spin_lock_irqsave(&state->card->lock, flags);
>> outb(2, state->card->iobase+c->port+OFF_CR); /* reset DMA machine */
>>- outl(virt_to_bus(&c->sg[0]), state->card->iobase+c->port+OFF_BDBAR);
>>+ outl(virt_to_phys(&c->sg[0]), state->card->iobase+c->port+OFF_BDBAR);
>>
>
>
>These changes are wrong. The addresses desired need to be obtained from
>the pci_alloc_consistent return values.
>
>> outb(2, state->card->iobase+c->port+OFF_CR); /* reset DMA machine */
>>- outl(virt_to_bus(&c->sg[0]), state->card->iobase+c->port+OFF_BDBAR);
>>+ outl(virt_to_phys(&c->sg[0]), state->card->iobase+c->port+OFF_BDBAR);
>>
>
>likewise
>
>>- ret = virt_to_bus((void *)kva);
>>+ ret = virt_to_phys((void *)kva);
>>
>> va = VMALLOC_VMADDR(adr);
>> kva = uvirt_to_kva(pgd_offset_k(va), va);
>>- ret = virt_to_bus((void *)kva);
>>+ ret = virt_to_phys((void *)kva);
>>
>>- btv->nr,virt_to_bus(po), virt_to_bus(pe));
>>+ btv->nr,virt_to_phys(po), virt_to_phys(pe));
>>
>
>...likewise, etc.
>
>This works on silly x86 but is not portable at all... definitely not
>for application.
>

The bttv we can argue about, I was just tagging it as beeing a quick fix...

Of course I admit that I have taken the easy shoot here. But it wasn't
possible
to me to deduce the proper thing to do by looking at the patches.
This is the usual way I deal with API changes: Have a look at what has
been done
to the other candidates and do the analogous thing where you need it.

But please just show me a non x86 architecture which is using the
i810_audio driver!