78 uint32_t intermediate;
83 for (j = 0; j < addrlen_count; j++) {
84 buffer = addrlen[j].
vaddr;
85 count = addrlen[j].
length / 2;
86 for (i=0; i < count; i++) {
87 intermediate += buffer[i];
92 intermediate += ((intermediate & 0xffff0000) >> 16);
95 intermediate = ~intermediate;
97 checksum = intermediate;
116 uint32_t blocksize = 0;
183 uint8_t wiretomem_adj[] = {
194 uint8_t memtowire_adj[] = {
207 if (blocksize == 0) {
213 blocksize += wiretomem_adj[dif_info->
dif_oper];
216 blocksize += memtowire_adj[dif_info->
dif_oper];
240 uint8_t wiretomem_adj[] = {
251 uint8_t memtowire_adj[] = {
265 if (blocksize == 0) {
271 blocksize += wiretomem_adj[dif_info->
dif_oper];
274 blocksize += memtowire_adj[dif_info->
dif_oper];
293 uint32_t blocksize = 0;
328 uint8_t wiretomem_adj[] = {
339 uint8_t memtowire_adj[] = {
352 if (blocksize == 0) {
358 blocksize += wiretomem_adj[dif_info->
dif_oper];
361 blocksize += memtowire_adj[dif_info->
dif_oper];
385 uint8_t wiretomem_adj[] = {
396 uint8_t memtowire_adj[] = {
410 if (blocksize == 0) {
416 blocksize += wiretomem_adj[dif_info->
dif_oper];
419 blocksize += memtowire_adj[dif_info->
dif_oper];
int32_t ocs_hal_dif_wire_blocksize(ocs_hal_dif_info_t *dif_info, int wiretomem)
Return wire block size given HAL DIF API.
T10 DIF information passed to the transport.
T10 DIF information passed to the transport.
int32_t ocs_scsi_dif_mem_blocksize(ocs_scsi_dif_info_t *dif_info, int wiretomem)
Return memory block size given SCSI DIF API.
ocs_scsi_dif_blk_size_e blk_size
uint16_t ocs_scsi_dif_calc_checksum(ocs_scsi_vaddr_len_t addrlen[], uint32_t addrlen_count)
Calculate the IP-checksum guard value for a block.
int32_t ocs_hal_dif_mem_blocksize(ocs_hal_dif_info_t *dif_info, int wiretomem)
Return memory block size given HAL DIF API.
uint32_t ocs_hal_dif_blocksize(ocs_hal_dif_info_t *dif_info)
Return blocksize given HAL API DIF block size.
unsigned short t10crc16(const unsigned char *blk_adr, unsigned long blk_len, unsigned short crc)
Calculate the T10 PI CRC guard value for a block.
ocs_hal_dif_oper_e dif_oper
int32_t ocs_scsi_dif_wire_blocksize(ocs_scsi_dif_info_t *dif_info, int wiretomem)
Return wire block size given SCSI DIF API.
#define ocs_assert(cond,...)
uint16_t ocs_scsi_dif_calc_crc(const uint8_t *buffer, uint32_t size, uint16_t crc)
Calculate the T10 PI CRC guard value for a block.
ocs_hal_dif_blk_size_e blk_size
int32_t ocs_scsi_dif_set_blocksize(ocs_scsi_dif_info_t *dif_info, uint32_t blocksize)
Set SCSI API DIF blocksize.
ocs_scsi_dif_oper_e dif_oper
uint32_t ocs_scsi_dif_blocksize(ocs_scsi_dif_info_t *dif_info)
Return blocksize given SCSI API DIF block size.