/* SPDX-License-Identifier: BSD-3-Clause */

/**
*  \file lwiplib.h
*
*  \brief lwip abstraction layer related declarations
*/
/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 *
 * Author: Adam Dunkels <adam@sics.se>
 *
*/

/* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
 * ALL RIGHTS RESERVED
 */
#ifndef __LWIPLIB_H__
#define __LWIPLIB_H__

#include <lwip/opt.h>

/* Ensure that AUTOIP COOP option is configured correctly.*/
#undef LWIP_DHCP_AUTOIP_COOP
#define LWIP_DHCP_AUTOIP_COOP   ((LWIP_DHCP) && (LWIP_AUTOIP))

#include <lwip/api.h>
#include <lwip/netifapi.h>
#include <lwip/tcp.h>
#include <lwip/udp.h>
#include <lwip/tcpip.h>
#include <lwip/sockets.h>
#include <lwip/mem.h>
#include <lwip/stats.h>

/******************************************************************************
**                            Macro Definitions
******************************************************************************/
#define IPADDR_USE_STATIC                  (0)
#define IPADDR_USE_DHCP                    (1)
#define IPADDR_USE_AUTOIP                  (2)

#ifndef LEN_MAC_ADDRESS
#define LEN_MAC_ADDRESS                    (6)
#endif

#define MAX_ALE_ENTRIES                    (1024)
#define ALE_ENTRY_NUM_WORDS                (3)

#define ERR_PASS                           (0)
#define ERR_FAIL                           (-1)
#define ERR_INVAL                          (-2)

#define MIN_SLV_PORT                       (1)
#define MIN_AUTONEG                        (0)
#define MIN_PHY_CONFIG                     (1)
#define MIN_SPEED                          (0)
#define MIN_DUPLEX                         (0)

#define MAX_SLV_PORT                       (2)
#define MAX_AUTONEG                        (1)
#define MAX_PHY_CONFIG                     (0x3F)
#define MAX_SPEED                          (2)
#define MAX_DUPLEX                         (1)

#define ERR_SLV_PORT                       (-25)
#define ERR_AUTONEG                        (-26)
#define ERR_PHY_CONFIG                     (-27)
#define ERR_SPEED                          (-28)
#define ERR_DUPLEX                         (-29)

#ifdef CPSW_SWITCH_CONFIG
#define MIN_VLANAWARE                      (0)
#define MIN_ALE_VLANAWARE                  (0)
#define MIN_ALE_ENTRY_IDX                  (0)
#define MIN_VLAN_UNTAG                     (0)
#define MIN_VLAN_MCAST_UNREG               (0)
#define MIN_VLAN_MCAST_REG                 (0)
#define MIN_MCAST_FWD_STATE                (0)
#define MIN_SUPER                          (0)
#define MIN_PORT_MASK                      (0)
#define MIN_UCAST_FLAGS                    (0)
#define MIN_PORT                           (0)
#define MIN_VLANID                         (0)
#define MIN_CFI                            (0)
#define MIN_PRI                            (0)
#define MIN_UNKNOWN_VLAN_TYPE              (1)
#define MIN_PORT_STATE                     (0)
#define MIN_ADDR_TYPE                      (1)
#define MIN_ENABLE                         (0)
#define MIN_DIRECTION                      (0)
#define MIN_LIMIT                          (0)
#define MIN_UNKNOWN_VLAN                   (1)
#define MIN_MAC_AUTH                       (0)

#define MAX_VLANAWARE                      (1)
#define MAX_ALE_VLANAWARE                  (1)
#define MAX_ALE_ENTRY_IDX                  (1023)
#define MAX_VLAN_UNTAG                     (7)
#define MAX_VLAN_MCAST_UNREG               (7)
#define MAX_VLAN_MCAST_REG                 (7)
#define MAX_MCAST_FWD_STATE                (3)
#define MAX_SUPER                          (1)
#define MAX_PORT_MASK                      (7)
#define MAX_UCAST_FLAGS                    (3)
#define MAX_PORT                           (2)
#define MAX_VLANID                         (4095)
#define MAX_CFI                            (1)
#define MAX_PRI                            (7)
#define MAX_UNKNOWN_VLAN_TYPE              (4)
#define MAX_PORT_STATE                     (3)
#define MAX_ADDR_TYPE                      (3)
#define MAX_ENABLE                         (1)
#define MAX_DIRECTION                      (1)
#define MAX_LIMIT                          (255)
#define MAX_UNKNOWN_VLAN                   (4)
#define MAX_MAC_AUTH                       (1)

