xref: /haiku/src/add-ons/kernel/drivers/midi/mpu401/mpu401_priv.h (revision 344ded80d400028c8f561b4b876257b94c12db4a)
1 /*
2 * Copyright 2003-2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * A module driver for the generic mpu401 midi interface.
6 *
7 * Author:
8 *		Greg Crain (gsc70@comcast.net)
9 *
10 * mpu401_priv.h
11 */
12 
13 #ifndef mpu401_priv_H
14 #define mpu401_priv_H
15 
16 #include <module.h>
17 #include <PCI.h>
18 
19 /*--------------------------------*/
20 /* UART Definitions               */
21 
22 #define MPU401_RESET    0xff
23 #define MPU401_UART     0x3f
24 #define MPU401_CMDOK    0xfe
25 #define MPU401_OK2WR    0x40
26 #define MPU401_OK2RD    0x80
27 // Typically,
28 //  UART data port = addr
29 //  UART cmd port = addr +1
30 #define UARTDATA		0
31 #define UARTCMD			1
32 
33 #define MBUF_ELEMENTS    1000  //Input buffer size
34 
35 /*--------------------------------*/
36 /* Private definitions            */
37 
38 typedef struct _mpu401device {
39 	unsigned int addrport;
40 	unsigned int  workarounds;
41 	int32 count;
42 	bool V2;
43 	sem_id readsemaphore;
44 	sem_id writesemaphore;
45 	void (*interrupt_op)(int32 op, void * card);
46 	void *card;
47 } mpu401device;
48 
49 int mbuf_current;
50 int mbuf_start;
51 int mbuf_bytes;
52 unsigned char mpubuffer[MBUF_ELEMENTS];
53 static int open_count;
54 static isa_module_info *gISA;
55 static pci_module_info *gPCI;
56 
57 
58 /*--------------------------------*/
59 /* Function prototypes            */
60 
61 unsigned char Read_MPU401(unsigned int, const char, unsigned int);
62 status_t Write_MPU401(unsigned int, const char, unsigned int, uchar);
63 
64 cpu_status lock(void);
65 void unlock (cpu_status);
66 
67 /********************/
68 /*   Workarounds    */
69 /********************/
70 // This is a list of workarounds in order to
71 // get a specific manufacturer, card vendor, or UART type
72 // to work nicely with the generic module.
73 // The defined workaround value must match the value that
74 // is used in the driver 'create_device' call.
75 
76 
77 /****************************/
78 /* Creative Audigy, Audigy2 */
79 /****************************/
80 /* 0x11020004   Gameport Midi connector       */
81 /* 0x11020005   LiveDrive Expansion connector */
82 /* IN the create_device hook, use the PCI base*/
83 /* address, instead of midi address port      */
84 #define PTR_ADDRESS_MASK 0x0fff0000
85 #define D_DATA 0x04
86 #define D_PTR  0x00
87 #define I_MPU1 0x70
88 #define I_MPU2 0x72
89 
90 
91 #endif // mpu401_priv_H
92 
93