Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/scsi/fnic/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 21 kB image not shown  

Quelle  fcpio.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
 * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
 */

#ifndef _FCPIO_H_
#define _FCPIO_H_

#include <linux/if_ether.h>

/*
 * This header file includes all of the data structures used for
 * communication by the host driver to the fcp firmware.
 */


/*
 * Exchange and sequence id space allocated to the host driver
 */

#define FCPIO_HOST_EXCH_RANGE_START         0x1000
#define FCPIO_HOST_EXCH_RANGE_END           0x1fff
#define FCPIO_HOST_SEQ_ID_RANGE_START       0x80
#define FCPIO_HOST_SEQ_ID_RANGE_END         0xff

/*
 * Command entry type
 */

enum fcpio_type {
 /*
 * Initiator request types
 */

 FCPIO_ICMND_16 = 0x1,
 FCPIO_ICMND_32,
 FCPIO_ICMND_CMPL,
 FCPIO_ITMF,
 FCPIO_ITMF_CMPL,

 /*
 * Target request types
 */

 FCPIO_TCMND_16 = 0x11,
 FCPIO_TCMND_32,
 FCPIO_TDATA,
 FCPIO_TXRDY,
 FCPIO_TRSP,
 FCPIO_TDRSP_CMPL,
 FCPIO_TTMF,
 FCPIO_TTMF_ACK,
 FCPIO_TABORT,
 FCPIO_TABORT_CMPL,

 /*
 * Misc request types
 */

 FCPIO_ACK = 0x20,
 FCPIO_RESET,
 FCPIO_RESET_CMPL,
 FCPIO_FLOGI_REG,
 FCPIO_FLOGI_REG_CMPL,
 FCPIO_ECHO,
 FCPIO_ECHO_CMPL,
 FCPIO_LUNMAP_CHNG,
 FCPIO_LUNMAP_REQ,
 FCPIO_LUNMAP_REQ_CMPL,
 FCPIO_FLOGI_FIP_REG,
 FCPIO_FLOGI_FIP_REG_CMPL,
};

/*
 * Header status codes from the firmware
 */

enum fcpio_status {
 FCPIO_SUCCESS = 0,              /* request was successful */

 /*
 * If a request to the firmware is rejected, the original request
 * header will be returned with the status set to one of the following:
 */

 FCPIO_INVALID_HEADER,    /* header contains invalid data */
 FCPIO_OUT_OF_RESOURCE,   /* out of resources to complete request */
 FCPIO_INVALID_PARAM,     /* some parameter in request is invalid */
 FCPIO_REQ_NOT_SUPPORTED, /* request type is not supported */
 FCPIO_IO_NOT_FOUND,      /* requested I/O was not found */

 /*
 * Once a request is processed, the firmware will usually return
 * a cmpl message type.  In cases where errors occurred,
 * the header status field would be filled in with one of the following:
 */

 FCPIO_ABORTED = 0x41,     /* request was aborted */
 FCPIO_TIMEOUT,            /* request was timed out */
 FCPIO_SGL_INVALID,        /* request was aborted due to sgl error */
 FCPIO_MSS_INVALID,        /* request was aborted due to mss error */
 FCPIO_DATA_CNT_MISMATCH,  /* recv/sent more/less data than exp. */
 FCPIO_FW_ERR,             /* request was terminated due to fw error */
 FCPIO_ITMF_REJECTED,      /* itmf req was rejected by remote node */
 FCPIO_ITMF_FAILED,        /* itmf req was failed by remote node */
 FCPIO_ITMF_INCORRECT_LUN, /* itmf req targeted incorrect LUN */
 FCPIO_CMND_REJECTED,      /* request was invalid and rejected */
 FCPIO_NO_PATH_AVAIL,      /* no paths to the lun was available */
 FCPIO_PATH_FAILED,        /* i/o sent to current path failed */
 FCPIO_LUNMAP_CHNG_PEND,   /* i/o rejected due to lunmap change */
};

/*
 * The header command tag.  All host requests will use the "tag" field
 * to mark commands with a unique tag.  When the firmware responds to
 * a host request, it will copy the tag field into the response.
 *
 * The only firmware requests that will use the rx_id/ox_id fields instead
 * of the tag field will be the target command and target task management
 * requests.  These two requests do not have corresponding host requests
 * since they come directly from the FC initiator on the network.
 */

struct fcpio_tag {
 union {
  u32 req_id;
  struct {
   u16 rx_id;
   u16 ox_id;
  } ex_id;
 } u;
};

