1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Huawei HiNIC PCI Express Linux driver 4*4882a593Smuzhiyun * Copyright(c) 2017 Huawei Technologies Co., Ltd 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/kernel.h> 8*4882a593Smuzhiyun #include <linux/types.h> 9*4882a593Smuzhiyun #include <asm/byteorder.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "hinic_common.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /** 14*4882a593Smuzhiyun * hinic_cpu_to_be32 - convert data to big endian 32 bit format 15*4882a593Smuzhiyun * @data: the data to convert 16*4882a593Smuzhiyun * @len: length of data to convert 17*4882a593Smuzhiyun **/ hinic_cpu_to_be32(void * data,int len)18*4882a593Smuzhiyunvoid hinic_cpu_to_be32(void *data, int len) 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun u32 *mem = data; 21*4882a593Smuzhiyun int i; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun len = len / sizeof(u32); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun for (i = 0; i < len; i++) { 26*4882a593Smuzhiyun *mem = cpu_to_be32(*mem); 27*4882a593Smuzhiyun mem++; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /** 32*4882a593Smuzhiyun * hinic_be32_to_cpu - convert data from big endian 32 bit format 33*4882a593Smuzhiyun * @data: the data to convert 34*4882a593Smuzhiyun * @len: length of data to convert 35*4882a593Smuzhiyun **/ hinic_be32_to_cpu(void * data,int len)36*4882a593Smuzhiyunvoid hinic_be32_to_cpu(void *data, int len) 37*4882a593Smuzhiyun { 38*4882a593Smuzhiyun u32 *mem = data; 39*4882a593Smuzhiyun int i; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun len = len / sizeof(u32); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun for (i = 0; i < len; i++) { 44*4882a593Smuzhiyun *mem = be32_to_cpu(*mem); 45*4882a593Smuzhiyun mem++; 46*4882a593Smuzhiyun } 47*4882a593Smuzhiyun } 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /** 50*4882a593Smuzhiyun * hinic_set_sge - set dma area in scatter gather entry 51*4882a593Smuzhiyun * @sge: scatter gather entry 52*4882a593Smuzhiyun * @addr: dma address 53*4882a593Smuzhiyun * @len: length of relevant data in the dma address 54*4882a593Smuzhiyun **/ hinic_set_sge(struct hinic_sge * sge,dma_addr_t addr,int len)55*4882a593Smuzhiyunvoid hinic_set_sge(struct hinic_sge *sge, dma_addr_t addr, int len) 56*4882a593Smuzhiyun { 57*4882a593Smuzhiyun sge->hi_addr = upper_32_bits(addr); 58*4882a593Smuzhiyun sge->lo_addr = lower_32_bits(addr); 59*4882a593Smuzhiyun sge->len = len; 60*4882a593Smuzhiyun } 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /** 63*4882a593Smuzhiyun * hinic_sge_to_dma - get dma address from scatter gather entry 64*4882a593Smuzhiyun * @sge: scatter gather entry 65*4882a593Smuzhiyun * 66*4882a593Smuzhiyun * Return dma address of sg entry 67*4882a593Smuzhiyun **/ hinic_sge_to_dma(struct hinic_sge * sge)68*4882a593Smuzhiyundma_addr_t hinic_sge_to_dma(struct hinic_sge *sge) 69*4882a593Smuzhiyun { 70*4882a593Smuzhiyun return (dma_addr_t)((((u64)sge->hi_addr) << 32) | sge->lo_addr); 71*4882a593Smuzhiyun } 72