summaryrefslogtreecommitdiffstats
path: root/drivers/net/bcmbca/xrdp/rdd_data_structures.h
blob: 972a3e600ef4d51b94c419e155ce568815d3919d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
// SPDX-License-Identifier: GPL-2.0+
/*
   Copyright (c) 2015 Broadcom
   All Rights Reserved
*/

#ifndef _RDD_DATA_STRUCTURES_AUTO__
#define _RDD_DATA_STRUCTURES_AUTO__

#ifndef NO_ACCESS_LOGGING
#include "access_macros.h"

#if defined(CONFIG_BCM6858)
#define XRDP_BBH_PER_LAN_PORT
#endif

extern uintptr_t rdp_runner_core_addr[];

/* RNR_REGS_ADDRS */
#if defined(CONFIG_BCM6878) || defined(CONFIG_BCM6846) || defined(CONFIG_BCM6856)
#define RNR_REGS_ADDR_CORE0 0x82d00000
#elif defined(CONFIG_BCM6858)
#define RNR_REGS_ADDR_CORE0 0x82280000
#elif defined(CONFIG_BCM63146) || defined(CONFIG_BCM4912)
#define RNR_REGS_ADDR_CORE0 0x82800000
#endif

#ifdef XRDP_SBPM
#ifdef CONFIG_BCM6878
#define SBPM_ADDRS 0x82d99000
#define PSRAM_MEM_ADDRS 0x82600000
#define SBPM_MAX_BUFFER_NUMBER 0x3FF
#elif defined(CONFIG_BCM6858)
#define SBPM_ADDRS 0x82d2c000
#define PSRAM_MEM_ADDRS 0x82600000
#define SBPM_MAX_BUFFER_NUMBER 0xFFF
#elif defined(CONFIG_BCM6846)
#define SBPM_ADDRS 0x82d98000
#define PSRAM_MEM_ADDRS 0x82600000
#define SBPM_MAX_BUFFER_NUMBER 0x5FF
#elif defined(CONFIG_BCM6856) 
#define SBPM_ADDRS 0x82d99000
#define PSRAM_MEM_ADDRS 0x82600000
#define SBPM_MAX_BUFFER_NUMBER 0x7FF
#elif defined(CONFIG_BCM63146) || defined(CONFIG_BCM4912)
#define SBPM_MAX_BUFFER_NUMBER 0x17F
#endif
#endif

#if defined(CONFIG_BCMBCA_XRDP_DSL)
#if defined(CONFIG_BCM63146) || defined(CONFIG_BCM4912)
#define PACKET_BUFFER_POOL_TABLE_ADDR_TX 2181099520
#endif
#endif

#ifdef GEN45
#define RDD_BBH_TX_DESCRIPTOR_SOF_WRITE(v, p)                           FIELD_MWRITE_8((uint8_t *)p, 7, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_LAST_WRITE(v, p)                          FIELD_MWRITE_8((uint8_t *)p + 4, 7, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_BN_NUM_WRITE(v, p)                        FIELD_MWRITE_32((uint8_t *)p + 4, 14, 7, v)
#define RDD_BBH_TX_DESCRIPTOR_PACKET_LENGTH_READ(r, p)                  FIELD_MREAD_16((uint8_t *)p + 6, 0, 14, r)
#define RDD_BBH_TX_DESCRIPTOR_PACKET_LENGTH_WRITE(v, p)                 FIELD_MWRITE_16((uint8_t *)p + 6, 0, 14, v)
#define RDD_BBH_TX_DESCRIPTOR_TARGET_MEM_1_WRITE(v, p)                  FIELD_MWRITE_8((uint8_t *)p + 8, 6, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_BN1_FIRST_WRITE(v, p)                     FIELD_MWRITE_32((uint8_t *)p + 8, 0, 18, v)
#define RDD_BBH_TX_DESCRIPTOR_AGG_PD_WRITE(v, p)                        FIELD_MWRITE_8((uint8_t *)p + 12, 7, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_TARGET_MEM_0_WRITE(v, p)                  FIELD_MWRITE_8((uint8_t *)p + 12, 6, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_ABS_WRITE(v, p)                           FIELD_MWRITE_8((uint8_t *)p + 12, 5, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_SOP_WRITE(v, p)                           FIELD_MWRITE_16((uint8_t *)p + 12, 2, 11, v)
#define RDD_BBH_TX_DESCRIPTOR_BN0_FIRST_WRITE(v, p)                     FIELD_MWRITE_32((uint8_t *)p + 12, 0, 18, v)

#define RDD_BBH_TX_RING_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0x50))

#define RDD_BB_DESTINATION_ENTRY_BB_DESTINATION_WRITE(v, p)                MWRITE_32((uint8_t *)p, v)
#define RDD_BBH_TX_BB_DESTINATION_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0xdc))

#define RDD_BBH_TX_EGRESS_COUNTER_ENTRY_COUNTER_READ(r, p)                   MREAD_8((uint8_t *)p, r)
#define RDD_DS_TM_BBH_TX_EGRESS_COUNTER_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0x180 ))

#define RDD_SRAM_PD_FIFO_SIZE     64
#define RDD_SRAM_PD_FIFO_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0x800))
#endif

