ide: add struct ide_port_ops (take 2)
* Move hooks for port/host specific methods from ide_hwif_t to 'struct ide_port_ops'. * Add 'const struct ide_port_ops *port_ops' to 'struct ide_port_info' and ide_hwif_t. * Update host drivers and core code accordingly. While at it: * Rename ata66_*() cable detect functions to *_cable_detect() to match the standard naming. (Suggested by Sergei Shtylyov) v2: * Fix build for bast-ide. (Noticed by Andrew Morton) Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@ -387,6 +387,32 @@ typedef struct ide_drive_s {
|
||||
|
||||
struct ide_port_info;
|
||||
|
||||
struct ide_port_ops {
|
||||
/* host specific initialization of devices on a port */
|
||||
void (*port_init_devs)(struct hwif_s *);
|
||||
/* routine to program host for PIO mode */
|
||||
void (*set_pio_mode)(ide_drive_t *, const u8);
|
||||
/* routine to program host for DMA mode */
|
||||
void (*set_dma_mode)(ide_drive_t *, const u8);
|
||||
/* tweaks hardware to select drive */
|
||||
void (*selectproc)(ide_drive_t *);
|
||||
/* chipset polling based on hba specifics */
|
||||
int (*reset_poll)(ide_drive_t *);
|
||||
/* chipset specific changes to default for device-hba resets */
|
||||
void (*pre_reset)(ide_drive_t *);
|
||||
/* routine to reset controller after a disk reset */
|
||||
void (*resetproc)(ide_drive_t *);
|
||||
/* special host masking for drive selection */
|
||||
void (*maskproc)(ide_drive_t *, int);
|
||||
/* check host's drive quirk list */
|
||||
void (*quirkproc)(ide_drive_t *);
|
||||
|
||||
u8 (*mdma_filter)(ide_drive_t *);
|
||||
u8 (*udma_filter)(ide_drive_t *);
|
||||
|
||||
u8 (*cable_detect)(struct hwif_s *);
|
||||
};
|
||||
|
||||
typedef struct hwif_s {
|
||||
struct hwif_s *next; /* for linked-list in ide_hwgroup_t */
|
||||
struct hwif_s *mate; /* other hwif from same PCI chip */
|
||||
@ -426,32 +452,7 @@ typedef struct hwif_s {
|
||||
|
||||
void (*rw_disk)(ide_drive_t *, struct request *);
|
||||
|
||||
#if 0
|
||||
ide_hwif_ops_t *hwifops;
|
||||
#else
|
||||
/* host specific initialization of devices on a port */
|
||||
void (*port_init_devs)(struct hwif_s *);
|
||||
/* routine to program host for PIO mode */
|
||||
void (*set_pio_mode)(ide_drive_t *, const u8);
|
||||
/* routine to program host for DMA mode */
|
||||
void (*set_dma_mode)(ide_drive_t *, const u8);
|
||||
/* tweaks hardware to select drive */
|
||||
void (*selectproc)(ide_drive_t *);
|
||||
/* chipset polling based on hba specifics */
|
||||
int (*reset_poll)(ide_drive_t *);
|
||||
/* chipset specific changes to default for device-hba resets */
|
||||
void (*pre_reset)(ide_drive_t *);
|
||||
/* routine to reset controller after a disk reset */
|
||||
void (*resetproc)(ide_drive_t *);
|
||||
/* special host masking for drive selection */
|
||||
void (*maskproc)(ide_drive_t *, int);
|
||||
/* check host's drive quirk list */
|
||||
void (*quirkproc)(ide_drive_t *);
|
||||
#endif
|
||||
u8 (*mdma_filter)(ide_drive_t *);
|
||||
u8 (*udma_filter)(ide_drive_t *);
|
||||
|
||||
u8 (*cable_detect)(struct hwif_s *);
|
||||
const struct ide_port_ops *port_ops;
|
||||
|
||||
void (*ata_input_data)(ide_drive_t *, void *, u32);
|
||||
void (*ata_output_data)(ide_drive_t *, void *, u32);
|
||||
@ -1106,6 +1107,9 @@ struct ide_port_info {
|
||||
void (*init_iops)(ide_hwif_t *);
|
||||
void (*init_hwif)(ide_hwif_t *);
|
||||
void (*init_dma)(ide_hwif_t *, unsigned long);
|
||||
|
||||
const struct ide_port_ops *port_ops;
|
||||
|
||||
ide_pci_enablebit_t enablebits[2];
|
||||
hwif_chipset_t chipset;
|
||||
u8 extra;
|
||||
|
Reference in New Issue
Block a user