1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2016 Hisilicon Limited. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This software is available to you under a choice of one of two 5*4882a593Smuzhiyun * licenses. You may choose to be licensed under the terms of the GNU 6*4882a593Smuzhiyun * General Public License (GPL) Version 2, available from the file 7*4882a593Smuzhiyun * COPYING in the main directory of this source tree, or the 8*4882a593Smuzhiyun * OpenIB.org BSD license below: 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or 11*4882a593Smuzhiyun * without modification, are permitted provided that the following 12*4882a593Smuzhiyun * conditions are met: 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * - Redistributions of source code must retain the above 15*4882a593Smuzhiyun * copyright notice, this list of conditions and the following 16*4882a593Smuzhiyun * disclaimer. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above 19*4882a593Smuzhiyun * copyright notice, this list of conditions and the following 20*4882a593Smuzhiyun * disclaimer in the documentation and/or other materials 21*4882a593Smuzhiyun * provided with the distribution. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24*4882a593Smuzhiyun * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25*4882a593Smuzhiyun * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26*4882a593Smuzhiyun * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27*4882a593Smuzhiyun * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28*4882a593Smuzhiyun * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29*4882a593Smuzhiyun * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30*4882a593Smuzhiyun * SOFTWARE. 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #ifndef _HNS_ROCE_CMD_H 34*4882a593Smuzhiyun #define _HNS_ROCE_CMD_H 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define HNS_ROCE_MAILBOX_SIZE 4096 37*4882a593Smuzhiyun #define HNS_ROCE_CMD_TIMEOUT_MSECS 10000 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun enum { 40*4882a593Smuzhiyun /* QPC BT commands */ 41*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_QPC_BT0 = 0x0, 42*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_QPC_BT1 = 0x1, 43*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_QPC_BT2 = 0x2, 44*4882a593Smuzhiyun HNS_ROCE_CMD_READ_QPC_BT0 = 0x4, 45*4882a593Smuzhiyun HNS_ROCE_CMD_READ_QPC_BT1 = 0x5, 46*4882a593Smuzhiyun HNS_ROCE_CMD_READ_QPC_BT2 = 0x6, 47*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_QPC_BT0 = 0x8, 48*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_QPC_BT1 = 0x9, 49*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_QPC_BT2 = 0xa, 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* QPC operation */ 52*4882a593Smuzhiyun HNS_ROCE_CMD_MODIFY_QPC = 0x41, 53*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_QPC = 0x42, 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun HNS_ROCE_CMD_MODIFY_CQC = 0x52, 56*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_CQC = 0x53, 57*4882a593Smuzhiyun /* CQC BT commands */ 58*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_CQC_BT0 = 0x10, 59*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_CQC_BT1 = 0x11, 60*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_CQC_BT2 = 0x12, 61*4882a593Smuzhiyun HNS_ROCE_CMD_READ_CQC_BT0 = 0x14, 62*4882a593Smuzhiyun HNS_ROCE_CMD_READ_CQC_BT1 = 0x15, 63*4882a593Smuzhiyun HNS_ROCE_CMD_READ_CQC_BT2 = 0x1b, 64*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_CQC_BT0 = 0x18, 65*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_CQC_BT1 = 0x19, 66*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_CQC_BT2 = 0x1a, 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* MPT BT commands */ 69*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_MPT_BT0 = 0x20, 70*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_MPT_BT1 = 0x21, 71*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_MPT_BT2 = 0x22, 72*4882a593Smuzhiyun HNS_ROCE_CMD_READ_MPT_BT0 = 0x24, 73*4882a593Smuzhiyun HNS_ROCE_CMD_READ_MPT_BT1 = 0x25, 74*4882a593Smuzhiyun HNS_ROCE_CMD_READ_MPT_BT2 = 0x26, 75*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_MPT_BT0 = 0x28, 76*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_MPT_BT1 = 0x29, 77*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_MPT_BT2 = 0x2a, 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* CQC TIMER commands */ 80*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_CQC_TIMER_BT0 = 0x23, 81*4882a593Smuzhiyun HNS_ROCE_CMD_READ_CQC_TIMER_BT0 = 0x27, 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* MPT commands */ 84*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_MPT = 0x62, 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* SRQC BT commands */ 87*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_SRQC_BT0 = 0x30, 88*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_SRQC_BT1 = 0x31, 89*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_SRQC_BT2 = 0x32, 90*4882a593Smuzhiyun HNS_ROCE_CMD_READ_SRQC_BT0 = 0x34, 91*4882a593Smuzhiyun HNS_ROCE_CMD_READ_SRQC_BT1 = 0x35, 92*4882a593Smuzhiyun HNS_ROCE_CMD_READ_SRQC_BT2 = 0x36, 93*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_SRQC_BT0 = 0x38, 94*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_SRQC_BT1 = 0x39, 95*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_SRQC_BT2 = 0x3a, 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* QPC TIMER commands */ 98*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_QPC_TIMER_BT0 = 0x33, 99*4882a593Smuzhiyun HNS_ROCE_CMD_READ_QPC_TIMER_BT0 = 0x37, 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* EQC commands */ 102*4882a593Smuzhiyun HNS_ROCE_CMD_CREATE_AEQC = 0x80, 103*4882a593Smuzhiyun HNS_ROCE_CMD_MODIFY_AEQC = 0x81, 104*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_AEQC = 0x82, 105*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_AEQC = 0x83, 106*4882a593Smuzhiyun HNS_ROCE_CMD_CREATE_CEQC = 0x90, 107*4882a593Smuzhiyun HNS_ROCE_CMD_MODIFY_CEQC = 0x91, 108*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_CEQC = 0x92, 109*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_CEQC = 0x93, 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* SCC CTX BT commands */ 112*4882a593Smuzhiyun HNS_ROCE_CMD_READ_SCCC_BT0 = 0xa4, 113*4882a593Smuzhiyun HNS_ROCE_CMD_WRITE_SCCC_BT0 = 0xa5, 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun enum { 117*4882a593Smuzhiyun /* TPT commands */ 118*4882a593Smuzhiyun HNS_ROCE_CMD_CREATE_MPT = 0xd, 119*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_MPT = 0xf, 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* CQ commands */ 122*4882a593Smuzhiyun HNS_ROCE_CMD_CREATE_CQC = 0x16, 123*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_CQC = 0x17, 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* QP/EE commands */ 126*4882a593Smuzhiyun HNS_ROCE_CMD_RST2INIT_QP = 0x19, 127*4882a593Smuzhiyun HNS_ROCE_CMD_INIT2RTR_QP = 0x1a, 128*4882a593Smuzhiyun HNS_ROCE_CMD_RTR2RTS_QP = 0x1b, 129*4882a593Smuzhiyun HNS_ROCE_CMD_RTS2RTS_QP = 0x1c, 130*4882a593Smuzhiyun HNS_ROCE_CMD_2ERR_QP = 0x1e, 131*4882a593Smuzhiyun HNS_ROCE_CMD_RTS2SQD_QP = 0x1f, 132*4882a593Smuzhiyun HNS_ROCE_CMD_SQD2RTS_QP = 0x20, 133*4882a593Smuzhiyun HNS_ROCE_CMD_2RST_QP = 0x21, 134*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_QP = 0x22, 135*4882a593Smuzhiyun HNS_ROCE_CMD_SQD2SQD_QP = 0x38, 136*4882a593Smuzhiyun HNS_ROCE_CMD_CREATE_SRQ = 0x70, 137*4882a593Smuzhiyun HNS_ROCE_CMD_MODIFY_SRQC = 0x72, 138*4882a593Smuzhiyun HNS_ROCE_CMD_QUERY_SRQC = 0x73, 139*4882a593Smuzhiyun HNS_ROCE_CMD_DESTROY_SRQ = 0x74, 140*4882a593Smuzhiyun }; 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun int hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param, 143*4882a593Smuzhiyun unsigned long in_modifier, u8 op_modifier, u16 op, 144*4882a593Smuzhiyun unsigned long timeout); 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun struct hns_roce_cmd_mailbox 147*4882a593Smuzhiyun *hns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev); 148*4882a593Smuzhiyun void hns_roce_free_cmd_mailbox(struct hns_roce_dev *hr_dev, 149*4882a593Smuzhiyun struct hns_roce_cmd_mailbox *mailbox); 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #endif /* _HNS_ROCE_CMD_H */ 152