#ifndef _RTL837X_STDIO_H_ #define _RTL837X_STDIO_H_ #include "uip/uip-conf.h" #include #include #define SYS_TICK_HZ 200 #define CPU_PORT 9 // Define Port-masks for 9-port devices and 6-port devices #define PMASK_9 0x1ff #define PMASK_6 0x1f8 #define PMASK_CPU 0x200 // Defines a port mask for dropping all packets on Lookup-miss #define LOOKUP_MISS_DROP_6 0x00015540 #define LOOKUP_MISS_DROP_9 0x00015555 #define LOOKUP_MISS_FLOOD 0x00000000 /* Buffer for serial input, SBUF_SIZE must be power of 2 < 256 * Writing to this buffer is under the sole control of the serial ISR * Note that key-presses such as can create multiple * keys (3 to 4) being sent via the serial line, so this must be * sufficiently large */ #define SBUF_SIZE 16 #define SBUF_MASK (SBUF_SIZE - 1) extern __xdata volatile uint8_t sbuf_ptr; extern __xdata uint8_t sbuf[SBUF_SIZE]; // Define the command buffer size, Must be 2^x and <= 128 #define CMD_BUF_SIZE 128 // Size of the TCP Output buffer #define TCP_OUTBUF_SIZE 2500 // Size of the memory area dedicated to VLAN-names #define VLAN_NAMES_SIZE 1024 // Size of the flash buffer used for writing to flash, must be a multiple of the flash page size (0x100) #define FLASH_BUF_SIZE 512 // For RX data, a propriatary RTL FRAME is inserted. Instead of 0x0800 for IPv4, // the RTL_FRAME_TAG_ID is used as part of an 8-byte tag. When VLAN is activated, // the VLAN tag is inserted after the RTL tag // See here for the RTL tag: https://github.com/torvalds/linux/commit/1521d5adfc2b557e15f97283c8b7ad688c3ebc40 struct rtl_tag { uint16_t tag; // This is 0x8899 for the RTL837X uint8_t version; // Version is 4 uint8_t reason; uint16_t flags; uint16_t pmask; // A bit mask for a TX pkt, 4-bit port-number for RX }; struct vlan_tag { uint16_t svlan; // Service VLAN uint16_t vlan; }; #define RTL_TAG_SIZE (sizeof (struct rtl_tag)) #define VLAN_TAG_SIZE (sizeof (struct vlan_tag)) #define RTL_FRAME_TAG_ID 0x8899 // For RX and TX, an 8 byte header describing the frame to be moved to the Asic // and received from the Asic is used #define RTL_FRAME_HEADER_SIZE 8 // This is the standard size of an Ethernet frame header #define ETHER_HEADER_SIZE 14 #define DEFAULT_CONFIG_START 0x6f000 #define CONFIG_START 0x70000 #define CONFIG_LEN 0x1000 #define CODE0_SIZE 0x4000 #define CODE_BANK_SIZE 0xc000 // Store update image after running image #define FIRMWARE_UPLOAD_START 0x80000 // Constants for the circular command buffer, the size must be 2^n #define CMD_HISTORY_SIZE 0x400 #define CMD_HISTORY_MASK (CMD_HISTORY_SIZE - 1) /** * Representation of a 48-bit Ethernet address. */ struct uip_eth_addr { uint8_t addr[6]; }; struct flash_region_t { uint32_t addr; uint16_t len; }; extern __xdata uint8_t uip_buf[UIP_CONF_BUFFER_SIZE+2]; extern __xdata struct uip_eth_addr uip_ethaddr; // Headers for calls in the common code area (HOME/BANK0) void print_string(__code char *p); void print_string_x(__xdata char *p); void print_long(uint32_t a); void print_short(uint16_t a); void print_byte(uint8_t a); void itoa(uint8_t v); void print_sfr_data(void); void print_phy_data(void); void phy_write_mask(uint16_t phy_mask, uint8_t dev_id, uint16_t reg, uint16_t v); void phy_write(uint8_t phy_id, uint8_t dev_id, uint16_t reg, uint16_t v); void phy_read(uint8_t phy_id, uint8_t dev_id, uint16_t reg); void phy_modify(uint8_t phy_id, uint8_t dev_id, uint16_t reg, uint16_t mask, uint16_t set); void reg_read(uint16_t reg_addr); void reg_read_m(uint16_t reg_addr); void reg_write(uint16_t reg_addr); void reg_write_m(uint16_t reg_addr); void delay(uint16_t t); void sleep(uint16_t t); void write_char(char c); void print_reg(uint16_t reg); uint8_t sfp_read_reg(uint8_t slot, uint8_t reg); void reg_bit_set(uint16_t reg_addr, char bit); void reg_bit_clear(uint16_t reg_addr, char bit); void sfr_mask_data(uint8_t n, uint8_t mask, uint8_t set); void sfr_set_zero(void); void reset_chip(void); void memcpy(__xdata void * __xdata dst, __xdata const void * __xdata src, uint16_t len); void memcpyc(register __xdata uint8_t *dst, register __code uint8_t *src, register uint16_t len); void memset(register __xdata uint8_t *dst, register __xdata uint8_t v, register uint8_t len); uint16_t strlen(register __code const char *s); uint16_t strlen_x(register __xdata const char *s); uint16_t strtox(register __xdata uint8_t *dst, register __code const char *s); void tcpip_output(void); uint8_t read_flash(uint8_t bank, __code uint8_t *addr); void get_random_32(void); void read_reg_timer(uint32_t * tmr); void sfp_print_info(uint8_t sfp); bool gpio_pin_test(uint8_t pin); void set_sys_led_state(uint8_t state); #endif