xref: /minix/minix/include/minix/audio_fw.h (revision 83133719)
1 #ifndef AUDIO_FW_H
2 #define AUDIO_FW_H
3 
4 #include <minix/drivers.h>
5 #include <minix/chardriver.h>
6 #include <sys/ioc_sound.h>
7 
8 
9 int drv_init(void);
10 int drv_init_hw(void);
11 int drv_reset(void);
12 int drv_start(int sub_dev, int DmaMode);
13 int drv_stop(int sub_dev);
14 int drv_set_dma(u32_t dma, u32_t length, int chan);
15 int drv_reenable_int(int chan);
16 int drv_int_sum(void);
17 int drv_int(int sub_dev);
18 int drv_pause(int chan);
19 int drv_resume(int chan);
20 int drv_io_ctl(unsigned long request, void * val, int * len, int sub_dev);
21 int drv_get_irq(char *irq);
22 int drv_get_frag_size(u32_t *frag_size, int sub_dev);
23 
24 
25 
26 /* runtime status fields */
27 typedef struct {
28 	int readable;
29 	int writable;
30 	int DmaSize;
31 	int NrOfDmaFragments;
32 	int MinFragmentSize;
33 	int NrOfExtraBuffers;
34 	int Nr;                                   /* sub device number */
35 	int Opened;                               /* sub device opened */
36 	int DmaBusy;                              /* is dma busy? */
37 	int DmaMode;                              /* DEV_WRITE / DEV_READ */
38 	int DmaReadNext;                          /* current dma buffer */
39 	int DmaFillNext;                          /* next dma buffer to fill */
40 	int DmaLength;
41 	int BufReadNext;                          /* start of extra circular buffer */
42 	int BufFillNext;                          /* end of extra circular buffer */
43 	int BufLength;
44 	int RevivePending;                        /* process waiting for this dev? */
45 	endpoint_t ReviveProcNr;                  /* the process to unblock */
46 	cdev_id_t ReviveId;                       /* request ID */
47 	cp_grant_id_t ReviveGrant;		  /* grant id associated with io */
48 	endpoint_t SourceProcNr;                  /* process to send notify to (FS) */
49 	u32_t FragSize;                           /* dma fragment size */
50 	char *DmaBuf;        /* the dma buffer; extra space for
51 												  page alignment */
52 	phys_bytes DmaPhys;                       /* physical address of dma buffer */
53 	char* DmaPtr;                             /* pointer to aligned dma buffer */
54 	int OutOfData;                            /* all buffers empty? */
55 	char *ExtraBuf;                           /* don't use extra buffer;just
56 											   declare a pointer to supress
57 											   error messages */
58 } sub_dev_t;
59 
60 typedef struct {
61 	int minor_dev_nr;
62 	int read_chan;
63 	int write_chan;
64 	int io_ctl;
65 } special_file_t;
66 
67 typedef struct {
68 	char* DriverName;
69 	int NrOfSubDevices;
70 	int NrOfSpecialFiles;
71 } drv_t;
72 
73 EXTERN drv_t drv;
74 EXTERN sub_dev_t sub_dev[];
75 EXTERN special_file_t special_file[];
76 
77 /* Number of bytes you can DMA before hitting a 64K boundary: */
78 #define dma_bytes_left(phys)    \
79    ((unsigned) (sizeof(int) == 2 ? 0 : 0x10000) - (unsigned) ((phys) & 0xFFFF))
80 
81 #define NO_CHANNEL -1
82 
83 #define NO_DMA 0
84 #define READ_DMA 1
85 #define WRITE_DMA 2
86 
87 #endif /* AUDIO_FW_H */
88