#ifdef CONFIG_BCMBCA_XRDP_DSL
#define RDD_BBH_TX_DESCRIPTOR_LAST_WRITE(v, p)                          FIELD_MWRITE_8((uint8_t *)p + 4, 7, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_ABS_WRITE(v, p)                           FIELD_MWRITE_8((uint8_t *)p + 5, 3, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_PACKET_LENGTH_READ(r, p)                  FIELD_MREAD_16((uint8_t *)p + 6, 0, 14, r)
#define RDD_BBH_TX_DESCRIPTOR_PACKET_LENGTH_WRITE(v, p)                 FIELD_MWRITE_16((uint8_t *)p + 6, 0, 14, v)
#define RDD_BBH_TX_DESCRIPTOR_TARGET_MEM_1_WRITE(v, p)                  FIELD_MWRITE_8((uint8_t *)p + 8, 6, 1, v)
#define RDD_BBH_TX_DESCRIPTOR_TARGET_MEM_0_WRITE(v, p)                  FIELD_MWRITE_8((uint8_t *)p + 12, 6, 1, v)
#define RDD_BBH_TX_RING_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0xd60))

#define RDD_BB_DESTINATION_ENTRY_BB_DESTINATION_WRITE(v, p)                MWRITE_32((uint8_t *)p, v)
#define RDD_BBH_TX_EGRESS_COUNTER_ENTRY_COUNTER_READ(r, p)                   MREAD_8((uint8_t *)p, r)

#define RDD_CPU_RX_LAST_READ_INDEX_PTR(core_id) DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0xdfc)

#define RDD_BBH_TX_BB_DESTINATION_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0xd7c))

#define RDD_DS_TM_BBH_TX_EGRESS_COUNTER_TABLE_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0xe80 ))

#define RDD_SRAM_PD_FIFO_SIZE     16
#define RDD_SRAM_PD_FIFO_PTR(core_id) (DEVICE_ADDRESS( rdp_runner_core_addr[core_id] + 0x0))
#endif

typedef enum
{
#if defined(CONFIG_BCM6878) || defined(CONFIG_BCM6846) || defined(CONFIG_BCM6856)
	BB_ID_RX_BBH_0              = 31,
	BB_ID_TX_LAN                = 32,
	BB_ID_RX_BBH_1              = 33,
	BB_ID_RX_BBH_2              = 35,
	BB_ID_RX_BBH_3              = 37,
	BB_ID_RX_BBH_4              = 39,
	BB_ID_RX_BBH_5              = 41,
#elif defined(CONFIG_BCM6858)
	BB_ID_RX_BBH_0              = 31,
	BB_ID_TX_BBH_0              = 32,
	BB_ID_RX_BBH_1              = 33,
	BB_ID_TX_BBH_1              = 34,
	BB_ID_RX_BBH_2              = 35,
	BB_ID_TX_BBH_2              = 36,
	BB_ID_RX_BBH_3              = 37,
	BB_ID_TX_BBH_3              = 38,
	BB_ID_RX_BBH_4              = 39,
	BB_ID_TX_BBH_4              = 40,
	BB_ID_RX_BBH_5              = 41,
	BB_ID_TX_BBH_5              = 42,
	BB_ID_RX_BBH_6              = 43,
	BB_ID_TX_BBH_6              = 44,
	BB_ID_RX_BBH_7              = 51,
	BB_ID_TX_BBH_7              = 52,
#elif defined(CONFIG_BCM4912)
	BB_ID_RX_BBH_0              = 31,
	BB_ID_TX_LAN                = 32,
	BB_ID_RX_BBH_1              = 33,
	BB_ID_RX_BBH_2              = 35,
	BB_ID_RX_BBH_3              = 37,
	BB_ID_RX_BBH_4              = 39,
	BB_ID_RX_BBH_5              = 41,
	BB_ID_RX_BBH_6              = 43,
	BB_ID_RX_BBH_7              = 45,
	BB_ID_RX_BBH_8              = 47,
#elif defined(CONFIG_BCM63146)
	BB_ID_RX_BBH_0              = 31,
	BB_ID_TX_LAN                = 32,
	BB_ID_RX_BBH_1              = 33,
	BB_ID_RX_BBH_2              = 35,
	BB_ID_RX_BBH_3              = 37,
	BB_ID_RX_BBH_4              = 39,
	BB_ID_RX_BBH_5              = 41,
	BB_ID_RX_BBH_6              = 43,
	BB_ID_RX_BBH_7              = 45,
#endif
} rdd_bb_id;

static inline void rnr_regs_cfg_cpu_wakeup_set(uint8_t rnr_id,
	uint8_t thread_num)
{
	writel(thread_num, RNR_REGS_ADDR_CORE0+0x4);
}

#include "access_logging.h"

extern const access_log_tuple_t init_data[];
	
static inline int xrdp_data_path_init(void)
{
    return access_log_restore(init_data);
}
#else

#include <rdd.h>
#include <rdp_drv_rnr.h>

extern int xrdp_data_path_init(void);

#define rnr_regs_cfg_cpu_wakeup_set(rnr_id, thread_num) \
	ag_drv_rnr_regs_cfg_cpu_wakeup_set(rnr_id, thread_num)
#endif

static inline uint32_t __rdd_cpu_tx_get_bb_id(uint8_t tx_port)
{
#if defined(CONFIG_BCM6858)
	uint32_t tx_map[] = {BB_ID_TX_BBH_4, BB_ID_TX_BBH_1, BB_ID_TX_BBH_2,
		BB_ID_TX_BBH_3, BB_ID_TX_BBH_0, BB_ID_TX_BBH_5, BB_ID_TX_BBH_6};

	if (tx_port < sizeof(tx_map)/sizeof(tx_map[0]))
		return tx_map[tx_port];

	return tx_map[0];
#else
	return (BB_ID_TX_LAN + (tx_port << 6));
#endif
}

#endif