Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *   Copyright (C) 2017, Microsoft Corporation.
0004  *   Copyright (C) 2018, LG Electronics.
0005  */
0006 
0007 #ifndef __KSMBD_TRANSPORT_RDMA_H__
0008 #define __KSMBD_TRANSPORT_RDMA_H__
0009 
0010 #define SMBD_DEFAULT_IOSIZE (8 * 1024 * 1024)
0011 #define SMBD_MIN_IOSIZE (512 * 1024)
0012 #define SMBD_MAX_IOSIZE (16 * 1024 * 1024)
0013 
0014 /* SMB DIRECT negotiation request packet [MS-SMBD] 2.2.1 */
0015 struct smb_direct_negotiate_req {
0016     __le16 min_version;
0017     __le16 max_version;
0018     __le16 reserved;
0019     __le16 credits_requested;
0020     __le32 preferred_send_size;
0021     __le32 max_receive_size;
0022     __le32 max_fragmented_size;
0023 } __packed;
0024 
0025 /* SMB DIRECT negotiation response packet [MS-SMBD] 2.2.2 */
0026 struct smb_direct_negotiate_resp {
0027     __le16 min_version;
0028     __le16 max_version;
0029     __le16 negotiated_version;
0030     __le16 reserved;
0031     __le16 credits_requested;
0032     __le16 credits_granted;
0033     __le32 status;
0034     __le32 max_readwrite_size;
0035     __le32 preferred_send_size;
0036     __le32 max_receive_size;
0037     __le32 max_fragmented_size;
0038 } __packed;
0039 
0040 #define SMB_DIRECT_RESPONSE_REQUESTED 0x0001
0041 
0042 /* SMB DIRECT data transfer packet with payload [MS-SMBD] 2.2.3 */
0043 struct smb_direct_data_transfer {
0044     __le16 credits_requested;
0045     __le16 credits_granted;
0046     __le16 flags;
0047     __le16 reserved;
0048     __le32 remaining_data_length;
0049     __le32 data_offset;
0050     __le32 data_length;
0051     __le32 padding;
0052     __u8 buffer[];
0053 } __packed;
0054 
0055 #ifdef CONFIG_SMB_SERVER_SMBDIRECT
0056 int ksmbd_rdma_init(void);
0057 void ksmbd_rdma_destroy(void);
0058 bool ksmbd_rdma_capable_netdev(struct net_device *netdev);
0059 void init_smbd_max_io_size(unsigned int sz);
0060 unsigned int get_smbd_max_read_write_size(void);
0061 #else
0062 static inline int ksmbd_rdma_init(void) { return 0; }
0063 static inline int ksmbd_rdma_destroy(void) { return 0; }
0064 static inline bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { return false; }
0065 static inline void init_smbd_max_io_size(unsigned int sz) { }
0066 static inline unsigned int get_smbd_max_read_write_size(void) { return 0; }
0067 #endif
0068 
0069 #endif /* __KSMBD_TRANSPORT_RDMA_H__ */