static inline void
fcpio_tag_id_enc(struct fcpio_tag *tag, u32 id)
{
 tag->u.req_id = id;
}

static inline void
fcpio_tag_id_dec(struct fcpio_tag *tag, u32 *id)
{
 *id = tag->u.req_id;
}

static inline void
fcpio_tag_exid_enc(struct fcpio_tag *tag, u16 ox_id, u16 rx_id)
{
 tag->u.ex_id.rx_id = rx_id;
 tag->u.ex_id.ox_id = ox_id;
}

static inline void
fcpio_tag_exid_dec(struct fcpio_tag *tag, u16 *ox_id, u16 *rx_id)
{
 *rx_id = tag->u.ex_id.rx_id;
 *ox_id = tag->u.ex_id.ox_id;
}

/*
 * The header for an fcpio request, whether from the firmware or from the
 * host driver
 */

struct fcpio_header {
 u8            type;           /* enum fcpio_type */
 u8            status;         /* header status entry */
 u16           _resvd;         /* reserved */
 struct fcpio_tag    tag;      /* header tag */
};

static inline void
fcpio_header_enc(struct fcpio_header *hdr,
   u8 type, u8 status,
   struct fcpio_tag tag)
{
 hdr->type = type;
 hdr->status = status;
 hdr->_resvd = 0;
 hdr->tag = tag;
}

static inline void
fcpio_header_dec(struct fcpio_header *hdr,
   u8 *type, u8 *status,
   struct fcpio_tag *tag)
{
 *type = hdr->type;
 *status = hdr->status;
 *tag = hdr->tag;
}

#define CDB_16      16
#define CDB_32      32
#define LUN_ADDRESS 8

/*
 * fcpio_icmnd_16: host -> firmware request
 *
 * used for sending out an initiator SCSI 16-byte command
 */

struct fcpio_icmnd_16 {
 u32   lunmap_id;  /* index into lunmap table */
 u8   special_req_flags; /* special exchange request flags */
 u8   _resvd0[3];         /* reserved */
 u32   sgl_cnt;  /* scatter-gather list count */
 u32   sense_len;  /* sense buffer length */
 u64   sgl_addr;  /* scatter-gather list addr */
 u64   sense_addr;  /* sense buffer address */
 u8   crn;   /* SCSI Command Reference No. */
 u8   pri_ta;  /* SCSI Priority and Task attribute */
 u8   _resvd1;  /* reserved: should be 0 */
 u8   flags;  /* command flags */
 u8   scsi_cdb[CDB_16]; /* SCSI Cmnd Descriptor Block */
 u32   data_len;  /* length of data expected */
 u8   lun[LUN_ADDRESS]; /* FC vNIC only: LUN address */
 u8   _resvd2;  /* reserved */
 u8   d_id[3];  /* FC vNIC only: Target D_ID */
 u16   mss;   /* FC vNIC only: max burst */
 u16   _resvd3;  /* reserved */
 u32   r_a_tov;  /* FC vNIC only: Res. Alloc Timeout */
 u32   e_d_tov;         /* FC vNIC only: Err Detect Timeout */
};

/*
 * Special request flags
 */

#define FCPIO_ICMND_SRFLAG_RETRY 0x01   /* Enable Retry handling on exchange */

/*
 * Priority/Task Attribute settings
 */

#define FCPIO_ICMND_PTA_SIMPLE      0   /* simple task attribute */
#define FCPIO_ICMND_PTA_HEADQ       1   /* head of queue task attribute */
#define FCPIO_ICMND_PTA_ORDERED     2   /* ordered task attribute */
#define FCPIO_ICMND_PTA_ACA         4   /* auto contingent allegiance */
#define FCPIO_ICMND_PRI_SHIFT       3   /* priority field starts in bit 3 */

/*
 * Command flags
 */

#define FCPIO_ICMND_RDDATA      0x02    /* read data */
#define FCPIO_ICMND_WRDATA      0x01    /* write data */

/*
 * fcpio_icmnd_32: host -> firmware request
 *
 * used for sending out an initiator SCSI 32-byte command
 */