#define ERR_ADDR                           (-3)
#define ERR_VLANID                         (-4)
#define ERR_PORT_MASK                      (-5)
#define ERR_SUPER                          (-6)
#define ERR_MCAST_FWD_STATE                (-7)
#define ERR_PORT                           (-8)
#define ERR_UCAST_FLAGS                    (-9)
#define ERR_VLAN_MCAST_REG                 (-10)
#define ERR_VLAN_MCAST_UNREG               (-11)
#define ERR_VLAN_MCAST_UNTAG               (-12)
#define ERR_ALE_ENTRY_IDX                  (-13)
#define ERR_VLANAWARE                      (-14)
#define ERR_ALE_VLANAWARE                  (-15)
#define ERR_CFI                            (-16)
#define ERR_PRI                            (-17)
#define ERR_ENABLE                         (-18)
#define ERR_DIRECTION                      (-19)
#define ERR_LIMIT                          (-20)
#define ERR_UNKNOWN_VLAN                   (-21)
#define ERR_MAC_AUTH                       (-22)
#define ERR_ADDR_TYPE                      (-23)
#define ERR_PORT_STATE                     (-24)
#endif

#ifdef CPSW_SWITCH_CONFIG
enum {
    ADDR_TYPE_BROADCAST = 1,
    ADDR_TYPE_MULTICAST,
    ADDR_TYPE_UNICAST,
};

enum {
    ALE_PORT_UNTAGGED_EGRESS = 1,
    ALE_PORT_UNKNOWN_REG_MCAST_FLOOD,
    ALE_PORT_UNKNOWN_UNREG_MCAST_FLOOD,
    ALE_PORT_UNKNOWN_VLAN_MEMBER,
};
#endif

enum {
    CONFIG_SWITCH_INVALID = 0,
#ifdef CPSW_SWITCH_CONFIG
    CONFIG_SWITCH_ADD_MULTICAST,
    CONFIG_SWITCH_ADD_UNICAST,
    CONFIG_SWITCH_ADD_OUI,
    CONFIG_SWITCH_FIND_ADDR,
    CONFIG_SWITCH_DEL_MULTICAST,
    CONFIG_SWITCH_DEL_UNICAST,
    CONFIG_SWITCH_ADD_VLAN,
    CONFIG_SWITCH_FIND_VLAN,
    CONFIG_SWITCH_DEL_VLAN,
    CONFIG_SWITCH_PORT_VLAN_CONFIG,
    CONFIG_SWITCH_AGEOUT,
    CONFIG_SWITCH_DUMP,
    CONFIG_SWITCH_CONFIG_DUMP,
    CONFIG_SWITCH_VLANAWARE,
    CONFIG_SWITCH_RATELIMIT,
    CONFIG_SWITCH_VID_INGRESS_CHECK,
    CONFIG_SWITCH_ADD_UNKNOWN_VLAN_INFO,
    CONFIG_SWITCH_MACAUTH,
    CONFIG_SWITCH_PORT_STATE,
#endif
    CONFIG_SWITCH_SET_PORT_CONFIG,
};

#ifdef CPSW_SWITCH_CONFIG
typedef struct cpsw_switch_param {
    u32_t  port_num;
    u32_t  port_mask;
    u32_t  vid;        /* VLAN identifier */
    u32_t  prio_port;  /* port priority 0 -7 */
    u32_t  cfi_port;   /* port CFI  0 /1 */
    u32_t  unreg_multi;    /* unreg multicast Egress Ports */
    u32_t  reg_multi;  /* register multicast Egress ports */
    u32_t  untag_port; /* Untag ports */
    u8_t  addr[LEN_MAC_ADDRESS]; /* Ethernet Address */
    u32_t  super;
    u32_t  fwd_state;
    u32_t  ucast_flags;
    u32_t  ucast_type;
    u32_t  blocked;
    u32_t  secure;
    u32_t  ageable;
    u32_t  ale_tbl_index;    /* if 1 print ale table */
    u32_t  vlan_aware;
    u32_t  drop_packet;
    u32_t  direction;  /* Tx -1 / Rx - 0 */
    u32_t  addr_type;  /* Address type BroadMulti/Uni cast */
    u32_t  limit;      /* multicast/broadcast limit */
    u32_t  vlan_ingress_check;
    u32_t  port_state;
    u32_t  drop_untagged;
    u32_t  enable;     /* 1-enable/0-Disable */
    u32_t  unknown_vlan;
    u32_t  mac_auth;
} CPSW_SW_PARAM_IF;
#endif

typedef struct cpsw_phy_param {
    u32_t  slv_port_num;
    u32_t  autoneg;
    u32_t  config;
    u32_t  speed;
    u32_t  duplex;
} CPSW_PHY_PARAM_IF;

typedef struct cpsw_config {
    u32_t cmd;   /* API to be invoked by the kernel driver */
    u32_t cpsw_inst;
    struct cpsw_phy_param *phy_param;
#ifdef CPSW_SWITCH_CONFIG
    struct cpsw_switch_param *switch_param;
    u32_t  buf[MAX_ALE_ENTRIES][ALE_ENTRY_NUM_WORDS]; /* Buffer for Ale Dump */
    u32_t  ale_entry[ALE_ENTRY_NUM_WORDS];
#endif
    s32_t ret;   /* Return  Success/Failure */
} CPSW_CONF_IF;

#endif /* __LWIPLIB_H__ */
