>   Yes, I have working code to communicate with SAM9407 chip (microcode
> loading,
> memory management, channel allocation, control interface, etc) and I
> have just start
> working on PCM interface.  Unfortunatelly, I haven't got any time to
> implement
> PCM routines, but all the low-level routines are in place. The code is
> written for older
> 0.9.x version of ALSA (as I didn't yet port it to latest CVS).
>
>   If anybody is interested in helping with this project, I would gladly
> share my (partially
> functional) code. Code is tested with EWS64XL (PnP detection of SAM9407,
> i2c stuff
> and TEA chips are working OK), has many comments, and basically just
> waits for someone to
> "fill in the blanks" on PCM part.
>

I would surely be interested in this code. I think a lot of code can be shared 
between the cards. The transfer mechanism of the ISIS different, but I think 
it can fit into a general approach i.e. a generic driver for the SAM970x chip 
supported by an 'architecture dependant' driver. 
The isis uses the maestro as a PCI to ISA bride and transfers from/to the chip 
should be done like this: 
(disassembled source at http:/isisalsa.sourceforge.net/assembler.htm)

registers involved:
MAESTRO_BASE + 44h: address of the ISA port (IDMA in ESS terminology) on the 
maestro.
MAESTRO_BASE + 46h: data register for the ISA port

so basically transfers come down to this: (disassembled from win drivers)
        mov ax, 1               ; address 0x01 is the SAM control port
        mov dx, MAESTRO_BASE
        add dx, 44h
        out dx, ax              ; select control port
        mov dx, MAESTRO_BASE
        add dx, 46h      ; switch to data register
        in ax, dx               ; read value

        by the way: does anyone know why they don't do it like this:
                mov ax, 1               ; address 0x01 is the SAM control port
                mov dx, MAESTRO_BASE
                add dx, 44h
                out dx, ax              ; select control port
                add dx, 02h      ; switch to data register
                in ax, dx               ; read value
        compiler issue?

        to illustrate this even further, consider this piece of code also 
disassembled from the win driver:
        looppoint1:           
                mov     dx, 1
                push    dx
                mov     ax, dx
                mov     dx, MAESTRO_BASE
                add     dx, 44h                 ; Add
                out     dx, ax                  ; control port
                mov     dx, MAESTRO_BASE
                add     dx, 46h                 ; Add
                in      ax, dx                  ; read port
                and     ax, 0FFh                ; keep lower 8 bits
*               push    ax
*               mov     ax, 2
*               mov     dx, MAESTRO_BASE
*               add     dx, 44h         ; Add
*               out     dx, ax                  ; DATA16 port
*               pop     ax
                pop     dx
                test    al, 80h                 ; is TE=0 ?
                jz      short read_word         ; TE = 1 => data present
                loop    looppoint1              ; Loop while CX != 0

        I marked the strange part of the code with an asterix. Isn't this pure 
overhead?

that aside, let's get back to the main issue...
The actual PCM data transfer is done with a 'repsw outw' command as sayd by 
Uros. Something like:
                mov     dx, 2
                mov     dx, MAESTRO_BASE
                add     dx, 44h                 ; Add
                out     dx, ax                  ; DATA16 port
                mov     dx, MAESTRO_BASE
                add     dx, 46h                 ; Add
                repsw outw ... (forgot syntax)

I wondered if it isn't possible to use the Maestro DMA capability to transfer 
the large chunks from main memory to the ISA/IDMA port independant from CPU? 
Do we have any information on this 'DSP modem' or IDMA port on the Maestro 
family? (I assume that ESS hasn't changed that much between Maestro 
generations)


Pieter

PS: I have the sourcecode of the Hoontech ST128 windows drivers (both 9x and 
WDM). If you want them, you can download them at 
http://isisalsa.sourceforge.net. These cards are based on SAM940x chips.

PPS: What do you think of the statement that this type of transfer isn't 
supported in WinXP/NT due to the HAL that OS uses? This is the justification 
of Guillemot not to provide WinXP drivers.



-------------------------------------------------------
This SF.NET email is sponsored by: Thawte.com
Understand how to protect your customers personal information by implementing
SSL on your Apache Web Server. Click here to get our FREE Thawte Apache 
Guide: http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0029en
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to