1af3dc4a7SPedro F. Giffuni /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3af3dc4a7SPedro F. Giffuni * 4fe47fb7bSGanbold Tsagaankhuu * Copyright (C) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org> 50baf1f65SGanbold Tsagaankhuu * All rights reserved. 60baf1f65SGanbold Tsagaankhuu * 70baf1f65SGanbold Tsagaankhuu * Redistribution and use in source and binary forms, with or without 80baf1f65SGanbold Tsagaankhuu * modification, are permitted provided that the following conditions 90baf1f65SGanbold Tsagaankhuu * are met: 100baf1f65SGanbold Tsagaankhuu * 1. Redistributions of source code must retain the above copyright 110baf1f65SGanbold Tsagaankhuu * notice, this list of conditions and the following disclaimer. 120baf1f65SGanbold Tsagaankhuu * 2. Redistributions in binary form must reproduce the above copyright 130baf1f65SGanbold Tsagaankhuu * notice, this list of conditions and the following disclaimer in the 140baf1f65SGanbold Tsagaankhuu * documentation and/or other materials provided with the distribution. 150baf1f65SGanbold Tsagaankhuu * 160baf1f65SGanbold Tsagaankhuu * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 170baf1f65SGanbold Tsagaankhuu * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 180baf1f65SGanbold Tsagaankhuu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 190baf1f65SGanbold Tsagaankhuu * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 200baf1f65SGanbold Tsagaankhuu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 210baf1f65SGanbold Tsagaankhuu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 220baf1f65SGanbold Tsagaankhuu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 230baf1f65SGanbold Tsagaankhuu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 240baf1f65SGanbold Tsagaankhuu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 250baf1f65SGanbold Tsagaankhuu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 260baf1f65SGanbold Tsagaankhuu * SUCH DAMAGE. 270baf1f65SGanbold Tsagaankhuu */ 280baf1f65SGanbold Tsagaankhuu 290baf1f65SGanbold Tsagaankhuu #ifndef __IF_EMACREG_H__ 300baf1f65SGanbold Tsagaankhuu #define __IF_EMACREG_H__ 310baf1f65SGanbold Tsagaankhuu 320baf1f65SGanbold Tsagaankhuu /* 330baf1f65SGanbold Tsagaankhuu * EMAC register definitions 340baf1f65SGanbold Tsagaankhuu */ 350baf1f65SGanbold Tsagaankhuu #define EMAC_CTL 0x00 360baf1f65SGanbold Tsagaankhuu #define EMAC_CTL_RST (1 << 0) 370baf1f65SGanbold Tsagaankhuu #define EMAC_CTL_TX_EN (1 << 1) 380baf1f65SGanbold Tsagaankhuu #define EMAC_CTL_RX_EN (1 << 2) 390baf1f65SGanbold Tsagaankhuu 400baf1f65SGanbold Tsagaankhuu #define EMAC_TX_MODE 0x04 410baf1f65SGanbold Tsagaankhuu #define EMAC_TX_FLOW 0x08 420baf1f65SGanbold Tsagaankhuu #define EMAC_TX_CTL0 0x0C 430baf1f65SGanbold Tsagaankhuu #define EMAC_TX_CTL1 0x10 440baf1f65SGanbold Tsagaankhuu #define EMAC_TX_INS 0x14 450baf1f65SGanbold Tsagaankhuu #define EMAC_TX_PL0 0x18 460baf1f65SGanbold Tsagaankhuu #define EMAC_TX_PL1 0x1C 470baf1f65SGanbold Tsagaankhuu #define EMAC_TX_STA 0x20 480baf1f65SGanbold Tsagaankhuu #define EMAC_TX_IO_DATA 0x24 490baf1f65SGanbold Tsagaankhuu #define EMAC_TX_IO_DATA1 0x28 500baf1f65SGanbold Tsagaankhuu #define EMAC_TX_TSVL0 0x2C 510baf1f65SGanbold Tsagaankhuu #define EMAC_TX_TSVH0 0x30 520baf1f65SGanbold Tsagaankhuu #define EMAC_TX_TSVL1 0x34 530baf1f65SGanbold Tsagaankhuu #define EMAC_TX_TSVH1 0x38 5474ccc02bSLuiz Otavio O Souza #define EMAC_TX_FIFO0 (1 << 0) 5574ccc02bSLuiz Otavio O Souza #define EMAC_TX_FIFO1 (1 << 1) 560baf1f65SGanbold Tsagaankhuu 570baf1f65SGanbold Tsagaankhuu #define EMAC_RX_CTL 0x3C 580baf1f65SGanbold Tsagaankhuu #define EMAC_RX_HASH0 0x40 590baf1f65SGanbold Tsagaankhuu #define EMAC_RX_HASH1 0x44 600baf1f65SGanbold Tsagaankhuu #define EMAC_RX_STA 0x48 610baf1f65SGanbold Tsagaankhuu #define EMAC_RX_IO_DATA 0x4C 620baf1f65SGanbold Tsagaankhuu #define EMAC_RX_FBC 0x50 630baf1f65SGanbold Tsagaankhuu 640baf1f65SGanbold Tsagaankhuu #define EMAC_INT_CTL 0x54 650baf1f65SGanbold Tsagaankhuu #define EMAC_INT_STA 0x58 6674ccc02bSLuiz Otavio O Souza #define EMAC_INT_STA_TX (EMAC_TX_FIFO0 | EMAC_TX_FIFO1) 670baf1f65SGanbold Tsagaankhuu #define EMAC_INT_STA_RX 0x100 680baf1f65SGanbold Tsagaankhuu #define EMAC_INT_EN (0xf << 0) | (1 << 8) 690baf1f65SGanbold Tsagaankhuu 700baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL0 0x5C 710baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1 0x60 720baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_IPGT 0x64 730baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_IPGR 0x68 740baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CLRT 0x6C 750baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MAXF 0x70 760baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_SUPP 0x74 770baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_TEST 0x78 780baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MCFG 0x7C 790baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MCMD 0x80 800baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MADR 0x84 810baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MWTD 0x88 820baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MRDD 0x8C 830baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MIND 0x90 840baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_SSRR 0x94 850baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_A0 0x98 860baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_A1 0x9C 870baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_A2 0xA0 880baf1f65SGanbold Tsagaankhuu 890baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_L0 0xA4 900baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_H0 0xA8 910baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_L1 0xAC 920baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_H1 0xB0 930baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_L2 0xB4 940baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_H2 0xB8 950baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_L3 0xBC 960baf1f65SGanbold Tsagaankhuu #define EMAC_SAFX_H3 0xC0 970baf1f65SGanbold Tsagaankhuu 980baf1f65SGanbold Tsagaankhuu #define EMAC_PHY_DUPLEX (1 << 8) 990baf1f65SGanbold Tsagaankhuu 1000baf1f65SGanbold Tsagaankhuu /* 1010baf1f65SGanbold Tsagaankhuu * Each received packet has 8 bytes header: 1020baf1f65SGanbold Tsagaankhuu * Byte 0: Packet valid flag: 0x01 valid, 0x00 not valid 1030baf1f65SGanbold Tsagaankhuu * Byte 1: 0x43 -> Ascii code 'C' 1040baf1f65SGanbold Tsagaankhuu * Byte 2: 0x41 -> Ascii code 'A' 1050baf1f65SGanbold Tsagaankhuu * Byte 3: 0x4d -> Ascii code 'M' 1060baf1f65SGanbold Tsagaankhuu * Byte 4: High byte of received packet's status 1070baf1f65SGanbold Tsagaankhuu * Byte 5: Low byte of received packet's status 1080baf1f65SGanbold Tsagaankhuu * Byte 6: High byte of packet size 1090baf1f65SGanbold Tsagaankhuu * Byte 7: Low byte of packet size 1100baf1f65SGanbold Tsagaankhuu */ 1110baf1f65SGanbold Tsagaankhuu #define EMAC_PACKET_HEADER (0x0143414d) 1120baf1f65SGanbold Tsagaankhuu 1130baf1f65SGanbold Tsagaankhuu /* Aborted frame enable */ 1140baf1f65SGanbold Tsagaankhuu #define EMAC_TX_AB_M (1 << 0) 1150baf1f65SGanbold Tsagaankhuu 1160baf1f65SGanbold Tsagaankhuu /* 0: Enable CPU mode for TX, 1: DMA */ 1170baf1f65SGanbold Tsagaankhuu #define EMAC_TX_TM ~(1 << 1) 1180baf1f65SGanbold Tsagaankhuu 1190baf1f65SGanbold Tsagaankhuu /* 0: DRQ asserted, 1: DRQ automatically */ 1200baf1f65SGanbold Tsagaankhuu #define EMAC_RX_DRQ_MODE (1 << 1) 1210baf1f65SGanbold Tsagaankhuu 1220baf1f65SGanbold Tsagaankhuu /* 0: Enable CPU mode for RX, 1: DMA */ 1230baf1f65SGanbold Tsagaankhuu #define EMAC_RX_TM ~(1 << 2) 1240baf1f65SGanbold Tsagaankhuu 1250baf1f65SGanbold Tsagaankhuu /* Pass all Frames */ 1260baf1f65SGanbold Tsagaankhuu #define EMAC_RX_PA (1 << 4) 1270baf1f65SGanbold Tsagaankhuu 1280baf1f65SGanbold Tsagaankhuu /* Pass Control Frames */ 1290baf1f65SGanbold Tsagaankhuu #define EMAC_RX_PCF (1 << 5) 1300baf1f65SGanbold Tsagaankhuu 1310baf1f65SGanbold Tsagaankhuu /* Pass Frames with CRC Error */ 1320baf1f65SGanbold Tsagaankhuu #define EMAC_RX_PCRCE (1 << 6) 1330baf1f65SGanbold Tsagaankhuu 1340baf1f65SGanbold Tsagaankhuu /* Pass Frames with Length Error */ 1350baf1f65SGanbold Tsagaankhuu #define EMAC_RX_PLE (1 << 7) 1360baf1f65SGanbold Tsagaankhuu 1370baf1f65SGanbold Tsagaankhuu /* Pass Frames length out of range */ 1380baf1f65SGanbold Tsagaankhuu #define EMAC_RX_POR (1 << 8) 1390baf1f65SGanbold Tsagaankhuu 1400baf1f65SGanbold Tsagaankhuu /* Accept unicast Packets */ 1410baf1f65SGanbold Tsagaankhuu #define EMAC_RX_UCAD (1 << 16) 1420baf1f65SGanbold Tsagaankhuu 1430baf1f65SGanbold Tsagaankhuu /* Enable DA Filtering */ 1440baf1f65SGanbold Tsagaankhuu #define EMAC_RX_DAF (1 << 17) 1450baf1f65SGanbold Tsagaankhuu 1460baf1f65SGanbold Tsagaankhuu /* Accept multicast Packets */ 1470baf1f65SGanbold Tsagaankhuu #define EMAC_RX_MCO (1 << 20) 1480baf1f65SGanbold Tsagaankhuu 1490baf1f65SGanbold Tsagaankhuu /* Enable Hash filter */ 1500baf1f65SGanbold Tsagaankhuu #define EMAC_RX_MHF (1 << 21) 1510baf1f65SGanbold Tsagaankhuu 1520baf1f65SGanbold Tsagaankhuu /* Accept Broadcast Packets */ 1530baf1f65SGanbold Tsagaankhuu #define EMAC_RX_BCO (1 << 22) 1540baf1f65SGanbold Tsagaankhuu 1550baf1f65SGanbold Tsagaankhuu /* Enable SA Filtering */ 1560baf1f65SGanbold Tsagaankhuu #define EMAC_RX_SAF (1 << 24) 1570baf1f65SGanbold Tsagaankhuu 1580baf1f65SGanbold Tsagaankhuu /* Inverse Filtering */ 1590baf1f65SGanbold Tsagaankhuu #define EMAC_RX_SAIF (1 << 25) 1600baf1f65SGanbold Tsagaankhuu 1610baf1f65SGanbold Tsagaankhuu #define EMAC_RX_SETUP (EMAC_RX_POR | EMAC_RX_UCAD | \ 1620baf1f65SGanbold Tsagaankhuu EMAC_RX_DAF | EMAC_RX_MCO | EMAC_RX_BCO) 1630baf1f65SGanbold Tsagaankhuu 1640baf1f65SGanbold Tsagaankhuu /* Enable Receive Flow Control */ 1650baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL0_RFC (1 << 2) 1660baf1f65SGanbold Tsagaankhuu 1670baf1f65SGanbold Tsagaankhuu /* Enable Transmit Flow Control */ 1680baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL0_TFC (1 << 3) 1690baf1f65SGanbold Tsagaankhuu 1700baf1f65SGanbold Tsagaankhuu /* Enable soft reset */ 1710baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL0_SOFT_RST (1 << 15) 1720baf1f65SGanbold Tsagaankhuu 1730baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL0_SETUP (EMAC_MAC_CTL0_RFC | EMAC_MAC_CTL0_TFC) 1740baf1f65SGanbold Tsagaankhuu 1750baf1f65SGanbold Tsagaankhuu /* Enable duplex */ 1760baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_DUP (1 << 0) 1770baf1f65SGanbold Tsagaankhuu 1780baf1f65SGanbold Tsagaankhuu /* Enable MAC Frame Length Checking */ 1790baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_FLC (1 << 1) 1800baf1f65SGanbold Tsagaankhuu 1810baf1f65SGanbold Tsagaankhuu /* Enable Huge Frame */ 1820baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_HF (1 << 2) 1830baf1f65SGanbold Tsagaankhuu 1840baf1f65SGanbold Tsagaankhuu /* Enable MAC Delayed CRC */ 1850baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_DCRC (1 << 3) 1860baf1f65SGanbold Tsagaankhuu 1870baf1f65SGanbold Tsagaankhuu /* Enable MAC CRC */ 1880baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_CRC (1 << 4) 1890baf1f65SGanbold Tsagaankhuu 1900baf1f65SGanbold Tsagaankhuu /* Enable MAC PAD Short frames */ 1910baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_PC (1 << 5) 1920baf1f65SGanbold Tsagaankhuu 1930baf1f65SGanbold Tsagaankhuu /* Enable MAC PAD Short frames and append CRC */ 1940baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_VC (1 << 6) 1950baf1f65SGanbold Tsagaankhuu 1960baf1f65SGanbold Tsagaankhuu /* Enable MAC auto detect Short frames */ 1970baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_ADP (1 << 7) 1980baf1f65SGanbold Tsagaankhuu 1990baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_PRE (1 << 8) 2000baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_LPE (1 << 9) 2010baf1f65SGanbold Tsagaankhuu 2020baf1f65SGanbold Tsagaankhuu /* Enable no back off */ 2030baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_NB (1 << 12) 2040baf1f65SGanbold Tsagaankhuu 2050baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_BNB (1 << 13) 2060baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_ED (1 << 14) 2070baf1f65SGanbold Tsagaankhuu 2080baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CTL1_SETUP (EMAC_MAC_CTL1_FLC | EMAC_MAC_CTL1_CRC | \ 2090baf1f65SGanbold Tsagaankhuu EMAC_MAC_CTL1_PC) 2100baf1f65SGanbold Tsagaankhuu 2110baf1f65SGanbold Tsagaankhuu /* half duplex */ 2120baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_IPGT_HD 0x12 2130baf1f65SGanbold Tsagaankhuu 2140baf1f65SGanbold Tsagaankhuu /* full duplex */ 2150baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_IPGT_FD 0x15 2160baf1f65SGanbold Tsagaankhuu 2170baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_NBTB_IPG1 0xC 2180baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_NBTB_IPG2 0x12 2190baf1f65SGanbold Tsagaankhuu 2200baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_CW 0x37 2210baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_RM 0xF 2220baf1f65SGanbold Tsagaankhuu 2230baf1f65SGanbold Tsagaankhuu #define EMAC_MAC_MFL 0x0600 2240baf1f65SGanbold Tsagaankhuu 2250baf1f65SGanbold Tsagaankhuu /* Receive status */ 2260baf1f65SGanbold Tsagaankhuu #define EMAC_CRCERR (1 << 4) 2270baf1f65SGanbold Tsagaankhuu #define EMAC_LENERR (3 << 5) 2288c2df90aSLuiz Otavio O Souza #define EMAC_PKT_OK (1 << 7) 2290baf1f65SGanbold Tsagaankhuu 2300baf1f65SGanbold Tsagaankhuu #define EMAC_RX_FLUSH_FIFO (1 << 3) 2310baf1f65SGanbold Tsagaankhuu #define EMAC_PHY_RESET (1 << 15) 2320baf1f65SGanbold Tsagaankhuu #define EMAC_PHY_PWRDOWN (1 << 11) 2330baf1f65SGanbold Tsagaankhuu 2340baf1f65SGanbold Tsagaankhuu #define EMAC_PROC_MIN 16 2350baf1f65SGanbold Tsagaankhuu #define EMAC_PROC_MAX 255 2360baf1f65SGanbold Tsagaankhuu #define EMAC_PROC_DEFAULT 64 2370baf1f65SGanbold Tsagaankhuu 2380baf1f65SGanbold Tsagaankhuu #define EMAC_LOCK(cs) mtx_lock(&(sc)->emac_mtx) 2390baf1f65SGanbold Tsagaankhuu #define EMAC_UNLOCK(cs) mtx_unlock(&(sc)->emac_mtx) 2400baf1f65SGanbold Tsagaankhuu #define EMAC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->emac_mtx, MA_OWNED); 2410baf1f65SGanbold Tsagaankhuu 2420baf1f65SGanbold Tsagaankhuu #endif /* __IF_EMACREG_H__ */ 243