cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fman_port.h (6672B)


      1/*
      2 * Copyright 2008 - 2015 Freescale Semiconductor Inc.
      3 *
      4 * Redistribution and use in source and binary forms, with or without
      5 * modification, are permitted provided that the following conditions are met:
      6 *     * Redistributions of source code must retain the above copyright
      7 *       notice, this list of conditions and the following disclaimer.
      8 *     * Redistributions in binary form must reproduce the above copyright
      9 *       notice, this list of conditions and the following disclaimer in the
     10 *       documentation and/or other materials provided with the distribution.
     11 *     * Neither the name of Freescale Semiconductor nor the
     12 *       names of its contributors may be used to endorse or promote products
     13 *       derived from this software without specific prior written permission.
     14 *
     15 *
     16 * ALTERNATIVELY, this software may be distributed under the terms of the
     17 * GNU General Public License ("GPL") as published by the Free Software
     18 * Foundation, either version 2 of that License or (at your option) any
     19 * later version.
     20 *
     21 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
     22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     24 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
     25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 */
     32
     33#ifndef __FMAN_PORT_H
     34#define __FMAN_PORT_H
     35
     36#include "fman.h"
     37
     38/* FM Port API
     39 * The FM uses a general module called "port" to represent a Tx port (MAC),
     40 * an Rx port (MAC).
     41 * The number of ports in an FM varies between SOCs.
     42 * The SW driver manages these ports as sub-modules of the FM,i.e. after an
     43 * FM is initialized, its ports may be initialized and operated upon.
     44 * The port is initialized aware of its type, but other functions on a port
     45 * may be indifferent to its type. When necessary, the driver verifies
     46 * coherence and returns error if applicable.
     47 * On initialization, user specifies the port type and it's index (relative
     48 * to the port's type) - always starting at 0.
     49 */
     50
     51/* FM Frame error */
     52/* Frame Descriptor errors */
     53/* Not for Rx-Port! Unsupported Format */
     54#define FM_PORT_FRM_ERR_UNSUPPORTED_FORMAT	FM_FD_ERR_UNSUPPORTED_FORMAT
     55/* Not for Rx-Port! Length Error */
     56#define FM_PORT_FRM_ERR_LENGTH			FM_FD_ERR_LENGTH
     57/* DMA Data error */
     58#define FM_PORT_FRM_ERR_DMA			FM_FD_ERR_DMA
     59/* non Frame-Manager error; probably come from SEC that was chained to FM */
     60#define FM_PORT_FRM_ERR_NON_FM			FM_FD_RX_STATUS_ERR_NON_FM
     61 /* IPR error */
     62#define FM_PORT_FRM_ERR_IPRE			(FM_FD_ERR_IPR & ~FM_FD_IPR)
     63/* IPR non-consistent-sp */
     64#define FM_PORT_FRM_ERR_IPR_NCSP		(FM_FD_ERR_IPR_NCSP &	\
     65						~FM_FD_IPR)
     66
     67/* Rx FIFO overflow, FCS error, code error, running disparity
     68 * error (SGMII and TBI modes), FIFO parity error.
     69 * PHY Sequence error, PHY error control character detected.
     70 */
     71#define FM_PORT_FRM_ERR_PHYSICAL                FM_FD_ERR_PHYSICAL
     72/* Frame too long OR Frame size exceeds max_length_frame  */
     73#define FM_PORT_FRM_ERR_SIZE                    FM_FD_ERR_SIZE
     74/* indicates a classifier "drop" operation */
     75#define FM_PORT_FRM_ERR_CLS_DISCARD             FM_FD_ERR_CLS_DISCARD
     76/* Extract Out of Frame */
     77#define FM_PORT_FRM_ERR_EXTRACTION              FM_FD_ERR_EXTRACTION
     78/* No Scheme Selected */
     79#define FM_PORT_FRM_ERR_NO_SCHEME               FM_FD_ERR_NO_SCHEME
     80/* Keysize Overflow */
     81#define FM_PORT_FRM_ERR_KEYSIZE_OVERFLOW        FM_FD_ERR_KEYSIZE_OVERFLOW
     82/* Frame color is red */
     83#define FM_PORT_FRM_ERR_COLOR_RED               FM_FD_ERR_COLOR_RED
     84/* Frame color is yellow */
     85#define FM_PORT_FRM_ERR_COLOR_YELLOW            FM_FD_ERR_COLOR_YELLOW
     86/* Parser Time out Exceed */
     87#define FM_PORT_FRM_ERR_PRS_TIMEOUT             FM_FD_ERR_PRS_TIMEOUT
     88/* Invalid Soft Parser instruction */
     89#define FM_PORT_FRM_ERR_PRS_ILL_INSTRUCT        FM_FD_ERR_PRS_ILL_INSTRUCT
     90/* Header error was identified during parsing */
     91#define FM_PORT_FRM_ERR_PRS_HDR_ERR             FM_FD_ERR_PRS_HDR_ERR
     92/* Frame parsed beyind 256 first bytes */
     93#define FM_PORT_FRM_ERR_BLOCK_LIMIT_EXCEEDED    FM_FD_ERR_BLOCK_LIMIT_EXCEEDED
     94/* FPM Frame Processing Timeout Exceeded */
     95#define FM_PORT_FRM_ERR_PROCESS_TIMEOUT         0x00000001
     96
     97struct fman_port;
     98
     99/* A structure for additional Rx port parameters */
    100struct fman_port_rx_params {
    101	u32 err_fqid;			/* Error Queue Id. */
    102	u32 dflt_fqid;			/* Default Queue Id. */
    103	u32 pcd_base_fqid;		/* PCD base Queue Id. */
    104	u32 pcd_fqs_count;		/* Number of PCD FQs. */
    105
    106	/* Which external buffer pools are used
    107	 * (up to FMAN_PORT_MAX_EXT_POOLS_NUM), and their sizes.
    108	 */
    109	struct fman_ext_pools ext_buf_pools;
    110};
    111
    112/* A structure for additional non-Rx port parameters */
    113struct fman_port_non_rx_params {
    114	/* Error Queue Id. */
    115	u32 err_fqid;
    116	/* For Tx - Default Confirmation queue, 0 means no Tx confirmation
    117	 * for processed frames. For OP port - default Rx queue.
    118	 */
    119	u32 dflt_fqid;
    120};
    121
    122/* A union for additional parameters depending on port type */
    123union fman_port_specific_params {
    124	/* Rx port parameters structure */
    125	struct fman_port_rx_params rx_params;
    126	/* Non-Rx port parameters structure */
    127	struct fman_port_non_rx_params non_rx_params;
    128};
    129
    130/* A structure representing FM initialization parameters */
    131struct fman_port_params {
    132	/* Virtual Address of memory mapped FM Port registers. */
    133	void *fm;
    134	union fman_port_specific_params specific_params;
    135	/* Additional parameters depending on port type. */
    136};
    137
    138int fman_port_config(struct fman_port *port, struct fman_port_params *params);
    139
    140void fman_port_use_kg_hash(struct fman_port *port, bool enable);
    141
    142int fman_port_init(struct fman_port *port);
    143
    144int fman_port_cfg_buf_prefix_content(struct fman_port *port,
    145				     struct fman_buffer_prefix_content
    146				     *buffer_prefix_content);
    147
    148int fman_port_disable(struct fman_port *port);
    149
    150int fman_port_enable(struct fman_port *port);
    151
    152u32 fman_port_get_qman_channel_id(struct fman_port *port);
    153
    154int fman_port_get_hash_result_offset(struct fman_port *port, u32 *offset);
    155
    156int fman_port_get_tstamp(struct fman_port *port, const void *data, u64 *tstamp);
    157
    158struct fman_port *fman_port_bind(struct device *dev);
    159
    160struct device *fman_port_get_device(struct fman_port *port);
    161
    162#endif /* __FMAN_PORT_H */