root/drivers/net/ethernet/brocade/bna/bfi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Linux network driver for QLogic BR-series Converged Network Adapter.
   4  */
   5 /*
   6  * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
   7  * Copyright (c) 2014-2015 QLogic Corporation
   8  * All rights reserved
   9  * www.qlogic.com
  10  */
  11 #ifndef __BFI_H__
  12 #define __BFI_H__
  13 
  14 #include "bfa_defs.h"
  15 
  16 /* BFI FW image type */
  17 #define BFI_FLASH_CHUNK_SZ                      256     /*!< Flash chunk size */
  18 #define BFI_FLASH_CHUNK_SZ_WORDS        (BFI_FLASH_CHUNK_SZ/sizeof(u32))
  19 #define BFI_FLASH_IMAGE_SZ              0x100000
  20 
  21 /* Msg header common to all msgs */
  22 struct bfi_mhdr {
  23         u8              msg_class;      /*!< @ref enum bfi_mclass           */
  24         u8              msg_id;         /*!< msg opcode with in the class   */
  25         union {
  26                 struct {
  27                         u8      qid;
  28                         u8      fn_lpu; /*!< msg destination                */
  29                 } __packed h2i;
  30                 u16     i2htok; /*!< token in msgs to host          */
  31         } __packed mtag;
  32 } __packed;
  33 
  34 #define bfi_fn_lpu(__fn, __lpu) ((__fn) << 1 | (__lpu))
  35 #define bfi_mhdr_2_fn(_mh)      ((_mh)->mtag.h2i.fn_lpu >> 1)
  36 #define bfi_mhdr_2_qid(_mh)     ((_mh)->mtag.h2i.qid)
  37 
  38 #define bfi_h2i_set(_mh, _mc, _op, _fn_lpu) do {                \
  39         (_mh).msg_class                 = (_mc);                \
  40         (_mh).msg_id                    = (_op);                \
  41         (_mh).mtag.h2i.fn_lpu   = (_fn_lpu);                    \
  42 } while (0)
  43 
  44 #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do {                \
  45         (_mh).msg_class                 = (_mc);                \
  46         (_mh).msg_id                    = (_op);                \
  47         (_mh).mtag.i2htok               = (_i2htok);            \
  48 } while (0)
  49 
  50 /*
  51  * Message opcodes: 0-127 to firmware, 128-255 to host
  52  */
  53 #define BFI_I2H_OPCODE_BASE     128
  54 #define BFA_I2HM(_x)                    ((_x) + BFI_I2H_OPCODE_BASE)
  55 
  56 /****************************************************************************
  57  *
  58  * Scatter Gather Element and Page definition
  59  *
  60  ****************************************************************************
  61  */
  62 
  63 /* DMA addresses */
  64 union bfi_addr_u {
  65         struct {
  66                 u32     addr_lo;
  67                 u32     addr_hi;
  68         } __packed a32;
  69 } __packed;
  70 
  71 /* Generic DMA addr-len pair. */
  72 struct bfi_alen {
  73         union bfi_addr_u        al_addr;        /* DMA addr of buffer   */
  74         u32                     al_len;         /* length of buffer */
  75 } __packed;
  76 
  77 /*
  78  * Large Message structure - 128 Bytes size Msgs
  79  */
  80 #define BFI_LMSG_SZ             128
  81 #define BFI_LMSG_PL_WSZ \
  82                         ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr)) / 4)
  83 
  84 /* Mailbox message structure */
  85 #define BFI_MBMSG_SZ            7
  86 struct bfi_mbmsg {
  87         struct bfi_mhdr mh;
  88         u32             pl[BFI_MBMSG_SZ];
  89 } __packed;
  90 
  91 /* Supported PCI function class codes (personality) */
  92 enum bfi_pcifn_class {
  93         BFI_PCIFN_CLASS_FC      = 0x0c04,
  94         BFI_PCIFN_CLASS_ETH     = 0x0200,
  95 };
  96 
  97 /* Message Classes */
  98 enum bfi_mclass {
  99         BFI_MC_IOC              = 1,    /*!< IO Controller (IOC)            */
 100         BFI_MC_DIAG             = 2,    /*!< Diagnostic Msgs                */
 101         BFI_MC_FLASH            = 3,    /*!< Flash message class            */
 102         BFI_MC_CEE              = 4,    /*!< CEE                            */
 103         BFI_MC_FCPORT           = 5,    /*!< FC port                        */
 104         BFI_MC_IOCFC            = 6,    /*!< FC - IO Controller (IOC)       */
 105         BFI_MC_LL               = 7,    /*!< Link Layer                     */
 106         BFI_MC_UF               = 8,    /*!< Unsolicited frame receive      */
 107         BFI_MC_FCXP             = 9,    /*!< FC Transport                   */
 108         BFI_MC_LPS              = 10,   /*!< lport fc login services        */
 109         BFI_MC_RPORT            = 11,   /*!< Remote port                    */
 110         BFI_MC_ITNIM            = 12,   /*!< I-T nexus (Initiator mode)     */
 111         BFI_MC_IOIM_READ        = 13,   /*!< read IO (Initiator mode)       */
 112         BFI_MC_IOIM_WRITE       = 14,   /*!< write IO (Initiator mode)      */
 113         BFI_MC_IOIM_IO          = 15,   /*!< IO (Initiator mode)            */
 114         BFI_MC_IOIM             = 16,   /*!< IO (Initiator mode)            */
 115         BFI_MC_IOIM_IOCOM       = 17,   /*!< good IO completion             */
 116         BFI_MC_TSKIM            = 18,   /*!< Initiator Task management      */
 117         BFI_MC_SBOOT            = 19,   /*!< SAN boot services              */
 118         BFI_MC_IPFC             = 20,   /*!< IP over FC Msgs                */
 119         BFI_MC_PORT             = 21,   /*!< Physical port                  */
 120         BFI_MC_SFP              = 22,   /*!< SFP module                     */
 121         BFI_MC_MSGQ             = 23,   /*!< MSGQ                           */
 122         BFI_MC_ENET             = 24,   /*!< ENET commands/responses        */
 123         BFI_MC_PHY              = 25,   /*!< External PHY message class     */
 124         BFI_MC_NBOOT            = 26,   /*!< Network Boot                   */
 125         BFI_MC_TIO_READ         = 27,   /*!< read IO (Target mode)          */
 126         BFI_MC_TIO_WRITE        = 28,   /*!< write IO (Target mode)         */
 127         BFI_MC_TIO_DATA_XFERED  = 29,   /*!< ds transferred (target mode)   */
 128         BFI_MC_TIO_IO           = 30,   /*!< IO (Target mode)               */
 129         BFI_MC_TIO              = 31,   /*!< IO (target mode)               */
 130         BFI_MC_MFG              = 32,   /*!< MFG/ASIC block commands        */
 131         BFI_MC_EDMA             = 33,   /*!< EDMA copy commands             */
 132         BFI_MC_MAX              = 34
 133 };
 134 
 135 #define BFI_IOC_MSGLEN_MAX      32      /* 32 bytes */
 136 
 137 #define BFI_FWBOOT_ENV_OS               0
 138 
 139 /*----------------------------------------------------------------------
 140  *                              IOC
 141  *----------------------------------------------------------------------
 142  */
 143 
 144 /* Different asic generations */
 145 enum bfi_asic_gen {
 146         BFI_ASIC_GEN_CB         = 1,
 147         BFI_ASIC_GEN_CT         = 2,
 148         BFI_ASIC_GEN_CT2        = 3,
 149 };
 150 
 151 enum bfi_asic_mode {
 152         BFI_ASIC_MODE_FC        = 1,    /* FC up to 8G speed            */
 153         BFI_ASIC_MODE_FC16      = 2,    /* FC up to 16G speed           */
 154         BFI_ASIC_MODE_ETH       = 3,    /* Ethernet ports               */
 155         BFI_ASIC_MODE_COMBO     = 4,    /* FC 16G and Ethernet 10G port */
 156 };
 157 
 158 enum bfi_ioc_h2i_msgs {
 159         BFI_IOC_H2I_ENABLE_REQ          = 1,
 160         BFI_IOC_H2I_DISABLE_REQ         = 2,
 161         BFI_IOC_H2I_GETATTR_REQ         = 3,
 162         BFI_IOC_H2I_DBG_SYNC            = 4,
 163         BFI_IOC_H2I_DBG_DUMP            = 5,
 164 };
 165 
 166 enum bfi_ioc_i2h_msgs {
 167         BFI_IOC_I2H_ENABLE_REPLY        = BFA_I2HM(1),
 168         BFI_IOC_I2H_DISABLE_REPLY       = BFA_I2HM(2),
 169         BFI_IOC_I2H_GETATTR_REPLY       = BFA_I2HM(3),
 170         BFI_IOC_I2H_HBEAT               = BFA_I2HM(4),
 171 };
 172 
 173 /* BFI_IOC_H2I_GETATTR_REQ message */
 174 struct bfi_ioc_getattr_req {
 175         struct bfi_mhdr mh;
 176         union bfi_addr_u        attr_addr;
 177 } __packed;
 178 
 179 struct bfi_ioc_attr {
 180         u64             mfg_pwwn;       /*!< Mfg port wwn          */
 181         u64             mfg_nwwn;       /*!< Mfg node wwn          */
 182         u8              mfg_mac[ETH_ALEN]; /*!< Mfg mac            */
 183         u8              port_mode;      /* enum bfi_port_mode      */
 184         u8              rsvd_a;
 185         u64             pwwn;
 186         u64             nwwn;
 187         u8              mac[ETH_ALEN];  /*!< PBC or Mfg mac        */
 188         u16     rsvd_b;
 189         u8              fcoe_mac[ETH_ALEN];
 190         u16     rsvd_c;
 191         char            brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
 192         u8              pcie_gen;
 193         u8              pcie_lanes_orig;
 194         u8              pcie_lanes;
 195         u8              rx_bbcredit;    /*!< receive buffer credits */
 196         u32     adapter_prop;   /*!< adapter properties     */
 197         u16     maxfrsize;      /*!< max receive frame size */
 198         char            asic_rev;
 199         u8              rsvd_d;
 200         char            fw_version[BFA_VERSION_LEN];
 201         char            optrom_version[BFA_VERSION_LEN];
 202         struct bfa_mfg_vpd vpd;
 203         u32     card_type;      /*!< card type                  */
 204 } __packed;
 205 
 206 /* BFI_IOC_I2H_GETATTR_REPLY message */
 207 struct bfi_ioc_getattr_reply {
 208         struct bfi_mhdr mh;     /*!< Common msg header          */
 209         u8                      status; /*!< cfg reply status           */
 210         u8                      rsvd[3];
 211 } __packed;
 212 
 213 /* Firmware memory page offsets */
 214 #define BFI_IOC_SMEM_PG0_CB     (0x40)
 215 #define BFI_IOC_SMEM_PG0_CT     (0x180)
 216 
 217 /* Firmware statistic offset */
 218 #define BFI_IOC_FWSTATS_OFF     (0x6B40)
 219 #define BFI_IOC_FWSTATS_SZ      (4096)
 220 
 221 /* Firmware trace offset */
 222 #define BFI_IOC_TRC_OFF         (0x4b00)
 223 #define BFI_IOC_TRC_ENTS        256
 224 #define BFI_IOC_TRC_ENT_SZ      16
 225 #define BFI_IOC_TRC_HDR_SZ      32
 226 
 227 #define BFI_IOC_FW_SIGNATURE    (0xbfadbfad)
 228 #define BFI_IOC_FW_INV_SIGN     (0xdeaddead)
 229 #define BFI_IOC_MD5SUM_SZ       4
 230 
 231 struct bfi_ioc_fwver {
 232 #ifdef __BIG_ENDIAN
 233         u8 patch;
 234         u8 maint;
 235         u8 minor;
 236         u8 major;
 237         u8 rsvd[2];
 238         u8 build;
 239         u8 phase;
 240 #else
 241         u8 major;
 242         u8 minor;
 243         u8 maint;
 244         u8 patch;
 245         u8 phase;
 246         u8 build;
 247         u8 rsvd[2];
 248 #endif
 249 } __packed;
 250 
 251 struct bfi_ioc_image_hdr {
 252         u32     signature;      /*!< constant signature */
 253         u8      asic_gen;       /*!< asic generation */
 254         u8      asic_mode;
 255         u8      port0_mode;     /*!< device mode for port 0 */
 256         u8      port1_mode;     /*!< device mode for port 1 */
 257         u32     exec;           /*!< exec vector        */
 258         u32     bootenv;        /*!< firmware boot env */
 259         u32     rsvd_b[2];
 260         struct bfi_ioc_fwver fwver;
 261         u32     md5sum[BFI_IOC_MD5SUM_SZ];
 262 } __packed;
 263 
 264 enum bfi_ioc_img_ver_cmp {
 265         BFI_IOC_IMG_VER_INCOMP,
 266         BFI_IOC_IMG_VER_OLD,
 267         BFI_IOC_IMG_VER_SAME,
 268         BFI_IOC_IMG_VER_BETTER
 269 };
 270 
 271 #define BFI_FWBOOT_DEVMODE_OFF          4
 272 #define BFI_FWBOOT_TYPE_OFF             8
 273 #define BFI_FWBOOT_ENV_OFF              12
 274 #define BFI_FWBOOT_DEVMODE(__asic_gen, __asic_mode, __p0_mode, __p1_mode) \
 275         (((u32)(__asic_gen)) << 24 |    \
 276          ((u32)(__asic_mode)) << 16 |   \
 277          ((u32)(__p0_mode)) << 8 |      \
 278          ((u32)(__p1_mode)))
 279 
 280 enum bfi_fwboot_type {
 281         BFI_FWBOOT_TYPE_NORMAL  = 0,
 282         BFI_FWBOOT_TYPE_FLASH   = 1,
 283         BFI_FWBOOT_TYPE_MEMTEST = 2,
 284 };
 285 
 286 enum bfi_port_mode {
 287         BFI_PORT_MODE_FC        = 1,
 288         BFI_PORT_MODE_ETH       = 2,
 289 };
 290 
 291 struct bfi_ioc_hbeat {
 292         struct bfi_mhdr mh;             /*!< common msg header          */
 293         u32        hb_count;    /*!< current heart beat count   */
 294 } __packed;
 295 
 296 /* IOC hardware/firmware state */
 297 enum bfi_ioc_state {
 298         BFI_IOC_UNINIT          = 0,    /*!< not initialized                 */
 299         BFI_IOC_INITING         = 1,    /*!< h/w is being initialized        */
 300         BFI_IOC_HWINIT          = 2,    /*!< h/w is initialized              */
 301         BFI_IOC_CFG             = 3,    /*!< IOC configuration in progress   */
 302         BFI_IOC_OP              = 4,    /*!< IOC is operational              */
 303         BFI_IOC_DISABLING       = 5,    /*!< IOC is being disabled           */
 304         BFI_IOC_DISABLED        = 6,    /*!< IOC is disabled                 */
 305         BFI_IOC_CFG_DISABLED    = 7,    /*!< IOC is being disabled;transient */
 306         BFI_IOC_FAIL            = 8,    /*!< IOC heart-beat failure          */
 307         BFI_IOC_MEMTEST         = 9,    /*!< IOC is doing memtest            */
 308 };
 309 
 310 enum {
 311         BFI_ADAPTER_TYPE_FC     = 0x01,         /*!< FC adapters           */
 312         BFI_ADAPTER_TYPE_MK     = 0x0f0000,     /*!< adapter type mask     */
 313         BFI_ADAPTER_TYPE_SH     = 16,           /*!< adapter type shift    */
 314         BFI_ADAPTER_NPORTS_MK   = 0xff00,       /*!< number of ports mask  */
 315         BFI_ADAPTER_NPORTS_SH   = 8,            /*!< number of ports shift */
 316         BFI_ADAPTER_SPEED_MK    = 0xff,         /*!< adapter speed mask    */
 317         BFI_ADAPTER_SPEED_SH    = 0,            /*!< adapter speed shift   */
 318         BFI_ADAPTER_PROTO       = 0x100000,     /*!< prototype adapaters   */
 319         BFI_ADAPTER_TTV         = 0x200000,     /*!< TTV debug capable     */
 320         BFI_ADAPTER_UNSUPP      = 0x400000,     /*!< unknown adapter type  */
 321 };
 322 
 323 #define BFI_ADAPTER_GETP(__prop, __adap_prop)                   \
 324         (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >>     \
 325                 BFI_ADAPTER_ ## __prop ## _SH)
 326 #define BFI_ADAPTER_SETP(__prop, __val)                         \
 327         ((__val) << BFI_ADAPTER_ ## __prop ## _SH)
 328 #define BFI_ADAPTER_IS_SPECIAL(__adap_type)                     \
 329         ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \
 330                         BFI_ADAPTER_UNSUPP))
 331 
 332 /* BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages */
 333 struct bfi_ioc_ctrl_req {
 334         struct bfi_mhdr mh;
 335         u16                     clscode;
 336         u16                     rsvd;
 337         u32             tv_sec;
 338 } __packed;
 339 
 340 /* BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages */
 341 struct bfi_ioc_ctrl_reply {
 342         struct bfi_mhdr mh;                     /*!< Common msg header     */
 343         u8                      status;         /*!< enable/disable status */
 344         u8                      port_mode;      /*!< enum bfa_mode */
 345         u8                      cap_bm;         /*!< capability bit mask */
 346         u8                      rsvd;
 347 } __packed;
 348 
 349 #define BFI_IOC_MSGSZ   8
 350 /* H2I Messages */
 351 union bfi_ioc_h2i_msg_u {
 352         struct bfi_mhdr mh;
 353         struct bfi_ioc_ctrl_req enable_req;
 354         struct bfi_ioc_ctrl_req disable_req;
 355         struct bfi_ioc_getattr_req getattr_req;
 356         u32                     mboxmsg[BFI_IOC_MSGSZ];
 357 } __packed;
 358 
 359 /* I2H Messages */
 360 union bfi_ioc_i2h_msg_u {
 361         struct bfi_mhdr mh;
 362         struct bfi_ioc_ctrl_reply fw_event;
 363         u32                     mboxmsg[BFI_IOC_MSGSZ];
 364 } __packed;
 365 
 366 /*----------------------------------------------------------------------
 367  *                              MSGQ
 368  *----------------------------------------------------------------------
 369  */
 370 
 371 enum bfi_msgq_h2i_msgs {
 372         BFI_MSGQ_H2I_INIT_REQ      = 1,
 373         BFI_MSGQ_H2I_DOORBELL_PI        = 2,
 374         BFI_MSGQ_H2I_DOORBELL_CI        = 3,
 375         BFI_MSGQ_H2I_CMDQ_COPY_RSP      = 4,
 376 };
 377 
 378 enum bfi_msgq_i2h_msgs {
 379         BFI_MSGQ_I2H_INIT_RSP      = BFA_I2HM(BFI_MSGQ_H2I_INIT_REQ),
 380         BFI_MSGQ_I2H_DOORBELL_PI        = BFA_I2HM(BFI_MSGQ_H2I_DOORBELL_PI),
 381         BFI_MSGQ_I2H_DOORBELL_CI        = BFA_I2HM(BFI_MSGQ_H2I_DOORBELL_CI),
 382         BFI_MSGQ_I2H_CMDQ_COPY_REQ      = BFA_I2HM(BFI_MSGQ_H2I_CMDQ_COPY_RSP),
 383 };
 384 
 385 /* Messages(commands/responsed/AENS will have the following header */
 386 struct bfi_msgq_mhdr {
 387         u8      msg_class;
 388         u8      msg_id;
 389         u16     msg_token;
 390         u16     num_entries;
 391         u8      enet_id;
 392         u8      rsvd[1];
 393 } __packed;
 394 
 395 #define bfi_msgq_mhdr_set(_mh, _mc, _mid, _tok, _enet_id) do {  \
 396         (_mh).msg_class  = (_mc);       \
 397         (_mh).msg_id        = (_mid);       \
 398         (_mh).msg_token  = (_tok);       \
 399         (_mh).enet_id      = (_enet_id);   \
 400 } while (0)
 401 
 402 /*
 403  * Mailbox  for messaging interface
 404  */
 405 #define BFI_MSGQ_CMD_ENTRY_SIZE  (64)    /* TBD */
 406 #define BFI_MSGQ_RSP_ENTRY_SIZE  (64)    /* TBD */
 407 
 408 #define bfi_msgq_num_cmd_entries(_size)                          \
 409         (((_size) + BFI_MSGQ_CMD_ENTRY_SIZE - 1) / BFI_MSGQ_CMD_ENTRY_SIZE)
 410 
 411 struct bfi_msgq {
 412         union bfi_addr_u addr;
 413         u16 q_depth;     /* Total num of entries in the queue */
 414         u8 rsvd[2];
 415 } __packed;
 416 
 417 /* BFI_ENET_MSGQ_CFG_REQ TBD init or cfg? */
 418 struct bfi_msgq_cfg_req {
 419         struct bfi_mhdr mh;
 420         struct bfi_msgq cmdq;
 421         struct bfi_msgq rspq;
 422 } __packed;
 423 
 424 /* BFI_ENET_MSGQ_CFG_RSP */
 425 struct bfi_msgq_cfg_rsp {
 426         struct bfi_mhdr mh;
 427         u8 cmd_status;
 428         u8 rsvd[3];
 429 } __packed;
 430 
 431 /* BFI_MSGQ_H2I_DOORBELL */
 432 struct bfi_msgq_h2i_db {
 433         struct bfi_mhdr mh;
 434         union {
 435                 u16 cmdq_pi;
 436                 u16 rspq_ci;
 437         } __packed idx;
 438 } __packed;
 439 
 440 /* BFI_MSGQ_I2H_DOORBELL */
 441 struct bfi_msgq_i2h_db {
 442         struct bfi_mhdr mh;
 443         union {
 444                 u16 rspq_pi;
 445                 u16 cmdq_ci;
 446         } __packed idx;
 447 } __packed;
 448 
 449 #define BFI_CMD_COPY_SZ 28
 450 
 451 /* BFI_MSGQ_H2I_CMD_COPY_RSP */
 452 struct bfi_msgq_h2i_cmdq_copy_rsp {
 453         struct bfi_mhdr mh;
 454         u8            data[BFI_CMD_COPY_SZ];
 455 } __packed;
 456 
 457 /* BFI_MSGQ_I2H_CMD_COPY_REQ */
 458 struct bfi_msgq_i2h_cmdq_copy_req {
 459         struct bfi_mhdr mh;
 460         u16     offset;
 461         u16     len;
 462 } __packed;
 463 
 464 /*
 465  *      FLASH module specific
 466  */
 467 enum bfi_flash_h2i_msgs {
 468         BFI_FLASH_H2I_QUERY_REQ = 1,
 469         BFI_FLASH_H2I_ERASE_REQ = 2,
 470         BFI_FLASH_H2I_WRITE_REQ = 3,
 471         BFI_FLASH_H2I_READ_REQ = 4,
 472         BFI_FLASH_H2I_BOOT_VER_REQ = 5,
 473 };
 474 
 475 enum bfi_flash_i2h_msgs {
 476         BFI_FLASH_I2H_QUERY_RSP = BFA_I2HM(1),
 477         BFI_FLASH_I2H_ERASE_RSP = BFA_I2HM(2),
 478         BFI_FLASH_I2H_WRITE_RSP = BFA_I2HM(3),
 479         BFI_FLASH_I2H_READ_RSP = BFA_I2HM(4),
 480         BFI_FLASH_I2H_BOOT_VER_RSP = BFA_I2HM(5),
 481         BFI_FLASH_I2H_EVENT = BFA_I2HM(127),
 482 };
 483 
 484 /*
 485  * Flash query request
 486  */
 487 struct bfi_flash_query_req {
 488         struct bfi_mhdr mh;   /* Common msg header */
 489         struct bfi_alen alen;
 490 } __packed;
 491 
 492 /*
 493  * Flash write request
 494  */
 495 struct bfi_flash_write_req {
 496         struct bfi_mhdr mh;     /* Common msg header */
 497         struct bfi_alen alen;
 498         u32     type;   /* partition type */
 499         u8      instance; /* partition instance */
 500         u8      last;
 501         u8      rsv[2];
 502         u32     offset;
 503         u32     length;
 504 } __packed;
 505 
 506 /*
 507  * Flash read request
 508  */
 509 struct bfi_flash_read_req {
 510         struct bfi_mhdr mh;     /* Common msg header */
 511         u32     type;           /* partition type */
 512         u8      instance;       /* partition instance */
 513         u8      rsv[3];
 514         u32     offset;
 515         u32     length;
 516         struct bfi_alen alen;
 517 } __packed;
 518 
 519 /*
 520  * Flash query response
 521  */
 522 struct bfi_flash_query_rsp {
 523         struct bfi_mhdr mh;     /* Common msg header */
 524         u32     status;
 525 } __packed;
 526 
 527 /*
 528  * Flash read response
 529  */
 530 struct bfi_flash_read_rsp {
 531         struct bfi_mhdr mh;     /* Common msg header */
 532         u32     type;           /* partition type */
 533         u8      instance;       /* partition instance */
 534         u8      rsv[3];
 535         u32     status;
 536         u32     length;
 537 } __packed;
 538 
 539 /*
 540  * Flash write response
 541  */
 542 struct bfi_flash_write_rsp {
 543         struct bfi_mhdr mh;     /* Common msg header */
 544         u32     type;           /* partition type */
 545         u8      instance;       /* partition instance */
 546         u8      rsv[3];
 547         u32     status;
 548         u32     length;
 549 } __packed;
 550 
 551 #endif /* __BFI_H__ */

/* [<][>][^][v][top][bottom][index][help] */