1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com> 3*4882a593Smuzhiyun */ 4*4882a593Smuzhiyun #ifndef _SJA1105_DYNAMIC_CONFIG_H 5*4882a593Smuzhiyun #define _SJA1105_DYNAMIC_CONFIG_H 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "sja1105.h" 8*4882a593Smuzhiyun #include <linux/packing.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* Special index that can be used for sja1105_dynamic_config_read */ 11*4882a593Smuzhiyun #define SJA1105_SEARCH -1 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun struct sja1105_dyn_cmd; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun struct sja1105_dynamic_table_ops { 16*4882a593Smuzhiyun /* This returns size_t just to keep same prototype as the 17*4882a593Smuzhiyun * static config ops, of which we are reusing some functions. 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun size_t (*entry_packing)(void *buf, void *entry_ptr, enum packing_op op); 20*4882a593Smuzhiyun void (*cmd_packing)(void *buf, struct sja1105_dyn_cmd *cmd, 21*4882a593Smuzhiyun enum packing_op op); 22*4882a593Smuzhiyun size_t max_entry_count; 23*4882a593Smuzhiyun size_t packed_size; 24*4882a593Smuzhiyun u64 addr; 25*4882a593Smuzhiyun u8 access; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct sja1105_mgmt_entry { 29*4882a593Smuzhiyun u64 tsreg; 30*4882a593Smuzhiyun u64 takets; 31*4882a593Smuzhiyun u64 macaddr; 32*4882a593Smuzhiyun u64 destports; 33*4882a593Smuzhiyun u64 enfport; 34*4882a593Smuzhiyun u64 index; 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun extern const struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN]; 38*4882a593Smuzhiyun extern const struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN]; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #endif 41