struct fcpio_icmnd_32 {
 u32   lunmap_id;              /* index into lunmap table */
 u8    special_req_flags;      /* special exchange request flags */
 u8    _resvd0[3];             /* reserved */
 u32   sgl_cnt;                /* scatter-gather list count */
 u32   sense_len;              /* sense buffer length */
 u64   sgl_addr;               /* scatter-gather list addr */
 u64   sense_addr;             /* sense buffer address */
 u8    crn;                    /* SCSI Command Reference No. */
 u8    pri_ta;                 /* SCSI Priority and Task attribute */
 u8    _resvd1;                /* reserved: should be 0 */
 u8    flags;                  /* command flags */
 u8    scsi_cdb[CDB_32];       /* SCSI Cmnd Descriptor Block */
 u32   data_len;               /* length of data expected */
 u8    lun[LUN_ADDRESS];       /* FC vNIC only: LUN address */
 u8    _resvd2;                /* reserved */
 u8    d_id[3];        /* FC vNIC only: Target D_ID */
 u16   mss;                    /* FC vNIC only: max burst */
 u16   _resvd3;                /* reserved */
 u32   r_a_tov;                /* FC vNIC only: Res. Alloc Timeout */
 u32   e_d_tov;                /* FC vNIC only: Error Detect Timeout */
};

/*
 * fcpio_itmf: host -> firmware request
 *
 * used for requesting the firmware to abort a request and/or send out
 * a task management function
 *
 * The t_tag field is only needed when the request type is ABT_TASK.
 */

struct fcpio_itmf {
 u32   lunmap_id;              /* index into lunmap table */
 u32   tm_req;                 /* SCSI Task Management request */
 u32   t_tag;                  /* header tag of fcpio to be aborted */
 u32   _resvd;                 /* _reserved */
 u8    lun[LUN_ADDRESS];       /* FC vNIC only: LUN address */
 u8    _resvd1;                /* reserved */
 u8    d_id[3];        /* FC vNIC only: Target D_ID */
 u32   r_a_tov;                /* FC vNIC only: R_A_TOV in msec */
 u32   e_d_tov;                /* FC vNIC only: E_D_TOV in msec */
};

/*
 * Task Management request
 */

enum fcpio_itmf_tm_req_type {
 FCPIO_ITMF_ABT_TASK_TERM = 0x01,    /* abort task and terminate */
 FCPIO_ITMF_ABT_TASK,                /* abort task and issue abts */
 FCPIO_ITMF_ABT_TASK_SET,            /* abort task set */
 FCPIO_ITMF_CLR_TASK_SET,            /* clear task set */
 FCPIO_ITMF_LUN_RESET,               /* logical unit reset task mgmt */
 FCPIO_ITMF_CLR_ACA,                 /* Clear ACA condition */
};

/*
 * fcpio_tdata: host -> firmware request
 *
 * used for requesting the firmware to send out a read data transfer for a
 * target command
 */

struct fcpio_tdata {
 u16   rx_id;                  /* FC rx_id of target command */
 u16   flags;                  /* command flags */
 u32   rel_offset;             /* data sequence relative offset */
 u32   sgl_cnt;                /* scatter-gather list count */
 u32   data_len;               /* length of data expected to send */
 u64   sgl_addr;               /* scatter-gather list address */
};

/*
 * Command flags
 */

#define FCPIO_TDATA_SCSI_RSP    0x01    /* send a scsi resp. after last frame */

/*
 * fcpio_txrdy: host -> firmware request
 *
 * used for requesting the firmware to send out a write data transfer for a
 * target command
 */

struct fcpio_txrdy {
 u16   rx_id;                  /* FC rx_id of target command */
 u16   _resvd0;                /* reserved */
 u32   rel_offset;             /* data sequence relative offset */
 u32   sgl_cnt;                /* scatter-gather list count */
 u32   data_len;               /* length of data expected to send */
 u64   sgl_addr;               /* scatter-gather list address */
};

/*
 * fcpio_trsp: host -> firmware request
 *
 * used for requesting the firmware to send out a response for a target
 * command
 */

struct fcpio_trsp {
 u16   rx_id;                  /* FC rx_id of target command */
 u16   _resvd0;                /* reserved */
 u32   sense_len;              /* sense data buffer length */
 u64   sense_addr;             /* sense data buffer address */
 u16   _resvd1;                /* reserved */
 u8    flags;                  /* response request flags */
 u8    scsi_status;            /* SCSI status */
 u32   residual;               /* SCSI data residual value of I/O */
};

/*
 * resposnse request flags
 */

#define FCPIO_TRSP_RESID_UNDER  0x08   /* residual is valid and is underflow */
#define FCPIO_TRSP_RESID_OVER   0x04   /* residual is valid and is overflow */

