1*dfb99b05SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2*dfb99b05SThomas Gleixner /* Copyright 2014 Cisco Systems, Inc. All rights reserved. */
3c8806b6cSNarsimhulu Musini
4c8806b6cSNarsimhulu Musini #ifndef __SNIC_RES_H
5c8806b6cSNarsimhulu Musini #define __SNIC_RES_H
6c8806b6cSNarsimhulu Musini
7c8806b6cSNarsimhulu Musini #include "snic_io.h"
8c8806b6cSNarsimhulu Musini #include "wq_enet_desc.h"
9c8806b6cSNarsimhulu Musini #include "vnic_wq.h"
10c8806b6cSNarsimhulu Musini #include "snic_fwint.h"
11c8806b6cSNarsimhulu Musini #include "vnic_cq_fw.h"
12c8806b6cSNarsimhulu Musini
13c8806b6cSNarsimhulu Musini static inline void
snic_icmnd_init(struct snic_host_req * req,u32 cmnd_id,u32 host_id,u64 ctx,u16 flags,u64 tgt_id,u8 * lun,u8 * scsi_cdb,u8 cdb_len,u32 data_len,u16 sg_cnt,ulong sgl_addr,dma_addr_t sns_addr_pa,u32 sense_len)14c8806b6cSNarsimhulu Musini snic_icmnd_init(struct snic_host_req *req, u32 cmnd_id, u32 host_id, u64 ctx,
15c8806b6cSNarsimhulu Musini u16 flags, u64 tgt_id, u8 *lun, u8 *scsi_cdb, u8 cdb_len,
16c8806b6cSNarsimhulu Musini u32 data_len, u16 sg_cnt, ulong sgl_addr,
17c8806b6cSNarsimhulu Musini dma_addr_t sns_addr_pa, u32 sense_len)
18c8806b6cSNarsimhulu Musini {
19c8806b6cSNarsimhulu Musini snic_io_hdr_enc(&req->hdr, SNIC_REQ_ICMND, 0, cmnd_id, host_id, sg_cnt,
20c8806b6cSNarsimhulu Musini ctx);
21c8806b6cSNarsimhulu Musini
22c8806b6cSNarsimhulu Musini req->u.icmnd.flags = cpu_to_le16(flags);
23c8806b6cSNarsimhulu Musini req->u.icmnd.tgt_id = cpu_to_le64(tgt_id);
24c8806b6cSNarsimhulu Musini memcpy(&req->u.icmnd.lun_id, lun, LUN_ADDR_LEN);
25c8806b6cSNarsimhulu Musini req->u.icmnd.cdb_len = cdb_len;
26c8806b6cSNarsimhulu Musini memset(req->u.icmnd.cdb, 0, SNIC_CDB_LEN);
27c8806b6cSNarsimhulu Musini memcpy(req->u.icmnd.cdb, scsi_cdb, cdb_len);
28c8806b6cSNarsimhulu Musini req->u.icmnd.data_len = cpu_to_le32(data_len);
29c8806b6cSNarsimhulu Musini req->u.icmnd.sg_addr = cpu_to_le64(sgl_addr);
30c8806b6cSNarsimhulu Musini req->u.icmnd.sense_len = cpu_to_le32(sense_len);
31c8806b6cSNarsimhulu Musini req->u.icmnd.sense_addr = cpu_to_le64(sns_addr_pa);
32c8806b6cSNarsimhulu Musini }
33c8806b6cSNarsimhulu Musini
34c8806b6cSNarsimhulu Musini static inline void
snic_itmf_init(struct snic_host_req * req,u32 cmnd_id,u32 host_id,ulong ctx,u16 flags,u32 req_id,u64 tgt_id,u8 * lun,u8 tm_type)35c8806b6cSNarsimhulu Musini snic_itmf_init(struct snic_host_req *req, u32 cmnd_id, u32 host_id, ulong ctx,
36c8806b6cSNarsimhulu Musini u16 flags, u32 req_id, u64 tgt_id, u8 *lun, u8 tm_type)
37c8806b6cSNarsimhulu Musini {
38c8806b6cSNarsimhulu Musini snic_io_hdr_enc(&req->hdr, SNIC_REQ_ITMF, 0, cmnd_id, host_id, 0, ctx);
39c8806b6cSNarsimhulu Musini
40c8806b6cSNarsimhulu Musini req->u.itmf.tm_type = tm_type;
41c8806b6cSNarsimhulu Musini req->u.itmf.flags = cpu_to_le16(flags);
42c8806b6cSNarsimhulu Musini /* req_id valid only in abort, clear task */
43c8806b6cSNarsimhulu Musini req->u.itmf.req_id = cpu_to_le32(req_id);
44c8806b6cSNarsimhulu Musini req->u.itmf.tgt_id = cpu_to_le64(tgt_id);
45c8806b6cSNarsimhulu Musini memcpy(&req->u.itmf.lun_id, lun, LUN_ADDR_LEN);
46c8806b6cSNarsimhulu Musini }
47c8806b6cSNarsimhulu Musini
48c8806b6cSNarsimhulu Musini static inline void
snic_queue_wq_eth_desc(struct vnic_wq * wq,void * os_buf,dma_addr_t dma_addr,unsigned int len,int vlan_tag_insert,unsigned int vlan_tag,int cq_entry)49c8806b6cSNarsimhulu Musini snic_queue_wq_eth_desc(struct vnic_wq *wq,
50c8806b6cSNarsimhulu Musini void *os_buf,
51c8806b6cSNarsimhulu Musini dma_addr_t dma_addr,
52c8806b6cSNarsimhulu Musini unsigned int len,
53c8806b6cSNarsimhulu Musini int vlan_tag_insert,
54c8806b6cSNarsimhulu Musini unsigned int vlan_tag,
55c8806b6cSNarsimhulu Musini int cq_entry)
56c8806b6cSNarsimhulu Musini {
57c8806b6cSNarsimhulu Musini struct wq_enet_desc *desc = svnic_wq_next_desc(wq);
58c8806b6cSNarsimhulu Musini
59c8806b6cSNarsimhulu Musini wq_enet_desc_enc(desc,
60c8806b6cSNarsimhulu Musini (u64)dma_addr | VNIC_PADDR_TARGET,
61c8806b6cSNarsimhulu Musini (u16)len,
62c8806b6cSNarsimhulu Musini 0, /* mss_or_csum_offset */
63c8806b6cSNarsimhulu Musini 0, /* fc_eof */
64c8806b6cSNarsimhulu Musini 0, /* offload mode */
65c8806b6cSNarsimhulu Musini 1, /* eop */
66c8806b6cSNarsimhulu Musini (u8)cq_entry,
67c8806b6cSNarsimhulu Musini 0, /* fcoe_encap */
68c8806b6cSNarsimhulu Musini (u8)vlan_tag_insert,
69c8806b6cSNarsimhulu Musini (u16)vlan_tag,
70c8806b6cSNarsimhulu Musini 0 /* loopback */);
71c8806b6cSNarsimhulu Musini
72c8806b6cSNarsimhulu Musini svnic_wq_post(wq, os_buf, dma_addr, len, 1, 1);
73c8806b6cSNarsimhulu Musini }
74c8806b6cSNarsimhulu Musini
75c8806b6cSNarsimhulu Musini struct snic;
76c8806b6cSNarsimhulu Musini
77c8806b6cSNarsimhulu Musini int snic_get_vnic_config(struct snic *);
78c8806b6cSNarsimhulu Musini int snic_alloc_vnic_res(struct snic *);
79c8806b6cSNarsimhulu Musini void snic_free_vnic_res(struct snic *);
80c8806b6cSNarsimhulu Musini void snic_get_res_counts(struct snic *);
81c8806b6cSNarsimhulu Musini void snic_log_q_error(struct snic *);
82c8806b6cSNarsimhulu Musini int snic_get_vnic_resources_size(struct snic *);
83c8806b6cSNarsimhulu Musini #endif /* __SNIC_RES_H */
84