📄 mbox_defs.h
字号:
/* * * Linux MegaRAID Unified device driver * * Copyright (c) 2003-2004 LSI Logic Corporation. * * 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 of the License, or (at your option) any later version. * * FILE : mbox_defs.h * */#ifndef _MRAID_MBOX_DEFS_H_#define _MRAID_MBOX_DEFS_H_#include <linux/types.h>/* * Commands and states for mailbox based controllers */#define MBOXCMD_LREAD 0x01#define MBOXCMD_LWRITE 0x02#define MBOXCMD_PASSTHRU 0x03#define MBOXCMD_ADPEXTINQ 0x04#define MBOXCMD_ADAPTERINQ 0x05#define MBOXCMD_LREAD64 0xA7#define MBOXCMD_LWRITE64 0xA8#define MBOXCMD_PASSTHRU64 0xC3#define MBOXCMD_EXTPTHRU 0xE3#define MAIN_MISC_OPCODE 0xA4#define GET_MAX_SG_SUPPORT 0x01#define SUPPORT_EXT_CDB 0x16#define FC_NEW_CONFIG 0xA1#define NC_SUBOP_PRODUCT_INFO 0x0E#define NC_SUBOP_ENQUIRY3 0x0F#define ENQ3_GET_SOLICITED_FULL 0x02#define OP_DCMD_READ_CONFIG 0x04#define NEW_READ_CONFIG_8LD 0x67#define READ_CONFIG_8LD 0x07#define FLUSH_ADAPTER 0x0A#define FLUSH_SYSTEM 0xFE/* * Command for random deletion of logical drives */#define FC_DEL_LOGDRV 0xA4#define OP_SUP_DEL_LOGDRV 0x2A#define OP_GET_LDID_MAP 0x18#define OP_DEL_LOGDRV 0x1C/* * BIOS commands */#define IS_BIOS_ENABLED 0x62#define GET_BIOS 0x01#define CHNL_CLASS 0xA9#define GET_CHNL_CLASS 0x00#define SET_CHNL_CLASS 0x01#define CH_RAID 0x01#define CH_SCSI 0x00#define BIOS_PVT_DATA 0x40#define GET_BIOS_PVT_DATA 0x00/* * Commands to support clustering */#define GET_TARGET_ID 0x7D#define CLUSTER_OP 0x70#define GET_CLUSTER_MODE 0x02#define CLUSTER_CMD 0x6E#define RESERVE_LD 0x01#define RELEASE_LD 0x02#define RESET_RESERVATIONS 0x03#define RESERVATION_STATUS 0x04#define RESERVE_PD 0x05#define RELEASE_PD 0x06/* * Module battery status */#define BATTERY_MODULE_MISSING 0x01#define BATTERY_LOW_VOLTAGE 0x02#define BATTERY_TEMP_HIGH 0x04#define BATTERY_PACK_MISSING 0x08#define BATTERY_CHARGE_MASK 0x30#define BATTERY_CHARGE_DONE 0x00#define BATTERY_CHARGE_INPROG 0x10#define BATTERY_CHARGE_FAIL 0x20#define BATTERY_CYCLES_EXCEEDED 0x40/* * Physical drive states. */#define PDRV_UNCNF 0#define PDRV_ONLINE 3#define PDRV_FAILED 4#define PDRV_RBLD 5#define PDRV_HOTSPARE 6/* * Raid logical drive states. */#define RDRV_OFFLINE 0#define RDRV_DEGRADED 1#define RDRV_OPTIMAL 2#define RDRV_DELETED 3/* * Read, write and cache policies */#define NO_READ_AHEAD 0#define READ_AHEAD 1#define ADAP_READ_AHEAD 2#define WRMODE_WRITE_THRU 0#define WRMODE_WRITE_BACK 1#define CACHED_IO 0#define DIRECT_IO 1#define MAX_LOGICAL_DRIVES_8LD 8#define MAX_LOGICAL_DRIVES_40LD 40#define FC_MAX_PHYSICAL_DEVICES 256#define MAX_MBOX_CHANNELS 5#define MAX_MBOX_TARGET 15#define MBOX_MAX_PHYSICAL_DRIVES MAX_MBOX_CHANNELS*MAX_MBOX_TARGET#define MAX_ROW_SIZE_40LD 32#define MAX_ROW_SIZE_8LD 8#define SPAN_DEPTH_8_SPANS 8#define SPAN_DEPTH_4_SPANS 4#define MAX_REQ_SENSE_LEN 0x20/** * struct mbox_t - Driver and f/w handshake structure. * @cmd : firmware command * @cmdid : command id * @numsectors : number of sectors to be transferred * @lba : Logical Block Address on LD * @xferaddr : DMA address for data transfer * @logdrv : logical drive number * @numsge : number of scatter gather elements in sg list * @resvd : reserved * @busy : f/w busy, must wait to issue more commands. * @numstatus : number of commands completed. * @status : status of the commands completed * @completed : array of completed command ids. * @poll : poll and ack sequence * @ack : poll and ack sequence * * The central handshake structure between the driver and the firmware. This * structure must be allocated by the driver and aligned at 8-byte boundary. */#define MBOX_MAX_FIRMWARE_STATUS 46typedef struct { uint8_t cmd; uint8_t cmdid; uint16_t numsectors; uint32_t lba; uint32_t xferaddr; uint8_t logdrv; uint8_t numsge; uint8_t resvd; uint8_t busy; uint8_t numstatus; uint8_t status; uint8_t completed[MBOX_MAX_FIRMWARE_STATUS]; uint8_t poll; uint8_t ack;} __attribute__ ((packed)) mbox_t;/** * mbox64_t - 64-bit extension for the mailbox * @segment_lo : the low 32-bits of the address of the scatter-gather list * @segment_hi : the upper 32-bits of the address of the scatter-gather list * @mbox : 32-bit mailbox, whose xferadder field must be set to * 0xFFFFFFFF * * This is the extension of the 32-bit mailbox to be able to perform DMA * beyond 4GB address range. */typedef struct { uint32_t xferaddr_lo; uint32_t xferaddr_hi; mbox_t mbox32;} __attribute__ ((packed)) mbox64_t;/* * mailbox structure used for internal commands */typedef struct { u8 cmd; u8 cmdid; u8 opcode; u8 subopcode; u32 lba; u32 xferaddr; u8 logdrv; u8 rsvd[3]; u8 numstatus; u8 status;} __attribute__ ((packed)) int_mbox_t;/** * mraid_passthru_t - passthru structure to issue commands to physical devices * @timeout : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr * @ars : set if ARS required after check condition * @islogical : set if command meant for logical devices * @logdrv : logical drive number if command for LD * @channel : Channel on which physical device is located * @target : SCSI target of the device * @queuetag : unused * @queueaction : unused * @cdb : SCSI CDB * @cdblen : length of the CDB * @reqsenselen : amount of request sense data to be returned * @reqsensearea : Sense information buffer * @numsge : number of scatter-gather elements in the sg list * @scsistatus : SCSI status of the command completed. * @dataxferaddr : DMA data transfer address * @dataxferlen : amount of the data to be transferred. */typedef struct { uint8_t timeout :3; uint8_t ars :1; uint8_t reserved :3; uint8_t islogical :1; uint8_t logdrv; uint8_t channel; uint8_t target; uint8_t queuetag; uint8_t queueaction; uint8_t cdb[10]; uint8_t cdblen; uint8_t reqsenselen; uint8_t reqsensearea[MAX_REQ_SENSE_LEN]; uint8_t numsge; uint8_t scsistatus; uint32_t dataxferaddr; uint32_t dataxferlen;} __attribute__ ((packed)) mraid_passthru_t;typedef struct { uint32_t dataxferaddr_lo; uint32_t dataxferaddr_hi; mraid_passthru_t pthru32;} __attribute__ ((packed)) mega_passthru64_t;/** * mraid_epassthru_t - passthru structure to issue commands to physical devices * @timeout : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr * @ars : set if ARS required after check condition * @rsvd1 : reserved field * @cd_rom : (?) * @rsvd2 : reserved field * @islogical : set if command meant for logical devices * @logdrv : logical drive number if command for LD * @channel : Channel on which physical device is located * @target : SCSI target of the device * @queuetag : unused * @queueaction : unused * @cdblen : length of the CDB * @rsvd3 : reserved field * @cdb : SCSI CDB * @numsge : number of scatter-gather elements in the sg list * @status : SCSI status of the command completed. * @reqsenselen : amount of request sense data to be returned * @reqsensearea : Sense information buffer * @rsvd4 : reserved field * @dataxferaddr : DMA data transfer address * @dataxferlen : amount of the data to be transferred. */typedef struct { uint8_t timeout :3; uint8_t ars :1; uint8_t rsvd1 :1; uint8_t cd_rom :1; uint8_t rsvd2 :1; uint8_t islogical :1; uint8_t logdrv; uint8_t channel; uint8_t target; uint8_t queuetag; uint8_t queueaction; uint8_t cdblen; uint8_t rsvd3; uint8_t cdb[16]; uint8_t numsge; uint8_t status; uint8_t reqsenselen; uint8_t reqsensearea[MAX_REQ_SENSE_LEN]; uint8_t rsvd4; uint32_t dataxferaddr; uint32_t dataxferlen;} __attribute__ ((packed)) mraid_epassthru_t;/** * mraid_pinfo_t - product info, static information about the controller * @data_size : current size in bytes (not including resvd) * @config_signature : Current value is 0x00282008 * @fw_version : Firmware version * @bios_version : version of the BIOS * @product_name : Name given to the controller * @max_commands : Maximum concurrent commands supported * @nchannels : Number of SCSI Channels detected * @fc_loop_present : Number of Fibre Loops detected * @mem_type : EDO, FPM, SDRAM etc * @signature : * @dram_size : In terms of MB * @subsysid : device PCI subsystem ID * @subsysvid : device PCI subsystem vendor ID * @notify_counters : * @pad1k : 135 + 889 resvd = 1024 total size * * This structures holds the information about the controller which is not * expected to change dynamically. * * The current value of config signature is 0x00282008: * 0x28 = MAX_LOGICAL_DRIVES, * 0x20 = Number of stripes and * 0x08 = Number of spans */typedef struct { uint32_t data_size; uint32_t config_signature; uint8_t fw_version[16]; uint8_t bios_version[16]; uint8_t product_name[80]; uint8_t max_commands; uint8_t nchannels; uint8_t fc_loop_present; uint8_t mem_type; uint32_t signature; uint16_t dram_size; uint16_t subsysid; uint16_t subsysvid; uint8_t notify_counters; uint8_t pad1k[889];} __attribute__ ((packed)) mraid_pinfo_t;/** * mraid_notify_t - the notification structure * @global_counter : Any change increments this counter * @param_counter : Indicates any params changed * @param_id : Param modified - defined below * @param_val : New val of last param modified * @write_config_counter : write config occurred * @write_config_rsvd : * @ldrv_op_counter : Indicates ldrv op started/completed * @ldrv_opid : ldrv num * @ldrv_opcmd : ldrv operation - defined below * @ldrv_opstatus : status of the operation * @ldrv_state_counter : Indicates change of ldrv state * @ldrv_state_id : ldrv num * @ldrv_state_new : New state * @ldrv_state_old : old state * @pdrv_state_counter : Indicates change of ldrv state * @pdrv_state_id : pdrv id * @pdrv_state_new : New state * @pdrv_state_old : old state * @pdrv_fmt_counter : Indicates pdrv format started/over * @pdrv_fmt_id : pdrv id * @pdrv_fmt_val : format started/over * @pdrv_fmt_rsvd : * @targ_xfer_counter : Indicates SCSI-2 Xfer rate change * @targ_xfer_id : pdrv Id * @targ_xfer_val : new Xfer params of last pdrv * @targ_xfer_rsvd : * @fcloop_id_chg_counter : Indicates loopid changed * @fcloopid_pdrvid : pdrv id * @fcloop_id0 : loopid on fc loop 0 * @fcloop_id1 : loopid on fc loop 1 * @fcloop_state_counter : Indicates loop state changed * @fcloop_state0 : state of fc loop 0 * @fcloop_state1 : state of fc loop 1 * @fcloop_state_rsvd : */typedef struct { uint32_t global_counter; uint8_t param_counter; uint8_t param_id; uint16_t param_val; uint8_t write_config_counter; uint8_t write_config_rsvd[3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -