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

📄 megaraid.h

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __MEGARAID_H__#define __MEGARAID_H__#ifndef LINUX_VERSION_CODE#include <linux/version.h>#endif#define IN_ISR                  0x80000000L#define IN_ABORT                0x40000000L#define IN_RESET                0x20000000L#define IN_QUEUE                0x10000000L#define BOARD_QUARTZ            0x08000000L#define BOARD_40LD              0x04000000L#ifndef HOSTS_C#define SCB_FREE     0x0#define SCB_ACTIVE   0x1#define SCB_WAITQ    0x2#define SCB_ISSUED   0x3#define SCB_COMPLETE 0x4#define SCB_ABORTED  0x5#define SCB_RESET    0x6#endif#define MEGA_CMD_TIMEOUT        10/* Feel free to fiddle with these.. max values are:   SGLIST     0..26   COMMANDS   0..253   CMDPERLUN  0..63*/#define MAX_SGLIST              0x1A#define MAX_COMMANDS            127#define MAX_CMD_PER_LUN         63#define MAX_FIRMWARE_STATUS     46#define MAX_LOGICAL_DRIVES      8#define MAX_CHANNEL             5#define MAX_TARGET              15#define MAX_PHYSICAL_DRIVES     MAX_CHANNEL*MAX_TARGET#define INQUIRY_DATA_SIZE       0x24#define MAX_CDB_LEN             0x0A#define MAX_REQ_SENSE_LEN       0x20#define INTR_VALID              0x40/* Mailbox commands */#define MEGA_MBOXCMD_LREAD      0x01#define MEGA_MBOXCMD_LWRITE     0x02#define MEGA_MBOXCMD_PASSTHRU   0x03#define MEGA_MBOXCMD_ADAPTERINQ 0x05/* Offsets into Mailbox */#define COMMAND_PORT       0x00#define COMMAND_ID_PORT    0x01#define SG_LIST_PORT0      0x08#define SG_LIST_PORT1      0x09#define SG_LIST_PORT2      0x0a#define SG_LIST_PORT3      0x0b#define SG_ELEMENT_PORT    0x0d#define NO_FIRED_PORT      0x0f/* I/O Port offsets */#define I_CMD_PORT         0x00#define I_ACK_PORT         0x00#define I_TOGGLE_PORT      0x01#define INTR_PORT          0x0a#define MAILBOX_SIZE       (sizeof(mega_mailbox)-16)#define MBOX_BUSY_PORT     0x00#define MBOX_PORT0         0x04#define MBOX_PORT1         0x05#define MBOX_PORT2         0x06#define MBOX_PORT3         0x07#define ENABLE_MBOX_REGION 0x0B/* I/O Port Values */#define ISSUE_BYTE         0x10#define ACK_BYTE           0x08#define ENABLE_INTR_BYTE   0xc0#define DISABLE_INTR_BYTE  0x00#define VALID_INTR_BYTE    0x40#define MBOX_BUSY_BYTE     0x10#define ENABLE_MBOX_BYTE   0x00/* Setup some port macros here */#define WRITE_MAILBOX(base,offset,value)   *(base+offset)=value#define READ_MAILBOX(base,offset)          *(base+offset)#define WRITE_PORT(base,offset,value)      outb_p(value,base+offset)#define READ_PORT(base,offset)             inb_p(base+offset)#define ISSUE_COMMAND(base)   WRITE_PORT(base,I_CMD_PORT,ISSUE_BYTE)#define CLEAR_INTR(base)      WRITE_PORT(base,I_ACK_PORT,ACK_BYTE)#define ENABLE_INTR(base)     WRITE_PORT(base,I_TOGGLE_PORT,ENABLE_INTR_BYTE)#define DISABLE_INTR(base)    WRITE_PORT(base,I_TOGGLE_PORT,DISABLE_INTR_BYTE)/* Define AMI's PCI codes */#undef PCI_VENDOR_ID_AMI#undef PCI_DEVICE_ID_AMI_MEGARAID#ifndef PCI_VENDOR_ID_AMI#define PCI_VENDOR_ID_AMI          0x101E#define PCI_DEVICE_ID_AMI_MEGARAID 0x9010#endif#define PCI_CONF_BASE_ADDR_OFFSET  0x10#define PCI_CONF_IRQ_OFFSET        0x3c#define PCI_CONF_AMISIG            0xa0#define AMI_SIGNATURE              0x3344#define AMI_SIGNATURE_471          0xCCCC#if LINUX_VERSION_CODE < 0x20100#define MEGARAID \  { NULL,                               /* Next                      */\    NULL,                               /* Usage Count Pointer       */\    NULL,                               /* /proc Directory Entry     */\    megaraid_proc_info,                 /* /proc Info Function       */\    "MegaRAID",                         /* Driver Name               */\    megaraid_detect,                    /* Detect Host Adapter       */\    megaraid_release,                   /* Release Host Adapter      */\    megaraid_info,                      /* Driver Info Function      */\    megaraid_command,                   /* Command Function          */\    megaraid_queue,                     /* Queue Command Function    */\    megaraid_abort,                     /* Abort Command Function    */\    megaraid_reset,                     /* Reset Command Function    */\    NULL,                               /* Slave Attach Function     */\    megaraid_biosparam,                 /* Disk BIOS Parameters      */\    MAX_COMMANDS,                       /* # of cmds that can be\                                           outstanding at any time */\    7,                                  /* HBA Target ID             */\    MAX_SGLIST,                         /* Scatter/Gather Table Size */\    MAX_CMD_PER_LUN,                    /* SCSI Commands per LUN     */\    0,                                  /* Present                   */\    0,                                  /* Default Unchecked ISA DMA */\    ENABLE_CLUSTERING }		/* Enable Clustering         */#else#define MEGARAID \  {\    name:            "MegaRAID",               /* Driver Name               */\    proc_info:        megaraid_proc_info,      /* /proc driver info         */\    detect:           megaraid_detect,         /* Detect Host Adapter       */\    release:          megaraid_release,        /* Release Host Adapter      */\    info:             megaraid_info,           /* Driver Info Function      */\    command:          megaraid_command,        /* Command Function          */\    queuecommand:     megaraid_queue,          /* Queue Command Function    */\    abort:            megaraid_abort,          /* Abort Command Function    */\    reset:            megaraid_reset,          /* Reset Command Function    */\    bios_param:       megaraid_biosparam,      /* Disk BIOS Parameters      */\    can_queue:        MAX_COMMANDS,            /* Can Queue                 */\    this_id:          7,                       /* HBA Target ID             */\    sg_tablesize:     MAX_SGLIST,              /* Scatter/Gather Table Size */\    cmd_per_lun:      MAX_CMD_PER_LUN,         /* SCSI Commands per LUN     */\    present:          0,                       /* Present                   */\    unchecked_isa_dma:0,                       /* Default Unchecked ISA DMA */\    use_clustering:   ENABLE_CLUSTERING        /* Enable Clustering         */\  }#endif/*********************************************************************** * Structure Declarations for the Firmware supporting 40 Logical Drives * and 256 Physical Drives. ***********************************************************************/#define FC_MAX_LOGICAL_DRIVES       40#define FC_MAX_LOG_DEVICES          FC_MAX_LOGICAL_DRIVES#define FC_MAX_SPAN_DEPTH           8#define FC_MAX_ROW_SIZE             32#define FC_MAX_CHANNELS             16#define FC_MAX_TARGETS_PER_CHANNEL  16#define FC_MAX_PHYSICAL_DEVICES     256#define FC_NEW_CONFIG               0xA1#define DCMD_FC_CMD                 0xA1  #define NC_SUBOP_PRODUCT_INFO       0x0E  #define NC_SUBOP_ENQUIRY3           0x0F	#define ENQ3_GET_SOLICITED_NOTIFY_ONLY  0x01	#define ENQ3_GET_SOLICITED_FULL         0x02	#define ENQ3_GET_UNSOLICITED            0x03/******************************************** * PRODUCT_INFO Strucure ********************************************/#define SIG_40LOG_32STR_8SPN  0x00282008/*  * Utilities declare this strcture size as 1024 bytes. So more fields can * be added in future. */struct MRaidProductInfo{   u32   DataSize; /* current size in bytes (not including resvd) */   u32   ConfigSignature;                         /* Current value is 0x00282008                          * 0x28=MAX_LOGICAL_DRIVES,                           * 0x20=Number of stripes and                           * 0x08=Number of spans */   u8   FwVer[16];         /* printable ASCI string */   u8   BiosVer[16];       /* printable ASCI string */   u8   ProductName[80];   /* printable ASCI string */   u8   MaxConcCmds;       /* Max. concurrent commands supported */   u8   SCSIChanPresent;   /* Number of SCSI Channels detected */   u8   FCLoopPresent;     /* Number of Fibre Loops detected */   u8   memType;           /* EDO, FPM, SDRAM etc */   u32   signature;   u16  DramSize;          /* In terms of MB */   u16  subSystemID;   u16  subSystemVendorID;   u8   numNotifyCounters;   u8   pad1k[889];       /* 135 + 889 resvd = 1024 total size */}__attribute__((packed));typedef struct MRaidProductInfo megaRaidProductInfo;/******************************************** * Standard ENQUIRY Strucure ********************************************/struct FC_ADP_INFO{   u8  MaxConcCmds;         /* Max. concurrent commands supported. */   u8  RbldRate;            /* Rebuild Rate. Varies from 0%-100% */   u8  MaxTargPerChan;      /* Max. Targets supported per chan. */   u8  ChanPresent;         /* No. of Chans present on this adapter. */   u8  FwVer[4];            /* Firmware version. */   u16 AgeOfFlash;          /* No. of times FW has been downloaded. */   u8  ChipSetValue;        /* Contents of 0xC0000832 */   u8  DramSize;            /* In terms of MB */   u8  CacheFlushInterval;  /* In terms of Seconds */   u8  BiosVersion[4];   u8  BoardType;   u8  sense_alert;   u8  write_config_count;   /* Increase with evry configuration change */   u8  drive_inserted_count; /* Increase with every drive inserted */   u8  inserted_drive;       /* Channel: Id of inserted drive */   u8  battery_status;                           /*                              BIT 0 : battery module missing                              BIT 1 : VBAD                              BIT 2 : temp high                              BIT 3 : battery pack missing                              BIT 4,5 : 00 - charge complete                                        01 - fast charge in prog                                        10 - fast charge fail                                        11 - undefined                              BIt 6 : counter > 1000                              Bit 7 : undefined                           */   u8  dec_fault_bus_info;   /* was resvd */}__attribute__((packed));struct FC_LDRV_INFO{   u8  NumLDrv;      /* No. of Log. Drvs configured. */   u8  recon_state[FC_MAX_LOGICAL_DRIVES/8];                                    /* bit field for State of reconstruct */   u16 LDrvOpStatus[FC_MAX_LOGICAL_DRIVES/8];                                   /* bit field Status of Long Operations. */   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. */}__attribute__((packed));#define PREVSTAT_MASK   0xf0#define CURRSTAT_MASK   0x0fstruct FC_PDRV_INFO{   u8 PDrvState[FC_MAX_PHYSICAL_DEVICES]; /* State of Phys Drvs. */}__attribute__((packed));struct FC_AdapterInq{   struct FC_ADP_INFO    AdpInfo;   struct FC_LDRV_INFO   LogdrvInfo;   struct FC_PDRV_INFO   PhysdrvInfo;}__attribute__((packed));typedef struct FC_AdapterInq  mega_RAIDINQ_FC;/******************************************** * NOTIFICATION Strucure ********************************************/#define MAX_NOTIFY_SIZE     0x80#define CUR_NOTIFY_SIZE     sizeof(struct MegaRAID_Notify)/*  * Utilities declare this strcture size as ?? bytes. So more fields can * be added in future. */struct MegaRAID_Notify{    u32   globalCounter;  /* Any change increments this counter */    u8   paramCounter;   /* Indicates any params changed  */    u8   paramId;        /* Param modified - defined below */    u16  paramVal;       /* New val of last param modified */    u8   writeConfigCounter; /* write config occurred */    u8   writeConfigRsvd[3];    u8   ldrvOpCounter;  /* Indicates ldrv op started/completed */    u8   ldrvOpId;       /* ldrv num */    u8   ldrvOpCmd;      /* ldrv operation - defined below */    u8   ldrvOpStatus;   /* status of the operation */    u8   ldrvStateCounter;   /* Indicates change of ldrv state */    u8   ldrvStateId;    /* ldrv num */    u8   ldrvStateNew;   /* New state */

⌨️ 快捷键说明

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