#ifndef _WIZCHIP_CONF_H_ #define _WIZCHIP_CONF_H_ #ifdef __cplusplus extern "C" { #endif #include #define W6300 6300 #ifndef _WIZCHIP_ #define _WIZCHIP_ W6300 #endif #define _WIZCHIP_IO_MODE_NONE_ 0x0000 #define _WIZCHIP_IO_MODE_BUS_ 0x0100 #define _WIZCHIP_IO_MODE_SPI_ 0x0200 #define _WIZCHIP_IO_MODE_BUS_DIR_ (_WIZCHIP_IO_MODE_BUS_ + 1) #define _WIZCHIP_IO_MODE_BUS_INDIR_ (_WIZCHIP_IO_MODE_BUS_ + 2) #define _WIZCHIP_IO_MODE_SPI_VDM_ (_WIZCHIP_IO_MODE_SPI_ + 1) #define _WIZCHIP_IO_MODE_SPI_FDM_ (_WIZCHIP_IO_MODE_SPI_ + 2) #define _WIZCHIP_IO_MODE_SPI_5500_ (_WIZCHIP_IO_MODE_SPI_ + 3) #define _WIZCHIP_IO_MODE_SPI_QSPI_ (_WIZCHIP_IO_MODE_SPI_ + 4) #define _PHY_IO_MODE_PHYCR_ 0x0000 #define _PHY_IO_MODE_MII_ 0x0010 #define _PHY_IO_MODE_ _PHY_IO_MODE_MII_ #define QSPI_SINGLE_MODE (0x00 << 6) #define QSPI_DUAL_MODE (0x01 << 6) #define QSPI_QUAD_MODE (0x02 << 6) #ifndef _WIZCHIP_QSPI_MODE_ #define _WIZCHIP_QSPI_MODE_ QSPI_SINGLE_MODE #endif #define _WIZCHIP_ID_ "W6300\0" #define _WIZCHIP_IO_MODE_ ((_WIZCHIP_IO_MODE_SPI_ & 0xff00) | (_WIZCHIP_QSPI_MODE_ & 0x00ff)) typedef uint8_t iodata_t; typedef int16_t datasize_t; #include "w6300.h" #ifndef _WIZCHIP_IO_BASE_ #define _WIZCHIP_IO_BASE_ 0x00000000 #endif #define _WIZCHIP_SOCK_NUM_ 8 typedef struct __WIZCHIP { uint16_t if_mode; uint8_t id[8]; struct _CRIS { void (*_enter)(void); void (*_exit)(void); } CRIS; struct _CS { void (*_select)(void); void (*_deselect)(void); } CS; union _IF { struct { iodata_t (*_read_data)(uint32_t AddrSel); void (*_write_data)(uint32_t AddrSel, iodata_t wb); void (*_read_data_buf)(uint32_t AddrSel, iodata_t* pBuf, int16_t len, uint8_t addrinc); void (*_write_data_buf)(uint32_t AddrSel, iodata_t* pBuf, int16_t len, uint8_t addrinc); } BUS; struct { uint8_t (*_read_byte)(void); void (*_write_byte)(uint8_t wb); void (*_read_burst)(uint8_t* pBuf, uint16_t len); void (*_write_burst)(uint8_t* pBuf, uint16_t len); } SPI; struct { void (*_read_qspi)(uint8_t opcode, uint16_t addr, uint8_t* pBuf, uint16_t len); void (*_write_qspi)(uint8_t opcode, uint16_t addr, uint8_t* pBuf, uint16_t len); } QSPI; } IF; } _WIZCHIP; extern _WIZCHIP WIZCHIP; typedef enum { CW_SYS_LOCK, CW_SYS_UNLOCK, CW_GET_SYSLOCK, CW_RESET_WIZCHIP, CW_INIT_WIZCHIP, CW_GET_INTERRUPT, CW_CLR_INTERRUPT, CW_SET_INTRMASK, CW_GET_INTRMASK, CW_SET_INTRTIME, CW_GET_INTRTIME, CW_SET_IEN, CW_GET_IEN, CW_GET_ID, CW_GET_VER, CW_SET_SYSCLK, CW_GET_SYSCLK, CW_RESET_PHY, CW_SET_PHYCONF, CW_GET_PHYCONF, CW_GET_PHYSTATUS, CW_SET_PHYPOWMODE, CW_GET_PHYPOWMODE, CW_GET_PHYLINK } ctlwizchip_type; typedef enum { CN_SET_NETINFO, CN_GET_NETINFO, CN_SET_NETMODE, CN_GET_NETMODE, CN_SET_TIMEOUT, CN_GET_TIMEOUT, CN_SET_PREFER, CN_GET_PREFER, } ctlnetwork_type; typedef enum { CNS_ARP, CNS_PING, CNS_DAD, CNS_SLAAC, CNS_UNSOL_NA, CNS_GET_PREFIX } ctlnetservice_type; typedef enum { IK_PPPOE_TERMINATED = (1 << 0), IK_DEST_UNREACH = (1 << 1), IK_IP_CONFLICT = (1 << 2), IK_DEST_UNREACH6 = (1 << 4), IK_WOL = (1 << 7), IK_NET_ALL = (0x97), IK_SOCK_0 = (1 << 8), IK_SOCK_1 = (1 << 9), IK_SOCK_2 = (1 << 10), IK_SOCK_3 = (1 << 11), IK_SOCK_4 = (1 << 12), IK_SOCK_5 = (1 << 13), IK_SOCK_6 = (1 << 14), IK_SOCK_7 = (1 << 15), IK_SOCK_ALL = (0xFF << 8), IK_SOCKL_TOUT = (1 << 16), IK_SOCKL_ARP4 = (1 << 17), IK_SOCKL_PING4 = (1 << 18), IK_SOCKL_ARP6 = (1 << 19), IK_SOCKL_PING6 = (1 << 20), IK_SOCKL_NS = (1 << 21), IK_SOCKL_RS = (1 << 22), IK_SOCKL_RA = (1 << 23), IK_SOCKL_ALL = (0xFF << 16), IK_INT_ALL = (0x00FFFF97) } intr_kind; #define SYS_CHIP_LOCK (1<<2) #define SYS_NET_LOCK (1<<1) #define SYS_PHY_LOCK (1<<0) #define SYSCLK_100MHZ 0 #define SYSCLK_25MHZ 1 #define PHY_MODE_MANUAL 0 #define PHY_MODE_AUTONEGO 1 #define PHY_MODE_TE 2 #define IPV6_ADDR_AUTO 0x00 #define IPV6_ADDR_LLA 0x02 #define IPV6_ADDR_GUA 0x03 #define PHY_CONFBY_HW 0 #define PHY_CONFBY_SW 1 #define PHY_SPEED_10 0 #define PHY_SPEED_100 1 #define PHY_DUPLEX_HALF 0 #define PHY_DUPLEX_FULL 1 #define PHY_LINK_OFF 0 #define PHY_LINK_ON 1 #define PHY_POWER_NORM 0 #define PHY_POWER_DOWN 1 typedef struct wiz_PhyConf_t { uint8_t by; uint8_t mode; uint8_t speed; uint8_t duplex; } wiz_PhyConf; typedef enum { NETINFO_NONE = 0x00, NETINFO_STATIC_V4 = 0x01, NETINFO_STATIC_V6 = 0x02, NETINFO_STATIC_ALL = 0x03, NETINFO_SLAAC_V6 = 0x04, NETINFO_DHCP_V4 = 0x10, NETINFO_DHCP_V6 = 0x20, NETINFO_DHCP_ALL = 0x30 } ipconf_mode; typedef enum { NETINFO_STATIC = 1, NETINFO_DHCP } dhcp_mode; typedef struct wiz_NetInfo_t { uint8_t mac[6]; uint8_t ip[4]; uint8_t sn[4]; uint8_t gw[4]; uint8_t lla[16]; uint8_t gua[16]; uint8_t sn6[16]; uint8_t gw6[16]; uint8_t dns[4]; uint8_t dns6[16]; ipconf_mode ipmode; dhcp_mode dhcp; } wiz_NetInfo; typedef enum { NM_IPB_V4 = (1 << 0), NM_IPB_V6 = (1 << 1), NM_WOL = (1 << 2), NM_PB6_MULTI = (1 << 4), NM_PB6_ALLNODE = (1 << 5), NM_MR_MASK = (0x37), NM_PPPoE = (1 << 8), NM_DHA_SELECT = (1 << 15), NM_MR2_MASK = (0x09 << 8), NM_PB4_ALL = (1 << 16), NM_TRSTB_V4 = (1 << 17), NM_PARP_V4 = (1 << 18), NM_UNRB_V4 = (1 << 19), NM_NET4_MASK = (0x0F << 16), NM_PB6_ALL = (1 << 24), NM_TRSTB_V6 = (1 << 25), NM_PARP_V6 = (1 << 26), NM_UNRB_V6 = (1 << 27), NM_NET6_MASK = (0x0F << 24), NM_MASK_ALL = (0x0F0F0937) } netmode_type; typedef struct wiz_NetTimeout_t { uint8_t s_retry_cnt; uint16_t s_time_100us; uint8_t sl_retry_cnt; uint16_t sl_time_100us; } wiz_NetTimeout; typedef struct wiz_IPAddress_t { uint8_t ip[16]; uint8_t len; } wiz_IPAddress; typedef struct wiz_Prefix_t { uint8_t len; uint8_t flag; uint32_t valid_lifetime; uint32_t preferred_lifetime; uint8_t prefix[16]; } wiz_Prefix; typedef struct wiz_ARP_t { wiz_IPAddress destinfo; uint8_t dha[6]; } wiz_ARP; typedef struct wiz_PING_t { uint16_t id; uint16_t seq; wiz_IPAddress destinfo; } wiz_PING; void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void)); void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void)); void reg_wizchip_bus_cbfunc(iodata_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, iodata_t wb)); void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb)); void reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len)); void reg_wizchip_qspi_cbfunc(void (*qspi_rb)(uint8_t opcode, uint16_t addr, uint8_t* pBuf, uint16_t len), void (*qspi_wb)(uint8_t opcode, uint16_t addr, uint8_t* pBuf, uint16_t len)); int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg); int8_t ctlnetwork(ctlnetwork_type cntype, void* arg); int8_t ctlnetservice(ctlnetservice_type cnstype, void* arg); void wizchip_sw_reset(void); int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize); void wizchip_clrinterrupt(intr_kind intr); intr_kind wizchip_getinterrupt(void); void wizchip_setinterruptmask(intr_kind intr); intr_kind wizchip_getinterruptmask(void); int8_t wizphy_getphylink(void); int8_t wizphy_getphypmode(void); void wizphy_reset(void); void wizphy_setphyconf(wiz_PhyConf* phyconf); void wizphy_getphyconf(wiz_PhyConf* phyconf); void wizphy_getphystat(wiz_PhyConf* phyconf); void wizphy_setphypmode(uint8_t pmode); void wizchip_setnetinfo(wiz_NetInfo* pnetinfo); void wizchip_getnetinfo(wiz_NetInfo* pnetinfo); void wizchip_setnetmode(netmode_type netmode); netmode_type wizchip_getnetmode(void); void wizchip_settimeout(wiz_NetTimeout* nettime); void wizchip_gettimeout(wiz_NetTimeout* nettime); int8_t wizchip_arp(wiz_ARP* arp); int8_t wizchip_ping(wiz_PING* ping); int8_t wizchip_dad(uint8_t* ipv6); int8_t wizchip_slaac(wiz_Prefix* prefix); int8_t wizchip_unsolicited(void); int8_t wizchip_getprefix(wiz_Prefix* prefix); #ifdef __cplusplus } #endif #endif