gmac.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:31k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Definitions for the GMAC ethernet chip, used in the
  3.  * Apple G4 powermac.
  4.  */
  5. /* 
  6.  * GMAC register definitions
  7.  * 
  8.  * Note: We encode the register size the same way Apple does. I didn't copy
  9.  *       Apple's source as-is to avoid licence issues however. That's really
  10.  *       painful to re-define all those registers ...
  11.  *       The constants themselves were partially found in OF code, in Sun
  12.  *       GEM driver and in Apple's Darwin GMAC driver
  13.  */
  14. #define REG_SZ_8 0x00000000
  15. #define REG_SZ_16 0x40000000
  16. #define REG_SZ_32 0x80000000
  17. #define REG_MASK 0x0FFFFFFF
  18. /*
  19.  * Global registers
  20.  */
  21. /* -- 0x0004 RW Global configuration
  22.  * d: 0x00000042
  23.  */
  24. #define GM_GCONF (0x0004 | REG_SZ_16)
  25. #define GM_GCONF_BURST_SZ 0x0001 /* 1: 64 bytes/burst, 0: infinite */
  26. #define GM_GCONF_TXDMA_LIMIT_MASK 0x003e /* 5-1: No of 64 bytes transfers */
  27. #define GM_GCONF_TXDMA_LIMIT_SHIFT 1
  28. #define GM_GCONF_RXDMA_LIMIT_MASK 0x07c0 /* 10-6: No of 64 bytes transfers */
  29. #define GM_GCONF_RXDMA_LIMIT_SHIFT 6
  30. /* -- 0x000C R-C Global Interrupt status. 
  31.  * d: 0x00000000 bits 0-6 cleared on read (C)
  32.  */
  33. #define GM_IRQ_STATUS (0x000c | REG_SZ_32)
  34. #define GM_IRQ_TX_INT_ME 0x00000001 /* C Frame with INT_ME bit set in fifo */
  35. #define GM_IRQ_TX_ALL 0x00000002 /* C TX descriptor ring empty */
  36. #define GM_IRQ_TX_DONE 0x00000004 /* C moved from host to TX fifo */
  37. #define GM_IRQ_RX_DONE 0x00000010 /* C moved from RX fifo to host */
  38. #define GM_IRQ_RX_NO_BUF 0x00000020 /* C No RX buffer available */
  39. #define GM_IRQ_RX_TAG_ERR 0x00000040 /* C RX tag error */
  40. #define GM_IRQ_PCS 0x00002000 /* PCS interrupt ? */
  41. #define GM_IRQ_MAC_TX 0x00004000 /* MAC tx register set */
  42. #define GM_IRQ_MAC_RX 0x00008000 /* MAC rx register set  */
  43. #define GM_IRQ_MAC_CTRL 0x00010000 /* MAC control register set  */
  44. #define GM_IRQ_MIF 0x00020000 /* MIF status register set */
  45. #define GM_IRQ_BUS_ERROR 0x00040000 /* Bus error status register set */
  46. #define GM_IRQ_TX_COMP 0xfff80000 /* TX completion mask */
  47. /* -- 0x0010 RW Interrupt mask. 
  48.  * d: 0xFFFFFFFF
  49.  */
  50. #define GM_IRQ_MASK (0x0010 | REG_SZ_32)
  51. /* -- 0x0014 WO Interrupt ack.
  52.  *  Ack. "high" interrupts
  53.  */
  54. #define GM_IRQ_ACK (0x0014 | REG_SZ_32)
  55. /* -- 0x001C WO Alias of status register (no auto-clear of "low" interrupts)
  56.  */
  57. #define GM_IRQ_ALT_STAT (0x001C | REG_SZ_32)
  58. /* -- 0x1000 R-C PCI Error status register
  59.  */
  60. #define GM_PCI_ERR_STAT (0x1000 | REG_SZ_8)
  61. #define GM_PCI_ERR_BAD_ACK 0x01 /* Bad Ack64 */
  62. #define GM_PCI_ERR_TIMEOUT 0x02 /* Transaction timeout */
  63. #define GM_PCI_ERR_OTHER 0x04 /* Any other PCI error */
  64. /* -- 0x1004 RW PCI Error mask register
  65.  * d: 0xFFFFFFFF
  66.  */
  67. #define GM_PCI_ERR_MASK (0x1004 | REG_SZ_8)
  68. /* -- 0x1008 RW BIF Configuration
  69.  * d: 0x00000000
  70.  */
  71. #define GM_BIF_CFG (0x1008 | REG_SZ_8)
  72. #define GM_BIF_CFG_SLOWCLK 0x01 /* for parity error timing */
  73. #define GM_BIF_CFG_HOST_64 0x02 /* 64-bit host */
  74. #define GM_BIF_CFG_B64D_DIS 0x04 /* no 64-bit wide data cycle */
  75. #define GM_BIF_CFG_M66EN 0x08 /* Read-only: sense if configured for 66MHz */
  76. /* -- 0x100C RW BIF Diagnostic ???
  77.  */
  78. #define GM_BIF_DIAG (0x100C | REG_SZ_32)
  79. #define GM_BIF_DIAG_BURST_STATE 0x007F0000
  80. #define GM_BIF_DIAG_STATE_MACH 0xFF000000
  81. /* -- 0x1010 RW Software reset
  82.  * Lower two bits reset TX and RX, both reset whole gmac. They come back
  83.  * to 0 when reset is complete.
  84.  * bit 2 force RSTOUT# pin when set (PHY reset)
  85.  */
  86. #define GM_RESET (0x1010 | REG_SZ_8)
  87. #define GM_RESET_TX 0x01
  88. #define GM_RESET_RX 0x02
  89. #define GM_RESET_RSTOUT 0x04 /* PHY reset */
  90. /*
  91.  * Tx DMA Registers
  92.  */
  93. /* -- 0x2000 RW Tx Kick
  94.  * d: 0x00000000 Written by the host with the last tx descriptor number +1 to send
  95.  */
  96. #define GM_TX_KICK (0x2000 | REG_SZ_16)
  97. /* -- 0x2004 RW Tx configuration
  98.  * d: 0x118010 Controls operation of Tx DMA channel
  99.  */
  100. #define GM_TX_CONF (0x2004 | REG_SZ_32)
  101. #define GM_TX_CONF_DMA_EN 0x00000001 /* Tx DMA enable */
  102. #define GM_TX_CONF_RING_SZ_MASK 0x0000001e /* Tx desc ring size */
  103. #define GM_TX_CONF_RING_SZ_SHIFT 1 /* Tx desc ring size shift */
  104. #define GM_TX_CONF_FIFO_PIO 0x00000020 /* Tx fifo PIO select ??? */
  105. #define GM_TX_CONF_FIFO_THR_MASK 0x001ffc00 /* Tx fifo threshold */
  106. #define GM_TX_CONF_FIFO_THR_SHIFT 10 /* Tx fifo threshold shift */
  107. #define GM_TX_CONF_FIFO_THR_DEFAULT 0x7ff /* Tx fifo threshold default */
  108. #define GM_TX_CONF_PACED_MODE 0x00100000 /* 1: tx_all irq after last descriptor */
  109. /* 0: tx_all irq when tx fifo empty */
  110. #define GM_TX_RING_SZ_32 (0 << 1)
  111. #define GM_TX_RING_SZ_64 (1 << 1)
  112. #define GM_TX_RING_SZ_128 (2 << 1)
  113. #define GM_TX_RING_SZ_256 (3 << 1)
  114. #define GM_TX_RING_SZ_512 (4 << 1)
  115. #define GM_TX_RING_SZ_1024 (5 << 1)
  116. #define GM_TX_RING_SZ_2048 (6 << 1)
  117. #define GM_TX_RING_SZ_4086 (7 << 1)
  118. #define GM_TX_RING_SZ_8192 (8 << 1)
  119. /* -- 0x2008 RW Tx descriptor ring base low
  120.  * -- 0x200C RW Tx descriptor ring base high
  121.  *
  122.  * Base of tx ring, must be 2k aligned
  123.  */
  124. #define GM_TX_DESC_LO (0x2008 | REG_SZ_32)
  125. #define GM_TX_DESC_HI (0x200C | REG_SZ_32)
  126.  
  127. /* -- 0x2100 RW Tx Completion
  128.  * d: 0x00000000 Written by the gmac with the last tx descriptor number +1 sent
  129.  */
  130. #define GM_TX_COMP (0x2100 | REG_SZ_16)
  131. /*
  132.  * Rx DMA registers
  133.  */
  134. /* -- 0x4000 RW Rx configuration
  135.  * d: 0x1000010 Controls operation of Rx DMA channel
  136.  */
  137. #define GM_RX_CONF (0x4000 | REG_SZ_32)
  138. #define GM_RX_CONF_DMA_EN 0x00000001 /* Rx DMA enable */
  139. #define GM_RX_CONF_RING_SZ_MASK 0x0000001e /* Rx desc ring size */
  140. #define GM_RX_CONF_RING_SZ_SHIFT 1
  141. #define GM_RX_CONF_BATCH_DIS 0x00000020 /* Rx batch disable */
  142. #define GM_RX_CONF_FBYTE_OFF_MASK 0x00001c00 /* First byte offset (10-12) */
  143. #define GM_RX_CONF_FBYTE_OFF_SHIFT 10
  144. #define GM_RX_CONF_CHK_START_MASK 0x000FE000 /* Checksum start offset */
  145. #define GM_RX_CONF_CHK_START_SHIFT 13
  146. #define GM_RX_CONF_DMA_THR_MASK 0x07000000 /* Rx DMA threshold */
  147. #define GM_RX_CONF_DMA_THR_SHIFT 24 /* Rx DMA threshold shift */
  148. #define GM_RX_CONF_DMA_THR_DEFAULT 1 /* Rx DMA threshold default */
  149. #define GM_RX_RING_SZ_32 (0 << 1)
  150. #define GM_RX_RING_SZ_64 (1 << 1)
  151. #define GM_RX_RING_SZ_128 (2 << 1)
  152. #define GM_RX_RING_SZ_256 (3 << 1)
  153. #define GM_RX_RING_SZ_512 (4 << 1)
  154. #define GM_RX_RING_SZ_1024 (5 << 1)
  155. #define GM_RX_RING_SZ_2048 (6 << 1)
  156. #define GM_RX_RING_SZ_4086 (7 << 1)
  157. #define GM_RX_RING_SZ_8192 (8 << 1)
  158. /* -- 0x4004 RW Rx descriptor ring base low
  159.  * -- 0x4008 RW Rx descriptor ring base high
  160.  *
  161.  * Base of rx ring
  162.  */
  163. #define GM_RX_DESC_LO (0x4004 | REG_SZ_32)
  164. #define GM_RX_DESC_HI (0x4008 | REG_SZ_32)
  165. /* -- 0x4020 RW Rx pause threshold
  166.  * d: 0x000000f8
  167.  *
  168.  * Two PAUSE thresholds are used to define when PAUSE flow control frames are
  169.  * emitted by GEM. The granularity of these thresholds is in 64 byte increments.
  170.  * XOFF PAUSE frames use the pause_time value pre-programmed in the
  171.  * Send PAUSE MAC Register.
  172.  * XON PAUSE frames use a pause_time of 0.
  173.  */
  174. #define GM_RX_PTH (0x4020 | REG_SZ_32)
  175. /*
  176.  * 0-8: XOFF PAUSE emitted when RX FIFO
  177.  * occupancy rises above this value (times 64 bytes)
  178.  */
  179. #define GM_RX_PTH_OFF_MASK 0x000001ff
  180. #define GM_RX_PTH_OFF_SHIFT 0
  181. /*
  182.  * 12-20: XON PAUSE emitted when RX FIFO
  183.  * occupancy falls below this value (times 64 bytes)
  184.  */
  185. #define GM_RX_PTH_ON_MASK 0x001ff000
  186. #define GM_RX_PTH_ON_SHIFT 12
  187. #define GM_RX_PTH_UNITS 64
  188. /* -- 0x4100 RW Rx Kick
  189.  * d: 0x00000000 The last valid RX descriptor is the one right before the value of the
  190.  *                      register. Initially set to 0 on reset. RX descriptors must be posted
  191.  *                      in multiples of 4. The first descriptor should be cache-line aligned
  192.  *                      for best performance.
  193.  */
  194. #define GM_RX_KICK (0x4100 | REG_SZ_16)
  195. /* -- 0x4104 RW Rx Completion
  196.  * d: 0x00000000 All descriptors upto but excluding the register value are ready to be
  197.  *                      processed by the host.
  198.  */
  199. #define GM_RX_COMP (0x4104 | REG_SZ_16)
  200.  
  201. /* -- 0x4108 RW Rx Blanking
  202.  * d: 0x00000000 Written by the gmac with the last tx descriptor number +1 sent
  203.  *
  204.  * Defines the values used for receive interrupt blanking.
  205.  * For INTR_TIME field, every count is 2048 PCI clock time. For 66 Mhz, each
  206.  * count is about 15 ns.
  207.  */
  208. #define GM_RX_BLANK (0x4108 | REG_SZ_32)
  209. /*
  210.  * 0-8:no.of pkts to be recvd since the last RX_DONE
  211.  * interrupt, before a new interrupt
  212.  */
  213. #define GM_RX_BLANK_INTR_PACKETS_MASK 0x000001ff
  214. #define GM_RX_BLANK_INTR_PACKETS_SHIFT 0
  215. /*
  216.  * 12-19 : no. of clocks to be counted since the last
  217.  * RX_DONE interrupt, before a new interrupt
  218.  */
  219. #define GM_RX_BLANK_INTR_TIME_MASK 0x000ff000
  220. #define GM_RX_BLANK_INTR_TIME_SHIFT 12
  221. #define GM_RX_BLANK_UNITS 2048
  222. /* -- 0x4120 RO Rx fifo size
  223.  *
  224.  * This 11-bit RO register indicates the size, in 64-byte multiples, of the
  225.  * RX FIFO. Software should use it to properly configure the PAUSE thresholds.
  226.  * The value read is 0x140, indicating a 20kbyte RX FIFO.
  227.  * -------------------------------------------------------------------------
  228.  */
  229. #define GM_RX_FIFO_SIZE (0x4120 | REG_SZ_16)
  230. #define GM_RZ_FIFO_SIZE_UNITS 64
  231. /*
  232.  * MAC regisers
  233.  */
  234. /* -- 0x6000 MAC Tx reset control
  235.  */
  236. #define GM_MAC_TX_RESET (0x6000 | REG_SZ_8)
  237. #define GM_MAC_TX_RESET_NOW 0x01
  238. /* -- 0x6004 MAC Rx reset control
  239.  */
  240. #define GM_MAC_RX_RESET (0x6004 | REG_SZ_8)
  241. #define GM_MAC_RX_RESET_NOW 0x01
  242. /* -- 0x6008 Send Pause command register
  243.  */
  244. #define GM_MAC_SND_PAUSE (0x6008 | REG_SZ_32)
  245. #define GM_MAC_SND_PAUSE_TIME_MASK 0x0000ffff
  246. #define GM_MAC_SND_PAUSE_TIME_SHIFT 0
  247. #define GM_MAC_SND_PAUSE_NOW 0x00010000
  248. #define GM_MAC_SND_PAUSE_DEFAULT 0x00001bf0
  249. /* -- 0x6010 MAC transmit status
  250.  */
  251. #define GM_MAC_TX_STATUS (0x6010 | REG_SZ_16)
  252. #define GM_MAC_TX_STAT_SENT 0x0001
  253. #define GM_MAC_TX_STAT_UNDERRUN 0x0002
  254. #define GM_MAC_TX_STAT_MAX_PKT_ERR 0x0004
  255. #define GM_MAC_TX_STAT_NORM_COLL_OVF 0x0008
  256. #define GM_MAC_TX_STAT_EXCS_COLL_OVF 0x0010
  257. #define GM_MAC_TX_STAT_LATE_COLL_OVF 0x0020
  258. #define GM_MAC_TX_STAT_FIRS_COLL_OVF 0x0040
  259. #define GM_MAC_TX_STAT_DEFER_TIMER_OVF 0x0080
  260. #define GM_MAC_TX_STAT_PEAK_ATTMP_OVF 0x0100
  261. /* -- 0x6014 MAC receive status
  262.  */
  263. #define GM_MAC_RX_STATUS (0x6014 | REG_SZ_16)
  264. #define GM_MAC_RX_STAT_RECEIVED 0x0001
  265. #define GM_MAC_RX_STAT_FIFO_OVF 0x0002
  266. #define GM_MAC_RX_STAT_FRAME_CTR_OVF 0x0004
  267. #define GM_MAC_RX_STAT_ALIGN_ERR_OVF 0x0008
  268. #define GM_MAC_RX_STAT_CRC_ERR_OVF 0x0010
  269. #define GM_MAC_RX_STAT_LEN_ERR_OVF 0x0020
  270. #define GM_MAC_RX_STAT_CODE_ERR_OVF 0x0040
  271. /* -- 0x6018 MAC control & status
  272.  */
  273. #define GM_MAC_CTRLSTAT (0x6018 | REG_SZ_32)
  274. #define GM_MAC_CTRLSTAT_PAUSE_RCVD 0x00000001
  275. #define GM_MAC_CTRLSTAT_PAUSE_STATE 0x00000002
  276. #define GM_MAC_CTRLSTAT_PAUSE_NOT 0x00000004
  277. #define GM_MAC_CTRLSTAT_PAUSE_TIM_MASK 0xffff0000
  278. #define GM_MAC_CTRLSTAT_PAUSE_TIM_SHIFT 16
  279. /* -- 0x6020 MAC Tx mask
  280.  *  Same bits as MAC Tx status
  281.  */
  282. #define GM_MAC_TX_MASK (0x6020 | REG_SZ_16)
  283. /* -- 0x6024 MAC Rx mask
  284.  *  Same bits as MAC Rx status
  285.  */
  286. #define GM_MAC_RX_MASK (0x6024 | REG_SZ_16)
  287. /* -- 0x6028 MAC Control/Status mask
  288.  *  Same bits as MAC control/status low order byte
  289.  */
  290. #define GM_MAC_CTRLSTAT_MASK (0x6024 | REG_SZ_8)
  291. /* -- 0x6030 MAC Tx configuration
  292.  */
  293. #define GM_MAC_TX_CONFIG (0x6030 | REG_SZ_16)
  294. #define GM_MAC_TX_CONF_ENABLE 0x0001
  295. #define GM_MAC_TX_CONF_IGNORE_CARRIER 0x0002
  296. #define GM_MAC_TX_CONF_IGNORE_COLL 0x0004
  297. #define GM_MAC_TX_CONF_ENABLE_IPG0 0x0008
  298. #define GM_MAC_TX_CONF_DONT_GIVEUP 0x0010
  299. #define GM_MAC_TX_CONF_DONT_GIVEUP_NLMT 0x0020
  300. #define GM_MAC_TX_CONF_NO_BACKOFF 0x0040
  301. #define GM_MAC_TX_CONF_SLOWDOWN 0x0080
  302. #define GM_MAC_TX_CONF_NO_FCS 0x0100
  303. #define GM_MAC_TX_CONF_CARRIER_EXT 0x0200
  304. /* -- 0x6034 MAC Rx configuration
  305.  */
  306. #define GM_MAC_RX_CONFIG (0x6034 | REG_SZ_16)
  307. #define GM_MAC_RX_CONF_ENABLE 0x0001
  308. #define GM_MAC_RX_CONF_STRIP_PAD 0x0002
  309. #define GM_MAC_RX_CONF_STIP_FCS 0x0004
  310. #define GM_MAC_RX_CONF_RX_ALL 0x0008
  311. #define GM_MAC_RX_CONF_RX_ALL_MULTI 0x0010
  312. #define GM_MAC_RX_CONF_HASH_ENABLE 0x0020
  313. #define GM_MAC_RX_CONF_ADDR_FLTR_ENABLE 0x0040
  314. #define GM_MAC_RX_CONF_PASS_ERROR_FRAM 0x0080
  315. #define GM_MAC_RX_CONF_CARRIER_EXT 0x0100
  316. /* -- 0x6038 MAC control configuration
  317.  */
  318. #define GM_MAC_CTRL_CONFIG (0x6038 | REG_SZ_8)
  319. #define GM_MAC_CTRL_CONF_SND_PAUSE_EN 0x01
  320. #define GM_MAC_CTRL_CONF_RCV_PAUSE_EN 0x02
  321. #define GM_MAC_CTRL_CONF_PASS_CTRL_FRAM 0x04
  322. /* -- 0x603c MAC XIF configuration */
  323. #define GM_MAC_XIF_CONFIG (0x603c | REG_SZ_8)
  324. #define GM_MAC_XIF_CONF_TX_MII_OUT_EN 0x01
  325. #define GM_MAC_XIF_CONF_MII_INT_LOOP 0x02
  326. #define GM_MAC_XIF_CONF_DISABLE_ECHO 0x04
  327. #define GM_MAC_XIF_CONF_GMII_MODE 0x08
  328. #define GM_MAC_XIF_CONF_MII_BUFFER_EN 0x10
  329. #define GM_MAC_XIF_CONF_LINK_LED 0x20
  330. #define GM_MAC_XIF_CONF_FULL_DPLX_LED 0x40
  331. /* -- 0x6040 MAC inter-packet GAP 0
  332.  */
  333. #define GM_MAC_INTR_PKT_GAP0 (0x6040 | REG_SZ_8)
  334. #define GM_MAC_INTR_PKT_GAP0_DEFAULT 0x00
  335. /* -- 0x6044 MAC inter-packet GAP 1
  336.  */
  337. #define GM_MAC_INTR_PKT_GAP1 (0x6044 | REG_SZ_8)
  338. #define GM_MAC_INTR_PKT_GAP1_DEFAULT 0x08
  339. /* -- 0x6048 MAC inter-packet GAP 2
  340.  */
  341. #define GM_MAC_INTR_PKT_GAP2 (0x6048 | REG_SZ_8)
  342. #define GM_MAC_INTR_PKT_GAP2_DEFAULT 0x04
  343. /* -- 604c MAC slot time
  344.  */
  345. #define GM_MAC_SLOT_TIME (0x604C | REG_SZ_16)
  346. #define GM_MAC_SLOT_TIME_DEFAULT 0x0040
  347. /* -- 6050 MAC minimum frame size
  348.  */
  349. #define GM_MAC_MIN_FRAME_SIZE (0x6050 | REG_SZ_16)
  350. #define GM_MAC_MIN_FRAME_SIZE_DEFAULT 0x0040
  351. /* -- 6054 MAC maximum frame size
  352.  */
  353. #define GM_MAC_MAX_FRAME_SIZE (0x6054 | REG_SZ_16)
  354. #define GM_MAC_MAX_FRAME_SIZE_DEFAULT 0x05ee
  355. #define GM_MAC_MAX_FRAME_SIZE_ALIGN 0x5f0
  356. /* -- 6058 MAC preamble length
  357.  */
  358. #define GM_MAC_PREAMBLE_LEN (0x6058 | REG_SZ_16)
  359. #define GM_MAC_PREAMBLE_LEN_DEFAULT 0x0007
  360. /* -- 605c MAC jam size
  361.  */
  362. #define GM_MAC_JAM_SIZE (0x605c | REG_SZ_8)
  363. #define GM_MAC_JAM_SIZE_DEFAULT 0x04
  364. /* -- 6060 MAC attempt limit
  365.  */
  366. #define GM_MAC_ATTEMPT_LIMIT (0x6060 | REG_SZ_8)
  367. #define GM_MAC_ATTEMPT_LIMIT_DEFAULT 0x10
  368. /* -- 6064 MAC control type
  369.  */
  370. #define GM_MAC_CONTROL_TYPE (0x6064 | REG_SZ_16)
  371. #define GM_MAC_CONTROL_TYPE_DEFAULT 0x8808
  372. /* -- 6080 MAC address 15..0
  373.  * -- 6084 MAC address 16..31
  374.  * -- 6088 MAC address 32..47
  375.  */
  376. #define GM_MAC_ADDR_NORMAL0 (0x6080 | REG_SZ_16)
  377. #define GM_MAC_ADDR_NORMAL1 (0x6084 | REG_SZ_16)
  378. #define GM_MAC_ADDR_NORMAL2 (0x6088 | REG_SZ_16)
  379. /* -- 608c MAC alternate address 15..0
  380.  * -- 6090 MAC alternate address 16..31
  381.  * -- 6094 MAC alternate address 32..47
  382.  */
  383. #define GM_MAC_ADDR_ALT0 (0x608c | REG_SZ_16)
  384. #define GM_MAC_ADDR_ALT1 (0x6090 | REG_SZ_16)
  385. #define GM_MAC_ADDR_ALT2 (0x6094 | REG_SZ_16)
  386. /* -- 6098 MAC control address 15..0
  387.  * -- 609c MAC control address 16..31
  388.  * -- 60a0 MAC control address 32..47
  389.  */
  390. #define GM_MAC_ADDR_CTRL0 (0x6098 | REG_SZ_16)
  391. #define GM_MAC_ADDR_CTRL1 (0x609c | REG_SZ_16)
  392. #define GM_MAC_ADDR_CTRL2 (0x60a0 | REG_SZ_16)
  393. /* -- 60a4 MAC address filter (0_0)
  394.  * -- 60a8 MAC address filter (0_1)
  395.  * -- 60ac MAC address filter (0_2)
  396.  */
  397. #define GM_MAC_ADDR_FILTER0 (0x60a4 | REG_SZ_16)
  398. #define GM_MAC_ADDR_FILTER1 (0x60a8 | REG_SZ_16)
  399. #define GM_MAC_ADDR_FILTER2 (0x60ac | REG_SZ_16)
  400. /* -- 60b0 MAC address filter mask 1,2
  401.  */
  402. #define GM_MAC_ADDR_FILTER_MASK1_2 (0x60b0 | REG_SZ_8)
  403. /* -- 60b4 MAC address filter mask 0
  404.  */
  405. #define GM_MAC_ADDR_FILTER_MASK0 (0x60b4 | REG_SZ_16)
  406. /* -- [60c0 .. 60fc] MAC hash table
  407.  */
  408. #define GM_MAC_ADDR_FILTER_HASH0 (0x60c0 | REG_SZ_16)
  409. /* -- 6100 MAC normal collision counter
  410.  */
  411. #define GM_MAC_COLLISION_CTR (0x6100 | REG_SZ_16)
  412. /* -- 6104 MAC 1st successful collision counter
  413.  */
  414. #define GM_MAC_FIRST_COLLISION_CTR (0x6104 | REG_SZ_16)
  415. /* -- 6108 MAC excess collision counter
  416.  */
  417. #define GM_MAC_EXCS_COLLISION_CTR (0x6108 | REG_SZ_16)
  418. /* -- 610c MAC late collision counter
  419.  */
  420. #define GM_MAC_LATE_COLLISION_CTR (0x610c | REG_SZ_16)
  421. /* -- 6110 MAC defer timer counter
  422.  */
  423. #define GM_MAC_DEFER_TIMER_COUNTER (0x6110 | REG_SZ_16)
  424. /* -- 6114 MAC peak attempts
  425.  */
  426. #define GM_MAC_PEAK_ATTEMPTS (0x6114 | REG_SZ_16)
  427. /* -- 6118 MAC Rx frame counter
  428.  */
  429. #define GM_MAC_RX_FRAME_CTR (0x6118 | REG_SZ_16)
  430. /* -- 611c MAC Rx length error counter
  431.  */
  432. #define GM_MAC_RX_LEN_ERR_CTR (0x611c | REG_SZ_16)
  433. /* -- 6120 MAC Rx alignment error counter
  434.  */
  435. #define GM_MAC_RX_ALIGN_ERR_CTR (0x6120 | REG_SZ_16)
  436. /* -- 6124 MAC Rx CRC error counter
  437.  */
  438. #define GM_MAC_RX_CRC_ERR_CTR (0x6124 | REG_SZ_16)
  439. /* -- 6128 MAC Rx code violation error counter
  440.  */
  441. #define GM_MAC_RX_CODE_VIOLATION_CTR (0x6128 | REG_SZ_16)
  442. /* -- 6130 MAC random number seed
  443.  */
  444. #define GM_MAC_RANDOM_SEED (0x6130 | REG_SZ_16)
  445. /* -- 6134 MAC state machine
  446.  */
  447. #define GM_MAC_STATE_MACHINE (0x6134 | REG_SZ_8)
  448. /*
  449.  * MIF registers
  450.  */
  451. /* -- 0x6200 RW MIF bit bang clock
  452.  */
  453. #define GM_MIF_BB_CLOCK (0x6200 | REG_SZ_8)
  454. /* -- 0x6204 RW MIF bit bang data
  455.  */
  456. #define GM_MIF_BB_DATA (0x6204 | REG_SZ_8)
  457. /* -- 0x6208 RW MIF bit bang output enable
  458.  */
  459. #define GM_MIF_BB_OUT_ENABLE (0x6208 | REG_SZ_8)
  460. /* -- 0x620c RW MIF frame control & data
  461.  */
  462. #define GM_MIF_FRAME_CTL_DATA (0x620c | REG_SZ_32)
  463. #define GM_MIF_FRAME_START_MASK 0xc0000000
  464. #define GM_MIF_FRAME_START_SHIFT 30
  465. #define GM_MIF_FRAME_OPCODE_MASK 0x30000000
  466. #define GM_MIF_FRAME_OPCODE_SHIFT 28
  467. #define GM_MIF_FRAME_PHY_ADDR_MASK 0x0f800000
  468. #define GM_MIF_FRAME_PHY_ADDR_SHIFT 23
  469. #define GM_MIF_FRAME_REG_ADDR_MASK 0x007c0000
  470. #define GM_MIF_FRAME_REG_ADDR_SHIFT 18
  471. #define GM_MIF_FRAME_TURNAROUND_HI 0x00020000
  472. #define GM_MIF_FRAME_TURNAROUND_LO 0x00010000
  473. #define GM_MIF_FRAME_DATA_MASK 0x0000ffff
  474. #define GM_MIF_FRAME_DATA_SHIFT 0
  475. /* -- 0x6210 RW MIF config reg
  476.  */
  477. #define GM_MIF_CFG (0x6210 | REG_SZ_16)
  478. #define GM_MIF_CFGPS 0x00000001 /* PHY Select */
  479. #define GM_MIF_CFGPE 0x00000002 /* Poll Enable */
  480. #define GM_MIF_CFGBB 0x00000004 /* Bit Bang Enable */
  481. #define GM_MIF_CFGPR_MASK 0x000000f8 /* Poll Register address */
  482. #define GM_MIF_CFGPR_SHIFT 3
  483. #define GM_MIF_CFGM0 0x00000100 /* MDIO_0 Data / MDIO_0 attached */
  484. #define GM_MIF_CFGM1 0x00000200 /* MDIO_1 Data / MDIO_1 attached */
  485. #define GM_MIF_CFGPD_MASK 0x00007c00 /* Poll Device PHY address */
  486. #define GM_MIF_CFGPD_SHIFT 10
  487. #define GM_MIF_POLL_DELAY 200
  488. #define GM_INTERNAL_PHYAD 1 /* PHY address for int. transceiver */
  489. #define GM_EXTERNAL_PHYAD 0 /* PHY address for ext. transceiver */
  490. /* -- 0x6214 RW MIF interrupt mask reg
  491.  * same as basic/status Register
  492.  */
  493. #define GM_MIF_IRQ_MASK (0x6214 | REG_SZ_16)
  494. /* -- 0x6218 RW MIF basic/status reg
  495.  * The Basic portion of this register indicates the last
  496.  * value of the register read indicated in the POLL REG field
  497.  * of the Configuration Register.
  498.  * The Status portion indicates bit(s) that have changed.
  499.  * The MIF Mask register is corresponding to this register in
  500.  * terms of the bit(s) that need to be masked for generating
  501.  * interrupt on the MIF Interrupt Bit of the Global Status Rgister.
  502.  */
  503. #define GM_MIF_STATUS (0x6218 | REG_SZ_32)
  504. #define GM_MIF_STATUS_MASK 0x0000ffff /* 0-15 : Status */
  505. #define GM_MIF_BASIC_MASK 0xffff0000 /* 16-31 : Basic register */
  506. /*
  507.  * PCS link registers
  508.  */
  509. /* -- 0x9000 RW PCS mii control reg
  510.  */
  511. #define GM_PCS_CONTROL (0x9000 | REG_SZ_16)
  512. /* -- 0x9004 RW PCS mii status reg
  513.  */
  514. #define GM_PCS_STATUS (0x9004 | REG_SZ_16)
  515. /* -- 0x9008 RW PCS mii advertisement
  516.  */
  517. #define GM_PCS_ADVERTISEMENT (0x9008 | REG_SZ_16)
  518. /* -- 0x900c RW PCS mii LP ability
  519.  */
  520. #define GM_PCS_ABILITY (0x900c | REG_SZ_16)
  521. /* -- 0x9010 RW PCS config
  522.  */
  523. #define GM_PCS_CONFIG (0x9010 | REG_SZ_8)
  524. /* -- 0x9014 RW PCS state machine
  525.  */
  526. #define GM_PCS_STATE_MACHINE (0x9014 | REG_SZ_32)
  527. /* -- 0x9018 RW PCS interrupt status
  528.  */
  529. #define GM_PCS_IRQ_STATUS (0x9018 | REG_SZ_8)
  530. /* -- 0x9050 RW PCS datapath mode
  531.  */
  532. #define GM_PCS_DATAPATH_MODE (0x9050 | REG_SZ_8)
  533. #define GM_PCS_DATAPATH_INTERNAL 0x01 /* Internal serial link */
  534. #define GM_PCS_DATAPATH_SERDES 0x02 /* 10-bit Serdes interface */
  535. #define GM_PCS_DATAPATH_MII 0x04 /* Select mii/gmii mode */
  536. #define GM_PCS_DATAPATH_GMII_OUT 0x08 /* serial mode only, copy data to gmii */
  537. /* -- 0x9054 RW PCS serdes control
  538.  */
  539. #define GM_PCS_SERDES_CTRL (0x9054 | REG_SZ_8)
  540. /* -- 0x9058 RW PCS serdes output select
  541.  */
  542. #define GM_PCS_SERDES_SELECT (0x9058 | REG_SZ_8)
  543. /* -- 0x905c RW PCS serdes state
  544.  */
  545. #define GM_PCS_SERDES_STATE (0x905c | REG_SZ_8)
  546. /*
  547.  * PHY registers
  548.  */
  549. /*
  550.  * Standard PHY registers (from de4x5.h)
  551.  */
  552. #define MII_CR       0x00          /* MII Management Control Register */
  553. #define MII_SR       0x01          /* MII Management Status Register */
  554. #define MII_ID0      0x02          /* PHY Identifier Register 0 */
  555. #define MII_ID1      0x03          /* PHY Identifier Register 1 */
  556. #define MII_ANA      0x04          /* Auto Negotiation Advertisement */
  557. #define MII_ANLPA    0x05          /* Auto Negotiation Link Partner Ability */
  558. #define MII_ANE      0x06          /* Auto Negotiation Expansion */
  559. #define MII_ANP      0x07          /* Auto Negotiation Next Page TX */
  560. /*
  561. ** MII Management Control Register
  562. */
  563. #define MII_CR_RST  0x8000         /* RESET the PHY chip */
  564. #define MII_CR_LPBK  0x4000         /* Loopback enable */
  565. #define MII_CR_SPD   0x2000         /* 0: 10Mb/s; 1: 100Mb/s */
  566. #define MII_CR_10    0x0000         /* Set 10Mb/s */
  567. #define MII_CR_100   0x2000         /* Set 100Mb/s */
  568. #define MII_CR_ASSE  0x1000         /* Auto Speed Select Enable */
  569. #define MII_CR_PD    0x0800         /* Power Down */
  570. #define MII_CR_ISOL  0x0400         /* Isolate Mode */
  571. #define MII_CR_RAN   0x0200         /* Restart Auto Negotiation */
  572. #define MII_CR_FDM   0x0100         /* Full Duplex Mode */
  573. #define MII_CR_CTE   0x0080         /* Collision Test Enable */
  574. #define MII_CR_SPEEDSEL2 0x0040 /* Speed selection 2 on BCM */
  575. /*
  576. ** MII Management Status Register
  577. */
  578. #define MII_SR_T4C  0x8000         /* 100BASE-T4 capable */
  579. #define MII_SR_TXFD 0x4000         /* 100BASE-TX Full Duplex capable */
  580. #define MII_SR_TXHD 0x2000         /* 100BASE-TX Half Duplex capable */
  581. #define MII_SR_TFD  0x1000         /* 10BASE-T Full Duplex capable */
  582. #define MII_SR_THD  0x0800         /* 10BASE-T Half Duplex capable */
  583. #define MII_SR_ASSC 0x0020         /* Auto Speed Selection Complete*/
  584. #define MII_SR_RFD  0x0010         /* Remote Fault Detected */
  585. #define MII_SR_ANC  0x0008         /* Auto Negotiation capable */
  586. #define MII_SR_LKS  0x0004         /* Link Status */
  587. #define MII_SR_JABD 0x0002         /* Jabber Detect */
  588. #define MII_SR_XC   0x0001         /* Extended Capabilities */
  589. /*
  590. ** MII Management Auto Negotiation Advertisement Register
  591. */
  592. #define MII_ANA_TAF  0x03e0        /* Technology Ability Field */
  593. #define MII_ANA_T4AM 0x0200        /* T4 Technology Ability Mask */
  594. #define MII_ANA_TXAM 0x0180        /* TX Technology Ability Mask */
  595. #define MII_ANA_FDAM 0x0140        /* Full Duplex Technology Ability Mask */
  596. #define MII_ANA_HDAM 0x02a0        /* Half Duplex Technology Ability Mask */
  597. #define MII_ANA_100M 0x0380        /* 100Mb Technology Ability Mask */
  598. #define MII_ANA_10M  0x0060        /* 10Mb Technology Ability Mask */
  599. #define MII_ANA_CSMA 0x0001        /* CSMA-CD Capable */
  600. /*
  601. ** MII Management Auto Negotiation Remote End Register
  602. */
  603. #define MII_ANLPA_NP   0x8000      /* Next Page (Enable) */
  604. #define MII_ANLPA_ACK  0x4000      /* Remote Acknowledge */
  605. #define MII_ANLPA_RF   0x2000      /* Remote Fault */
  606. #define MII_ANLPA_TAF  0x03e0      /* Technology Ability Field */
  607. #define MII_ANLPA_T4AM 0x0200      /* T4 Technology Ability Mask */
  608. #define MII_ANLPA_TXAM 0x0180      /* TX Technology Ability Mask */
  609. #define MII_ANLPA_FDAM 0x0140      /* Full Duplex Technology Ability Mask */
  610. #define MII_ANLPA_HDAM 0x02a0      /* Half Duplex Technology Ability Mask */
  611. #define MII_ANLPA_100M 0x0380      /* 100Mb Technology Ability Mask */
  612. #define MII_ANLPA_10M  0x0060      /* 10Mb Technology Ability Mask */
  613. #define MII_ANLPA_CSMA 0x0001      /* CSMA-CD Capable */
  614. #define MII_ANLPA_PAUS 0x0400 
  615. /* Generic PHYs
  616.  * 
  617.  * These GENERIC values assumes that the PHY devices follow 802.3u and
  618.  * allow parallel detection to set the link partner ability register.
  619.  * Detection of 100Base-TX [H/F Duplex] and 100Base-T4 is supported.
  620.  */
  621. /*
  622.  * Model-specific PHY registers
  623.  *
  624.  * Note: Only the BCM5201 is described here for now. I'll add the 5400 once
  625.  *       I see a machine using it in real world.
  626.  */
  627. /* Supported PHYs (phy_type field ) */
  628. #define PHY_B5400 0x5400
  629. #define PHY_B5401 0x5401
  630. #define PHY_B5411 0x5411
  631. #define PHY_B5201 0x5201
  632. #define PHY_B5221 0x5221
  633. #define PHY_LXT971 0x0971
  634. #define PHY_UNKNOWN 0
  635. /* Identification (for multi-PHY) */
  636. #define MII_BCM5201_OUI                         0x001018
  637. #define MII_BCM5201_MODEL                       0x21
  638. #define MII_BCM5201_REV                         0x01
  639. #define MII_BCM5201_ID                          ((MII_BCM5201_OUI << 10) | (MII_BCM5201_MODEL << 4))
  640. #define MII_BCM5201_MASK                        0xfffffff0
  641. #define MII_BCM5221_OUI                         0x001018
  642. #define MII_BCM5221_MODEL                       0x1e
  643. #define MII_BCM5221_REV                         0x00
  644. #define MII_BCM5221_ID                          ((MII_BCM5221_OUI << 10) | (MII_BCM5221_MODEL << 4))
  645. #define MII_BCM5221_MASK                        0xfffffff0
  646. #define MII_BCM5400_OUI                         0x000818
  647. #define MII_BCM5400_MODEL                       0x04
  648. #define MII_BCM5400_REV                         0x01
  649. #define MII_BCM5400_ID                          ((MII_BCM5400_OUI << 10) | (MII_BCM5400_MODEL << 4))
  650. #define MII_BCM5400_MASK                        0xfffffff0
  651. #define MII_BCM5401_OUI                         0x000818
  652. #define MII_BCM5401_MODEL                       0x05
  653. #define MII_BCM5401_REV                         0x01
  654. #define MII_BCM5401_ID                          ((MII_BCM5401_OUI << 10) | (MII_BCM5401_MODEL << 4))
  655. #define MII_BCM5401_MASK                        0xfffffff0
  656. #define MII_BCM5411_OUI                         0x000818
  657. #define MII_BCM5411_MODEL                       0x07
  658. #define MII_BCM5411_REV                         0x01
  659. #define MII_BCM5411_ID                          ((MII_BCM5411_OUI << 10) | (MII_BCM5411_MODEL << 4))
  660. #define MII_BCM5411_MASK                        0xfffffff0
  661. #define MII_LXT971_OUI                          0x0004de
  662. #define MII_LXT971_MODEL                        0x0e
  663. #define MII_LXT971_REV                          0x00
  664. #define MII_LXT971_ID                           ((MII_LXT971_OUI << 10) | (MII_LXT971_MODEL << 4))
  665. #define MII_LXT971_MASK                         0xfffffff0
  666. /* BCM5201 AUX STATUS register */
  667. #define MII_BCM5201_AUXCTLSTATUS 0x18
  668. #define MII_BCM5201_AUXCTLSTATUS_DUPLEX 0x0001
  669. #define MII_BCM5201_AUXCTLSTATUS_SPEED 0x0002
  670. /* MII BCM5201 MULTIPHY interrupt register */
  671. #define MII_BCM5201_INTERRUPT 0x1A
  672. #define MII_BCM5201_INTERRUPT_INTENABLE 0x4000
  673. #define MII_BCM5201_AUXMODE2 0x1B
  674. #define MII_BCM5201_AUXMODE2_LOWPOWER 0x0008
  675. #define MII_BCM5201_MULTIPHY                    0x1E
  676. /* MII BCM5201 MULTIPHY register bits */
  677. #define MII_BCM5201_MULTIPHY_SERIALMODE         0x0002
  678. #define MII_BCM5201_MULTIPHY_SUPERISOLATE       0x0008
  679. /* MII BCM5400 1000-BASET Control register */
  680. #define MII_BCM5400_GB_CONTROL 0x09
  681. #define MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP 0x0200
  682. /* MII BCM5400 AUXCONTROL register */
  683. #define MII_BCM5400_AUXCONTROL                  0x18
  684. #define MII_BCM5400_AUXCONTROL_PWR10BASET       0x0004
  685. /* MII BCM5400 AUXSTATUS register */
  686. #define MII_BCM5400_AUXSTATUS                   0x19
  687. #define MII_BCM5400_AUXSTATUS_LINKMODE_MASK     0x0700
  688. #define MII_BCM5400_AUXSTATUS_LINKMODE_SHIFT    8  
  689. /* MII LXT971 STATUS2 register */
  690. #define MII_LXT971_STATUS2 0x11
  691. #define MII_LXT971_STATUS2_SPEED 0x4000
  692. #define MII_LXT971_STATUS2_LINK 0x0400
  693. #define MII_LXT971_STATUS2_FULLDUPLEX 0x0200
  694. #define MII_LXT971_STATUS2_AUTONEG_COMPLETE 0x0080
  695. /*
  696.  * DMA descriptors
  697.  */
  698. /* 
  699.  * Descriptor counts and buffer sizes
  700.  */
  701. #define NTX 64 /* must be power of 2 */
  702. #define NTX_CONF GM_TX_RING_SZ_64
  703. #define NRX 64 /* must be power of 2 */
  704. #define NRX_CONF GM_RX_RING_SZ_64
  705. #define RX_COPY_THRESHOLD 256
  706. #define GMAC_BUFFER_ALIGN 32 /* Align on a cache line */
  707. #define RX_BUF_ALLOC_SIZE (ETH_FRAME_LEN + GMAC_BUFFER_ALIGN + 2)
  708. #define RX_OFFSET 2
  709. /*
  710.  * Definitions of Rx and Tx descriptors
  711.  */
  712. struct gmac_dma_desc {
  713. unsigned int size; /* data size and OWN bit */
  714. unsigned int flags; /* flags */
  715. unsigned int lo_addr; /* phys addr, low 32 bits */
  716. unsigned int hi_addr;
  717. };
  718. /*
  719.  * Rx bits
  720.  */
  721.  
  722. /* Bits in size */
  723. #define RX_SZ_OWN 0x80000000 /* 1 = owned by chip */
  724. #define RX_SZ_MASK 0x7FFF0000
  725. #define RX_SZ_SHIFT 16
  726. #define RX_SZ_CKSUM_MASK 0x0000FFFF
  727. /* Bits in flags */
  728. #define RX_FL_CRC_ERROR 0x40000000
  729. #define RX_FL_ALT_ADDR 0x20000000 /* Packet rcv. from alt MAC address */
  730. /* 
  731.  * Tx bits
  732.  */
  733. /* Bits in size */
  734. #define TX_SZ_MASK 0x00007FFF
  735. #define TX_SZ_CRC_MASK 0x00FF8000
  736. #define TX_SZ_CRC_STUFF 0x1F000000
  737. #define TX_SZ_CRC_ENABLE 0x20000000
  738. #define TX_SZ_EOP 0x40000000
  739. #define TX_SZ_SOP 0x80000000
  740. /* Bits in flags */
  741. #define TX_FL_INTERRUPT 0x00000001
  742. #define TX_FL_NO_CRC 0x00000002
  743. /*
  744.  * Other stuffs
  745.  */
  746.  
  747. struct gmac {
  748. volatile unsigned int *regs; /* hardware registers, virtual addr */
  749. struct net_device *dev;
  750. struct device_node *of_node;
  751. unsigned long tx_desc_page; /* page for DMA descriptors */
  752. unsigned long rx_desc_page; /* page for DMA descriptors */
  753. volatile struct gmac_dma_desc *rxring;
  754. struct sk_buff *rx_buff[NRX];
  755. int next_rx;
  756. volatile struct gmac_dma_desc *txring;
  757. struct sk_buff *tx_buff[NTX];
  758. int next_tx;
  759. int tx_gone;
  760. int phy_addr;
  761. unsigned int phy_id;
  762. int phy_type;
  763. int phy_status; /* Cached PHY status */
  764. int full_duplex; /* Current set to full duplex */
  765. int gigabit; /* Current set to 1000BT */
  766. struct net_device_stats stats;
  767. u8 pci_bus;
  768. u8 pci_devfn;
  769. spinlock_t lock;
  770. int opened;
  771. int sleeping;
  772. struct net_device *next_gmac;
  773. };
  774. /* Register access macros. We hope the preprocessor will be smart enough
  775.  * to optimize them into one single access instruction
  776.  */
  777. #define GM_OUT(reg, v) (((reg) & REG_SZ_32) ? out_le32(gm->regs + 
  778. (((reg) & REG_MASK)>>2), (v))  
  779. : (((reg) & REG_SZ_16) ? out_le16((volatile u16 *) 
  780. (gm->regs + (((reg) & REG_MASK)>>2)), (v))  
  781. : out_8((volatile u8 *)(gm->regs + 
  782. (((reg) & REG_MASK)>>2)), (v))))
  783. #define GM_IN(reg) (((reg) & REG_SZ_32) ? in_le32(gm->regs + 
  784. (((reg) & REG_MASK)>>2))  
  785. : (((reg) & REG_SZ_16) ? in_le16((volatile u16 *) 
  786. (gm->regs + (((reg) & REG_MASK)>>2)))  
  787. : in_8((volatile u8 *)(gm->regs + 
  788. (((reg) & REG_MASK)>>2)))))
  789. #define GM_BIS(r, v) GM_OUT((r), GM_IN(r) | (v))
  790. #define GM_BIC(r, v) GM_OUT((r), GM_IN(r) & ~(v))
  791. /* Wrapper to alloc_skb to test various alignements */
  792. #define GMAC_ALIGNED_RX_SKB_ADDR(addr) 
  793.         ((((unsigned long)(addr) + GMAC_BUFFER_ALIGN - 1) & 
  794.         ~(GMAC_BUFFER_ALIGN - 1)) - (unsigned long)(addr))
  795.         
  796. static inline struct sk_buff *
  797. gmac_alloc_skb(unsigned int length, int gfp_flags)
  798. {
  799. struct sk_buff *skb;
  800. skb = alloc_skb(length + GMAC_BUFFER_ALIGN, gfp_flags);
  801. if(skb) {
  802. int offset = GMAC_ALIGNED_RX_SKB_ADDR(skb->data);
  803. if(offset)
  804. skb_reserve(skb, offset);
  805. }
  806. return skb;
  807. }