1250661Sdavidcs/* 2284982Sdavidcs * Copyright (c) 2013-2016 Qlogic Corporation 3250661Sdavidcs * All rights reserved. 4250661Sdavidcs * 5250661Sdavidcs * Redistribution and use in source and binary forms, with or without 6250661Sdavidcs * modification, are permitted provided that the following conditions 7250661Sdavidcs * are met: 8250661Sdavidcs * 9250661Sdavidcs * 1. Redistributions of source code must retain the above copyright 10250661Sdavidcs * notice, this list of conditions and the following disclaimer. 11250661Sdavidcs * 2. Redistributions in binary form must reproduce the above copyright 12250661Sdavidcs * notice, this list of conditions and the following disclaimer in the 13250661Sdavidcs * documentation and/or other materials provided with the distribution. 14250661Sdavidcs * 15250661Sdavidcs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16250661Sdavidcs * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17250661Sdavidcs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18250661Sdavidcs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19250661Sdavidcs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20250661Sdavidcs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21250661Sdavidcs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22250661Sdavidcs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23250661Sdavidcs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24250661Sdavidcs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25250661Sdavidcs * POSSIBILITY OF SUCH DAMAGE. 26250661Sdavidcs * 27250661Sdavidcs * $FreeBSD$ 28250661Sdavidcs */ 29250661Sdavidcs/* 30250661Sdavidcs * File: ql_tmplt.h 31250661Sdavidcs * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 32250661Sdavidcs */ 33250661Sdavidcs#ifndef _QL_TMPLT_H_ 34250661Sdavidcs#define _QL_TMPLT_H_ 35250661Sdavidcs 36250661Sdavidcs 37250661Sdavidcstypedef struct _q8_tmplt_hdr { 38250661Sdavidcs uint16_t version; 39250661Sdavidcs uint16_t signature; 40250661Sdavidcs uint16_t size; 41250661Sdavidcs uint16_t nentries; 42250661Sdavidcs uint16_t stop_seq_off; 43250661Sdavidcs uint16_t csum; 44250661Sdavidcs uint16_t init_seq_off; 45250661Sdavidcs uint16_t start_seq_off; 46250661Sdavidcs} __packed q8_tmplt_hdr_t; 47250661Sdavidcs 48250661Sdavidcs 49250661Sdavidcstypedef struct _q8_ce_hdr { 50250661Sdavidcs uint16_t opcode; 51250661Sdavidcs uint16_t size; 52250661Sdavidcs uint16_t opcount; 53250661Sdavidcs uint16_t delay_to; 54250661Sdavidcs} __packed q8_ce_hdr_t; 55250661Sdavidcs 56250661Sdavidcs/* 57250661Sdavidcs * Values for opcode field in q8_ce_hdr_t 58250661Sdavidcs */ 59250661Sdavidcs#define Q8_CE_OPCODE_NOP 0x000 60250661Sdavidcs#define Q8_CE_OPCODE_WRITE_LIST 0x001 61250661Sdavidcs#define Q8_CE_OPCODE_READ_WRITE_LIST 0x002 62250661Sdavidcs#define Q8_CE_OPCODE_POLL_LIST 0x004 63250661Sdavidcs#define Q8_CE_OPCODE_POLL_WRITE_LIST 0x008 64250661Sdavidcs#define Q8_CE_OPCODE_READ_MODIFY_WRITE 0x010 65250661Sdavidcs#define Q8_CE_OPCODE_SEQ_PAUSE 0x020 66250661Sdavidcs#define Q8_CE_OPCODE_SEQ_END 0x040 67250661Sdavidcs#define Q8_CE_OPCODE_TMPLT_END 0x080 68250661Sdavidcs#define Q8_CE_OPCODE_POLL_RD_LIST 0x100 69250661Sdavidcs 70250661Sdavidcs/* 71250661Sdavidcs * structure for Q8_CE_OPCODE_WRITE_LIST 72250661Sdavidcs */ 73250661Sdavidcstypedef struct _q8_wrl_e { 74250661Sdavidcs uint32_t addr; 75250661Sdavidcs uint32_t value; 76250661Sdavidcs} __packed q8_wrl_e_t; 77250661Sdavidcs 78250661Sdavidcs/* 79250661Sdavidcs * structure for Q8_CE_OPCODE_READ_WRITE_LIST 80250661Sdavidcs */ 81250661Sdavidcstypedef struct _q8_rdwrl_e { 82250661Sdavidcs uint32_t rd_addr; 83250661Sdavidcs uint32_t wr_addr; 84250661Sdavidcs} __packed q8_rdwrl_e_t; 85250661Sdavidcs 86250661Sdavidcs/* 87250661Sdavidcs * common for 88250661Sdavidcs * Q8_CE_OPCODE_POLL_LIST 89250661Sdavidcs * Q8_CE_OPCODE_POLL_WRITE_LIST 90250661Sdavidcs * Q8_CE_OPCODE_POLL_RD_LIST 91250661Sdavidcs */ 92250661Sdavidcstypedef struct _q8_poll_hdr { 93250661Sdavidcs uint32_t tmask; 94250661Sdavidcs uint32_t tvalue; 95250661Sdavidcs} q8_poll_hdr_t; 96250661Sdavidcs 97250661Sdavidcs/* 98250661Sdavidcs * structure for Q8_CE_OPCODE_POLL_LIST 99250661Sdavidcs */ 100250661Sdavidcstypedef struct _q8_poll_e { 101250661Sdavidcs uint32_t addr; 102250661Sdavidcs uint32_t to_addr; 103250661Sdavidcs} q8_poll_e_t; 104250661Sdavidcs 105250661Sdavidcs/* 106250661Sdavidcs * structure for Q8_CE_OPCODE_POLL_WRITE_LIST 107250661Sdavidcs */ 108250661Sdavidcstypedef struct _q8_poll_wr_e { 109250661Sdavidcs uint32_t dr_addr; 110250661Sdavidcs uint32_t dr_value; 111250661Sdavidcs uint32_t ar_addr; 112250661Sdavidcs uint32_t ar_value; 113250661Sdavidcs} q8_poll_wr_e_t; 114250661Sdavidcs 115250661Sdavidcs/* 116250661Sdavidcs * structure for Q8_CE_OPCODE_POLL_RD_LIST 117250661Sdavidcs */ 118250661Sdavidcstypedef struct _q8_poll_rd_e { 119250661Sdavidcs uint32_t ar_addr; 120250661Sdavidcs uint32_t ar_value; 121250661Sdavidcs uint32_t dr_addr; 122250661Sdavidcs uint32_t rsrvd; 123250661Sdavidcs} q8_poll_rd_e_t; 124250661Sdavidcs 125250661Sdavidcs/* 126250661Sdavidcs * structure for Q8_CE_OPCODE_READ_MODIFY_WRITE 127250661Sdavidcs */ 128250661Sdavidcstypedef struct _q8_rdmwr_hdr { 129250661Sdavidcs uint32_t and_value; 130250661Sdavidcs uint32_t xor_value; 131250661Sdavidcs uint32_t or_value; 132250661Sdavidcs uint8_t shl; 133250661Sdavidcs uint8_t shr; 134250661Sdavidcs uint8_t index_a; 135250661Sdavidcs uint8_t rsrvd; 136250661Sdavidcs} q8_rdmwr_hdr_t; 137250661Sdavidcs 138250661Sdavidcstypedef struct _q8_rdmwr_e { 139250661Sdavidcs uint32_t rd_addr; 140250661Sdavidcs uint32_t wr_addr; 141250661Sdavidcs} q8_rdmwr_e_t; 142250661Sdavidcs 143250661Sdavidcs#endif /* #ifndef _QL_TMPLT_H_ */ 144