fcp_impl.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
- /* fcp_impl.h: Generic SCSI on top of FC4 - our interface defines.
- *
- * Copyright (C) 1997-1999 Jakub Jelinek (jj@ultra.linux.cz)
- * Copyright (C) 1998 Jirka Hanika (geo@ff.cuni.cz)
- */
- #ifndef _FCP_SCSI_H
- #define _FCP_SCSI_H
- #include <linux/types.h>
- #include <linux/blk.h>
- #include "../scsi/scsi.h"
- #include "fc.h"
- #include "fcp.h"
- #include "fc-al.h"
- #include <asm/io.h>
- #ifdef __sparc__
- #include <asm/sbus.h>
- #endif
- /* 0 or 1 */
- #define FCP_SCSI_USE_NEW_EH_CODE 0
- #define FC_CLASS_OUTBOUND 0x01
- #define FC_CLASS_INBOUND 0x02
- #define FC_CLASS_SIMPLE 0x03
- #define FC_CLASS_IO_WRITE 0x04
- #define FC_CLASS_IO_READ 0x05
- #define FC_CLASS_UNSOLICITED 0x06
- #define FC_CLASS_OFFLINE 0x08
- #define PROTO_OFFLINE 0x02
- #define PROTO_REPORT_AL_MAP 0x03
- #define PROTO_FORCE_LIP 0x06
- struct _fc_channel;
- typedef struct fcp_cmnd {
- struct fcp_cmnd *next;
- struct fcp_cmnd *prev;
- void (*done)(Scsi_Cmnd *);
- unsigned short proto;
- unsigned short token;
- unsigned int did;
- /* FCP SCSI stuff */
- dma_addr_t data;
- /* From now on this cannot be touched for proto == TYPE_SCSI_FCP */
- fc_hdr fch;
- dma_addr_t cmd;
- dma_addr_t rsp;
- int cmdlen;
- int rsplen;
- int class;
- int datalen;
- /* This is just used as a verification during login */
- struct _fc_channel *fc;
- void *ls;
- } fcp_cmnd;
- typedef struct {
- unsigned int len;
- unsigned char list[0];
- } fcp_posmap;
- typedef struct _fc_channel {
- struct _fc_channel *next;
- int irq;
- int state;
- int sid;
- int did;
- char name[16];
- void (*fcp_register)(struct _fc_channel *, u8, int);
- void (*reset)(struct _fc_channel *);
- int (*hw_enque)(struct _fc_channel *, fcp_cmnd *);
- fc_wwn wwn_node;
- fc_wwn wwn_nport;
- fc_wwn wwn_dest;
- common_svc_parm *common_svc;
- svc_parm *class_svcs;
- #ifdef __sparc__
- struct sbus_dev *dev;
- #else
- struct pci_dev *dev;
- #endif
- struct module *module;
- /* FCP SCSI stuff */
- short can_queue;
- short abort_count;
- int rsp_size;
- fcp_cmd *scsi_cmd_pool;
- char *scsi_rsp_pool;
- dma_addr_t dma_scsi_cmd, dma_scsi_rsp;
- long *scsi_bitmap;
- long scsi_bitmap_end;
- int scsi_free;
- int (*encode_addr)(Scsi_Cmnd *, u16 *, struct _fc_channel *, fcp_cmnd *);
- fcp_cmnd *scsi_que;
- char scsi_name[4];
- fcp_cmnd **cmd_slots;
- int channels;
- int targets;
- long *ages;
- Scsi_Cmnd *rst_pkt;
- fcp_posmap *posmap;
- /* LOGIN stuff */
- fcp_cmnd *login;
- void *ls;
- } fc_channel;
- extern fc_channel *fc_channels;
- #define FC_STATE_UNINITED 0
- #define FC_STATE_ONLINE 1
- #define FC_STATE_OFFLINE 2
- #define FC_STATE_RESETING 3
- #define FC_STATE_FPORT_OK 4
- #define FC_STATE_MAYBEOFFLINE 5
- #define FC_STATUS_OK 0
- #define FC_STATUS_P_RJT 2
- #define FC_STATUS_F_RJT 3
- #define FC_STATUS_P_BSY 4
- #define FC_STATUS_F_BSY 5
- #define FC_STATUS_ERR_OFFLINE 0x11
- #define FC_STATUS_TIMEOUT 0x12
- #define FC_STATUS_ERR_OVERRUN 0x13
- #define FC_STATUS_POINTTOPOINT 0x15
- #define FC_STATUS_AL 0x16
- #define FC_STATUS_UNKNOWN_CQ_TYPE 0x20
- #define FC_STATUS_BAD_SEG_CNT 0x21
- #define FC_STATUS_MAX_XCHG_EXCEEDED 0x22
- #define FC_STATUS_BAD_XID 0x23
- #define FC_STATUS_XCHG_BUSY 0x24
- #define FC_STATUS_BAD_POOL_ID 0x25
- #define FC_STATUS_INSUFFICIENT_CQES 0x26
- #define FC_STATUS_ALLOC_FAIL 0x27
- #define FC_STATUS_BAD_SID 0x28
- #define FC_STATUS_NO_SEQ_INIT 0x29
- #define FC_STATUS_TIMED_OUT -1
- #define FC_STATUS_BAD_RSP -2
- void fcp_queue_empty(fc_channel *);
- int fcp_init(fc_channel *);
- void fcp_release(fc_channel *fc_chain, int count);
- void fcp_receive_solicited(fc_channel *, int, int, int, fc_hdr *);
- void fcp_state_change(fc_channel *, int);
- int fc_do_plogi(fc_channel *, unsigned char, fc_wwn *, fc_wwn *);
- int fc_do_prli(fc_channel *, unsigned char);
- #define for_each_fc_channel(fc)
- for (fc = fc_channels; fc; fc = fc->next)
-
- #define for_each_online_fc_channel(fc)
- for_each_fc_channel(fc)
- if (fc->state == FC_STATE_ONLINE)
- int fcp_scsi_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
- int fcp_old_abort(Scsi_Cmnd *);
- int fcp_scsi_abort(Scsi_Cmnd *);
- int fcp_scsi_dev_reset(Scsi_Cmnd *);
- int fcp_scsi_bus_reset(Scsi_Cmnd *);
- int fcp_scsi_host_reset(Scsi_Cmnd *);
- #endif /* !(_FCP_SCSI_H) */