DMA Services
------------

A struct is used to pass info back/forth with the DMA alloc funcs.
This was created to make it possible to pass back more info and because QLIB
will someday support VDS which will need this struct too.

The struct is as follows:

struct dma_s {
  dword siz;
  dword off;
  word sel;
  word id;
  dword phys;
  word dmach;
};  

dma_alloc64(struct dma_s *)
dma_alloc128(struct dma_s *)
----------------------------

In:  
  - set 'siz' to the size of the buffer you need (in bytes)
  - set 'dmach' to what ever channel the buffer will be used for
  - Ignore all other fields

Out:
  if successful:
    - 'phys' will hold the physical address of the buffer
    - returns (0)

  if failed:
    - returns (-1)

Note:
  dma_alloc64 will alloc a memory block upto 64K in size and this buffer
    will not cross a 64K memory boundry as needed by the DMA controller.
  dma_alloc128 will do the same except for you can as much as 128K and
    is will not cross a 128K memory boundry

dma_free(struct dma_s *)
------------------------
In:
  - same fields as were returned by dma_alloc64/128

Out:
  if sucessful:
    returns (0)

  if failed:
    returns (-1)

Notes:
Although currently QLIB's DMA alloc funcs do not use 'dmach' I suggest
you use them so that when QLIB does support VDS you will not need to
modify your code.


