162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * cxgb3i.h: Chelsio S3xx iSCSI driver.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (c) 2008-2015 Chelsio Communications, Inc.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
762306a36Sopenharmony_ci * it under the terms of the GNU General Public License as published by
862306a36Sopenharmony_ci * the Free Software Foundation.
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Written by: Karen Xie (kxie@chelsio.com)
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef __CXGB3I_H__
1462306a36Sopenharmony_ci#define __CXGB3I_H__
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#define CXGB3I_SCSI_HOST_QDEPTH 1024
1762306a36Sopenharmony_ci#define CXGB3I_MAX_LUN		512
1862306a36Sopenharmony_ci#define ISCSI_PDU_NONPAYLOAD_MAX \
1962306a36Sopenharmony_ci	(sizeof(struct iscsi_hdr) + ISCSI_MAX_AHS_SIZE + 2*ISCSI_DIGEST_SIZE)
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/*for TX: a skb must have a headroom of at least TX_HEADER_LEN bytes */
2262306a36Sopenharmony_ci#define CXGB3I_TX_HEADER_LEN \
2362306a36Sopenharmony_ci	(sizeof(struct tx_data_wr) + sizeof(struct sge_opaque_hdr))
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciextern cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS];
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic inline unsigned int cxgb3i_get_private_ipv4addr(struct net_device *ndev)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	return ((struct port_info *)(netdev_priv(ndev)))->iscsi_ipv4addr;
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistatic inline void cxgb3i_set_private_ipv4addr(struct net_device *ndev,
3362306a36Sopenharmony_ci						unsigned int addr)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	struct port_info *pi =  (struct port_info *)netdev_priv(ndev);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	pi->iscsic.flags = addr ? 1 : 0;
3862306a36Sopenharmony_ci	pi->iscsi_ipv4addr = addr;
3962306a36Sopenharmony_ci	if (addr)
4062306a36Sopenharmony_ci		memcpy(pi->iscsic.mac_addr, ndev->dev_addr, ETH_ALEN);
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistruct cpl_iscsi_hdr_norss {
4462306a36Sopenharmony_ci	union opcode_tid ot;
4562306a36Sopenharmony_ci	u16 pdu_len_ddp;
4662306a36Sopenharmony_ci	u16 len;
4762306a36Sopenharmony_ci	u32 seq;
4862306a36Sopenharmony_ci	u16 urg;
4962306a36Sopenharmony_ci	u8 rsvd;
5062306a36Sopenharmony_ci	u8 status;
5162306a36Sopenharmony_ci};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cistruct cpl_rx_data_ddp_norss {
5462306a36Sopenharmony_ci	union opcode_tid ot;
5562306a36Sopenharmony_ci	u16 urg;
5662306a36Sopenharmony_ci	u16 len;
5762306a36Sopenharmony_ci	u32 seq;
5862306a36Sopenharmony_ci	u32 nxt_seq;
5962306a36Sopenharmony_ci	u32 ulp_crc;
6062306a36Sopenharmony_ci	u32 ddp_status;
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci#endif
63