123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- #ifndef __HAL_FLOW_H
- #define __HAL_FLOW_H
- #define HAL_SET_FLD_SM(block, field, value) \
- (((value) << (block ## _ ## field ## _LSB)) & \
- (block ## _ ## field ## _MASK))
- #define HAL_SET_FLD_MS(block, field, value) \
- (((value) & (block ## _ ## field ## _MASK)) >> \
- (block ## _ ## field ## _LSB))
- #define HAL_CLR_FLD(desc, block, field) \
- do { \
- uint32_t val; \
- typeof(desc) desc_ = desc; \
- val = *((uint32_t *)((uint8_t *)(desc_) + \
- HAL_OFFSET(block, field))); \
- val &= ~(block ## _ ## field ## _MASK); \
- HAL_SET_FLD(desc_, block, field) = val; \
- } while (0)
- #define HAL_GET_FLD(desc, block, field) \
- ((*((uint32_t *)((uint8_t *)(desc) + HAL_OFFSET(block, field))) & \
- (block ## _ ## field ## _MASK)) >> (block ## _ ## field ## _LSB))
- /**
- * struct hal_flow_tuple_info - Hal Flow 5-tuple
- * @dest_ip_127_96: Destination IP address bits 96-127
- * @dest_ip_95_64: Destination IP address bits 64-95
- * @dest_ip_63_32: Destination IP address bits 32-63
- * @dest_ip_31_0: Destination IP address bits 0-31
- * @src_ip_127_96: Source IP address bits 96-127
- * @src_ip_95_64: Source IP address bits 64-95
- * @src_ip_63_32: Source IP address bits 32-63
- * @src_ip_31_0: Source IP address bits 0-31
- * @dest_port: Destination Port
- * @src_port: Source Port
- * @l4_protocol: Layer-4 protocol type (TCP/UDP)
- */
- struct hal_flow_tuple_info {
- uint32_t dest_ip_127_96;
- uint32_t dest_ip_95_64;
- uint32_t dest_ip_63_32;
- uint32_t dest_ip_31_0;
- uint32_t src_ip_127_96;
- uint32_t src_ip_95_64;
- uint32_t src_ip_63_32;
- uint32_t src_ip_31_0;
- uint16_t dest_port;
- uint16_t src_port;
- uint16_t l4_protocol;
- };
- /**
- * key_bitwise_shift_left() - Bitwise left shift (in place) an array of bytes
- * @key: Pointer to array to key bytes
- * @len: size of array (number of key bytes)
- * @shift: number of shift operations to be performed
- *
- * Return:
- */
- static inline void
- key_bitwise_shift_left(uint8_t *key, int len, int shift)
- {
- int i;
- int next;
- while (shift--) {
- for (i = len - 1; i >= 0 ; i--) {
- if (i > 0)
- next = (key[i - 1] & 0x80 ? 1 : 0);
- else
- next = 0;
- key[i] = (key[i] << 1) | next;
- }
- }
- }
- /**
- * key_reverse() - Reverse the key buffer from MSB to LSB
- * @dest: pointer to the destination key
- * @src: pointer to the source key which should be shifted
- * @len: size of key in bytes
- *
- * Return:
- */
- static inline void
- key_reverse(uint8_t *dest, uint8_t *src, int len)
- {
- int i, j;
- for (i = 0, j = len - 1; i < len; i++, j--)
- dest[i] = src[j];
- }
- #endif /* HAL_FLOW_H */
|