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