diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:56 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:56 -0400 |
commit | 374e042c3e767ac2e5a40b78529220e0b3de793c (patch) | |
tree | 433d258f6da9783f0cb34234af9c359353f531fe /include/linux/ide.h | |
parent | d6276b5f5cc7508124de291f3ed59c6945c17ae7 (diff) |
ide: add struct ide_tp_ops (take 2)
* Add struct ide_tp_ops for transport methods.
* Add 'const struct ide_tp_ops *tp_ops' to struct ide_port_info
and ide_hwif_t.
* Set the default hwif->tp_ops in ide_init_port_data().
* Set host driver specific hwif->tp_ops in ide_init_port().
* Export ide_exec_command(), ide_read_status(), ide_read_altstatus(),
ide_read_sff_dma_status(), ide_set_irq(), ide_tf_{load,read}()
and ata_{in,out}put_data().
* Convert host drivers and core code to use struct ide_tp_ops.
* Remove no longer needed default_hwif_transport().
* Cleanup ide_hwif_t from methods that are now in struct ide_tp_ops.
While at it:
* Use struct ide_port_info in falconide.c and q40ide.c.
* Rename ata_{in,out}put_data() to ide_{in,out}put_data().
v2:
* Fix missing convertion in ns87415.c.
There should be no functional changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'include/linux/ide.h')
-rw-r--r-- | include/linux/ide.h | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h index e340218b2a5f..1286a2275efb 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -408,8 +408,28 @@ typedef struct ide_drive_s { | |||
408 | ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx)) | 408 | ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx)) |
409 | #define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1) | 409 | #define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1) |
410 | 410 | ||
411 | struct ide_task_s; | ||
411 | struct ide_port_info; | 412 | struct ide_port_info; |
412 | 413 | ||
414 | struct ide_tp_ops { | ||
415 | void (*exec_command)(struct hwif_s *, u8); | ||
416 | u8 (*read_status)(struct hwif_s *); | ||
417 | u8 (*read_altstatus)(struct hwif_s *); | ||
418 | u8 (*read_sff_dma_status)(struct hwif_s *); | ||
419 | |||
420 | void (*set_irq)(struct hwif_s *, int); | ||
421 | |||
422 | void (*tf_load)(ide_drive_t *, struct ide_task_s *); | ||
423 | void (*tf_read)(ide_drive_t *, struct ide_task_s *); | ||
424 | |||
425 | void (*input_data)(ide_drive_t *, struct request *, void *, | ||
426 | unsigned int); | ||
427 | void (*output_data)(ide_drive_t *, struct request *, void *, | ||
428 | unsigned int); | ||
429 | }; | ||
430 | |||
431 | extern const struct ide_tp_ops default_tp_ops; | ||
432 | |||
413 | struct ide_port_ops { | 433 | struct ide_port_ops { |
414 | /* host specific initialization of a device */ | 434 | /* host specific initialization of a device */ |
415 | void (*init_dev)(ide_drive_t *); | 435 | void (*init_dev)(ide_drive_t *); |
@@ -447,8 +467,6 @@ struct ide_dma_ops { | |||
447 | void (*dma_timeout)(struct ide_drive_s *); | 467 | void (*dma_timeout)(struct ide_drive_s *); |
448 | }; | 468 | }; |
449 | 469 | ||
450 | struct ide_task_s; | ||
451 | |||
452 | typedef struct hwif_s { | 470 | typedef struct hwif_s { |
453 | struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ | 471 | struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ |
454 | struct hwif_s *mate; /* other hwif from same PCI chip */ | 472 | struct hwif_s *mate; /* other hwif from same PCI chip */ |
@@ -486,22 +504,10 @@ typedef struct hwif_s { | |||
486 | 504 | ||
487 | void (*rw_disk)(ide_drive_t *, struct request *); | 505 | void (*rw_disk)(ide_drive_t *, struct request *); |
488 | 506 | ||
507 | const struct ide_tp_ops *tp_ops; | ||
489 | const struct ide_port_ops *port_ops; | 508 | const struct ide_port_ops *port_ops; |
490 | const struct ide_dma_ops *dma_ops; | 509 | const struct ide_dma_ops *dma_ops; |
491 | 510 | ||
492 | void (*exec_command)(struct hwif_s *, u8); | ||
493 | u8 (*read_status)(struct hwif_s *); | ||
494 | u8 (*read_altstatus)(struct hwif_s *); | ||
495 | u8 (*read_sff_dma_status)(struct hwif_s *); | ||
496 | |||
497 | void (*set_irq)(struct hwif_s *, int); | ||
498 | |||
499 | void (*tf_load)(ide_drive_t *, struct ide_task_s *); | ||
500 | void (*tf_read)(ide_drive_t *, struct ide_task_s *); | ||
501 | |||
502 | void (*input_data)(ide_drive_t *, struct request *, void *, unsigned); | ||
503 | void (*output_data)(ide_drive_t *, struct request *, void *, unsigned); | ||
504 | |||
505 | void (*ide_dma_clear_irq)(ide_drive_t *drive); | 511 | void (*ide_dma_clear_irq)(ide_drive_t *drive); |
506 | 512 | ||
507 | /* dma physical region descriptor table (cpu view) */ | 513 | /* dma physical region descriptor table (cpu view) */ |
@@ -949,6 +955,19 @@ typedef struct ide_task_s { | |||
949 | 955 | ||
950 | void ide_tf_dump(const char *, struct ide_taskfile *); | 956 | void ide_tf_dump(const char *, struct ide_taskfile *); |
951 | 957 | ||
958 | void ide_exec_command(ide_hwif_t *, u8); | ||
959 | u8 ide_read_status(ide_hwif_t *); | ||
960 | u8 ide_read_altstatus(ide_hwif_t *); | ||
961 | u8 ide_read_sff_dma_status(ide_hwif_t *); | ||
962 | |||
963 | void ide_set_irq(ide_hwif_t *, int); | ||
964 | |||
965 | void ide_tf_load(ide_drive_t *, ide_task_t *); | ||
966 | void ide_tf_read(ide_drive_t *, ide_task_t *); | ||
967 | |||
968 | void ide_input_data(ide_drive_t *, struct request *, void *, unsigned int); | ||
969 | void ide_output_data(ide_drive_t *, struct request *, void *, unsigned int); | ||
970 | |||
952 | extern void SELECT_DRIVE(ide_drive_t *); | 971 | extern void SELECT_DRIVE(ide_drive_t *); |
953 | void SELECT_MASK(ide_drive_t *, int); | 972 | void SELECT_MASK(ide_drive_t *, int); |
954 | 973 | ||
@@ -1022,8 +1041,6 @@ static inline int ide_hwif_setup_dma(ide_hwif_t *hwif, | |||
1022 | } | 1041 | } |
1023 | #endif | 1042 | #endif |
1024 | 1043 | ||
1025 | extern void default_hwif_transport(ide_hwif_t *); | ||
1026 | |||
1027 | typedef struct ide_pci_enablebit_s { | 1044 | typedef struct ide_pci_enablebit_s { |
1028 | u8 reg; /* byte pci reg holding the enable-bit */ | 1045 | u8 reg; /* byte pci reg holding the enable-bit */ |
1029 | u8 mask; /* mask to isolate the enable-bit */ | 1046 | u8 mask; /* mask to isolate the enable-bit */ |
@@ -1112,6 +1129,7 @@ struct ide_port_info { | |||
1112 | int (*init_dma)(ide_hwif_t *, | 1129 | int (*init_dma)(ide_hwif_t *, |
1113 | const struct ide_port_info *); | 1130 | const struct ide_port_info *); |
1114 | 1131 | ||
1132 | const struct ide_tp_ops *tp_ops; | ||
1115 | const struct ide_port_ops *port_ops; | 1133 | const struct ide_port_ops *port_ops; |
1116 | const struct ide_dma_ops *dma_ops; | 1134 | const struct ide_dma_ops *dma_ops; |
1117 | 1135 | ||