1 #ifndef CY82C693_H 2 #define CY82C693_H 3 4 #include <linux/config.h> 5 #include <linux/pci.h> 6 #include <linux/ide.h> 7 8 /* the current version */ 9 #define CY82_VERSION "CY82C693U driver v0.34 99-13-12 Andreas S. Krebs (akrebs@altavista.net)" 10 11 /* 12 * The following are used to debug the driver. 13 */ 14 #define CY82C693_DEBUG_LOGS 0 15 #define CY82C693_DEBUG_INFO 0 16 17 /* define CY82C693_SETDMA_CLOCK to set DMA Controller Clock Speed to ATCLK */ 18 #undef CY82C693_SETDMA_CLOCK 19 20 /* 21 * NOTE: the value for busmaster timeout is tricky and I got it by 22 * trial and error! By using a to low value will cause DMA timeouts 23 * and drop IDE performance, and by using a to high value will cause 24 * audio playback to scatter. 25 * If you know a better value or how to calc it, please let me know. 26 */ 27 28 /* twice the value written in cy82c693ub datasheet */ 29 #define BUSMASTER_TIMEOUT 0x50 30 /* 31 * the value above was tested on my machine and it seems to work okay 32 */ 33 34 /* here are the offset definitions for the registers */ 35 #define CY82_IDE_CMDREG 0x04 36 #define CY82_IDE_ADDRSETUP 0x48 37 #define CY82_IDE_MASTER_IOR 0x4C 38 #define CY82_IDE_MASTER_IOW 0x4D 39 #define CY82_IDE_SLAVE_IOR 0x4E 40 #define CY82_IDE_SLAVE_IOW 0x4F 41 #define CY82_IDE_MASTER_8BIT 0x50 42 #define CY82_IDE_SLAVE_8BIT 0x51 43 44 #define CY82_INDEX_PORT 0x22 45 #define CY82_DATA_PORT 0x23 46 47 #define CY82_INDEX_CTRLREG1 0x01 48 #define CY82_INDEX_CHANNEL0 0x30 49 #define CY82_INDEX_CHANNEL1 0x31 50 #define CY82_INDEX_TIMEOUT 0x32 51 52 /* the max PIO mode - from datasheet */ 53 #define CY82C693_MAX_PIO 4 54 55 /* the min and max PCI bus speed in MHz - from datasheet */ 56 #define CY82C963_MIN_BUS_SPEED 25 57 #define CY82C963_MAX_BUS_SPEED 33 58 59 /* the struct for the PIO mode timings */ 60 typedef struct pio_clocks_s { 61 u8 address_time; /* Address setup (clocks) */ 62 u8 time_16r; /* clocks for 16bit IOR (0xF0=Active/data, 0x0F=Recovery) */ 63 u8 time_16w; /* clocks for 16bit IOW (0xF0=Active/data, 0x0F=Recovery) */ 64 u8 time_8; /* clocks for 8bit (0xF0=Active/data, 0x0F=Recovery) */ 65 } pio_clocks_t; 66 67 static unsigned int init_chipset_cy82c693(struct pci_dev *, const char *); 68 static void init_hwif_cy82c693(ide_hwif_t *); 69 static void init_iops_cy82c693(ide_hwif_t *); 70 71 static ide_pci_device_t cy82c693_chipsets[] __devinitdata = { 72 { /* 0 */ 73 .vendor = PCI_VENDOR_ID_CONTAQ, 74 .device = PCI_DEVICE_ID_CONTAQ_82C693, 75 .name = "CY82C693", 76 .init_chipset = init_chipset_cy82c693, 77 .init_iops = init_iops_cy82c693, 78 .init_hwif = init_hwif_cy82c693, 79 .init_dma = NULL, 80 .channels = 1, 81 .autodma = AUTODMA, 82 .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 83 .bootable = ON_BOARD, 84 .extra = 0, 85 },{ 86 .vendor = 0, 87 .device = 0, 88 .channels = 0, 89 .bootable = EOL, 90 } 91 }; 92 93 #endif /* CY82C693_H */ 94