mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
127 lines
3.3 KiB
C
127 lines
3.3 KiB
C
#ifndef _MACHINE_H_
|
|
#define _MACHINE_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#define MACHINE_STR_HELPER(x) #x
|
|
#define MACHINE_STR(x) MACHINE_STR_HELPER(x)
|
|
|
|
|
|
#define MACHINE_DEF_DIR machine
|
|
|
|
#ifndef MACHINE_NAME
|
|
#define MACHINE_NAME default_machine
|
|
#endif
|
|
|
|
#define MACHINE_INC(dir,file) MACHINE_STR(dir/file)
|
|
|
|
#define RTL8370 0x70
|
|
#define RTL8372 0x72
|
|
#define RTL8373 0x73
|
|
|
|
#include MACHINE_INC(MACHINE_DEF_DIR,MACHINE_NAME.h)
|
|
|
|
|
|
#ifndef MACHINE_CHIPSET
|
|
#error "MACHINE_CHIPSET shall be defined in <machine>.h file"
|
|
#endif
|
|
|
|
#ifndef MACHINE_MIN_PORT
|
|
#if MACHINE_CHIPSET == RTL8372
|
|
#define MACHINE_MIN_PORT 3
|
|
#else
|
|
#define MACHINE_MIN_PORT 0
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef MACHINE_MAX_PORT
|
|
#if MACHINE_CHIPSET == RTL8370
|
|
#define MACHINE_MAX_PORT 7
|
|
#else
|
|
#define MACHINE_MAX_PORT 8
|
|
#endif
|
|
#endif
|
|
|
|
#define MACHINE_PORT_VALID(p) \
|
|
((uint8_t)((p) - MACHINE_MIN_PORT) <= (MACHINE_MAX_PORT - MACHINE_MIN_PORT))
|
|
|
|
// auto derive SOC_FAMILY
|
|
#define RTL836X 6
|
|
#define RTL837X 7
|
|
|
|
#ifdef SOC_FAMILY
|
|
#error "SOC_FAMILY can not be manually defined, shall be auto derived"
|
|
#endif
|
|
#if (MACHINE_CHIPSET == RTL8372) || (MACHINE_CHIPSET == RTL8373)
|
|
#define SOC_FAMILY RTL837X
|
|
#elif (MACHINE_CHIPSET == RTL8370 )
|
|
#define SOC_FAMILY RTL836X
|
|
#else
|
|
#error "Unsupported MACHINE_CHIPSET is specified!"
|
|
#endif
|
|
|
|
#define LED_27 1
|
|
// SYSTEM LED
|
|
#define LED_28_SYS 2
|
|
#define LED_29 4
|
|
|
|
struct high_leds {
|
|
// Defines MUX and LED enabling for pins 27-29
|
|
uint8_t mux : 3;
|
|
uint8_t enable : 3;
|
|
uint8_t reserved : 2;
|
|
};
|
|
|
|
struct sfp_port
|
|
{
|
|
uint8_t pin_detect; // gpio number 0-63, 0xFF = don't have it?
|
|
uint8_t pin_los; // gpio number 0-63, 0xFF = don't have it?
|
|
uint8_t pin_tx_disable; // gpio number 0-63, 0xFF = not present
|
|
uint8_t sds;
|
|
uint8_t i2c;
|
|
};
|
|
|
|
struct machine {
|
|
char machine_name[30];
|
|
uint8_t isRTL8373;
|
|
// Lowest logical port number
|
|
uint8_t min_port;
|
|
// Highest logical port number
|
|
uint8_t max_port;
|
|
uint8_t n_sfp;
|
|
uint8_t n_10g;
|
|
uint8_t log_to_phys_port[9];
|
|
uint8_t phys_to_log_port[9]; // Starts at 0 for port 1
|
|
uint8_t is_sfp[9]; // 0 for non-SFP ports 1 or 2 for the I2C port number
|
|
// sfp_port[0] is the first SFP-port from the left on the device, sfp_port[1] the next if present
|
|
struct sfp_port sfp_port[2];
|
|
uint8_t reset_pin;
|
|
struct high_leds high_leds;
|
|
// Defines which led-set (0-3) will be used for given logical port
|
|
// led-set is physical group of LEDs that can be configured to show different port status combinations (see port_led_set below)
|
|
uint8_t port_led_set[9];
|
|
// Defines led-set configuration, applied to all ports using particular led-set
|
|
// Each led-set can have 4 different hardware LED configurations. Which one should be used, depends how LED is wired on the board
|
|
// See stock RTL837X_REG_LED3_2_SETx and RTL837X_REG_LED1_0_SETx registers for reference configuration
|
|
uint32_t led_sets[4][4];
|
|
uint8_t led_mux_custom;
|
|
uint8_t led_mux[28];
|
|
uint32_t mac_flash_offset;
|
|
// Read the flash with single-IO (CMD_FREAD) instead of DIO for MMIO/code
|
|
// fetch. Set for boards whose flash chip is not usable in DIO mode, which
|
|
// shows up as a board that does not boot at all, garbled console output or
|
|
// random resets. Costs management-plane speed only, the ASIC keeps
|
|
// forwarding in hardware.
|
|
uint8_t flash_sio;
|
|
};
|
|
|
|
struct machine_runtime
|
|
{
|
|
uint8_t isRTL8373 : 1;
|
|
uint8_t isN : 1;
|
|
};
|
|
|
|
void machine_custom_init(void) __banked;
|
|
|
|
#endif
|