diff options
Diffstat (limited to 'include/linux/ide.h')
| -rw-r--r-- | include/linux/ide.h | 125 | 
1 files changed, 57 insertions, 68 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h index 9fed365a598b..edc93a6d931d 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h  | |||
| @@ -26,6 +26,9 @@ | |||
| 26 | #include <asm/io.h> | 26 | #include <asm/io.h> | 
| 27 | #include <asm/mutex.h> | 27 | #include <asm/mutex.h> | 
| 28 | 28 | ||
| 29 | /* for request_sense */ | ||
| 30 | #include <linux/cdrom.h> | ||
| 31 | |||
| 29 | #if defined(CONFIG_CRIS) || defined(CONFIG_FRV) || defined(CONFIG_MN10300) | 32 | #if defined(CONFIG_CRIS) || defined(CONFIG_FRV) || defined(CONFIG_MN10300) | 
| 30 | # define SUPPORT_VLB_SYNC 0 | 33 | # define SUPPORT_VLB_SYNC 0 | 
| 31 | #else | 34 | #else | 
| @@ -154,12 +157,6 @@ enum { | |||
| 154 | #define REQ_UNPARK_HEADS 0x23 | 157 | #define REQ_UNPARK_HEADS 0x23 | 
| 155 | 158 | ||
| 156 | /* | 159 | /* | 
| 157 | * Check for an interrupt and acknowledge the interrupt status | ||
| 158 | */ | ||
| 159 | struct hwif_s; | ||
| 160 | typedef int (ide_ack_intr_t)(struct hwif_s *); | ||
| 161 | |||
| 162 | /* | ||
| 163 | * hwif_chipset_t is used to keep track of the specific hardware | 160 | * hwif_chipset_t is used to keep track of the specific hardware | 
| 164 | * chipset used by each IDE interface, if known. | 161 | * chipset used by each IDE interface, if known. | 
| 165 | */ | 162 | */ | 
| @@ -175,20 +172,18 @@ typedef u8 hwif_chipset_t; | |||
| 175 | /* | 172 | /* | 
| 176 | * Structure to hold all information about the location of this port | 173 | * Structure to hold all information about the location of this port | 
| 177 | */ | 174 | */ | 
| 178 | typedef struct hw_regs_s { | 175 | struct ide_hw { | 
| 179 | union { | 176 | union { | 
| 180 | struct ide_io_ports io_ports; | 177 | struct ide_io_ports io_ports; | 
| 181 | unsigned long io_ports_array[IDE_NR_PORTS]; | 178 | unsigned long io_ports_array[IDE_NR_PORTS]; | 
| 182 | }; | 179 | }; | 
| 183 | 180 | ||
| 184 | int irq; /* our irq number */ | 181 | int irq; /* our irq number */ | 
| 185 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ | ||
| 186 | hwif_chipset_t chipset; | ||
| 187 | struct device *dev, *parent; | 182 | struct device *dev, *parent; | 
| 188 | unsigned long config; | 183 | unsigned long config; | 
| 189 | } hw_regs_t; | 184 | }; | 
| 190 | 185 | ||
| 191 | static inline void ide_std_init_ports(hw_regs_t *hw, | 186 | static inline void ide_std_init_ports(struct ide_hw *hw, | 
| 192 | unsigned long io_addr, | 187 | unsigned long io_addr, | 
| 193 | unsigned long ctl_addr) | 188 | unsigned long ctl_addr) | 
| 194 | { | 189 | { | 
| @@ -215,21 +210,12 @@ static inline void ide_std_init_ports(hw_regs_t *hw, | |||
| 215 | 210 | ||
| 216 | /* | 211 | /* | 
| 217 | * Special Driver Flags | 212 | * Special Driver Flags | 
| 218 | * | ||
| 219 | * set_geometry : respecify drive geometry | ||
| 220 | * recalibrate : seek to cyl 0 | ||
| 221 | * set_multmode : set multmode count | ||
| 222 | * reserved : unused | ||
| 223 | */ | 213 | */ | 
| 224 | typedef union { | 214 | enum { | 
| 225 | unsigned all : 8; | 215 | IDE_SFLAG_SET_GEOMETRY = (1 << 0), | 
| 226 | struct { | 216 | IDE_SFLAG_RECALIBRATE = (1 << 1), | 
| 227 | unsigned set_geometry : 1; | 217 | IDE_SFLAG_SET_MULTMODE = (1 << 2), | 
| 228 | unsigned recalibrate : 1; | 218 | }; | 
| 229 | unsigned set_multmode : 1; | ||
| 230 | unsigned reserved : 5; | ||
| 231 | } b; | ||
| 232 | } special_t; | ||
| 233 | 219 | ||
| 234 | /* | 220 | /* | 
| 235 | * Status returned from various ide_ functions | 221 | * Status returned from various ide_ functions | 
| @@ -324,7 +310,6 @@ struct ide_cmd { | |||
| 324 | unsigned int cursg_ofs; | 310 | unsigned int cursg_ofs; | 
| 325 | 311 | ||
| 326 | struct request *rq; /* copy of request */ | 312 | struct request *rq; /* copy of request */ | 
| 327 | void *special; /* valid_t generally */ | ||
| 328 | }; | 313 | }; | 
| 329 | 314 | ||
| 330 | /* ATAPI packet command flags */ | 315 | /* ATAPI packet command flags */ | 
| @@ -339,11 +324,6 @@ enum { | |||
| 339 | PC_FLAG_WRITING = (1 << 6), | 324 | PC_FLAG_WRITING = (1 << 6), | 
| 340 | }; | 325 | }; | 
| 341 | 326 | ||
| 342 | /* | ||
| 343 | * With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes. | ||
| 344 | * This is used for several packet commands (not for READ/WRITE commands). | ||
| 345 | */ | ||
| 346 | #define IDE_PC_BUFFER_SIZE 64 | ||
| 347 | #define ATAPI_WAIT_PC (60 * HZ) | 327 | #define ATAPI_WAIT_PC (60 * HZ) | 
| 348 | 328 | ||
| 349 | struct ide_atapi_pc { | 329 | struct ide_atapi_pc { | 
| @@ -355,16 +335,6 @@ struct ide_atapi_pc { | |||
| 355 | 335 | ||
| 356 | /* bytes to transfer */ | 336 | /* bytes to transfer */ | 
| 357 | int req_xfer; | 337 | int req_xfer; | 
| 358 | /* bytes actually transferred */ | ||
| 359 | int xferred; | ||
| 360 | |||
| 361 | /* data buffer */ | ||
| 362 | u8 *buf; | ||
| 363 | /* current buffer position */ | ||
| 364 | u8 *cur_pos; | ||
| 365 | int buf_size; | ||
| 366 | /* missing/available data on the current buffer */ | ||
| 367 | int b_count; | ||
| 368 | 338 | ||
| 369 | /* the corresponding request */ | 339 | /* the corresponding request */ | 
| 370 | struct request *rq; | 340 | struct request *rq; | 
| @@ -375,12 +345,6 @@ struct ide_atapi_pc { | |||
| 375 | * those are more or less driver-specific and some of them are subject | 345 | * those are more or less driver-specific and some of them are subject | 
| 376 | * to change/removal later. | 346 | * to change/removal later. | 
| 377 | */ | 347 | */ | 
| 378 | u8 pc_buf[IDE_PC_BUFFER_SIZE]; | ||
| 379 | |||
| 380 | /* idetape only */ | ||
| 381 | struct idetape_bh *bh; | ||
| 382 | char *b_data; | ||
| 383 | |||
| 384 | unsigned long timeout; | 348 | unsigned long timeout; | 
| 385 | }; | 349 | }; | 
| 386 | 350 | ||
| @@ -397,6 +361,7 @@ struct ide_drive_s; | |||
| 397 | struct ide_disk_ops { | 361 | struct ide_disk_ops { | 
| 398 | int (*check)(struct ide_drive_s *, const char *); | 362 | int (*check)(struct ide_drive_s *, const char *); | 
| 399 | int (*get_capacity)(struct ide_drive_s *); | 363 | int (*get_capacity)(struct ide_drive_s *); | 
| 364 | u64 (*set_capacity)(struct ide_drive_s *, u64); | ||
| 400 | void (*setup)(struct ide_drive_s *); | 365 | void (*setup)(struct ide_drive_s *); | 
| 401 | void (*flush)(struct ide_drive_s *); | 366 | void (*flush)(struct ide_drive_s *); | 
| 402 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 367 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 
| @@ -474,6 +439,8 @@ enum { | |||
| 474 | IDE_DFLAG_NICE1 = (1 << 5), | 439 | IDE_DFLAG_NICE1 = (1 << 5), | 
| 475 | /* device is physically present */ | 440 | /* device is physically present */ | 
| 476 | IDE_DFLAG_PRESENT = (1 << 6), | 441 | IDE_DFLAG_PRESENT = (1 << 6), | 
| 442 | /* disable Host Protected Area */ | ||
| 443 | IDE_DFLAG_NOHPA = (1 << 7), | ||
| 477 | /* id read from device (synthetic if not set) */ | 444 | /* id read from device (synthetic if not set) */ | 
| 478 | IDE_DFLAG_ID_READ = (1 << 8), | 445 | IDE_DFLAG_ID_READ = (1 << 8), | 
| 479 | IDE_DFLAG_NOPROBE = (1 << 9), | 446 | IDE_DFLAG_NOPROBE = (1 << 9), | 
| @@ -512,6 +479,7 @@ enum { | |||
| 512 | /* write protect */ | 479 | /* write protect */ | 
| 513 | IDE_DFLAG_WP = (1 << 29), | 480 | IDE_DFLAG_WP = (1 << 29), | 
| 514 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), | 481 | IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 30), | 
| 482 | IDE_DFLAG_NIEN_QUIRK = (1 << 31), | ||
| 515 | }; | 483 | }; | 
| 516 | 484 | ||
| 517 | struct ide_drive_s { | 485 | struct ide_drive_s { | 
| @@ -536,14 +504,13 @@ struct ide_drive_s { | |||
| 536 | unsigned long sleep; /* sleep until this time */ | 504 | unsigned long sleep; /* sleep until this time */ | 
| 537 | unsigned long timeout; /* max time to wait for irq */ | 505 | unsigned long timeout; /* max time to wait for irq */ | 
| 538 | 506 | ||
| 539 | special_t special; /* special action flags */ | 507 | u8 special_flags; /* special action flags */ | 
| 540 | 508 | ||
| 541 | u8 select; /* basic drive/head select reg value */ | 509 | u8 select; /* basic drive/head select reg value */ | 
| 542 | u8 retry_pio; /* retrying dma capable host in pio */ | 510 | u8 retry_pio; /* retrying dma capable host in pio */ | 
| 543 | u8 waiting_for_dma; /* dma currently in progress */ | 511 | u8 waiting_for_dma; /* dma currently in progress */ | 
| 544 | u8 dma; /* atapi dma flag */ | 512 | u8 dma; /* atapi dma flag */ | 
| 545 | 513 | ||
| 546 | u8 quirk_list; /* considered quirky, set for a specific host */ | ||
| 547 | u8 init_speed; /* transfer rate set at boot */ | 514 | u8 init_speed; /* transfer rate set at boot */ | 
| 548 | u8 current_speed; /* current transfer rate set */ | 515 | u8 current_speed; /* current transfer rate set */ | 
| 549 | u8 desired_speed; /* desired transfer rate set */ | 516 | u8 desired_speed; /* desired transfer rate set */ | 
| @@ -565,11 +532,10 @@ struct ide_drive_s { | |||
| 565 | 532 | ||
| 566 | unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ | 533 | unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ | 
| 567 | unsigned int cyl; /* "real" number of cyls */ | 534 | unsigned int cyl; /* "real" number of cyls */ | 
| 568 | unsigned int drive_data; /* used by set_pio_mode/dev_select() */ | 535 | void *drive_data; /* used by set_pio_mode/dev_select() */ | 
| 569 | unsigned int failures; /* current failure count */ | 536 | unsigned int failures; /* current failure count */ | 
| 570 | unsigned int max_failures; /* maximum allowed failure count */ | 537 | unsigned int max_failures; /* maximum allowed failure count */ | 
| 571 | u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ | 538 | u64 probed_capacity;/* initial/native media capacity */ | 
| 572 | |||
| 573 | u64 capacity64; /* total number of sectors */ | 539 | u64 capacity64; /* total number of sectors */ | 
| 574 | 540 | ||
| 575 | int lun; /* logical unit */ | 541 | int lun; /* logical unit */ | 
| @@ -593,16 +559,16 @@ struct ide_drive_s { | |||
| 593 | /* callback for packet commands */ | 559 | /* callback for packet commands */ | 
| 594 | int (*pc_callback)(struct ide_drive_s *, int); | 560 | int (*pc_callback)(struct ide_drive_s *, int); | 
| 595 | 561 | ||
| 596 | void (*pc_update_buffers)(struct ide_drive_s *, struct ide_atapi_pc *); | ||
| 597 | int (*pc_io_buffers)(struct ide_drive_s *, struct ide_atapi_pc *, | ||
| 598 | unsigned int, int); | ||
| 599 | |||
| 600 | ide_startstop_t (*irq_handler)(struct ide_drive_s *); | 562 | ide_startstop_t (*irq_handler)(struct ide_drive_s *); | 
| 601 | 563 | ||
| 602 | unsigned long atapi_flags; | 564 | unsigned long atapi_flags; | 
| 603 | 565 | ||
| 604 | struct ide_atapi_pc request_sense_pc; | 566 | struct ide_atapi_pc request_sense_pc; | 
| 605 | struct request request_sense_rq; | 567 | |
| 568 | /* current sense rq and buffer */ | ||
| 569 | bool sense_rq_armed; | ||
| 570 | struct request sense_rq; | ||
| 571 | struct request_sense sense_data; | ||
| 606 | }; | 572 | }; | 
| 607 | 573 | ||
| 608 | typedef struct ide_drive_s ide_drive_t; | 574 | typedef struct ide_drive_s ide_drive_t; | 
| @@ -663,6 +629,7 @@ struct ide_port_ops { | |||
| 663 | void (*maskproc)(ide_drive_t *, int); | 629 | void (*maskproc)(ide_drive_t *, int); | 
| 664 | void (*quirkproc)(ide_drive_t *); | 630 | void (*quirkproc)(ide_drive_t *); | 
| 665 | void (*clear_irq)(ide_drive_t *); | 631 | void (*clear_irq)(ide_drive_t *); | 
| 632 | int (*test_irq)(struct hwif_s *); | ||
| 666 | 633 | ||
| 667 | u8 (*mdma_filter)(ide_drive_t *); | 634 | u8 (*mdma_filter)(ide_drive_t *); | 
| 668 | u8 (*udma_filter)(ide_drive_t *); | 635 | u8 (*udma_filter)(ide_drive_t *); | 
| @@ -688,6 +655,10 @@ struct ide_dma_ops { | |||
| 688 | u8 (*dma_sff_read_status)(struct hwif_s *); | 655 | u8 (*dma_sff_read_status)(struct hwif_s *); | 
| 689 | }; | 656 | }; | 
| 690 | 657 | ||
| 658 | enum { | ||
| 659 | IDE_PFLAG_PROBING = (1 << 0), | ||
| 660 | }; | ||
| 661 | |||
| 691 | struct ide_host; | 662 | struct ide_host; | 
| 692 | 663 | ||
| 693 | typedef struct hwif_s { | 664 | typedef struct hwif_s { | 
| @@ -704,6 +675,8 @@ typedef struct hwif_s { | |||
| 704 | 675 | ||
| 705 | ide_drive_t *devices[MAX_DRIVES + 1]; | 676 | ide_drive_t *devices[MAX_DRIVES + 1]; | 
| 706 | 677 | ||
| 678 | unsigned long port_flags; | ||
| 679 | |||
| 707 | u8 major; /* our major number */ | 680 | u8 major; /* our major number */ | 
| 708 | u8 index; /* 0 for ide0; 1 for ide1; ... */ | 681 | u8 index; /* 0 for ide0; 1 for ide1; ... */ | 
| 709 | u8 channel; /* for dual-port chips: 0=primary, 1=secondary */ | 682 | u8 channel; /* for dual-port chips: 0=primary, 1=secondary */ | 
| @@ -722,8 +695,6 @@ typedef struct hwif_s { | |||
| 722 | 695 | ||
| 723 | struct device *dev; | 696 | struct device *dev; | 
| 724 | 697 | ||
| 725 | ide_ack_intr_t *ack_intr; | ||
| 726 | |||
| 727 | void (*rw_disk)(ide_drive_t *, struct request *); | 698 | void (*rw_disk)(ide_drive_t *, struct request *); | 
| 728 | 699 | ||
| 729 | const struct ide_tp_ops *tp_ops; | 700 | const struct ide_tp_ops *tp_ops; | 
| @@ -1091,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l | |||
| 1091 | extern int ide_vlb_clk; | 1062 | extern int ide_vlb_clk; | 
| 1092 | extern int ide_pci_clk; | 1063 | extern int ide_pci_clk; | 
| 1093 | 1064 | ||
| 1094 | unsigned int ide_rq_bytes(struct request *); | ||
| 1095 | int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); | 1065 | int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); | 
| 1096 | void ide_kill_rq(ide_drive_t *, struct request *); | 1066 | void ide_kill_rq(ide_drive_t *, struct request *); | 
| 1097 | 1067 | ||
| @@ -1144,6 +1114,8 @@ void SELECT_MASK(ide_drive_t *, int); | |||
| 1144 | u8 ide_read_error(ide_drive_t *); | 1114 | u8 ide_read_error(ide_drive_t *); | 
| 1145 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); | 1115 | void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); | 
| 1146 | 1116 | ||
| 1117 | int ide_check_ireason(ide_drive_t *, struct request *, int, int, int); | ||
| 1118 | |||
| 1147 | int ide_check_atapi_device(ide_drive_t *, const char *); | 1119 | int ide_check_atapi_device(ide_drive_t *, const char *); | 
| 1148 | 1120 | ||
| 1149 | void ide_init_pc(struct ide_atapi_pc *); | 1121 | void ide_init_pc(struct ide_atapi_pc *); | 
| @@ -1168,13 +1140,17 @@ enum { | |||
| 1168 | REQ_IDETAPE_WRITE = (1 << 3), | 1140 | REQ_IDETAPE_WRITE = (1 << 3), | 
| 1169 | }; | 1141 | }; | 
| 1170 | 1142 | ||
| 1171 | int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *); | 1143 | int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *, | 
| 1144 | void *, unsigned int); | ||
| 1172 | 1145 | ||
| 1173 | int ide_do_test_unit_ready(ide_drive_t *, struct gendisk *); | 1146 | int ide_do_test_unit_ready(ide_drive_t *, struct gendisk *); | 
| 1174 | int ide_do_start_stop(ide_drive_t *, struct gendisk *, int); | 1147 | int ide_do_start_stop(ide_drive_t *, struct gendisk *, int); | 
| 1175 | int ide_set_media_lock(ide_drive_t *, struct gendisk *, int); | 1148 | int ide_set_media_lock(ide_drive_t *, struct gendisk *, int); | 
| 1176 | void ide_create_request_sense_cmd(ide_drive_t *, struct ide_atapi_pc *); | 1149 | void ide_create_request_sense_cmd(ide_drive_t *, struct ide_atapi_pc *); | 
| 1177 | void ide_retry_pc(ide_drive_t *, struct gendisk *); | 1150 | void ide_retry_pc(ide_drive_t *drive); | 
| 1151 | |||
| 1152 | void ide_prep_sense(ide_drive_t *drive, struct request *rq); | ||
| 1153 | int ide_queue_sense_rq(ide_drive_t *drive, void *special); | ||
| 1178 | 1154 | ||
| 1179 | int ide_cd_expiry(ide_drive_t *); | 1155 | int ide_cd_expiry(ide_drive_t *); | 
| 1180 | 1156 | ||
| @@ -1225,7 +1201,7 @@ static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | |||
| 1225 | } | 1201 | } | 
| 1226 | 1202 | ||
| 1227 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, | 1203 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, | 
| 1228 | hw_regs_t *, hw_regs_t **); | 1204 | struct ide_hw *, struct ide_hw **); | 
| 1229 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1205 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 
| 1230 | 1206 | ||
| 1231 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 1207 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 
| @@ -1384,7 +1360,6 @@ int ide_in_drive_list(u16 *, const struct drive_list_entry *); | |||
| 1384 | #ifdef CONFIG_BLK_DEV_IDEDMA | 1360 | #ifdef CONFIG_BLK_DEV_IDEDMA | 
| 1385 | int ide_dma_good_drive(ide_drive_t *); | 1361 | int ide_dma_good_drive(ide_drive_t *); | 
| 1386 | int __ide_dma_bad_drive(ide_drive_t *); | 1362 | int __ide_dma_bad_drive(ide_drive_t *); | 
| 1387 | int ide_id_dma_bug(ide_drive_t *); | ||
| 1388 | 1363 | ||
| 1389 | u8 ide_find_dma_mode(ide_drive_t *, u8); | 1364 | u8 ide_find_dma_mode(ide_drive_t *, u8); | 
| 1390 | 1365 | ||
| @@ -1425,7 +1400,6 @@ void ide_dma_lost_irq(ide_drive_t *); | |||
| 1425 | ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); | 1400 | ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); | 
| 1426 | 1401 | ||
| 1427 | #else | 1402 | #else | 
| 1428 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } | ||
| 1429 | static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } | 1403 | static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } | 
| 1430 | static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } | 1404 | static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } | 
| 1431 | static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; } | 1405 | static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; } | 
| @@ -1445,6 +1419,7 @@ static inline void ide_dma_unmap_sg(ide_drive_t *drive, | |||
| 1445 | 1419 | ||
| 1446 | #ifdef CONFIG_BLK_DEV_IDEACPI | 1420 | #ifdef CONFIG_BLK_DEV_IDEACPI | 
| 1447 | int ide_acpi_init(void); | 1421 | int ide_acpi_init(void); | 
| 1422 | bool ide_port_acpi(ide_hwif_t *hwif); | ||
| 1448 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); | 1423 | extern int ide_acpi_exec_tfs(ide_drive_t *drive); | 
| 1449 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); | 1424 | extern void ide_acpi_get_timing(ide_hwif_t *hwif); | 
| 1450 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); | 1425 | extern void ide_acpi_push_timing(ide_hwif_t *hwif); | 
| @@ -1453,6 +1428,7 @@ void ide_acpi_port_init_devices(ide_hwif_t *); | |||
| 1453 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); | 1428 | extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); | 
| 1454 | #else | 1429 | #else | 
| 1455 | static inline int ide_acpi_init(void) { return 0; } | 1430 | static inline int ide_acpi_init(void) { return 0; } | 
| 1431 | static inline bool ide_port_acpi(ide_hwif_t *hwif) { return 0; } | ||
| 1456 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } | 1432 | static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } | 
| 1457 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } | 1433 | static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } | 
| 1458 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } | 1434 | static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } | 
| @@ -1464,16 +1440,18 @@ static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | |||
| 1464 | void ide_register_region(struct gendisk *); | 1440 | void ide_register_region(struct gendisk *); | 
| 1465 | void ide_unregister_region(struct gendisk *); | 1441 | void ide_unregister_region(struct gendisk *); | 
| 1466 | 1442 | ||
| 1443 | void ide_check_nien_quirk_list(ide_drive_t *); | ||
| 1467 | void ide_undecoded_slave(ide_drive_t *); | 1444 | void ide_undecoded_slave(ide_drive_t *); | 
| 1468 | 1445 | ||
| 1469 | void ide_port_apply_params(ide_hwif_t *); | 1446 | void ide_port_apply_params(ide_hwif_t *); | 
| 1470 | int ide_sysfs_register_port(ide_hwif_t *); | 1447 | int ide_sysfs_register_port(ide_hwif_t *); | 
| 1471 | 1448 | ||
| 1472 | struct ide_host *ide_host_alloc(const struct ide_port_info *, hw_regs_t **); | 1449 | struct ide_host *ide_host_alloc(const struct ide_port_info *, struct ide_hw **, | 
| 1450 | unsigned int); | ||
| 1473 | void ide_host_free(struct ide_host *); | 1451 | void ide_host_free(struct ide_host *); | 
| 1474 | int ide_host_register(struct ide_host *, const struct ide_port_info *, | 1452 | int ide_host_register(struct ide_host *, const struct ide_port_info *, | 
| 1475 | hw_regs_t **); | 1453 | struct ide_hw **); | 
| 1476 | int ide_host_add(const struct ide_port_info *, hw_regs_t **, | 1454 | int ide_host_add(const struct ide_port_info *, struct ide_hw **, unsigned int, | 
| 1477 | struct ide_host **); | 1455 | struct ide_host **); | 
| 1478 | void ide_host_remove(struct ide_host *); | 1456 | void ide_host_remove(struct ide_host *); | 
| 1479 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); | 1457 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); | 
| @@ -1533,6 +1511,7 @@ int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); | |||
| 1533 | int ide_scan_pio_blacklist(char *); | 1511 | int ide_scan_pio_blacklist(char *); | 
| 1534 | const char *ide_xfer_verbose(u8); | 1512 | const char *ide_xfer_verbose(u8); | 
| 1535 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 1513 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 
| 1514 | int ide_pio_need_iordy(ide_drive_t *, const u8); | ||
| 1536 | int ide_set_pio_mode(ide_drive_t *, u8); | 1515 | int ide_set_pio_mode(ide_drive_t *, u8); | 
| 1537 | int ide_set_dma_mode(ide_drive_t *, u8); | 1516 | int ide_set_dma_mode(ide_drive_t *, u8); | 
| 1538 | void ide_set_pio(ide_drive_t *, u8); | 1517 | void ide_set_pio(ide_drive_t *, u8); | 
| @@ -1570,6 +1549,16 @@ static inline ide_drive_t *ide_get_pair_dev(ide_drive_t *drive) | |||
| 1570 | return (peer->dev_flags & IDE_DFLAG_PRESENT) ? peer : NULL; | 1549 | return (peer->dev_flags & IDE_DFLAG_PRESENT) ? peer : NULL; | 
| 1571 | } | 1550 | } | 
| 1572 | 1551 | ||
| 1552 | static inline void *ide_get_drivedata(ide_drive_t *drive) | ||
| 1553 | { | ||
| 1554 | return drive->drive_data; | ||
| 1555 | } | ||
| 1556 | |||
| 1557 | static inline void ide_set_drivedata(ide_drive_t *drive, void *data) | ||
| 1558 | { | ||
| 1559 | drive->drive_data = data; | ||
| 1560 | } | ||
| 1561 | |||
| 1573 | #define ide_port_for_each_dev(i, dev, port) \ | 1562 | #define ide_port_for_each_dev(i, dev, port) \ | 
| 1574 | for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) | 1563 | for ((i) = 0; ((dev) = (port)->devices[i]) || (i) < MAX_DRIVES; (i)++) | 
| 1575 | 1564 | ||
