Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / minix / audio_fw.h @ 13

History | View | Annotate | Download (2.89 KB)

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
EXTERN int sef_cb_lu_prepare(int state);
88
EXTERN int sef_cb_lu_state_isvalid(int state, int flags);
89
EXTERN void sef_cb_lu_state_dump(int state);
90

    
91
#endif /* AUDIO_FW_H */