/*
 * fcpio_ttmf_ack: host -> firmware response
 *
 * used by the host to indicate to the firmware it has received and processed
 * the target tmf request
 */

struct fcpio_ttmf_ack {
 u16   rx_id;                  /* FC rx_id of target command */
 u16   _resvd0;                /* reserved */
 u32   tmf_status;             /* SCSI task management status */
};

/*
 * fcpio_tabort: host -> firmware request
 *
 * used by the host to request the firmware to abort a target request that was
 * received by the firmware
 */

struct fcpio_tabort {
 u16   rx_id;                  /* rx_id of the target request */
};

/*
 * fcpio_reset: host -> firmware request
 *
 * used by the host to signal a reset of the driver to the firmware
 * and to request firmware to clean up all outstanding I/O
 */

struct fcpio_reset {
 u32   _resvd;
};

enum fcpio_flogi_reg_format_type {
 FCPIO_FLOGI_REG_DEF_DEST = 0,    /* Use the oui | s_id mac format */
 FCPIO_FLOGI_REG_GW_DEST,         /* Use the fixed gateway mac */
};

/*
 * fcpio_flogi_reg: host -> firmware request
 *
 * fc vnic only
 * used by the host to notify the firmware of the lif's s_id
 * and destination mac address format
 */

struct fcpio_flogi_reg {
 u8 format;
 u8 s_id[3];   /* FC vNIC only: Source S_ID */
 u8 gateway_mac[ETH_ALEN]; /* Destination gateway mac */
 u16 _resvd;
 u32 r_a_tov;   /* R_A_TOV in msec */
 u32 e_d_tov;   /* E_D_TOV in msec */
};

/*
 * fcpio_echo: host -> firmware request
 *
 * sends a heartbeat echo request to the firmware
 */

struct fcpio_echo {
 u32 _resvd;
};

/*
 * fcpio_lunmap_req: host -> firmware request
 *
 * scsi vnic only
 * sends a request to retrieve the lunmap table for scsi vnics
 */

struct fcpio_lunmap_req {
 u64 addr;                     /* address of the buffer */
 u32 len;                      /* len of the buffer */
};

/*
 * fcpio_flogi_fip_reg: host -> firmware request
 *
 * fc vnic only
 * used by the host to notify the firmware of the lif's s_id
 * and destination mac address format
 */

struct fcpio_flogi_fip_reg {
 u8    _resvd0;
 u8     s_id[3];               /* FC vNIC only: Source S_ID */
 u8     fcf_mac[ETH_ALEN];     /* FCF Target destination mac */
 u16   _resvd1;
 u32   r_a_tov;                /* R_A_TOV in msec */
 u32   e_d_tov;                /* E_D_TOV in msec */
 u8    ha_mac[ETH_ALEN];       /* Host adapter source mac */
 u16   _resvd2;
};

/*
 * Basic structure for all fcpio structures that are sent from the host to the
 * firmware.  They are 128 bytes per structure.
 */

#define FCPIO_HOST_REQ_LEN      128     /* expected length of host requests */

struct fcpio_host_req {
 struct fcpio_header hdr;

 union {
  /*
 * Defines space needed for request
 */

  u8 buf[FCPIO_HOST_REQ_LEN - sizeof(struct fcpio_header)];

  /*
 * Initiator host requests
 */

  struct fcpio_icmnd_16               icmnd_16;
  struct fcpio_icmnd_32               icmnd_32;
  struct fcpio_itmf                   itmf;

  /*
 * Target host requests
 */

  struct fcpio_tdata                  tdata;
  struct fcpio_txrdy                  txrdy;
  struct fcpio_trsp                   trsp;
  struct fcpio_ttmf_ack               ttmf_ack;
  struct fcpio_tabort                 tabort;

  /*
 * Misc requests
 */

  struct fcpio_reset                  reset;
  struct fcpio_flogi_reg              flogi_reg;
  struct fcpio_echo                   echo;
  struct fcpio_lunmap_req             lunmap_req;
  struct fcpio_flogi_fip_reg          flogi_fip_reg;
 } u;
};

/*
 * fcpio_icmnd_cmpl: firmware -> host response
 *
 * used for sending the host a response to an initiator command
 */

struct fcpio_icmnd_cmpl {
 u8    _resvd0[6];             /* reserved */
 u8    flags;                  /* response flags */
 u8    scsi_status;            /* SCSI status */
 u32   residual;               /* SCSI data residual length */
 u32   sense_len;              /* SCSI sense length */
};

