📄 aacraid.h
字号:
/* * Object-Server / Volume-Manager Dispatch Classes */#define VM_Null 0#define VM_NameServe 1#define VM_ContainerConfig 2#define VM_Ioctl 3#define VM_FilesystemIoctl 4#define VM_CloseAll 5#define VM_CtBlockRead 6#define VM_CtBlockWrite 7#define VM_SliceBlockRead 8 /* raw access to configured "storage objects" */#define VM_SliceBlockWrite 9#define VM_DriveBlockRead 10 /* raw access to physical devices */#define VM_DriveBlockWrite 11#define VM_EnclosureMgt 12 /* enclosure management */#define VM_Unused 13 /* used to be diskset management */#define VM_CtBlockVerify 14#define VM_CtPerf 15 /* performance test */#define VM_CtBlockRead64 16#define VM_CtBlockWrite64 17#define VM_CtBlockVerify64 18#define VM_CtHostRead64 19#define VM_CtHostWrite64 20#define VM_DrvErrTblLog 21#define VM_NameServe64 22#define MAX_VMCOMMAND_NUM 23 /* used for sizing stats array - leave last *//* * Descriptive information (eg, vital stats) * that a content manager might report. The * FileArray filesystem component is one example * of a content manager. Raw mode might be * another. */struct aac_fsinfo { __le32 fsTotalSize; /* Consumed by fs, incl. metadata */ __le32 fsBlockSize; __le32 fsFragSize; __le32 fsMaxExtendSize; __le32 fsSpaceUnits; __le32 fsMaxNumFiles; __le32 fsNumFreeFiles; __le32 fsInodeDensity;}; /* valid iff ObjType == FT_FILESYS && !(ContentState & FSCS_NOTCLEAN) */union aac_contentinfo { struct aac_fsinfo filesys; /* valid iff ObjType == FT_FILESYS && !(ContentState & FSCS_NOTCLEAN) */};/* * Query for Container Configuration Status */#define CT_GET_CONFIG_STATUS 147struct aac_get_config_status { __le32 command; /* VM_ContainerConfig */ __le32 type; /* CT_GET_CONFIG_STATUS */ __le32 parm1; __le32 parm2; __le32 parm3; __le32 parm4; __le32 parm5; __le32 count; /* sizeof(((struct aac_get_config_status_resp *)NULL)->data) */};#define CFACT_CONTINUE 0#define CFACT_PAUSE 1#define CFACT_ABORT 2struct aac_get_config_status_resp { __le32 response; /* ST_OK */ __le32 dummy0; __le32 status; /* CT_OK */ __le32 parm1; __le32 parm2; __le32 parm3; __le32 parm4; __le32 parm5; struct { __le32 action; /* CFACT_CONTINUE, CFACT_PAUSE or CFACT_ABORT */ __le16 flags; __le16 count; } data;};/* * Accept the configuration as-is */#define CT_COMMIT_CONFIG 152struct aac_commit_config { __le32 command; /* VM_ContainerConfig */ __le32 type; /* CT_COMMIT_CONFIG */};/* * Query for Container Configuration Status */#define CT_GET_CONTAINER_COUNT 4struct aac_get_container_count { __le32 command; /* VM_ContainerConfig */ __le32 type; /* CT_GET_CONTAINER_COUNT */};struct aac_get_container_count_resp { __le32 response; /* ST_OK */ __le32 dummy0; __le32 MaxContainers; __le32 ContainerSwitchEntries; __le32 MaxPartitions;};/* * Query for "mountable" objects, ie, objects that are typically * associated with a drive letter on the client (host) side. */struct aac_mntent { __le32 oid; u8 name[16]; /* if applicable */ struct creation_info create_info; /* if applicable */ __le32 capacity; __le32 vol; /* substrate structure */ __le32 obj; /* FT_FILESYS, FT_DATABASE, etc. */ __le32 state; /* unready for mounting, readonly, etc. */ union aac_contentinfo fileinfo; /* Info specific to content manager (eg, filesystem) */ __le32 altoid; /* != oid <==> snapshot or broken mirror exists */ __le32 capacityhigh;};#define FSCS_NOTCLEAN 0x0001 /* fsck is neccessary before mounting */#define FSCS_READONLY 0x0002 /* possible result of broken mirror */#define FSCS_HIDDEN 0x0004 /* should be ignored - set during a clear */struct aac_query_mount { __le32 command; __le32 type; __le32 count;};struct aac_mount { __le32 status; __le32 type; /* should be same as that requested */ __le32 count; struct aac_mntent mnt[1];};#define CT_READ_NAME 130struct aac_get_name { __le32 command; /* VM_ContainerConfig */ __le32 type; /* CT_READ_NAME */ __le32 cid; __le32 parm1; __le32 parm2; __le32 parm3; __le32 parm4; __le32 count; /* sizeof(((struct aac_get_name_resp *)NULL)->data) */};#define CT_OK 218struct aac_get_name_resp { __le32 dummy0; __le32 dummy1; __le32 status; /* CT_OK */ __le32 parm1; __le32 parm2; __le32 parm3; __le32 parm4; __le32 parm5; u8 data[16];};/* * The following command is sent to shut down each container. */struct aac_close { __le32 command; __le32 cid;};struct aac_query_disk{ s32 cnum; s32 bus; s32 id; s32 lun; u32 valid; u32 locked; u32 deleted; s32 instance; s8 name[10]; u32 unmapped;};struct aac_delete_disk { u32 disknum; u32 cnum;}; struct fib_ioctl{ u32 fibctx; s32 wait; char __user *fib;};struct revision{ u32 compat; __le32 version; __le32 build;}; /* * Ugly - non Linux like ioctl coding for back compat. */#define CTL_CODE(function, method) ( \ (4<< 16) | ((function) << 2) | (method) \)/* * Define the method codes for how buffers are passed for I/O and FS * controls */#define METHOD_BUFFERED 0#define METHOD_NEITHER 3/* * Filesystem ioctls */#define FSACTL_SENDFIB CTL_CODE(2050, METHOD_BUFFERED)#define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED)#define FSACTL_DELETE_DISK 0x163#define FSACTL_QUERY_DISK 0x173#define FSACTL_OPEN_GET_ADAPTER_FIB CTL_CODE(2100, METHOD_BUFFERED)#define FSACTL_GET_NEXT_ADAPTER_FIB CTL_CODE(2101, METHOD_BUFFERED)#define FSACTL_CLOSE_GET_ADAPTER_FIB CTL_CODE(2102, METHOD_BUFFERED)#define FSACTL_MINIPORT_REV_CHECK CTL_CODE(2107, METHOD_BUFFERED)#define FSACTL_GET_PCI_INFO CTL_CODE(2119, METHOD_BUFFERED)#define FSACTL_FORCE_DELETE_DISK CTL_CODE(2120, METHOD_NEITHER)#define FSACTL_GET_CONTAINERS 2131#define FSACTL_SEND_LARGE_FIB CTL_CODE(2138, METHOD_BUFFERED)struct aac_common{ /* * If this value is set to 1 then interrupt moderation will occur * in the base commuication support. */ u32 irq_mod; u32 peak_fibs; u32 zero_fibs; u32 fib_timeouts; /* * Statistical counters in debug mode */#ifdef DBG u32 FibsSent; u32 FibRecved; u32 NoResponseSent; u32 NoResponseRecved; u32 AsyncSent; u32 AsyncRecved; u32 NormalSent; u32 NormalRecved;#endif};extern struct aac_common aac_config;/* * The following macro is used when sending and receiving FIBs. It is * only used for debugging. */ #ifdef DBG#define FIB_COUNTER_INCREMENT(counter) (counter)++#else#define FIB_COUNTER_INCREMENT(counter) #endif/* * Adapter direct commands * Monitor/Kernel API */#define BREAKPOINT_REQUEST 0x00000004#define INIT_STRUCT_BASE_ADDRESS 0x00000005#define READ_PERMANENT_PARAMETERS 0x0000000a#define WRITE_PERMANENT_PARAMETERS 0x0000000b#define HOST_CRASHING 0x0000000d#define SEND_SYNCHRONOUS_FIB 0x0000000c#define COMMAND_POST_RESULTS 0x00000014#define GET_ADAPTER_PROPERTIES 0x00000019#define GET_DRIVER_BUFFER_PROPERTIES 0x00000023#define RCV_TEMP_READINGS 0x00000025#define GET_COMM_PREFERRED_SETTINGS 0x00000026#define IOP_RESET 0x00001000#define RE_INIT_ADAPTER 0x000000ee/* * Adapter Status Register * * Phase Staus mailbox is 32bits: * <31:16> = Phase Status * <15:0> = Phase * * The adapter reports is present state through the phase. Only * a single phase should be ever be set. Each phase can have multiple * phase status bits to provide more detailed information about the * state of the board. Care should be taken to ensure that any phase * status bits that are set when changing the phase are also valid * for the new phase or be cleared out. Adapter software (monitor, * iflash, kernel) is responsible for properly maintining the phase * status mailbox when it is running. * * MONKER_API Phases * * Phases are bit oriented. It is NOT valid to have multiple bits set */ #define SELF_TEST_FAILED 0x00000004#define MONITOR_PANIC 0x00000020#define KERNEL_UP_AND_RUNNING 0x00000080#define KERNEL_PANIC 0x00000100/* * Doorbell bit defines */#define DoorBellSyncCmdAvailable (1<<0) /* Host -> Adapter */#define DoorBellPrintfDone (1<<5) /* Host -> Adapter */#define DoorBellAdapterNormCmdReady (1<<1) /* Adapter -> Host */#define DoorBellAdapterNormRespReady (1<<2) /* Adapter -> Host */#define DoorBellAdapterNormCmdNotFull (1<<3) /* Adapter -> Host */#define DoorBellAdapterNormRespNotFull (1<<4) /* Adapter -> Host */#define DoorBellPrintfReady (1<<5) /* Adapter -> Host *//* * For FIB communication, we need all of the following things * to send back to the user. */ #define AifCmdEventNotify 1 /* Notify of event */#define AifEnConfigChange 3 /* Adapter configuration change */#define AifEnContainerChange 4 /* Container configuration change */#define AifEnDeviceFailure 5 /* SCSI device failed */#define AifEnAddContainer 15 /* A new array was created */#define AifEnDeleteContainer 16 /* A container was deleted */#define AifEnExpEvent 23 /* Firmware Event Log */#define AifExeFirmwarePanic 3 /* Firmware Event Panic */#define AifHighPriority 3 /* Highest Priority Event */#define AifCmdJobProgress 2 /* Progress report */#define AifJobCtrZero 101 /* Array Zero progress */#define AifJobStsSuccess 1 /* Job completes */#define AifJobStsRunning 102 /* Job running */#define AifCmdAPIReport 3 /* Report from other user of API */#define AifCmdDriverNotify 4 /* Notify host driver of event */#define AifDenMorphComplete 200 /* A morph operation completed */#define AifDenVolumeExtendComplete 201 /* A volume extend completed */#define AifReqJobList 100 /* Gets back complete job list */#define AifReqJobsForCtr 101 /* Gets back jobs for specific container */#define AifReqJobsForScsi 102 /* Gets back jobs for specific SCSI device */ #define AifReqJobReport 103 /* Gets back a specific job report or list of them */ #define AifReqTerminateJob 104 /* Terminates job */#define AifReqSuspendJob 105 /* Suspends a job */#define AifReqResumeJob 106 /* Resumes a job */ #define AifReqSendAPIReport 107 /* API generic report requests */#define AifReqAPIJobStart 108 /* Start a job from the API */#define AifReqAPIJobUpdate 109 /* Update a job report from the API */#define AifReqAPIJobFinish 110 /* Finish a job from the API *//* * Adapter Initiated FIB command structures. Start with the adapter * initiated FIBs that really come from the adapter, and get responded * to by the host. */struct aac_aifcmd { __le32 command; /* Tell host what type of notify this is */ __le32 seqnum; /* To allow ordering of reports (if necessary) */ u8 data[1]; /* Undefined length (from kernel viewpoint) */};/** * Convert capacity to cylinders * accounting for the fact capacity could be a 64 bit value * */static inline u32 cap_to_cyls(sector_t capacity, u32 divisor){ sector_div(capacity, divisor); return (u32)capacity;}struct scsi_cmnd;const char *aac_driverinfo(struct Scsi_Host *);struct fib *fib_alloc(struct aac_dev *dev);int fib_setup(struct aac_dev *dev);void fib_map_free(struct aac_dev *dev);void fib_free(struct fib * context);void fib_init(struct fib * context);void aac_printf(struct aac_dev *dev, u32 val);int fib_send(u16 command, struct fib * context, unsigned long size, int priority, int wait, int reply, fib_callback callback, void *ctxt);int aac_consumer_get(struct aac_dev * dev, struct aac_queue * q, struct aac_entry **entry);void aac_consumer_free(struct aac_dev * dev, struct aac_queue * q, u32 qnum);int fib_complete(struct fib * context);#define fib_data(fibctx) ((void *)(fibctx)->hw_fib->data)struct aac_dev *aac_init_adapter(struct aac_dev *dev);int aac_get_config_status(struct aac_dev *dev);int aac_get_containers(struct aac_dev *dev);int aac_scsi_cmd(struct scsi_cmnd *cmd);int aac_dev_ioctl(struct aac_dev *dev, int cmd, void __user *arg);int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg);int aac_rx_init(struct aac_dev *dev);int aac_rkt_init(struct aac_dev *dev);int aac_sa_init(struct aac_dev *dev);unsigned int aac_response_normal(struct aac_queue * q);unsigned int aac_command_normal(struct aac_queue * q);unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index);int aac_command_thread(struct aac_dev * dev);int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context *fibctx);int fib_adapter_complete(struct fib * fibptr, unsigned short size);struct aac_driver_ident* aac_get_driver_ident(int devtype);int aac_get_adapter_info(struct aac_dev* dev);int aac_send_shutdown(struct aac_dev *dev);int probe_container(struct aac_dev *dev, int cid);extern int numacb;extern int acbsize;extern char aac_driver_version[];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -