ide: split off ioctl handling from IDE settings (v2)
* do write permission and min/max checks in ide_procset_t functions * ide-disk.c: drive->id is always available so cleanup "multcount" setting accordingly * ide-disk.c: "address" setting was incorrectly defined as type TYPE_INTA, fix it by using type TYPE_BYTE and updating ide_drive_t->adressing field, the bug didn't trigger because this IDE setting uses custom ->set function * ide.c: add set_ksettings() for handling HDIO_SET_KEEPSETTINGS ioctl * ide.c: add set_unmaskirq() for handling HDIO_SET_UNMASKINTR ioctl * handle ioctls directly in generic_ide_ioclt() and idedisk_ioctl() instead of using IDE settings to deal with them * remove no longer needed ide_find_setting_by_ioctl() and {read,write}_ioctl fields from ide_settings_t, also remove now unused TYPE_INTA handling v2: * add missing EXPORT_SYMBOL_GPL(ide_setting_sem) needed now for ide-disk Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@@ -601,16 +601,11 @@ typedef struct ide_drive_s {
|
||||
unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */
|
||||
unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */
|
||||
unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */
|
||||
unsigned addressing; /* : 3;
|
||||
* 0=28-bit
|
||||
* 1=48-bit
|
||||
* 2=48-bit doing 28-bit
|
||||
* 3=64-bit
|
||||
*/
|
||||
unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */
|
||||
unsigned sleeping : 1; /* 1=sleeping & sleep field valid */
|
||||
unsigned post_reset : 1;
|
||||
|
||||
u8 addressing; /* 0=28-bit, 1=48-bit, 2=48-bit doing 28-bit */
|
||||
u8 quirk_list; /* considered quirky, set for a specific host */
|
||||
u8 init_speed; /* transfer rate set at boot */
|
||||
u8 current_speed; /* current transfer rate set */
|
||||
@@ -870,9 +865,8 @@ typedef struct hwgroup_s {
|
||||
*/
|
||||
|
||||
#define TYPE_INT 0
|
||||
#define TYPE_INTA 1
|
||||
#define TYPE_BYTE 2
|
||||
#define TYPE_SHORT 3
|
||||
#define TYPE_BYTE 1
|
||||
#define TYPE_SHORT 2
|
||||
|
||||
#define SETTING_READ (1 << 0)
|
||||
#define SETTING_WRITE (1 << 1)
|
||||
@@ -882,8 +876,6 @@ typedef int (ide_procset_t)(ide_drive_t *, int);
|
||||
typedef struct ide_settings_s {
|
||||
char *name;
|
||||
int rw;
|
||||
int read_ioctl;
|
||||
int write_ioctl;
|
||||
int data_type;
|
||||
int min;
|
||||
int max;
|
||||
@@ -896,7 +888,7 @@ typedef struct ide_settings_s {
|
||||
} ide_settings_t;
|
||||
|
||||
extern struct semaphore ide_setting_sem;
|
||||
extern int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set);
|
||||
int ide_add_setting(ide_drive_t *, const char *, int, int, int, int, int, int, void *, ide_procset_t *set);
|
||||
extern ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name);
|
||||
extern int ide_read_setting(ide_drive_t *t, ide_settings_t *setting);
|
||||
extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val);
|
||||
|
Reference in New Issue
Block a user