diff options
Diffstat (limited to 'include/linux/ide.h')
-rw-r--r-- | include/linux/ide.h | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h index 1e4409937ec3..27cb39de2ae2 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -107,7 +107,6 @@ typedef unsigned char byte; /* used everywhere */ | |||
107 | #define BAD_W_STAT (BAD_R_STAT | WRERR_STAT) | 107 | #define BAD_W_STAT (BAD_R_STAT | WRERR_STAT) |
108 | #define BAD_STAT (BAD_R_STAT | DRQ_STAT) | 108 | #define BAD_STAT (BAD_R_STAT | DRQ_STAT) |
109 | #define DRIVE_READY (READY_STAT | SEEK_STAT) | 109 | #define DRIVE_READY (READY_STAT | SEEK_STAT) |
110 | #define DATA_READY (DRQ_STAT) | ||
111 | 110 | ||
112 | #define BAD_CRC (ABRT_ERR | ICRC_ERR) | 111 | #define BAD_CRC (ABRT_ERR | ICRC_ERR) |
113 | 112 | ||
@@ -198,8 +197,11 @@ typedef struct hw_regs_s { | |||
198 | } hw_regs_t; | 197 | } hw_regs_t; |
199 | 198 | ||
200 | struct hwif_s * ide_find_port(unsigned long); | 199 | struct hwif_s * ide_find_port(unsigned long); |
200 | void ide_init_port_data(struct hwif_s *, unsigned int); | ||
201 | void ide_init_port_hw(struct hwif_s *, hw_regs_t *); | ||
201 | 202 | ||
202 | int ide_register_hw(hw_regs_t *, void (*)(struct hwif_s *), int, | 203 | struct ide_drive_s; |
204 | int ide_register_hw(hw_regs_t *, void (*)(struct ide_drive_s *), | ||
203 | struct hwif_s **); | 205 | struct hwif_s **); |
204 | 206 | ||
205 | void ide_setup_ports( hw_regs_t *hw, | 207 | void ide_setup_ports( hw_regs_t *hw, |
@@ -391,7 +393,6 @@ typedef struct ide_drive_s { | |||
391 | u8 state; /* retry state */ | 393 | u8 state; /* retry state */ |
392 | u8 waiting_for_dma; /* dma currently in progress */ | 394 | u8 waiting_for_dma; /* dma currently in progress */ |
393 | u8 unmask; /* okay to unmask other irqs */ | 395 | u8 unmask; /* okay to unmask other irqs */ |
394 | u8 bswap; /* byte swap data */ | ||
395 | u8 noflush; /* don't attempt flushes */ | 396 | u8 noflush; /* don't attempt flushes */ |
396 | u8 dsc_overlap; /* DSC overlap */ | 397 | u8 dsc_overlap; /* DSC overlap */ |
397 | u8 nice1; /* give potential excess bandwidth */ | 398 | u8 nice1; /* give potential excess bandwidth */ |
@@ -527,31 +528,26 @@ typedef struct hwif_s { | |||
527 | /* special host masking for drive selection */ | 528 | /* special host masking for drive selection */ |
528 | void (*maskproc)(ide_drive_t *, int); | 529 | void (*maskproc)(ide_drive_t *, int); |
529 | /* check host's drive quirk list */ | 530 | /* check host's drive quirk list */ |
530 | int (*quirkproc)(ide_drive_t *); | 531 | void (*quirkproc)(ide_drive_t *); |
531 | /* driver soft-power interface */ | 532 | /* driver soft-power interface */ |
532 | int (*busproc)(ide_drive_t *, int); | 533 | int (*busproc)(ide_drive_t *, int); |
533 | #endif | 534 | #endif |
534 | u8 (*mdma_filter)(ide_drive_t *); | 535 | u8 (*mdma_filter)(ide_drive_t *); |
535 | u8 (*udma_filter)(ide_drive_t *); | 536 | u8 (*udma_filter)(ide_drive_t *); |
536 | 537 | ||
537 | void (*fixup)(struct hwif_s *); | ||
538 | |||
539 | void (*ata_input_data)(ide_drive_t *, void *, u32); | 538 | void (*ata_input_data)(ide_drive_t *, void *, u32); |
540 | void (*ata_output_data)(ide_drive_t *, void *, u32); | 539 | void (*ata_output_data)(ide_drive_t *, void *, u32); |
541 | 540 | ||
542 | void (*atapi_input_bytes)(ide_drive_t *, void *, u32); | 541 | void (*atapi_input_bytes)(ide_drive_t *, void *, u32); |
543 | void (*atapi_output_bytes)(ide_drive_t *, void *, u32); | 542 | void (*atapi_output_bytes)(ide_drive_t *, void *, u32); |
544 | 543 | ||
544 | void (*dma_host_set)(ide_drive_t *, int); | ||
545 | int (*dma_setup)(ide_drive_t *); | 545 | int (*dma_setup)(ide_drive_t *); |
546 | void (*dma_exec_cmd)(ide_drive_t *, u8); | 546 | void (*dma_exec_cmd)(ide_drive_t *, u8); |
547 | void (*dma_start)(ide_drive_t *); | 547 | void (*dma_start)(ide_drive_t *); |
548 | int (*ide_dma_end)(ide_drive_t *drive); | 548 | int (*ide_dma_end)(ide_drive_t *drive); |
549 | int (*ide_dma_on)(ide_drive_t *drive); | ||
550 | void (*dma_off_quietly)(ide_drive_t *drive); | ||
551 | int (*ide_dma_test_irq)(ide_drive_t *drive); | 549 | int (*ide_dma_test_irq)(ide_drive_t *drive); |
552 | void (*ide_dma_clear_irq)(ide_drive_t *drive); | 550 | void (*ide_dma_clear_irq)(ide_drive_t *drive); |
553 | void (*dma_host_on)(ide_drive_t *drive); | ||
554 | void (*dma_host_off)(ide_drive_t *drive); | ||
555 | void (*dma_lost_irq)(ide_drive_t *drive); | 551 | void (*dma_lost_irq)(ide_drive_t *drive); |
556 | void (*dma_timeout)(ide_drive_t *drive); | 552 | void (*dma_timeout)(ide_drive_t *drive); |
557 | 553 | ||
@@ -874,14 +870,6 @@ extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t); | |||
874 | 870 | ||
875 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); | 871 | extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); |
876 | 872 | ||
877 | /* | ||
878 | * Issue ATA command and wait for completion. | ||
879 | * Use for implementing commands in kernel | ||
880 | * | ||
881 | * (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, u8 *buf) | ||
882 | */ | ||
883 | extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *); | ||
884 | |||
885 | enum { | 873 | enum { |
886 | IDE_TFLAG_LBA48 = (1 << 0), | 874 | IDE_TFLAG_LBA48 = (1 << 0), |
887 | IDE_TFLAG_NO_SELECT_MASK = (1 << 1), | 875 | IDE_TFLAG_NO_SELECT_MASK = (1 << 1), |
@@ -934,6 +922,14 @@ enum { | |||
934 | IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | | 922 | IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | |
935 | IDE_TFLAG_IN_LBA, | 923 | IDE_TFLAG_IN_LBA, |
936 | IDE_TFLAG_IN_DEVICE = (1 << 29), | 924 | IDE_TFLAG_IN_DEVICE = (1 << 29), |
925 | IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB | | ||
926 | IDE_TFLAG_IN_HOB, | ||
927 | IDE_TFLAG_TF = IDE_TFLAG_OUT_TF | | ||
928 | IDE_TFLAG_IN_TF, | ||
929 | IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE | | ||
930 | IDE_TFLAG_IN_DEVICE, | ||
931 | /* force 16-bit I/O operations */ | ||
932 | IDE_TFLAG_IO_16BIT = (1 << 30), | ||
937 | }; | 933 | }; |
938 | 934 | ||
939 | struct ide_taskfile { | 935 | struct ide_taskfile { |
@@ -988,6 +984,10 @@ void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); | |||
988 | 984 | ||
989 | ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); | 985 | ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); |
990 | 986 | ||
987 | void task_end_request(ide_drive_t *, struct request *, u8); | ||
988 | |||
989 | u8 wait_drive_not_busy(ide_drive_t *); | ||
990 | |||
991 | int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *, u16); | 991 | int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *, u16); |
992 | int ide_no_data_taskfile(ide_drive_t *, ide_task_t *); | 992 | int ide_no_data_taskfile(ide_drive_t *, ide_task_t *); |
993 | 993 | ||
@@ -1015,10 +1015,9 @@ extern void do_ide_request(struct request_queue *); | |||
1015 | 1015 | ||
1016 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1016 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
1017 | 1017 | ||
1018 | extern int ideprobe_init(void); | ||
1019 | |||
1020 | #ifdef CONFIG_IDEPCI_PCIBUS_ORDER | 1018 | #ifdef CONFIG_IDEPCI_PCIBUS_ORDER |
1021 | extern void ide_scan_pcibus(int scan_direction) __init; | 1019 | extern int ide_scan_direction; |
1020 | int __init ide_scan_pcibus(void); | ||
1022 | extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner, const char *mod_name); | 1021 | extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner, const char *mod_name); |
1023 | #define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE, KBUILD_MODNAME) | 1022 | #define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE, KBUILD_MODNAME) |
1024 | #else | 1023 | #else |
@@ -1095,6 +1094,8 @@ enum { | |||
1095 | /* unmask IRQs */ | 1094 | /* unmask IRQs */ |
1096 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | 1095 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), |
1097 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), | 1096 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), |
1097 | /* host is CY82C693 */ | ||
1098 | IDE_HFLAG_CY82C693 = (1 << 27), | ||
1098 | }; | 1099 | }; |
1099 | 1100 | ||
1100 | #ifdef CONFIG_BLK_DEV_OFFBOARD | 1101 | #ifdef CONFIG_BLK_DEV_OFFBOARD |
@@ -1109,7 +1110,6 @@ struct ide_port_info { | |||
1109 | void (*init_iops)(ide_hwif_t *); | 1110 | void (*init_iops)(ide_hwif_t *); |
1110 | void (*init_hwif)(ide_hwif_t *); | 1111 | void (*init_hwif)(ide_hwif_t *); |
1111 | void (*init_dma)(ide_hwif_t *, unsigned long); | 1112 | void (*init_dma)(ide_hwif_t *, unsigned long); |
1112 | void (*fixup)(ide_hwif_t *); | ||
1113 | ide_pci_enablebit_t enablebits[2]; | 1113 | ide_pci_enablebit_t enablebits[2]; |
1114 | hwif_chipset_t chipset; | 1114 | hwif_chipset_t chipset; |
1115 | u8 extra; | 1115 | u8 extra; |
@@ -1147,7 +1147,9 @@ static inline u8 ide_max_dma_mode(ide_drive_t *drive) | |||
1147 | return ide_find_dma_mode(drive, XFER_UDMA_6); | 1147 | return ide_find_dma_mode(drive, XFER_UDMA_6); |
1148 | } | 1148 | } |
1149 | 1149 | ||
1150 | void ide_dma_off_quietly(ide_drive_t *); | ||
1150 | void ide_dma_off(ide_drive_t *); | 1151 | void ide_dma_off(ide_drive_t *); |
1152 | void ide_dma_on(ide_drive_t *); | ||
1151 | int ide_set_dma(ide_drive_t *); | 1153 | int ide_set_dma(ide_drive_t *); |
1152 | ide_startstop_t ide_dma_intr(ide_drive_t *); | 1154 | ide_startstop_t ide_dma_intr(ide_drive_t *); |
1153 | 1155 | ||
@@ -1158,10 +1160,7 @@ extern void ide_destroy_dmatable(ide_drive_t *); | |||
1158 | extern int ide_release_dma(ide_hwif_t *); | 1160 | extern int ide_release_dma(ide_hwif_t *); |
1159 | extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int); | 1161 | extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int); |
1160 | 1162 | ||
1161 | void ide_dma_host_off(ide_drive_t *); | 1163 | void ide_dma_host_set(ide_drive_t *, int); |
1162 | void ide_dma_off_quietly(ide_drive_t *); | ||
1163 | void ide_dma_host_on(ide_drive_t *); | ||
1164 | extern int __ide_dma_on(ide_drive_t *); | ||
1165 | extern int ide_dma_setup(ide_drive_t *); | 1164 | extern int ide_dma_setup(ide_drive_t *); |
1166 | extern void ide_dma_start(ide_drive_t *); | 1165 | extern void ide_dma_start(ide_drive_t *); |
1167 | extern int __ide_dma_end(ide_drive_t *); | 1166 | extern int __ide_dma_end(ide_drive_t *); |
@@ -1173,7 +1172,9 @@ extern void ide_dma_timeout(ide_drive_t *); | |||
1173 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } | 1172 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } |
1174 | static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } | 1173 | static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } |
1175 | static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } | 1174 | static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } |
1175 | static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; } | ||
1176 | static inline void ide_dma_off(ide_drive_t *drive) { ; } | 1176 | static inline void ide_dma_off(ide_drive_t *drive) { ; } |
1177 | static inline void ide_dma_on(ide_drive_t *drive) { ; } | ||
1177 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } | 1178 | static inline void ide_dma_verbose(ide_drive_t *drive) { ; } |
1178 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } | 1179 | static inline int ide_set_dma(ide_drive_t *drive) { return 1; } |
1179 | #endif /* CONFIG_BLK_DEV_IDEDMA */ | 1180 | #endif /* CONFIG_BLK_DEV_IDEDMA */ |
@@ -1203,8 +1204,9 @@ extern void ide_unregister (unsigned int index); | |||
1203 | void ide_register_region(struct gendisk *); | 1204 | void ide_register_region(struct gendisk *); |
1204 | void ide_unregister_region(struct gendisk *); | 1205 | void ide_unregister_region(struct gendisk *); |
1205 | 1206 | ||
1206 | void ide_undecoded_slave(ide_hwif_t *); | 1207 | void ide_undecoded_slave(ide_drive_t *); |
1207 | 1208 | ||
1209 | int ide_device_add_all(u8 *idx); | ||
1208 | int ide_device_add(u8 idx[4]); | 1210 | int ide_device_add(u8 idx[4]); |
1209 | 1211 | ||
1210 | static inline void *ide_get_hwifdata (ide_hwif_t * hwif) | 1212 | static inline void *ide_get_hwifdata (ide_hwif_t * hwif) |
@@ -1302,4 +1304,9 @@ static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive) | |||
1302 | return &hwif->drives[(drive->dn ^ 1) & 1]; | 1304 | return &hwif->drives[(drive->dn ^ 1) & 1]; |
1303 | } | 1305 | } |
1304 | 1306 | ||
1307 | static inline void ide_set_irq(ide_drive_t *drive, int on) | ||
1308 | { | ||
1309 | drive->hwif->OUTB(drive->ctl | (on ? 0 : 2), IDE_CONTROL_REG); | ||
1310 | } | ||
1311 | |||
1305 | #endif /* _IDE_H */ | 1312 | #endif /* _IDE_H */ |