162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * encx24j600_hw.h: Register definitions
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef _ENCX24J600_HW_H
862306a36Sopenharmony_ci#define _ENCX24J600_HW_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct encx24j600_context {
1162306a36Sopenharmony_ci	struct spi_device *spi;
1262306a36Sopenharmony_ci	struct regmap *regmap;
1362306a36Sopenharmony_ci	struct regmap *phymap;
1462306a36Sopenharmony_ci	struct mutex mutex; /* mutex to protect access to regmap */
1562306a36Sopenharmony_ci	int bank;
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciint devm_regmap_init_encx24j600(struct device *dev,
1962306a36Sopenharmony_ci				struct encx24j600_context *ctx);
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* Single-byte instructions */
2262306a36Sopenharmony_ci#define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1))
2362306a36Sopenharmony_ci#define B0SEL 0xC0		/* Bank 0 Select */
2462306a36Sopenharmony_ci#define B1SEL 0xC2		/* Bank 1 Select */
2562306a36Sopenharmony_ci#define B2SEL 0xC4		/* Bank 2 Select */
2662306a36Sopenharmony_ci#define B3SEL 0xC6		/* Bank 3 Select */
2762306a36Sopenharmony_ci#define SETETHRST 0xCA		/* System Reset */
2862306a36Sopenharmony_ci#define FCDISABLE 0xE0		/* Flow Control Disable */
2962306a36Sopenharmony_ci#define FCSINGLE 0xE2		/* Flow Control Single */
3062306a36Sopenharmony_ci#define FCMULTIPLE 0xE4		/* Flow Control Multiple */
3162306a36Sopenharmony_ci#define FCCLEAR 0xE6		/* Flow Control Clear */
3262306a36Sopenharmony_ci#define SETPKTDEC 0xCC		/* Decrement Packet Counter */
3362306a36Sopenharmony_ci#define DMASTOP 0xD2		/* DMA Stop */
3462306a36Sopenharmony_ci#define DMACKSUM 0xD8		/* DMA Start Checksum */
3562306a36Sopenharmony_ci#define DMACKSUMS 0xDA		/* DMA Start Checksum with Seed */
3662306a36Sopenharmony_ci#define DMACOPY 0xDC		/* DMA Start Copy */
3762306a36Sopenharmony_ci#define DMACOPYS 0xDE		/* DMA Start Copy and Checksum with Seed */
3862306a36Sopenharmony_ci#define SETTXRTS 0xD4		/* Request Packet Transmission */
3962306a36Sopenharmony_ci#define ENABLERX 0xE8		/* Enable RX */
4062306a36Sopenharmony_ci#define DISABLERX 0xEA		/* Disable RX */
4162306a36Sopenharmony_ci#define SETEIE 0xEC		/* Enable Interrupts */
4262306a36Sopenharmony_ci#define CLREIE 0xEE		/* Disable Interrupts */
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/* Two byte instructions */
4562306a36Sopenharmony_ci#define RBSEL 0xC8		/* Read Bank Select */
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/* Three byte instructions */
4862306a36Sopenharmony_ci#define WGPRDPT 0x60		/* Write EGPRDPT */
4962306a36Sopenharmony_ci#define RGPRDPT 0x62		/* Read EGPRDPT */
5062306a36Sopenharmony_ci#define WRXRDPT 0x64		/* Write ERXRDPT */
5162306a36Sopenharmony_ci#define RRXRDPT 0x66		/* Read ERXRDPT */
5262306a36Sopenharmony_ci#define WUDARDPT 0x68		/* Write EUDARDPT */
5362306a36Sopenharmony_ci#define RUDARDPT 0x6A		/* Read EUDARDPT */
5462306a36Sopenharmony_ci#define WGPWRPT 0x6C		/* Write EGPWRPT */
5562306a36Sopenharmony_ci#define RGPWRPT 0x6E		/* Read EGPWRPT */
5662306a36Sopenharmony_ci#define WRXWRPT 0x70		/* Write ERXWRPT */
5762306a36Sopenharmony_ci#define RRXWRPT 0x72		/* Read ERXWRPT */
5862306a36Sopenharmony_ci#define WUDAWRPT 0x74		/* Write EUDAWRPT */
5962306a36Sopenharmony_ci#define RUDAWRPT 0x76		/* Read EUDAWRPT */
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci/* n byte instructions */
6262306a36Sopenharmony_ci#define RCRCODE 0x00
6362306a36Sopenharmony_ci#define WCRCODE 0x40
6462306a36Sopenharmony_ci#define BFSCODE 0x80
6562306a36Sopenharmony_ci#define BFCCODE 0xA0
6662306a36Sopenharmony_ci#define RCR(addr) (RCRCODE | (addr & ADDR_MASK)) /* Read Control Register */
6762306a36Sopenharmony_ci#define WCR(addr) (WCRCODE | (addr & ADDR_MASK)) /* Write Control Register */
6862306a36Sopenharmony_ci#define RCRU 0x20		/* Read Control Register Unbanked */
6962306a36Sopenharmony_ci#define WCRU 0x22		/* Write Control Register Unbanked */
7062306a36Sopenharmony_ci#define BFS(addr) (BFSCODE | (addr & ADDR_MASK)) /* Bit Field Set */
7162306a36Sopenharmony_ci#define BFC(addr) (BFCCODE | (addr & ADDR_MASK)) /* Bit Field Clear */
7262306a36Sopenharmony_ci#define BFSU 0x24		/* Bit Field Set Unbanked */
7362306a36Sopenharmony_ci#define BFCU 0x26		/* Bit Field Clear Unbanked */
7462306a36Sopenharmony_ci#define RGPDATA 0x28		/* Read EGPDATA */
7562306a36Sopenharmony_ci#define WGPDATA 0x2A		/* Write EGPDATA */
7662306a36Sopenharmony_ci#define RRXDATA 0x2C		/* Read ERXDATA */
7762306a36Sopenharmony_ci#define WRXDATA 0x2E		/* Write ERXDATA */
7862306a36Sopenharmony_ci#define RUDADATA 0x30		/* Read EUDADATA */
7962306a36Sopenharmony_ci#define WUDADATA 0x32		/* Write EUDADATA */
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#define SFR_REG_COUNT	0xA0
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci/* ENC424J600 Control Registers
8462306a36Sopenharmony_ci * Control register definitions are a combination of address
8562306a36Sopenharmony_ci * and bank number
8662306a36Sopenharmony_ci * - Register address (bits 0-4)
8762306a36Sopenharmony_ci * - Bank number (bits 5-6)
8862306a36Sopenharmony_ci */
8962306a36Sopenharmony_ci#define ADDR_MASK 0x1F
9062306a36Sopenharmony_ci#define BANK_MASK 0x60
9162306a36Sopenharmony_ci#define BANK_SHIFT 5
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci/* All-bank registers */
9462306a36Sopenharmony_ci#define EUDAST 0x16
9562306a36Sopenharmony_ci#define EUDAND 0x18
9662306a36Sopenharmony_ci#define ESTAT 0x1A
9762306a36Sopenharmony_ci#define EIR 0x1C
9862306a36Sopenharmony_ci#define ECON1 0x1E
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci/* Bank 0 registers */
10162306a36Sopenharmony_ci#define ETXST (0x00 | 0x00)
10262306a36Sopenharmony_ci#define ETXLEN (0x02 | 0x00)
10362306a36Sopenharmony_ci#define ERXST (0x04 | 0x00)
10462306a36Sopenharmony_ci#define ERXTAIL (0x06 | 0x00)
10562306a36Sopenharmony_ci#define ERXHEAD (0x08 | 0x00)
10662306a36Sopenharmony_ci#define EDMAST (0x0A | 0x00)
10762306a36Sopenharmony_ci#define EDMALEN (0x0C | 0x00)
10862306a36Sopenharmony_ci#define EDMADST (0x0E | 0x00)
10962306a36Sopenharmony_ci#define EDMACS (0x10 | 0x00)
11062306a36Sopenharmony_ci#define ETXSTAT (0x12 | 0x00)
11162306a36Sopenharmony_ci#define ETXWIRE (0x14 | 0x00)
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/* Bank 1 registers */
11462306a36Sopenharmony_ci#define EHT1 (0x00 | 0x20)
11562306a36Sopenharmony_ci#define EHT2 (0x02 | 0x20)
11662306a36Sopenharmony_ci#define EHT3 (0x04 | 0x20)
11762306a36Sopenharmony_ci#define EHT4 (0x06 | 0x20)
11862306a36Sopenharmony_ci#define EPMM1 (0x08 | 0x20)
11962306a36Sopenharmony_ci#define EPMM2 (0x0A | 0x20)
12062306a36Sopenharmony_ci#define EPMM3 (0x0C | 0x20)
12162306a36Sopenharmony_ci#define EPMM4 (0x0E | 0x20)
12262306a36Sopenharmony_ci#define EPMCS (0x10 | 0x20)
12362306a36Sopenharmony_ci#define EPMO (0x12 | 0x20)
12462306a36Sopenharmony_ci#define ERXFCON (0x14 | 0x20)
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci/* Bank 2 registers */
12762306a36Sopenharmony_ci#define MACON1 (0x00 | 0x40)
12862306a36Sopenharmony_ci#define MACON2 (0x02 | 0x40)
12962306a36Sopenharmony_ci#define MABBIPG (0x04 | 0x40)
13062306a36Sopenharmony_ci#define MAIPG (0x06 | 0x40)
13162306a36Sopenharmony_ci#define MACLCON (0x08 | 0x40)
13262306a36Sopenharmony_ci#define MAMXFL (0x0A | 0x40)
13362306a36Sopenharmony_ci#define MICMD (0x12 | 0x40)
13462306a36Sopenharmony_ci#define MIREGADR (0x14 | 0x40)
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci/* Bank 3 registers */
13762306a36Sopenharmony_ci#define MAADR3 (0x00 | 0x60)
13862306a36Sopenharmony_ci#define MAADR2 (0x02 | 0x60)
13962306a36Sopenharmony_ci#define MAADR1 (0x04 | 0x60)
14062306a36Sopenharmony_ci#define MIWR (0x06 | 0x60)
14162306a36Sopenharmony_ci#define MIRD (0x08 | 0x60)
14262306a36Sopenharmony_ci#define MISTAT (0x0A | 0x60)
14362306a36Sopenharmony_ci#define EPAUS (0x0C | 0x60)
14462306a36Sopenharmony_ci#define ECON2 (0x0E | 0x60)
14562306a36Sopenharmony_ci#define ERXWM (0x10 | 0x60)
14662306a36Sopenharmony_ci#define EIE (0x12 | 0x60)
14762306a36Sopenharmony_ci#define EIDLED (0x14 | 0x60)
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci/* Unbanked registers */
15062306a36Sopenharmony_ci#define EGPDATA (0x00 | 0x80)
15162306a36Sopenharmony_ci#define ERXDATA (0x02 | 0x80)
15262306a36Sopenharmony_ci#define EUDADATA (0x04 | 0x80)
15362306a36Sopenharmony_ci#define EGPRDPT (0x06 | 0x80)
15462306a36Sopenharmony_ci#define EGPWRPT (0x08 | 0x80)
15562306a36Sopenharmony_ci#define ERXRDPT (0x0A | 0x80)
15662306a36Sopenharmony_ci#define ERXWRPT (0x0C | 0x80)
15762306a36Sopenharmony_ci#define EUDARDPT (0x0E | 0x80)
15862306a36Sopenharmony_ci#define EUDAWRPT (0x10 | 0x80)
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci/* Register bit definitions */
16262306a36Sopenharmony_ci/* ESTAT */
16362306a36Sopenharmony_ci#define INT (1 << 15)
16462306a36Sopenharmony_ci#define FCIDLE (1 << 14)
16562306a36Sopenharmony_ci#define RXBUSY (1 << 13)
16662306a36Sopenharmony_ci#define CLKRDY (1 << 12)
16762306a36Sopenharmony_ci#define PHYDPX (1 << 10)
16862306a36Sopenharmony_ci#define PHYLNK (1 << 8)
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci/* EIR */
17162306a36Sopenharmony_ci#define CRYPTEN (1 << 15)
17262306a36Sopenharmony_ci#define MODEXIF (1 << 14)
17362306a36Sopenharmony_ci#define HASHIF (1 << 13)
17462306a36Sopenharmony_ci#define AESIF (1 << 12)
17562306a36Sopenharmony_ci#define LINKIF (1 << 11)
17662306a36Sopenharmony_ci#define PKTIF (1 << 6)
17762306a36Sopenharmony_ci#define DMAIF (1 << 5)
17862306a36Sopenharmony_ci#define TXIF (1 << 3)
17962306a36Sopenharmony_ci#define TXABTIF (1 << 2)
18062306a36Sopenharmony_ci#define RXABTIF (1 << 1)
18162306a36Sopenharmony_ci#define PCFULIF (1 << 0)
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci/* ECON1 */
18462306a36Sopenharmony_ci#define MODEXST (1 << 15)
18562306a36Sopenharmony_ci#define HASHEN (1 << 14)
18662306a36Sopenharmony_ci#define HASHOP (1 << 13)
18762306a36Sopenharmony_ci#define HASHLST (1 << 12)
18862306a36Sopenharmony_ci#define AESST (1 << 11)
18962306a36Sopenharmony_ci#define AESOP1 (1 << 10)
19062306a36Sopenharmony_ci#define AESOP0 (1 << 9)
19162306a36Sopenharmony_ci#define PKTDEC (1 << 8)
19262306a36Sopenharmony_ci#define FCOP1 (1 << 7)
19362306a36Sopenharmony_ci#define FCOP0 (1 << 6)
19462306a36Sopenharmony_ci#define DMAST (1 << 5)
19562306a36Sopenharmony_ci#define DMACPY (1 << 4)
19662306a36Sopenharmony_ci#define DMACSSD (1 << 3)
19762306a36Sopenharmony_ci#define DMANOCS (1 << 2)
19862306a36Sopenharmony_ci#define TXRTS (1 << 1)
19962306a36Sopenharmony_ci#define RXEN (1 << 0)
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci/* ETXSTAT */
20262306a36Sopenharmony_ci#define LATECOL (1 << 10)
20362306a36Sopenharmony_ci#define MAXCOL (1 << 9)
20462306a36Sopenharmony_ci#define EXDEFER (1 << 8)
20562306a36Sopenharmony_ci#define ETXSTATL_DEFER (1 << 7)
20662306a36Sopenharmony_ci#define CRCBAD (1 << 4)
20762306a36Sopenharmony_ci#define COLCNT_MASK 0xF
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci/* ERXFCON */
21062306a36Sopenharmony_ci#define HTEN (1 << 15)
21162306a36Sopenharmony_ci#define MPEN (1 << 14)
21262306a36Sopenharmony_ci#define NOTPM (1 << 12)
21362306a36Sopenharmony_ci#define PMEN3 (1 << 11)
21462306a36Sopenharmony_ci#define PMEN2 (1 << 10)
21562306a36Sopenharmony_ci#define PMEN1 (1 << 9)
21662306a36Sopenharmony_ci#define PMEN0 (1 << 8)
21762306a36Sopenharmony_ci#define CRCEEN (1 << 7)
21862306a36Sopenharmony_ci#define CRCEN (1 << 6)
21962306a36Sopenharmony_ci#define RUNTEEN (1 << 5)
22062306a36Sopenharmony_ci#define RUNTEN (1 << 4)
22162306a36Sopenharmony_ci#define UCEN (1 << 3)
22262306a36Sopenharmony_ci#define NOTMEEN (1 << 2)
22362306a36Sopenharmony_ci#define MCEN (1 << 1)
22462306a36Sopenharmony_ci#define BCEN (1 << 0)
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci/* MACON1 */
22762306a36Sopenharmony_ci#define LOOPBK (1 << 4)
22862306a36Sopenharmony_ci#define RXPAUS (1 << 2)
22962306a36Sopenharmony_ci#define PASSALL (1 << 1)
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci/* MACON2 */
23262306a36Sopenharmony_ci#define MACON2_DEFER (1 << 14)
23362306a36Sopenharmony_ci#define BPEN (1 << 13)
23462306a36Sopenharmony_ci#define NOBKOFF (1 << 12)
23562306a36Sopenharmony_ci#define PADCFG2 (1 << 7)
23662306a36Sopenharmony_ci#define PADCFG1 (1 << 6)
23762306a36Sopenharmony_ci#define PADCFG0 (1 << 5)
23862306a36Sopenharmony_ci#define TXCRCEN (1 << 4)
23962306a36Sopenharmony_ci#define PHDREN (1 << 3)
24062306a36Sopenharmony_ci#define HFRMEN (1 << 2)
24162306a36Sopenharmony_ci#define MACON2_RSV1 (1 << 1)
24262306a36Sopenharmony_ci#define FULDPX (1 << 0)
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci/* MAIPG */
24562306a36Sopenharmony_ci/* value of the high byte is given by the reserved bits,
24662306a36Sopenharmony_ci * value of the low byte is recomended setting of the
24762306a36Sopenharmony_ci * IPG parameter.
24862306a36Sopenharmony_ci */
24962306a36Sopenharmony_ci#define MAIPGH_VAL 0x0C
25062306a36Sopenharmony_ci#define MAIPGL_VAL 0x12
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci/* MIREGADRH */
25362306a36Sopenharmony_ci#define MIREGADR_VAL (1 << 8)
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ci/* MIREGADRL */
25662306a36Sopenharmony_ci#define PHREG_MASK 0x1F
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci/* MICMD */
25962306a36Sopenharmony_ci#define MIISCAN (1 << 1)
26062306a36Sopenharmony_ci#define MIIRD (1 << 0)
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci/* MISTAT */
26362306a36Sopenharmony_ci#define NVALID (1 << 2)
26462306a36Sopenharmony_ci#define SCAN (1 << 1)
26562306a36Sopenharmony_ci#define BUSY (1 << 0)
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci/* ECON2 */
26862306a36Sopenharmony_ci#define ETHEN (1 << 15)
26962306a36Sopenharmony_ci#define STRCH (1 << 14)
27062306a36Sopenharmony_ci#define TXMAC (1 << 13)
27162306a36Sopenharmony_ci#define SHA1MD5 (1 << 12)
27262306a36Sopenharmony_ci#define COCON3 (1 << 11)
27362306a36Sopenharmony_ci#define COCON2 (1 << 10)
27462306a36Sopenharmony_ci#define COCON1 (1 << 9)
27562306a36Sopenharmony_ci#define COCON0 (1 << 8)
27662306a36Sopenharmony_ci#define AUTOFC (1 << 7)
27762306a36Sopenharmony_ci#define TXRST (1 << 6)
27862306a36Sopenharmony_ci#define RXRST (1 << 5)
27962306a36Sopenharmony_ci#define ETHRST (1 << 4)
28062306a36Sopenharmony_ci#define MODLEN1 (1 << 3)
28162306a36Sopenharmony_ci#define MODLEN0 (1 << 2)
28262306a36Sopenharmony_ci#define AESLEN1 (1 << 1)
28362306a36Sopenharmony_ci#define AESLEN0 (1 << 0)
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci/* EIE */
28662306a36Sopenharmony_ci#define INTIE (1 << 15)
28762306a36Sopenharmony_ci#define MODEXIE (1 << 14)
28862306a36Sopenharmony_ci#define HASHIE (1 << 13)
28962306a36Sopenharmony_ci#define AESIE (1 << 12)
29062306a36Sopenharmony_ci#define LINKIE (1 << 11)
29162306a36Sopenharmony_ci#define PKTIE (1 << 6)
29262306a36Sopenharmony_ci#define DMAIE (1 << 5)
29362306a36Sopenharmony_ci#define TXIE (1 << 3)
29462306a36Sopenharmony_ci#define TXABTIE (1 << 2)
29562306a36Sopenharmony_ci#define RXABTIE (1 << 1)
29662306a36Sopenharmony_ci#define PCFULIE (1 << 0)
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci/* EIDLED */
29962306a36Sopenharmony_ci#define LACFG3 (1 << 15)
30062306a36Sopenharmony_ci#define LACFG2 (1 << 14)
30162306a36Sopenharmony_ci#define LACFG1 (1 << 13)
30262306a36Sopenharmony_ci#define LACFG0 (1 << 12)
30362306a36Sopenharmony_ci#define LBCFG3 (1 << 11)
30462306a36Sopenharmony_ci#define LBCFG2 (1 << 10)
30562306a36Sopenharmony_ci#define LBCFG1 (1 << 9)
30662306a36Sopenharmony_ci#define LBCFG0 (1 << 8)
30762306a36Sopenharmony_ci#define DEVID_SHIFT 5
30862306a36Sopenharmony_ci#define DEVID_MASK (0x7 << DEVID_SHIFT)
30962306a36Sopenharmony_ci#define REVID_SHIFT 0
31062306a36Sopenharmony_ci#define REVID_MASK (0x1F << REVID_SHIFT)
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci/* PHY registers */
31362306a36Sopenharmony_ci#define PHCON1 0x00
31462306a36Sopenharmony_ci#define PHSTAT1 0x01
31562306a36Sopenharmony_ci#define PHANA 0x04
31662306a36Sopenharmony_ci#define PHANLPA 0x05
31762306a36Sopenharmony_ci#define PHANE 0x06
31862306a36Sopenharmony_ci#define PHCON2 0x11
31962306a36Sopenharmony_ci#define PHSTAT2 0x1B
32062306a36Sopenharmony_ci#define PHSTAT3 0x1F
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci/* PHCON1 */
32362306a36Sopenharmony_ci#define PRST (1 << 15)
32462306a36Sopenharmony_ci#define PLOOPBK (1 << 14)
32562306a36Sopenharmony_ci#define SPD100 (1 << 13)
32662306a36Sopenharmony_ci#define ANEN (1 << 12)
32762306a36Sopenharmony_ci#define PSLEEP (1 << 11)
32862306a36Sopenharmony_ci#define RENEG (1 << 9)
32962306a36Sopenharmony_ci#define PFULDPX (1 << 8)
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci/* PHSTAT1 */
33262306a36Sopenharmony_ci#define FULL100 (1 << 14)
33362306a36Sopenharmony_ci#define HALF100 (1 << 13)
33462306a36Sopenharmony_ci#define FULL10 (1 << 12)
33562306a36Sopenharmony_ci#define HALF10 (1 << 11)
33662306a36Sopenharmony_ci#define ANDONE (1 << 5)
33762306a36Sopenharmony_ci#define LRFAULT (1 << 4)
33862306a36Sopenharmony_ci#define ANABLE (1 << 3)
33962306a36Sopenharmony_ci#define LLSTAT (1 << 2)
34062306a36Sopenharmony_ci#define EXTREGS (1 << 0)
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_ci/* PHSTAT2 */
34362306a36Sopenharmony_ci#define PLRITY (1 << 4)
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci/* PHSTAT3 */
34662306a36Sopenharmony_ci#define PHY3SPD100 (1 << 3)
34762306a36Sopenharmony_ci#define PHY3DPX (1 << 4)
34862306a36Sopenharmony_ci#define SPDDPX_SHIFT 2
34962306a36Sopenharmony_ci#define SPDDPX_MASK (0x7 << SPDDPX_SHIFT)
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci/* PHANA */
35262306a36Sopenharmony_ci/* Default value for PHY initialization*/
35362306a36Sopenharmony_ci#define PHANA_DEFAULT 0x05E1
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci/* PHANE */
35662306a36Sopenharmony_ci#define PDFLT (1 << 4)
35762306a36Sopenharmony_ci#define LPARCD (1 << 1)
35862306a36Sopenharmony_ci#define LPANABL (1 << 0)
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci#define EUDAST_TEST_VAL 0x1234
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_ci#define TSV_SIZE 7
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ci#define ENCX24J600_DEV_ID 0x1
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci/* Configuration */
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ci/* Led is on when the link is present and driven low
36962306a36Sopenharmony_ci * temporarily when packet is TX'd or RX'd
37062306a36Sopenharmony_ci */
37162306a36Sopenharmony_ci#define LED_A_SETTINGS 0xC
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ci/* Led is on if the link is in 100 Mbps mode */
37462306a36Sopenharmony_ci#define LED_B_SETTINGS 0x8
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ci/* maximum ethernet frame length
37762306a36Sopenharmony_ci * Currently not used as a limit anywhere
37862306a36Sopenharmony_ci * (we're using the "huge frame enable" feature of
37962306a36Sopenharmony_ci * enc424j600).
38062306a36Sopenharmony_ci */
38162306a36Sopenharmony_ci#define MAX_FRAMELEN 1518
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci/* Size in bytes of the receive buffer in enc424j600.
38462306a36Sopenharmony_ci * Must be word aligned (even).
38562306a36Sopenharmony_ci */
38662306a36Sopenharmony_ci#define RX_BUFFER_SIZE (15 * MAX_FRAMELEN)
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci/* Start of the general purpose area in sram */
38962306a36Sopenharmony_ci#define SRAM_GP_START 0x0
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci/* SRAM size */
39262306a36Sopenharmony_ci#define SRAM_SIZE 0x6000
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci/* Start of the receive buffer */
39562306a36Sopenharmony_ci#define ERXST_VAL (SRAM_SIZE - RX_BUFFER_SIZE)
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci#define RSV_RXLONGEVDROPEV	16
39862306a36Sopenharmony_ci#define RSV_CARRIEREV		18
39962306a36Sopenharmony_ci#define RSV_CRCERROR		20
40062306a36Sopenharmony_ci#define RSV_LENCHECKERR		21
40162306a36Sopenharmony_ci#define RSV_LENOUTOFRANGE	22
40262306a36Sopenharmony_ci#define RSV_RXOK		23
40362306a36Sopenharmony_ci#define RSV_RXMULTICAST		24
40462306a36Sopenharmony_ci#define RSV_RXBROADCAST		25
40562306a36Sopenharmony_ci#define RSV_DRIBBLENIBBLE	26
40662306a36Sopenharmony_ci#define RSV_RXCONTROLFRAME	27
40762306a36Sopenharmony_ci#define RSV_RXPAUSEFRAME	28
40862306a36Sopenharmony_ci#define RSV_RXUNKNOWNOPCODE	29
40962306a36Sopenharmony_ci#define RSV_RXTYPEVLAN		30
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci#define RSV_RUNTFILTERMATCH	31
41262306a36Sopenharmony_ci#define RSV_NOTMEFILTERMATCH	32
41362306a36Sopenharmony_ci#define RSV_HASHFILTERMATCH	33
41462306a36Sopenharmony_ci#define RSV_MAGICPKTFILTERMATCH	34
41562306a36Sopenharmony_ci#define RSV_PTRNMTCHFILTERMATCH	35
41662306a36Sopenharmony_ci#define RSV_UNICASTFILTERMATCH	36
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_ci#define RSV_SIZE		8
41962306a36Sopenharmony_ci#define RSV_BITMASK(x)		(1 << ((x) - 16))
42062306a36Sopenharmony_ci#define RSV_GETBIT(x, y)	(((x) & RSV_BITMASK(y)) ? 1 : 0)
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_cistruct rsv {
42362306a36Sopenharmony_ci	u16 next_packet;
42462306a36Sopenharmony_ci	u16 len;
42562306a36Sopenharmony_ci	u32 rxstat;
42662306a36Sopenharmony_ci};
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci/* Put RX buffer at 0 as suggested by the Errata datasheet */
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_ci#define RXSTART_INIT		ERXST_VAL
43162306a36Sopenharmony_ci#define RXEND_INIT		0x5FFF
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ciint regmap_encx24j600_spi_write(void *context, u8 reg, const u8 *data,
43462306a36Sopenharmony_ci				size_t count);
43562306a36Sopenharmony_ciint regmap_encx24j600_spi_read(void *context, u8 reg, u8 *data, size_t count);
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_ci#endif
439