⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ide.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
📖 第 1 页 / 共 3 页
字号:
	byte     unmask;		/* flag: okay to unmask other irqs */	byte     slow;			/* flag: slow data port */	byte     bswap;			/* flag: byte swap data */	byte     dsc_overlap;		/* flag: DSC overlap */	byte     nice1;			/* flag: give potential excess bandwidth */	unsigned present	: 1;	/* drive is physically present */	unsigned noprobe 	: 1;	/* from:  hdx=noprobe */	unsigned busy		: 1;	/* currently doing revalidate_disk() */	unsigned removable	: 1;	/* 1 if need to do check_media_change */	unsigned forced_geom	: 1;	/* 1 if hdx=c,h,s was given at boot */	unsigned no_unmask	: 1;	/* disallow setting unmask bit */	unsigned no_io_32bit	: 1;	/* disallow enabling 32bit I/O */	unsigned nobios		: 1;	/* flag: do not probe bios for drive */	unsigned revalidate	: 1;	/* request revalidation */	unsigned atapi_overlap	: 1;	/* flag: ATAPI overlap (not supported) */	unsigned nice0		: 1;	/* flag: give obvious excess bandwidth */	unsigned nice2		: 1;	/* flag: give a share in our own bandwidth */	unsigned doorlocking	: 1;	/* flag: for removable only: door lock/unlock works */	unsigned autotune	: 2;	/* 1=autotune, 2=noautotune, 0=default */	unsigned remap_0_to_1	: 2;	/* 0=remap if ezdrive, 1=remap, 2=noremap */	unsigned ata_flash	: 1;	/* 1=present, 0=default */	unsigned	addressing;	/* : 2; 0=28-bit, 1=48-bit, 2=64-bit */	byte		scsi;		/* 0=default, 1=skip current ide-subdriver for ide-scsi emulation */	byte		media;		/* disk, cdrom, tape, floppy, ... */	select_t	select;		/* basic drive/head select reg value */	byte		ctl;		/* "normal" value for IDE_CONTROL_REG */	byte		ready_stat;	/* min status value for drive ready */	byte		mult_count;	/* current multiple sector setting */	byte 		mult_req;	/* requested multiple sector setting */	byte 		tune_req;	/* requested drive tuning setting */	byte		io_32bit;	/* 0=16-bit, 1=32-bit, 2/3=32bit+sync */	byte		bad_wstat;	/* used for ignoring WRERR_STAT */	byte		nowerr;		/* used for ignoring WRERR_STAT */	byte		sect0;		/* offset of first sector for DM6:DDO */	unsigned int	usage;		/* current "open()" count for drive */	byte 		head;		/* "real" number of heads */	byte		sect;		/* "real" sectors per track */	byte		bios_head;	/* BIOS/fdisk/LILO number of heads */	byte		bios_sect;	/* BIOS/fdisk/LILO sectors per track */	unsigned int	bios_cyl;	/* BIOS/fdisk/LILO number of cyls */	unsigned int	cyl;		/* "real" number of cyls */	unsigned long	capacity;	/* total number of sectors */	unsigned long long capacity48;	/* total number of sectors */	unsigned int	drive_data;	/* for use by tuneproc/selectproc as needed */	void		  *hwif;	/* actually (ide_hwif_t *) */	wait_queue_head_t wqueue;	/* used to wait for drive in open() */	struct hd_driveid *id;		/* drive model identification info */	struct hd_struct  *part;	/* drive partition table */	char		name[4];	/* drive name, such as "hda" */	void 		*driver;	/* (ide_driver_t *) */	void		*driver_data;	/* extra driver data */	devfs_handle_t	de;		/* directory for device */	struct proc_dir_entry *proc;	/* /proc/ide/ directory entry */	void		*settings;	/* /proc/ide/ drive settings */	char		driver_req[10];	/* requests specific driver */	int		last_lun;	/* last logical unit */	int		forced_lun;	/* if hdxlun was given at boot */	int		lun;		/* logical unit */	int		crc_count;	/* crc counter to reduce drive speed */	byte		quirk_list;	/* drive is considered quirky if set for a specific host */	byte		suspend_reset;	/* drive suspend mode flag, soft-reset recovers */	byte		init_speed;	/* transfer rate set at boot */	byte		current_speed;	/* current transfer rate set */	byte		dn;		/* now wide spread use */	byte		wcache;		/* status of write cache */	byte		acoustic;	/* acoustic management */	unsigned int	failures;	/* current failure count */	unsigned int	max_failures;	/* maximum allowed failure count */} ide_drive_t;/* * An ide_dmaproc_t() initiates/aborts DMA read/write operations on a drive. * * The caller is assumed to have selected the drive and programmed the drive's * sector address using CHS or LBA.  All that remains is to prepare for DMA * and then issue the actual read/write DMA/PIO command to the drive. * * Returns 0 if all went well. * Returns 1 if DMA read/write could not be started, in which case the caller * should either try again later, or revert to PIO for the current request. */typedef enum {	ide_dma_read,	ide_dma_write,		ide_dma_begin,		ide_dma_end,	ide_dma_check,		ide_dma_on,		ide_dma_off,	ide_dma_off_quietly,	ide_dma_test_irq,		ide_dma_bad_drive,			ide_dma_good_drive,		ide_dma_verbose,			ide_dma_retune,		ide_dma_lostirq,			ide_dma_timeout} ide_dma_action_t;typedef int (ide_dmaproc_t)(ide_dma_action_t, ide_drive_t *);/* * An ide_ideproc_t() performs CPU-polled transfers to/from a drive. * Arguments are: the drive, the buffer pointer, and the length (in bytes or * words depending on if it's an IDE or ATAPI call). * * If it is not defined for a controller, standard-code is used from ide.c. * * Controllers which are not memory-mapped in the standard way need to  * override that mechanism using this function to work. * */typedef enum { ideproc_ide_input_data,    ideproc_ide_output_data,	       ideproc_atapi_input_bytes, ideproc_atapi_output_bytes} ide_ide_action_t;typedef void (ide_ideproc_t)(ide_ide_action_t, ide_drive_t *, void *, unsigned int);/* * An ide_tuneproc_t() is used to set the speed of an IDE interface * to a particular PIO mode.  The "byte" parameter is used * to select the PIO mode by number (0,1,2,3,4,5), and a value of 255 * indicates that the interface driver should "auto-tune" the PIO mode * according to the drive capabilities in drive->id; * * Not all interface types support tuning, and not all of those * support all possible PIO settings.  They may silently ignore * or round values as they see fit. */typedef void (ide_tuneproc_t) (ide_drive_t *, byte);typedef int (ide_speedproc_t) (ide_drive_t *, byte);/* * This is used to provide support for strange interfaces */typedef void (ide_selectproc_t) (ide_drive_t *);typedef void (ide_resetproc_t) (ide_drive_t *);typedef int (ide_quirkproc_t) (ide_drive_t *);typedef void (ide_intrproc_t) (ide_drive_t *);typedef void (ide_maskproc_t) (ide_drive_t *, int);typedef void (ide_rw_proc_t) (ide_drive_t *, ide_dma_action_t);/* * ide soft-power support */typedef int (ide_busproc_t) (ide_drive_t *, int);#define IDE_CHIPSET_PCI_MASK	\    ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx))#define IDE_CHIPSET_IS_PCI(c)	((IDE_CHIPSET_PCI_MASK >> (c)) & 1)#ifdef CONFIG_BLK_DEV_IDEPCItypedef struct ide_pci_devid_s {	unsigned short	vid;	unsigned short	did;} ide_pci_devid_t;#define IDE_PCI_DEVID_NULL	((ide_pci_devid_t){0,0})#define IDE_PCI_DEVID_EQ(a,b)	(a.vid == b.vid && a.did == b.did)#endif /* CONFIG_BLK_DEV_IDEPCI */typedef struct hwif_s {	struct hwif_s	*next;		/* for linked-list in ide_hwgroup_t */	void		*hwgroup;	/* actually (ide_hwgroup_t *) */	ide_ioreg_t	io_ports[IDE_NR_PORTS];	/* task file registers */	hw_regs_t	hw;		/* Hardware info */	ide_drive_t	drives[MAX_DRIVES];	/* drive info */	struct gendisk	*gd;		/* gendisk structure */	ide_tuneproc_t	*tuneproc;	/* routine to tune PIO mode for drives */	ide_speedproc_t	*speedproc;	/* routine to retune DMA modes for drives */	ide_selectproc_t *selectproc;	/* tweaks hardware to select drive */	ide_resetproc_t	*resetproc;	/* routine to reset controller after a disk reset */	ide_intrproc_t	*intrproc;	/* special interrupt handling for shared pci interrupts */	ide_maskproc_t	*maskproc;	/* special host masking for drive selection */	ide_quirkproc_t	*quirkproc;	/* check host's drive quirk list */	ide_rw_proc_t	*rwproc;	/* adjust timing based upon rq->cmd direction */	ide_ideproc_t   *ideproc;       /* CPU-polled transfer routine */	ide_dmaproc_t	*dmaproc;	/* dma read/write/abort routine */	unsigned int	*dmatable_cpu;	/* dma physical region descriptor table (cpu view) */	dma_addr_t	dmatable_dma;	/* dma physical region descriptor table (dma view) */	struct scatterlist *sg_table;	/* Scatter-gather list used to build the above */	int sg_nents;			/* Current number of entries in it */	int sg_dma_direction;		/* dma transfer direction */	int sg_dma_active;		/* is it in use */	struct hwif_s	*mate;		/* other hwif from same PCI chip */	unsigned long	dma_base;	/* base addr for dma ports */	unsigned	dma_extra;	/* extra addr for dma ports */	unsigned long	config_data;	/* for use by chipset-specific code */	unsigned long	select_data;	/* for use by chipset-specific code */	struct proc_dir_entry *proc;	/* /proc/ide/ directory entry */	int		irq;		/* our irq number */	byte		major;		/* our major number */	char 		name[6];	/* name of interface, eg. "ide0" */	byte		index;		/* 0 for ide0; 1 for ide1; ... */	hwif_chipset_t	chipset;	/* sub-module for tuning.. */#if 1 /* MVL */	byte		forcenoprobe;   /* cmdline specified noprobe  */#endif	unsigned	noprobe    : 1;	/* don't probe for this interface */	unsigned	present    : 1;	/* this interface exists */	unsigned	serialized : 1;	/* serialized operation with mate hwif */	unsigned	sharing_irq: 1;	/* 1 = sharing irq with another hwif */	unsigned	reset      : 1;	/* reset after probe */	unsigned	autodma    : 1;	/* automatically try to enable DMA at boot */	unsigned	udma_four  : 1;	/* 1=ATA-66 capable, 0=default */	unsigned	no_highio  : 1; /* don't trust pci dma mask, bounce */	byte		channel;	/* for dual-port chips: 0=primary, 1=secondary */#ifdef CONFIG_BLK_DEV_IDEPCI	struct pci_dev	*pci_dev;	/* for pci chipsets */	ide_pci_devid_t	pci_devid;	/* for pci chipsets: {VID,DID} */#endif /* CONFIG_BLK_DEV_IDEPCI */#if (DISK_RECOVERY_TIME > 0)	unsigned long	last_time;	/* time when previous rq was done */#endif	byte		straight8;	/* Alan's straight 8 check */	void		*hwif_data;	/* extra hwif data */	ide_busproc_t	*busproc;	/* driver soft-power interface */	byte		bus_state;	/* power state of the IDE bus */} ide_hwif_t;/* * Status returned from various ide_ functions */typedef enum {	ide_stopped,	/* no drive operation was started */	ide_started	/* a drive operation was started, and a handler was set */} ide_startstop_t;/* *  internal ide interrupt handler type */typedef ide_startstop_t (ide_pre_handler_t)(ide_drive_t *, struct request *);typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);typedef ide_startstop_t (ide_post_handler_t)(ide_drive_t *);/* * when ide_timer_expiry fires, invoke a handler of this type * to decide what to do. */typedef int (ide_expiry_t)(ide_drive_t *);typedef struct hwgroup_s {	ide_handler_t		*handler;/* irq handler, if active */	volatile int		busy;	/* BOOL: protects all fields below */	int			sleeping; /* BOOL: wake us up on timer expiry */	ide_drive_t		*drive;	/* current drive */	ide_hwif_t		*hwif;	/* ptr to current hwif in linked-list */	struct request		*rq;	/* current request */	struct timer_list	timer;	/* failsafe timer */	struct request		wrq;	/* local copy of current write rq */	unsigned long		poll_timeout;	/* timeout value during long polls */	ide_expiry_t		*expiry;	/* queried upon timeouts */} ide_hwgroup_t;/* structure attached to the request for IDE_TASK_CMDS *//* * configurable drive settings */#define TYPE_INT	0#define TYPE_INTA	1#define TYPE_BYTE	2#define TYPE_SHORT	3#define SETTING_READ	(1 << 0)#define SETTING_WRITE	(1 << 1)#define SETTING_RW	(SETTING_READ | SETTING_WRITE)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;	int			mul_factor;	int			div_factor;	void			*data;	ide_procset_t		*set;	int			auto_remove;	struct ide_settings_s	*next;} ide_settings_t;void 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);void ide_remove_setting(ide_drive_t *drive, char *name);ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name);int ide_read_setting(ide_drive_t *t, ide_settings_t *setting);int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val);void ide_add_generic_settings(ide_drive_t *drive);/* * /proc/ide interface */typedef struct {	const char	*name;	mode_t		mode;	read_proc_t	*read_proc;	write_proc_t	*write_proc;} ide_proc_entry_t;#ifdef CONFIG_PROC_FSvoid proc_ide_create(void);void proc_ide_destroy(void);void recreate_proc_ide_device(ide_hwif_t *, ide_drive_t *);void destroy_proc_ide_device(ide_hwif_t *, ide_drive_t *);void destroy_proc_ide_drives(ide_hwif_t *);void create_proc_ide_interfaces(void);void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p, void *data);void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p);read_proc_t proc_ide_read_capacity;read_proc_t proc_ide_read_geometry;/* * Standard exit stuff: */#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \{					\	len -= off;			\	if (len < count) {		\		*eof = 1;		\		if (len <= 0)		\			return 0;	\	} else				\		len = count;		\	*start = page + off;		\	return len;			\}#else#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0;#endif/* * Subdrivers support. */#define IDE_SUBDRIVER_VERSION	1typedef int		(ide_cleanup_proc)(ide_drive_t *);typedef int		(ide_standby_proc)(ide_drive_t *);typedef int		(ide_flushcache_proc)(ide_drive_t *);typedef ide_startstop_t	(ide_do_request_proc)(ide_drive_t *, struct request *, unsigned long);typedef void		(ide_end_request_proc)(byte, ide_hwgroup_t *);typedef int		(ide_ioctl_proc)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long);typedef int		(ide_open_proc)(struct inode *, struct file *, ide_drive_t *);typedef void		(ide_release_proc)(struct inode *, struct file *, ide_drive_t *);typedef int		(ide_check_media_change_proc)(ide_drive_t *);typedef void		(ide_revalidate_proc)(ide_drive_t *);typedef void		(ide_pre_reset_proc)(ide_drive_t *);typedef unsigned long	(ide_capacity_proc)(ide_drive_t *);typedef ide_startstop_t	(ide_special_proc)(ide_drive_t *);typedef void		(ide_setting_proc)(ide_drive_t *);typedef int		(ide_reinit_proc)(ide_drive_t *);typedef void		(ata_prebuilder_proc)(ide_drive_t *);typedef void		(atapi_prebuilder_proc)(ide_drive_t *);typedef struct ide_driver_s {	const char			*name;	const char			*version;	byte				media;	unsigned busy			: 1;	unsigned supports_dma		: 1;	unsigned supports_dsc_overlap	: 1;	ide_cleanup_proc		*cleanup;	ide_standby_proc		*standby;	ide_flushcache_proc		*flushcache;	ide_do_request_proc		*do_request;	ide_end_request_proc		*end_request;	ide_ioctl_proc			*ioctl;	ide_open_proc			*open;	ide_release_proc		*release;	ide_check_media_change_proc	*media_change;	ide_revalidate_proc		*revalidate;	ide_pre_reset_proc		*pre_reset;	ide_capacity_proc		*capacity;	ide_special_proc		*special;	ide_proc_entry_t		*proc;	ide_reinit_proc			*reinit;	ata_prebuilder_proc		*ata_prebuilder;	atapi_prebuilder_proc		*atapi_prebuilder;} ide_driver_t;#define DRIVER(drive)		((ide_driver_t *)((drive)->driver))/* * IDE modules. */#define IDE_CHIPSET_MODULE		0	/* not supported yet */#define IDE_PROBE_MODULE		1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -