Author | Tokens | Token Proportion | Commits | Commit Proportion |
---|---|---|---|---|
Vladimir Oltean | 1972 | 99.95% | 23 | 95.83% |
Nishad Kamdar | 1 | 0.05% | 1 | 4.17% |
Total | 1973 | 24 |
/* SPDX-License-Identifier: BSD-3-Clause */ /* Copyright 2016-2018 NXP * Copyright (c) 2018-2019, Vladimir Oltean <olteanv@gmail.com> */ #ifndef _SJA1105_STATIC_CONFIG_H #define _SJA1105_STATIC_CONFIG_H #include <linux/packing.h> #include <linux/types.h> #include <asm/types.h> #define SJA1105_NUM_PORTS 5 #define SJA1110_NUM_PORTS 11 #define SJA1105_MAX_NUM_PORTS SJA1110_NUM_PORTS #define SJA1105_NUM_TC 8 #define SJA1105_SIZE_SPI_MSG_HEADER 4 #define SJA1105_SIZE_SPI_MSG_MAXLEN (64 * 4) #define SJA1105_SIZE_DEVICE_ID 4 #define SJA1105_SIZE_TABLE_HEADER 12 #define SJA1105_SIZE_SCHEDULE_ENTRY 8 #define SJA1110_SIZE_SCHEDULE_ENTRY 12 #define SJA1105_SIZE_SCHEDULE_ENTRY_POINTS_ENTRY 4 #define SJA1110_SIZE_SCHEDULE_ENTRY_POINTS_ENTRY 8 #define SJA1105_SIZE_VL_LOOKUP_ENTRY 12 #define SJA1105_SIZE_VL_POLICING_ENTRY 8 #define SJA1105_SIZE_VL_FORWARDING_ENTRY 4 #define SJA1105_SIZE_L2_POLICING_ENTRY 8 #define SJA1105_SIZE_VLAN_LOOKUP_ENTRY 8 #define SJA1110_SIZE_VLAN_LOOKUP_ENTRY 12 #define SJA1105_SIZE_L2_FORWARDING_ENTRY 8 #define SJA1105_SIZE_L2_FORWARDING_PARAMS_ENTRY 12 #define SJA1105_SIZE_RETAGGING_ENTRY 8 #define SJA1105_SIZE_XMII_PARAMS_ENTRY 4 #define SJA1110_SIZE_XMII_PARAMS_ENTRY 8 #define SJA1105_SIZE_SCHEDULE_PARAMS_ENTRY 12 #define SJA1105_SIZE_SCHEDULE_ENTRY_POINTS_PARAMS_ENTRY 4 #define SJA1105_SIZE_VL_FORWARDING_PARAMS_ENTRY 12 #define SJA1105ET_SIZE_L2_LOOKUP_ENTRY 12 #define SJA1105ET_SIZE_MAC_CONFIG_ENTRY 28 #define SJA1105ET_SIZE_L2_LOOKUP_PARAMS_ENTRY 4 #define SJA1105ET_SIZE_GENERAL_PARAMS_ENTRY 40 #define SJA1105ET_SIZE_AVB_PARAMS_ENTRY 12 #define SJA1105ET_SIZE_CBS_ENTRY 16 #define SJA1105PQRS_SIZE_L2_LOOKUP_ENTRY 20 #define SJA1110_SIZE_L2_LOOKUP_ENTRY 24 #define SJA1105PQRS_SIZE_MAC_CONFIG_ENTRY 32 #define SJA1105PQRS_SIZE_L2_LOOKUP_PARAMS_ENTRY 16 #define SJA1110_SIZE_L2_LOOKUP_PARAMS_ENTRY 28 #define SJA1105PQRS_SIZE_GENERAL_PARAMS_ENTRY 44 #define SJA1110_SIZE_GENERAL_PARAMS_ENTRY 56 #define SJA1105PQRS_SIZE_AVB_PARAMS_ENTRY 16 #define SJA1105PQRS_SIZE_CBS_ENTRY 20 #define SJA1110_SIZE_PCP_REMAPPING_ENTRY 4 /* UM10944.pdf Page 11, Table 2. Configuration Blocks */ enum { BLKID_SCHEDULE = 0x00, BLKID_SCHEDULE_ENTRY_POINTS = 0x01, BLKID_VL_LOOKUP = 0x02, BLKID_VL_POLICING = 0x03, BLKID_VL_FORWARDING = 0x04, BLKID_L2_LOOKUP = 0x05, BLKID_L2_POLICING = 0x06, BLKID_VLAN_LOOKUP = 0x07, BLKID_L2_FORWARDING = 0x08, BLKID_MAC_CONFIG = 0x09, BLKID_SCHEDULE_PARAMS = 0x0A, BLKID_SCHEDULE_ENTRY_POINTS_PARAMS = 0x0B, BLKID_VL_FORWARDING_PARAMS = 0x0C, BLKID_L2_LOOKUP_PARAMS = 0x0D, BLKID_L2_FORWARDING_PARAMS = 0x0E, BLKID_AVB_PARAMS = 0x10, BLKID_GENERAL_PARAMS = 0x11, BLKID_RETAGGING = 0x12, BLKID_CBS = 0x13, BLKID_PCP_REMAPPING = 0x1C, BLKID_XMII_PARAMS = 0x4E, }; enum sja1105_blk_idx { BLK_IDX_SCHEDULE = 0, BLK_IDX_SCHEDULE_ENTRY_POINTS, BLK_IDX_VL_LOOKUP, BLK_IDX_VL_POLICING, BLK_IDX_VL_FORWARDING, BLK_IDX_L2_LOOKUP, BLK_IDX_L2_POLICING, BLK_IDX_VLAN_LOOKUP, BLK_IDX_L2_FORWARDING, BLK_IDX_MAC_CONFIG, BLK_IDX_SCHEDULE_PARAMS, BLK_IDX_SCHEDULE_ENTRY_POINTS_PARAMS, BLK_IDX_VL_FORWARDING_PARAMS, BLK_IDX_L2_LOOKUP_PARAMS, BLK_IDX_L2_FORWARDING_PARAMS, BLK_IDX_AVB_PARAMS, BLK_IDX_GENERAL_PARAMS, BLK_IDX_RETAGGING, BLK_IDX_CBS, BLK_IDX_XMII_PARAMS, BLK_IDX_PCP_REMAPPING, BLK_IDX_MAX, /* Fake block indices that are only valid for dynamic access */ BLK_IDX_MGMT_ROUTE, BLK_IDX_MAX_DYN, BLK_IDX_INVAL = -1, }; #define SJA1105_MAX_SCHEDULE_COUNT 1024 #define SJA1110_MAX_SCHEDULE_COUNT 4096 #define SJA1105_MAX_SCHEDULE_ENTRY_POINTS_COUNT 2048 #define SJA1105_MAX_VL_LOOKUP_COUNT 1024 #define SJA1110_MAX_VL_LOOKUP_COUNT 4096 #define SJA1105_MAX_VL_POLICING_COUNT 1024 #define SJA1110_MAX_VL_POLICING_COUNT 4096 #define SJA1105_MAX_VL_FORWARDING_COUNT 1024 #define SJA1110_MAX_VL_FORWARDING_COUNT 4096 #define SJA1105_MAX_L2_LOOKUP_COUNT 1024 #define SJA1105_MAX_L2_POLICING_COUNT 45 #define SJA1110_MAX_L2_POLICING_COUNT 110 #define SJA1105_MAX_VLAN_LOOKUP_COUNT 4096 #define SJA1105_MAX_L2_FORWARDING_COUNT 13 #define SJA1110_MAX_L2_FORWARDING_COUNT 19 #define SJA1105_MAX_MAC_CONFIG_COUNT 5 #define SJA1110_MAX_MAC_CONFIG_COUNT 11 #define SJA1105_MAX_SCHEDULE_PARAMS_COUNT 1 #define SJA1105_MAX_SCHEDULE_ENTRY_POINTS_PARAMS_COUNT 1 #define SJA1105_MAX_VL_FORWARDING_PARAMS_COUNT 1 #define SJA1105_MAX_L2_LOOKUP_PARAMS_COUNT 1 #define SJA1105_MAX_L2_FORWARDING_PARAMS_COUNT 1 #define SJA1105_MAX_GENERAL_PARAMS_COUNT 1 #define SJA1105_MAX_RETAGGING_COUNT 32 #define SJA1105_MAX_XMII_PARAMS_COUNT 1 #define SJA1105_MAX_AVB_PARAMS_COUNT 1 #define SJA1105ET_MAX_CBS_COUNT 10 #define SJA1105PQRS_MAX_CBS_COUNT 16 #define SJA1110_MAX_CBS_COUNT 80 #define SJA1110_MAX_PCP_REMAPPING_COUNT 11 #define SJA1105_MAX_FRAME_MEMORY 929 #define SJA1110_MAX_FRAME_MEMORY 1820 #define SJA1105_FRAME_MEMORY_RETAGGING_OVERHEAD 19 #define SJA1105_VL_FRAME_MEMORY 100 #define SJA1105E_DEVICE_ID 0x9C00000Cull #define SJA1105T_DEVICE_ID 0x9E00030Eull #define SJA1105PR_DEVICE_ID 0xAF00030Eull #define SJA1105QS_DEVICE_ID 0xAE00030Eull #define SJA1110_DEVICE_ID 0xB700030Full #define SJA1105ET_PART_NO 0x9A83 #define SJA1105P_PART_NO 0x9A84 #define SJA1105Q_PART_NO 0x9A85 #define SJA1105R_PART_NO 0x9A86 #define SJA1105S_PART_NO 0x9A87 #define SJA1110A_PART_NO 0x1110 #define SJA1110B_PART_NO 0x1111 #define SJA1110C_PART_NO 0x1112 #define SJA1110D_PART_NO 0x1113 #define SJA1110_ACU 0x1c4400 #define SJA1110_RGU 0x1c6000 #define SJA1110_CGU 0x1c6400 #define SJA1110_SPI_ADDR(x) ((x) / 4) #define SJA1110_ACU_ADDR(x) (SJA1110_ACU + SJA1110_SPI_ADDR(x)) #define SJA1110_CGU_ADDR(x) (SJA1110_CGU + SJA1110_SPI_ADDR(x)) #define SJA1110_RGU_ADDR(x) (SJA1110_RGU + SJA1110_SPI_ADDR(x)) #define SJA1105_RSV_ADDR 0xffffffffffffffffull struct sja1105_schedule_entry { u64 winstindex; u64 winend; u64 winst; u64 destports; u64 setvalid; u64 txen; u64 resmedia_en; u64 resmedia; u64 vlindex; u64 delta; }; struct sja1105_schedule_params_entry { u64 subscheind[8]; }; struct sja1105_general_params_entry { u64 vllupformat; u64 mirr_ptacu; u64 switchid; u64 hostprio; u64 mac_fltres1; u64 mac_fltres0; u64 mac_flt1; u64 mac_flt0; u64 incl_srcpt1; u64 incl_srcpt0; u64 send_meta1; u64 send_meta0; u64 casc_port; u64 host_port; u64 mirr_port; u64 vlmarker; u64 vlmask; u64 tpid; u64 ignore2stf; u64 tpid2; /* P/Q/R/S only */ u64 queue_ts; u64 egrmirrvid; u64 egrmirrpcp; u64 egrmirrdei; u64 replay_port; /* SJA1110 only */ u64 tte_en; u64 tdmaconfigidx; u64 header_type; }; struct sja1105_schedule_entry_points_entry { u64 subschindx; u64 delta; u64 address; }; struct sja1105_schedule_entry_points_params_entry { u64 clksrc; u64 actsubsch; }; struct sja1105_vlan_lookup_entry { u64 ving_mirr; u64 vegr_mirr; u64 vmemb_port; u64 vlan_bc; u64 tag_port; u64 vlanid; u64 type_entry; /* SJA1110 only */ }; struct sja1105_l2_lookup_entry { u64 vlanid; u64 macaddr; u64 destports; u64 enfport; u64 index; /* P/Q/R/S only */ u64 mask_iotag; u64 mask_vlanid; u64 mask_macaddr; u64 mask_srcport; u64 iotag; u64 srcport; u64 lockeds; union { /* LOCKEDS=1: Static FDB entries */ struct { /* TSREG is deprecated in SJA1110, TRAP is supported only * in SJA1110. */ u64 trap; u64 tsreg; u64 mirrvlan; u64 takets; u64 mirr; u64 retag; }; /* LOCKEDS=0: Dynamically learned FDB entries */ struct { u64 touched; u64 age; }; }; }; struct sja1105_l2_lookup_params_entry { u64 maxaddrp[SJA1105_MAX_NUM_PORTS]; /* P/Q/R/S only */ u64 start_dynspc; /* P/Q/R/S only */ u64 drpnolearn; /* P/Q/R/S only */ u64 use_static; /* P/Q/R/S only */ u64 owr_dyn; /* P/Q/R/S only */ u64 learn_once; /* P/Q/R/S only */ u64 maxage; /* Shared */ u64 dyn_tbsz; /* E/T only */ u64 poly; /* E/T only */ u64 shared_learn; /* Shared */ u64 no_enf_hostprt; /* Shared */ u64 no_mgmt_learn; /* Shared */ }; struct sja1105_l2_forwarding_entry { u64 bc_domain; u64 reach_port; u64 fl_domain; /* This is actually max(SJA1105_NUM_TC, SJA1105_MAX_NUM_PORTS) */ u64 vlan_pmap[SJA1105_MAX_NUM_PORTS]; bool type_egrpcp2outputq; }; struct sja1105_l2_forwarding_params_entry { u64 max_dynp; u64 part_spc[8]; }; struct sja1105_l2_policing_entry { u64 sharindx; u64 smax; u64 rate; u64 maxlen; u64 partition; }; struct sja1105_avb_params_entry { u64 cas_master; u64 destmeta; u64 srcmeta; }; struct sja1105_mac_config_entry { u64 top[8]; u64 base[8]; u64 enabled[8]; u64 ifg; u64 speed; u64 tp_delin; u64 tp_delout; u64 maxage; u64 vlanprio; u64 vlanid; u64 ing_mirr; u64 egr_mirr; u64 drpnona664; u64 drpdtag; u64 drpuntag; u64 retag; u64 dyn_learn; u64 egress; u64 ingress; }; struct sja1105_retagging_entry { u64 egr_port; u64 ing_port; u64 vlan_ing; u64 vlan_egr; u64 do_not_learn; u64 use_dest_ports; u64 destports; }; struct sja1105_cbs_entry { u64 port; /* Not used for SJA1110 */ u64 prio; /* Not used for SJA1110 */ u64 credit_hi; u64 credit_lo; u64 send_slope; u64 idle_slope; }; struct sja1105_xmii_params_entry { u64 phy_mac[SJA1105_MAX_NUM_PORTS]; u64 xmii_mode[SJA1105_MAX_NUM_PORTS]; /* The SJA1110 insists being a snowflake, and requires SGMII, * 2500base-x and internal MII ports connected to the 100base-TX PHY to * set this bit. We set it unconditionally from the high-level logic, * and only sja1110_xmii_params_entry_packing writes it to the static * config. I have no better name for it than "special". */ u64 special[SJA1105_MAX_NUM_PORTS]; }; struct sja1110_pcp_remapping_entry { u64 egrpcp[SJA1105_NUM_TC]; }; enum { SJA1105_VL_FORMAT_PSFP = 0, SJA1105_VL_FORMAT_ARINC664 = 1, }; struct sja1105_vl_lookup_entry { u64 format; u64 port; union { /* SJA1105_VL_FORMAT_PSFP */ struct { u64 destports; u64 iscritical; u64 macaddr; u64 vlanid; u64 vlanprior; }; /* SJA1105_VL_FORMAT_ARINC664 */ struct { u64 egrmirr; u64 ingrmirr; u64 vlid; }; }; /* Not part of hardware structure */ unsigned long flow_cookie; }; struct sja1105_vl_policing_entry { u64 type; u64 maxlen; u64 sharindx; u64 bag; u64 jitter; }; struct sja1105_vl_forwarding_entry { u64 type; u64 priority; u64 partition; u64 destports; }; struct sja1105_vl_forwarding_params_entry { u64 partspc[8]; u64 debugen; }; struct sja1105_table_header { u64 block_id; u64 len; u64 crc; }; struct sja1105_table_ops { size_t (*packing)(void *buf, void *entry_ptr, enum packing_op op); size_t unpacked_entry_size; size_t packed_entry_size; size_t max_entry_count; }; struct sja1105_table { const struct sja1105_table_ops *ops; size_t entry_count; void *entries; }; struct sja1105_static_config { u64 device_id; struct sja1105_table tables[BLK_IDX_MAX]; }; extern const struct sja1105_table_ops sja1105e_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1105t_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1105p_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1105q_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1105r_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1105s_table_ops[BLK_IDX_MAX]; extern const struct sja1105_table_ops sja1110_table_ops[BLK_IDX_MAX]; size_t sja1105_table_header_packing(void *buf, void *hdr, enum packing_op op); void sja1105_table_header_pack_with_crc(void *buf, struct sja1105_table_header *hdr); size_t sja1105_static_config_get_length(const struct sja1105_static_config *config); typedef enum { SJA1105_CONFIG_OK = 0, SJA1105_TTETHERNET_NOT_SUPPORTED, SJA1105_INCORRECT_TTETHERNET_CONFIGURATION, SJA1105_INCORRECT_VIRTUAL_LINK_CONFIGURATION, SJA1105_MISSING_L2_POLICING_TABLE, SJA1105_MISSING_L2_FORWARDING_TABLE, SJA1105_MISSING_L2_FORWARDING_PARAMS_TABLE, SJA1105_MISSING_GENERAL_PARAMS_TABLE, SJA1105_MISSING_VLAN_TABLE, SJA1105_MISSING_XMII_TABLE, SJA1105_MISSING_MAC_TABLE, SJA1105_OVERCOMMITTED_FRAME_MEMORY, } sja1105_config_valid_t; extern const char *sja1105_static_config_error_msg[]; sja1105_config_valid_t sja1105_static_config_check_valid(const struct sja1105_static_config *config, int max_mem); void sja1105_static_config_pack(void *buf, struct sja1105_static_config *config); int sja1105_static_config_init(struct sja1105_static_config *config, const struct sja1105_table_ops *static_ops, u64 device_id); void sja1105_static_config_free(struct sja1105_static_config *config); int sja1105_table_delete_entry(struct sja1105_table *table, int i); int sja1105_table_resize(struct sja1105_table *table, size_t new_count); u32 sja1105_crc32(const void *buf, size_t len); void sja1105_pack(void *buf, const u64 *val, int start, int end, size_t len); void sja1105_unpack(const void *buf, u64 *val, int start, int end, size_t len); void sja1105_packing(void *buf, u64 *val, int start, int end, size_t len, enum packing_op op); /* Common implementations for the static and dynamic configs */ size_t sja1105pqrs_general_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_general_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105pqrs_l2_lookup_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_l2_lookup_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105_l2_forwarding_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_l2_forwarding_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105pqrs_l2_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105et_l2_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_l2_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105_vlan_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_vlan_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105_retagging_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_retagging_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105pqrs_mac_config_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_mac_config_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105pqrs_avb_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1105_vl_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_vl_lookup_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_vl_policing_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_xmii_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_l2_policing_entry_packing(void *buf, void *entry_ptr, enum packing_op op); size_t sja1110_l2_forwarding_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op); #endif
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with Cregit http://github.com/cregit/cregit
Version 2.0-RC1