162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Copyright (c) 2016 Hisilicon Limited. 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * This software is available to you under a choice of one of two 562306a36Sopenharmony_ci * licenses. You may choose to be licensed under the terms of the GNU 662306a36Sopenharmony_ci * General Public License (GPL) Version 2, available from the file 762306a36Sopenharmony_ci * COPYING in the main directory of this source tree, or the 862306a36Sopenharmony_ci * OpenIB.org BSD license below: 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Redistribution and use in source and binary forms, with or 1162306a36Sopenharmony_ci * without modification, are permitted provided that the following 1262306a36Sopenharmony_ci * conditions are met: 1362306a36Sopenharmony_ci * 1462306a36Sopenharmony_ci * - Redistributions of source code must retain the above 1562306a36Sopenharmony_ci * copyright notice, this list of conditions and the following 1662306a36Sopenharmony_ci * disclaimer. 1762306a36Sopenharmony_ci * 1862306a36Sopenharmony_ci * - Redistributions in binary form must reproduce the above 1962306a36Sopenharmony_ci * copyright notice, this list of conditions and the following 2062306a36Sopenharmony_ci * disclaimer in the documentation and/or other materials 2162306a36Sopenharmony_ci * provided with the distribution. 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 2462306a36Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2562306a36Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 2662306a36Sopenharmony_ci * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 2762306a36Sopenharmony_ci * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 2862306a36Sopenharmony_ci * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 2962306a36Sopenharmony_ci * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3062306a36Sopenharmony_ci * SOFTWARE. 3162306a36Sopenharmony_ci */ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#ifndef _HNS_ROCE_CMD_H 3462306a36Sopenharmony_ci#define _HNS_ROCE_CMD_H 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define HNS_ROCE_MAILBOX_SIZE 4096 3762306a36Sopenharmony_ci#define HNS_ROCE_CMD_TIMEOUT_MSECS 10000 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cienum { 4062306a36Sopenharmony_ci /* QPC BT commands */ 4162306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_QPC_BT0 = 0x0, 4262306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_QPC_BT1 = 0x1, 4362306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_QPC_BT2 = 0x2, 4462306a36Sopenharmony_ci HNS_ROCE_CMD_READ_QPC_BT0 = 0x4, 4562306a36Sopenharmony_ci HNS_ROCE_CMD_READ_QPC_BT1 = 0x5, 4662306a36Sopenharmony_ci HNS_ROCE_CMD_READ_QPC_BT2 = 0x6, 4762306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_QPC_BT0 = 0x8, 4862306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_QPC_BT1 = 0x9, 4962306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_QPC_BT2 = 0xa, 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci /* QPC operation */ 5262306a36Sopenharmony_ci HNS_ROCE_CMD_MODIFY_QPC = 0x41, 5362306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_QPC = 0x42, 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci HNS_ROCE_CMD_MODIFY_CQC = 0x52, 5662306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_CQC = 0x53, 5762306a36Sopenharmony_ci /* CQC BT commands */ 5862306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_CQC_BT0 = 0x10, 5962306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_CQC_BT1 = 0x11, 6062306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_CQC_BT2 = 0x12, 6162306a36Sopenharmony_ci HNS_ROCE_CMD_READ_CQC_BT0 = 0x14, 6262306a36Sopenharmony_ci HNS_ROCE_CMD_READ_CQC_BT1 = 0x15, 6362306a36Sopenharmony_ci HNS_ROCE_CMD_READ_CQC_BT2 = 0x1b, 6462306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_CQC_BT0 = 0x18, 6562306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_CQC_BT1 = 0x19, 6662306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_CQC_BT2 = 0x1a, 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci /* MPT BT commands */ 6962306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_MPT_BT0 = 0x20, 7062306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_MPT_BT1 = 0x21, 7162306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_MPT_BT2 = 0x22, 7262306a36Sopenharmony_ci HNS_ROCE_CMD_READ_MPT_BT0 = 0x24, 7362306a36Sopenharmony_ci HNS_ROCE_CMD_READ_MPT_BT1 = 0x25, 7462306a36Sopenharmony_ci HNS_ROCE_CMD_READ_MPT_BT2 = 0x26, 7562306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_MPT_BT0 = 0x28, 7662306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_MPT_BT1 = 0x29, 7762306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_MPT_BT2 = 0x2a, 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci /* CQC TIMER commands */ 8062306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_CQC_TIMER_BT0 = 0x23, 8162306a36Sopenharmony_ci HNS_ROCE_CMD_READ_CQC_TIMER_BT0 = 0x27, 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* MPT commands */ 8462306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_MPT = 0x62, 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci /* SRQC BT commands */ 8762306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_SRQC_BT0 = 0x30, 8862306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_SRQC_BT1 = 0x31, 8962306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_SRQC_BT2 = 0x32, 9062306a36Sopenharmony_ci HNS_ROCE_CMD_READ_SRQC_BT0 = 0x34, 9162306a36Sopenharmony_ci HNS_ROCE_CMD_READ_SRQC_BT1 = 0x35, 9262306a36Sopenharmony_ci HNS_ROCE_CMD_READ_SRQC_BT2 = 0x36, 9362306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_SRQC_BT0 = 0x38, 9462306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_SRQC_BT1 = 0x39, 9562306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_SRQC_BT2 = 0x3a, 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci /* QPC TIMER commands */ 9862306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_QPC_TIMER_BT0 = 0x33, 9962306a36Sopenharmony_ci HNS_ROCE_CMD_READ_QPC_TIMER_BT0 = 0x37, 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci /* EQC commands */ 10262306a36Sopenharmony_ci HNS_ROCE_CMD_CREATE_AEQC = 0x80, 10362306a36Sopenharmony_ci HNS_ROCE_CMD_MODIFY_AEQC = 0x81, 10462306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_AEQC = 0x82, 10562306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_AEQC = 0x83, 10662306a36Sopenharmony_ci HNS_ROCE_CMD_CREATE_CEQC = 0x90, 10762306a36Sopenharmony_ci HNS_ROCE_CMD_MODIFY_CEQC = 0x91, 10862306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_CEQC = 0x92, 10962306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_CEQC = 0x93, 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci /* SCC CTX BT commands */ 11262306a36Sopenharmony_ci HNS_ROCE_CMD_READ_SCCC_BT0 = 0xa4, 11362306a36Sopenharmony_ci HNS_ROCE_CMD_WRITE_SCCC_BT0 = 0xa5, 11462306a36Sopenharmony_ci}; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cienum { 11762306a36Sopenharmony_ci /* TPT commands */ 11862306a36Sopenharmony_ci HNS_ROCE_CMD_CREATE_MPT = 0xd, 11962306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_MPT = 0xf, 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci /* CQ commands */ 12262306a36Sopenharmony_ci HNS_ROCE_CMD_CREATE_CQC = 0x16, 12362306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_CQC = 0x17, 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci /* QP/EE commands */ 12662306a36Sopenharmony_ci HNS_ROCE_CMD_RST2INIT_QP = 0x19, 12762306a36Sopenharmony_ci HNS_ROCE_CMD_INIT2RTR_QP = 0x1a, 12862306a36Sopenharmony_ci HNS_ROCE_CMD_RTR2RTS_QP = 0x1b, 12962306a36Sopenharmony_ci HNS_ROCE_CMD_RTS2RTS_QP = 0x1c, 13062306a36Sopenharmony_ci HNS_ROCE_CMD_2ERR_QP = 0x1e, 13162306a36Sopenharmony_ci HNS_ROCE_CMD_RTS2SQD_QP = 0x1f, 13262306a36Sopenharmony_ci HNS_ROCE_CMD_SQD2RTS_QP = 0x20, 13362306a36Sopenharmony_ci HNS_ROCE_CMD_2RST_QP = 0x21, 13462306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_QP = 0x22, 13562306a36Sopenharmony_ci HNS_ROCE_CMD_SQD2SQD_QP = 0x38, 13662306a36Sopenharmony_ci HNS_ROCE_CMD_CREATE_SRQ = 0x70, 13762306a36Sopenharmony_ci HNS_ROCE_CMD_MODIFY_SRQC = 0x72, 13862306a36Sopenharmony_ci HNS_ROCE_CMD_QUERY_SRQC = 0x73, 13962306a36Sopenharmony_ci HNS_ROCE_CMD_DESTROY_SRQ = 0x74, 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciint hns_roce_cmd_mbox(struct hns_roce_dev *hr_dev, u64 in_param, u64 out_param, 14362306a36Sopenharmony_ci u8 cmd, unsigned long tag); 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cistruct hns_roce_cmd_mailbox * 14662306a36Sopenharmony_cihns_roce_alloc_cmd_mailbox(struct hns_roce_dev *hr_dev); 14762306a36Sopenharmony_civoid hns_roce_free_cmd_mailbox(struct hns_roce_dev *hr_dev, 14862306a36Sopenharmony_ci struct hns_roce_cmd_mailbox *mailbox); 14962306a36Sopenharmony_ciint hns_roce_create_hw_ctx(struct hns_roce_dev *dev, 15062306a36Sopenharmony_ci struct hns_roce_cmd_mailbox *mailbox, 15162306a36Sopenharmony_ci u8 cmd, unsigned long idx); 15262306a36Sopenharmony_ciint hns_roce_destroy_hw_ctx(struct hns_roce_dev *dev, u8 cmd, 15362306a36Sopenharmony_ci unsigned long idx); 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci#endif /* _HNS_ROCE_CMD_H */ 156