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

📄 cpqfctsstructs.h

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 H
📖 第 1 页 / 共 4 页
字号:
// because of kernel memory allocation constraints!)typedef struct // we will allocate this dynamically{  FC_EXCHANGE fcExchange[ TACH_MAX_XID ];} FC_EXCHANGES;typedef struct{  char Name[64]; // name of controller ("HP Tachlite TL Rev2.0, 33MHz, 64bit bus")  //PVOID  pAdapterDevExt; // back pointer to device object/extension  ULONG ChipType;        // local numeric key for Tachyon Type / Rev.  ULONG status;              // our Driver - logical status    TL_REGISTERS Registers;    // reg addresses & host memory copies                             // FC-4 mapping of 'transaction' to X_IDs  UCHAR LILPmap[32*4];       // Loop Position Map of ALPAs (late FC-AL only)  FC_OPTIONS Options;        // e.g. Target, Initiator, loopback...  UCHAR highest_FCPH_ver;    // FC-PH version limits  UCHAR lowest_FCPH_ver;     // FC-PH version limits  FC_EXCHANGES *Exchanges;    ULONG fcLsExchangeLRU;       // Least Recently Used counter (Link Service)  ULONG fcSestExchangeLRU;       // Least Recently Used counter (FCP-SCSI)  FC_LOGGEDIN_PORT fcPorts;  // linked list of every FC port ever seen  FCSTATS fcStats;           // FC comm err counters                             // Host memory QUEUE pointers  TachLiteERQ *ERQ;          // Exchange Request Que   TachyonIMQ *IMQ;           // Inbound Message Que   TachLiteSFQ *SFQ;          // Single Frame Queue  TachSEST *SEST;            // SCSI Exchange State Table  dma_addr_t exch_dma_handle;  // these function pointers are for "generic" functions, which are  // replaced with Host Bus Adapter types at  // runtime.  int (*CreateTachyonQues)( void* , int);  int (*DestroyTachyonQues)( void* , int);  int (*LaserControl)(void*, int );   // e.g. On/Off  int (*ResetTachyon)(void*, int );  void (*FreezeTachyon)(void*, int );  void (*UnFreezeTachyon)(void*, int );  int (*InitializeTachyon)(void*, int, int );  int (*InitializeFrameManager)(void*, int );  int (*ProcessIMQEntry)(void*);  int (*ReadWriteWWN)(void*, int ReadWrite);  int (*ReadWriteNVRAM)(void*, void*, int ReadWrite);} TACHYON, *PTACHYON;void cpqfcTSClearLinkStatusCounters(TACHYON * fcChip);int CpqTsCreateTachLiteQues( void* pHBA, int opcode);int CpqTsDestroyTachLiteQues( void* , int);int CpqTsInitializeTachLite( void *pHBA, int opcode1, int opcode2);int CpqTsProcessIMQEntry(void* pHBA);int CpqTsResetTachLite(void *pHBA, int type);void CpqTsFreezeTachlite(void *pHBA, int type);void CpqTsUnFreezeTachlite(void *pHBA, int type);int CpqTsInitializeFrameManager(void *pHBA, int);int CpqTsLaserControl( void* addrBase, int opcode );int CpqTsReadWriteWWN(void*, int ReadWrite);int CpqTsReadWriteNVRAM(void*, void* data, int ReadWrite);void cpqfcTS_WorkTask( struct Scsi_Host *HostAdapter);void cpqfcTSWorkerThread( void *host);int cpqfcTS_GetNVRAM_data( UCHAR *wwnbuf, UCHAR *buf );ULONG cpqfcTS_ReadNVRAM( void* GPIOin, void* GPIOout , USHORT count,	UCHAR *buf );BOOLEAN tl_write_i2c_nvram( void* GPIOin, void* GPIOout,  USHORT startOffset,  // e.g. 0x2f for WWN start  USHORT count,  UCHAR *buf );// define misc functions int cpqfcTSGetLPSM( PTACHYON fcChip, char cErrorString[]);int cpqfcTSDecodeGBICtype( PTACHYON fcChip, char cErrorString[]);void* fcMemManager( struct pci_dev *pdev,		ALIGNED_MEM *dyn_mem_pair, ULONG n_alloc, ULONG ab,                   ULONG ulAlignedAddress, dma_addr_t *dma_handle);void BigEndianSwap(  UCHAR *source, UCHAR *dest,  USHORT cnt);//ULONG virt_to_phys( PVOID virtaddr );                  // Linux interrupt handlervoid cpqfcTS_intr_handler( int irq,void *dev_id,struct pt_regs *regs);void cpqfcTSheartbeat( unsigned long ptr );// The biggest Q element we deal with is Aborts - we// need 4 bytes for x_ID, and a Scsi_Cmnd (~284 bytes)//#define LINKQ_ITEM_SIZE ((4+sizeof(Scsi_Cmnd)+3)/4)#define LINKQ_ITEM_SIZE (3*16)typedef struct{  ULONG Type;              // e.g. LINKUP, SFQENTRY, PDISC, BLS_ABTS, ...  ULONG ulBuff[ LINKQ_ITEM_SIZE ];} LINKQ_ITEM;#define FC_LINKQ_DEPTH TACH_MAX_XIDtypedef struct{  ULONG producer;  ULONG consumer;  // when producer equals consumer, Q empty  LINKQ_ITEM Qitem[ FC_LINKQ_DEPTH ];} FC_LINK_QUE, *PFC_LINK_QUE;     // DPC routines post to here on Inbound SCSI frames     // User thread processes#define FC_SCSIQ_DEPTH 32typedef struct{  int Type;              // e.g. SCSI  ULONG ulBuff[ 3*16 ];} SCSIQ_ITEM;typedef struct{  ULONG producer;  ULONG consumer;  // when producer equals consumer, Q empty  SCSIQ_ITEM Qitem[ FC_SCSIQ_DEPTH ];} FC_SCSI_QUE, *PFC_SCSI_QUE;#define DYNAMIC_ALLOCATIONS 4  // Tachyon aligned allocations: ERQ,IMQ,SFQ,SEST// Linux space allocated per HBA (chip state, etc.)typedef struct {  struct Scsi_Host *HostAdapter; // back pointer to Linux Scsi struct  TACHYON fcChip;    // All Tachyon registers, Queues, functions  ALIGNED_MEM dynamic_mem[DYNAMIC_ALLOCATIONS];  struct pci_dev *PciDev;  dma_addr_t fcLQ_dma_handle;  Scsi_Cmnd *LinkDnCmnd[CPQFCTS_REQ_QUEUE_LEN]; // collects Cmnds during LDn                                                // (for Acceptable targets)  Scsi_Cmnd *BoardLockCmnd[CPQFCTS_REQ_QUEUE_LEN]; // SEST was full    Scsi_Cmnd *BadTargetCmnd[CPQFCTS_MAX_TARGET_ID]; // missing targets  u_char HBAnum;     // 0-based host number  struct timer_list cpqfcTStimer; // FC utility timer for implicit                                  // logouts, FC protocol timeouts, etc.  int fcStatsTime;  // Statistics delta reporting time  struct task_struct *worker_thread; // our kernel thread  int PortDiscDone;    // set by SendLogins(), cleared by LDn    struct semaphore *TachFrozen;  struct semaphore *TYOBcomplete;    // handshake for Tach outbound frames  struct semaphore *fcQueReady;      // FibreChannel work for our kernel thread  struct semaphore *notify_wt;       // synchronizes kernel thread kill  struct semaphore *BoardLock;    PFC_LINK_QUE fcLQ;             // the WorkerThread operates on this  spinlock_t hba_spinlock;           // held/released by WorkerThread} CPQFCHBA;#define	CPQ_SPINLOCK_HBA( x )   spin_lock(&x->hba_spinlock);#define CPQ_SPINUNLOCK_HBA(x)   spin_unlock(&x->hba_spinlock);void cpqfcTSImplicitLogout( CPQFCHBA* cpqfcHBAdata,		PFC_LOGGEDIN_PORT pFcPort);void cpqfcTSTerminateExchange( CPQFCHBA*, SCSI_NEXUS *target, int );PFC_LOGGEDIN_PORT fcPortLoggedIn(    CPQFCHBA *cpqfcHBAdata,    TachFCHDR_GCMND* fchs,    BOOLEAN,    BOOLEAN);void fcProcessLoggedIn(    CPQFCHBA *cpqfcHBAdata, TachFCHDR_GCMND* fchs);ULONG cpqfcTSBuildExchange(   CPQFCHBA *cpqfcHBAdata,  ULONG type, // e.g. PLOGI  TachFCHDR_GCMND* InFCHS,  // incoming FCHS  void *Data,               // the CDB, scatter/gather, etc.    LONG *ExchangeID );       // allocated exchange IDULONG cpqfcTSStartExchange(   CPQFCHBA *cpqfcHBAdata,  LONG ExchangeID );void cpqfcTSCompleteExchange(        struct pci_dev *pcidev,       PTACHYON fcChip,        ULONG exchange_ID);PFC_LOGGEDIN_PORT  fcFindLoggedInPort(   PTACHYON fcChip,   Scsi_Cmnd *Cmnd,  // (We want the channel/target/lun Nexus from Cmnd)  ULONG port_id,  // search linked list for al_pa, or  UCHAR wwn[8],    // search linked list for WWN, or...  PFC_LOGGEDIN_PORT *pLastLoggedInPort);void cpqfcTSPutLinkQue(   CPQFCHBA *cpqfcHBAdata,   int Type,   void *QueContent);void fcPutScsiQue(   CPQFCHBA *cpqfcHBAdata,   int Type,   void *QueContent);void fcLinkQReset(   CPQFCHBA *);void fcScsiQReset(   CPQFCHBA *);void fcSestReset(   CPQFCHBA *);void cpqfc_pci_unmap(struct pci_dev *pcidev, 	Scsi_Cmnd *cmd, 	PTACHYON fcChip, 	ULONG x_ID);extern const UCHAR valid_al_pa[];extern const int number_of_al_pa;#define FCP_RESID_UNDER   0x80000#define FCP_RESID_OVER    0x40000#define FCP_SNS_LEN_VALID 0x20000#define FCP_RSP_LEN_VALID 0x10000// RSP_CODE definitions (dpANS Fibre Channel Protocol for SCSI, pg 34)#define FCP_DATA_LEN_NOT_BURST_LEN 0x1000000#define FCP_CMND_FIELD_INVALID     0x2000000#define FCP_DATA_RO_NOT_XRDY_RO    0x3000000#define FCP_TASKFUNCTION_NS        0x4000000#define FCP_TASKFUNCTION_FAIL      0x5000000// FCP-SCSI response status structtypedef struct  // see "TachFCHDR_RSP" definition - 64 bytes{  __u32 reserved;  __u32 reserved1;  __u32 fcp_status;    // field validity and SCSI status  __u32 fcp_resid;  __u32 fcp_sns_len;   // length of FCP_SNS_INFO field  __u32 fcp_rsp_len;   // length of FCP_RSP_INFO field (expect 8)  __u32 fcp_rsp_info;  // 4 bytes of FCP protocol response information  __u32 fcp_rsp_info2; // (4 more bytes, since most implementations use 8)  __u8  fcp_sns_info[36]; // bytes for SCSI sense (ASC, ASCQ)} FCP_STATUS_RESPONSE, *PFCP_STATUS_RESPONSE;// Fabric State Change Registrationtypedef struct scrpl{  __u32 command;  __u32 function;} SCR_PL;// Fabric Name Service Requesttypedef struct nsrpl{  __u32 CT_Rev;  // (& IN_ID)   WORD 0  __u32 FCS_Type;            // WORD 1  __u32 Command_code;        // WORD 2  __u32 reason_code;         // WORD 3  __u32 FCP;                 // WORD 4 (lower byte)  } NSR_PL;// "FC.H"#define MAX_RX_SIZE		0x800	// Max Receive Buffer Size is 2048#define MIN_RX_SIZE		0x100	// Min Size is 256, per FC-PLDA Spec#define	MAX_TARGET_RXIDS	SEST_DEPTH#define TARGET_RX_SIZE		SEST_BUFFER_LENGTH#define CLASS_1			0x01#define CLASS_2			0x02#define CLASS_3			0x03#define FC_PH42			0x08#define FC_PH43			0x09#define FC_PH3			0x20#define RR_TOV			2	// Minimum Time for target to wait for					// PDISC after a LIP.#define E_D_TOV			2	// Minimum Time to wait for Sequence					// Completion.#define R_A_TOV			0	// Minimum Time for Target to wait 					// before reclaiming resources.////	R_CTL Field////	Routing Bits (31-28)//#define FC4_DEVICE_DATA		0x00000000#define EXT_LINK_DATA		0x20000000#define FC4_LINK_DATA		0x30000000#define VIDEO_DATA		0x40000000#define BASIC_LINK_DATA		0x80000000#define LINK_CONTROL		0xC0000000#define ROUTING_MASK		0xF0000000////	Information Bits (27-24)//#define UNCAT_INFORMATION	0x00000000#define SOLICITED_DATA		0x01000000#define UNSOLICITED_CONTROL	0x02000000#define SOLICITED_CONTROL	0x03000000#define UNSOLICITED_DATA	0x04000000#define DATA_DESCRIPTOR		0x05000000#define UNSOLICITED_COMMAND	0x06000000#define COMMAND_STATUS		0x07000000#define INFO_MASK		0x0F000000////	(Link Control Codes)//#define ACK_1			0x00000000#define ACK_0_OR_N		0x01000000#define P_RJT			0x02000000 #define F_RJT			0x03000000 #define P_BSY			0x04000000#define FABRIC_BUSY_TO_DF	0x05000000	// Fabric Busy to Data Frame#define FABRIC_BUSY_TO_LC	0x06000000	// Fabric Busy to Link Ctl Frame#define LINK_CREDIT_RESET	0x07000000////	(Link Service Command Codes)////#define LS_RJT			0x01000000	// LS Reject#define LS_ACC			0x02000000	// LS Accept#define LS_PLOGI		0x03000000	// N_PORT Login#define LS_FLOGI		0x04000000	// F_PORT Login#define LS_LOGO			0x05000000	// Logout#define LS_ABTX			0x06000000	// Abort Exchange#define LS_RCS			0x07000000	// Read Connection Status#define LS_RES			0x08000000	// Read Exchange Status#define LS_RSS			0x09000000	// Read Sequence Status#define LS_RSI			0x0A000000	// Request Seq Initiative

⌨️ 快捷键说明

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