r8152.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved.
  4. *
  5. */
  6. #ifndef _RTL8152_ETH_H
  7. #define _RTL8152_ETH_H
  8. #define R8152_BASE_NAME "r8152"
  9. #define PLA_IDR 0xc000
  10. #define PLA_RCR 0xc010
  11. #define PLA_RMS 0xc016
  12. #define PLA_RXFIFO_CTRL0 0xc0a0
  13. #define PLA_RXFIFO_CTRL1 0xc0a4
  14. #define PLA_RXFIFO_CTRL2 0xc0a8
  15. #define PLA_DMY_REG0 0xc0b0
  16. #define PLA_FMC 0xc0b4
  17. #define PLA_CFG_WOL 0xc0b6
  18. #define PLA_TEREDO_CFG 0xc0bc
  19. #define PLA_MAR 0xcd00
  20. #define PLA_BACKUP 0xd000
  21. #define PAL_BDC_CR 0xd1a0
  22. #define PLA_TEREDO_TIMER 0xd2cc
  23. #define PLA_REALWOW_TIMER 0xd2e8
  24. #define PLA_LEDSEL 0xdd90
  25. #define PLA_LED_FEATURE 0xdd92
  26. #define PLA_PHYAR 0xde00
  27. #define PLA_BOOT_CTRL 0xe004
  28. #define PLA_GPHY_INTR_IMR 0xe022
  29. #define PLA_EEE_CR 0xe040
  30. #define PLA_EEEP_CR 0xe080
  31. #define PLA_MAC_PWR_CTRL 0xe0c0
  32. #define PLA_MAC_PWR_CTRL2 0xe0ca
  33. #define PLA_MAC_PWR_CTRL3 0xe0cc
  34. #define PLA_MAC_PWR_CTRL4 0xe0ce
  35. #define PLA_WDT6_CTRL 0xe428
  36. #define PLA_TCR0 0xe610
  37. #define PLA_TCR1 0xe612
  38. #define PLA_MTPS 0xe615
  39. #define PLA_TXFIFO_CTRL 0xe618
  40. #define PLA_RSTTALLY 0xe800
  41. #define BIST_CTRL 0xe810
  42. #define PLA_CR 0xe813
  43. #define PLA_CRWECR 0xe81c
  44. #define PLA_CONFIG12 0xe81e /* CONFIG1, CONFIG2 */
  45. #define PLA_CONFIG34 0xe820 /* CONFIG3, CONFIG4 */
  46. #define PLA_CONFIG5 0xe822
  47. #define PLA_PHY_PWR 0xe84c
  48. #define PLA_OOB_CTRL 0xe84f
  49. #define PLA_CPCR 0xe854
  50. #define PLA_MISC_0 0xe858
  51. #define PLA_MISC_1 0xe85a
  52. #define PLA_OCP_GPHY_BASE 0xe86c
  53. #define PLA_TALLYCNT 0xe890
  54. #define PLA_SFF_STS_7 0xe8de
  55. #define PLA_PHYSTATUS 0xe908
  56. #define PLA_BP_BA 0xfc26
  57. #define PLA_BP_0 0xfc28
  58. #define PLA_BP_1 0xfc2a
  59. #define PLA_BP_2 0xfc2c
  60. #define PLA_BP_3 0xfc2e
  61. #define PLA_BP_4 0xfc30
  62. #define PLA_BP_5 0xfc32
  63. #define PLA_BP_6 0xfc34
  64. #define PLA_BP_7 0xfc36
  65. #define PLA_BP_EN 0xfc38
  66. #define USB_USB2PHY 0xb41e
  67. #define USB_SSPHYLINK2 0xb428
  68. #define USB_U2P3_CTRL 0xb460
  69. #define USB_CSR_DUMMY1 0xb464
  70. #define USB_CSR_DUMMY2 0xb466
  71. #define USB_DEV_STAT 0xb808
  72. #define USB_CONNECT_TIMER 0xcbf8
  73. #define USB_BURST_SIZE 0xcfc0
  74. #define USB_USB_CTRL 0xd406
  75. #define USB_PHY_CTRL 0xd408
  76. #define USB_TX_AGG 0xd40a
  77. #define USB_RX_BUF_TH 0xd40c
  78. #define USB_USB_TIMER 0xd428
  79. #define USB_RX_EARLY_TIMEOUT 0xd42c
  80. #define USB_RX_EARLY_SIZE 0xd42e
  81. #define USB_PM_CTRL_STATUS 0xd432
  82. #define USB_TX_DMA 0xd434
  83. #define USB_TOLERANCE 0xd490
  84. #define USB_LPM_CTRL 0xd41a
  85. #define USB_UPS_CTRL 0xd800
  86. #define USB_MISC_0 0xd81a
  87. #define USB_POWER_CUT 0xd80a
  88. #define USB_AFE_CTRL2 0xd824
  89. #define USB_WDT11_CTRL 0xe43c
  90. #define USB_BP_BA 0xfc26
  91. #define USB_BP_0 0xfc28
  92. #define USB_BP_1 0xfc2a
  93. #define USB_BP_2 0xfc2c
  94. #define USB_BP_3 0xfc2e
  95. #define USB_BP_4 0xfc30
  96. #define USB_BP_5 0xfc32
  97. #define USB_BP_6 0xfc34
  98. #define USB_BP_7 0xfc36
  99. #define USB_BP_EN 0xfc38
  100. /* OCP Registers */
  101. #define OCP_ALDPS_CONFIG 0x2010
  102. #define OCP_EEE_CONFIG1 0x2080
  103. #define OCP_EEE_CONFIG2 0x2092
  104. #define OCP_EEE_CONFIG3 0x2094
  105. #define OCP_BASE_MII 0xa400
  106. #define OCP_EEE_AR 0xa41a
  107. #define OCP_EEE_DATA 0xa41c
  108. #define OCP_PHY_STATUS 0xa420
  109. #define OCP_POWER_CFG 0xa430
  110. #define OCP_EEE_CFG 0xa432
  111. #define OCP_SRAM_ADDR 0xa436
  112. #define OCP_SRAM_DATA 0xa438
  113. #define OCP_DOWN_SPEED 0xa442
  114. #define OCP_EEE_ABLE 0xa5c4
  115. #define OCP_EEE_ADV 0xa5d0
  116. #define OCP_EEE_LPABLE 0xa5d2
  117. #define OCP_PHY_STATE 0xa708 /* nway state for 8153 */
  118. #define OCP_ADC_CFG 0xbc06
  119. /* SRAM Register */
  120. #define SRAM_LPF_CFG 0x8012
  121. #define SRAM_10M_AMP1 0x8080
  122. #define SRAM_10M_AMP2 0x8082
  123. #define SRAM_IMPEDANCE 0x8084
  124. /* PLA_RCR */
  125. #define RCR_AAP 0x00000001
  126. #define RCR_APM 0x00000002
  127. #define RCR_AM 0x00000004
  128. #define RCR_AB 0x00000008
  129. #define RCR_ACPT_ALL (RCR_AAP | RCR_APM | RCR_AM | RCR_AB)
  130. /* PLA_RXFIFO_CTRL0 */
  131. #define RXFIFO_THR1_NORMAL 0x00080002
  132. #define RXFIFO_THR1_OOB 0x01800003
  133. /* PLA_RXFIFO_CTRL1 */
  134. #define RXFIFO_THR2_FULL 0x00000060
  135. #define RXFIFO_THR2_HIGH 0x00000038
  136. #define RXFIFO_THR2_OOB 0x0000004a
  137. #define RXFIFO_THR2_NORMAL 0x00a0
  138. /* PLA_RXFIFO_CTRL2 */
  139. #define RXFIFO_THR3_FULL 0x00000078
  140. #define RXFIFO_THR3_HIGH 0x00000048
  141. #define RXFIFO_THR3_OOB 0x0000005a
  142. #define RXFIFO_THR3_NORMAL 0x0110
  143. /* PLA_TXFIFO_CTRL */
  144. #define TXFIFO_THR_NORMAL 0x00400008
  145. #define TXFIFO_THR_NORMAL2 0x01000008
  146. /* PLA_DMY_REG0 */
  147. #define ECM_ALDPS 0x0002
  148. /* PLA_FMC */
  149. #define FMC_FCR_MCU_EN 0x0001
  150. /* PLA_EEEP_CR */
  151. #define EEEP_CR_EEEP_TX 0x0002
  152. /* PLA_WDT6_CTRL */
  153. #define WDT6_SET_MODE 0x0010
  154. /* PLA_TCR0 */
  155. #define TCR0_TX_EMPTY 0x0800
  156. #define TCR0_AUTO_FIFO 0x0080
  157. /* PLA_TCR1 */
  158. #define VERSION_MASK 0x7cf0
  159. /* PLA_MTPS */
  160. #define MTPS_JUMBO (12 * 1024 / 64)
  161. #define MTPS_DEFAULT (6 * 1024 / 64)
  162. /* PLA_RSTTALLY */
  163. #define TALLY_RESET 0x0001
  164. /* PLA_CR */
  165. #define PLA_CR_RST 0x10
  166. #define PLA_CR_RE 0x08
  167. #define PLA_CR_TE 0x04
  168. /* PLA_BIST_CTRL */
  169. #define BIST_CTRL_SW_RESET (0x10 << 24)
  170. /* PLA_CRWECR */
  171. #define CRWECR_NORAML 0x00
  172. #define CRWECR_CONFIG 0xc0
  173. /* PLA_OOB_CTRL */
  174. #define NOW_IS_OOB 0x80
  175. #define TXFIFO_EMPTY 0x20
  176. #define RXFIFO_EMPTY 0x10
  177. #define LINK_LIST_READY 0x02
  178. #define DIS_MCU_CLROOB 0x01
  179. #define FIFO_EMPTY (TXFIFO_EMPTY | RXFIFO_EMPTY)
  180. /* PLA_PHY_PWR */
  181. #define PLA_PHY_PWR_LLR (LINK_LIST_READY << 24)
  182. #define PLA_PHY_PWR_TXEMP (TXFIFO_EMPTY << 24)
  183. /* PLA_MISC_1 */
  184. #define RXDY_GATED_EN 0x0008
  185. /* PLA_SFF_STS_7 */
  186. #define RE_INIT_LL 0x8000
  187. #define MCU_BORW_EN 0x4000
  188. /* PLA_CPCR */
  189. #define CPCR_RX_VLAN 0x0040
  190. /* PLA_CFG_WOL */
  191. #define MAGIC_EN 0x0001
  192. /* PLA_TEREDO_CFG */
  193. #define TEREDO_SEL 0x8000
  194. #define TEREDO_WAKE_MASK 0x7f00
  195. #define TEREDO_RS_EVENT_MASK 0x00fe
  196. #define OOB_TEREDO_EN 0x0001
  197. /* PAL_BDC_CR */
  198. #define ALDPS_PROXY_MODE 0x0001
  199. /* PLA_CONFIG34 */
  200. #define LINK_ON_WAKE_EN 0x0010
  201. #define LINK_OFF_WAKE_EN 0x0008
  202. /* PLA_CONFIG5 */
  203. #define BWF_EN 0x0040
  204. #define MWF_EN 0x0020
  205. #define UWF_EN 0x0010
  206. #define LAN_WAKE_EN 0x0002
  207. /* PLA_LED_FEATURE */
  208. #define LED_MODE_MASK 0x0700
  209. /* PLA_PHY_PWR */
  210. #define TX_10M_IDLE_EN 0x0080
  211. #define PFM_PWM_SWITCH 0x0040
  212. /* PLA_MAC_PWR_CTRL */
  213. #define D3_CLK_GATED_EN 0x00004000
  214. #define MCU_CLK_RATIO 0x07010f07
  215. #define MCU_CLK_RATIO_MASK 0x0f0f0f0f
  216. #define ALDPS_SPDWN_RATIO 0x0f87
  217. /* PLA_MAC_PWR_CTRL2 */
  218. #define EEE_SPDWN_RATIO 0x8007
  219. /* PLA_MAC_PWR_CTRL3 */
  220. #define PKT_AVAIL_SPDWN_EN 0x0100
  221. #define SUSPEND_SPDWN_EN 0x0004
  222. #define U1U2_SPDWN_EN 0x0002
  223. #define L1_SPDWN_EN 0x0001
  224. /* PLA_MAC_PWR_CTRL4 */
  225. #define PWRSAVE_SPDWN_EN 0x1000
  226. #define RXDV_SPDWN_EN 0x0800
  227. #define TX10MIDLE_EN 0x0100
  228. #define TP100_SPDWN_EN 0x0020
  229. #define TP500_SPDWN_EN 0x0010
  230. #define TP1000_SPDWN_EN 0x0008
  231. #define EEE_SPDWN_EN 0x0001
  232. /* PLA_GPHY_INTR_IMR */
  233. #define GPHY_STS_MSK 0x0001
  234. #define SPEED_DOWN_MSK 0x0002
  235. #define SPDWN_RXDV_MSK 0x0004
  236. #define SPDWN_LINKCHG_MSK 0x0008
  237. /* PLA_PHYAR */
  238. #define PHYAR_FLAG 0x80000000
  239. /* PLA_EEE_CR */
  240. #define EEE_RX_EN 0x0001
  241. #define EEE_TX_EN 0x0002
  242. /* PLA_BOOT_CTRL */
  243. #define AUTOLOAD_DONE 0x0002
  244. /* USB_USB2PHY */
  245. #define USB2PHY_SUSPEND 0x0001
  246. #define USB2PHY_L1 0x0002
  247. /* USB_SSPHYLINK2 */
  248. #define pwd_dn_scale_mask 0x3ffe
  249. #define pwd_dn_scale(x) ((x) << 1)
  250. /* USB_CSR_DUMMY1 */
  251. #define DYNAMIC_BURST 0x0001
  252. /* USB_CSR_DUMMY2 */
  253. #define EP4_FULL_FC 0x0001
  254. /* USB_DEV_STAT */
  255. #define STAT_SPEED_MASK 0x0006
  256. #define STAT_SPEED_HIGH 0x0000
  257. #define STAT_SPEED_FULL 0x0002
  258. /* USB_TX_AGG */
  259. #define TX_AGG_MAX_THRESHOLD 0x03
  260. /* USB_RX_BUF_TH */
  261. #define RX_THR_SUPPER 0x0c350180
  262. #define RX_THR_HIGH 0x7a120180
  263. #define RX_THR_SLOW 0xffff0180
  264. /* USB_TX_DMA */
  265. #define TEST_MODE_DISABLE 0x00000001
  266. #define TX_SIZE_ADJUST1 0x00000100
  267. /* USB_UPS_CTRL */
  268. #define POWER_CUT 0x0100
  269. /* USB_PM_CTRL_STATUS */
  270. #define RESUME_INDICATE 0x0001
  271. /* USB_USB_CTRL */
  272. #define RX_AGG_DISABLE 0x0010
  273. #define RX_ZERO_EN 0x0080
  274. /* USB_U2P3_CTRL */
  275. #define U2P3_ENABLE 0x0001
  276. /* USB_POWER_CUT */
  277. #define PWR_EN 0x0001
  278. #define PHASE2_EN 0x0008
  279. /* USB_MISC_0 */
  280. #define PCUT_STATUS 0x0001
  281. /* USB_RX_EARLY_TIMEOUT */
  282. #define COALESCE_SUPER 85000U
  283. #define COALESCE_HIGH 250000U
  284. #define COALESCE_SLOW 524280U
  285. /* USB_WDT11_CTRL */
  286. #define TIMER11_EN 0x0001
  287. /* USB_LPM_CTRL */
  288. /* bit 4 ~ 5: fifo empty boundary */
  289. #define FIFO_EMPTY_1FB 0x30 /* 0x1fb * 64 = 32448 bytes */
  290. /* bit 2 ~ 3: LMP timer */
  291. #define LPM_TIMER_MASK 0x0c
  292. #define LPM_TIMER_500MS 0x04 /* 500 ms */
  293. #define LPM_TIMER_500US 0x0c /* 500 us */
  294. #define ROK_EXIT_LPM 0x02
  295. /* USB_AFE_CTRL2 */
  296. #define SEN_VAL_MASK 0xf800
  297. #define SEN_VAL_NORMAL 0xa000
  298. #define SEL_RXIDLE 0x0100
  299. /* OCP_ALDPS_CONFIG */
  300. #define ENPWRSAVE 0x8000
  301. #define ENPDNPS 0x0200
  302. #define LINKENA 0x0100
  303. #define DIS_SDSAVE 0x0010
  304. /* OCP_PHY_STATUS */
  305. #define PHY_STAT_MASK 0x0007
  306. #define PHY_STAT_LAN_ON 3
  307. #define PHY_STAT_PWRDN 5
  308. /* OCP_POWER_CFG */
  309. #define EEE_CLKDIV_EN 0x8000
  310. #define EN_ALDPS 0x0004
  311. #define EN_10M_PLLOFF 0x0001
  312. /* OCP_EEE_CONFIG1 */
  313. #define RG_TXLPI_MSK_HFDUP 0x8000
  314. #define RG_MATCLR_EN 0x4000
  315. #define EEE_10_CAP 0x2000
  316. #define EEE_NWAY_EN 0x1000
  317. #define TX_QUIET_EN 0x0200
  318. #define RX_QUIET_EN 0x0100
  319. #define sd_rise_time_mask 0x0070
  320. #define sd_rise_time(x) (min((x), 7) << 4) /* bit 4 ~ 6 */
  321. #define RG_RXLPI_MSK_HFDUP 0x0008
  322. #define SDFALLTIME 0x0007 /* bit 0 ~ 2 */
  323. /* OCP_EEE_CONFIG2 */
  324. #define RG_LPIHYS_NUM 0x7000 /* bit 12 ~ 15 */
  325. #define RG_DACQUIET_EN 0x0400
  326. #define RG_LDVQUIET_EN 0x0200
  327. #define RG_CKRSEL 0x0020
  328. #define RG_EEEPRG_EN 0x0010
  329. /* OCP_EEE_CONFIG3 */
  330. #define fast_snr_mask 0xff80
  331. #define fast_snr(x) (min((x), 0x1ff) << 7) /* bit 7 ~ 15 */
  332. #define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */
  333. #define MSK_PH 0x0006 /* bit 0 ~ 3 */
  334. /* OCP_EEE_AR */
  335. /* bit[15:14] function */
  336. #define FUN_ADDR 0x0000
  337. #define FUN_DATA 0x4000
  338. /* bit[4:0] device addr */
  339. /* OCP_EEE_CFG */
  340. #define CTAP_SHORT_EN 0x0040
  341. #define EEE10_EN 0x0010
  342. /* OCP_DOWN_SPEED */
  343. #define EN_10M_BGOFF 0x0080
  344. /* OCP_PHY_STATE */
  345. #define TXDIS_STATE 0x01
  346. #define ABD_STATE 0x02
  347. /* OCP_ADC_CFG */
  348. #define CKADSEL_L 0x0100
  349. #define ADC_EN 0x0080
  350. #define EN_EMI_L 0x0040
  351. /* SRAM_LPF_CFG */
  352. #define LPF_AUTO_TUNE 0x8000
  353. /* SRAM_10M_AMP1 */
  354. #define GDAC_IB_UPALL 0x0008
  355. /* SRAM_10M_AMP2 */
  356. #define AMP_DN 0x0200
  357. /* SRAM_IMPEDANCE */
  358. #define RX_DRIVING_MASK 0x6000
  359. #define RTL8152_MAX_TX 4
  360. #define RTL8152_MAX_RX 10
  361. #define INTBUFSIZE 2
  362. #define CRC_SIZE 4
  363. #define TX_ALIGN 4
  364. #define RX_ALIGN 8
  365. #define INTR_LINK 0x0004
  366. #define RTL8152_REQT_READ 0xc0
  367. #define RTL8152_REQT_WRITE 0x40
  368. #define RTL8152_REQ_GET_REGS 0x05
  369. #define RTL8152_REQ_SET_REGS 0x05
  370. #define BYTE_EN_DWORD 0xff
  371. #define BYTE_EN_WORD 0x33
  372. #define BYTE_EN_BYTE 0x11
  373. #define BYTE_EN_SIX_BYTES 0x3f
  374. #define BYTE_EN_START_MASK 0x0f
  375. #define BYTE_EN_END_MASK 0xf0
  376. #define RTL8152_ETH_FRAME_LEN 1514
  377. #define RTL8152_AGG_BUF_SZ 2048
  378. #define RTL8152_RMS (RTL8152_ETH_FRAME_LEN + CRC_SIZE)
  379. #define RTL8153_RMS (RTL8152_ETH_FRAME_LEN + CRC_SIZE)
  380. #define RTL8152_TX_TIMEOUT (5 * HZ)
  381. #define MCU_TYPE_PLA 0x0100
  382. #define MCU_TYPE_USB 0x0000
  383. /* The forced speed, 10Mb, 100Mb, gigabit. */
  384. #define SPEED_10 10
  385. #define SPEED_100 100
  386. #define SPEED_1000 1000
  387. #define SPEED_UNKNOWN -1
  388. /* Duplex, half or full. */
  389. #define DUPLEX_HALF 0x00
  390. #define DUPLEX_FULL 0x01
  391. #define DUPLEX_UNKNOWN 0xff
  392. /* Enable or disable autonegotiation. */
  393. #define AUTONEG_DISABLE 0x00
  394. #define AUTONEG_ENABLE 0x01
  395. /* Generic MII registers. */
  396. #define MII_BMCR 0x00 /* Basic mode control register */
  397. #define MII_BMSR 0x01 /* Basic mode status register */
  398. #define MII_PHYSID1 0x02 /* PHYS ID 1 */
  399. #define MII_PHYSID2 0x03 /* PHYS ID 2 */
  400. #define MII_ADVERTISE 0x04 /* Advertisement control reg */
  401. #define MII_LPA 0x05 /* Link partner ability reg */
  402. #define MII_EXPANSION 0x06 /* Expansion register */
  403. #define MII_CTRL1000 0x09 /* 1000BASE-T control */
  404. #define MII_STAT1000 0x0a /* 1000BASE-T status */
  405. #define MII_MMD_CTRL 0x0d /* MMD Access Control Register */
  406. #define MII_MMD_DATA 0x0e /* MMD Access Data Register */
  407. #define MII_ESTATUS 0x0f /* Extended Status */
  408. #define MII_DCOUNTER 0x12 /* Disconnect counter */
  409. #define MII_FCSCOUNTER 0x13 /* False carrier counter */
  410. #define MII_NWAYTEST 0x14 /* N-way auto-neg test reg */
  411. #define MII_RERRCOUNTER 0x15 /* Receive error counter */
  412. #define MII_SREVISION 0x16 /* Silicon revision */
  413. #define MII_RESV1 0x17 /* Reserved... */
  414. #define MII_LBRERROR 0x18 /* Lpback, rx, bypass error */
  415. #define MII_PHYADDR 0x19 /* PHY address */
  416. #define MII_RESV2 0x1a /* Reserved... */
  417. #define MII_TPISTATUS 0x1b /* TPI status for 10mbps */
  418. #define MII_NCONFIG 0x1c /* Network interface config */
  419. #define TIMEOUT_RESOLUTION 50
  420. #define PHY_CONNECT_TIMEOUT 5000
  421. #define USB_BULK_SEND_TIMEOUT 5000
  422. #define USB_BULK_RECV_TIMEOUT 5000
  423. #define R8152_WAIT_TIMEOUT 2000
  424. struct rx_desc {
  425. __le32 opts1;
  426. #define RD_CRC BIT(15)
  427. #define RX_LEN_MASK 0x7fff
  428. __le32 opts2;
  429. #define RD_UDP_CS BIT(23)
  430. #define RD_TCP_CS BIT(22)
  431. #define RD_IPV6_CS BIT(20)
  432. #define RD_IPV4_CS BIT(19)
  433. __le32 opts3;
  434. #define IPF BIT(23) /* IP checksum fail */
  435. #define UDPF BIT(22) /* UDP checksum fail */
  436. #define TCPF BIT(21) /* TCP checksum fail */
  437. #define RX_VLAN_TAG BIT(16)
  438. __le32 opts4;
  439. __le32 opts5;
  440. __le32 opts6;
  441. };
  442. struct tx_desc {
  443. __le32 opts1;
  444. #define TX_FS BIT(31) /* First segment of a packet */
  445. #define TX_LS BIT(30) /* Final segment of a packet */
  446. #define LGSEND BIT(29)
  447. #define GTSENDV4 BIT(28)
  448. #define GTSENDV6 BIT(27)
  449. #define GTTCPHO_SHIFT 18
  450. #define GTTCPHO_MAX 0x7fU
  451. #define TX_LEN_MAX 0x3ffffU
  452. __le32 opts2;
  453. #define UDP_CS BIT(31) /* Calculate UDP/IP checksum */
  454. #define TCP_CS BIT(30) /* Calculate TCP/IP checksum */
  455. #define IPV4_CS BIT(29) /* Calculate IPv4 checksum */
  456. #define IPV6_CS BIT(28) /* Calculate IPv6 checksum */
  457. #define MSS_SHIFT 17
  458. #define MSS_MAX 0x7ffU
  459. #define TCPHO_SHIFT 17
  460. #define TCPHO_MAX 0x7ffU
  461. #define TX_VLAN_TAG BIT(16)
  462. };
  463. enum rtl_version {
  464. RTL_VER_UNKNOWN = 0,
  465. RTL_VER_01,
  466. RTL_VER_02,
  467. RTL_VER_03,
  468. RTL_VER_04,
  469. RTL_VER_05,
  470. RTL_VER_06,
  471. RTL_VER_07,
  472. RTL_VER_MAX
  473. };
  474. enum rtl_register_content {
  475. _1000bps = 0x10,
  476. _100bps = 0x08,
  477. _10bps = 0x04,
  478. LINK_STATUS = 0x02,
  479. FULL_DUP = 0x01,
  480. };
  481. struct r8152 {
  482. struct usb_device *udev;
  483. struct usb_interface *intf;
  484. bool supports_gmii;
  485. struct rtl_ops {
  486. void (*init)(struct r8152 *);
  487. int (*enable)(struct r8152 *);
  488. void (*disable)(struct r8152 *);
  489. void (*up)(struct r8152 *);
  490. void (*down)(struct r8152 *);
  491. void (*unload)(struct r8152 *);
  492. } rtl_ops;
  493. u32 coalesce;
  494. u16 ocp_base;
  495. u8 version;
  496. #ifdef CONFIG_DM_ETH
  497. struct ueth_data ueth;
  498. #endif
  499. };
  500. int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
  501. u16 size, void *data, u16 type);
  502. int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
  503. void *data, u16 type);
  504. int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data);
  505. int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
  506. u16 size, void *data);
  507. int usb_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data);
  508. int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
  509. u16 size, void *data);
  510. u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index);
  511. void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data);
  512. u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index);
  513. void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data);
  514. u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index);
  515. void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data);
  516. u16 ocp_reg_read(struct r8152 *tp, u16 addr);
  517. void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data);
  518. void sram_write(struct r8152 *tp, u16 addr, u16 data);
  519. int r8152_wait_for_bit(struct r8152 *tp, bool ocp_reg, u16 type, u16 index,
  520. const u32 mask, bool set, unsigned int timeout);
  521. void r8152b_firmware(struct r8152 *tp);
  522. void r8153_firmware(struct r8152 *tp);
  523. #endif