/*
 * response flags
 */

#define FCPIO_ICMND_CMPL_RESID_UNDER    0x08    /* resid under and valid */
#define FCPIO_ICMND_CMPL_RESID_OVER     0x04    /* resid over and valid */

/*
 * fcpio_itmf_cmpl: firmware -> host response
 *
 * used for sending the host a response for a itmf request
 */

struct fcpio_itmf_cmpl {
 u32    _resvd;                /* reserved */
};

/*
 * fcpio_tcmnd_16: firmware -> host request
 *
 * used by the firmware to notify the host of an incoming target SCSI 16-Byte
 * request
 */

struct fcpio_tcmnd_16 {
 u8    lun[LUN_ADDRESS];       /* FC vNIC only: LUN address */
 u8    crn;                    /* SCSI Command Reference No. */
 u8    pri_ta;                 /* SCSI Priority and Task attribute */
 u8    _resvd2;                /* reserved: should be 0 */
 u8    flags;                  /* command flags */
 u8    scsi_cdb[CDB_16];       /* SCSI Cmnd Descriptor Block */
 u32   data_len;               /* length of data expected */
 u8    _resvd1;                /* reserved */
 u8    s_id[3];        /* FC vNIC only: Source S_ID */
};

/*
 * Priority/Task Attribute settings
 */

#define FCPIO_TCMND_PTA_SIMPLE      0   /* simple task attribute */
#define FCPIO_TCMND_PTA_HEADQ       1   /* head of queue task attribute */
#define FCPIO_TCMND_PTA_ORDERED     2   /* ordered task attribute */
#define FCPIO_TCMND_PTA_ACA         4   /* auto contingent allegiance */
#define FCPIO_TCMND_PRI_SHIFT       3   /* priority field starts in bit 3 */

/*
 * Command flags
 */

#define FCPIO_TCMND_RDDATA      0x02    /* read data */
#define FCPIO_TCMND_WRDATA      0x01    /* write data */

/*
 * fcpio_tcmnd_32: firmware -> host request
 *
 * used by the firmware to notify the host of an incoming target SCSI 32-Byte
 * request
 */

struct fcpio_tcmnd_32 {
 u8    lun[LUN_ADDRESS];       /* FC vNIC only: LUN address */
 u8    crn;                    /* SCSI Command Reference No. */
 u8    pri_ta;                 /* SCSI Priority and Task attribute */
 u8    _resvd2;                /* reserved: should be 0 */
 u8    flags;                  /* command flags */
 u8    scsi_cdb[CDB_32];       /* SCSI Cmnd Descriptor Block */
 u32   data_len;               /* length of data expected */
 u8    _resvd0;                /* reserved */
 u8    s_id[3];        /* FC vNIC only: Source S_ID */
};

/*
 * fcpio_tdrsp_cmpl: firmware -> host response
 *
 * used by the firmware to notify the host of a response to a host target
 * command
 */

struct fcpio_tdrsp_cmpl {
 u16   rx_id;                  /* rx_id of the target request */
 u16   _resvd0;                /* reserved */
};

/*
 * fcpio_ttmf: firmware -> host request
 *
 * used by the firmware to notify the host of an incoming task management
 * function request
 */

struct fcpio_ttmf {
 u8    _resvd0;                /* reserved */
 u8    s_id[3];        /* FC vNIC only: Source S_ID */
 u8    lun[LUN_ADDRESS];       /* FC vNIC only: LUN address */
 u8    crn;                    /* SCSI Command Reference No. */
 u8    _resvd2[3];             /* reserved */
 u32   tmf_type;               /* task management request type */
};

/*
 * Task Management request
 */

#define FCPIO_TTMF_CLR_ACA      0x40    /* Clear ACA condition */
#define FCPIO_TTMF_LUN_RESET    0x10    /* logical unit reset task mgmt */
#define FCPIO_TTMF_CLR_TASK_SET 0x04    /* clear task set */
#define FCPIO_TTMF_ABT_TASK_SET 0x02    /* abort task set */
#define FCPIO_TTMF_ABT_TASK     0x01    /* abort task */

/*
 * fcpio_tabort_cmpl: firmware -> host response
 *
 * used by the firmware to respond to a host's tabort request
 */

struct fcpio_tabort_cmpl {
 u16   rx_id;                  /* rx_id of the target request */
 u16   _resvd0;                /* reserved */
};

/*
 * fcpio_ack: firmware -> host response
 *
 * used by firmware to notify the host of the last work request received
 */

