summaryrefslogtreecommitdiff
path: root/drivers/staging/fsl_ppfe/pfe_ctrl.h
blob: 22115c76896c8dea2edd26ef85bd6217b4162bba (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
/*
 * Copyright 2015-2016 Freescale Semiconductor, Inc.
 * Copyright 2017 NXP
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _PFE_CTRL_H_
#define _PFE_CTRL_H_

#include <linux/dmapool.h>

#include "pfe_mod.h"
#include "pfe/pfe.h"

#define DMA_BUF_SIZE_128	0x80	/* enough for 1 conntracks */
#define DMA_BUF_SIZE_256	0x100
/* enough for 2 conntracks, 1 bridge entry or 1 multicast entry */
#define DMA_BUF_SIZE_512	0x200
/* 512bytes dma allocated buffers used by rtp relay feature */
#define DMA_BUF_MIN_ALIGNMENT	8
#define DMA_BUF_BOUNDARY	(4 * 1024)
/* bursts can not cross 4k boundary */

#define CMD_TX_ENABLE	0x0501
#define CMD_TX_DISABLE	0x0502

#define CMD_RX_LRO		0x0011
#define CMD_PKTCAP_ENABLE       0x0d01
#define CMD_QM_EXPT_RATE	0x020c

#define CLASS_DM_SH_STATIC		(0x800)
#define CLASS_DM_CPU_TICKS		(CLASS_DM_SH_STATIC)
#define CLASS_DM_SYNC_MBOX		(0x808)
#define CLASS_DM_MSG_MBOX		(0x810)
#define CLASS_DM_DROP_CNTR		(0x820)
#define CLASS_DM_RESUME			(0x854)
#define CLASS_DM_PESTATUS		(0x860)

#define TMU_DM_SH_STATIC		(0x80)
#define TMU_DM_CPU_TICKS		(TMU_DM_SH_STATIC)
#define TMU_DM_SYNC_MBOX		(0x88)
#define TMU_DM_MSG_MBOX			(0x90)
#define TMU_DM_RESUME			(0xA0)
#define TMU_DM_PESTATUS			(0xB0)
#define TMU_DM_CONTEXT			(0x300)
#define TMU_DM_TX_TRANS			(0x480)

#define UTIL_DM_SH_STATIC		(0x0)
#define UTIL_DM_CPU_TICKS		(UTIL_DM_SH_STATIC)
#define UTIL_DM_SYNC_MBOX		(0x8)
#define UTIL_DM_MSG_MBOX		(0x10)
#define UTIL_DM_DROP_CNTR		(0x20)
#define UTIL_DM_RESUME			(0x40)
#define UTIL_DM_PESTATUS		(0x50)

struct pfe_ctrl {
	struct mutex mutex; /* to serialize pfe control access */
	spinlock_t lock;

	void *dma_pool;
	void *dma_pool_512;
	void *dma_pool_128;

	struct device *dev;

	void *hash_array_baseaddr;		/*
						 * Virtual base address of
						 * the conntrack hash array
						 */
	unsigned long hash_array_phys_baseaddr; /*
						 * Physical base address of
						 * the conntrack hash array
						 */

	int (*event_cb)(u16, u16, u16*);

	unsigned long sync_mailbox_baseaddr[MAX_PE]; /*
						      * Sync mailbox PFE
						      * internal address,
						      * initialized
						      * when parsing elf images
						      */
	unsigned long msg_mailbox_baseaddr[MAX_PE]; /*
						     * Msg mailbox PFE internal
						     * address, initialized
						     * when parsing elf images
						     */
	unsigned int sys_clk;			/* AXI clock value, in KHz */
};

int pfe_ctrl_init(struct pfe *pfe);
void pfe_ctrl_exit(struct pfe *pfe);
int pe_sync_stop(struct pfe_ctrl *ctrl, int pe_mask);
void pe_start(struct pfe_ctrl *ctrl, int pe_mask);
int pe_reset_all(struct pfe_ctrl *ctrl);
void pfe_ctrl_suspend(struct pfe_ctrl *ctrl);
void pfe_ctrl_resume(struct pfe_ctrl *ctrl);
int relax(unsigned long end);

#endif /* _PFE_CTRL_H_ */