#define FXP_VENDORID_INTEL 0x8086
#define FXP_DEVICEID_i82557 0x1229
#define FXP_PCI_MMBA 0x10
#define FXP_PCI_IOBA 0x14
#define FXP_CSR_SCB_STATUS 0
#define FXP_CSR_SCB_COMMAND 2
#define FXP_CSR_SCB_GENERAL 4
#define FXP_CSR_PORT 8
#define FXP_CSR_FLASHCONTROL 12
#define FXP_CSR_EEPROMCONTROL 14
#define FXP_CSR_MDICONTROL 16
#define FXP_PORT_SOFTWARE_RESET 0
#define FXP_PORT_SELFTEST 1
#define FXP_PORT_SELECTIVE_RESET 2
#define FXP_PORT_DUMP 3
#define FXP_SCB_RUS_IDLE 0x0000
#define FXP_SCB_RUS_SUSPENDED 0x0001
#define FXP_SCB_RUS_NORESOURCES 0x0002
#define FXP_SCB_RUS_READY 0x0004
#define FXP_SCB_RUS_SUSP_NORBDS 0x0009
#define FXP_SCB_RUS_NORES_NORBDS 0x000a
#define FXP_SCB_RUS_READY_NORBDS 0x000c
#define FXP_SCB_CUS_IDLE 0x0000
#define FXP_SCB_CUS_SUSPENDED 0x0040
#define FXP_SCB_CUS_ACTIVE 0x0080
#define FXP_SCB_CUS_MASK 0x00c0
#define FXP_SCB_STATACK_SWI 0x0400
#define FXP_SCB_STATACK_MDI 0x0800
#define FXP_SCB_STATACK_RNR 0x1000
#define FXP_SCB_STATACK_CNA 0x2000
#define FXP_SCB_STATACK_FR 0x4000
#define FXP_SCB_STATACK_CXTNO 0x8000
#define FXP_SCB_STATACK_MASK 0xfc00
#define FXP_SCB_COMMAND_CU_NOP 0x0000
#define FXP_SCB_COMMAND_CU_START 0x0010
#define FXP_SCB_COMMAND_CU_RESUME 0x0020
#define FXP_SCB_COMMAND_CU_DUMP_ADR 0x0040
#define FXP_SCB_COMMAND_CU_DUMP 0x0050
#define FXP_SCB_COMMAND_CU_BASE 0x0060
#define FXP_SCB_COMMAND_CU_DUMPRESET 0x0070
#define FXP_SCB_COMMAND_RU_NOP 0x0000
#define FXP_SCB_COMMAND_RU_START 0x0001
#define FXP_SCB_COMMAND_RU_RESUME 0x0002
#define FXP_SCB_COMMAND_RU_ABORT 0x0004
#define FXP_SCB_COMMAND_RU_LOADHDS 0x0005
#define FXP_SCB_COMMAND_RU_BASE 0x0006
#define FXP_SCB_COMMAND_RU_RBDRESUME 0x0007
#define FXP_SCB_INTRCNTL_REQUEST_SWI 0x0200
#define FXP_CMD_TMO (10000)
struct fxp_cb_nop {
void *fill[2];
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
};
struct fxp_cb_ias {
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
volatile u_int8_t macaddr[6];
};
struct fxp_cb_config {
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
volatile u_int8_t byte_count;
volatile u_int8_t fifo_limit;
volatile u_int8_t adaptive_ifs;
volatile u_int8_t ctrl0;
volatile u_int8_t rx_dma_bytecount;
volatile u_int8_t tx_dma_bytecount;
volatile u_int8_t ctrl1;
volatile u_int8_t ctrl2;
volatile u_int8_t mediatype;
volatile u_int8_t void2;
volatile u_int8_t ctrl3;
volatile u_int8_t linear_priority;
volatile u_int8_t interfrm_spacing;
volatile u_int8_t void3;
volatile u_int8_t void4;
volatile u_int8_t promiscuous;
volatile u_int8_t void5;
volatile u_int8_t void6;
volatile u_int8_t stripping;
volatile u_int8_t fdx_pin;
volatile u_int8_t multi_ia;
volatile u_int8_t mc_all;
};
#define MAXMCADDR 80
struct fxp_cb_mcs {
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
volatile u_int16_t mc_cnt;
volatile u_int8_t mc_addr[MAXMCADDR][6];
};
#define SZ_TXCB 16
#define SZ_TBD 8
#define FXP_NTXSEG ((256 - SZ_TXCB) / SZ_TBD)
struct fxp_tbd {
volatile u_int32_t tb_addr;
volatile u_int32_t tb_size;
};
struct fxp_cb_tx {
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
volatile u_int32_t tbd_array_addr;
volatile u_int16_t byte_count;
volatile u_int8_t tx_threshold;
volatile u_int8_t tbd_number;
volatile struct fxp_tbd tbd[FXP_NTXSEG];
};
#define FXP_CB_STATUS_OK 0x2000
#define FXP_CB_STATUS_C 0x8000
#define FXP_CB_COMMAND_NOP 0x0
#define FXP_CB_COMMAND_IAS 0x1
#define FXP_CB_COMMAND_CONFIG 0x2
#define FXP_CB_COMMAND_MCAS 0x3
#define FXP_CB_COMMAND_XMIT 0x4
#define FXP_CB_COMMAND_UCODE 0x5
#define FXP_CB_COMMAND_DUMP 0x6
#define FXP_CB_COMMAND_DIAG 0x7
#define FXP_CB_COMMAND_SF 0x0008
#define FXP_CB_COMMAND_I 0x2000
#define FXP_CB_COMMAND_S 0x4000
#define FXP_CB_COMMAND_EL 0x8000
struct fxp_rfa {
volatile u_int16_t rfa_status;
volatile u_int16_t rfa_control;
volatile u_int32_t link_addr;
volatile u_int32_t rbd_addr;
volatile u_int16_t actual_size;
volatile u_int16_t size;
};
#define FXP_RFA_STATUS_RCOL 0x0001
#define FXP_RFA_STATUS_IAMATCH 0x0002
#define FXP_RFA_STATUS_S4 0x0010
#define FXP_RFA_STATUS_TL 0x0020
#define FXP_RFA_STATUS_FTS 0x0080
#define FXP_RFA_STATUS_OVERRUN 0x0100
#define FXP_RFA_STATUS_RNR 0x0200
#define FXP_RFA_STATUS_ALIGN 0x0400
#define FXP_RFA_STATUS_CRC 0x0800
#define FXP_RFA_STATUS_OK 0x2000
#define FXP_RFA_STATUS_C 0x8000
#define FXP_RFA_CONTROL_SF 0x08
#define FXP_RFA_CONTROL_H 0x10
#define FXP_RFA_CONTROL_S 0x4000
#define FXP_RFA_CONTROL_EL 0x8000
struct fxp_stats {
volatile u_int32_t tx_good;
volatile u_int32_t tx_maxcols;
volatile u_int32_t tx_latecols;
volatile u_int32_t tx_underruns;
volatile u_int32_t tx_lostcrs;
volatile u_int32_t tx_deffered;
volatile u_int32_t tx_single_collisions;
volatile u_int32_t tx_multiple_collisions;
volatile u_int32_t tx_total_collisions;
volatile u_int32_t rx_good;
volatile u_int32_t rx_crc_errors;
volatile u_int32_t rx_alignment_errors;
volatile u_int32_t rx_rnr_errors;
volatile u_int32_t rx_overrun_errors;
volatile u_int32_t rx_cdt_errors;
volatile u_int32_t rx_shortframes;
volatile u_int32_t completion_status;
};
#define FXP_STATS_DUMP_COMPLETE 0xa005
#define FXP_STATS_DR_COMPLETE 0xa007
#define FXP_EEPROM_EESK 0x01
#define FXP_EEPROM_EECS 0x02
#define FXP_EEPROM_EEDI 0x04
#define FXP_EEPROM_EEDO 0x08
#define FXP_EEPROM_OPC_ERASE 0x4
#define FXP_EEPROM_OPC_WRITE 0x5
#define FXP_EEPROM_OPC_READ 0x6
#define FXP_EEPROM_REG_MAC 0x00
#define FXP_EEPROM_REG_COMPAT 0x03
#define FXP_EEPROM_REG_COMPAT_MC10 0x0001
#define FXP_EEPROM_REG_COMPAT_MC100 0x0002
#define FXP_EEPROM_REG_COMPAT_SRV 0x0400
#define FXP_EEPROM_REG_PHY 0x06
#define FXP_EEPROM_REG_ID 0x0a
#define FXP_EEPROM_REG_ID_STB 0x0002
#define FXP_MDI_WRITE 0x1
#define FXP_MDI_READ 0x2
#define FXP_PHY_DEVICE_MASK 0x3f00
#define FXP_PHY_SERIAL_ONLY 0x8000
#define FXP_PHY_NONE 0
#define FXP_PHY_82553A 1
#define FXP_PHY_82553C 2
#define FXP_PHY_82503 3
#define FXP_PHY_DP83840 4
#define FXP_PHY_80C240 5
#define FXP_PHY_80C24 6
#define FXP_PHY_82555 7
#define FXP_PHY_DP83840A 10
#define FXP_PHY_82555B 11
#define FXP_PHY_BMCR 0x0
#define FXP_PHY_BMCR_FULLDUPLEX 0x0100
#define FXP_PHY_BMCR_AUTOEN 0x1000
#define FXP_PHY_BMCR_SPEED_100M 0x2000
#define FXP_DP83840_PCR 0x17
#define FXP_DP83840_PCR_LED4_MODE 0x0002
#define FXP_DP83840_PCR_F_CONNECT 0x0020
#define FXP_DP83840_PCR_BIT8 0x0100
#define FXP_DP83840_PCR_BIT10 0x0400
#define MAXUCODESIZE 192
struct fxp_cb_ucode {
volatile u_int16_t cb_status;
volatile u_int16_t cb_command;
volatile u_int32_t link_addr;
volatile u_int32_t ucode[MAXUCODESIZE];
};
#define FXP_REV_82557_A 0
#define FXP_REV_82557_B 1
#define FXP_REV_82557_C 2
#define FXP_REV_82558_A4 4
#define FXP_REV_82558_B0 5
#define FXP_REV_82559_A0 8
#define FXP_REV_82559S_A 9
#define FXP_REV_82550 12
#define FXP_REV_82550_C 13
#define FXP_REV_82551_E 14
#define FXP_REV_82551_F 15
#define FXP_REV_82551_10 16