r8152.h 16 KB

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