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

📄 megaraid.h

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 H
📖 第 1 页 / 共 2 页
字号:
	u32 lDrvSize[FC_MAX_LOGICAL_DRIVES];	/* Size of each log. Drv */	u8 lDrvProp[FC_MAX_LOGICAL_DRIVES];	u8 lDrvState[FC_MAX_LOGICAL_DRIVES];	/* State of Logical Drives */	u8 pDrvState[FC_MAX_PHYSICAL_DEVICES];	/* State of Phys. Drvs. */	u16 physDrvFormat[FC_MAX_PHYSICAL_DEVICES / 16];	u8 targXfer[80];	/* phys device transfer rate */	u8 pad1k[263];		/* 761 + 263reserved = 1024 bytes total size */} __attribute__ ((packed));typedef struct MegaRAID_Enquiry3 mega_Enquiry3;/* Structures */typedef struct _mega_ADP_INFO {	u8 MaxConcCmds;	u8 RbldRate;	u8 MaxTargPerChan;	u8 ChanPresent;	u8 FwVer[4];	u16 AgeOfFlash;	u8 ChipSetValue;	u8 DramSize;	u8 CacheFlushInterval;	u8 BiosVer[4];	u8 resvd[7];} mega_ADP_INFO;typedef struct _mega_LDRV_INFO {	u8 NumLDrv;	u8 resvd[3];	u32 LDrvSize[MAX_LOGICAL_DRIVES];	u8 LDrvProp[MAX_LOGICAL_DRIVES];	u8 LDrvState[MAX_LOGICAL_DRIVES];} mega_LDRV_INFO;typedef struct _mega_PDRV_INFO {	u8 PDrvState[MAX_PHYSICAL_DRIVES];	u8 resvd;} mega_PDRV_INFO;/* RAID inquiry: Mailbox command 0x5*/typedef struct _mega_RAIDINQ {	mega_ADP_INFO AdpInfo;	mega_LDRV_INFO LogdrvInfo;	mega_PDRV_INFO PhysdrvInfo;} mega_RAIDINQ;/* Passthrough command: Mailbox command 0x3*/typedef struct mega_passthru {	u8 timeout:3;		/* 0=6sec/1=60sec/2=10min/3=3hrs */	u8 ars:1;	u8 reserved:3;	u8 islogical:1;	u8 logdrv;		/* if islogical == 1 */	u8 channel;		/* if islogical == 0 */	u8 target;		/* if islogical == 0 */	u8 queuetag;		/* unused */	u8 queueaction;		/* unused */	u8 cdb[MAX_CDB_LEN];	u8 cdblen;	u8 reqsenselen;	u8 reqsensearea[MAX_REQ_SENSE_LEN];	u8 numsgelements;	u8 scsistatus;	u32 dataxferaddr;	u32 dataxferlen;} mega_passthru;/* * Extended passthru: support CDB > 10 bytes */typedef struct {	u8 timeout:3;		/* 0=6sec/1=60sec/2=10min/3=3hrs */	u8 ars:1;	u8 rsvd1:1;	u8 cd_rom:1;	u8 rsvd2:1;	u8 islogical:1;	u8 logdrv;		/* if islogical == 1 */	u8 channel;		/* if islogical == 0 */	u8 target;		/* if islogical == 0 */	u8 queuetag;		/* unused */	u8 queueaction;		/* unused */	u8 cdblen;	u8 rsvd3;	u8 cdb[16];	u8 numsgelements;	u8 status;	u8 reqsenselen;	u8 reqsensearea[MAX_REQ_SENSE_LEN];	u8 rsvd4;	u32 dataxferaddr;	u32 dataxferlen;}mega_ext_passthru;struct _mega_mailbox {	/* 0x0 */ u8 cmd;	/* 0x1 */ u8 cmdid;	/* 0x2 */ u16 numsectors;	/* 0x4 */ u32 lba;	/* 0x8 */ u32 xferaddr;	/* 0xC */ u8 logdrv;	/* 0xD */ u8 numsgelements;	/* 0xE */ u8 resvd;	/* 0xF */ u8 busy;	/* 0x10 */ u8 numstatus;	/* 0x11 */ u8 status;	/* 0x12 */ u8 completed[46];	volatile u8 mraid_poll;	volatile u8 mraid_ack;	u8 pad[16];		/* for alignment purposes */} __attribute__ ((packed));typedef struct _mega_mailbox mega_mailbox;typedef struct {	u32 xferSegment_lo;	u32 xferSegment_hi;	mega_mailbox mailbox;} mega_mailbox64;typedef struct _mega_ioctl_mbox {	/* 0x0 */ u8 cmd;	/* 0x1 */ u8 cmdid;	/* 0x2 */ u8 channel;	/* 0x3 */ u8 param;	/* 0x4 */ u8 pad[4];	/* 0x8 */ u32 xferaddr;	/* 0xC */ u8 logdrv;	/* 0xD */ u8 numsgelements;	/* 0xE */ u8 resvd;	/* 0xF */ u8 busy;	/* 0x10 */ u8 numstatus;	/* 0x11 */ u8 status;	/* 0x12 */ u8 completed[46];	u8 mraid_poll;	u8 mraid_ack;	u8 malign[16];} mega_ioctl_mbox;typedef struct _mega_64sglist32 {	u64 address;	u32 length;} __attribute__ ((packed)) mega_64sglist;typedef struct _mega_sglist {	u32 address;	u32 length;} mega_sglist;/* Queued command data */typedef struct _mega_scb mega_scb;struct _mega_scb {	int idx;	u32 state;	u32 isrcount;	u8 mboxData[16];#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)	u32 dma_type;	dma_addr_t dma_h_bulkdata;	/*Dma handle for bulk data transfter */	u32 dma_direction;	/*Dma direction */	dma_addr_t dma_h_sgdata;	/*Dma handle for the sglist structure */	dma_addr_t dma_h_sglist[MAX_SGLIST];	/*Dma handle for all SGL elements */	u8 sglist_count;	dma_addr_t dma_sghandle64;	dma_addr_t dma_passthruhandle64;	dma_addr_t dma_ext_passthruhandle64;	dma_addr_t dma_bounce_buffer;	u8 *bounce_buffer;#endif#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)	mega_passthru *pthru;	mega_ext_passthru *epthru;#else	mega_passthru pthru;	mega_ext_passthru epthru;#endif	Scsi_Cmnd *SCpnt;	mega_sglist *sgList;	mega_64sglist *sg64List;	struct semaphore ioctl_sem;	void *buff_ptr;	u32 iDataSize;	mega_scb *next;};/* internal locking by the queue manipulting routines */#define INTERNAL_LOCK   0/* external locking by the queue manipulting routines */#define EXTERNAL_LOCK   1#define NO_LOCK		2#define INTR_ENB	0	/* do not disable interrupt while manipulating */#define INTR_DIS	1	/* disable interrupt while manipulating *//* Per-controller data */typedef struct _mega_host_config {	u8 numldrv;	u32 flag;#ifdef __LP64__	u64 base;#else	u32 base;#endif#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)	dma_addr_t dma_handle64, adjdmahandle64;	struct pci_dev *dev;#endif	mega_scb *qFreeH;	mega_scb *qFreeT;	spinlock_t lock_free;	mega_scb *qPendingH;	mega_scb *qPendingT;	spinlock_t lock_pend;	Scsi_Cmnd *qCompletedH;	Scsi_Cmnd *qCompletedT;	spinlock_t lock_scsicmd;	u32 qFcnt;	u32 qPcnt;	u32 qCcnt;	unsigned long nReads[FC_MAX_LOGICAL_DRIVES];	unsigned long nReadBlocks[FC_MAX_LOGICAL_DRIVES];	unsigned long nWrites[FC_MAX_LOGICAL_DRIVES];	unsigned long nWriteBlocks[FC_MAX_LOGICAL_DRIVES];	unsigned long nInterrupts;	/* Host adapter parameters */	u8 fwVer[7];	u8 biosVer[7];	struct Scsi_Host *host;	volatile mega_mailbox64 *mbox64;	/* ptr to beginning of 64-bit mailbox */	volatile mega_mailbox *mbox;	/* ptr to beginning of standard mailbox */#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)/* ptr to beginning of standard mailbox */	volatile mega_mailbox64 *mailbox64ptr;#else	volatile mega_mailbox64 mailbox64;#endif	volatile u8 mega_buffer[2 * 1024L];	volatile megaRaidProductInfo productInfo;	u8 max_cmds;	mega_scb scbList[MAX_COMMANDS];#define PROCBUFSIZE 4096	char procbuf[PROCBUFSIZE];	int procidx;	struct proc_dir_entry *controller_proc_dir_entry;	struct proc_dir_entry *proc_read, *proc_stat, *proc_status, *proc_mbox;	int		support_ext_cdb;	int		boot_ldrv_enabled;	int		boot_ldrv;	int		support_random_del;	/* Do we support random deletion of logdrvs */	int		read_ldidmap;	/* set after logical drive deltion. The logical								drive number must be read from the map */	int		quiescent;	/* a stage reached when delete logical drive needs to						   be done. Stop sending requests to the hba till						   delete operation is completed */	mega_scb	*int_qh;	/* commands are queued in the internal queue */	mega_scb	*int_qt;	/* while the hba is quiescent */	int			int_qlen;} mega_host_config;typedef struct _driver_info {	int size;	ulong version;} mega_driver_info;/* * User ioctl structure. * This structure will be used for Traditional Method ioctl interface * commands (M_RD_IOCTL_CMD),Alternate Buffer Method (M_RD_IOCTL_CMD_NEW)  * ioctl commands and the Driver ioctls(M_RD_DRIVER_IOCTL_INTERFACE). * The Driver ioctl interface handles the commands at * the driver level, without being sent to the card. */#define MEGADEVIOC      0x84/* system call imposed limit. Change accordingly */#define IOCTL_MAX_DATALEN       4096#pragma pack(1)struct uioctl_t {	u32 inlen;	u32 outlen;	union {		u8 fca[16];		struct {			u8 opcode;			u8 subopcode;			u16 adapno;#if BITS_PER_LONG == 32			u8 *buffer;			u8 pad[4];#endif#if BITS_PER_LONG == 64			u8 *buffer;#endif			u32 length;		} fcs;	} ui;	u8 mbox[18];		/* 16 bytes + 2 status bytes */	mega_passthru pthru;#if BITS_PER_LONG == 32	char *data;		/* buffer <= 4096 for 0x80 commands */	char pad[4];#endif#if BITS_PER_LONG == 64	char *data;#endif};#pragma pack()/* * struct mcontroller is used to pass information about the controllers in the * system. Its upto the application how to use the information. We are passing * as much info about the cards as possible and useful. Before issuing the * call to find information about the cards, the applicaiton needs to issue a * ioctl first to find out the number of controllers in the system. */#define MAX_CONTROLLERS 32struct mcontroller {	u64 base;	u8 irq;	u8 numldrv;	u8 pcibus;	u16 pcidev;	u8 pcifun;	u16 pciid;	u16 pcivendor;	u8 pcislot;	u32 uid;};struct mbox_passthru {	u8 cmd;	u8 cmdid;	u16 pad1;	u32 pad2;	u32 dataxferaddr;	u8 pad3;	u8 pad4;	u8 rsvd;	u8 mboxbusy;	u8 nstatus;	u8 status;};/* * Defines for Driver IOCTL interface, Op-code:M_RD_DRIVER_IOCTL_INTERFACE */#define MEGAIOC_MAGIC  	'm'#define MEGAIOCCMD     	_IOWR(MEGAIOC_MAGIC, 0)	/* Mega IOCTL command */#define MEGAIOC_QNADAP		'm'	/* Query # of adapters */#define MEGAIOC_QDRVRVER	'e'	/* Query driver version */#define MEGAIOC_QADAPINFO   	'g'	/* Query adapter information */#define MKADAP(adapno)	  	(MEGAIOC_MAGIC << 8 | (adapno) )#define GETADAP(mkadap)	 	( (mkadap) ^ MEGAIOC_MAGIC << 8 )#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)	/*0x20300 */extern struct proc_dir_entry proc_scsi_megaraid;#endif/* For Host Re-Ordering */#define MAX_CONTROLLERS	32struct mega_hbas {	int is_bios_enabled;	mega_host_config *hostdata_addr;};#define		IS_BIOS_ENABLED		0x62#define		GET_BIOS		0x01#define		CHNL_CLASS		0xA9#define		GET_CHNL_CLASS	0x00#define		SET_CHNL_CLASS	0x01#define		CH_RAID			0x01#define		CH_SCSI			0x00#define BIOS_PVT_DATA		0x40#define GET_BIOS_PVT_DATA	0x00#pragma pack(1)struct private_bios_data {	u8		geometry:4;		/*							 * bits 0-3 - BIOS geometry							 * 0x0001 - 1GB							 * 0x0010 - 2GB							 * 0x1000 - 8GB							 * Others values are invalid							 */	u8		unused:4;		/* bits 4-7 are unused */	u8		boot_ldrv;		/*							 * logical drive set as boot drive							 * 0..7 - for 8LD cards							 * 0..39 - for 40LD cards							 */	u8		rsvd[12];	u16		cksum;			/* 0-(sum of first 13 bytes of this structure) */};#pragma pack()#define NVIRT_CHAN		4	/* # of virtual channels to represent 60 logical							drives *//* * Command for random deletion of logical drives */#define	FC_DEL_LOGDRV		0xA4	/* f/w command */#define	OP_SUP_DEL_LOGDRV	0x2A	/* is feature supported */#define OP_GET_LDID_MAP		0x18	/* get logdrv id and logdrv number map */#define OP_DEL_LOGDRV		0x1C	/* delete logical drive *//*================================================================ * *                    Function prototypes * *================================================================ */const char *megaraid_info (struct Scsi_Host *);int megaraid_detect (Scsi_Host_Template *);int megaraid_release (struct Scsi_Host *);int megaraid_command (Scsi_Cmnd *);int megaraid_abort (Scsi_Cmnd *);int megaraid_reset (Scsi_Cmnd *, unsigned int);int megaraid_queue (Scsi_Cmnd *, void (*done) (Scsi_Cmnd *));int megaraid_biosparam (Disk *, kdev_t, int *);int megaraid_proc_info (char *buffer, char **start, off_t offset,			int length, int hostno, int inout);static int megaIssueCmd (mega_host_config * megaCfg, u_char * mboxData,			 mega_scb * scb, int intr);static int mega_build_sglist (mega_host_config * megaCfg, mega_scb * scb,			      u32 * buffer, u32 * length);static int mega_busyWaitMbox (mega_host_config *);static int mega_runpendq (mega_host_config *);static void mega_rundoneq (mega_host_config *);static void mega_cmd_done (mega_host_config *, mega_scb *, int);static inline void mega_freeSgList (mega_host_config * megaCfg);static void mega_Convert8ldTo40ld (mega_RAIDINQ * inquiry,				   mega_Enquiry3 * enquiry3,				   megaRaidProductInfo * productInfo);static int megaraid_reboot_notify (struct notifier_block *,				   unsigned long, void *);#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)  static mega_scb *mega_ioctl (mega_host_config * megaCfg, Scsi_Cmnd * SCpnt);static void mega_build_kernel_sg (char *barea, ulong xfersize, mega_scb * pScb,			   mega_ioctl_mbox * mbox);#endifstatic int megadev_open (struct inode *, struct file *);static int megadev_ioctl_entry (struct inode *, struct file *,				unsigned int, unsigned long);static int megadev_ioctl (struct inode *, struct file *,			  unsigned int, unsigned long);static mega_scb *megadev_doioctl (mega_host_config *, Scsi_Cmnd *);static int megadev_close (struct inode *, struct file *);static void megadev_ioctl_done (Scsi_Cmnd *);static int mega_init_scb (mega_host_config *);static void enq_scb_freelist (mega_host_config *, mega_scb *,			      int lock, int intr);static int mega_is_bios_enabled (mega_host_config *);static void mega_reorder_hosts (void);static void mega_swap_hosts (struct Scsi_Host *, struct Scsi_Host *);static void mega_create_proc_entry (int index, struct proc_dir_entry *);static int mega_support_ext_cdb(mega_host_config *);static mega_passthru* mega_prepare_passthru(mega_host_config *, mega_scb *,		Scsi_Cmnd *);static mega_ext_passthru* mega_prepare_extpassthru(mega_host_config *,		mega_scb *, Scsi_Cmnd *);static void mega_enum_raid_scsi(mega_host_config *);static int mega_partsize(Disk *, kdev_t, int *);static void mega_get_boot_ldrv(mega_host_config *);static int mega_get_lun(mega_host_config *, Scsi_Cmnd *);static int mega_support_random_del(mega_host_config *);static int mega_del_logdrv(mega_host_config *, int);static int mega_do_del_logdrv(mega_host_config *, int);#endif/* vi: set ts=4: */

⌨️ 快捷键说明

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