qla_vendor.c

来自「这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自」· C语言 代码 · 共 191 行

C
191
字号
/****************************************************************************** *                  QLOGIC LINUX SOFTWARE * * QLogic ISP2x00 device driver for Linux 2.4.x * Copyright (C) 2002 Qlogic Corporation * (www.qlogic.com) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * ******************************************************************************//* * vendor specific op codes.*/#define	UCSCSI_DCMD		0x20 /* vendor specific command */#define DAC_CDB_LEN		12#define DAC_SENSE_LEN		64#define DACMD_WRITE_CONF_ONDISK	0x4B#define	DACMD_WRITE_CONFIG	0x06#define	DACMD_WRITE_CONF2	0x3C#define	DACMD_WRITE_CONFLABEL	0x49 /* Write configuration label */#define	DACMD_WRITE_CONFIG_V3x	0x4F#define	DACMD_ADD_CONFIG_V2x	0x18#define	DACMD_ADD_CONFIG_V3x	0x4C#define	DACMD_STORE_IMAGE	0x21#define	DACMD_ADD_CAPACITY	0x2A /* add physical drives to existing array */#define	DACMD_WRITE_IOPORT	0x3A /* write port B */#define	DACMD_S2S_WRITEFULLCONF		0x60 /* write full configuration */#define	DACMD_S2S_ADDFULLCONF		0x62 /* add   full configuration */#define	DACMD_S2S_WRITELUNMAP_OLD	0x58 /* write LUN map information */#define DACMD_S2S_WRITELUNMAP		0xD2	/* Write LUN MAP Information */#define	DACMD_S2S_WRITE_IOPORT	0x66 /* write expanded IO port */#define	DACMD_WRITE_V3x		0x34 /* write data from plain memory */#define	DACMD_S2S_WRITESIG	0x4D /* write signature information */#if !defined(s08bits)#define	s08bits	char#define	s16bits	short#define	s32bits	int#define	u08bits	unsigned s08bits#define	u16bits	unsigned s16bits#define	u32bits	unsigned s32bits#endiftypedef struct dac_command{        u08bits	mb_Command;	/* Mail Box register 0	*/        u08bits	mb_CmdID;	/* Mail Box register 1	*/        u08bits	mb_ChannelNo;	/* Mail Box register 2	*/        u08bits	mb_TargetID;	/* Mail Box register 3	*/        u08bits	mb_DevState;	/* Mail Box register 4	*/        u08bits	mb_MailBox5;	/* Mail Box register 5	*/        u08bits	mb_MailBox6;	/* Mail Box register 6	*/        u08bits	mb_SysDevNo;	/* Mail Box register 7	*/        u32bits	mb_Datap;	/* Mail Box register 8-B */        u08bits	mb_MailBoxC;	/* Mail Box register C	*/        u08bits	mb_StatusID;	/* Mail box register D	*/        u16bits	mb_Status;	/* Mail Box Register E,F */}dac_command_t;typedef struct	dac_scdb{        u08bits db_ChannelTarget;	/* ChannelNo 7..4 & Target 3..0 */        u08bits db_DATRET;		/* different bits, see below */        u16bits	db_TransferSize;	/* Request/done size in bytes */        u32bits db_PhysDatap;		/* Physical addr in host memory	*/        u08bits db_CdbLen;		/* 6, 10 or 12			*/        u08bits db_SenseLen;		/* If returned from DAC (<= 64)	*/        u08bits	db_Cdb[DAC_CDB_LEN];	/* The CDB itself		*/        u08bits	db_SenseData[DAC_SENSE_LEN];/* Result of request sense	*/        u08bits db_StatusIn;		/* SCSI status returned		*/        u08bits	db_Reserved1;}dac_scdb_t;typedef	struct dga_scdb{        u08bits	dsc_osreq[1024];	/* OS related buffer:sizeof(mdac_req_t) */        u08bits	dsc_familyctlno;	/* Controller number within family */        u08bits	dsc_ctlno;		/* Controller number */        u08bits	dsc_chno;		/* Channel number */        u08bits	dsc_tgt;		/* target ID */        u08bits	dsc_lun;		/* Lun ID */        u08bits	dsc_rebuildflag;	/* current rebuild flag */        u16bits	dsc_status;		/* completion status */        u08bits	dsc_scsiversion;	/* SCSI protocol version */        u08bits	dsc_hostctlno;		/* host system controller number */        u16bits	dsc_reqsenseseqno;	/* request sense sequence number */        u32bits	dsc_events;		/* # events at start */        u32bits	dsc_pollwaitchan;	/* sleep/wakeup channel */        u32bits	dsc_poll;		/* polling value, if =0 op complete */        struct dga_ctldev *dsc_ctp;	/* pointer back to controller */        void *dsc_pdp;	/* pointer back to physical device */        void *dsc_ldp;	/* pointer back to logical device */        void (*dsc_intr)(void);	/* completion call back function */        /* all save functions are used in S2S */        u08bits	dsc_savedcdb[DAC_CDB_LEN];/* 12 bytes saved CDB from SCSI CDB */        u32bits	(*dsc_statsintr)(struct dga_scdb *); /* statistics completion function */        void (*dsc_savedintr)(void);	/* completion call back function */        void *dsc_savedctp;		/* pointer back to controller */        u08bits	dsc_savedfamilyctlno;	/* Controller number within family */        u08bits	dsc_savedctlno;		/* Controller number */        u08bits	dsc_savedchno;		/* Channel number */        u08bits	dsc_savedtgt;		/* target ID */        u08bits	dsc_savedlun;		/* Lun ID */        u08bits	dsc_savedcdblen;	/* saved CDB len for SCDB */        u08bits	dsc_scanmode;        u08bits dsc_pageno;             /* pageno for data > 4K */        u32bits	dsc_residue;        u32bits	dsc_Reserved4;        dac_command_t dsc_dcmd;		/* DCMD space, 16 bytes */        dac_scdb_t dsc_scdb;		/* SCDB space */        u32bits	dsc_EventSeqNo;        u32bits	dsc_ReqSenseNo;        u32bits	dsc_Reserved64[16];	/* leave this for OLD SCO driver bug */        u08bits	dsc_data[256];		/* Rest is data */}dga_scdb_t;/** qla2100_set_scsi_direction*      This routine will set the proper direction for vendor specific*      commands. **      Note: Vendors should modify this routine to set the proper *      direction of the transfer if they used vendor specific commands.** Input:*      ha = adapter block pointer.*      sp = SCSI Request Block structure pointer.** Returns:*      0 = success, was able to issue command.*/static voidqla2100_set_vend_direction(scsi_qla_host_t *ha,                           Scsi_Cmnd       *cmd, cmd_entry_t     *pkt){        dga_scdb_t	*dsp = (dga_scdb_t *) cmd;        if( cmd->data_cmnd[0] == UCSCSI_DCMD ) {                switch( dsp->dsc_dcmd.mb_Command ) {                case DACMD_WRITE_CONF_ONDISK:                case DACMD_WRITE_CONFIG:                case DACMD_WRITE_CONF2:                case DACMD_WRITE_CONFLABEL:                case DACMD_WRITE_CONFIG_V3x:                case DACMD_ADD_CONFIG_V2x:                case DACMD_ADD_CONFIG_V3x:                case DACMD_STORE_IMAGE:                case DACMD_ADD_CAPACITY:                case DACMD_WRITE_IOPORT:                case DACMD_S2S_WRITEFULLCONF:                case DACMD_S2S_ADDFULLCONF:                case DACMD_S2S_WRITELUNMAP_OLD:                case DACMD_S2S_WRITELUNMAP:                case DACMD_S2S_WRITE_IOPORT:                case DACMD_WRITE_V3x:                case DACMD_S2S_WRITESIG:                        pkt->control_flags |= BIT_6;                        break;                default:                        pkt->control_flags |= BIT_5;                }        } else                pkt->control_flags |= BIT_5;}

⌨️ 快捷键说明

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