/* @TAG(CUSTOM) */

/**
*  \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__ */