struct fcpio_ack {
 u16  request_out;             /* last host entry received */
 u16  _resvd;
};

/*
 * fcpio_reset_cmpl: firmware -> host response
 *
 * use by firmware to respond to the host's reset request
 */

struct fcpio_reset_cmpl {
 u16   vnic_id;
};

/*
 * fcpio_flogi_reg_cmpl: firmware -> host response
 *
 * fc vnic only
 * response to the fcpio_flogi_reg request
 */

struct fcpio_flogi_reg_cmpl {
 u32 _resvd;
};

/*
 * fcpio_echo_cmpl: firmware -> host response
 *
 * response to the fcpio_echo request
 */

struct fcpio_echo_cmpl {
 u32 _resvd;
};

/*
 * fcpio_lunmap_chng: firmware -> host notification
 *
 * scsi vnic only
 * notifies the host that the lunmap tables have changed
 */

struct fcpio_lunmap_chng {
 u32 _resvd;
};

/*
 * fcpio_lunmap_req_cmpl: firmware -> host response
 *
 * scsi vnic only
 * response for lunmap table request from the host
 */

struct fcpio_lunmap_req_cmpl {
 u32 _resvd;
};

/*
 * Basic structure for all fcpio structures that are sent from the firmware to
 * the host.  They are 64 bytes per structure.
 */

#define FCPIO_FW_REQ_LEN        64      /* expected length of fw requests */
struct fcpio_fw_req {
 struct fcpio_header hdr;

 union {
  /*
 * Defines space needed for request
 */

  u8 buf[FCPIO_FW_REQ_LEN - sizeof(struct fcpio_header)];

  /*
 * Initiator firmware responses
 */

  struct fcpio_icmnd_cmpl         icmnd_cmpl;
  struct fcpio_itmf_cmpl          itmf_cmpl;

  /*
 * Target firmware new requests
 */

  struct fcpio_tcmnd_16           tcmnd_16;
  struct fcpio_tcmnd_32           tcmnd_32;

  /*
 * Target firmware responses
 */

  struct fcpio_tdrsp_cmpl         tdrsp_cmpl;
  struct fcpio_ttmf               ttmf;
  struct fcpio_tabort_cmpl        tabort_cmpl;

  /*
 * Firmware response to work received
 */

  struct fcpio_ack                ack;

  /*
 * Misc requests
 */

  struct fcpio_reset_cmpl         reset_cmpl;
  struct fcpio_flogi_reg_cmpl     flogi_reg_cmpl;
  struct fcpio_echo_cmpl          echo_cmpl;
  struct fcpio_lunmap_chng        lunmap_chng;
  struct fcpio_lunmap_req_cmpl    lunmap_req_cmpl;
 } u;
};

/*
 * Access routines to encode and decode the color bit, which is the most
 * significant bit of the MSB of the structure
 */

static inline void fcpio_color_enc(struct fcpio_fw_req *fw_req, u8 color)
{
 u8 *c = ((u8 *) fw_req) + sizeof(struct fcpio_fw_req) - 1;

 if (color)
  *c |= 0x80;
 else
  *c &= ~0x80;
}

static inline void fcpio_color_dec(struct fcpio_fw_req *fw_req, u8 *color)
{
 u8 *c = ((u8 *) fw_req) + sizeof(struct fcpio_fw_req) - 1;

 *color = *c >> 7;

 /*
 * Make sure color bit is read from desc *before* other fields
 * are read from desc.  Hardware guarantees color bit is last
 * bit (byte) written.  Adding the rmb() prevents the compiler
 * and/or CPU from reordering the reads which would potentially
 * result in reading stale values.
 */


 rmb();

}

/*
 * Lunmap table entry for scsi vnics
 */

#define FCPIO_LUNMAP_TABLE_SIZE     256
#define FCPIO_FLAGS_LUNMAP_VALID    0x80
#define FCPIO_FLAGS_BOOT            0x01
struct fcpio_lunmap_entry {
 u8    bus;
 u8    target;
 u8    lun;
 u8    path_cnt;
 u16   flags;
 u16   update_cnt;
};

struct fcpio_lunmap_tbl {
 u32                   update_cnt;
 struct fcpio_lunmap_entry   lunmaps[FCPIO_LUNMAP_TABLE_SIZE];
};

#endif /* _FCPIO_H_ */

Messung V0.5
C=88 H=96 G=91

¤ Dauer der Verarbeitung: 0.8 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.